From 4155dfc74a3076305e66dd0323590d343e5f046a Mon Sep 17 00:00:00 2001 From: Robert Gabriel Jakabosky Date: Fri, 11 Jul 2025 17:40:41 +0800 Subject: [PATCH 01/97] Subsidise more pallets. (#1840) * Subsidise more pallets. * Fix typo. --- Cargo.lock | 2 +- Cargo.toml | 2 +- pallets/runtime/common/src/runtime.rs | 3 +++ pallets/runtime/develop/src/runtime.rs | 2 +- pallets/runtime/mainnet/src/runtime.rs | 2 +- pallets/runtime/testnet/src/runtime.rs | 2 +- 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bf10f0dbba..4da740422d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6146,7 +6146,7 @@ dependencies = [ [[package]] name = "polymesh" -version = "7.3.0-rc3" +version = "7.3.0-rc4" dependencies = [ "clap", "frame-benchmarking", diff --git a/Cargo.toml b/Cargo.toml index 7b8a17cc5f..2bce6177e6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polymesh" -version = "7.3.0-rc3" +version = "7.3.0-rc4" authors = ["PolymeshAssociation"] build = "build.rs" edition = "2021" diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 4724c58e00..4bb6d0fed0 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -321,8 +321,11 @@ macro_rules! misc_pallet_impls { fn allowed(call: &RuntimeCall, nested: bool) -> bool { match call { RuntimeCall::Asset(_) => true, + RuntimeCall::CapitalDistribution(_) => true, + RuntimeCall::Checkpoint(_) => true, RuntimeCall::ComplianceManager(_) => true, RuntimeCall::CorporateAction(_) => true, + RuntimeCall::CorporateBallot(_) => true, RuntimeCall::ExternalAgents(_) => true, RuntimeCall::Portfolio(_) => true, RuntimeCall::Settlement(_) => true, diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index d32a12c4cb..6d9a80cc9b 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -55,7 +55,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { authoring_version: 1, // `spec_version: aaa_bbb_ccd` should match node version v`aaa.bbb.cc` // N.B. `d` is unpinned from the binary version - spec_version: 7_003_002, + spec_version: 7_003_003, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index f7a245a5d2..fe60d7d8c2 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -53,7 +53,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { authoring_version: 1, // `spec_version: aaa_bbb_ccd` should match node version v`aaa.bbb.cc` // N.B. `d` is unpinned from the binary version - spec_version: 7_003_002, + spec_version: 7_003_003, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index 31f9f54c62..b3f92e4857 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -55,7 +55,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { authoring_version: 1, // `spec_version: aaa_bbb_ccd` should match node version v`aaa.bbb.cc` // N.B. `d` is unpinned from the binary version - spec_version: 7_003_002, + spec_version: 7_003_003, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, From 68e74448ce941c43813c795f78b26579fb7cf16d Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 14 Jul 2025 14:31:26 -0300 Subject: [PATCH 02/97] Add missing runtime API to schema (#1841) * Add missing runtime API * Fix return type --- polymesh_schema.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/polymesh_schema.json b/polymesh_schema.json index b11e4794db..f6d0fde087 100644 --- a/polymesh_schema.json +++ b/polymesh_schema.json @@ -1249,6 +1249,26 @@ } ], "type": "Vec" + }, + "instruction_asset_count": { + "description": "Returns the AssetCount for the given instruction.", + "params": [ + { + "name": "instruction_id", + "type": "InstructionId" + } + ], + "type": "AssetCount" + }, + "lock_instruction_weight": { + "description": "Returns the weight for executing lock_instruction.", + "params": [ + { + "name": "instruction_id", + "type": "InstructionId" + } + ], + "type": "Result" } }, "version": 2 From 75bdbfa39e3a088741a33bd7d4db52fbbe41ca2f Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 15 Jul 2025 10:56:14 -0300 Subject: [PATCH 03/97] Allow relocking an instruction (#1842) --- .../src/settlement_pallet/lock_instruction.rs | 38 +++++++++++++++++++ pallets/settlement/src/lib.rs | 35 ++++++++++++----- 2 files changed, 63 insertions(+), 10 deletions(-) diff --git a/pallets/runtime/tests/src/settlement_pallet/lock_instruction.rs b/pallets/runtime/tests/src/settlement_pallet/lock_instruction.rs index 8cbd0f4886..bba3e92d91 100644 --- a/pallets/runtime/tests/src/settlement_pallet/lock_instruction.rs +++ b/pallets/runtime/tests/src/settlement_pallet/lock_instruction.rs @@ -548,3 +548,41 @@ fn success() { ); }); } + +#[test] +fn lock_twice_success() { + ExtBuilder::default().build().execute_with(|| { + System::set_block_number(1); + + let bob = User::new(AccountKeyring::Bob); + let dave = User::new(AccountKeyring::Dave); + let alice = User::new(AccountKeyring::Alice); + + add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); + + assert_ok!(Settlement::lock_instruction( + dave.origin(), + InstructionId(0), + Weight::MAX + )); + + assert_ok!(Settlement::lock_instruction( + dave.origin(), + InstructionId(0), + Weight::MAX + )); + + assert_eq!( + InstructionStatuses::::get(InstructionId(0)), + InstructionStatus::LockedForExecution + ); + + assert!(LockedTimestamp::::get(InstructionId(0)).is_some()); + + let mut system_events = System::events(); + assert_eq!( + system_events.pop().unwrap().event, + EventTest::Settlement(Event::InstructionLocked(dave.did, InstructionId(0))) + ); + }); +} diff --git a/pallets/settlement/src/lib.rs b/pallets/settlement/src/lib.rs index e3eb5e9af3..30a2cd5434 100644 --- a/pallets/settlement/src/lib.rs +++ b/pallets/settlement/src/lib.rs @@ -1843,7 +1843,7 @@ impl Pallet { .map_err(|_| Error::::WeightLimitExceeded)?; } - Self::validate_execute_instruction_pre_conditions(&inst_id, &inst_legs)?; + Self::validate_execute_instruction_pre_conditions(&inst_id, &inst_legs, false)?; let inst_memo = InstructionMemos::::get(&inst_id); let mut failed_leg_id = None; @@ -1884,8 +1884,9 @@ impl Pallet { fn validate_execute_instruction_pre_conditions( inst_id: &InstructionId, inst_legs: &[(LegId, Leg)], + allow_locked_inst: bool, ) -> DispatchResult { - Self::ensure_instruction_is_pending_or_failed(inst_id)?; + Self::ensure_instruction_is_pending_or_failed(inst_id, allow_locked_inst)?; ensure!( InstructionAffirmsPending::::get(inst_id) == 0, @@ -1902,14 +1903,28 @@ impl Pallet { Ok(()) } - /// Returns `Ok` if the instruction status is `Pending` or `Failed`. - fn ensure_instruction_is_pending_or_failed(inst_id: &InstructionId) -> DispatchResult { + /// Returns `Ok` if the instruction status is `Pending` or `Failed`. If `allow_locked_inst` + /// `LockedForExecution` is also allowed. + fn ensure_instruction_is_pending_or_failed( + inst_id: &InstructionId, + allow_locked_inst: bool, + ) -> DispatchResult { let inst_status = InstructionStatuses::::get(inst_id); - ensure!( - inst_status == InstructionStatus::Pending || inst_status == InstructionStatus::Failed, - Error::::InvalidInstructionStatusForExecution - ); + if allow_locked_inst { + ensure!( + inst_status == InstructionStatus::Pending + || inst_status == InstructionStatus::Failed + || inst_status == InstructionStatus::LockedForExecution, + Error::::InvalidInstructionStatusForExecution + ); + } else { + ensure!( + inst_status == InstructionStatus::Pending + || inst_status == InstructionStatus::Failed, + Error::::InvalidInstructionStatusForExecution + ); + } Ok(()) } @@ -3231,7 +3246,7 @@ impl Pallet { ), )?; - Self::validate_execute_instruction_pre_conditions(&inst_id, &inst_legs)?; + Self::validate_execute_instruction_pre_conditions(&inst_id, &inst_legs, true)?; let inst_memo = InstructionMemos::::get(&inst_id); frame_support_with_transaction(|| { @@ -3489,7 +3504,7 @@ impl Pallet { execution_errors.push(Error::::NotAllAffirmationsHaveBeenReceived.into()); } - if let Err(e) = Self::ensure_instruction_is_pending_or_failed(inst_id) { + if let Err(e) = Self::ensure_instruction_is_pending_or_failed(inst_id, false) { execution_errors.push(e); } From 1b8c0daa6385aa319a0590e58dd702ff0c937930 Mon Sep 17 00:00:00 2001 From: Robert Gabriel Jakabosky Date: Wed, 16 Jul 2025 22:00:01 +0800 Subject: [PATCH 04/97] Remove rc4 from version. Update metadata snapshots. (#1843) --- .metadata/polymesh_dev/7003003.meta | Bin 0 -> 407109 bytes .metadata/polymesh_mainnet/7003003.meta | Bin 0 -> 405204 bytes .metadata/polymesh_testnet/7003003.meta | Bin 0 -> 405204 bytes Cargo.lock | 2 +- Cargo.toml | 2 +- 5 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 .metadata/polymesh_dev/7003003.meta create mode 100644 .metadata/polymesh_mainnet/7003003.meta create mode 100644 .metadata/polymesh_testnet/7003003.meta diff --git a/.metadata/polymesh_dev/7003003.meta b/.metadata/polymesh_dev/7003003.meta new file mode 100644 index 0000000000000000000000000000000000000000..1a519b757b435c2f12658f6d2d799df850056c20 GIT binary patch literal 407109 zcmeFa50qqAwKsH5^_|Hbs6Yog?^WLGym#}_`KZdP-1LM_?1WCfsp;;SZqhy7=|9O# zGGkRu)$QqGs;eq>t7fJ#=%7J^1`QfCC@5&qpg}=Fc?t?j6cjX3P*6~wf(CtPP|(L( zu$I4l{@i=+pQ`SeB;)#Avj}&p?>&F^*=L`9_St)%y?4A`^&P)@JIjvyopP<+^>VfD zZl~8SmTI+jztvl;zwd6wEM{@%@&5Gto%h{+hW=zD4r9#5|JZ>MmbE9hy44-8?C<(L zZzrhR+G^Wli>-wYIS@X7Lse8Qc zblVpi_4wd%>%lFN-@3zgFJrwm;;x%=h^%&r7~$Idpyl8_!ND9Q8Y$cDLu$ z8-AzSt8E`y^}2KF_iVH3`@P?L`~+voggKJ$oIn~`r9K{5|AHjP$h*vybt@?m+#$MUOPZ%y`Qvm<gmn+OW*qqxOJ*S%_UA0{5#i??M!momVhd>g0?My>SdVqvn&(TPh$1Lrtg~J9 zy-!+vY?Xch2_6+(;?_Llxn8@|sQI6=c#a0W0hBIfE1h<8cgOR$^~99xsM2hA#??ek zYB;GO#$U{>izRHaRo*ez^!@h>m}XRQG|tAcvKv@L7VGg#YGF0xt3>G$=BPD=;+Oc7 zv2~aze}FA)bgM1DS|gHQtzrzVp2eQ!FRGfo@N2mvKPMVF$ehJG>NR@17JDw}6wE}t zOO(HXEzQ>J>sap?)~aSZ7JGp6AE<86b=&<;tYXoLeq3z%J>o8RKS=YtswQBzy@Qq1 z^E`{qbN(AurKaBwYSSp7+dcdsI|N8|&1G-rEV$!#qhqnntAi9Rz6}WXYTKDZ(`2M)|N*b zo5eoH`AJ1&ZS_)BVDCb+p6_E}S?uGSZ>VCve5Xsjn~fjGBCB_*7W+h43izgXy41~B zV>>IYCOEFeKF|4O)mUSv+!k*WQ2sGkYro#M*mpT^>aOu3QScTvR`Puh%l`YEcT`F2 zk6tfP^iQxJs+~r!+Qd%U>o(5ziEUV{pW!d5iZ%JYjBPh4kZ9*mS$=lgtDWz(8^mrt zp5agF>cQ(orE!M6XQ$I_(4t?iwyNi7H~4&pzo6>|U(49D>2souTiMKPy9>DhJ48wF zJd6D}!#^9epuUwQL-Z33{F%`JIBl~H@NXR9pH4JzR(wp<|8q9F+US68=0}2A>EK18 z;B9PT72?ZQyV<}Tesm<5aT038+eDSW#fspjy>_kLJVyNQ^CSEj1s4Pm@xBbvDN*k| zY+}8(?bZ8DLg*L6u6+GAQDuVV*S%h^>B;@#FGqq21lg$9iAuMlQV+6~-^2cCv0oaM zg4c;kf1733d%!@!;@fI4elJPH?`6(L*Q@&dF7}{BD_HYA^)k_Jo{ewz8cnfhEnC5w z2SL-jMDYR}Jql64Vh>w}; z=0FH+>;QVK^$@uo^)k`hB+H)I!phhUC#|)WWG9E&_I%TmqK6U#1mhM`m&HC}@mDkg zRk1P%S)5YJf|-|vpqA(!C#ltJGeNt@s*R>sxA}C?tk>jpz}rygqHBv;?F5z9IWAk7xgKnD%rh`Cek zo+muyaBjc>Gu}TRg^;~nLP#o($(loD&&G+q*uo&eMDpGP2Lu z$w9pYQ>&_Gb0@^<5^{WTB|KU(&L*&h$#W&kFm`%SgR(jN+>-!TWz)4y`^^he7{3|9ACZg+@LrFt8w#pK zm(5P$@akQ{$QtLcc5R-$xD5i1G9Wb@qkP8TOH>Ukw^s_7ikLFNoUlkmb8cR=ehkW_ zIu7fiKuRmz`g*(-a2)5X=d~PCMAgABoqWHgn=QCS)h=nCG_j;LoHm+__1ci$s70sO zb{ak3sr9>Ehy%d@7w25-bNp?G4jtM6TYDS|gjVlNe!JI$czD-c^>)p7{r*{q)!@u- zqkR{x%{%G!U1$4^X8kTv!M{^bvwv5?@x(#6P7R*j1*>fMnn}{DOWC-VE;)VUqjaQya;CnmswuuMX|>zsbP z-l!KfMvCIA)*_yPga=i{me6y`awx!Nh|?~*$yTZ zdc~fT7f@hfNqiLpWop4)RU5Yg;b^~$RhYdJC`RlDIFX~?+OcVgUAMYJdSj=(<@8(4 zb`2YR03Y7(!qXoML~H_QVzSQUH(UDC@GcKnwK19m z6Q_xHy09ikx#mGd-EEM>1r>UHyonbEVX$X-jt*6Q?7!LNBwz*xNLEq+(X`Q@TaB)7 z%u`#u^q~*MB&!*5e{`%ty6|fE9E=8-ad25EuX>&@3fG}^#&_C-gE=4-w)@%BkLz_& z)L)8@QM?TG3cx;d4O!lkR!**LQvF}%_UMUr%fliZB@(jOWuTt1%h{#iNEE2${i4=p zmK*iR3MP}yv=AINHy7v1OYAl6#=Qs9rer|CNs&g2aP|G>*?G_!m!quOCVZm(F zFA;+6_!hB`?s@j9pdsqVcY?XnNO0MV1c#2BRHU#PRKb9JoHvMLCwl)qpA)tg*ym;0ClQPQOYBGIuyLyLg-Xy4fLQXjV2uT*gBmCSNSqaqWS=cX z(djf%pNO;3bwUtUB?!KrJp!a~$?O)^NvvX`VP75U_ZAjD%Zo-e#$tb4*{6dZs6z+m zPu)kLB49Ui37gUxL`Oq}<6UU9`w$(&%0;0rFkTeqRwaD_e+v4&g^V~Z4`eT^Rs^tE z`x<`^6alSsIQp{}B&_Xb-K1!}S2;xKL|Th;g**=6jh%F2=A2LIDHg@BcUHuYG?JZ^ zeb%VG!lWp+=3M~eP10$y;Ty6Y*)Y&ZRirSY2j;R!;|t;h2(GZ^or9Lt>!x&Z8|S%= z2IQ?Sv$Gvh;k|x{sculyWlMSS*%1r?XK&OgER_1a?RK~EA+co(^yK1eeSpwh;CxjH z#>P2~4gq;-=Vo`p))Hxd4n6`=E(L=(=W}5*%h-8aJy_bZ73iv*stKK(43{0|dG+4+ z>gBUwU_D49a4!&Yulf!8hVY2$*r4T)V3cL3S*k^7?mCU`ZecY7p_<8o=bJqT{kH69 zBMpM7$cYw5F38PlL|)frU(@6G5XPZtAOsdK%~2FKA`P#3AB3uO$Wd%hP~V>YQKUtH zDx0J&lDK0ZA~!bNwmf8Oz_IM!5a3EfH24g;C*axa=_ue3P|1bm$|1WHX=lyrb$3k# z$JLX;joB~ZsO8~=+&bq(Isul^i_;`M3VsVk$`xbuX&B7cyeIk%Y*|<@$J*Tl!?oCb zoR6Mux0~!8*>BIz&7rfPf>4$U4o~nI!a&Gc=knm3Wus1E6`cy^v)sjc#mQG4DyKDy1*mr~;1owHnMT-|;Fc2= z*?7fe&*iC-wgE`S2IV@b{3K%~5DQDeu7~Z&m&!Cq_mPwLX!hHsX445uO36SSi}cdO zK7wXzG_5wu{sMKXM0B=e*>o}!KV{D z>Mh`;v4SygoOfj}OVxg?m|Wl_=mioPaZT!~Ff+RiWzrDQG>XW?arNEV)1rlNPYPtw zXY;E-C(e*!N0O!D(rMv{?thc)+SoD^)nYdWv24Onz2s zBLpO=02Z#{8TENMDt(%LI`t4b&9D10&hj_-bGdixvsY*gxm1fuY+h!d^%PDn}|% zuQ#_Y{(=4kdJ}2Lw@Um)o*jF1yA1;XgE3+o$`y-!i5HK;G)(HZnG(*TEH{6N73{6w?mMj8vF!AynhFB8n7(W8@bFVB9 z;_+`ed3?d?XGO|{AMd2BE^kTxLA z!Q}~^t=Hfy4RlSE;2{pLtR9$c_@0c-{oN&42KsQA4BuzSbEw%&ei&g&>Vcbf-gb_Am)2mww@b?~ z+}ou`VXwDKoA3y=OB-^*oc!ad)9Xo20%?Ac}ZxA82o_u}~o9QN&pPO$=hAA`%6y)noB0>777 z5ziCsPG&DW#9U@CuduuD<|LcMbCw;(bA{cFy36c+_}c@4<7C zO{0Z1b{~FkvitEo#omwSV{8VveTY4P=LZ-@$W*9bxwTEGyx8oE>HM`Xg+X z*~cG-ySqKV#^&*yXUFi|V8@w#>>;**=L%cI^8@SycrLPs@LXd{sCA4jGkf(IJArW> zV=H)5Vyk#AGtArZdA5cg=h-@bFR%?f7uhDBYwQs`m)N6t&asntuCh~jZnDSl++dI6 zd7Pcb^8`DC=cDZJ#q$&^W276bg6A@;Vn#~rEPkJ0H9R+29ka8}JUmaZEj;JgIXu_c zHl7c&2A=cmgLp2p^LQ??CY~E?huI%kW-UBdSsTxJ*1>ayJps%=#-K2JXrB3aF0vk; ztE`Xb8oPk!qwFG{$Jr%jFO}FXo{z8(;dzw(eR!_3C-GckAI9?(`}^@+Wd8u38|*Tk zo9rW)@rT$yi05(k58?SJdkW7}?4x)-!v0}Am)Jjo=LUNk&jt1|JRfHND4uKVAH#E# zJp*gV2KzXEpJe|yW@MTD6Zk#Hp2c&PeFD!D?4QJQp8ZpJuCwRxEU{1G`561B@myyA z3|xas?0G!b*r)JZW&bRmOYEP+YC6F_jo-8EGk8A6{&_qX*}s72Jo_x3$Jyub++_bE zp2yg~gw|Hs3;4alKF{oxW%e(FDjs703Z9R$7x7$YU%<1({#87WvwscGQ;>n})p__5cw z1pANB+ByVIdwrI@jOP;jkMTUt{u4YOV&B1Yk$o4>qwGJ$bA|n9%zmuIz6Y9IXWz%0 zb@rcQy{xnU0=+-PUcs9=_9~uh?7zhG1MI)T^D*`VJm=XDu{Iaje~sU#*nfjn^C+Y_ zd*cJ_$9O)*{#!g3*nfxT668C3<2d^%o)5AA9?uo_Kj66miO=3R!Tt)*HTFN^xy=42 zJZIU@@qC2+g4vtL+5e1ZiTy8_$9eV|;5^EHi8t%)f5mf|{cm`lVt2c9R`>v%4*Ujt*u*#C)fEwKL!ls3wQ$OHJ55z0F&30=<48h(TH@Myi2@e0=mflxRs;srP8+*#_oF5UU){Vv4 zhvwImvGsN|F#?A#Y%YaJk1Ww43Zd|w>HSSrmBv%3#^)kRyg6u)BS&nWuat1h#P5ZA zxV1KUF_Sy|WgamRvm@dYuDS>t9JEG&Vp{u@NM*hSECh=E44Z?-N8e$S76W$nF`|uWS{?^g6f?G{WIt|oO8G~*dkveoQXok-uq$5^MqDEVq%BSEEN21Q@Py;ofjEiRCWCAPDuy` z*ccFx{*#%D+U1p_KH=*Ahg+H>OW_dLk>nQT~0qafythA`0 z{p~i|hbuD7z|^+xi(ms{YgKqA;UCQZ=UN(!pUAUyiMnmgk)dcRTgA=eOQVWGf6W001bN+E|%exnGg; zwe&$Lf$d~2;}&H0h+;e7;__}}D(lIUHKxqL)`; z>)UFadr&#@Gy7w3@!4q$@36e&Q&@@HWbIM@x3J}iE}cAVkg|kwJS#{i(JHVAuQe!j z;d3bqR1E5<6x<&{XAean%;o<5m>}UP^xq^PeWIaM6#Pxv zRHu(t(^oenu&z_;bZ{}ts}CIL{`f_V)9H`I8`j+XUI9mT*l<`q$Zlq5>b_C-CT9-ciXm<1ZahlFM*wN`C zEFJ1UYm%%yaM5{CiYC{O)4_Fz0AbgU)37>UKTgx_-@Wfkp1OXHzJ89T%a7sN_4+wl zt7PanV`z1PGw}6uH1ti^&(S!UU(L$7evZa1`M)c571z(v*U!-@8u{zzXkq_#DgMTp z>*v?&=hxmY91yOXgRh%|-}-nz)$8Zi>*v?2k;1Rrfhksz@F>t`g!B^~nOLQ=^|~E+ zfbnRbek0fIz)}ARL+3;RHLu%&y{_;LgZIx{qa(O}e!YHvy?%Zj8b8vzetx}ve!YHv zz3$EoT^9L{zt!<-8$5`qrxSTZ+?Ww@f$`}XeQQPq)*It0*eC^yin^9^N4FD?M8Xc-b5_}Ck zk#wk(z~@y)elZ7;9-V8*V2ax7i$Yhbj8xWhM(_H25{x7Iz@z1%(Kj8Eob*mh@tDh4 z&kqGsJJ7jHdd?-zlPKH&ykjzOk19UzBi4&DjE?*q;;E{GQC5SwbYu6ne0`4$PK74& z_6^h3(41wxb^i69l^ z^(eiPt4-fs)$2+6OIMrZKKRDgR8CG}oMaL1NBMe&tNsS-I|x=OFe^xy^c8{>l-sm{ z*1%KL-OwP*V<-I0t|`p6_3d<+r5kc8$N|@qSdJ~cD<*;zOdi^UH7SJF-2fDQXpgL- zHv^Qn?E#9!6K*gq=!GKqW2p|$(Fid6W=IoNs+-(T-)=n}TNjc&;{KJWA?~KFYADq0 zwYLC{Yy=~;J~i)X^bjgDgryRLMc!CN49S?Jk9*hMRjlU^Jfq+K}=9=`G@)aQmH; z42qT=SvlOJaWnD#(uqO@JJ*5Y;bTvp6+x$W%6hV>jI#zm{BKg3pj#P1j$Z9lFHtfN z6|J6_eAl~J?TU0a^e^$8AOK!$WsLz>$Z`{l^3HQI@_l@0NM1oB3p~BUfyo}h!Eq~0 zBzKSvxZ~>xBZO=nlyC>Lk`!kKb(OJhLUk)Nhz#N!k3nA*7ChUBn>n1)K@)3Fg5Wg5~9?*)r*vF zM&K;5P6qG?o0dd$CdA>jj-dCd&9d&YBHZxw<|E${YHHj4)_GtCixr{vRp|aoU5MJW z#AJpKD)~g;>w9kQAqpl91~U=xg#@_iqc~)J1(d39t%SVnyl7Cbj9@Xl8|!lR1f@gv zlquEN+pL#}DGJ&aHy~t6G!TTiY))$mRMkP+6-pR3P60uY#0)8dQc?SM>$W%w5q*`e z^lq3aDBxGOsMHu#cc2vCt%t!eJ;ap5 z)_^$wLL|2N>2tWliWH6%nvZTS*FZK&agHwqxbg?UKWe>>HQ7+D3y4G{Kx9>+5CTv| zRcpI~JAv5~UO-#n47klS7}r#8gf|b$o2(m&?jvBT{m;mw05ULQ|6@(4@(o-k?jYK< zyJ19!R+EhT6xsd4*-S&aVwf?iSP*yc5GFmKpL9xi7X%rJE+T-C-%zvyXbgBSlN)URCAux_)j{q`vtaQVy|I^lu-e-8N3pcDw6HGTuyo*Qu|EPtK z=_w+0pI#HPBRB_zfn1kKS3whtE!>8r1b4J%kX}VxrU%6(cx@I;#uSrOM!QOw$PicZ zkZ5wux+J@D{Gb!u=MQ>uS7#|ggpgv8=T~26-0w^-K-j^$(Jhpb3OFLuEr2}?`F^u? zIqV+Gq?5$dH9Q~nc{ZABFAqtw3^}`X&JV;?BgoG#w_|6aIGaVx)O?7Y51Z2N_*ofr zG7KW|Vcc*$*yrpciDmsC)Qa1T<;zcsSV5h*%%Z=cVQmY;;baW=KWFqwB$3hjo&V?O02_lu+xXPSu z%V4oD@lg>YmWvy?KGG>qQhd`YJsb!jNB~4>NLE@z) zE#>_R#)J6sI$Nj~@+%QxT?j(=@H~~hQ^x@+$Xme#gd3AjNvy2nP~cPaQ^B|EeI%l$ zG+0u)$L6?n`f+Lw$teIhHFEllYfa8m5vLL57kuT`BQ_BvlM+$TqA z1oRNgRjd^~XdxLZS0utrn7d0JdUYLuOL0+XbSU;|L4=OdTSC^MssuRFES=j%yrllQ za|n2LEkoFRBE*==haSUNb{aTP8ulJ`Bw$TxxqG{1h#j9qTvq)VnI3#lll2UtEhr@- z7X`Pkp}1={=(My-M=)?&>-kxorBOzQ>+MEsbVNZH`I|*X3YM`xy+;i)cu?+&Yskz# z32u`46leGkv7SD|^XxM`yNXnzlt=>!#QHu$l0h!%RI|W9Znb|F#7)Yc&mmZpSHJt7 zdk)`s|NZ*)=XiEp)a`oX>Z4J`GULjAK6E+_GSx?>P+0Ap*_nQ_>j~ijHcAlB|6LpdHMy zZxN&~bM|rqzJ>skBtcFF=8TkqpgVez7m z@31vfz>gG@DkBv=6>&a@1S6oV_IWxb%gn2?*6A~O#B2;?+&sy2R0FxA2IYU^)_t@= zleR|`JbgwsFQsB^nEHevm8+x@gJqIV=#<=;_$@^_A@cVwQQE7zn_ovmC4Ua@_8e1Y zKV!Ovy!QK{UsRPcWF%+n@}vmasXP>%c*H9serK4{hrP-{CDa}zX<_j?Kh<9;B?4oA zg{dN<78NvK^17hjUvpkjfyyaWHDtdvVlq?>U+v36UJ(+Ga77^HiW0BHVBD9DxL9{N zSX0_HT6Kk}BqGf;w757|L-9u-3n>CwK#{&3?6EW^^bbebHfp$Qawh{Zuc}im?56dE>94%ub>D*t3a5#5C6sDweicG+uNI0f9`d|4) zr)Haz5bC(LNH#DO#Hez>0_~=NCW4EoLubMo*6R)SOMCYkWW(C4U&%+;JmMfp zS}_L8qWsYwICjkmh^9rW?l*(6$D&KB!9!fcaY9ZL)o^D_zPj%95;SbW^;<-=Hp`zt z3+#}66Y1sT+`uT*C9|?PjZp`hAM1#V5nf3j^#r=F>&JY?7$zhNv2*)n$u4>$fDXBwli}@9+o?@O7uN3=-yCKtk2(lv?V4h?pKY_3x z21((9k~BAye4GS={`73SS zyfBtqq7_+ya&m!UY0yIZVeAj}*eHft)wgOS8(7-{#S}IiiF~S1 zkM+Hw*!of9wOh0?iHE*CX&uh zG`EO-H(CmrwUMc^O?lk~aY4C7o%n@L>YyYDNm?_R!Ql*lW*@+_QTr!@VAoJMNcTnI z01@35>4V4!hCJ~F_u2H3MF#){x19J0EXX!gZPKC{iwn-?5bn$Hxkxp^joAYkz7csX zTEiiUu~NLoIs)plo9t&a6!AI2fPiySs=0@F`gla^Qtw6#x#$=#aBRW~Lv0bf+%G(- z`-#AJyxBf0hnr;s#&jyfPo~rvGN^ai&+5+NgE}YrlcV~2UiNMdz{-pQElx6mhftH~WNGuEju` zdNnXFiNPp+i?To^GE|$Z)<_`1su{kd7-_JdQhfWtA3QAXps4I_4cfSNi~Ujd=OnX} z!e4Cn8?+~@VExjVTZE8U_mGemDnuOnloUWGje9aAcwqOGO7zDo@(4?}Wh!U10N0hO z&hA~JweDT2F*+P!lYP9RW)&5-lt+`0GUaD1a57V)DD;Q4;YpD0GN8~6){9@}vc+Ja zCKx`lsnx({h7_qo?N4z=NgE&nISKfJ)=acj&bac#L`mVgJE9IQ4gL zXUI0;Q$=kGAY5=$vU>}>?+Jd+{%{KTisC~%^BWn$b9)RyLJb#VucYE$3($w1zizSN z;ukadOO#jjR6si45AGosM!}1dxa3X62q6!~{Yi=YD;dk5*taLfqVa#lqxt<+4@S;{ zWLwL~k4WKoeQ|gixzm^Sg#&|sR& z&OI$F>V(=*4((jgfc`8wPeD@cU`WwF)pJS@T2Bc(E-J(NHhQgO>-1TCk5_NSQIxU2Av!jk>0Rz;@HGg6^}J8!KozVxg1F!zwOf$4D_t#c2x(=>85n`=8!e<3EyDK&y`F2}mBoGxv!wAtjPC7>{cso} zRBpQf9m3>{j1)4I`;UiJP4op<9b+)ao@3$(wo7=>wHq}L7~Er+@ZS09u%6}Y$#ZKY zF)U0%uvh+qvtOiFKT@U1SMH2t#)#XF7#|y(-CSQ>wb(CVR~2da?nCx-Hafd_Vm^89Al*+6Od3gIkhEM9R3&KZuln!;b8n4AfbAqc(N7dUPQ>f#Q zu1KVgJIF=K&`fue;IVW7z7(pI(kKCCnbdTT!H6SZ#;|oDz3vpC5{h3jnAk`rq|X?r zXW^d1cU$aGM$yE*Q)kGdY~g*=Q^>%q-%d>v`QYu{lgI}hyp{B`aQ8j;M$;K%N*3SJU;b72wG5NgD7-P_vC@EKKH*)gEi znUB!gVv^PtC9N%HQqzxQ0TqqcWc|yLCLc~V`LJyA;eFvIO1{R>;@xgWx}8ic8t@sc z@KgKhbf984oY^z`YDns4^#_Xko zI?>VgvH|KlKAKzf{XTgTE+{i+S-6vwX%ijp2E!0zO)Bdo<;7&Sf@(|>D zO(9xOMSwEb_7fS)(dq~IVDigY2b3_9^)sWDAYEh^Scb$GlzBlp-vZpGX6(ZmJ~~?>0s5mPycmr@0Qee=k=0Ivk`tQE7iIcKWtf7$ zORd?*{l(&8E_^a!t0c{=xccgmP1Pa)e06t$Gj{#b@*H>#K5pZG8@DK`RX z_XQ}@VM<)-q8p64he|$)bSUo zYzUP8vsb<3++LV~->&R&@Z1~2&SambeOKMbsdW1Oc3BO!BEVPX9GBh9Qzr=bub~LW zEdg>DB*5S_7Tk|je{VrdP#+6$&lXpj?AW9QlsS@xyFx08r8QaRA!e&7&=jm|mwan? zz>*i{q%vKjoe;}z1;6yNzRVFB32V?ExUSXWw7FD-gRdFdEH2Gbc=?eGpAd{)uH}ym zY0)ef9*{no$qs}e!dqfI!r`N&U5a^UaFuklwrfH=LDzJAQZN|w7T$Od9fDOf0i24= zf_SS4IdH$@6xe|j73FF#l-Ia2Qu}zDcB1-NX88S~9lGWYrmGbSAJ2^H?BG>8is#`f zQ#;>*HY3G@baZYu_^NpBz^sr4a@Z%pe#4r?kaN7#QR&XhxR4Hm7t}5O{r4*a95WuCkz}qs#W%Oz5%n54$c5Al&UB#M6hrmx&SO>P@xMPgPW;~a4@LD zp+f8|vJaQl^T%i9V8|RoPF||r!i)w@p?;{($0sv9ugep{KLrz|{yUrspJlRe%{CAc z0A_4=F8h*-W){P8P?%gS^&cUeiut`MaE=UvQ)|z!49;uFKR=PqKc!wMwlqR<`IDK^ zdaz1BRZxbOAp^m~8K%Y@2&&QZjrAIt@356mU0ExsRKjrWq=P#v;98%7sa{KP;qmn| zF}W@e7V|lXi{g>Vv(IO;xa9+fxE|fag!8?)>gLK!Uh@Tr#;KK|Ciz~(vQBF&1V-%Z@ct17UihHa6pQ&vI_al&QE=1YRtsUMVNNk* zZht!hWOWFLn(UuX2T_Ft6I)25UT~%Izyw^l3=TJ<{V>C~>Evrx6OqoSSsW(do@jb2 zRJA$RK&M%dqP1@7FBhLRE!%EkAqkX%0q995{QWpr4PLMZW0PpmltJ5sETmVjH()-f-v#H<);Z6;vQ>L&qYJ-OuRiB( zRdIt!oKnOozPq=bfuHY;K`R(@0ZeOvFHe> zoJg+)_wv9&?1%kCIjU{n_C|*Q@|A~|0aKxXijU$NZpvRs-;@_ZGApYMYS4y~<#V{k zii0g(XoW2j>Iwgg83Z~J3{$;;jx7ah;RxfI3rX9<>puS>M-8m*u1_NpSsndSYjF*@@<6W7k%yOW3g`l$s4#{?)CIL z$Qx)6I6K7gHPxyV;w)a5+f(Ejj}R=)5-D&9c+x0?rPQpLyCsxW-=cnA&ajvF>LL$ zuqo=0CsRe~5i4|Y?(A+4*EGz--fD2xBdJGLE1+kwT}0>`0{?#Y(w{;&kJp3t{B?qk zPMQEoZ$_1Pxk{kbQ{tC8kw#RNLJp$?_6YzSZ=ujppi@*a(k9}#043vo0N47+jQt&g zRRc+(#8gAL<#K5NgqKY1SPa5T1-Alaa4JMY52n#2%6<_Vl`y0SkvvTxH4dP!xQ6hM zqto&LkY7jz87)iAp~f$uFGB0p!q!3x($PU`MD|PAsbS1UgN2XoSxYU)Rn6WS2N# zBUYg5U3sOEGg?5E?V9htWFiG+g=;xf;(~13wNRDb^$Qr7k{|}^Ru9^9L6=$>Sx9tI zn1c?v-L207!2zWXQmUt+`39>=-9V{>T^Ige?Vo#`ydt`I9p&EYr;Z zd?0SP{}^~U%KdU!Zwb=R$v8j1%JAH5Nrw8Fs6)jnJW&j7YEjOac>QZgM9NYYk_4nT z9sMnxxt>sLbt84P4>0pb>Ij^uZy zj6*=`>Sn8xe9zgWJeDA4lXUf(Uh~@BbJbSkL&8fQmcOwTs2aN@LH#;18NW?V#&6|h z{B{VO`4D*|k&e=GFfeW?tbRvo;ZmrLWbAiC+Km?F_Jmev;tU?wc4}7wk{rN5un$>D zB{YcY4;!~{=Z(;1_5uTSX$yg3Y4$eoO~HKES|* zAnQOD-F@r!?!wVVgdjn$!R?@;vo`yPgG$0a)0U@DGmnq~i zQG3G>(2SLRX^-A%;wf?pJRn^5)Ib1Kk-cr72L@89-mU*Xw|m|+GT3sc)^l=M%1EeP z(`c8)QVMw>7Ve(SMiw?&M7YqVcgqMbYA%33u{G_0^q_RO6(49%Sr&g{Be`Yo9wIHp z_}Q(*&u$xGx9!~w9LWd-@Eir??SMtT+aQ=3pJ=qU+GP^@3L|`4epY@c!;qB<(>%5)@Iv{W^-#Hdm1aD6W&d0IG_0R7Yr^ z_;S2F9kqv+pTS)KMEa^WmAT1@X@J<`2tO&yz+auh!|8xsn1Y8#_!v+nZQQ|}!DTR* zD&dpJHqnNfI}|ru^r#Kax0kECXFZ|npdQ4J6C$$fOX6%TJCt5rhzmi%E!@|`8ZqRm%7#Oz22{7>a*o=A z(XUz%p#l)W3DQ`ig_qEPL{ha$^P@Y(&qUcEH4ix^dFsMXVucx0RUP3$mM&3;WpdBb zLV?5raSCXs5dV^Z1wAO|s;ipr;WI}QqsJ*gQ3ItF7C=J_SHt6u5m&1xj;DIB~lep@pLK6!)5_h3VehhlL8piSh#$&>vhNHU?cb-WYt?xn6gcpNBQ57c- z6|W}_F~0B72#R z4b4c>*8|nwDD}5stn3pkN z6B-wUVsEsAY+~^pD2WX?bWx;I6F~=aFA##XE){1s*))Y!N856<&~8Upu@8S`5Ef`h zj`!vcEKS@ZQM$Jb6(zi}G<%toQIH3nXAIV022Z*nC-w5OEnq@~Qr6jX$oQ)HMN}_; zHO%AL#1bYnM7wm8g=qA#LZ?@yrwx`lVuCih+W#!MJobZK29b)*C#ejwY=~kc zVn<&b%Ke7WqP_XTe0suH5PJ+QWn@#J+&I2$=?yQX=YS>?D#cC+G1LXrA{dc7pp@8d z!%`ch{=eV>7fa+k$y0CRPL;zYhT7-s{ zC^D^?!kR}nERxG2RRn)~u2Kq?yO=QCCPsB^MOQ=EJq!gX9w5_x8egOPx%5Dl`G{aB zP(9DAx2hd~yA78UM3YYOCi0--(`9g`$d1)%mV8x9(w(e&Rihv{!{*hzgyOmG2YIzr zj~fUz*GgbK1|@5Z@FhCS>sk<*fGdQ6%fXdbkgGWW3SZZHOTm8)!%TrkjaSD?!MY~P znAom^k>?dp0l!EL+mOoROynIo=<>v#A8k)&G7|Hqc*j)@d^q*(k58P`v$H0`Hv2;K zNDlDOAyZckqur$BIGVeWE2*3`HsMh| zDz)MiBd)sWNrD@By$=nIBRzfJ0?J;zO39nVm_efVj1;oec!w|ZB&u%8iHupa)I-IV zLWCq{sVR61ka6EtA|vG(LK2{RGJ=S!B%OEV_)yXjvgS3Xn+L8ERcUl1a22k!SyHJr zq1{$1%`#Mg?;d?U{2UwugHzuXt)Jm6{~EeYE=IM+GKUYeyQFgRx|W$70Y+LlDDOb; z+uMb8*~~Wp$1(auf$k6}Wtlux^q-`mUQX-8EMiY=c(v^oX{O1cV6%fnB6V^>1NtLc zZ3&;&$%Yr7HY2+7Q%POSAjMob3)p_rd@*N!y^p;q2|LQHslYyd3c0
I3T|EgdZzoM1 z`6H|PX7`|5Ca?3Epp4YTBlQ$%V|7It6e0H|648UMjBTM`qeQA({U)-G>gy$J@;y#y z0-3x6Asrj%u%W_rY~c>06?qIj5_yFS`+XFT(pia|{H1B50+dj~tsr?WU9cBXzAN+#m#nW0?l@|vDXU{J7(ap7kB{)@ zq+A%xzcA1g!$>h&&qUMm=#pRgpvhZFz%li)Vg zUW9o+6^oE?zD3vPX0sV!)4%ZR!qZC0M!c(jCsah;JH}cPn=|=oJ=8 z;dW(wc=`@u=_1*Th`T|}JTowks}ak3D=xv(Jxp*REFBqaVg zDvaAw2XjA%ZbXx@SW|E%bArPK^#n&b%8(_l#}S39i(WAzeew=O01O@5!hmzic6%GA z0s)XvpPW%+r8LT_4|ypIDp{PLkdU2{Vj?dX@_$sr;I3{#w4}U!!+xaivOr%zq7b;? zJuZWzrna?>0C5Pj`$o}tL+;ygG%6k{WIu^c%;43d@09`A+pZ#)5w47dvxaWEVo-JW zH&kgjqK4Fd60ECzQBUbcTkej*3?}(v)Dg=b`;uq?1S1k(1+0NQq~#_UQl5W>)bzCk zwZTI`Bs)!Q{IZJU%*>Lu0SW7UF|}1Fey(_RScXm@|!Zu}WaHQBWed za|-I@1x6y{YwC3Tv60lfHbuPy;5K7iK#GXB?BgV+ePV>+KL~EGe{6((GQG(#^iG0< zbK3#K7C{#W1d|A|n1?PIu~?0t8sVcSj&1lP^M5KGf^2K6C(A&X4Q`Gae3WM!b^kL; z?}f&Mp6oL;z|W1a&kb&LOq8Wlgmzs0JQW5pusS@r;M^Pd8IF-iBqTH5uth(A`aN&G&nvC z;EkF*4Zl&~Eb9RQoRWm8OVS(lg^x7xY8VQU*2$wJ+&%(IQS^KWSGWLIuM*d$10k{$ z;VmA*gTUROJ*nElT5RsFAUC``D!)-c4_L1g5)C+O5aU`1;?pG-zmBQvu})0 zJ|Pq!|GIC%4Nm-_Z#c1+p+*vK#7#wJ{k60yZn2{|{^6$IH8e8yErAw)X<)c}YJaEt{kG^l+65=BGC z`h6M@;3cV*9ECy1+ml zTMx2>)`xjXp3HED3J6AA3l8Qh3MLXLdFRBE5(m0YuiU5gRh?SZ#0Gao zgC@$VW?@RS?U&?vVkk&I6nv_Mq-oxN)T{G7}StZVx59mHudZce?-zk(;4Z3&Wi*G324N^)~A#K~1T^0tsmQ zMj9z=8Y!4dNH&q;29fOh?beTswP);IhLSa{-@=@j8ptMnC>Oeo5AA_vlf!4hz(j44 zy1s)eQZ!WB%teMAaQ0!-ET_0|M9F-C!N_LG(Xk4j(t_1I63}$njn?I`B6VvlIe};2 zJ!v2Wrgd$E+y_5;hut*l%9CVJ-|a+#kQn_EKbG6%x>(veP44h*`}Z7EfVdM;zxlvj z^_|vY>ZU2Vhaax-L0gt8Saf6o5eK8NjWdlBI+m*~WZQ1;UIDRD{cM>k$phA+(EDZ3THS%Jr+Cs zG2&X!n`}gaBR>UWhC^&Cq3K~R$ErD2e18U)4-hRd4{3@FbK-)nN-3#+gFzsACPk<% zY)js=(N=R}U~zw|<6YJz*#z-gPg=Ijak!U_CQE&!po9QHhl$-cAkVzp{`x?1#_U1~ z88~>n%0pAn{X-R{l)fX-u?hW;;xuCOgiKz#Lv#|`JT&V2 z;qnMGIj0YWK{iM>X1|y+dMQs~=S76vDkfK^>wy!^-UHW#_dl>s%D@7da35^%W|0!l zK-FI2;I$aksxhN_d{DBcFo-7xrE>bC1Ywdy8_b5mL)EHIB$zQ^7(i8GmT2oss{665 z!oJ)&qb&*sv#;I#kH>zNLR@EI`@s#=(1^dLuMHEL$s9n#t8dyq)SMLaeoAqp)P;AXP48_&D|;*cQ^PbA6=5)S6T+! zhHuA|el3cVGlp3aT~EpaQp`zw&#)Q!y|jfx6D>$W{$J7Pelfy+u_x472oJcuAL!dh zc}|8viygVSJmz7iN_-F|I>?U3VJ0O|GO`sJsgtr-+|4MI^}eChcUHExpqy?%Ejy!v zwrLwh^bpPG^d1Wsp@D<%QmjA@vcq|=dmHDu4e<*qQt8=k>bMcI#L#)+avlYusHNPp z%}vwgITG-E5!f%WCmV=jzks%ZH-`Y$v)!rwhMXXo5*aA#wI%I-o{f)vRAY;78eD5a|zMw9I@ufS_)( z`1XKGA{R?qG$1PrWo8|>h>iW!Cs|vV)&Y1g9F_(RMy@WrAO0Q;62eP+u+1|Ao*EO_s{fb!nuSeLg2eEXl7Rix}rGx;I zfk{vt-+oK?Pf&8DL;MMfL!tL8%P5Aw8{to?gF!wByjOHW0-jpN2W z+cnE)jfjj^s3C=mEr|{yHly(x5`r0C5sA&LAbYjIJuV!!>#+MFHquR&8BpTpWZt`* z0WAKzIZ`f{5Q>nF45eOV{!yAB+1S@Kf#_%6k*l4vm&cQ*rjeDmEKht8uf^PO| zC$h9MIbV#6Ry=6@_Q>46nv4mCD55mG z1uKh;6~bi!6O%OUjn9!&9fH=wty1a6a(sf!puI9IaS<8IdQCGCtzq?4d{&uZ2N$cg z3k>1=!+6fO%b?hEq%vq z2>}8;icX5X8~&FfXGdydA&`(P?*uam5wcjfp4)6SkXgovawtHHk8Z|jg*-kFTYNff zhb;Ei^9z0GDDOn1zB-vcgj=b`V_4he`S6c>EWQ!8LW)L}na+Az$UPoH7=)!ExwN(# z=laTbgi&q=(i|EkLPL>?qt8z9$Aif(O6&)ig;B^vG~y!!^9fW%{-iORFU~lU6(BPb zpKK_ukR+&joS<~kVe}$nzAJj^AYVO31vMU@ih!4x$;-zA=%rDg+yP{NAd*H)H4uz` zUXcP`2(q%iLQ9WkjQYV_r;l!(e7kigAOM*{+5+{;KMF3N2?>6OE((XI5bK$ectdUJ zLQ=wXjNwd*MOls?VXRAGWi>sjE@H~yIxFvMR>YMZW0|;j-#L9`my}Nu=-?9AiEt{WU_MhEdFO zk}p(!zg-g{Tcxjhd=c+KK*Hr&4k9EV0ZPlwWZ|nD0uyTJ<#){)m{X^31tf#?O40hI#bO#~Z?Mb7FM8tpzVWYRYo@qv$1VK_vk+8V58PzOb1q>6k) zT+apfo4~ZB^fPk;8&aeTDmSo;lTBXdZFlkz86Akp-|PdEft!imjP-{7)-S^E8HAxFM>oi+33GjttdQmI5M4Euk=r z0LP?2cmVl*BZxI-fk2dzNZUy4YE(rSO+>MbEC1&i1>$xU!XS$%#@M4)C!Ed^k)g{oBgc%m!H*o;KSP z76znbpcE{D!p~)#BhH=dJ-FzDr7ep!lr<%IL5UwJDWcH*O8LD2wMG(p>D%#!$H22M z>^TPIv-V~TWkU~T&1>ugGm-F1h+{gFJ*_Lknqt(X+>pM!RT!dDq3s&7&1EY)t*B5Y zBTON}@gqk`^S{`Fjj`J&-3S8Nns*=g7(TSS2{$)pZ*ozUwxYVe!T^_PBt;|deql0^ z$_O~`xH$XQy-QSf3)f!Z{Ezzvv^VLR($^g#yuWY}K^jOwL;IWP+np92Y4t`OD&y~@ zb*;OErbyh}7QPfMxEav^T!eYTK!Zle{bZg#AhV|RmEp}HpS9RTMMJ(jwb=7^f`-_L zbt^B?eSveNn!+b>lEmS^>ZCPGyKx9<6vjNYEZ2}V2=SJ6(;Mtg;)6{6>fTAow}xCD zIbfYcym9gsA?=8sFlbkh)47Qlne~lJS)JT9q0WK9RWg-0-x|{4L3>rTEKOAuR}8UY zkF2gNom!q>U%1~9=jLna#PP5dgsM0T%~FJ!gB)izTez<3QCK8FQx@BVnoe0}FY z{Ikh~3!1x@sMw5XnJWnkLPhA9Pg&WMiuY(`O<5=vQ_SjPlgGR5en+XA{ZD+3jqTolx3uLAJE9RBlt1CC>91b7+#U->JT zdJ7g2W)4Fl5NH!)g;{KrE!eJ%6Ep9y7yuHfP+7bQoR;DD=K?^mn4*x+Dd9gAhQiu3g}0W~lX z2Nzqi-_uQt`$6ia8=Xrlu*;yQGDOV^$*vW!x~}+3NP4D2!X~~r010tCL>>8iQDn?& zI<#Ayl(8zYwlNT704dBN0=%#Q1>?zH>3BFCR%Mlg0+1|x@Hg+`QWPKB@#J@1> zM{ofWpLA{Mh%ImY$~&fr9vWl>0Q;q@z;1qnwj~565giX`US1;CAEiJ+q8mhfRoCUk zvk*4u7CDY}G3czH6N`$(QdfR<(t@iSrZj4Ls?JIe5T1j8t;Q8-oluHG!niE=9tXLt zJSH#Uwp-8?Uaam)U#b9AwC2S%T0x@JAW&Y(s|w{q_QWk31#2IDFcDX+tZ}bNf;iTfOI>qqdi`c zMj74`L;_A7**Ad~T?RjPI=IJ8;__)=sO5Re#}FCSXt0nJN32gnny0WmI|`K=ws?m{ z!jIxM1CVH0A{EgPG!oru0$7?=D5QoJ$AJHXhCYtQXOd_PXiCdPe2TR2G`86MT3g3XFoCov3VNsAdo#H`=_)jc%O=`lE zBd|gjIKk<=5RGKnvtF%=ZJ!cFke;AV5suIztwab)6paEozQ|Bdxd~|jsJ;-Gd9vFU z1EZ`v?lgs3qm$FD813LCizM1f1mXk$IC0rUti!r$N}hy?Eg^6OA_QRY(zHfc!cnIK zggTfrMUluSD||0S1V5O-f)7P5))(<2Xze5kgd`S_YouGSp&Q0&`Dz{;`-({nn)thJ zvaX?G%(Jo!B&i^V+cqWo9<W=JzD*06XM?-<*GCx}o9KLQOr*e#skBNK{a z{_AR|0Da{8#N8HEBKR#lmyjp(;3P6VaZMX(GJ9@D*z&!RXMq|}2UEL5jaIYXDt z%wFjYks{HYOj=AUi~b7fU}}AK4X!3ge?zMvCEUvs7B2>8X`HRO{q;eRi**W;#~w|c zAU_DTiwIv4U^NSYCXl#oY+rHO>s`pE=SL}&YlAHmnYqZK>D;^Xb z?N(%-5C8{}I{VWgHTh3Jv^v1G1RDEuQAL$yZQw%47|CFeibiQ)Gz21MZBy8NSuYfS zpvwi@fvOK4Z+>b;PTOCyVprF2$5qVyWS<$z$Q!HLg85j4*uR#fup7EW;xG?;!G1qujx= zPFeQ2y3}sM3WOw1;yjauH5-Qo#1;N1=yYDwwR{Doy$o(!;CwZ_Pz<#PIV}=J@ky-O z3uW(vLgyWX1YqNE!tqr{Le7+@r|^^|LmH{BT_n)kz;st+Z;+MXupkps(Y(vI+SNff z3scgTQNwpC>qtUCj`b3_LZ!ILsk-V~*OTD%&*Cr%nuXXV%1}6jx+9P#rC><1*qww~ zh6+@Ib}R1fT%=#V2)}4abkyc3h zMRy__8L@y0r6H?m*@3VvU9n8$D)iHlc?YRE7P@U5>ZAmK7TPV(ozpXW49lQNF*NMq z6F=r7v9I?ri%;pA>+}LPj$6c3K?)WeFx()vbj!sMYvwG6t4}oTPV0uHor_6LbI>jc z{9qz5P-CBRcKXQ5MX|4-67Z`KC=eM8#yIIiqo@eCu|yp`r&ti=-s&Q@_Qh%!2Ve|Y zi6o3aKeIu$#jP%!lgs`tcC?-Q?+3qvlk|f|oC|%CByRE@v2N$23s#3DtTjLe>8`7~ z(nm`ql2DWG6U7PR1WJ;u7vResUvFXyepBJItlLuI^JPy0JOPnZr~t9BFM%*9-kG4$ z5L|a|l~~CJadzDG0yR;5I{26Fd>pnd@huVNg4@0JkgsDf2(;kIl|^bH-1nh8M%Yj2 zpo-Hcbtdh7qBok&s?rOKYS&U6_^4&?i_az*=a_aCA-|J#fm8UMz+xxyOLwV{K@6wk zDcnvb=CS2Lom1O|LlXO#WzYGYatq=4%X&Tdv2}>#y;ERO5bm1fe0Uy?GDwR7@ep(# zT*I31`#Xcb&IMn~{u6zincrgltW%sj!0FZ1_@i)P2fbeN$1!#OozQM(p zPoe!xk$r~#K}fvM#X32;gw*EhprmpXQ0ik6t|K!1=izNdhpQT~jhzlu#515~?1&RW z(x*!g-{y5pqdFYjf4^#UouEd{|IY(}gQM&VRyHz7C3B9_Ax(&!4uUzt>E^sJ&C`!i zSIF4t_A=&P#&HZT8_4o5n|jZC9D=Qhcy_&A2XPWs@`nqRX&lDN+g`O(?%-qqlmD3b zS6!Oo*59n-utpn}j8abft|*}S>Z9ISvX$8vMIXb|%W zK?b;)(R$D}tAKs(6Mur5o@V-9%GM#I5K(*9|WV=*J#_Rx5Z(-1;w*yMvEqL zyOVIm2lR{_&(N_H2~4Hk!nBYNiT_1x!Q|Bk`_?1XW*_&vEQ?|z$vGEAsC!k*oji}Q z++iDZH`4#AC8G$Ti3h=Mdk<0MZjrG`RwrH_G*A=`K+f1|T!Nxf{+Q%hR7UD=Yzx$) zV%-NvZ{ngc(5h}gc)rL;;NaUR3{oOT267!&uZgxKs$}afZb05~$BC7V`TOs#V*r_%dFfC!F9 z*i(_ z^A?e@&z}^5C>|BbJjhdm=gF6)EJM%nocsVrhJ=dAmw>N~8;HLD4U0boR|xIZf(wWU zQL7rod+|5CT)tstrxX*Hdaht}N8+`??)bMXz>{l1-&$>c%i^S|C!vluNr^R3cGhr)a>zhnI0pPn~(>sED^y36U5u?JGzOmS~u`Qa-Ym zBknRz!d=D@?lRv^ABPMWvLsj^rkG~|$M;G4isN5wLG1fihV#)7<)aCV%Qqpy#oz2z zxXEH~yC`XBMs00#XBF+xt!#LO*7cq;cCiaqqp#)uP*zsTuxV8}P@p=IEp#fnZSsi* z*nC-TukmklRq3Yyw}F_ZEwXiM_1mOqDpqo|+G+Sdw)i*{tv(npI|aVh z^YmM#fBUgzWoO&}FMDqTTG@5okDfigk~N8($j!KwTe-bX-9GqmjlQ z{WF@8M;gce$Mf#J(mfj8TDn)hAD&Tgz<~r3aKHrz5=bF|1QKu{g$7bcA$_=zLJA4E zkb(mZq|ibNDI}0W0`K=*YwvybxgV0|Lt{ICg*F-8bI$%)d#$zC_qs}S{t1fGMEEb1 zmmx|1G#BCjK%@Vj8;brN|3cRrNEXq5wjaAH_s2Adj6^Uzv!DX{GVF-V8O3LJ8wk!m zSJe6~p*BNC#}x&~2yAv*&;crkHp3uC1?xj`{bz=!cxex1*58^&^n}VNC*Uc}B8Vz9)msIn=VA+C>PJIN@pfhSVPF+n(&llW- z7n8Me4%+1Eqc_5sc3tVFwl>9Wgfv1lTnA}=lA5@&yhfkoS<%ds6!-RZTy^*2 zJrGWwcCG~i#*Dp%nmb5}L9qLfS%Hf$sl%+K*Hd#xg5XgXqk-f9EtC+R zLuAHYtgjcKU%(oRI14Q8g8Vx&qkI6#x3+%t2t@gdPb~4@C_b^<+IsFEm-CG-5unc8y{GK^X+<^w&+R(d2cL%JDwsXO9H5a$MmJJdaO{y6}a66o&{&4KXAaB{O>Ga?}DfTF@Ab@_C8z=gs=TBGwqpe0biQjx$bt+#8{ zr-ZbSL;}~b71E0Gv>@ZzC0ehNoz;y(mF7jj4O9dJgw9`Lk;(X3vq&c*EQc~G0Kz~I ztR|#wz+|%o%0ka=95ySHL5L=J2-nO8@hwb1XnD3m)j%92ZU;L^R=$;{kjMJE33u}y zyl`MxIiZ>D8(1itU(tr_naQtm20wP(&r_1JM$;)6&McU@4gvA5A@W4$lW4YYh0!Xsq zo5~4Dnbu<#yP4e0nL@yDCb5CG-DaHc24;F@zQw+ZAX&Iq7#UO6BtXIw9M>a3F=CQ4b*bCa*R^e^5R@ZOu8fY%Ch*&$tskvZ6T=;47qQc_Z&TX zRJxCD6~e8)C@U~}M^Vw(ovgGg_iKjjzfEwWuge`^=DZymg1k9kwvny9^R z_aWoM(^>sf%MXD}GJ^!ku{JE@=^{0>`0WMhfLCyc;MC--YA1KcDZJc<+G(nBkUp@w zbE>#VuVHHorbBepLeJedsrviVvX*uqJRl2o7dSATMu=(?pJkm()?EYdQhp5ndK%NQ z3EI~rnO$HYeR7Kzsw?iaZ~{dY4oaJ7|Al)^9aQ5bIDd|NhXT=6Zol-WtrpB~G;@uK z3(kEP=f`}=F#JRFm9j?mOi$B8%CM4Cd4!Bq3(ogm9DkED3Buuis+L)ImoIpb(}#rH zbJ2=0y1-j{V_l*qFc=L#YNBWRe4@5Qz$7l~Bvk{B9fR?`vPJKZ>XsDhXKl<2e?jf; zFTgzqk27Ev5;?k?$9V!>GKT^b?K#q@D%YEO&FsP2ahwB<7X|H>lQpCXpcRgEs>4-hcMS*bLacQp zY_L`Jq~pTML^t&qAh*kYnXRK7VSOYRi&?^qvF?d~cE~ z+q2$A5jQLqUOSP>G17j%v`POAd@iVE=^tC(8%MA2f(Z5-Fb`od$R*BFBuCu$op&p> z>dP5*a7rSKZ7S-NSPD>90KBg;FgokPZ&9?`{hL=dg2IkLr-lp0r0>A@d2E4CbBKn5 zPb3s$&~xNs>1r-4&xJ@aJI|j#48Lm7>;n;W_Q}Ijx#+))ef03uIUa%UQ9406dD{=exF)5RImpfOZ8NI2-+gQnCqBdprsWUn}v!eJK7tzdUFz`b4mK z3%R%4AFc&bfB7LbYn9{Mt`0nuzsLak=)e+6)tbJl{#@Bc;?bG;`@x# zalJdgiSH#A26twoRbmpP8$cbwRtqhDTXeZ&vJ0r-@HIqZAIi^Y z{K?~!xY?k=P}ssn0JRY1%fRkYKvygtMD8^NpulpnIpHJE7**7vp+b!LejaoT7o0O; zHreJS&MyPTtdKz)h?8m=^bNl*nsH6i1b|ycGxbVZ`2cUGA(Yf&L85@E#KO>g1pOVs z_>lPdE9z6(2uAr|tKi1bS(ZS`OgbGcnmnU9>HbE<0`6vsOJf6EQQ+*gNYx!n21k-zP!|d%9ZTwZQ2UdG#-Ezp>pzrWPBT1Q!;Gf$|M#EAA3l-)|Gtg3gjZ3) zi*gE{HqbNx(R8)^n4QSwQNb;sGvg$stibqNK%CQlxZ`;+1ZQjbC_|RG^DewLz8fpi zgbhDrDp~^MFqCg0I&FgD6HXR$_#ifI8Uy0liYI`=4_O>O>nK!X4Ea66>^b*Ma11lV zaX#gnV8BFMgX=H<8+Xhi5HT?d<)c){T|+Sj#Kp)1h{)TdX}wg)QDKxJX8c@?agGe& zenEIKLlor$f~>+)m>@uw#*m@h?oiS?Al%>O1AW!XnHoY_(9970kAw&!Xa$avHL9yH zxVDmz%^%6Vwa9W_5}~VQQ8a)@KjDEil1;E`m`>84PG7tjOZ>3?4JsJ&(f5rzjEySr zA_-SwrueHqr&?*92FvV?L(W&cXu~E?>u$iq z&@>P{9?|JBl@EU1XT(Oh|I25rxWbB}3-)R%j>plrC`9dU=>!oM=^`n{9UAShieLMN z=*`k@Ze-D%vG!(23F!?!0W&m<7YX#Oz1CT1xpuiucsV}lEv<&qv zpv1?((3TNaNP)!B>V*0W%4JE!fvJXfSbBwFFfGr}Wv)u&mAnegfWMSZ5IdhWivYXp zs2G^xe@m#hS#>u|hr(O5YrQX5z%@E+V$0?ZMHoqJ=}9+Zl8v*?v+^K2O;4Cv-+7xj{<kO+&=-eTAts4rBL`| zOhzj?dxlP3Vd9&Ru4qkxCh{Lo^I7HhmUR%fz%?)_GD{B)-hCuY57#c>O;J+`SofOV2 z8a6}hEEPqc=o{FuDY-&Fbgo0(L3J()q7W>kPzqxG21cJgK3kQOVC?VH4>K0-lYN7` zeBJ5RIt2k9H8vZ}5GbrClEov3<_%|9+%3#7_%v0s&-O*1RhO^IERAPW4qK@~vY)HL zhOGz|YGy;`#2TL<6t0gO6RA)?hY6mpJ4YribZ#Uju{-Y zk(GF!i?VxxSII|6c6n@~c`*Y)T@#J1F7HI4sR#P8>*>)Wz1T(Ub-1Wl*ZZ2M{JW`nlxrR z^D(P=%>)RBU|kM9lf*6Wi7a$yfXiT_}7~g$<67EZXRA6u4v2 zw^LJwLs~Qzw#8|3z$qye@^||B%hBI=qGAWTDV|y@mmvpU;eAkNZC|t<)N;P=#zrN8 zz!3@LN0uSg2}I|Za2sX*>Vr`3X?eUwuDp~una zhmb@ob)n8cd?~6dRFsr-3deKh5Y^&Y0yR8r-2~lW=Y0q7GpN$Sh#s0G9KY^lCEDiZU-l+)nThcSP|oC(&G4EdscM zE$BGBtc#oJGL-*%#Rj85-74^`bnVaq@JE)C&6K}3koFfgdV#gfBcEf8I8%>*L-!jS z9)ekD%7D&CHW<{QgT<$a8Id2sl)_>-6O?`D_lFMnrDtm`0g;vJ8H|S!AvFN|#VabW zPiz@Y@fQUm-6PXWbaK>T^;Pi1-h{9NT>`xA2 z1gIh@KY%bo=ss%sMc*<8mf&yvAB|_$t5!x_Wv~l3A1dtf#g^;Xd)ZLWvKtv|TjaQp z2DK&UQ0Xwlb~kAICeUxEUWWAU$%*LacL>Iav@Cu{=H5oGk**(MV4H4=uTw7ys=t0W;fe*-BWxU~pZRahJw zw*xiwO6QF7QlKH{p}n5EvQ`k1ab$zQ=5Ay&m^)+OqitbUdu`(0K|^yXs_A@0PtN6E ztVt}o)ae5&fZ0Ew9!Pf~1;ytuxx@cG=D#afxv}~61hYg6uAW^8ddQ?y2+csV$2<Sr>q9GFOly3C*PeS-FPU{O}q8oA>lD`MC(t-! zE5^y4Eexhjifg;!KW%Wqq;4*TLx62TxW~oltm8U3E!-@-J6(0e9f(rgln z6H;LSagPX0!Ufa`*fCi^qR5FQ<{_O^CFQIeMsVO&=2Z?64E#0;dF(-4SX`oy24fDxmuOH)fu6l9dgA@7SA8{z_Sp z2aQqz^{KpQ+o;F|rUXSNI4z9}_o-fx{P%He8{Vj=tpHR7kQ*8~aLt{dc-IGpH@$hz z_6<-uiWc!;9Sc-_H48{230k~oHRe_vN{u37GI7P@XUn}AMnmrC)&jhBv33$)(um*W zkW2+j>KCkk3ko3&YPBst#{w#`L+zkKN&gp!===C;rB*vvt6mA_?3fGZEB-I!a>ixq z+HM^*bSmq^uY(6*@!VY@IF^4F@|xOQJ@VofBpkXLM4b_@ehL!#KJ2#MDMiC_!v-^yB^pdS8$-zj?L0j`4>Zn5A2*Hf3p|w+ zDtaJ<4-OnUV~FDceoN{hFaqUxVQy`s*jtO}l8R&RyK{nMq!k|;D@&zBVbLX&j8f8L zuAI;H1!i|0!U}<9Sk!HnDBHMo#`p1k;XMoo_5d-Vgi#z0@4)Y%UPaXh z8Lp}0U8v9PkM)tK?zVwj8e{bj@LM1G$G+$v`-aLs1O!*w7GiC*xiQYy)+_Khw6yH* z6C8`?6k?j-r2}>)nN;h!EYd zPjV3}H%SYT52J@j^v~SJkNTn?UC%Z)cj5i*yHV9CjedbczSpY%rDp^{5VrP(6B(X{ z5Sh0wfUBh!H3%?ZxT*HR2zgp-Yr+Mgz0BCqFNd#)T@%j`?8o4XqS4`fTpS)Rr!H09 zC6bg8w)S0bisu)U7@!ULdj>a=ID%8(`n+{pr;-BV*uHN6LO1~z%Tb_xQ++~g0LBo8 z#4}Fn&t0m{S`|7eLx5hgfdmL%`;tg+l(pMkt7?>hTSHWlrdvX&ia!CKr};yDxi8N$ zB^4oD$mejIRin8qg!Cnj!uXY5BZUj=&wY3A@wjRq6Hx}Y3PzZ1!o{x+!syQ2cY;5q zOuImfy~4WfJkG|yG%zwUI2l|zUnw`D0qiw|f&z*o!ZRt1q`^2;U`l)rA1p%4v#2NP zV{|mPxdLcV4;Dj=yGcb=jF&QFpJ6xwaOOSQR||p(oT7C8g$oe1QSDLX_~eQNo}k{! z`5NF6y*KwVXS3EPPD&*cA^mz(*nhm4nG#=~MkfF@w3nknAX>*{S^?)8Yk5>yPC^a; z<+v-BD6)gkM0e$0>3OQ28^tFwS5Nf5+?y+OAM+BXvEh-uHTr`3VMxS#FFoJMgX5jc&AS)x;7a8q(BETplo5@1Lm*SO_O$G{8^!u7aSh6w7 z7M;|Xf{Y)eQX`l`^&Id~l~-VcIjdG02~f1QnCK4%(Cx{Zki`E(#MBUEm|(sHw=l+G z6_u@;77i=^`NOF14hWMq*Bb~`#(Uds_Ma?T4Cj8y!?m-dhAITNOS@cv0?Txk9`O4% z9l}%|3 zgn_R~zpJ|`89pS)sHO>YkgJxViG}8g_*A>R7>(p4F~U#AO>mSRQX;kZt`cH&U+%jC z7Vv`nt`Yr7?%ymi z05=g>C;1XmhF7htf&;0oG_X3y8+@DnQnj?!h4m*9DJTL!Bg*G~xLCTz@;O0fpG`ps zxjbCrSUb}+I8eNFx>U~G0ulv$e{RbVUgy?S^GhndIQy$qcnRJj z0}$d8UK5#f3`KY<4PVPC^Lg|^RE_2@7H60TLU9Sh6=eXrDR>XN3&A;W+woPq0Qsj| zl`9(}KwU*Q2n3+$MV<~R3C<|911(K(6Z8iDw7D5?hO!+4gpxYMBILP)(MKQ3t>_Z0NNWy-^;08w7MW8;;Rz`*?PTm#F-9R1-vfH6I*Q(B_rxV!dPYFTU!8=Tc z%34$JqVGb6Dk2w_rk0#=^0d&_$ATv;EBCxbu4DPAd z<~8X9QkM&61tobO*A`+!=@pvo45z59yAOif#7dsXl+AxoC0bqd2NCMYU=TjnQnN5I zZ6%XZWzAXH(vZ(Z1F-@;OY%`*kkTky>jy+*4;2wfDS#r*imich!)p+>ecM`j1oWID;)_$bfM9&YcjfMn^Jk%lk^cZQ?ltZesD2XcB2E)9 zLd|0?mgrxhWJehRXw<+33pGNc2oy{bVuu@gJ->rU=Bw=7fvK$qCw>6{q-~lBdDlXP z_fl~gd7RVJ)@`Vpf>S#TBz*}8$>mHUgUB6)ghuO8#INBwVn_LcYAy~o8E{@AUWQGPD)(V?S=u>r>`^nT@mv-Sba;TD1Z(kU5!5X%3Z5XZ6}zb-KE0rw z_IOJ%3N;Jx9|BU&-S2a}Q6N$Mt#ng%8R9$XDL63-W(BN>Xz9Wc($$^FoOriQ-ZA!+ zasFUW=(jQTh+*aWX9D3fS2 zNe)5G6SaR)~J6BmpWA|-8gw@x*M{#2NChf$|Q9>*~udpp!uML8xh?^G*jCED!sBfEWaq_ zpPV~}*xWXui?ROc&K8yLV1cyiS73)kVG$%p@QS6CKxT@g5gQ2}z5HNaY_RRdXSb*L zs}JVc($Aqd2KGG6=6l)Q-%>xtzjqgY)uQgC-{BQ5JvB)QykV}4a^LFM6V^?%s<_}X z5#rRiJma-!1s*KwFFlD~ncHs9)V`D;td%34I$v8xd35{!k=$3IEkos3LIZ#lWt8zc zdw?1$mIzG!PBrYOaPqXLw*i@pO-~SZ3AsmzCh^9s2!1+9;~dj>oz4xDx~31M@;nDh zrSRTDJ@1rMB@i>MwX<3+yvwvMm>Dh4KbS2uUMNG--K=eo*uN)i_ads-k$HVs`}E|{deVH;u$0L3G_&2eD}{{;gcan_ zRM$3JC_N)hc2FH~t?4S5PfurGnVtsY+b%WNHr|6im>8czIR6)d!Hmu`k+;($!!sIU zCypGNU6`*O47FW%o=z;mkL9V28&R|Xbkrx_r zNP<3Cm^hIlnE%e`94uAKnvm%{ia4I1_L-j^Bv86c8mwv{nqR7IqGUw_t#a)3i-L-M z=3ftTO&wDPD>@1|xs})(1L8?8`tO5=Q|F|?s@?;PPS!S1?Y*?=mzRrvbE-DVHgIT)R?jgvyG|6${()%ZNqW+@OSx$FfM>T81+(9Sduj{X01_>8(bfTW31^DC;P|##23|8~U!D=7|qp4#q`p4U~8l5m$&7VX= zOOcOz zKO7`R1d|1;_)s*uyta{)TkvT^hCX08_^E;wj7DS2NwcXvcp#k~FwaQm3fAxd*1$kQ zw1-;*Eur}@f3;sGWJX8qF$)s#_Syj4dzwS_wmR%UZE z1@n(ZBbS;L*5=Jcm+m}RnaxfV%sx(APXolabLYXz4V)#I_rd5S;((;G_AER;P2k)o z?lk{=kjI{#FIdZ;MJOVVLZ_tvPag0I*olJKC!*0g1T!*d4nX+yod?T@{ZzpU;?SDl zSMtR>4_01CtqFF@U_}o_`K5Y-a$jiM8GZABY0}LU%s&+ko?nMl@HYp{i7-hp>+xvg z%qIIw!T4rl*G0!$LM$`j@S{5qR>SQ*cd$mJPyAQf(QnOJU%CYi9XkuXpg>1bp@{@$ z1XOIIAYraLWTX_L$(8NDqTyfrSRwd=wX%r)K)fkI4I8={u2!nj(`CC}L%G}1W-Psj z@=1Ipp0H7I4e4ozxSzj-%L;yFx{b$!jbVK~EQ~52`Z4K&%Wfk!4DApf=zLPGp)$^OkMJC! zS=aisu=t~@ln#Of@b&~QGxBoi4YeP^&*MMJ?(KV68zTx4asu!&9M5iz*@a!d_E}U9 za9<4XRC@^O#UR#3d_nj$m{2FMVG77-65l4@^C%S0bAuY-kAf2{i;Vh08V&Q5F&l8o zt|q5h7n(Ww@(&IDd^|cb^u2Ju41uzBmG!VoOrQ`{fxnlj25s57pTZu3up4@^uzLMP zTRhGP8lxne4ulG~Beo`=FU@3zU}W6<&pz`KyL!(cmko^W%X$B1V3sDqBj#UgAN&50h@Rc*-tBT|c)V!SClslAFGB;5`34t9P4E#b0 zXxLGh3gP0W#n+}q$s`y&PCzs6q1{}0;yx6mL4b$&>9`V{60+Gb3L{Gh3QVP6BHjo- zdw~v0A#q~FWZ^Y_g^*fSsnF`f(WF_y(zGP8;uo;Nxuqm141de!fqZu580cz(>G8i7 zNGO+a4Fr9SZbaP%iH#41-~bvp%Cgw~Wt^@(ETXu~g8yP*F zOmXrS;KH=@gu#GSeoSd}h)^Cho}MPm2#E14jvbwFq^J}sNiSJUhleY<#)7z7z0y-kZtSZB z4g${Hu>hn9PGCJt%&+^?MUTJ9pthi9UeTRQ(Wb&65Q_9b%$op{;goH$d5l^~znaX? zdio&RxF;k;gn@B?DA!kw8PTVsS+?k3lwV^x8n=GD0>nY>|CWpT7SbV>0aa@Cq9qzV znJdU`Y9LrpVtTGt*f-Pj(_3*!x3Z%6e|Ha%kj_aiKH@MsxLXYHVRZ0ebg*r2br>Cd z7#-{amJXwXw|rv4VRUe|6UAY4u+)V10mX;W!J7JT7#;lfL2kHq4=r8B z46W8`h)q7UbRAl{>UCIaI&4#imM->bIka?H8|1sm()B-wmM)eUILw1T%!Ah?-ore2 zIzy1j=IaVL8;+P|0{r1q(b!h22v~;ycsvKIn4r98KLrd3TOqW#h{9TFZGW~}Y9}g{E<@{mA zM_X9((9(5i>0%)+)|`{pfLmH^w@X>eLrd48rOR7%4l6zixg1)$(z=Kjq-brLUM9&R zhnBATj#Ou7eZjZ6;$vU`;EXMIE)Cfll`CQLVh$D0&Dj|(e_wEK44M(Vhh89!En~iP z8p%-T7tr1vb|Q~d81x;`W*rT*Pd1Gae~crl$vZFiB`4+Nbnd%gQdKtX6YaqI6xxI@FHq#cKgbmoy*rjwvq!zdw6j7Z`oHzhhq zc3~a;1TtNL@?);c=t8+To=pPW6YQ|Nd$4248OWpA7l3b#gYhqTf_@`>5hR9GW34!9 z6CClrYucpvYg3gY!;^TSRjZ>p3G%~Gd4k19t_S+4EX}OKfnD&r3-Iq4o-~?{_%;BS zDVPC1bOEmJ32D+d3!P__#d+2(4FH)+JYpNCSY*r%jiZz-xnTw#pj)En)A zao>LHQi~n80Y6<~FAizPme$*sO7g&8@*#Z5Y|4%lTGWj0cGr+7%H{Yur#0CjEXZ$g z8~sC%0a2-jr91J(^xZ0NVlU(b7DB|sWxdx4EZs(Yt=o|lUaXV~r7{xtccZ%-Ikr1T zQ0!kDCFruQ@7!cfX}xI;O&RrY${;4M7WagE$F#h19A?TRV$bf!9et|Dc^@2%21Z_S zD1k0)N}`=O@gKXOcULfZq|egte!zr9#Cu{=w6rEg=}8c&@Wig=;op`a9X<9`riOi5 zOq&~)7N&ue1*%O2!(FN2lsoaRl+B=o%xZ`iEI*%4?0OX@yvcuzcfRPIxe z7P{=%&9FO|N6Ct0@i~KkV-tmPd$EuA=FkD4jIK9Otz?_N_B>dcUm5p%UHtzUOXNDM z=YF}~QpaHKvz~Et-nP|vdQG9c`-=2?8*ArICZ4kE+Gf2b^xAA?=ESd*5j_a5dr~)# zBNhh+nNAQ~{2yDXP~M;79vq)$IXaCp_m;#x{EBB9mB0HO)TxEwVcSnr$Znd%6-lXgy5|I z3wvL1Jsh%2WaSajq#Ua3j>YaRhfofG1-sD}^@R+w+$_zs&vq+IK^*PR4XerqBZ>L4 z85lZ`el_eCu#9$Qx#-JLWFnLu9y)35D-A70Y|SejR+dj8o2XhIG-C*{ZPsh-DR{Zh zEP1K=T&?zeYx~0b%nD2?$Iv3EmHfRiQ?_uu`<>*N+}&?px|m!=Uzd5b4`5v+T2#WW zsxYa{l*~#AEzQWA)L`eBwAQu3a#1#iB|2DS2wl@q*M^g#PzTzuKuuWH;`}jcx%d@p z37D55P7BMk_l0&s(wEqgD@OGjH<%N@x76kWw#_e#;O*>KQLvMs_79p&R$Svpc8Hy8 z)$2)hZ3pE|?l&YPS3Jk<#$%?GmvQqHmMJfl3$ER^-KMTIj%LoFuLnx8oW@xs=qhyL zLmxufB2 zUZQn0hGDP8Qhxq)9^cf_$tI2#4V;f>rt>RT(QsUg7Bx^(3-#XeS5dGFqW@TNSz2BY zN3br`cG17(yo=*vs47(1E3SZW^`wL?K4#F*mh!9s)Y)WFNM;jfhfW(;^C&Nc3YS<# zg{6HG)MKhN3v%RF5&%K37HJ??MnCI#jFaOVtRChH>ioEmE5xnRW+y71EXh6G05RAd zm$pQD5Nyykt=roPENti%tf#JLQCtU*(u1#5?Zs_T0hl<&qqXD|M^D}C=}$4SC6_FS1QX)CboZ*@S8Rd6Lus~4D2ffL`&f~G z7cZmKDLa|)k8vO_es5JXPxQ}mU5M-HmG<>SVYgZ%`7S$0O79od&`~9b+X(?qTQkTK zt7jdmb~KN&c>c4!@O%MT09UG@M-0oPfDU9I)^(#FW_M0?b>W23*ReVtu!~v_0rXXo(PzSh!xJLP0PY} zi7blD(sm6!H>FHAnOYaH$FQHCuc6PiSjh=g#XZ0wmEU!3ls?xsTGi*l!5UzF#l_M! zPykkqCv)r;J5G);)S-j4kBbr$X0iun4$KVZAt;UBhmeAY_y?oA? zj}_;@=%%MTcYm37MzNU6u_=>7yGXDpi+ygvm381H3Y=j;n6yOxDzS889oQv`5W9L4 zbVZOuYaPT;0l-d^u5IZv>D|n^)KZIy$vsi-s3p6>uo&YZ;w78;u% zKP9U=GxfZvbj;MiKI;l?c=u0Ei4z`3?cL5GwbUxy{G+C*Ao=}v*f#)T(N~o zEm>88`=E=`L2*Xh;$YXZ-4Sil*|?|Qh+nds5REp8V|SVEn|C9jh8=`E$U@q8l5n@8 z@;es{ZTL57)OG`*&9${78Vy);A|BS@OeEK$cc^d_|3`uX;k`?Ie4S!Wq%t@eOxixCK&VO+cDplpbe+vhE1u=$(b7ZO3!tlGf5B z>!~(bJW(2@5}5HDllhOT!a#}^i4ccmkF@A?04JluZ4-~O%&ce;(xS%d{sa3g0o>Hc$)rhZdbh5Ja)Y65w-@ZfCyx(~TcaFzpxfQA?i!h0X+97Qw%MkiZF+GM{V~6*zQ_V zsMZRQvKrCgiPxXt4?HoI>7Y&H+LU76cmWDVIa!CDjnORoI)qVFuP)VDY(Bcz5b;oc zU2DBVf{+j=5M~`%D|T1dzw)b8^=NLw(o|=KV(#=T%7Tw#oR*?_$6#9}=;shZs#jos zzCsz=*5DTLLkeoc9Ea`6-(svu-twbJ$PPI}r3xJcZmSAp8?4!hp(2YTJQ3ZXXc5U$ z$qc-H@aB8N-bvi6N#)8$b6RY94${e0f;zhElG(ft8ak=j8$vZNjYQKidGYt&??ZX-ma5d2xF+IzT$TN zOPC4WVW->2@j&TSKx<@=KO~1YJZfk-uZUR?9RXTbHXQC?|B%2zaR3J*Dz5XSq>4TY zYqmDQYiJrk7{-ar-@h^Q?V*d0NADZ_KG?6|OUiA5fi+kTsEQFUMRmib$6zObMht0W zZ$4%br$w>nd6dmRCO26}AYN}R{QZMREviAj5({`!ETL*9SWO@)Ipebgso9wjQB_Hu zK>Jzgk{}vP%7WsB(&p9DP9qu`HP?aZ7Qx>coaXJq*A-yQTC$1u*05ND)u?r4zzhN( zhfMxVy+oG+3d5feghCr@>9~AfzsVCXAq+eo-F@t}IT;0(C)_(CYKw^G232H?qc7k! z;-;lXYcQd^WR}kG3lffv8`qenQXO|F_)cS*O1WrZc526;6~PsAI#wH*ptMv7<&@a6B?+I~utg7DE{noFDgy zA6pjVf5w91XaO2-(Z8UR7oDX=mg0@_))L`gjv3YfgPK(qYjt#lqm`}p0D2z~YA{z? z?X^}{k6KcO$ndl?qQDU&+*)jHXuy!bs?3dG%(^(>8u4*14+}+XsorO_o)MC(N%Lxg zE3No3OUS%S5NUzy43fnT5N5l%@fVKD`S3DM?vlZhofSg%V{b!Ty25<(&clU!1v5Ea z4_K%M;f!)Mk%!R?=Ir$*?i~z7)&?80#{hDvI>gNE?f4zUN;P5s#e5gW_5#s(j0jDd z=6m`AJ}~muMR^0~-PIA$unp-%lLdA=+hZKPNnrF6e`${Zf3`%>TSV&Ah8kGlrV>$ zudF=}%@P94?k3TDCjQOh9B0r#U&|b6zEe{^AMt`AKvGuvPP4NulJ8=}#c8xS*#u7| zQ}c}8VwOE?Sg;}5(PZW}i>(Qx^!vjbXq5H6ymQzc3_<#4n;zaqarj~*)1`9$MrN_@=GW#`_K0_;MpysMXrB#*^F@rSACG>2{`E`S;>;lGzDSP=bWRH%GD3{nLfD3&cpOP-<4#Zkkyh|I9xyTmY=SOi z@x@6#5l9=d5s(3jj{|Y+he|h0sPBI${~baH7?IftVmDUlT3{lgmr{|M3^BVX-U_@U z;`~RUQGWp#ty(7fmQ@o7G{kI}-{k^Hs;Y0Mv-<_9)oQ=9`_FD@c8Nx9LkK&w92-fy zD{OGR=mS5$UAB_*y%6)zh_AH?DFL1?APY_rJYD^+*t*_uIB+EW$N|FH7%M@49nBqYT%<*0D^ZQW%Z{`da#zBkGLm8(Jz`ywegco? z>cjCMw*Ek?Cc8OR4#PHDLW;QkMU{~Fg&J)|6s8p5v``5OLL4to4KvkzUUK=d}qPQoD|ac{%f1RvO11wJQ&50|oaE1}1mllO^Fe%m+hTADTF zB<*sm;u{Z|_d~llKaodEcRXs-?^KqEqi59|W5tX*WhOE^38KJO`0sSjz;XK(&K{UbGdUpORg0B`*0eJIS*BTNA{x9< zpN<~GaI^X19OEz;tS4PM{h-1r>8^B?sNPVqq5=vVa9yr#A{>hp#NB~glYTwIz)|O& zl+ZQlw3p>VPXG_FMp9+nJZD@`XbdR`P7r`QPnJMbxa(swM65H^z2+EPSCm8I?@v3F zwZA*4k=c7EF6NS3%XbugH6QE(%Om5koAFIc(PvR7uT;;wi|#ZpH9L2u>gU#I%4 zQN3dCQ9pU(DF6#nkl+~b7uq0hF^OdZpA1N!r$b3PSu0@&1oaMteq6?6IY0{mzF+UD zyk62SaYJ=zAv2++jbw8hDgbBZ-JB7*1pvyhU_uj5H7&>rHI3BBqmQdZ1vS1vA+k(! zEmjLA(pcZ&O0dFEeTp~aN-aQ1+1x2)#h2WkR+QnvGu8kXawQy*>>pr4s2d1Cu+LsS z>4igG4*M311sAETIbSN7l);H0yh)EFVah{DzenZH1o0JQ(m+q(GMmK0aAUDu=gXKK zP7;s(WfDsZ-1aTg?bR~kilMj`-8=Mvf$>#&mY23}@csl}ls(HDxF7HnY+$=yd9kvY zAig#{8r@eBBqC-l5S^8s6}2517H z@5w%_?wPDV88!nb66d>WO&|pdpFa?~4s{6&ZF(FdUk=m)QLP%D*i^5!;-sNv8bL@d4FlL9i z+Z)Nx($A26*@hkd334_(H*jx&CovBVjHlT7VH&GtH{`Ii7_X?bNK7nTfqA7~rB%K6 zvc>?Z#zp~gGL5coqI~Wv=1D(}tZEHzMq%)3RgwwGMN=H|cy0ZBFy8DZYEF1(%8LtY zrEMhbaQpaI$UpBtcE54`pVRmAl9r%1F0UR?7~w}r(=QD)CnYA*Eqz@EKnxbl6WE2~ z9=}tx1jEG7_`ZdvtrH*0&pL-G3m4m^LB1A}W&dlZrUQ$%<6D`Gb9ethTbj*$hgmK+ z>YWh=88pMoVx&XD&N2Lp{)%X9&T9qHk!Zxeo_kO^fokN*b=TnN+VJ;1ko(qeg&EPXiK2&1{T~BVkOG z0L-6<0p=Q1`mya6Vs7Oupu~S)5uDIMu)Ln$?x2pN>j%swNQu`08Oq8S*BzH#?MUz{3eLUJfSlq5{B8C;WeO)bM@V_EMsJ1;~|DIS@ zDg`xKgurHe?hpwN^JPYb>KA|3Kfk zRS3Vo%9%G{c&CZ>dcGa4Y!x7qRjSE1jCpfrVG9>G{GnCY;Tc#u^2goyYpk zZ)Rq--b-_5-u--C14obb4?e>S(G8OhKM2`l*a84I;x`Rs*!shdJaYU|50_{*W!DzQ z9qfAW9GWK}XRJUG{>9pw*zO0++3?STFzqw_=DRFqbtZUmiQJs|uxD}aPvr5B(~MI) z-(tt7$Kh3&A%B9xfm>V#S?DvTly_a=kMccm;3(7_u0q<`i#F`n@(^@98=_UWYBwZ< z4P>T?)CWjc)H?9XaLJ6s2cM*!!IGy~H>_k%ijqYkIS1BCzWVEu_7oEtOENQQ-UY8+ zr^<+#7iiP~_oWUcL#nq`URXsVn_91K5oI4gxs33s((p zJD&*VES65Qa=;cWuwIyJNPgzIio<}K*geMj|AfMeZ@JWZ+9(T_JH=II*HYpy+}bU9xJasc{wVacbP$K$I!ImIz4P(~T0eLqzd38b~o;FoFQG z3d#H=Spw9Q0r;a`y?kz)zN0}Pxn#5mI{Anu{OS-OIZuPfu$Qu`FaK%tao8%i8j)Ri#awT&8* z&F!)+5ELTr@Lt4u!$c0_1m?7s3TTvG4Z-$__4pTj1>B3{sdl=0(6*7Q@esebb zeCF&#{yem#g&uQFg)jSQ%)khe5_#~sXtCcsYV69Ur^DA%;bZ|OdH;(2QfHoc&#a?h zit17=3d@N`@s?UNa#5+@%wF#d`t5FWpybD5|G+6n6b`tV4G#`1l+9n8+|%Z%{@k*; z)DLNL3I(@OTtPXYEku*rS0Q8K8|a}D9CEqe439lMkzXEM9!s#+#(tp2ztk$#c0mazUf%FPnmD~!968tn| zUn%?Ih+zR&TO;2^B?*q}*vU-ElWD8(ecz26)ZA+-ai@#Ld3!`L*_UXy&(O5Hk z)Jmz8>H}nmO10bMU>qac2^6DBd8gk@>GGEF1Nqb0_Jd0rpXfJBw3_LQi>!&sLj^b9 z=^t=>Av+9sNoZ>O1kI(N?2kU#Wrgj-k`IO7e!73C<8Vf-!Z`sBRP~xa(!n0!_OHt4eU~>i1`+GMwV-0};S~Yngy&xCSkITAxZB{)p>fs+be=IL0l7 z^ay1!7y~q8v}cj9BO{l)V2jh7GFXEF6_?awW*r~6Eyn1@VR?+{5r1o+?>ejMZjtDG+Yut@KxEQ!D6> zNwb6bd&!OM{>eIz!0GNGVE9Zf%&1IM+Utyshs@{AYF6be|0Y zFHk~d7i#|E!cwX))lozr?2e`K;D~^#itx0A0cTlv<_@FG6b)RZQi~KBKB2A*8z#aH z!G9xl`T?SBX?9($b4j`HY8iEN!_!*Dq(vMYBi#8c#`atp}O z(hY;trP%;5BDj$l|H-k~$**xV9cxy@ezHTtfXJPsLzZlCP%zr@bc~f+?Ht15xtQ#i zR#;4~ts#0!j~n4}8cA*4%K8fYW7yq7Rq#kRIk$miH5kC^ox{@c0ZD}^hVlU&)B0{B zcD2uS?F9+kMF3()sY^4n0gh)&pWBVPmszTC4yrP&FS=+eTiH_RMg9p<2(qt~w{n7@ z4F{Q?rkag!#T1Sr{12G(rx8ZZQ)SV51uX-Lv91ZdZzTc+hI|a1UR3a`IAlTIRk^j< z=5Ie}1Qm?)d(|TDpa2U6IFLvOiggZhvIGB4fV~06t=O$2Epl)4bpzw&0DmRIUeQDm zR~Z7#g-=kU?!*|yTYZZP2`yynd^J9kqVYn*62rMl6`4FMwb?4_+a!>j+VL7AIEsKB zj&jD+>_4p;+6F@B7Z1_t(3N+sL#>FEuuXZ((fNVJ&QMCkiYEUmM)=UFN*zU)QOO!~O)6>W2;cifH-5o*kvePlrJ-9 zn#nKu(C@|wQYZ+E6eZtsDEUOa_VJ`jBv*0Xi2?2Ch$vRP7l=aN!3gJT%kb;U&>SIy zdtUDmoh<$VCsbiRoig(QW^}TRoeZkqZpYs@|Jo({!tMz0*_%WFw~TiT3cR)(3b@to zjRZe;NI)>|4-Gi@%^||;f;Y|HNFXAzPBH}r8EjVtS_Dozv=4ZIlL7c%R$}Ns`-bM> zsw$Pe$uLrFjjh$P5_D9#SyV|gf8B-Q#q-;Gos+;FxZD-yZ#~?bSpfJ87zIT9hunbs zl=oB?f)X6yB6@m_wkIEAi;7vYri*gY!PVG{5h+UC)_d_fS=}*_-_W1W!9PUTVJ+A_ zY({MUJF?0d1BK+nO09ql`tr}si6!^LNAP!a=L*s-c}1c4Q!FXr&2cqUiS$SnkmslN zESKlz4C%x^DECy2f$Q1J?dGpW5n_oOD#+5h1&ff{b!GQi8CKM1wPnF=Hj8>YuzAw_ zk7yUBOQlIgpjifSAZrY_0=6J`F(d|OxQf|3$-x(65dix^?>G6GWOw1C6^flc)yr-n zgV%DB?zsLA+(2Ql?tT(ZQY#^N>H*##D8HvQ~-Lh>WK&Qe)#n67AOkQSQJt= zm(q@>W(2fsGUud2xU@-z!F4XO-zDTaY48`a^C8n-VI=Viv8>~I=WPvZ21>-)*AxZf ztw4r+5<*!Eg>|7lhu- z-C%U7=;G9`UG0CYI>2f{?Z zDK30oH(6nb?3^@a%-&aa)AF1fa#C~0)wQM{2Upj1if6a#ru#K^CAY9uYwZp!cz@*6{J3`Il$WbnwbUQ=v5(d>6{cyro%~N<$Gs;^Ddf za$3)Bp9m+qxEoe86H}&H^6>0HImHY+pC?->P7HRCx;lDTRJ!;>er3!l=mY%JJ3^wt z`PY|SD33FCP(pPHPNm%NU4>nb@rulxjkv&wXuRjUIT-w{ zZ|gF*L3>}!EId*iC8rZBFu|M|Pl4WU6UK=I*YMwP58;UCVL$TjiY`8iE;H=kS8>*s zf(RT3J<$0&T!DAZ|2Q-msyG(Rz?&j48xl;Gl)rM5$gR5({O+7pSn|6HpIgKQ*$A#9 z29Syiww-T!gN=KmopJUA_g>g7zWRl9W$Cr1CcF}h(CGKAJY}9>HwGGMoNG)NhFTx^G5Aeph@z8* zyzK#Lc_lgfQ-tT+)rPE?1YJ54dovUgE?*>N3G=&E zDwe3cmfH3*Cc2eCEV5zNZ-;pTRs3w6t2)VTEEb*QIWy4Q3DO1LKXpxG$e4M^{t9%s z>wO}n3~sNUMQv8iw8R1lawL;P4RD$$k#dX77_ezceRraV-c;P1iUATXD%DBbq6geQ zGa3`!1|6I3BFic~K_1;kwz_wh3Ap;M!#gLlJE=^7pNRRLVWph|?O#%9h7nE$=0y~A zxB?+}y&+HY_FKJNIYNL^2O9P?^voMw!k)m$nD8(Ds17I{#zcuRNVFs??A&Zj6io&l zDB$#jjswV0YW%wv8r6*!?#Lg9HbfZ6HqQ%T0 z@`x@UF{fr}?pw6)B9|1I&LXvqA2DY$&z`1R30cpm8H+f^$s^`<8xz|3mXbBoUl-96 zsoF$cm%CTWAbfkFyQMKNgx-Ujwa#J(tUW8+eHYq0$i;9Pj&E7s7@P@2TpVFnUAvFE zWt*7Yc_3Eeh7h392p(8WCL8Avda7a|)?-E3Zrefx0rY4w-WZ(YC~-A`s;;Ob&fMV^ zTFmb0{&0NtHQ+6>hF~pGD|qC|;1vZoLP~ z*axM;xEAQ$r5@a6PjVKW6v)sEZG@qCD=Mbxq-uAH9ojVBeP@w(2Zyl?;>^}|CZ@;H zqh4?1F$v#@Uvo-U0pTkJY_9;m!Ac7ROTm40towaEL`(mpN6dT%)U+z2njJHsXWO4G zmKdMFPe> zyi0hl?zJ}J(WH0QB9PWONV~`&1`nTk7w!DYa1EC>SD@k(AfBakLpm`S zbw~@2_;61joDj0mApyv;A&OYrjC61ju4u&(-GE1D2xLC+UvdQ+?>52YGY-&ge9baD z8fkh6C^yLBjxD|F5C+UBd&MYpIcFSwQ;&BxD`mx&rR+P06Utis~;?Vuv0xw_Mm{?Fbp7&3YA@xO%c7g~4d? zZN0YBIIGY1ybzxhkn`L#H=^BV8zYn>Zx2~;(8(D6B|tHA^Xf#q++ppY?Q)6z?vuv6 z`o{wwSC0@3o7K$|$>wSQ{<)^Q<~2u4jw}fNjBjN=R_EZiGi&okqieh8KnLkqE2IXW znk_W2w@vCU&rJDww|HD7CV^Qy4c(duT&ncqG;)7`{Sfl83(Y&AZK zu*9=A^KhqL5euIC({Orao8sus1XPqU5!o=xy{SnAD;dQd^GA}M`2@8b0*5!Tt8;}N zIvXlD^RvJVBx-R6i7hiky-eFRTJ67rEr zx_^(^dj;=Jay~cc(?o%8wB#0)njABMNq#mTY~Nwa#Cp4tksla4C3)UL0xBlgXcx5t z6B;5`>RV#X>Ym1Q@7OO z;XQ61FhRCxSWD1w+D+qv$h*!Gicz~O6nirD4F6SNY1DiGt02}W@nXzu3d=JBW6OiQ z)y$D@HhfK|aH09(B(UkorLS}oJSpfm7{B|W{o&ZpLavhn7VgC`U9&4Fcgf&vJ21;- zcvkIG-2TJzlfT0S>l1CCMnE zbw8&+n)vEciu7HH%KB54N@m{m}fgNP62yh` zO899iz3h6Y3D)f;o-wbn_aao(yuAc}oRp{(Q;`&f6)^Qs)yZ5N=@n^9BM78DFyj|E zn*WmojXE3fRbr5j71I+{lL3#7S4b~_@R`QXXuZw7bs=#yWzi&?D%oqg4rjO|P6m3= z-*98vHOtmMTXY!ICAmnuN^sZR_O`3NSqeiSkX!D5|Mh{>(jTAvnsLlQ4P0&GPc3JUrEGKJ=au=E`jt-sy%L{t(DCGwQy1VM* zf3otkGYE-8)4>M16v4KH?53*P0#Np{c{K@ZMKgW^ce}6&G_k(vXh<#|Q@WbKZ&$AR z{lphtM5-dMNTK44VvLmFw0dt>@;u6s+!>@}S%9?sDDCYkxeO3-LFnwII-5p_5% zseDEvG6nCgq1Ucg2eNgSSz1bCH_KX^vU4CT^PNz^S@MAOlsjrd>!Nu$cB=w)N`fw< zB|Q{J3-M-)ojN^bOLCcfcRjS7KlfdCG4V(^U{9L1sPMu~UN5@rl&0mXdwbLY5ziE@ zQcARk5t_R|)w*hDPUuS6Vv%+ykd8M?!V_a$=GMp#xPQ`qHYLDIf&fYR31oZ9Ec+qv z?7ZBFJy&l{yY(dgK)U9T#BYQ$#e%3uw9vo+=PY|$*-+C%Kty`5q$2X4l!DSdZ(1*> zx_o`mVu9gk1LmBbr862z+J28Xfc958K=%;F`%iv7bc?n-n=^rMw^vswr596X%Wasv zXidTz*+=AYz8Xmv6Uq=@K7=1lVu-)iWn^yDjU2c<-RR2_@t2je_A^x)Y9Ki{>g*2( zRp4jEsa+4DLmyY13Eeo~!M$tQ5q{oS zt5?(}w*OfAe{PI)%9BweX)P=+$t+^qqS@5O=`@$-&UKj zXE6A9rp>@HkXtb?=a$*V>xCm`!rMJo(ERGJ`-h6Qzs6dvj+}JViY=fZB}|WvDKzsz zUhHa%e|7Y_IX31WCnM(AS_xO}Cytn*xmh+X8};e!U+Fi`*?c0O+pX#?tMzCRm9?GF zn1u#fjwE48!Y&m>$F@u8E?$MBp*d!TH6sbt@>K?E;MYE5PTIL`zETvu{(wQp zH?%hu>0C-AQH(EbS6I;A?+II;aKhQ#Y+65|%>JQ8*==zmG1~vjmfDnJBCHS2+{HR7 zxURv6#5cdk7o;7D|%}#KyQD z1(cjkPrA*vA9}oK&Z6Zn>RV0l6t1FZ=~f9Xe(@RgXm&npfMubnJwQklEuOBe0##hU zaiDvpi9XQW|MB<{nZ7acl;NvvV(skI`Qq`SKFlYm0%p&-IE7FCEYJUbEbm{Sy1bdJ zH`@WdslAtkXQTG5EtXK{zT#*K9W7_;SG2C%qCqD~=Pbbcr5mYvD?}BmpiwCoW5Yp} z(o*_U3pywg`-dVbG%jffy30Q4LdXJV^QFw9-ZRdq+ zp&lz*E+5Z7gr3y@?}v-XTL1MAPDWc^((Id<_zzK>%zJP{4ycd?iWzA9yu=adsU|Amlc*pWq4z-p)TB zED&W|@NEbziD`pn4pA@w7_nTf7*5NOUl{kscZh=_5nSSE3+UqokM>#xP+xNQqN^n% zrw|Y?cat*U?s%&_BOEpyjSB)gHER%`^6LrKTWf8WtA8q78{vLz=8lF{SlHYw)Tz^Y zefZr`4A83vdtnLlJRDl(${NjqiGBH@OI0|q+J1Z!BhI^<5hOY*6u;2;-)NHKNB0}T z9MV09M-_gxgrlNR)c#$-O5CSCLh>hqI@`yDGIAY)+jGXuk!HYFErIdm^l&>xq)d%T z%d6w)>no*eG>(EU$rv}1O<_}xKL|B)M4;}oW(mAxvRS%@YpPDV*6;8bQi;29^t$6G zkP5QJn%wFfy*lyfZZiv~PliWG8yn>X@V`|x!D<49bRe67hbxOhyQ1U@Do|23yNZ0G zMNl$40JyDJg{pCDw5=ChDqG$*6(a-$!7e7gfIWbG0T{O!H+v}%C)zGo!AQrB^h)++ z@AHsB$}E_vXC#-WaKL1b2w;`-%{v298bU^6S^JBWomy<_=4PYb-pvwdwK?{6fF z;g1mPmb)oKS*oLn;ac;8t)0rCOkQNGCCGY6;gAaX4_a{pdI@=-FSH67y~l7`f?lis zqFO#GL<9prXiLy{40k_F?KhCi;?nIhh%og#H%o5w$O?OSsPg%7C8PUex`;C zVQQ(aWOYm%ujCmZ6c{gH?_cO3zm#Hc_ktR|{7r+BW`_qPU0;?ygjcL$tu1Vth{H5zyZu zHL!LZcy7YGBiqhfEJaufH5ajg0M0u}bK)&MdtwOBXuSmq`1()&KzQ}Se$F29+9dWd z>GsrB&J$c!|f6@QumfE~s7R{9LS(w`ev!*>qG|6iDaAzFK* zC>mOZ#WffGB8p5DeXW0J${PPgaTr_MNY)^|+b=^pDEjeak!pU4VL zu#u+U&@?Ul!cnS@? z$Cl*{guz~eKM2A!lKPrEIfK?Q;SXbGu=U{+@W_-jgq0h>8?b%2PeeS;fpcsE=1!K~2i3ier9>)e+&L>rjvj$ky6BOK~SLsEV^C$k+ z+o}=2zDXIgMlFB?xJ9Vgxm79yIljIK8xll$$7{)g^Ggd$`7s+A+Q@&9Spy$Lk+LvH z;~GF6;1Ty7Bp0Cg2A;R=gz>#F&Z}v!bN|r1+yV)uc*c^1`>{v#vH$3cN6fipdv0?c z_ZrcW`L6~fV_(Pve-cLafScndOP7r|?H#_}YPKMmgPdUYq@GoR0pl8$PKwI&_-M|D zc@J4hNRc^ect&oadTRjgEmmlToLs~`goL$1Jy{1XwW`fA_bR-4uvAXwr=S#t&=sp~ z0N(wQDU2;@u1Kje{xVL&A(+(X4rtV^Ln!oHc+vfU7k%KN1y#ssuxB5{abV<3EjMGt zM4Nd+Z*QZc&!m?Zp_}mf3$8C)3f&~XRP$$hV6m21C{dUkC?G# zi;wW?-f{9b7lSm06f0B2QcYV9Gxgc1`5iW)gF~UOwxf{lQP{lOr}}P=^2}(TvZAYd zDjmCF$OA=y!zcz?XKy`W2UX8?fD1&-?R>z?UxE5(*?^beMOG=eh^G0%hMp^gZI z(G6yS$UP=@Byca^M6pL9A~c6V{6rle!R;$S4&OXtPO^y*%7N=Ih)RHXF2>0{-is!F zjhKJlM(G-G)%i8>uH+@ctJ4~o=!Wu~F0PmbG24=l=JkdZ24n4n|< zM`vY?%_3oo!F32euj#okU%RjL&Q!cdL{64jKM2MFgK!mLmCM?V)S^FB5L6Wa8=_M; zzW{||LzoEt*tjt~yXGIV@|R&kbix1z+u2%$GsO-j573gT1InCMAn#2{44k${5Wo2# z)jOJlLx|%WsABSK*ROhTH$=fmMnifgAzt+6bwiMo{`_IcNxu-fpyjLAxr$fUoh*cc zbgH)z?7w&r3>Pq)OYN#5F5+40%}*#NFg^lsC$P#rU|B>#{LRvuO)v~dtp^xSDQ2Yb z_?IJQL#fMA^Tm`t9*>U9ym?V)0JJToWZAuS}Ql$ZJA~rczYODe8 zC_{ntD9Wf82i1F-zi1!J}ifpG%SCr|l26(EFqUyW1`y zGRLNi?6tdG{$8`h_tldDu7*er^)`}Gri_m=ZEzoel}j3+v$nUP;5z{h&*792@v~1r z^yTj}7v+QBJxIJv*~5CH(bq`s-}Kp3Q@?CZcWE|BZ8%MvZPNYo z?Uu|mGik<6X0kJrwh;vd1s4<)R#5PO!U_r=Sm6i?3JMAe3JMAe3VT3dg%uP$ps>RC z`(4-l?|Eh>P222l*Hg%DlbQRupZmV<>$>ji|7BPPgpVkm__1A_rA3576tm;RN>nrx zK_=-QjGBp;Vc;A#Rzs+_8fdYT)mk;j8C+;y#3qMLpwlv{k1-70gm#w3q-2{w>(zDMXe5GsZ5OlY?@THGaGS zIP%jJj)-}Z=#gEz#ER4Oy#pmo?aiZt#&YTUBhi6Vui2B&f-Oy{ zB09U7EkC$kOrEDvrARl|2)-Vb3Bu2Ynrw17ZT@bpNvCH3@CH zR&An73Mt2@QaE0ao!K@*gjxXO%?Sjj_o z5*B}y24BPRW~=38#-=L6^GG5b1QNY92v}?}7WFH2!5?8r8?2jAC@z$)W3ngKTg|Rq z5VOI?2zwsns`TYu=vZ4I?q^W(A9~`!ndyJSZ?Hv`5sR?G!0jNvX$-b9#Brh;Dl*b6fc@^Aod*R_{425KA zJWH?f$p9nB-oJAwzHX+a;U|d7LvbC@BRWRqu0Iyf8_)0E?l!k~@(=GF?74g6}R%`jN$ka`HLM;!aisFAfsj zUk7beKL{@IM+^(j8k`Kg2G_Rar6KTy_Fx!`dBs#w8g|uG%EL+^Ka`jy0#0b*!~`IG zL;ZaNA(oKu;IT8V9k@A6cxba$+5+vi3M23G-ko=iTFpmN2*g$81V!wS3m^oT;Z~^} zYeB*y7&ehawIw$2!fK^KV^hKB*@#TZM^yS0*MyNjf_+*MOSVK1+YA1|D$?uRU7yTz zv*#^`&!mlTd6wU|YjA~;VkoTGHH;?WH0(kJ!4k2k@C5-ih?s&a1RP)RTi}nAsqWii zgO`!?ild1*B(ooTyfMgtB3sB8ViZF#RF-S`UK4@&w++&E2>~ngt}_V-Gi=G_|ME69 zxTV5pv2cZrZZB7M;4e^zz4_j#H^pRM<>TjgTeLf3B}I}+fz@Z3kqC>L7en z^`iWF4Ox`Vbx59;5kklQQqYHNmI2|thL8hu&&V|^QPOnqtbsn@>M0?XM8gu2?XFi@ zaF9d=7oTo{sGi{)++#7PcZOuWE9IsvNyrOO9o3{awvj}N3^42z`)4L3VmCm@#cQo% zaxqw-(-zX&g-w6D88t%}hP#m2P4l(W68j+2D(%5GW@@02Ly=L?Vva@e>#Y)!)gHsb zBndU-s7bZC!VFYsGDz>lSQo8s6HJ}=)$&RT2uv=ML+WM%7?WBgh)gcmQ91#Bbe|X9 zkB^#%55y;VInLHsC4F+f{77{0%-2}HK~}6rDzH@XQ;RO+BGmbOG5PZ}Fb;`ESF81H zWJTdY^%Qcycuo>b)U!hzVdDZcya_UpECB;Gvr{A^ zb9GtiNSQs69ukL`Dw}8+SWdowp12^Xs^UnNq|+V5?SS(G$6+^cg(o0y;H{Y}`zd0N z)oAykxWoD3g$9ykA2AaxjGfGh9ed;u@pR~Gb3 ztRbCI!o_#+_NTJ|!&un*s?sfw$R7I*X0RvT4XKBXWp=gH7O8sZ%nPB7mFOX|q~xdi zbonIu{JRH5+D zD1N%@Sb>|e?*6^QY*wE@Sw?u4k@9<`as&d>qjCc*%0HMszsZPan+JQ=#&OX#pk=?$MVTPXI4amNx#%-J@wg8WM2Kcj6n!hTV0c-w!T-O(AT0Ph zsd0a6ANMyM_q|;R^7m1zpST8Dd3L@a87vbYEvVg|nrcSR5DS*oGq9w+#;!9~NwPX9Q)fiEga&sbusQhYPK>^xfaekQOH!fK!9{amh(h0P z!lqqJB>FzI_K6ii53jO$xl*QaiAj+x1mY)>B=mY61<2q|7i-XM)p+SA&uUji285NJ zFxDAmB#&bx{2{YP;u+YH3Pl-$eXDKB!b)fxE59KRO{pRR49kZy_Kv`SL5OI~wpyq0 zH{~CBB&CQ8TaLwg@dG=xI0*q zvp-iuEiVF7Y%2n5-&4fE|1CT@Pl60o2}A=(+sU&JpL$ujXZ&D1jbl@LCI1zUXp8}d zFmKK@@VdwaH%Xx12linz;U!JHWdwQWJ-%L-^R1Gf1Q-ETK!1jQLK=jvjWzoo(VS<= zx!Ud0Og;&4$n)vT*UUnY6q7N7G`w@#v8Iz$d|;v!;0~V?>2$;hn@-SVaLp(!sD?qp zBx(Pmq|w>PnPTyG0!n=vFzh5V5~u9m|Gu$EaPp3lVJxGAJl>A7DQiX!>XGs}3hB-5 zEn1k2L)obkZ#_Q8n8=JW0wLV!ArL&^EHZnA$N=vZ9D0A>I69%0eWUod`B)B){P2SK zIo{g5$cuOTYHq$WF01`CJO1cU-#Aq;WsSYZyvF1`bAHGu^gNCIRkiJ-=|Nv|WIxh;f0izA&^uC$2_%M-kcmv$RlSqNr!AnnDa4 zFXtwqIRcZs*@ym3G6q>mc;sDIn>pTDEgm~(A+snm?RLD~W+qv_;j}LKJzG$Dz*WfT z(V~~trjg&HzdRPl>qyeMT#=JKnLc8K){p&%zXkLOhY^Jl7_=@EA)2EiTbkG05!b2x~80$Jr7R0*2j=*Um~11T()G zC%Z@?4}2V@G30P1`2g~r{A=?04vu}?)3s(Npl>v#4u7gT#T`M-zXq|%D#L@^!?OK( zO1%RHU0ki;NY64KW4GhaQ0b4I0QLKW@u^4a*U6`?z@b?iZBknw zdLYgDM5&974GbI$IwD;>;L<<5=Hr$;0xmLk+Dh5iOcdGXFGA(t0nt$@s|&7-WSbd*Wfu88DfR4JMEy>{~YO2Bk$& zji#3R{TNo-NPdY&02dCQmZ(8-Tp$GdGNfOPxVP_Rwba$^W)p5uc`SgOK8};E)INdEh9nlEx3$GlU6LXbveVH2BH9IxeY{E zt1N0dIcmbDLwcCu-HaWn+}YbXr(tM`xV`!qko?$zcmSBfPE8}FoytnRfsSrFPGRh% zJM=#DGCg2KBDyDR**VA!CcGGlt5={}!AYjKhmVt;kC(BEcR?q*if#!wg?CXCgO{&T zyMn+>W4w}CL7N)=3@DR4YIt7r8_7 zmt|(KRS_c~o`{huG&8D#V}%prqYMu)<^K3GzCIW*fdTVq?*tW08v~d(7m6pwH6#j< ztzkXvki-vhAjiiM)TeR;Q(qJS6BrI4nRCZ+E^CxE`ju~S>k=tVBIE+F(w+MDzu=`c z*61nPFRfOG-aWdxdJW;nVS$=G5hDjxMUmlwSmb6|Iau5T{-6+Ps_2nIDa5MasGCDT zpb3$%4Lvi90->I5alxzE+q{M|M7|fC7z2>aO92w20~_)I{48Mo{eW^(bl`Q++70Rg zQ4n_wUuToPO9rU3AF-?H7IUE*mtYA!AU6S^b3fwz;Wua4JLWEJpvn@sYx0^*&^nD? zl&Flb$re%Q1m-B#0iKoStY$COro_ZhftMT;I3{8j0Y3=+`feKXacl)BPXvQzZcq=J zIy${b+uP86H|zPU;YE&nL(tsVvLG8?7emNuD+NUM%-aQQr?B$@`}0fcT~$SM`y&p?Hm^djJS>6|0)pBW`l5YsnH zAHYr5LR++u<{scN-RK6i%*$H2@V1$@X@87~IuoX0jy!9%iW{hb1EvvnuNI_^?-yfA zSCr?=T?oCcpaM4Hs6g11HZQ&*);i?xj=Bex09)vYVNWAKdp7~8hiKc0f}){!7tWEP z9?YPCO%G5^;?5{pRIXQ6rOlzFSc3gZ_9KGTkR_6!UMBlebi>ZWXC8|$1f455XFDzy z9!35d_!qAWM$6$HP_6X(U{gN4NNc-8K-I8>4O3to%mvM)#R;OzaL55Gy$9UYP?~(<4BG#Ga?ToJuU}0olJ_gy&ILh?c|@u zln0FqIu~RGv$h zrpZLiS7tQ^`~%7fZ4=KWR`Zmyq=)=ry>818c6M4i2Kk=Do%CMh{Tt<(L}F4af@v zdf4O&FStX8B=G3Y1qJPlhio8JboI4$I1lOIep6^pRwg34#X`ooQb?D^-19Zj95kz0 zZ1?Jw36@7e8R14ye`uq(kTnvN)jT=?Kbc&`siT{+;rUVD_$xE~MA@+YSjeaXxmQ2d z?Dpc4c}O0BHkCy8XUMZN9`D9WHyPxcL1}7Bwm#mrKt&tDSwH zTZieOu>p6rTk!vIs33$nCiH=KVgf29iS@8P2sui3K}b4 z2LFMyiR5C&{$dUUXIesqyQF%@sev1$6a`f&9c`;Q6*Sz6@80hd(%-c&9zX@7^rU&8uVka@Ud>1=__Tn z(MdH$MHp&-I3!c?#cd{o>{tV=H+8aBr{NxD4-l-%4HX06Q84S%qADVfV*@5cyCrm2 zd|DQ7Y!suHShfiIozc`iM|zC(^|U=G`O8$;gYEEA#-O)<#)W%&z!e?*X)eDC@g7?t zM+@OB1TUXh_Qw+frqDu2oGETFh}sXwr$2Fj+<<(3Mvnd5RS z5OkWRAZiDL9go-@o!Nr0u@v133hv6Z-5i#3DR|avAPtgyz{17$cUz{EV`M=yVo>AO zL7j&E+v=u-Cp3JUU;`b892rC5qJ@pel#>xZZ1UxhpDC=EJj42$!KI=#lz5!}n1R?= zq;Ca_(7=yNNcwRpxGL3uDSXv@d7;{rWCZ^jtr1d!V?w{d!dut4c1wq>#0V+JufYP_ zLErEfEA5|6OT{FbDa3`UkS)`C_p8=75w0af&AZG1O_Ev^=aj9v0h^`9vj8eBJZfCP znP*jol%l{uVS~usr&79R1yPWMmFT$KO?i{k3zB7HuW_A2%5>spjGOPA`0bpiBy!W+ z>BNp)7+I`u>>zb)y)eH?5m1u(&~;ivy)yld{s_FgSuu)7Cn0yg#lv0`fWaC^Rd50B zuFoHFSIv-SYoW2`cH-Eay{;2Ze2twTSmVQ?n&^On#H!X&<5T29a-RXG4EB}_UwOna zdh8}y)NqjW5#{5)_Hvc^&~4U#@@0t=c~cKf+yq!CX>=JUspo|Re=n`lQ-cqnVzCk- z!9=LZo+T74dHLoKp5ZfZ$hp6WZWgS-L@OAVP3!|->)`D8A-Kj(TEFm!7^K|Hk^+J^ zsr0>Vsfesbs6<8-8h6G!9D%Q_@tk7n+jkQ7f!^pGMMuseJt!m z3JJx{V1tl!X6hv{-RUXu60MgM4bn_G0_8Dw7L;w z#qa$G+Q*t)&%W zL9ql6^j1fR4VAWA>u9!OS~upRMd^v)HnSoq-xv4u8q9z;&bR8>j|OD?Zw|%7R2WZ# zURZDLOYs7(RPl~psj^Ea08d21;44*Xd96BRV|n~Gu%L#n$o6@mvsrj))jcA{XJ0h2+4 zIkonANTD_%un)mUxSr)sMgx%*g3S|?V4+N|fC0GahcV5u+?%X{M>_X>hO^FA*Cal{ z7Wds*wDjo{d3T+Xl{cAmPbi_2gHC1z4U`I=zctDsYcPb);}#Ti+nDB@VdR2aG!nt- zR&zvYmhSw}Qa`g&t8ZUfms+$osa;liuI@@(q6{6^VBJJ7uPi)-lFUkejD~auApRGtCL;VmgzXn(X zhRdYvN(BL!-#uNFlbtUYFX3-nyc{P9Z3UON;#p}8_8jQ8&;^mSk6FUK`I#Kj`Ps-h z4Aq72rar+=s^P@DT$Hv!oqw%AiPFX`96;~zPgOlq*kd+hdV-327x=Yicr^5;&OmPKw{x^qE(;Op_UbbbUoH#4R2P2Qr{i%u^bo5rS4WC=(Cwo_J8 zB@!#cfYIGfohFm#iL%-Cd9+x9Y%(o`k5j4nGplpcPhpeC$+%^cVL}^)EhwZRo zGLh+tf`lTw!Zdge4}2-M23oR5j=rNX&A+mene*h|80ZciD%@5(wdh?lz?&Bm*Cd1_$bCVb1wmx;M%jo zGWNI!Jd=yaFVerkvfBC1n1+EeJyUet__9t-~Z>VX(4Wb*$Mfc|Dif2 zWZH2U4c$qlc6{or$QKtXSKzg(G?uFnv>LF(jHuYb7I?75%*tQ5AZBe5Z5U=w$%jhN z@@sS;DvEV$s}4V`ez9bNRH9t;B7Dg3bWz+zt0siHG%%t6?1Jyg86AwCw6r)=F5AVS ze0y{#I%U7%)9fl7^+qoSpDm#Ds5MjCs-0f+w@gxdWU4}R;iJ{fiKOKs{Xz1C_i)0=7GMiqBj2!1M1pg0)8}B+e1g~9W z{d|a7KPQ(V5~EpfZLNCck*TQ*^qp>2W-tO=BeyjTO?+n)#oa-fb}op{ty1&ZWDs&F zVhi(KcQJq*`O0*nBOXr6~^)iqor- z_sSL$XsEWc^#gQ!l4saHK8gmOwD*D7iCKPv6DHA%5CTji6-vr;C<#rhkS0-u(q++S zb?n0w-OPJAbh^=C1B^9Ol#mh#G;R80jr2evn&VYh-h$+*cRwt0@^YpGVx^pmi{w=D zIZQ6Jk0>n4i`rUjMZU5vEhT32I|t&S$GHopuh}kF?Xc>9W)5j!z;&4c`jpvS64BB? zqd~d=qIa63(LGZ|8@ZiKXbw%CS?5Pt|g2+3iQw)4!NmFQ2^G z#d2$WF1tC(()`@Y*0RN9QB4-ol-u-V|WBtdYqC!T-_4tk~pN)XaWgOCCCEdF{Z z{xy;Cf_^-!xRb(3wEUWyI=_app@_;|0!ox%ysw}ISUloXgXTTG@h=}m?l#P^k1nHu z)KaD8-9_^V#lsv6rRy3Kd4A0)3usez06mk%nnTA6taNU@@F)?L?3M%p>uYO}YH7-| zT2WfDmY^-7g;Q|+e4- zrzw%2v@JjRY)Yq+l+g5x9H?aZUU7652EMUT*Fc6;F#R4)S<>}YP-$hY$|eT@dKUxM z5S&%4E$nhkbA|8D$w%nTh;G-_rj{O7+HQ&mXV7kYeDVS=|tTmOFF$AM?_L#*X3}#*8rQTWqj8IX{x}U&*=&WJ2TY+BV8(1!ywJTf4(W=&eJg zp7^ZM4+CC{>+OtnqOQ2h#;RkJwY65W{o^y1zqfxiuF=;kQoZ5_xp>mN@(Bsbek96I zd<-T6EFQX|*-iF7OtVfg#^I)$lBl7l>1*>By|=#wpy1J{8wF{SxaiVX4<;&{rw7zT z$YUjy1_Z9BefWgjK&Hw+7RRsY_itbI=f! z5Mr82H3SRI9?x?;9)6g96NwAK+oBjKz+5u9rtRx#1_!P2(rXAWHweu8I$G#~Gqo}$ z$4(B;H#N3aja$D^L=QQW%~c7>7Qe66i;(>oDB=i#CJ-Lz(?t^=7$Q9%$ckZVS=FLK zE@mCcz~o55(g$O`Z6JmG3T9zLnvdI?JwEC6z7-1Kzc~=2SA|stm+?u~k_6!xSW>P? zgWrR3JZt8p7>s6xwHC!^Ijr4A^b=wK>p)zfhz{(>L#KjeuXM6jA0B>YTHIPvZaNs9 zW*_387s8|HrA(x5Gr*oMn!S5IqBJTI8Nr+&2;PMNb3NH1wq^ijCVsk@h8Ct(9ZY=b zG)ZOAGN}KkQ<{V|4^&L8FolpMMZ+cjK)KUarH<%+;2iY{FejKgZLk~AI#_?Q$wm8f zXq!|`Ejnw4a@v}>vsM=nf!bdWTdj)Ib z5%c+g?4K^uFM)^Anhzx@Rm{jdx=sv-_XyS?I?6+2AA0K``~E1HH>R1lO?*;mhUpPj z7u}tHgvn><=Pub;T6|N=WKx-HycTa+#>MdkToJW*VDFkhTt2N&wg=Y}Um>sVb#l=+7q&Ix$yy z*{MzXVcZ99be&ZUAFyalyt@FmrLmKw0-{=0|Fy25lyut-Y$=tr5D%&n5xpb#(f9%? zc#Fs`nWC=MdB8p?;O8t?Y5CZuN$wwkJ+i&V<9bq z^#w{!_H@A0QURyFArhhjU|TjpFf>JL=qc16NZ%5f%F0tly>;Z0L?4$7=H0d5fER1Y z-(A$+_7(5S7If;6g$6X%%|*07a>Y%OMgQ3U5HaK~YDzX6;-{q?TOi=<0X4f`^zGPo ze{X!oGGRId4EsGY_ID%^#Cv3OZvXqw;7+`$<~@;{+?&D< z|6%N|dI0s{F0&M7c|BvUR;)#E9J0adjpkd(pm!?d_noZQ@vz(01HJLDvmqrmUergF z%zL-jf(6JU(LauSuCozb&A{#*X`A?6o8BF33YWN#Eb`ofU0hN?-SLZQ5W<1_lst0b zo`jc4)LOW!;8cc#p$_k+d(ar&(~eFwpiJ4^MY;8l+%>yr6D#(K*as$mcw_7RUBZ8B z`oP{8WByx#z3gKDyWT<3FE!yFRtX^=Pll|sV?2y$Kh@b)eed9>Vl_ReLp_*HjDe0Z z!o*@??b@sJ+SQ;vf|MD!MtchDBD3%Y!v@lq@k=n_m`q~zPB(3qONT^a@n#3B@;>eM zz?hVYM*#<$rYT}z7n%Hkc3i0(v!mCHb2e*;1--7Q)}eK3od;W|Q#-!wOKZ;*Mi~DB zC?Uh#ZMn2@t+d0C674xKntY_Ah7z13qK49YZ1)QNuYsQ-sE(mmdQx^j2;>RZrat4; z_4Q^Q-JEzbycD;$qjPzm;jT0+tejl$U|a~mxEFG0GwOD+C;ZdUHsHOhi(wxDd!hrZ zFg*hk+VR{3as?P;!j}{}@KxNk9}se({ooYKE`;{dd^|(|0x8>RE$-q#89aH(RAp(4 z7(u<@Z3fE}idqTcbiJXGOo){#W_z>QW)l)ICmgDDF}4Iv0W~{4y+*=yg!!VnBHPbY zb)2@zp@|yt;_R%$!imiHKz)^|&mn3UOgNyWCaN2vyoHoClvsGS>-jCZmUu#?gUS}E z1v6wJCvtK6hgt|7Lpv5JIKzy%ooN zl=Vb)7=~s^*-<1V>tHP-V%AN_G+6D{mV%);ud`{ie-OflDirA%2u8DKlvpN=kX$Nh zoR|*Z31noUg_+q|6iG!!W-~#ZGr#74kz!-Wm8`C|@2(|<-k55G|5*E~QU4%|*2wzO zm*A`Z5(J$uV^?}5+S4a$jD@jO+_*+qYH}M+1UzrO2w?on2I;Vn~gP=^Lsv<?-K2y;@rl$Om zC>mO7m?6(&NK^j^hs4pq+-kX5%0&lz<5Ly>8h+gq;q$&BtO5@xfWl@*-c$&4i^pIeS! z$t@wvHu`fs=2DK90g)rUxj_Y24ukIPZAZW=h+TanBu`=a|(V8Ryi{S;DhEd5J}P|aZ_0;UIU=ZHR{NAw)}9;VLdpL=~u zCGJFJlx-=M{n9L#ResT6O4#EHEADqo%o*XA5}(@~h4;t3a0wqXMi;no@*_(uU<6L6 zvzp7_KbU5}tR!od5U@Q2Hh{7aQ!Xk5FT70E5yqKna0GJwwQ5pP*Nsq}HoNWez$tEwJ$-uc=^^k&CS8Hmf!Sd+H_ zINB8}C?$B6u_dC0nasXGP)UyQ6=7|^X~I{^bGh@uBz%WJ{+K@)NDI_WKehVhc)9FysftCxBjc1j|%g$f0TO)K>MS4^jrJ z4zZMH9~^ZZ4HX%xoxFrW3LTD6fIz4#Z6M80Ps_m+1=U^66AEe$X%_%2h!vcm=tom1 z)gWxmM6`--aQts1F13J9hI3ho6YSpB1nH7xc{UhoMfKyo@rJ{qWkVq-JfV{OBT>)E zPm{9=e!ARPC%1wdG`5k=ap$5|JKA8^mHFA# zSU%KZHx12y&2p4~?}C`5Y%MBiC&3&hj|O@{NE=Mjyt8mu@`Aw^rJN3PbWnV+FCIo+ zOa0v?7sey{!3qleJ&=pn+dvEz7tf+N4TM@dAw&Yt7QN>M>EM$`*a`bVG(rPH+u;l@ z^u_;-vII3UfUl*hPN@DE56IUgyrqlWZ!!@wD<&^vQU?xVs-nk(CJ)-I8Jf1@i``2R ziEDV$&u5Wbsh28difNjylMIS(4k?3}yvljZ5!qSn-y{xz&;XK8>qKTf0bxAAFDc_T~zfBT~@+(*fuLe>ed7^;qVcgE@Q?=kU$(%s2P*oBR09iQc{u zTjQhEUTb@3))e=ET#e9WSgso*F|$1-Ti#dQ%fuhY6!LY5oNXvJ%yJrBVBH^{up`=@ z9YBSvM)RTGc#?@>i;e1PWf`A9rf_*|sf^(P;8Ua3*|s0|L7(aJ)fv;j8Wu4alv~VO z3(JI^^w5ynGsj_|KJ5S`1&5-oU(RT1w6-nxPY6wb5YfnuO<94htlVqil|&E4>BbUz z0OXq7JcK2vY^$^@1XF6Zur3yX5h8b@Zy==VX60CHN+E;M`XacTghi2&Cf20=4JFRp z1}Km=QLat9H-OoInoRYVzaTxa0Sgx^YoHhgNexw&`J27n)l?+AvnlnKSK%5SM<};# zq0@YrR$aSsj}D|~7d6iNgLNgWA;s)Pjal-nk#mueU-?TopYkfqHBI3*=qiwbyiV0b z0rVqWkHtNg4v=1sccK_wS8i#c49MF6VN+VD*jc(RVylGK7|@jT^hYYmm1L~2c>e5D zPr|I#q71i+vl*>$NrLoT29Vx#zR}~8FA5{aj~yQussU`vM&%aq1vDR7ER21W^n%zeKnez#~ajDL0 zB%fe)o0Wg1Nw!E`8_jhBY`cttbaW4Gs+F{|u_Ffo>P$_9zjvJmmLR4$s&A@=S)^`q zJ0WvYRA#GgZf{!Pz)0%O-JF<9`h`M;SuGckP5QM9^>e~A+X$9827)h3;s7gn2?#IF zvp5L!(w)MHX<#FX@W_&ko=l}R6iiXPGBaF`9#y0j{p{$`slp8Gomhy4Ju_KMsXLqj z;;uCzK~zA!a~)afem*agdaBYA@jKb6#lmYVZ2~G%wYwvU5}zE*JgqPb(ue7zOMg2!*nuZkr zh6zBrIZ;1yGwZAugSi&%bt2*U<^@7mWJ0KPx7|<&=ZK-UvBD#k@Wu)stTa#+07dV> zP)FI9#7uDBT!c>mHS5>7)Fs|Yg31(pHDk~sH|^f%Q3!qw`Z32Y3k}=DwD^j(v*ZVT z83lMeWpt%HsAxL4+vPhE;BK{iEEkWTc5I(I{i4o6*5ny-_HrNMB;X6vz47@dWE-82G+O5bHV6L68`<2u_$LnCA@HKCmwp6pj(Ei zi)Ej37;3&}XLTR}ZLQ)T!EM~AqMWV}x*UMrjiDSaS1XGF-P@1H$VvfL%U&Ic@o{%g zTgR5-DQ`V_TrO?LxW__#r_;0f%Yt>ZLS&&k!ytNTwNYmg4a)1dpy-jsU+ilk_g}Zm zkHXW@qy7;0cuy5Q83yQZTqZlM9Li$`ucP_3EXyz$fCieuRU6)iui{XROWDlmuD#%9 zGydA5d8_ipqQAVz;Q5_MjE!^k)@gcycoIun$h1Ob0~I6nd)Hh+E;KegPCa`T{sBJf zKO_?}ZdG95>IUlGmgTqh~n06X2kZS zxpSy;-{98oIrHi=j7;cB-l(Dqlg^#KU&%vII-VK}Es`GgxF`NOeu9NeQunb#LvRcx z)Y3-+Ok&TV>;wfARi=Xk2-Lhc4kF~B_pP=}YzXFqQo6Q{fH~mxR!J))3Tje^Mx7E| zu|NVXDt9Cnhl1ATgO&{yhSRrTreYx-Ft=(QUAMAoFTFL0O528t%fN(BK*AC>$ceW> zA+Z=fp$o)?y!y(8sx)2G0*b$29ghx#h7*`QskKSADc3i^Y@V*ka>U6VRRH~zXH zEKygqZ_35~aJPH8>(dUQXM}eVe*QCwwJB{-&Dzlr9UKJ|FQ6sxR=HiwX+oPGr3T!!dVBHZXA zi1+Oml~wI%~@=M67nZxOXo{k!r$HFy!gR;lN;rfsC!lt^4bxZ3Q+ z<8L^cbVT5A!UHa`dt;m=Z>}*^n*0Df=e*c9O4~J9{IE;>C1wuXR$FwC;!9AVbP)!j zTbF4wxd;0SWjwVib*F4jqTpm77KLPnpl|=?(>L7K&8JgP==WyGa~dUL?Jd?T?m0$b z!~ow2?prW!Q+Zq4rhR)QdLVfpP&pDa!o7H+5b@?6MFa6)t6j=<{vXwakfwy41qP>(x$i`+Tk+ zJpi|EN9I0w_LapzcHwks37QOKyT%w&T<1o+0zFgPN}_u+tf`H|Q%3NZIA(=+@&v}x ztZg@dtBrf(kl~@$9vbOn-UXHhzY+CdZ7T@=Nmq%4@apm^<-;)-t3n6FD)0*uf@SyK zrj(%0D#UN@72V>&#DXO*`r8Qnix$#0so}_NOAUPUYrseknVSt8 zK}4gY)zJfSJZPF89a{Y1oJ6z`OEW5bb9;-19T8|l3{9f@GE`>;f&h(){6@|7GaFwY z?O$RPzAs*F>}<8_R~n_Qb(r^9`d9)iP53?97#LDfXn<6dPOWQ~0fWGZdtzhvf)x@% zfVcz1f+#E(P*dwuP&$~)gN<6M-kDW>-x(iiLWX8Vv~mVbZ{l+1~D$S_cJo)Ap~ysJlq>SjMM-h(=sf^z-1Vs5qKXDh*vyxISq)#JNP7;PCY+y z8ls9LrW@x?#Q7oPD#%3{&sh}FWGFs?Tr`KyA)H!S_l0yH5|^AY=ALl&LioWVJl!#f zzYkYbAaJE;z46*32Fd%JkJmGQW4^cVq&XzyI+PGYveOm^pC5LM@xb$c-3Ix}V%;f!yY?-srL3 ze5Z7pu>dV|Lk3FmAXpIkGJGT+u?He~QWlzaTohgG?VB{@p{*U;sbgqB0`_z907Z!A zQ@!zrNDjO9<~#GDB`QJeY>8NZ;sC=_gemOQb{atjM#kt|YGL%<3iznAMLYx_s=8@}{$Rd(2Uqy^Y@)x@n}%@n2BNetN` zn#gCK*7iC{VT87uS4|;vu$CR@tkSrth!D9=WN+<2p4yz6nvvj&O)22aGy^DIiQUlt4PFTjggRo{fKrS>j{ ztbszL*|;31OU8PyA#_r$(K3l&8o4!ArpJIqquGYIxzZbN zu;buL>v~^22;CF~g`;>J#z=QfXVMxM@twWt-MwvkXkO}#Kc^uNM220-HJ#u!xvK))(7qsT8m$}fl_peF_jB*OJ}Cood*OnEU3DI zr*DRF_DsCGJL42d0b2Q{(dXPnPvL-;rlcu*hlRof2^e&137?nY+^3u(ZGuR#i6 zZHy#328Il5ccU3MEJ~HgdUD^G_ZYc|(@`v9-z&9}8HB{u^i3%muk^(mNnfYV$M#un zg#stQHxMpby$X%yD*CYwFwFh>^Z_XA$KQ7o9OLldugxtc;IT2P)Sx&anCe!uvJK5? zXVVIVn)FXGQ^i)jqs?Y14p8XDgCe-8L~lS3Mv~S6lp`_pm3C~^=e})BnT4iA%!_0U z{Z3B6jFS^EtSO0pd=u=8f&~=)h!^T|xtSPaa8M{ouv$UJ z)O6UG9w`v3Y)MW)0qF;M5zN3?QR?kO7Yfa~v4t&g?pM)jYHP?8x)?t%(3`=dFlfaC zgQ{iZqDpVvO6wgu^5g}rkb(K5S)0=XX?L^QYE@9}pxPV%#VDFc;n7bayvkebv+y7B zeJ!T&+7U2Vh*ELs5$}H6(tmZfv8cDz=P`GTq6Z$kbGN$kY_4 zLOvaipl`w)f$<^Odv^Fj>6(HxH|%tV80M0G@(!HLpyDbfN!3b;v@`_@jZ}O4PGt|l z*vtInDFa__9=U&oIRsz8epbdiqRoAnAmi(4M)|+c#$RcNu!J*;+sG z97&ECv7e@!5BK&xXN5~ATM;73za z&}v6U3;(BZyvP~pdoOZ8acnwP+uKfk8vIU*tP8fAl4 z!1OkAqqu3IxfX*>g;gAW4W&-Lnx8ES<9D?|(3S%BJ@i23jt%4#W|%Kw#Rc6hzGop2 z3^Mx_#fq>Bl6@cAL$WUo7!s)(#Q0F!H0OoYkZ0pf)h3iWykA0|D%)SVqRkia>CMkTV$CrM?I3lqcf2pKHKHBarTf;_=C+Vy$MO zS9dVE6(r2@5gEm(ERpU+SRgsl0RbeQpW<;hOo4^0JEnLP!8?45A=XrrhEetvejyY{ zAczESdjVrDO4*_vvM&D+8a{eA`<;tZKgLeZ)t9zc*QejF*a{G6!oiT&?-XAa*te!@LURgzvluX9;V+h>q!yQO!vZR>jk5@VI=#KI z(Qyuv$_68(U=M{qy9Pd&DL{}pJ6Qe7OeCu0I^JLh#y&A^1{jWww9Q?aHVZIxI~#1u zHx4Dkgm(%Xw`??^AI@?PDHQ>vgw?xeb^+FFy8!eu4ugV=$fuuL+fWZn42)I z6g?#JKo=^|Z7NCf3g>AjWU#V4Uc|Vj?D|a7oEYapWSKR(Iz{`<4sV5t-7@h>d88Xt zA8+mwgBmwBiljWCwY03$G6H3=ABkMsogB}?s|h#S%4KBv!&4-9k&B0D^M=qj0=@oy z6Vbs_aSUaF?lzK6s6nz^m?fveyQVjg?es3%mqBJIqy_QL%vAh21t|6_*EjixM60G4 z$Jz)oflp#fW1U>Ox-hUZy}PA-F^MX@D!xn>9FX`Ng&XmVPfZzL^mMot!yfGmoFzsw z-ZFB5@{;64FlA~k7hg)*$%25ahj+h$p&~YG*qK<1-nY+NtN;o(`(8gz3@FHFt5KP_W{7SiqxOSM!LeN_g zSx7exNUfqbt*JBJ*{#j3akv$tNhgj;=2F&#WFuFC99E@v^y*ENMJ!8TPts zo%TZmuUteKUAncP(5VVWkce>_4r&HW8kUYj0>J`3*s}s_yrIl|-8{{WnY%%y!QHQj z-R0#@H%RZm#rS4-5nfiBi)+(`CTDcDcV`lCKLBE>auy^>D3lHU+U8UpqdDxlI{Cv0t-^O=r&4EGBPl@=s)}}65e$_v$$e);l96Iv zEs+mD%n(1boZ={$B8OEQ@E2c3J}iqKrCH(^K#;-Ypho^B<@xb;_Y~_!i$TxqK($*| zIIJRySBkx8Hnd@LU z+qDx6x zWAA)bw68q8C^m2HqJXq8T`pgsBfrvEl%1m_To#;PRxaPNtE`ky*BcjsRx*|s+OCHk zpf|ai2R*MTZp$NV@~cj-3KoW!wF83Jo^nDM`-6}xUs6g!h2&Mi@glWaWd;P1DJtuh zX3Aw($kM#euh8Lh3n{>;&8oK>YL5R4L@gVVHqBkQRd<>%SjL`a+-Fi#RdkP>4gsr{ z17*2j&)C;QEQO0I3tbZg5*}`Azs3=jw}|xY}{b)&>$2Drhp;pkgKz(GC*?!(256G{I%c z9jFR5+!_#pI?T3jEc=Y+7NV|&y9#gN$~-XgpP_-yhs)_TWQ19FsinEQlx=k1$;SCt zsvnJ9m8@oGYTe4H%xhF~4>qExrO}Tx6zXF9Q(V@bknA?k|A@iS^!YoEYf>Y~8d*k4jj_P{B!(aNuhW0n^IAN-XN zhzWm(XZc251_ck)@+yWv)cP-sjG^Bw7DlCi`}lh%jUQmKT)AE3 zIXL#sSu@F-i9F(FxdHN+JHiPd{{t~ds^oXUAc^Wn6>O0oXkL^YhN3|xhg|y_C-L#n zPh3OL<7%tfrV0+9q>i$Jd{Pq$G!Xa0=ia(>FkXZX!mNP#^4WU*+3hXK=ztqaYNdZC zjx%`&!&eX@BUO8z?~RAgZqNS`QPhFh`$`x@dXq~4bf`V1=9Y2~Yvsgx0_eyerR z&eYVIQWG%;TUhraQ&ZYS0gFRdlJR(mVfNdTh^WZj8_!lyi-VSRHs@(DiIKj*r;AGx zRKWeAsV46++?X_+Qg*H#GpmBzj{}mAFscaQ?JN#sTQip{0bmB-?41)T!Oq)25%;42 zYbzX)d+G+T>A2@T0PD%{L619cHi(7^q7~?i>tpfQ41Na&ts@Nyfj$|uX@gZy?)cte zwFd}|ZEtPVOYAIDuJj?!D06oEN)ux?pP<^@{A_PLHfz!g@Mm;j@zsm667kCyxsIX> zPxPlq^#R69M5~ics7_Nwl->gjd=x1g4|?CFHBzdD7@0mw*;Mh6I$mj@W0%e$kAl7` zjX6ma*si(nX%~aR93c^wQuPiIkO9J&i=>Nqami|FRzK(xrpz3F#A}gCLlc{s7vmK3cq^1qLid8E!4LBc@O=N1j}Zk+0%=(I#PGeh00X+Zr3ye1Y!> zp0bR{2vkN%`Dv;NmNLlZ)RY-qyfiXzBAvj)%(s#^1JNWnV}#zz(g7j-(0f4XjR`_n zL_>R7NJ+1!ivcQ3P5D2NmRr0uhx{Hqps>@^K%N7pBAXPW6(Pk};IncCt);*k)ubhP zVgQUuO@iK_x#F)eV~FW>OsXp^>B@Fr1z9!VR<3Vf2EGlxy8s=q5uP7gUFv2Szj8+(I45U4|=1%=_3sR`*aWphKKxuuLh+oboCFDW#c#L1uVUACa1zbM(+X*xjorL1M)sX58Dh?+Q5bPEz`Be1j$lyDD^1jq>5Zz52mT$jKFS(>L5Q&CrZO-GLcjz^ECS~-==;Fd1A z%x;GyhoCd?G!m+8Ogh9q91B#q2sadZp-h3zqhlZ)(7+mrg(ftaN6MoW;PL7;#a_s} z0hlwwNNf-$D|06jbh{5?rVl`WeMQVerw+yoa_Zm_JXw$f4h~#_(lP2inSw;P&TN*m z1f59$nn@YXRBVX8f)r&rRU~M2IU&4-Z%bG$MMQ3}{bihsnUSlouk&}UvzOpoeL*5c z{hVxWCc)pv?@_5iGG4_=3L7%q+ZYpp0+u5t7g;Bwqa<&pwBz8Z5onB6u)lDhRyslc?LSiUC&?l){sqw-hF3Vyb z)teIchRtxMOQng5T&-hvoc(T0cplvGwnC(!w28a;n#m@k<(>cSm}}O2?T!L`RUj@G zbmp~<$`zChha22t&hFF9>FPmqcJV^`%3*{;iHw38yi3SJjfM$O7iBDOozjL?yozH- z;u1JjY85Kn@MOe8yO;efcf6AJBK*H@B+H`;HJ=;G`@QRs|GdUWtYF}(!wHL@Faf3H z#%|O;k*4+s^s)%~o|pi5Y?5bDLDekn*k>4}lY;fev{LZ@c{uJM2;llJJc?VI9F|zS z3EW5QFr_~ey8w@)sSmumQ@Fyyu1R5$opCF_lwcH}WmB#rI~j#H<*cAjU3YfTz z8>MTAC~6@=oE2bhiq8>g9h=tLd$0rGl@}>c(e6Qz+gscwF{yygE|81dOKWP%u8y%I zyzqf!(F>kN#H>O`wv^8RpI}Unqy$buT-P4ISz-ZOBCoJY*_hd|R30N6O-VW!Y%xL? zU1|;Cb^!Pi&TlxXz|)GWrVg#)i$)E^6$5~B&m!P%(5YvR!7;lgt|4&hd9!X_#i;8g z#VRbIxExrYP$~pcDd>hGtIVqTSg2BN#QA6dp685o}Pnkm517B)yuF zF&>+-hP|1Ly{k}vV~b9H;5CoD5ZT)_M^O+>1z!amrJz!Cvv3)>&_D#piC84#5Sr@y z2KiIku$(dgR;Z$h4$cU7maxE?&BsI;Lj%%!2ziWKsE+_xqw1H+A0d9LF5)VIbz0=C z%@nqzx34DT=aFi6=u^GXr?k_vrcyQo<1TWpOsHh^nN(9>*oU)CeZPYoBm8`}gIT(t zU{Bet;`~I)T!GxFGt=ZY^H5r~dIrr~nD6tweP`&;+(i9(+?w4C-GjI*9ZLICk|d1g zP&^DnQvDhaB?xkgy-oXul1s;CDQ$MY8_FdnGVhD=*rLx4iK61Mth6HR1-!#p?6l_+ z7@e4_Odk`I${{z9FsULr6vFK!1KmAqW!RF9^#E&^?r11jOU)HwVPh{#>Zr}kzyRue z-ok-;xS$8CeS{Gw(aYpz?p|^l_#i$J=Yvi@C&Y&bAVq;YTeBpYU(xF` zkZCp2U0zW~orZN(^4>(&1;ifJ>y>VV;Di7-OR(v*P*E4r`*@1#McUcUP^#_=6FtNB z*39Z07r}~y)yehSwjgL`y!VTEI}L1ltvC>MTHa%vwzKvncg0O9U$-OC5HyNUf)G56 zC#IJc49f&>Tl0%G) z79ORN){yI;RtV*ZMK4F=y-#-KR%(>?u%tm&(_)dRw;c zh)j@DC{1_<;0&yQ{$#r_7&|MfQQhV3cX>PfZ?~YWe&6tRgV8E|S}d~&7P9;QaV(ud zLbt}!?`%fiG69Y>YuF+SD-f&D!xOR>;?wo}=D+vGMMhqXxGej5+%}i%^^H;VfgfmT ze4`WwGc_-8ub5fVB9;$M{d7kriDFG`LI@pthiM6ecZ`63V0?c?@ejw#xK9Fx4~YTR z*t9HeAYr3D#a0;_(9nCyhhlI{LTwNX3OiRkvm zP~C0FaJk8Sm)3qC-#}c0m<%oS^^w-zT=LJT+&4%5)WQCa$p43i{8jpyA{Q0aONH!? z;?Mq(zNnx#Qfl{!^bwjS^_*C1DIfRY|J7XFH@#Iw)=LeR;T7}!mwV&MbNJhoe_|Zn z!F{a(^zSU>^`+hjKT$6KT<)Pb`f_i+gE4O`SO!ZGp{&=0Sov2>DElKLm$ zjz!vl`5wg?#kmu>D5L(?1$149<(CCz?Lhb#v=@e{mP}pKeaCzs{9(J!v56l17S#9Q zBVJ>1SWqNPOKhqOeuW4X2CLM>2BmI6ctS2h_w;k3$p!vwT!RIG&0x&K;&PBj@fiD0 z!1tpTZ$2AF*4ecsC%4&OGTgC&-4N<)67W$x`0E*HxRM3VFhH|-zdh%2HFef(2tX3O z2H#H+wR|@zgjWLZh_1Xlh{Be zw;D<&6|p~Y1uBu4IznI(Auu_kz9l(j_7`A479KtQ)A0p`LWlrZg5x#TxF`-S>qyXS zC<#Hxo_QyvF$;lNG;1=jfOI&AZte7$8Gom|!63v#h#LTlYM@B*4kkhu!>v*kCm^wQ zKokLkNG-m%hl4A<9||et^P&<5+J2sK2(Sx)4)lH7AWVq$EIN%t66_Jo_Qb=YlIPAZ z&*6;D%r6xdE-oz>@OR(%yET)FQXAss4 z`vHT2Y%=UI(Owv0AZU;_8yXT(T?9dZNhN_whzxBlf=2QYe}E~+42(DaN)@`S>uogo zEMEy345rhn^n$ZtSMb6ah#+Vf18nq;As+6<10cb^5LU_%Xy{oAbWk4$$=u2Fe2oPw z`_{mQx(e^FY)yuckX$1!>o?u0Fc1uuJL^laUpNDvS`2wu$qwJ)*CdC+S3&s(fx+hj zj?AvGva3TbzWW3mlB7B}0CqQ#^+S5?bVQz*g5h*Z|(Q8mYr|)#1%#vD}}u;`4JSl2tzowl4LbI=re-wqItBoil1XKj@9iwCvzW?E0qdm*6y$t_#)5 zvnW*iYCN$Bu>kQO)%w5T?T^qiTxO{|I zm4*~&;@9p|;-nE-r0o~(QbABw(JqsrCy^)LkEhA^T+plD&_#gvX=>%9%5yBB1h5W0 z4TDO4MC*&8;kJ_xXxS5>M;ekEC&X>+#X~a?+@J%K0=43C#MQ&0E4@)UtYm^1Nl`-9 zGO4-}0TbsRwXE)Sp{Fj@+s2L-9Hx(ec~&Z$q^>Sybp}aY)$*4P!~?(w7HzyC;Y=#L z&~8uefuHooBjzS&dRx!QA6}4`>fNdbNU)6UAwY_ABP48|ZCsHs1 z!UT~+@I~fu^YOy;YwHBB&XwyzjM&eDQQt@fZhfUKZtE)& zw)L&ls9&{*cl}DkyS~${T>ZOmwKWf@ZTTx zMnCF4_ae^0KI{Y+8jAWLK40pIPi3dKiOi!tC=DOJ`tj1nb|s2_lG-m?hG`w}DC%EA zy}(?Q7pVNKx9`)ojI~kPpwUXdkH*U8_C~9^vITjj-9R*O5*hL+Eu~B3I{i7N)(%6c9_TnL^8a0INemNgM=|(n| zYNf5_dcC!TbjT>0d~r$MN{P$N>f~6vkb*2YiGH{Y?6v{yuq;W(fHkIA;MOPB`X(hS zsIgyJL7S3?<7Iv;Ta#|Gln^A;9QU{hpIt*aw88>xDy*Bpm>djo?{=%ghs+SW7(>je zLfpsm5}~3{k$yg^8zI3^= zB35Ym=&Sj7*@#1PhQ5|K6!<>y(vrxI)ZMWuBvMj-EP^aJ_eDFk42SvRm$SCZoFOGo(0^I^vWWj*pLO8SqE@Htqe(vyG7?r zq&(GDcUF)?D|Vd~nApG@Pzcy`I&S_4iB>xnG)dgk8i!3QPfy{gSa<5q*hs{%fo;QV zi`PMPqG64TVyLmngF?Eq>PkXm%BFbo#0rA=6GFvYt%dEPVO>*GvQ%u}WIb}{Hq{e* z;=Z$>Qfr_L5+dPSgq0BQigOkSn6nfwhZu{msYF;dAzA=%a}Ci@RnsVq^r6UwfGHt; z>{xK;8gA)zAhBqNJCDWTQ+jByg`*AxI2OqglnDB(qTL@pfJIYaVUGo0)+N&yAdxO$ zBV}M!tG>R8{Mp8iAxM}Sn9@M8b2J%La)bNfwwU*U;V&$8Wz5D@X4vvi3A;VAWqp#2 z`BEFmw_vT8>@Y|(f=CSH2-6%^H%j0_NTesdfm@(6je-ZCfe-L_5lOIUM6C28FU8ZL zFTrNe$Sh!e^+sqwv1pByrttm1WLD-S`}6GW-guMkgNX3TbLjnOq7FAo)WHDPC?E?; z>}aA&ZXwOj%7E6j!9H)v*($Gmdw@~;9=26go)XZMNP*^xgXl?-VQR|Lj8sE#oyd(P zWCKfN&I&CE_3v^9>eNq5Jrnd&*^TocwP!yi$Y1p4_ap_41=36|w-o=XH-eeUp8v0U z}eBahQ^wjz4j)|NVUr_}~BEWB&Kahy3pk&GGjk zeb@M7!5_yj1%JG!8vOCz?ck4zj|P97_*C%6`#z69BCfyZzj`D5z+?L5-0ylL{6vSQ z4@BHf&mVdt{6x9FFX#T$i*NoU<9^rs-@OrjqC;P`|=TfWWfC#a6bp2*A8bOWPAQOAK^y^jB>yz2OQJ^1b5Hze1snvaDoF)aKIrQ zz%%H1I3M9h2269nGzVbyd<74tXFea{M+Pi#zyb&0KMvqw^<2zH_>lomallg?a99WM z0DDUL2tP8Q!T}Wyc$*HWa=>Oj!jBAijsu?KfVb;_Z4TJUNBEHeALf7$b3mUC_$UW_ zJRjjl20YIJ&vU>%I^a_r@R@vs9~tmj4)`nwyh8_ko&)|pAK^y^e2D|T!~yTr0bkDV zjZ(X65P2nyM)S*v86Y9Xra!6sAo^-PH>g|_Ui27*oK>Bk$GJmU{0}bn>-h*jK<4Nh z{K?M(H)|kYCo46Fj9ipz+r-9Rrj7hb#3JG%s+3KGXG6S==C|_k$0S(M2~%T*%veM% zM&IHxzLSse!(|Lc-^+LH^8~B6CK^3Xc9I)=l*0eH?aj-TM%<6i?E_HlE7$vB9jD(M z`3m#=8|8;kceXhl$0xa-c~d@BTzLJp(oW}ZOttOD;`o^bO2zW7lffIY_8)X#>VPnprh z$#SKSS@LsACLDxI(pIy;J*`C(=#NJsN%rK?!WcAZK?Y4GwXC`YSk#l7g>Hdf!|Rkc z1c=E=`>iP%49@Xs`w{$w2%a>^WTg!7 zfEDVw9n3+UuwM{NykO;slUZXjmx(1nB07|N!T;ryVx|e6ktsX0TI2#F93J> z#zyB-?z8DbqO}-;I_VJ4QdRCl@0Y$G&@Vt`QqLC=pOmjPwIdl<;xOZTaxc!5NPilm z!n4r_#h76$qzXMGi)>z_&*2%+^<&%B7UzD-@sYW67{+tQPxPCA#sN2@%HTD%vf?wQa z)OQ*6T}FNDjQUr18TDO8U3mR9x8JC_CW`(`e;J8>C%^E|-{U{Gn8Jvif|Tj z$iq`HYn4?h;WMn_$Vh=bYneOIH+{i^5a}6PGEfd%A=wrsb$7LJ3hW z4Zk0N{W70FX|!0oMHEPvO6X8hv9kMl<7f50vJZb-h_VVvkMG+0F-UXv1FNP4poHQEYZ{2XwEnPze=MHOV7{k7lCm= z97zqH74%ft7`$4COqLJgxkL<8Iu#V!37Dy%3F~9lnq-#%J=Iy0EM$^Xcw(+r-@dYL z)&q0)iI~$=vIV8I{*tcvTU`7FV-C=Wh+L%rpT$>4Y z0)Ld#br0ocr{NgIM+G{osQ)J84B$r12jXox>dj4>zr}J?PVAr420D36VTwdJ2%WO# zM{Iby3{QM?IQLEa8CP=^whQsL)&LRi!vYR5h9y3bgj1kh3+#h$+xrwqUqL|dDP(J* zjx5(;j45xYLy8~L#%5nhOCw4p(-$W`Vq=@c2@x!A6kWri6(&Kr3o*@X{%o~|swm6# z1%sGTU+ze(Bg8%fLz<}$idZ3R8Qx9KXd#!0XkeC+B6yeASYSr?z*=$ZuYtST_Su>} zC-v#B1mJo{?)%ejAyfxo77}A?Q+7_TX9)+$ijZ!(&ser+;Nn=wJ991jl^CIv?Ewpr zu7x0ihT{p={@R~gbPogu*X#?FZ2?n{WL{u$Jp2n_B-DE6(#`!^^bfhO;3MQCiMN-S zXlN6ZV;**tlRRS&*03yh0RNc#g8hmo%4raN?E9H{5KrR03y6r(<7!3&xfkHZ1q4W` zLdQ$k0I0hjOxH%yzt*t(K#EbDwmtv(`9CmI880TP#|~o#j|yxigDfBKlvs zmi~paQm$vBG}g8eYf?$h8e=oVpe)>@f6Dzf#h0BW&BXX{u&KptQTB?~tF9yyLis?a z({!mugSjW&!Z{5~&I+Y3c522N-Iv>h2OI8x*XI)kce#u}hQ1kH(e}|3`?scsfVgT1 zR?K&s~9!|@BjjB|~WcpPMcGw^31++-GA zhu0w#{0$PvWqo;&8rB@MpIxo2j`*qI@QLHY@T242KX^DEh3?}S9eeQ>dw`1)d=P^ zaO~fONzhbS^O8KEU?q?yBC^~Y} zJBoBiulWt#+qR(z760VjYjw(-)>#;=hp5|VK{Rw>C-0lU;oS#V=kongbbs5lCo$m# z!KuYMQb?Mey`=r|STHDxN8rRlLHsh(HXb+}f8^2SMy0Y)+Bz9{N`vuO!2^eL1v@IA z`?omCJr0LwF8XJB$N9gW(Zdmb=t1p|j`4%zhoj?d%bi3|KCP#`#Gsx0uzO=1S!@Fi z4#dL}r^rmWDE5PZi1ll=utMXY+;Q~v3TckG`Nj}Uw7~!$_;};t2C||X6eC`XCrJ`+ z7`}uMyn|q)VAkk_>|`4&dFXIohUaLwkuV=_0lzFE5)%oO{Xi%D1{@O~@Gw6Xss_9< zvb7?Io5H^{@;QV&3brc}$CUbh0Ln|f0ZN(RqAlLyJRa`8tP#HVf&^Km$$H4dNd+5? zaWPfPE1BI-^Z4ctNBAMyAuWHt?R5i8;A@tB1-eSvUb~Cvg#d8m<4NW;k!gZ&LFX}% zJMjdfb!q@x>eFbU?G;8j>7dCxcDO%tC}ynrN8NX#&wP^l0ivW^4W_#`u%R+Oz&%C( zvwmi!zodX~aG@|)J-4W%3 ze?cW-?41sjP*I49a*s42)T0olDH-142H}=|DpubioazWNlQb>HVnflvPfZy#egha0 zrYG^U8i?!5(2M?{5xH6$5;Do$Xy)WgSymz$4A zQ7#v4H)@14aEP$PJMN7I)u^eDArk}TkTy^RnQnIVTW>;xf@8hHMt)c<-QSMCJm@w; zcPj(a_11>(`qS9HNR3T|l8PjPI8dg@OU(Bw1praof}0fD)EDhjjS5#OfMHm!KE_3x zC&!Vf4Ls7bh7R>ZBrXK0akvVA4gk9%q39*rgorX4GNYMDZzMyohUL1l?C9;eC(Wl2 zoTNKKLoSG9-F&P8E9cjOTM{bKb^DN4cnxG||47b|ILJfG)3x%&S`{&)P;fpnj}>dY z0r9jc1LWwoWr$NrXEd5LdPnYXtm_P1!Ca=In9;c;Ccp-uG9XwYnB9>j%kwsfJ`|Rs zcjmt9zJPk5l`;xQFpz|5M1Z0$uGSshGJ0+TP=O>EjxQAAxOso>CHGCJz#EodAg5^P=fGmFmWlZM5_Yj(iRzdtoLQ*b+@(}yN2n^QD;XAjtL_!CKkV;&87)$eH zP}SOYC9%4RWe@)V-Nfo4{)ABLL%4^8l(W%QGK@7D-1^7d!!eBsR-`h6McJbWB#p5I z!RSf9O!Nk!lFqR-sSYA!5O4r!@WPsANNeXg3Odt8Q46F{glL6oP7xv?HA`2fRmahU zOz|3=?<#r@Z6J~YVdbDW=oJb+L?$*-r+(HbX9i!9q7mJjU*NkKn2i6NT4r|0Bo3oN zHFuC-u$dIzPaBE^{37(d!rU$DI3J+8Md;(8DCqwuqGlQ7BVRvTschj(`LkJC)BFMs zHqoYTU5;@zp~?NS!?GOW@@&hJ&XQf=sTunABxeS@J&Ra}f6Be=KNCKOL#Gj_uwax# zXi-`+lx)(EEhb|k9)nlNhvc|xz)RdSmln!jxDzh@2xq$;vcsV;Cs@~!{{l9ZBI$SW* zsM^{>z%`06*cMtCouE<%c!SPZ|WNWu^^bBn?Q40qidr7CwC%#!gge{!c)L~93BaN z0u6bbk33v>&x7x!!KdiHSJA4Nvec=n|G#s;bqgk~bHQuWE-k@?@b~A;EURSJogPkB zrz`Lz0-$k9old#7%|VA@Et&Nw3KTyB%TDw_?h9^C^=>N(a9^d%ytGXqPjc2je6fbw zPcR;qqj%+AIVa^kEa^D=iMK*XqO`jURvneS;UPd55BEVopb|h%Glc9R5SDAAV= zNBE(J_RyiIBEMA+k4M$ReM49mZlucKYGY@sRUbx-8_hMyUx$i!Djs@zd-7ik6PKcB zGZ50DHA66Hm$(PUjUWL_RecRJ6s=$Z)eQ`Ny}HGFv%Z!*bFPleOOr0<@PJwKxi0{# zf>bhx*ad`_60=ICPlXR_Eo0G;$jiRCNl;XS=r?$-jv-CR;zU_|qGC(%7N4+Yrys@& z^-U1U?~C!gOZPHEEJNLZgULi_g0)pQ5r~QGC5W25XY3~BtqF{M((}zyNK+wc!xEqK zN;Ar|)yi9?u_eea@SccADR(aJkNf-2;(buP#}|PTK&M3}Ga-f43aVw4_UMmu=V10i z=f={G{vHj=IQow!%!3z@iMDyeCl5r?cH6Sf>axs4YS7Pfc>@vxN`?3a>p3NfekRMX zRjo944#ykDv}25it(~*DkWR{s)YU~;C?hdv*f`J50nc|jTWn5UtCXHy5&Z@_DC}gD zPv8SHKNM=(%0ADW6JYsgV{g3qu*Y(90_|8nG$x=l{R<3;=`8F?6m-$mPzZ$^`GJvH<4IDcf9m&3Y+ z1K$1Z`ob^T_j574^|No+sYa6tJ!^CDAi7t&?_F87Du=w9Gjk?GxC)l)^%}_X+bU67 z=;=vAS0b-x>~j;tj6s`blf?2BP~~~cS(NAG(9CyQ!*T5w%5t2*P7TmTu~XuNr|v2e zhp9k9NhSv-VOKR<*1c&i7^ZJJ$Twx47v^@0Z+i0oXYYOB?7YhR&i9q>$RlY?#z8J} zA~qKg$%u?zWFr&VksXaRvNefp32S8RV0Z4-+&h|y<{$Uo!4fr%*qYXCa09K`m=sde zLSr^&7ut}8joFd}x~3&9w6F^;Y@mg%*+2_z*g}^i`~5x7Ip=-v%$00t^*t*#;v3K=j0lkk@~`R?Nml)uRDtDIJ^Iq9gK|a&WY6~S}JCs{GqMn z>%W_{lkB0bxe7==v~~DUa3w4(&5*Q8GJPvh2LJ5#c8}cBb4GMWj-PC|J5#Nr=!!ar zPT$;TGQnk8{p|fqhGR{5U7FmKtKzrCLZaf$hOeL(Nfx?@ofiWhRVyKmi^ z@5$G7uxT@=`Ihg0dxo8G?knl$TfhI#-V$6EZ>#L}+qBnj*_yp$ zYs$w-d$o}u4|8|29RbLJgbtkP9>}H~=+(6|)ZP+BD9ZGY)-l|hy)*4*4}oJk9lREI zTZHy!{j|Ju@CshW*E8vFQa22pt#2JpDzda7<1Q69O;hV^Ir{xEE5L z@OwnAE|=AN2ln0A*f(0#+``#70y(;5=NbSrUZ>OJU-IK#k?9Q?em~j5s z#q2}=$G7tA!~WNI^6a<#FO@~{zi!x+ecb=LX;b#Q_SeP7vQPORFUYgcY#oj{E;ix- zgZk&z&3hxxJh>0gjhDT6Et*$WTg1-cH9>>oUjAAfx4BHX@N$HR6%1XRu{Y_Hp6VBx zt{mBv8~gmNV!v;%*+7=hB3r!KKCB|{cAT7EbnbrUNIq{TioN{2Z&1*0;%7wQwcptD-9Bv;}Qla3lWf6Ptr}B z@)pJP^h&R}sI0}s3lmaeom~utspv;H(oqW}s<}PD^r;Y0KB41Z(FynhNE zJ<4dE_S#Z$F!Rz}HzXW-O$k+pz&v%l&u8N9Ml9S9YZSjFGR|E)z04AqE|y}tdPpWCdBBE! zzdqlvZHa)C(kN@IT~W+RQ*k2MXzk(3D#Tr*_{MCj+f1)Dik72$l|IMFo~vqasx})c zl*flS5A#=@bdGTf0c@g+ud$8B&>?6iEtwgptnP;FvzmDb-C{e0-jge{*>h_TYNn3G zG;nBP)&1qtidDiXj@z+6F=q>QJ7cCav>ml4_}$VA18q>;lc;rlnfHR_9eR_p%N~%= z1rhEJ*}T+O>OXaQb?s{#J7ulS<-(`9kYq2r!~oIvV!%3+n%Bp$|$KH zC`F4d5;ctnKtp1^RyyusQ9UQ~oPfkJQ0{rPr{YWX@~yggOWdSUS#C3ynDfL|CE<=I zSQ?DM(zCO+8je7{vEkQ7@u0nnJ=vOY;YN!y>hF3$Cp~aH}wsK zRcLL%7X47|51!FL2!vE{5#cu`ld$07zCpAClkK^UnDE23=YJ0q@`9D7LT((f)i)wC z>QpzFkugD^w;$_qbxm`HV3-|z`79Zc!sz&`Ey+~(xcO)>K;OUaW1lmhyBBBO&hc4u zk>LZYGjo3z!}BNB^O1mb z%Z5J8ZOEWK(3l^G=}96L^jfKH+}u#^xgUoE9$Mr=wi_<)&TBy~ z%%kI_c-|c)i1a&x*um-%cVee z0+*3n*AT&x276V9C_kw1k8+|TnF~T41}6WJO1+Le;5IiSHHxC~vyFOVpZ>UkKW6y< zUjAS3|CctBH$6%TE@aqjvLCBG;l??w29}BC?p%;peJ0fUwi$6sgZyzZ0vuk(-GNtD z@k{DR%zdo(!2x}ST~ZD9_<_}~LOKyI(P4-HhR4XR<-Xce`|^N3ONzZ$5hKRj>$9yC z6mGp1_YdygB?EQ-lG^8=rt=^pZRmP_qkIA-aF5fE*SZLbqykc;8@wI=#;l7mt8O%S!~HO#{%uC(`z zf5iP6NxcjrLk?f>|2!U$ikx7QC*P9SgyH~SqUSa#Ba-y9O~ZTg{w~UZ8U%KIP*>$o zk5XZAW_t<|u|6n-A_Km4WG_+8cM3%m41+Zi<3>RkDu8q@Sp0?#Mw%)88TVLNa(+T- zP{r2)*&O~C=;q`xiujAlMr>D;uep5Js`#@U2Ie!!~(80&KM zsP3l|9~RW)sl6+6d&8>sjX5y~^YlH$Cb7^rChpF#Sz3`*o$OX&b$~*sk7*_l%L^7f zr$8XRnAY2X3JcaPE(Qw&K^doD%x&B(t+m-+G#6k;x}vrxHv_j{ry!*q2|+Upb_N#; z)qvQBxF`+OLwxJ;zO!Jj0MNTQ8PyduYZXDq!?lliy(3dz)tQ7#-CPoH_E1|wDxfG1 zO*rj@!G>VBt+h|9lgoXTPzal$n617nl;LKp&2+cbzEOpbwL|rUs@j^vhy3OdGlq2( z-?*#%3C*!HhC8`_@FqIHui>??CG?iY zj62#Yzk_b<_el~>xOdP1NY*LDl*xu~(ymZ8W{prhDy8-x*rHLLgbxvN2(PR?T>Xt3 zV(daoyKPmg#KE?l!TIW25w}7gBH{nf7fo-wr9(9N@5p6IJ?*L};T?CbW|SGQiw zzR6#kX!+LG(N;=wRb0!;@(iV;7s+*PcY`}@%*<7*$_zMoJMN?-^IQ;aj|6CwQQ`jg z-dG;;RI_})o3?|)IVQsHj&TLu?`+LiV%WphAx(@v@I$thF zmpsYv#<3;}o|zDjq^0k|#Wr>m$y>FXXZ!SBwQXP;`LR;fnjsmG8)-UTyx#W8bT(x_ zfP{p7lzByz2zIZV*mL(YoAP<(bd=u&pPYWh`E~WSVIqH!<8>cc)a>GL15U#=+eR+^ z{>JmLYrQ+?p3}PCE#Pa#l`}rM&;r?yT3BdaJHVr%w8<#N`Je+1oCTh}O$5Uy=s5=F zbu{sWZu-O>X{#X+`vh#;l&BNS(_S9jt`_Pbg+1zj!QtR)7VFUKT#!jt+L#nn?96B3 zM8*Bdom-AySzzT@ypOXK;)h%5_N8*ItI&3f`v-P|m&)2H@uP5zSCfMOLUJDD zuZz7=cKw!9L2O=#r&w_c-$0B_1g66QL>h#(OS(O=3G-N4m?ePFq+`W}ihhHg>XIH9 zaHUfmWQIyocIet&j@Oek(T7U;Q_pu0l-wzxjuKqOq0oz`228aS5&7lR4f9g8G$I5( ziF(LG3ch+8@mBQr7BrlaoO9}HVC#uxt+??LWMd{)<&R;l2$b?-1Go(-_t{SmNXC-t zbYy~~^{xqZ7Q!>5Wu|dtf}2^8Vygs+3?9U9^gqk1-r^o6zKw5%L?#4n`eON~l-^MX))Q zQ$(@(T9{Z%+D0&)ZPc@Uc2ct|3s4-2-A-XoH=pCy+OJ=#zm-|!dBY=3D&(>sgqt|( z5pZ>Z?cG*e)CQ4$V2lO5R#{K_LfP`qHqqJx(b_bzIoqrM?#!;e94Yd>89>0U-*#zZ z%})PnBON<1Ze|*m2TFi^`bCaUv=T|R1q}@U`Yklv-KKl@I{sM$l-+2k`QU(_qUFLk zX(bhl??chi!!{%|hW*_DNZ(lvLNb`H(e3;g)*W4z<%HnW4c~LD9LLQFVRSRvcgj=c zbC!8wxurr2_oYs2wJQgA%A0lw`wwcca0sQU#t-7pt#b2;xg$n>P2>(`M#oAnXue z5CFn$U(lC~n_V2^Q{y(kF`!wbO4OVKS)uoY6a1MFcNWj>*ExvolJ zl!gHH--Qa?6qjO^;<_D$7Rimrs>_6ekq3X0RWuH4+}4^CVXT9tX}$(OiRoByRknJm zm~;+u$B{d4VF7i;1BMSX?bDR5W6&HFz7tq*ISrR^_wnv2?hiR~VHQnqr1tC6U{T-q zu1<@W3&FzWGCtE{KX0-#6QRb}EXv~6UHh$v5w@AI=x@^08Rax6$^NZ#gj#vr|s zK-G>_L%@PRBCCB(E8;GPG_$qdJPSdfn3hGq+1kXz2QPFd>$5)9o3^FU$km0_u172G zJISBXd%C`+`_6oLq4f&xbL1sN8*1Kn7LRU9^%+ig7KzjyZ?(I#odqtnTv2z|XH<*FXZdmS61p=W-fABc=ATI=_z4rXU$HsMjt-jRIMqaSS<}?= z+{%U$5f=27^_5xJ>2|bAY-2VxsNWIhI9!J)SmE*ft3ze2hFlh={>4*JyuJ9Oy=oUH;@` zq(4wHb~9A_MCvBEikfq5pP`6_kO;b^R6W85j}`v>%jP07)Md*P9vAyf`{=doaUp%) zRuYs%(unLhmXr_Pq)Lg3axogg;N{9s3a4I`>WT{;H7> z&WEcDYLQ1Ul2B(XSVoRZB_*yG3ty}WXWhpx6MShbyHG8KMGFim(jKB(9E$@?wOCS< zmWldZ7~Hw_Z6IRb5$FiR>yn!-t}0YivonGeBF#hVXn+)}rvkZ6)#D~nx0i!eceM81 zqmlT!(IHWfk~Yj)#54Xhzcx?0O&OrL826ULHnp4v^PRq`_FYmS<2J`2uw}Ga)2Yg_ ze6Ir~P{kVqiXBM_#U_INAWBm>g`#bWn5nb#HXXf4p&XwqSof^;ov#O;2U7_LjA68UMpM_Sic&XBW1m+$UwZ&8;jh#Dty! z?EH0?e!Ef`G|Bo*gyoek}AFe_UsfBRsfN+ENdPL)1Gd+tuHrT4?A?4H`wY zxo}&|BNKBn&B8y`RS0?N3}eGnq9uMQvl&B?tmDh&4d*Ecl+8_tp=hOk6rLPZ?WtuP z8(1Nncdn+nnY~TQFW5u zf-1zL+pWnoUtyA5hVWNYv&+>k%NCic?QY6oIe;wA^%f@=sBWMub0c3#y>?-(rgf+8 z6tf~Th!!qwf2>s@BlYbo$^A2-06jwBO!g#QrE=|+LxF^%o>)zSf0nuggp~KWPc0`X zFi=?F9lx$K5k&Hmz(at&WjdfAVbm-UJaS(9rH?DfqdFZSP7vQ*1C|0A`43D8C2P?=Inn|ZijE0F2WQLDYQAtY@ zYz)!#Xr}zqU}2U9OCqbxPIe=0t!cQNk~8i3=HguO=(^BVk6DEsH+wM3l+c0>1@qF- zAy5?+%Sy>;QJr+C^De|gj(z=&nC#)Q@m0hLtViVC;!|0nmRYg|{b230YIV^-7u33^ zCt#{&VCbkvxyUA}2=q$?O+NQeHfZu;@*|pvPw6~#UF6UaW3HVClAD zPN$d{bzYz4K+M<6oiF;=(-rN#mD!cWnYnhnn!UmxM>t|7c?@=l$mqEAtNLrqkxdK_ znncW$Ap@Nk$4@UGL(w8zY-%YGye>H~t?fx8Q>3lWG- z>wwTrX#9LBAfD}&egi8V%WkmB;nwTRm8^Z^wwjgUc-yuzkD0d0J(3S?+i;KMLx@RO znI77fa`~e$+1Z_h&>f?a2J+hI5w<>m%eH>2%l?yw5M96SJ8xdmXNK94<6G5*|h8ymXmjoY$!lyYoboX$qu)Q&@*UNF59Hyf$BRi+%oPvy8_-BjJvQwVYkbrL6= zqgJaOyZCO)UL_C7ypR?B9#MdrBM7MPx)p;AT*cj#Rqb7*I;a{%!S;${Rnr+MDEMs< zM88qChC~gxQc|kK+)Vf)P{7KbM8(bATE!0GvK;K6tYq6DkTOL@Yr7bmqCd=O;%!uI zJNK*;+;EpQ}&+lCnW>yuZthvoW1{P#~z1_bA`MG$_%G_I{L{2W?hQdrq`eYOPlij zl@H|-s5^`ctsfZ7GG2g}*oG`_GoUp$o-Ky&Fk?|n`JsuQfgBP1U~m%{uj zhyB2xv4XN-m-spRfGyC{rjKvVKJ>IJv>Rd}9e%C9s&qbbD3ty&%|Q|(6y#8{A%q_x z94AxT^vdD3Of(o+xSyr!YRE#2DJ0~>0l25K-+EfuCMT#>+rfB(ROK+@o7r`G`5Yn2 z%Yd`1gre@Ra&8#oV>ZT9V9m$vugAcZ-+lVgDq9{_q#sf8orA~T>Ewu!xyIOZyc&** z>bKnAQjZrgZ1}B~9diL3wKA<`Hk4(b3QKh{`^?h<-?}a2&23mRE1B`M%SLGtk0|di zmce3vZrjLYkf=&54}^MvdEyI~dA%ZjJsIsic8H+q)Aq+YwX5ilU?d&IrTFqSlQ%=m zVaroEtz;cKUS&Hak{c=sKWYzFelhR9xP)n6&G1su=LJ<#eOr-h z7?IFbI4B6KXaT4ytqVs&q5vBaen^%Es5+@ARrTMOgJ`IA%W>&>-cy;4Vu89r@4;w} zoi33zo9Kck3tCK6SGJx=8=Y7gD})6C73%$CmETdT0yA_R2zGDgC*CFZfjMSU`2p1V z^Axx8NVsmSUEs{qGYgN&DCE0otAYlM=Kes~U%4%knk6$t)WM2L2la%pY6BRpy_rw5 z`Uw0Uwou~f2K#)4cbn-cs4Zx_+6%=Z*hqmRcZ$U_y?DdPLgPPb14lFeLb;&SFiWJ% z4BTs#;E7Pq%7zl|y16@;&Nd1>BUBY|fTT&HQA=a23?;KIwVMN7tn3=5f<6?G@fA1_ zVJK=X8hYFjIv}c92)o$8A1LuW+QbOFmGVLvQ1NQa+jb`UOp9DFQ+}r-weFj-pT!X1 z?g|yLsKAMJhy+Pqh%YNI7y<_1!`NE3r2!u)n%j_au>Aj=5kypR~~alGo?7o5R;ra&kdfB(wnn9 zhjZXeTRRAIw_IV>l?nJ*>C_C|F^aW#I68}>wS|u~(rFb5mDv>T$Z6eC`?gMiJ5Qf> zP{m?V-J;S#(Fmjo9u&?pa)Ak9RLbBa@Aac>XL6O9aBi@>cvhXA9Jy~OUK-xhhAQ=a zaHR8}`_B>S{6J;xZwYzzZU{`f@VuJ2g=0WmJ)nQGr!pu zXbJ_$B2k_1VZK+X6BG&CCG39PA3YbTPM2?tDS*jUMRns>X&F zv3z*+LE~PqI9aiXUUDYIwRurKhM(!-!%8 ziXAkwn^Q52u#gRf7`l~mfMJVHFSIC>@kvmo%nDfpRkWxOe+yv|K`R{(amNZ6j|q2` z#W5Fe@bT`Zg0Q1elC9*lgv`^gi!>sib_JMug>9Qsu$;COxrmtaq80LA+hM>i+jL^N z4c1dO;}h}6vP;3+1A)y_E&8j;7()1jWTlKgQ#uLy)Q{FyC(4>yVwNTdM<%%%DVB+& z&fZJ>{xL6{wvh~)kPz=r>!+?Kt86zaE!4gEh*oVq=fw_U#XttI$w61F?FsONuM|~W zX33_YpuloNsQP?_p>phwdiom0EzDC{?If;pgp4t&lAabYWJj+?^5@vBdj2}i6Sk7s zj~gX5f*T2`;e;Jy!Zb|EYLq+X!jH@;#+1iv6~VMB^cd5<+(~ye6ooq5Tl>hs6YO#% zCm6~eeW!j6X)&#HI!yuulH}5AqP|7#^U$r}yXrsqHYqRQfk@S~cg)OXJrt{vS3^cs z;YC)b~)grUxCJSs!!F{F{W`RoBFEw<{Bpb&|wGW_nJ=~Bny8^CTS zQXXFO+Jx}&SGR4gWnaCN`2u}}2=j&6?wA(v+HQ}!MluxovSW#REZ=1tDHGgo zP^M?*wQp|D>-xZsLiY8+y?d}N{^m+<WLe&s|1z9i%t zub(2Z^PB%EEBbtcrj}j1enr1!EBb=k#q2xVhLcSut>FM;%pX>aG3mXHM)qB(S%%T^ zyl8QKV|19-C`?2_k?>B*VPDmV@2BZQHN!cEyam?9;1iCmN)|*DuFf# zr&&-+ck(D1TWR~1Od*_yx&;2AtT)`iG`HZ18Vgp0QW8aR41F|om3TT%Eb-nl(sj^q zmOhgf#1%P1_+qlJOS{NI8Kdg5(h>TV$c3b1yB#5fg2p=vylk4JdSasFR@hSov&;il=BUGehhYv-WnSuPTU9;M<}i4}JHu>4F|rj`PG+tJW76y-c1& zDe{c8iukuLkV_Z$uHe!iL77aHE+LyU(I{_yEbXB!Dp&0(FUyQ5mKf@f!GX3XNx!(F zXWP@17*zz-ZD?-FP9hLU+M#{|E`D=ygB`cJiAl%k*2gS3$5Ob)!Hqac}JU{!n&)QrauZtO(#7~ta^7V^r$JQbP+H|5!h+)?* z0Fzo^wT3w|J}EX9XjNm{tu`K)6ZH^(r^MV~)OCa>#Tw6m>aPm*-5ja#U#7IZ_6pl1 ze^Eb2qa^#JXteuG!HPD3%4^(3)uv=6$-S;0@P3Kq1FYk^n_TEnnmU4h>GxtN=hoSh zZx}n;XRv{0So*n{YD|aFsbFt7y$Iq`Uorhw%yt4s60Pu42hK#r4T)BPZ zV4&y-o6YW8=fXy+J$xLAJJlA7VKP|_tWm~MyQAPQ4^`Fb37thuW7X#vbg0N2Fu;yN zjNr0GAnD``xy~(Gv*~K14wh$>=oNK z$RCpr_c*|=Z*~XxV-B1=as2Mvj-EQ^We5&=Y{Ze4qSw2|b%rl`+d5_wt_#!^XzTij z6p*s4Mzu>yL#8pI&xjTJ*7mRA+c+~(b5$?$6+|AK^G(ag(+JBON5tDc-zF$;`v6q zTr^E34P4x%k`R&2@|7rc7=xTSO(;`K{e$J%#WkZsy6jY(q@XYkR|a#3OA?xPnggaQ zpO{dD-u1hkP6ZWvp}#0If#})u^Kh3Q2Yy}`!f;`ymtbIU*h6u)h*-1QoF$OUL4v$m zn5T+!yQAWU{1(V;s@8Cyl9JBO2SvTX-68^-KoX@POtr?=UUuD{pKOE+aT`2wC;Y@+ zswL*b6nE!Sgy2eafD0Q4C>U1aL#jR)ylg?g4zpFcp{NqLBdab+AfW)Vi;6BFaT)2t z?D%)NB#Bc%XQa>ImS#jQp`kaJBN&S#b5`ralUc&iKx|N|-gXGc>^! zNWx&lx^1Z6NYkV_>fHg*jfu;Lo;G`u+n}Dr=P%RCv?<1%!sE?u?-nj*bi5i z96DQe#CRtwT1MmK{RtIGIyMbQLqr!$7)!FgSQRxI2Unck@+TWS{cKB2FD~T;JRu}S z$KXj~kStEPHUeWJa&|aJ6~4g6%uoZI_$gYme0S0ct2xbkF4bq{l+`CsBWbaX71EMHN#eZ1`XYclb z*6zz(zqK)j`P%I%V-E*HPh7q`iafh?=p<#onrB|gpSMxdc2O78W!a9L^4Q4*FyqeU zZma6n6P@iEJ;A3W)2a(U*)+23%f+3&Wr9xFegX^(`9z=(@aGV+Nz19lfOno3oC zIM4S5MK1gTU7s_tZ#S#*^8HzM(}2-->Gl*@)IJQ)w)$zzdcF(UQo;NLx$jgeuUrQQ z!*CShw!SA=!jPdJATy|TYk6ll@dV9}Yi*D5r~R@&3`j)=BJ5(}iPUOYWwG^S_1&2; z^3L`1OmFGir+-Ug`=#E>CN8r?6wb4i4)Zj8N21loW$9W-7{_)V%nhH%5Fns+%&a4d&PjhQqhBY%m=U;jpRE`AL*V3mg5T)bRYqT z`t=(Q-QC-B3|gt#gF(8s#|Oynr>OHyp^5498huSY3Jt!%;sWxgi#0Ye`?ydgml%pFtZA_r^d0K^v{_t#dl)Q`_FV{ zHnxtFGbGooF2aj%QZ3}d;!3ksY0K`u+@y|eTrXSm&*r;OG$e7wu2a3G)UfdK{Se45 z*Azz*_wxN3JU-WXLB}P{V<-1X0dV|%wDY2cx%e=ArW60%!F0T&Y%=VP&92C;C4 zedusGvO{1QJMm$^q|F&DmRxvM4th^tt94-;6TdoOzpH24zSz9mo@UOr6ZD}4&*{2% zdhImfF-M8&XR)dB-GP7x!9)?e8xPHAJ1h6aww+q@#n<*d_R`~SeqCKzon1~K>HYSr z(+m6chMp$Oy4XwEx>ji&phLum^i#x2h>eF(Xsz#zXL;TSn*Q$?a`+q&# z>-&{Ztm?~)?Y>_t=R-Z8?f;cn)atjKi|XUj+G2d%#kX9;mPQKCX(&A-QT6@KbNXFl z6TKX}(|W8VwAGL2`yadWeM5KWJAGaAoVvE5S9*Q#lj9hB&+fh4Dc;{l%IpAtE#E0j zMm)`TI*CJySWw9%XR4Lvk~3Bs_Y*^ z^1}$=RUUVEgkaeZ$wPz{8kvxEPHW;w*%?B7y0D!7Pb)tRf`1%>H4}uN%7=|g zvwcQwbCaVk_YS_4_3!LgKZDQ>a>r%914h29?}tGk9}=$P9_0vwbSvGvK@FYWtuM%jk;|MU16Y7LzR`{tq;o(K)RA;EXLEAg;FU;1HnfP34u7 ziMQb}#dNcN6UHS|VMin^ulm{fN^?4)0|%I|z9}B+r)M1&Vkb_+*fMmRi@o)*?3bjj zOB}A7x$gRxS0-^+-w%V9@u0nNu01>3Jh$%S#=4&_{rQWS~h%B=7Rz5!IKS05-l*bFjE59EiJWHe<(>ezU(|YB%Mo^9D_LA?I zK<%54)HmZknuLd0a{&L@=xSJ%`&CY#D8S$8LZq~Te4_v2gK9|RS^R;78(QuFp>r zS+XL7fSY8?aFs{^qBlxa8qc6n=!&FN9LGG+GMafb$-{HtMd@AjmG2@YnyohAPH`L; zzLp-Hvo{|@rG_Z5UV$YfY72fWfm-;=s5Uo244=Xa!j{XQY1?c|_%PdcpGwnUP%9n$ zA)+_tcNd3_gyq7d=J^3sydl^-t)d3^tcOritL!U?Ck3X37B0R}7wn4Rn{1E7e)_hi zQ6*IJxEP0O^u;9@)cwE9X@S56#j%sUEWIR@$^kLNx*hEO)xVjKDDLOhB-0 zT+lQnxd(TZ@&zyRZ6#)(YUEl#R-c&aP`yi8LO22)zd>Wg`4EcnU~Ce{QyZcBavBDo ztnB>z@0388_GrXS$I^;HAF}@W2Fz$osf(@e z2;{GqT{%oBfB2E%v~-n&7%jRXTfi^HHgXh?DsKdD&KLRGe&T2-#A)_iQ71Z4&N_@$ zXDRgzs6?qa`AJe>qc~tojF05LW=BPwpHrL2t2B!9?Z41H!^N$WU!AQf>QjW;C|iX0 zET9AzV<;`1Dk)PM-vms&2C@`rHRT5W0gtK*_JhhM`|vK54nTA6cJ~m4X)}C~=;v;o zvK)|GL^kx;Czx^tK{c?)spp~FSB@wb>!`F-nH{pLMvnTav;P1>d`3UWY1$dw~4^S@5Eh05p10s4n`o7F}vE~)?pFg zK{(od1lHj3**j}fxt>4^T+7^Gc`0E*@32H(d5&X?SIf%D(#Gw!l8Iib@3hq$k z1$&%bGy39uS`uU=*^o71BXS~FcGwX+1BZia!8&c5I`%15KgP#V6w_D^TTwk|>BKmgrD-7V@C$D+f^k8Y1#yl`)h6#ANlX8n$nN94?J zoHz&jQuGK27`uYZi@g|TGXKbEkRcTmA}JAeAOXjiflIv~r7`-8bmJlV0`E8JGm6*9 z6Qukr#Bz19$<;O{oWvRy*$>qN~wJyiWmq3|5aT=VmlB{G#EQhq)WUXfTcI-j2I-E9o=rrmqC-F zZf6(5s0g72%c1uxKJ}}R$a_M9V;OY&T3iSQ=Q7|I&;i1d-Ruo{f9%4_8tbc1nW&bW zPaqzZ8w$erMfQq(!UJ;st|9<)ln|k2iCm@&5`y(8nzKUHFrYMJ43e4|V~{5}Wg%?y zF=nSa0*l6N8haNz=yQbC-gslg=I%}QbwdG=ajz|@gEU^QJW|$QXjTeNxqr4093~fb zKvCfb1II1UBBQwbUFpwyJW+c)7a6Q9a$zO9f12v0BZw9*_kJa=Vc-6sB|<)D@fl{d zcSW_aAt@M-VxtV-w$mF&FYu5UX5ZmkARz<2^X)Dw3qhjX8}1%&R9+<72t}zCXnByX zH`Tt|sI)dJBJ_P^6i{eHk}n$=kS{`_m>g3di)l)MG>>Cbwfj_}@Q$weY5f3s#M;Up zo1CcqU3M5HxnL2pLut`_&e#eT=XiTLiP|-Szg_yL1`(BC?NF9vG^hmD?V6%T?S%9T zZ+3cn3elAXsyKk=QXOH4@MYJBZG=ecoNVg6UADLRsboG{=_n=d_LZp+c9LxweqU9H zfQB?Z;-7;ViB_^bwZ^Z^#R3qVW88`X?%`y-j`HKzkw+qsR)M`B6vm_!wz$NMAOu`d z`viilQ-6^kovO$u9gM&WIOlPDyG6*Jy`4}ILgkmdHZ76=7pKL>#5~Ga6UEBw4S`Wi zhd5rMZP3L-q?B~TM^cqr1J@3=SI{wPV{a0wN$9nqxGnpg!D6$m_VyDJ;yjf$NZWz# zIk5^eDyYzYdiAV|T6IrBw2VHZVw*61n1Y-`zvRlqCD)+~5)d^Ef8JqHJD3>$e}8RH+9aieu`=T3;s;RWK5YmX93 zV+9U%JQAhQ8I|ZI{lSZk6#FK;&=RKtp)RkzD}5*-CaMFL^S~+Nn5QrI>ma3=EDU;2 z>KwrU%Ttto)xew%uu)e^08*&eBmK}v-t2W`Ba@Bo!f5&?8r+ysnlX>}yvjkSI1T zo4(ZI>k7`p8|?%KM z0%~aKfLZM^Bre(OE!)q{MG$PuYl<8)_%4e>;p@{fuiEE%?QuRwv3o|}&zDP~qtW6* zm$Pgbn4}r{bX!N=fe(c5G8m_u`!h^JXH#bO&zM8Pb0vmo%QH= zMfP(jaIXpNy=9GWsl7cdL#hlRJwqA6(zB8I&MpvTqcZBo`6B4#2X+>a3EGrMdniAO zZ~?X8UzM9XV7LfR-pb$AT!Un!DvN*E+tFZIGP|_wv6=&OjaL2v8!=q_bSZBp3xC+e zz3aBpNQo&P#rAzYHGs>hAT+EtvCbW0eyv|Tr^TB#f?ZY(P`702Wh1o@ zUTy@lCXjmp<)5?6qCtznT}ZEOdzmRx_uhB8{)~X>+#w$dc?hSRWif(Fww_aGwilX!&9W@Xt>N5 zGxF8Oxk5l}<*Z%0u9}QLs)HjlK^kY=vCfItRV2_cLt$4smrk)r@rp%D+LYETiPjI2 z)?KwOnQ4Mtp$hR*B9e1=qhMt}#cox=^Zj@(>ZN(HM5Zu;y+%$Lr=Zz2bmG z=EVyMqj%Ik`t-cSEEUK)ZX=)$gY{8zl&i6&K0QZS*UR8joURi1bG64Vhq%l|XiJzJ zMNx{!Hy$m|!5>tj|9St(CHeWR><&}132;=K5%#d@`ZKI%3diB)GBFVHX%NFi7l1HVo`?l@*`$8?7 zppFs(eB+H3oy?tvsfuMbnccg(gAZ*5;#3CdhWN-VP z)u#6cz3IJFqY07y**l)`oMC*ec=43YnO=0`SEu{V?fF6Vr)$DG7HZF=c6m+L?sxM^ z8>_Mc6tQ`y!m!`HJ>!2_Z6q7JYHRkM?|DA&4Kd>Huf&MI*E)P-ZFDqyzsBJC1KUTQ z(YEfie45rFt3=kqXBjLRBZD>YdPIQyb5~H3d4xiFS+y>8(yJ?3Q29Q}H_c#xHO%?U z75VfX&HG|M2jd^Cp4nUMa)~_Z{8{#)XF3r_;)((C0Qu4F$#C!C(Pn4yLODG)pfcHH zIwR_B@j}7HTh$|_c>Ba3xq&P?c~O=vWIr_TxH-*wKtbfY2f>K zX`E1ePQc##s6YaHQJzz)bZBnIg(G_8?nQG8;G@*NY)~`W+17`9Ypo zfw3ApmVN{`r>3(HgYTSA$hDeu4-%@x!x}6Eo4S-``g(9}1?vg5d<@J$d@&5tX&3e3 z(eS4VBV*3gjYD11aB=O3E1TeB>edUZ zQ06hF2T#o2CnK@#%+XF0P2!OgM_%clvJ7zTfPR*&<)uG5I^6O8oOsBiXo3mwvDj7$ zBO!^{*3eRnTMI25fmQ&+BCryu@(`Ry)c<5dH`&~HBZ3|-G6MMGTpG#UB=1Y)hw>nt zFAiufi1HJm^u)H>Biap_BeizgUH-J9iqVN~_bC?#;+@SdHDC}tt`FyUTQ@leae3S* zHT^SLWbI?JP}R?9HLPnyuLIf-kS3681n9RL()KTnP0p0vm z3JZHOin#4Y5xndPY>^YQ%AT5_7EuJW{P6bCvF_?j@WAXMb(ZA++2eQ(=G&5WW|E(e zBF&*K8GlE2O?X6fe(%tzR#F%23Qw^tcG`J<#SXpN%ztY;Hi>lZu=Lue`)(ywr3yPKDuvC=_51U3+VbwV+`tX65V4q=8SxRG3o5k5rKA!mOI^; zYwRM+K7Q$54tX!V^RbTu*2nbu{vLk!(mm|=9<)B)h3-E4{8oPm!++}1A0PCOiCOA_ zyS)oOI*w<5v<_<7XSU}fI#K*FXir8c=3~F-d96ORCaV&)d?o!?is< zJ76Q}*&(|!Jv(U6NzV@352R-YZZthRbXTQk2k!^dv%~k?_Dl4inVucKYtpmB_e1H~;rrqA?C|YM&ko=7Dl4? ziS+F79Z1g(-wo;6;kz+CJA6MGpI`3q9Zb&--%aV+;k!9KJA6Nto*lkJ>Dl3%NY4)6 z;q>hA9ZAm)-(-4r_>RWspK$nYNzV@7t?Aj}JC>duzNz%=@cndpcKCiKJv)5I)3d{O zTY7f*Zcon+---Bqz~MWYo*lkdq-Tfkj`ZyCol4IR-*kF*_)e#1hwskx?C`xZJv)4N zrDuol?)ZFz!}qi4+2MOtdUp8kNzV@7z3JKE`}679;hRa%4qqcZJABRb?C_mQ&ko;g zwmZ^i2e4H(IE3x8!9koW8yv>7WrG7bUp6?D3uS|Y`EzB1!+EZ3a6lK!28VPhHC*eE zE|(1s=}Ot)kgk>u4(Y4Q28Xm$HaMi+vcVzkl?@K*TG`-`zNTz&NbgGxfvKD?8ywOL zWrIWd+OokR{R?G-LwbMN;E=wqY;Z{bV%gx3{(RZskX|es9MadPhQMC_+p@tS{Yzzo zL;673;E=wdY;Z{ba@pXJ{*|)9A$_oHa7f=+HaMjJUD@D}{z7U9jOI;cgG2gI+2D}= z)w01M{l&7uA$@b%;E=whY;Z{bTG`-`{`IoKA$_=Pa7f>p8UoAt@5=^<^q0y8hxC!M z!6AKH+2D}=a@pXJ{*AK1A$@z<;E=wfY;Z__rEG9W|7L0k%;(Xv!6AKT+2D}=t+K%( z{o7@OL;9|=!6AKj+2D}=owC6p{nfI;A$_cDa7f>i8Uh>oAIb)Y^w-J;hxGBX!6AKb z+2D}=k7a{H`ahKo4(a>K28Zt2uY;Z_FP&PQEzfm?gr2li- z;E;Z>Y;Z_FR5m!I|4Z56kp5=b;E+C1HaMgoP7Q%I{jX(%L;Cm228Z+`WrIWdTV;bo z`rBoLL;5>qgG2h!vcVz!SlQr^{)4i?A^qQC!*%Ay$~fk%D5Y;Z`wP&PQE|7Y3Ykp5oT;E;Z? zY;Z`wR5m!I|FUdwNdHyY;E;Z~Y;Z`wk{SY!`qyQHL;8P}4G!s3WrIWd)w01M{lCiw zhxGT$28Z-(WrIWd^|HYs{WoQUL;7!1L*P;0C>tEoZAx!*9MXSZHaMhzP&PQE z-zpm%(*LJya7h0{+2D|VyKHbszmpmQkNS^ggG2iNmJJT+cgqHc^bgAhhxCui28Z;I zxoGdwwvTbQeOSWfn3+uo*P8X>LbZ(YKy~~TZo|vIaOrOLc{gr^9JhYlgc+QUnQ<^Qn9XWS-PV2 zG7SIK?IVp8-xG{!)Vz5Om3LQnMdMnCq{L>EeRSt3vvlR*zlU}O2Tq>XHf19d1hD<* z{ipU6QRFIMjbXDHih3?ADfY{mpHnAx`{8)~Q}Xo)k0Un%KZhLLKg&#v~MK^0&1-Az6Cmxm@67ZU(neZ=jV z8h--BF#re?JWJ&J7&cC2VpA8@=E6L&B8C)&y0ZOxD`zcNU_1>F$Mu1BAC`Of7|Doi z!qDjW#i!eW+9UPbnya$ES_i>TAxmv}fg9y6i~R}wNo@4iISh`dhI;ye^edU~QwU9U z?doGo%~b+}R53bC2w$t&uQiksI`r|LVy8zT7M7S<<{R^v-J%c4#t?SiflO`!+VTF79thZw40$CDu_Yut z^^|SUuAf}FlaR^RTGnbaOh4PpjvL(g)nB8GDGMOyyS*WyRbLeK!(_Os56A~|)E>(Z zan=GF_pZ!^m%m&8ITE#H+E*D>+%8LPg^hSZQHN#X%XwyK@%~Eh4ZiU}jfyb?#ZGj> z7!Eb#mOk|WLHM%az*BLmL6Qqml;hUm>5?K`w>(hx8q zyABACmVT$Oo#y!Ev|Y?Aem6(4dM*HB;kBrh8QVH2^pT||!N~RoU*1~V!ZP%Mh5R+f zSjNMmU4H(@9m$NR?rE?G;r4FQ&%;%rmd+*Yp;L9^8*3jl)F3aJV-Y&1|fm?>y zdwlxfR_(NI&w&N|w~eY>s9{LtO}bQ^G6+hzXEGYb>c9rnkCFOJNV%p^zv(av-qF)9 zyY7zmTsRgt+#0qM@k1*js>;fgT)COTvd-2;m)1brmK7&DH%m-{-{#q*r130R7AaE=RhFlzd5_gH zd_F(@o=@e^{p0Y@rhoqJU(WLF7vJ(Tf2GKuJLmuW9j-=s z!Yb6&7BN2e2@N=UjevsYD+D&RSLWw9 z%|E~W`*>MP_8){QppED+X~7mD-Rt7VDgG|+F>Z2_dW%@s`ZKkBXkQX=5p4S&B(461 zfAMn~HM{5ce(oR5zwL^~-=I=s_7nf=m%e-dTfX&Wy>RG{Zv1rq?YI8&7XJRHPdxHV z|K^jwc=cxf{tv(KW54i~pE`P6z<>R1AA9`o{`s$eOYQ&YAHMis{mmUO`YURmf9+fGXIMmtmBftL(dVlA?z3XrP#$Wi=RsDV4UqAe|Tf4QN*WcL>ZQt|F*X4hp zzyIA|y?F6A{^jp|Qt$ z>i16O6TkSAx9IOj{>jeYS$peqenfva{?ZNq_&Kk6@4x5IOyT%>?ScBO2w6Hlkp6{b zgt#d4z)dX4f9%w$>kkmoLW=st=HZuQI~?)Yd2_0>@p?hwFTCMr5dp?}E1(--DUa}2 zrM>!|zOdW9{=h9J=D$$l9?A@b0u9nA6TOHw&AyFT_hyocaO4SY7xvcxXHzP{+ z!WBjSiJ$Pksg8#kY#6;VIfKBZuwu+>TqxQn&uSL|^RoYpxd`X5dZ`P2ngrsP1eAM; zPp8Pn>n}p~rh3GA>1tK^k@{(%bUOK}Oiuk(FrJFJ3VN1N|T#)Qb^%XJVm_G$0wuoMC zM*v#bG(e^s6w>5a51T$>L`U*^kc`=E<)?FgVzi9}bdwA$ZhDq-tjHY*xXtA&ks@0< z-=s6T=DE7oK~3R&TAdB%;4ti+U11G$snK2?FLLRTFPZ(yT(@YPbSc%2#gUcexrMVw zOzMQJ41w;=ydK^NSc*8nJ8Kr3s$q@7sx3^ z_U-yBb-%Thq(BUBwb7YS(Ss_Y1UyOZ7(t}@MiBtk>TJEpbA9i5dOG|BYqdLUPAH}! zQK+1g5WDM8nz*&L3h{fm-Z*{x@)xQmpL}C|{u31EiuLEkG@H;j{6K zV^QJ8KBQu&(bkDBVG~8RQ?V>Pjbl^7swIEt6DtN-nlIOvWJMXw9)K}Y6WK+2e4*;Z% z=jR5s?7||oxzZ)v2n7AIV;(yZ8v7EPF+h)|4;i!=0(9s}2kyWQ-@myY`O6OJAiU~x za?*zw-KSAWevXUjw8N-i;Em(LP{r$$>qxG3brdw%F#Syd}4KXiA_a`q5&yf~Pb`Wag&u&QWLAhx2d940g-E3mY3 zhGc>vPfV14E>SI(} zv2ffJ87#6~85S}M;l*4htPkQux4oy>f68&oUPbiV%evI}VCYI#A`NTD_}YE@A|^UX zcQ)W)b#w%EQ#8Z~b|*E1kr1pw$#|4)Ms_*^LKhjrzY#tb(5yvC3Jfxx2~@9MTX;<{ zrA0}lK7pBfL;Ll)C#nX51bj-@*~>}f?5(R4!b zEd+YbvfK6J^nCU{CuYhWR=UDVBp`Oc7KCZIP{gu^yWmV%6`9cD8F<3!2oo^tbi~I5 zqE3;OcI2z~Nkh=pX$gS#d0X1RA#97omqmWVP&TsPwsVVNp*6Z=?w^?5$k9j15yK`gC^ zdEBHlr&oUGX4J?IPaHlPsR=aL%5{N`P%e8LqUwa)-ebnVK#9-=8CTIK%2mJ^Nqs7r zjbZP|%53;r4?yBhUKX0L){HMpig^ZvG9vC zi^jF}y>%Xwb-eqieU%{hyWfx$rJB0yMkVbo>?salR;q~9qoa@hWz@t6Wo?SuiV(O| ze`7vFe%nyKTf4x9F0EGn93HuS<-R_x`^`z2wvAX%hi%o1-IEKg)2o=4+HS$D{W|^~ zpS-@ZQJ}p&c#K{O(Vl zD^=Ldf2NR5fJPknAkCd=KT57I`l_Z#R{?kkQZOz{DC}_(x<$5W7fO>TUmpLc)q}ZM zb%i&Lo|bg)Cf>!Bm2(IvCK?)N5Rkz~T;z8T<-OXjkgc@y(4oUW5amPrZ|!m0nc#Vg zYOzp6%1P%n;uA9bh~pG_b7=FJW2>lsUirJW)7$A3z*=>G67h}f-d3p4pcK6D5*6J% z{WVPSPTbK`)L&G(dY@+GclF1NT)u_|G=cyXk>K`=4)37rTEr#J=jYS^lA7ZiMzR9UZW zepx(&3{vE;9?H+xjvZCW5>OaomG+@JG5tLZ)iH)`jtH;=7fh&^8cY?c1$BAq7I7>^3AaK{KoIhdl^&VU`d7<{?N*M^3UZ49l*2eb`O$^>vr zyM3F|U1fmiVUjFsOfhiA4nn1UdK*k`Rj-BHxF0)J&ebn z?sgtRt?c`U>?oUz?n3}@)_=7LITB)qyZ-P=qQ`eV9ONgR-b$C$JqW7NAf9!|t?Sb( zjDdjK?Y&{>9@&EX{+ar99`iV$jO5EJOU77aJ!LDRsimscpm9q`5P0sOHSa``ZQ-g_ zZFTPgnqK&;F$N_i)f?lg4)2zW59#nu*C(eY>w9mmR5`#AG(Oek`sCNn&==`BORsc?X?X~pRD>Qj@P3jJUm5rw-?FB!kM|U6nm`=U6b#l&xc`L-IboVPva7!#44YkQWS-ih=nUH_l{RT zCchGtBRRUZY2P)1>*4jUtB1-L-tBayWvX>b6}F5DU6Xq##(6_VQy&_YSN&t6EPkd< zp_{nDL)kmD!APYFFER88v>W(A=0*LSp(T4?e!%+=I-e5KHi{dz4S?>S(Zr)|9wXqv72~h1q(46Fm&8;jh ztgP?m%a?#A)lCuOOVI2B+vyE*J-lV;okNE0xwIrN2TD0@=a@Luv~=dsN8EFLh$k-_ zAY2ufipw==^y#D_>rv-MxmO~dUte|iy*~*+O)vqn)xxe~| z%ni=ff`!Wa)fpYDM}ks&GH||V#agz3m~o;8SkB#;CXpVm16Q<$LSH6w>QHSOdiT(K zg+lMMxQJ%o?~XE+*}n7~Y7L@&FoT7WySK`&V$1seq4x|u5Fxzef8{5iP;}YlM>D&e z*=&k>;Qy%R*bMcZsycDJVi)b!p4B6*)&#%YveGH52HpXy*Fu-Rax0676mKPBZHCBA zqH8@VOm5heUYNRe@!Zaq-R>FXJ9AY;FV@?G8c&B%wX!6k>4X(@*}$znpv9lGPzBkV zMN-60j)h|k!bZ2ei5cbo@A{~je=N`Ug@8>x^B023Cc>Ia&xP2?f7!Vr`>rSyFIL}k zE5C#Yv{mh|%@iw-31oHyZbJ6#6ZMmvgf{Y!SG>H$z?DI}H$Gl}NnJNNLg{ZbS+#+M zAl#rT%F}=eKxFMo)ok}kILdO5qiXEyB8&48#x$`!f}!owGK;B+XR`DQm|PL=ki_dj-BzMXEvi^m^=zBc$qrY$&wD%nIpc$^k5WWl5B>HW+ z7-Hzq!4=74pat(wsZY6KngS#GRPG*A#^a2NyH2e2OxIDbB>0Ed#arGpG{z!4;hi(v zOPm|KL-}h&<i0p z53*1X4x^xqGpx{;hVq;8EdR>T@Z`x*OPHE1R?)bfZ)~dXW)ZRX5QUUyZ>uqzH`{EW z_i{BcunwJ1NHox2CG0c&d16jScKoYahX+w1<@`?X^%?BcW3iJWEgXCM=C_9V=F>z% zdc|XvZ!xtgn$O~BMycH_0~NywdbZdfhwl$hJf`bj970)}=9-;iSK2DueOK|~R)tNE zv&3}n>%{dN05eUb6lR=74pPPIQM*{zk1R|0)h7w(SOs9rhQ%@H9tsl*0l1?(c__%A ziKg8pil|>OTyxyRZ^b?gUno#rD`%V&tXRttw`6*$n~4pDa6y3u<+2*}#!kUkMgH}n z{3sj#vEi-9(?*9$ONSoR_-FHEd~+y2%|d;Ac-ygQf-aW{K3q&IhBmsP?Z2K4LM8$Q z_|thdzBQEJ&6fY}@b=Y>+gmv#m;Lq6=4tuPP<}5<_o?BLLm?EkJS!Vo{_9Ek(|%I^ za42uG-Jco0a(?}GSI)_0e*3d|O7bl^w&eVC!_TRkNr2);SY>3q)$s!b?s05Dzj**{SXFNCn@x{ zvyOiv?b;iA>Nnj?<*AiL{N8I4g-^_-{%TvQF_xdG`wP~k$vo}WOVRx>9U~@tZ>|fJ z<4sp#?5b+FEXLBKsy%;EItqc2o^qx@)nHi;VJpa2ipi2~uAED~N0lyFjicy?;?v*n z$VWYZjL%IrMBNF3XmbYbQ2WYu%eim)b~oG>Fok7Tq=3c!X>een$rNkTEH7@ey+Bcmaw{M3l%lc z1qL+qsJ(q#-?-LUG4Z|>V2IlUaxB70%7_D{)nE!2)9_lRur5KryfD?exu{RHaQs!l zM(v+QYl*!9c2ln;kl1hiemSTg_V_US3@4s6XDe}T>QLOaV-Iw}}Y8Zvq9i_A~MfTY=!KcTcH2Td2@#B6DKzVQ^VDQ%k%>xDv zMsM_+K7x@(&7S-o2DJfhE)E@yu|9rX*oEK#elVSvN;Ht)0d}E&c8zNRi$k(xOs_SuZYxcfA&}DAmqsm!}uhM#RQFS6ECsVNbxV~?p zH5H7GR=n{tBDz8JU5JdI2`NF1;`s4qHx?U?6O%riX;McWbFJ?RJZSdN5h19E zO5_CQfpF`DSQ^a2u0DfT$lpcq8$@8S$iFrG1G_+&b5Ni>{_(B@cM{%-iEM@NQ)1_n zUF7YCsBAg(qhfV4LrM(YS?P3jHH-xeT%wx^;0_@JWiOz=fPiW#*Lh(T50GLxZT$%( z#|5=KYxmaR?6vbL?z}*xs?ucl;~!dEgbk~@CKi?NvZurb%0V0=iU5mk#3^F|fC{vg z^Rdg0>o!=J1q03E^5`Fx3+QlL3nTHMhb%UYt%FdpgDhyJL_^$oq?-92>R= zRp1h!Ck(~2ftMVyFdtDhzw_8 zii?sFwev7>V+8EVN0c#9{3^*IC5xrZ%ghOLF_U{?bP6+lH&O?(s(XEc>6mK>tKr0_ zCT<~+$EMtv@SOB1ZmKftFTN=GRm`Y#h)uj5m#Uds1k*t8J`$HPg|Oklq;-bZ1rS+~ zs=cYzTfz}zv9&sF(EUIQ<+QaC3XPXA>Q8LEgfGQ0#?#?)L!l1I;P?e1oCeG=!7aJ* zoJ~d(GZI6Ffg~!j{>gp_S79i~##B9v1I>ef3IMBro zh>QW>Q2F~r)3Jmz@*oUl7jg=6Mv5>0qxoRQ?jxd^Os731!SGSdO%sle5~={5vmHby z=t)}l?-RU}Mq=BYTUI(1Kx3_d$HT8CIorX&xg&w!WEcJ`qq%%pOyn5MpzOjvw3-Yf z7Bs3?oL3}>y^}~}p-yy0KA4iLwTX6RVPphGKE&}gO*T+Lu}}p1QVOoeFPd9V0WOxg z8G`6VS0SfkiBh<8`^v4g?ATg3IdK#E&J5)WT82X`$boKZ6pM@ zn4YJQr@dAo+V+K!D?9CZSqA1p51z+lE9DccRzy;0KwX9aAM2Oemm+Hl`RD{0f`F$W z9W*FZO%$k>r#rT%uv0chw!ZmJ{kLlKl5&@|&eU@*V;Y&ctr&VOf`y$Ej%T4#ylveB zV_RnYuFiOA3}E53spxqOOeEX~SwbI_NM4n^3~y~kY$c0~ktOCXlG29Xmb^Vz3#<4P zS#IB68AQ4pRn9E)+bShzVQHz|S^zs(OG0u#C@hCM05U$`#Tl!x0fNV})rM!5Tz5ga zP~V?WQ6Y!n7$LbO0rYz%hh-O+CWi@0pH*^r#N)S)s<8AZD*rtuLqrc5f~<}vv6&g? z-_cYUD)~WjppuoiM?&|$5{XKbXIU*n4okgwDkK$z`r}qL-@8au@?r?YKqxjmX6u7^ z2HJ8y3$8$rkJNy?8iGCgS%WgX=azwE@>Uh#>{QSHC~qSmWA!5;Hbou5oPY)bxov?w*-EdXfY}frt47>LMPa zk~V;hzN+9V;Hl=e&Z|L1!yW zf`EN2p7RI^7@;8p(-*(9HGm~2?c=ff6!Q=r^=k;-{W@@6CkS#xq?JUCLWdfnq&!O_ z6tM?wY4YdTnGI@D`AQt{39=*c`q$!EWkrrGTHcsh`{KfkKT;3PPqRRVYT2^Xe88=xKU)5uIS&xuMBZ`A3kB@{^`b>wEQO#gX99xfieYS$5oWX zDbb)&#R73#7NiUhtx7pyMM<{)|8ne(3;Z-$$3LT-J5lI@wb}#t6YNH&9S0I}T!vo0 zfErvPXC}=kSycy{fKX(2P)3)U4m#YrV@)qwcB}IZ?4I=FAf7~Dp&FS;{PVZ&un@`N z$Ls!E6wZQ5K9JhH*r<*7`^<^WzQDo!DEn0(6zc;j%Y`^)h6KU1G16=JYsM#iDTA(W z=hK&(Z7Ahl#vugGfx=V39u?~a8_JD&t9Kn6qrVG^(@jh$CZ;l3;*Kc z8bF!%#k>Xn=8>P#Z1HWI2-dJ!)DgArT!>QFQgCQ9BZ?P|%?4MfPR; zUKX&vFL@6PbCr|o2`!1Kfs`~19t^!lWPIZXd&c+x6&hrj8n)D2gp#G`25=DsD`SeY zO8^N7<#`EsjE87o9vwtZ;@2cL+kh5oNN{%31CYq~on7e6t}U^`W-=IS7x)0rN(ER} z%bw!U>E)1xV8CL!6khB_)T({dLMYeb@4-|V4u~{Dljs~TBouavF}Di}(eg|s-$udT z30VfL=$n~2OpV+t>l+KlZqlDy1)ZDsOCh#pk^eu5f0fOM3MAYh}nyrq(;{0&AFYjwm5c*?iBV%$s)E1eDSK=)ML zV*+#Q0B}mS{*1ucFz|jGk13wQ4DR-l8-x>Ys>dHF3dAqA@L*RdOm&Oh`o>-pF74TR z)7Fbd_%8FW;hS=ZqNO?XZEIOcD4LFJuHh`$ut5V4M?;$;z{WqQJn#G3tPcOR5K8X0 ziexc~XqNgT8G$qntQO0?ldjdAa@8ejeZd6E9+i4eMAR;oIa+HKDiD8gwWr8lU8+xH zgevw74MWzG3(K>mnyqG`%BvcoxNPX=#v21Hw>6g`Vx1dr#Ii6Genh7@P6mOiUI}$M zdlT%{?ggl^=lW^A*kX66R5%>%`WRdV9+CEndL*nw382-I>#0~H1Cg)N;)O90PO00i zB4ZpA&m4)${8zSQ4f1PZ@mzYp3W%Hd(eo_M*?^H@lTgVhda`&4@Svu}fr;O?7*)Vh zUN%-g!wt$cL}4+O;(@-TQ0+c`FjeXOa?28?Epj#Pi5S^ZTY(+WqHuUiWP+Uv}2~i#kW(d%eS%FpIohIj6d!@lu~_sjiLLkOpWme zsE!0coX6wlaw{xDl8gLYyXaDQ>dP)+VTCJw!(t2NA+zNm=>&(GyTzPQ7T>N?V^zUs zXZ3fmI0kvs-BTblLOaLMPq>hKtv&uVaGC8caar7om#mVlf5Ksl_XLAS%pp{7 z32fhRf-M2JVa6l2VWw{vXPRd^YpcD6)*9kt%kJJ7?gDo#(go=ph|$r_9O2q(

9P z$4@>uSR9n5!5FbP%IK&nY1Y16`NmMy*eCL-!V%_J@vh^N+nCrB6Mmqlf&Na)yIS_C zjPB7qAKa-Vc9u~@o-zw<#7CV7(iP`Wg^aJPc`{;=T^S^#63tZm%eKvSO>hWrqf%06 ztA&R9ELYJ-VyDXQgU(iUkWhh&THXk=Fc~SaDr7)ZkXew;V%dNF&1g#Cjt)g*_tU|#!Ja4?=mx4l zdItD>8|R!u5G20u$2KUB^=S(*VEvEGuPvX02i4j3F{tx2aBf_Hh6g0@egi+1zThNa z`>)bgIbEB}FbSE3V5b$YV=D3y)DpSKLXxmyEK;+v4MtWau><@V(L=89ZwI5k_~Xdc-wK?L*PDut)Rz7FqtrJj;G? zSCAtJBXxmdS2glVA(^%NjZ{Q^KA0xbk?W?aCcY0b2I_otVR9ru1?{=*WDtJ$zhbSu z)^1VA0h=Q+h|0hqQa@b|pm!zhAvb9n;GmQllzy)&Az=(e@^b8Y;Y^#d#KN9xJkh&c z3G*=|e(C36flU*Tm%12paDGO`FS2_%CbF(gmv39lhFG?GundPFUKKH{s=pa{C^Ji` zJl-cTNS}WZgyUEt7)GX>*jhi>1h9tA?YrXGWH1}u8A&ZLJ|C;X4k86hV^y;8q?uum z53~55%q5pGmMnDXFb(vKO(a%XHOy(oEpPE2`7Wo?Y(fFA%Ka@Y5k)&9Ye9Ac6RvqE zb9Mb~iAkT9 z#wqgax8x6z!L+pXxyKZ2PhN8G0=qLS=fDM{?*CtH=L1{!Rpt5L&#|4@PIt{Tg_I55 z*OF4ZI6sn-&V-N-ah;^`kUwth^bcv2_mcOVnA(2E?>S8nnN3$^wv0ea(Tr3iSQSK9 z?F_71iH-&dR-geyHAMmzR?BL-3lc~zDyXXkX;{I|e!l12`}_Ugvy%eLR83;P_xqiD z@44rm|L5FITkgW9uP@co_`~K+s5xrn_C9gnk5=rrcpT!X3ibRbpQ6T{q5rg>jwD&p zn_taS_&vtEyE0-K>~f>l=*&?#RsH)>viGR;IbcpUOIM*qf}zgaqXh#Mp#rmr-ZDMR zhB$;wspV?(n^4njbFZq)13Hsk-XSIv=8uAk2Bt@IZZO?wcXm~bC_W82xHI+Bbo`n}pi12L(moxmj*5SY4Rf zmC_8G*#(X#8W|y(WaNH{sK}!IdEZNI3Z0Z>U5H3J7}~813Zx?>;l8)#2Uo1ZV@-5M zI~N-!fM#%(&wrkDtNmg#5Fh{l9$JH%rFIy7KO_vYm7wx>ZVg&$49Yy$ZVh_ZvGF7O zrp66LbM@D14$6db_B5`>qkim4r_!T%%vuqm=&lXC149v-$XiMV&q>%EV9mtN(Qd*9 zQIq^_IZvL1Bevf3e#ucIFmYs=pH{h)rQ`kSW9f#qn?XJx6*0CIGPfmSh1c)n<1$g< z)g+6vHBz}QD1DnH+#sHXRn{Sdqen$u(cLC0)3PYJ;nOG$obCdFT36ZWSmJp zQ_KO2jUdA$&C;n-%-h_WheXnwscJJ~^KO%u--r$_SneHR4Skw)sS)O(H*QID zFwy@Lx!%^eGg)#otix5+&erhsppOrU$7)Y)UBI@JAorRS-hg!VH3oUh&6Ts~++ie2 zSeUC5GLIr7QbXJdmtn|Fi>UzEgTfEh$jyQcUC+SIUS}WVWWu zKAMWJ@TL3ABI>r$Ty&XBEP!9ZT}E9FincN6szlthAN1JB3XR&>3N=Rg(?blXbi5jvWTy-zaGTMu8B7=~L)3!N77kkn2TRy3n6Knf8)ID@P_I!q*`-9jq4|ft$42e0g@WiD}K|v z%ilQ+jmoG?lTSf78*5~*@w?fM;bcQ}7*Rp}5hK7c+OF){;a`jO!+j8>Yyi$ln+Wq| zjXGlj?T$hq!;NdpJb}5UXKNMf`*?ZcGP?ui#Rb7da z{i{Sqv?^v5F61H@d(OJjZXTXqsW(&myLTh!4K~kd^P1aoeH;6!_gg&eD*8wI)8|pq zpB%V;lQmXM{hvpw$E~a2jOqmO;hsf+aQg8Iq5k#Um_Dt;j0`-C;57g1iK;(}Tap>8 zzb%DQ`AfL3smP!|*hqY?46=H1G~4d4PZ&L>$>#>BU+P6n9J8{67T(X*Q}KrxQ3R$= zj~r`BM`ba!ZQ|MmW98XqTb*p9o~NGGWwG5aS zGmjodt&D$l!P&v6XJx~2mvuB8_Vxy)v%PuT!WEVK?;*|Fnb(65@MEbo@ z=J!?O{$^D9+j?;KZhxsNlOagf7J82=&{SV>#0;QZnTTIWjUxVUVr>UU5wi9u6p%J$&se)wqZhObCcwH(%Ijb_(PDO}=qz?>wYw&>gC(HlPOaY)0y*&E zGt(s{WlE1DVr`yRhOR@i=ESn?2Ovf0@R($f?bt6g;P_Q`Obbyhjkvc?BDJ?3{6SHI zwX$_(m`;i8om{=-94wZ<)PP@DizqL;R=AoP#bLO;j}W>Ea?ATcb&<)Zc6S~l)48(A z7)K}%7-zHjKx`x2^OUt4nJjogVOE<+f}v`S?rd^Om8}iN)kL^*RFt7Ra&;q&l0R`K zqD-|KlHH=~eNECAITTVVdiuUJ@N41s6Xwu7QH@`6&T8$p?np8l1My}fWq~`c9o4gFfsl z&!7_imzwShYXknViO zA@cX_(Tbi`{|KJWmO4P)HP5{WWmvsE@94Q-pg!CU${+23wZ^m!yyGg< z;#ti~Pp>(x60F|7`z_{RC?p~f_N?>$b5!bDC0P)2K zD4L7`d88Xiz)=CkG1Q_v23Iw3lorNk^X4~3nRccy?Z)#fU259Fpy67Hwh`mVY@mbh|nQ9s#myDd}_F4n@ZfS(XNZ#||*8-nES%#07 z$4-waa0gv2YRP?Dzw_d8cFS=8ZO47vQ17e7Wu}J=r{==RU{)A)SOqi2vAbb}{aY$; zUpI)IhPuhRPs31lqxfgghs60y_z3zl+*$TmV5L0ZZ-cL${!;+zy5>`WQ&U&nLvP^X z(*-nK8A`u^c;JMk@uIG#M%EBYM@Ohs#4r9EO0;mPC}L?EK5ApWoqnB0OaLkaU)9^> zdr~Y{w_Z*k>rcO#Za!$M64$}`<#+uK4_}t1{uiw7Lb!D=mt>1#o=DSzw|C3QZZMCR z!AK6H2h4Vee!zfln!|Zd9K)+Ru!(4dy86S7JIjxlsc@<1gUEo5xU9qw&-gnE5ao~*0-JM6X7?=p zBwk{NtG3exVpFJMPmsYKU_H| zdo&1rE70N)Sb3r4s#AvauH-Wga!f6;t)JJuyrcHm_DImuHR!um9fBWT;ShYXKV9je zdGNr$8ksoPIP>6=>Xy>d&)dgl6x*LBnQi`}%%Q%Q*U&sSe!gOlSx6VBU!Zf-Ib-}A zEiJ$&Zkv{DmFh{-DDy9cGV}n~VHF_;9Ok{dQi{j61XIhV^wYJb^k}>a#?GtZNp6DD zP+5YBRoG0LM}4kdo($HH%_at&(TO(pa!rOTFy#xO8af*NS1^hv&!`=+}9KNCKykB>KD)#ca{4C9AcnE#w#~rrO#YVI6DCT2+Ca!@faxNmt;92lICC2%hd+9%MSpV&-oJU7Q(K zBTS6fcX8>%4Ae>$2%cIrCMdS1MqFK>Xq6DkAaDlQQ`KW<{g^p09useiP@w<`u zgC44ST!!>ol61*rD%0T_D7STL!U$waK6Xuq`Nle2m|owYm>#`BCFZrf()Q#yjZ+{o zCo-6f*z46t?__@`R|(&N!L>EeC&|P>_+B%(WuNhaIdR-j@0G6pXyaZ}m5N8*%zE9R zys|&1m8#mw7}G9uh>p2SvIb?jcpM)g%@1+Fk;jY<|5nZ$EhCtk zD!c1Q!kq&Wxg-b0GvP$>#D-Xb+8p`8Aj0B9Kr*f7{E9TU^!mX!?U{(`+_+a2cYm;T zFB1%Y8n+f=t>BiEsT?>e6e0>@1QzF6WQ*u7v0%-M0(HCFHa2UaQmqG1w$E>ZAP_8G z6$iLmap@l^rRAXs@V`!>U=+Zs2-)ST<&<@Pae`WjC7MMwS|_t{?g^(TOY8(7o@-1r z2~kQQao)H?Okg>;g1PR=1-NzHS!ryg4a0}uh6~9XDr4|)XzCqmb}0TtjXA8uWYGIN`j4wj)mrX=TM@*RVmGVcja8Wz0}(MwzuIy zd}xl_aOFeDn#*V3rr+L1!i=r*0gRIx4QyxZ_ORe>C!k~${bJ9CBpr6+o_KR!w`I>l z+C=WKPxQJ;DRlW@`+=>Rq~h3zD-8lgK5M)pjSFYySL8xPDwD}zKWE7YxXMURPg=iG zoZ<=z7vqi2ggM>|D5a~SSIpGNHRa5acr1Of^0X6soK2B^+{P>gV+vR4)yl|C@ke=q z`1Yo;%DpqAUGuiUUdgQCQR^ja1%CrIJM8m-6#1x4;= zu2jY+4(}%ifHT<2V6ys+o3+8_8P;vS{M@E$RCGh}^!|5i9pm#{?2_Ft^NSzwe4XcM z&g}F<4fY3K->ghOh?`eFq6fj^h=^NXT5~mUk;hlL5Z-!szJ2@6#;phoW}M0ykBuvo zu3>Mj=zFmWLz}K~$1A=~SK(!3H-G@dj|%@1Da{0*M7PDx7i<1&)Kq#}I* zvbrWwQXlr=j-{R$F)OKa#V5DR@a*ujKkS6eb(!pd>wp~gZSG4&XQ{yDP&^q}I~w)R zi~yU4b#E7EcUA9AgDCjeTm35-eSUdX9zTn zE3LbVUgQVoH1E&KG|@B*rvYXb$>2OCPK@HKhPmb%ffv)#4vx-B0{b*Yq(pM_)=e7> z;$aX53#jgj7~MKCPJH7KZa6WPOFaW5KyLb$D90{KG;f8GzAczWoiQ4M5TWaufa2_! z+}Fy2GeaYth!0KHPmanm(`Hd<8{8l+H(Q>)W!OO-EKS;cv(6Ru;>37$4Dsd}-x7J? z7uH&SLv&TO1R=zVHT)w9sqCvR-RPHbFRdxDzTiFsdTAZXn!Cyh$t@p_JW7xb z#KhdH@r@{;xDir{2VCV`J3{%YIot{;I$VO(B@L{Lxt;ecy?OA4LZiVk0PUsSA8gqq zcVcjjT?Ym?UM?JrCjSdUbMnoSnUb^1!3u^M`y_eL97;~(OFgdx+A#L5OzOB3YeJN$ zjTd@qIkqvG=PBjJw009M2tF>kD-TDoZoT0W-wH7x#>lqyj>6!dtr!2<5U|?bf9cXp$1#Uw~oc78!l2E8? z@VXR}npJ;=`XqySVy=GSq^U%)tK1H1r53ag*~;QWC^qzd^jBK;Y!+V3P{QaEspEnE zJ10-2^g8~3FRD6dJ0lZ)jDnJARoBip=a6^}3d)5qn=G>o!2K97Z4Q2E4|GC6Wy+*h zcKo60-y9W1VPa7@%$|_>CvgbBLluORiLpuf2E;R^-2m_0J0UI};dLQ&--1QM29L-ZNW&Ri%oIKx!hI+t#CivY6oRySWbqL{IADk`sH)Ryp9WpQW@S+b|J9^Ixvtx^l+(Ui?gJ=>t9Ezd+s5;eGA z6Jq5@U|EK+(U31lnN{uc*s=PYmjY+RZx z0pBMfDp^%I6k zFQGY^5IQ|BucOtVvnYPtUS5K-keC1}ep9`>gg4Qt!4T1KT#T@(Oy=yyq^L!GAqACDYGx7+ccc({~J3hNtG1TB-eAJv2p%U8BhPwXdvXh&bA` zwhRHBmnLwCnSpYHD^rtGa607{gw~UsDeG34-FMh~b5DgU55isGYqgx}1vN7|=AGTV z851Hf)?msNb@$B{G$Lf6Xf1dxF*9%vDX7Tq3rgaCU3#cEGwYsfQvKwvEENTYCv+bD z5k>TP2HeA>N)<$*646s-btR$BAvEtd%OHpEnjnhp#Wvt;zb?STS!x&N{S>1(=N}>e zQq-;bBo)%4$y-5otx^pTszRmu4RRHY`KvHu!~%Is4ODa@EOo{7FOD3@sqvvqy=p}9 zw8~(r*&c*36Pm^bb#Gpx7UmyP`j1DgOh`dbhC0+5u-xKdMOWj^4mg!S%&C(NlP zXaGeFz;_IHr&=`Og2%S;q#0LHc8oPfzsBL7A{ z!qAO|9>4UnF)~8~3yeX@%evq|+E76W3w~)P#XWONC2c>sd!65E{Xl-h2aLeYT_v^Q znGOpnztjjX-B;1Ktg`c+Vx!Gi2d~m-Yy<*k_+PLHrDMkJW z6}wH~LHT?Z0NA-QRv8#OSMY=xN<(65lLGizJF529YtAUY+{NV%(h?|#2cHlN`c3}J z@ojlfNIbTYsCOM2S(TI)= zN>iR^EsaX)=#}lGPm~GGrm$kyhieuvIY#i-q_ixJN!{XQ(Q@Sw>B*`KDm&r!dps66 zRUr{9?fpnFYCyQPp&GxlsmBUipDB>#CK*$qfoZ)VLg(6>5!iX~E}g5LS!4zF6HcI} z#n^63QConALpO<_iNJ;x{oOXVxJ~Q}FRw0Z;eeSgWg}-hJ7(nw-GuLEhSlYGdu?p zU(8r#tulho*t7B}#~i=i(q^U zW)g-E)EY0J%g8Bgp`0a}unvs1#{2@W6GIPN*Tp&PNn?euny^>q`MZMpaIB%UodC{q z=>Ec%YpXQP#&1dpm)OY(uIIBo#tUbfcXE5RDleR)8GtWe6@ZQ~WN9kelD)cGFTGzB zv_^8%^Zn`mb-h*8kudG?#k$SI=MYkyeqf}xuqx9gj4W*}92y^Ai5SYq%F>gAH*TGx zeZg#Vey*7oKkhuFXmI|GYiJ0i{>!gc(jbp|U$9{>MGu~Kq`2gZ`={fR z5;y&QwZRXuqZ`Ma_26mO7UqMJRh85a;c0^20GoxZtBtFrq0D>s%XR z@Z!p2$g#i{P?>a9uT-<`NBD>2T2q0Ak)Fojs~o`}tx9<>5LeBe00e*4E#vgud#zFj zjrZc%XS8}k0CTW!)$s_ShB4DeOHi^y`7h?!%em7_BbBIf^!};{XyZpv4yzqn-Tj~n z$UHH`WJ`fWn5?|pbmQn80|QZ!O(l)=^~?>fQIPSd5tWSv8kMX`*RE_2c!c5=6(1byLrt5n974@c(#N$-v;M#O|e3<|%4S_=eaz^fbt zu(Y?W$wi-l(!Top76!$#HXdgNUiTv2EQtA##-@F0mH`HaC=xTs>Cg- z8Y+|;goJu?bZ$dT7Yqex8M8zG`p(We?R(mvS#2B)xun zzLiG~%oypu&#*{t=?p*@XYue9j?SRe=J+g8g41gkkjKk*hhVu2!;?b_C^Mxr@O(az z>P-xxbdIx``6~g7B_BIe^L%hyXGjFMUM(fTSv%@cBq5*r6mMOLQ+0}CK;uYlL_xsZiuG=8F=$!ND zEcv@$c@s1c=X#Nj4P!hHQI>FY4PL6 zJ(Dy$QO;buVVwo6Ye=$roB&?ErsWTRP_%KFfN8ryrw*1?vKHYaviRV|fjOCHDe3{X z<*);|0}c1^qL$u7G2&9YX7j<7C9&&XbsM3Xo`2#IW}=e_ZH*|F(gE3IyxE#yUf<&R ze=yVSH3x8OoPWDAYtHYqZ}9KNM!#wiCzm$*L6OQJ4t3`|r{}h9x844SG6YE7(x9*h z!q~t*zmxug`3qV4)Bf~x>o)8RRCsU0uH@M}lw4l?ckT4r7s7w4ES=%)g`h6FEek-D z!jMN&xL@S<@C6!E!bwfIeyK*#LEX$+b|B*R={Au&C0Ik2PjpqTQcDZ)I#kBpwH!A$ zo%w~+XG3S{CkMBV;970Zll!8y=HllEw%*fNTv1!KrgrN~>pmr-cpT-4+XTJ)IJI1Q zB=djBNwYoBN2MSmZ+=CV&yOkx@?0JZCtd{xRl@)Y;lygy1!Cw~tyO4E$0xIWVTR<= z(cFwgv)&P2TNE92-cBb=y`Ti6|fGIgN&483-Y)~V+F^i`Jh zZ!|@ha5ivJ%cWMT?k){}=+d~-m~yw-8VGO|;8XyxC(PhjC<`-U`O@H5wCs-;T4H(V zpg34G%XYh14mZ@7W?~pH2QN3`NsGK_i0~0jMmSdYinL0fI_|$_lh}Z&dayCC0wvi! zoU7Oj9*Zv`p)@AXDTAau-x2HhQ97E(Cr7jI$`wS8X`GovM!qX?%Sv=4u?j{#qp+=KbfuAHULcnmv^B~60lPYB?z*}mcS_yQK{|?AqcA5^%&8y=9 zH!3TW%yg}^Co1f+LXiWM0h@P-2m`E`y@>DlSt_X=K^rSAPdxX0bN;-d7O*K0Y4Es_ zJtVtvB6E0jNwX1rYU9%Klt{|rd-|R?rn2EHY2*SXMkKl-cR^rXef$pd!VIsnZNXym zi5Ok`TryIbN_y&8&OeO4!r0CO&8($xFZt5CO5`1?$uEwT@t#}^wJu^6EL2A9_GZ~$ zMMzv69WQaww|=zDsPcgpdWwNy9K}FgJ75yxw;FEmWI>{bi5{94YoX^+j_SU$BvF&E z=AqKVPQ0!+F7$j;XZxj&7h1;MuwoN?ugz_QJBq7A0!Tfus5S7}C6%r_&9Gg6xW zBs`iKPhx(a)MBBk0<15$dUDG5@aU|a&RnWW;Rw+z3a9+^YhsIeK+}(W=!9W(rZbye zE=?dWwk?foi|+sS;PL}TA+p~is)*^bhABfU@9?&=NC+aUFaDB$jw3N^Uj=t zP{N7zK6BeAD794wbfCGs-{LPYGdh18j#nFL-`6bHa9;kRKmEeGO1)$=MI+7FOtjL_ z6IUBfSF_T}_E~8aTpC}PgEG9(N7>n63#uhacO~K~>nvJ(at7EakdOt5d^v(4YCVl%_V?f^_q0qQxiP2-mtXe^NyfT6c7sBxHKfo7zFRX!} z!dTDLUpZo-dqJz}gV&2h{eohI; zVPaQ1E$NGcH;;&qATr5+!Fb7k-n7?~0PHmAV~#!I{)akFN(wZUC%D9|L3vvxyXBy6 zNd$&!>;Q)D5kFqbySmdQydC9MXompfG8YHYmr!`(^Z2P1q^K;YA+9L8T>a>kX7hpK zQPfl^LogDwqWvLLU)n>@FWe;gYH{xhYO8u9ST<`-EY+Pa#nkA}O{>aPc|E@r&gLzP ziFBW$wK#f#W&V&dxjub)-G;pof}sd1uoZ=a_T`-TTG|J zxuR{uGv@SzU&b#Tuyio`59m@Xyr6`g78Q#9M4kao*PQ&7sO=Ub>?wXUwZ;f@TW_J) z(EZkWg%?1GY>Tc}B*e;Z_2>7VUl*5O*UkaOr@P?xZQe#a`A5IYch2Z>1=66{Xw{>RzB6; z7BSwwJ{|2%(t)8{pmA<;U!h}fI=Mcb49`5ZubXu+(?u;?V%PG5s zb$Ix%ZiW53mf`oZV!22|DAbtnnmIvRS^B!6(P4Qall0>H^zPo?&5$`&RH#Cfunj-a z;a>9UqHt%S@K&8^HV;u4NtOgD4Jw!PN3h#OvM`}|nWKI-Q$jI!5;~08TPFiq0=ODi z%!DK&gW;4lLOZ|<=sok~RH&c@0}n2ZYZ;&99DRxF%@u4V`!NiJDMk92A+UvRg#5&@ ziP?sJ%VbF}Bf&OHuN%5`*ZvEbWcW1YfrL|c{l0no_+6!>DDm;zy+6^gW7fl@q;}WD zNGs!atyMFjTQ|gRf4@Z&V;>EPHSjh%)jN0HfgM_7m*uB|t8LG=*uuP58r@~^PW4_R znJg)Uqh70~M*pq)$k^L2E<>m+g- zcg@e!veKuc@#kp1W3z{^=Q*Kbz1I)@Eei+~XQ49cj_$HJCAiARu)7=0HElCTsfbVt zl$r|R%kqp~yK-a|PkEDg${ITMrS<9kFpV3B-b%)@u60^Y;}5-Cr&mt5=IV3ey1hNg z&4AeaiqTigzVO>+NUW4w}Flr(Q!}~s}_RP@>dWdr0S}&Abe}m4THdXMU&6i@a}P9S9zT=e3+x@ z^Mxopi`E!ckauw;Lg6tjJdO^HZAF~7vE?}9#gCh} zlMbfKsTvb>Uh2pJiie zQM4@2`O#S$@EsZu9#E|CHy9B95<=1d3Kdq_CKFR>Np#(3(E){aVE~m|>0C}6y}3Ad z=GI%qwJqlxb)L=jxg(O4Q=ok@Oeve(@s#w5XF4PZ*_3iM!;?=dcIMFi4a$drz0WCj z?v8>8u$6_7Nch%Vtwtg73C$83^hUfWII1($zK(?aPqYxSZzYOHm7q1lR@-lSFXRy^ z$aJR01S^(`te$yB5@gNbP?KPcHEtoZKivEE27%GWoZ)xNtLlW z8u^CvfKo%@n@SV+no!WqdCsS--Ev(tt4x8%mf%8PLIB*yFBqV3fGbtzYp72?V<)<` z;)Ugv<-0^=hMOj4_#I6l_!+kM3@f)TEApH641z$BdMFqj*?ID%t`eu zcVdayU`d7z)i9D>BHBiSQDXlYZEWq#GBiSPP91PTJpO+vFkDv~{hD0Ut)Qh(E7?+c zGpb{|p-VaTHO+VyX@XGz6BIFual{l_V8pL-ufU?!Uf^<|GB`h`bF;YKJ2ry)RGK<) z-5|G-h69|ln7-tWA#zb%K{95Ea@18X7J4tAF-)nFeCFPx_ia0JbY}nV%Jlew{pf+x zfXjV&!4+Day01C+&35h+-EnO0R)TPv>}S;BZ_tZo?u@80Uzd{y**oAtSDr$h;ul7> z;*bd&qbpUrK6f5Q4g7hw4$vfj}(N4++Efq>KD^^qh z<`)JLb1hC1r=i+hJZ1g3=yLsjGRx8ru1{;dTPrabl1};0!uUyYnIA3NUw`pg zg@2O0SOWT&|DHvcKgpH%U%fs_9_vYxKe{1FezY!0zT1~1Xa7Z#yp?Af%Sm$g*OTN8 z+}?MY7f8=gmBG z8-MB|{X8J!4^Vj*e z{#)Mt4nKYDIv!s9EI-}w*ZlRfJ5K=U23Gl&pZr0RjQ1qB^*v%!UH4ZfKE0CM@Zv|3 zO@8)<8}CSd_8{M6AA99!@~2-s_;S)e_3uBQeEQhE)XVfF z>;A*vKm9k!@(&mLlE>bVTzW%t{+3FTJa`JQMhb?0ZZL8Q<1xl=TA8^g3FMG`m0%)3^3#S;J*O(tXTTSuwAA`e+hs#*6NE^c zE31MKWTo#`LJK;F-tn)PA^>yzN(T-a7%PQa`MssuJ=a)m4#*M2W31k@0Y6_E(0Hp^ zWtgjF{)0;Ot*B@0yVRTVEHs6<+;GF2w2a)6aCv37C|SzVLlpCd%41e9KhOSjU;xqx zn*s|L^;j)N5b1JWpk3O+k;=+%vk+lSq>%u1VaB`YCubTj4Gj2BcCJmg#&)_IjhL7| z7z>j6(7qtLJe}vz9Lf5XE$fpIm(2Tn4rgfC&DYZctH=w>4!E~RBL+YHeyg$uTHKp{1$g0N1Vl+G1w#WGZ z^i*Kojx-yqi$Xe(IL-m^L?@#VW;fpmDU=us#gz&b6|Le#Z_Ll`-W_pzx6}b+Z^4bN zeS92B&MlXaRH7lfmb8oaRAV_s(i7c)Ht((e1ff^@Z`13#(MSQUwRM8;!Qj|pu^$kJ zL2Fy#%LSMyE}W&TP}N{a1V>3;v_r{C-4&+8iUFAC%zNz96>5=v1zjkp)WwaPrP(We zZu8z(ClT?b|2FmgPP30AiM0QjrmhAGGL7Bg_)40nV^jGQ1dk&)ED0DpkdTyhZVFu5 z&m@_W^SDT~5!&X$3~$uY?nC?_N)UlDjuYyxs)cFNIHk;Z3XbXsD#<^)MTRgHZL7S{ zKs_+oJSw@}6j%QfG=90v9%5{EG#=y@8k}VfYF)m~MW!OP&EzLDgep^1@D;8+%0*H% zF0>pqiIMX}2?2~{OMX?pQ7+%b^iX{mR7g%ViTw?p6Gigci8vG9wE|R8EJoOw2SK*U zfs-R|E|hikgUu#*WLl3V=FjZ?$Q3P&iy=q+t8Cvc2rAat>l>;bN4sm(U{yR8={lF97By zlMMuNV0SA^^Ua!4Ke_A{bp{q`lmIcvP0TY@95|@+V1dv0-<)bnlJ`V$A#_o784`2# z#(8WxwFCk!Q3PLrHy}{hYF_c`4UFYkVl@~@6y%R!3*K8>R(vS=vaG>dZ^c%|57RLL zadv7x;lR=_FtC-U(XzXl-dOOFzCo zZQ$3O8+scBtqpFgI@?I|pEhjeyplF^psC9#`^Ofv(2v^2$!i5=Av!Ft#+a#_;+l6x zR=NWVudWPTBd;Vunr-*{xUo$9Zx+i}a&ALQt)k|PxNOOp49@NU|s5cc&Hj@)%`F1@5kYeCEy`*)UY0FSxR5enZF}W1%_tvh)ca66pHEH zB$f;*C>j1D%(-2&&Jd;snLv+?lJnJMJ7abGJ?iCc@$(N2*}WC;452WG;sQfkM$SLV zknfv%A$3fU9y69i2%1Ec`Rhy~+bjH2IFt`>*e>mw`)tfFw zmk2h;3k;~FuITOZ6J+ zIHVev6^%(<(Zs z6HpAHQc2iJRn){5DO*!#cP28uuY>O!T;1N4aEGiQKW^z(T*W^%`nJA4S+WwFh|7nx zBp-0`trnhxBIVozM>fzqp?LfPJ}8e_)sBXonCU?;qjUTmo-`B;i!E5AFw;J}Q8hn4xG~PC|&y4td2^x zdmc1PU#gD%JRjemHc5@Pi=Bbv3oRQrj9o4%Thgt47ibC;We;=%4U3~ljZ?XKLD9+< zwcP6A5R0mU9|-cS(wiEfe5E?2a66z9|Di9HpK=Nq(sYEXeOQGHV!W7jNQ+XR2m)^P z+K7F>&vwHrP|fm&GEkZ2r7R_pV~#_W7%;2oQY<1y#(kM3GHOAy!K+F`b#P2I?pao1 zEf;TL*4iJDy9QN&2+C2PUQrwF&GsBgF~+H^@XvjxZuR=lH_GrJ?_H7ld>&xNOJo5O z++)U~%)zC>;7);@>EIrk3QToxk@j8c>+o}I(UvxyQSfD|a64zlkvn6JK+-c!IF~Y0 z%ve!!LEr^puVWJxBaklo)oj+-9Cnsw$**`-f+kL`IEb=%oEcR4u2{7-{!_P?b4>We z9%^2&IO1+YFN#t;%gTum-$3mZ+gX#ZgSV zh|I>Eyuv$D)Ja|Le#ha4H)igncCfMR@6A}l7oy55o}RTK`cMOc3a=-u4wcOk5S+)e zyr4x8HF4eq8l$ft3X0#>S{Eue;p%44n}k4}MISxP=mDQmTz`2^PyAV${PWD|@~Sz- z@x!ck#Z<{-gf43+v3($Sn92sGPpF)aSPA0Cx>a+|w5*t(Y2IIGF{yQ>;gL~<@ZfCR zE@=jcQhh(aDLUV--0lon%_U$c|K0nn<;65zsX&db0&%cM2TD0 zsxk<)SZD-t3$XN@o8yG010_oPq#?@mRhH@j4D@!djWFyEa}OtPeU zwbwDHfuP68I`5W6{yt!9;h#oGPIQNsZdC?@8XG687uDO`v@M@3}_ z$!H#R*@%*}YJSSZJf(otDOw3y!xF8ZbGM37htY$kBC3&3Oz099(uM8VKcGgGr;Lv< zo#GbCSCK+aEhS>HT(598y;r{HR&Z@FtVu4=r5bq@*&aWmY^(=cDg;b7+4W&|gH?z# zKsgc?(oze`Q_N&?mH-2OE4oYV-ffiVzql^#*>qB$VoFm%&0WxFt>0W}i_LPpFk}q9 zZfA{}N~mktN(1cP9Z$e1pQDe6tT9_onXXE{vDQ_s_V&_tq1oF)SaRqu6cQ${cO5&r z?+T`fbJS&bzIGF&az*1q(7s4QS$hEV-U$C#d_EPFqZBpag~Uln- z07LT%Ur5gvb(j{UXn|3;DX69-dooyGE61xvZ@+;hewpjO`7xwL1%T<)<-nm7@0SHvH?%~@z zNxFbZ@|_-I<^@x>aafIIgTaQXz9-Ga=*6k-wVph7mQ7p9l)J5zs@?8;u>gE+o?I<; zH>sROeP(+)xL9?DP$Vom!rZ+Z&%KQMQ^9ywN9bL4&{++x^|O|Tk<2Ga{;AVkW$)1C z=imN6N7HL({lEX1NGZhGRJ-8q!l>LAc?|pcPQNg8+n0uVD|;t&nAPq69x#B;^|hhl zUG~|`h49JqL&Mwcle^SSYOeLop)r5rFjf|pYWw21hsOM(IZN{V{?Orc%wF)Ry~yv? i39gek+n6Z=vQu75@k74cXRh)IxJL9Y{FqN)9{PV2gumDT literal 0 HcmV?d00001 diff --git a/.metadata/polymesh_mainnet/7003003.meta b/.metadata/polymesh_mainnet/7003003.meta new file mode 100644 index 0000000000000000000000000000000000000000..b3597fbf0cf71bf2abcf20e6d21552d39e54f1cf GIT binary patch literal 405204 zcmeFa50qqAwKsH5^_|Hbs6Yog?^WLGym#lL^S!FPnwy@`!A|Jpo0{&P=_cLNo&J-| zBr{gkRNbDgH`P@|-Kv>s3_57gpg|K28Wa>XXwaabJOu>>1qB5S3JMAe3L5mGK|vpD z@z(OU&!2nG{ZrLFlVn_7^}XlMKKtym&pvzav-ghItG?}LZ)MqWzf-QYyI!u= z-R<<+#Zs--?zei2^>^RPn8hsaJkg(iuk-GE&(WW3#9@rt_#Znk!m{?{R=2w2mHl16 z=j{Y_TU%{=Y_V1MuJBR)a<1B|@-a5X$6D=H%^T&i0OJ$2cFXVYcwK*#J8Rz7EOn39 zoo@S5qaJ@<^!r;|jatKN^`hlR>*!#No82)s3NR0_F?*&{Z8p7L`FyomMdyC36d&E{ zdR~r?AD7=5ce!dTng zT~UHL**vE3ve&q<-Sa2pzvWB!<{lGoFj+L1t#Yri<4y2v|2q4XDE!G*Ee+lK+JgmpMZO!u~P(%?FG1l3x z`rdOEA6um#K!QgFm$)_0c&^v(G;03GES{r5ZvdrB*-EF~+}-i~Z9OsNoob`i@_OTH zq9!$*)DYt@=GMg$w%97~m}~lh2LwzrsyG^F<5<}ZEFz2b_!YIV8uC@5^ayj*nnLj_ z{K?olOq4&s7B;%omS3$A$*)#1hE~sF&+?a4&0hGm+>xIXjT~goVjcAwy-BZ4cMNM)vmJ{)$ocnGw->tYekWG3=tMs*w)`G(mwO+g`CU~LFx%e2 zO6qx@#pXHxjjB@9ZwIw$6wvJ+eTW?bq`Ky^w{srcal6s6*yi;?iWc7jgnPB^R-;yJ z22ES+%q=2 zcC4|Tl~xlR*J7XH{HkiKu~Tk~w+Sf!kd2jm-@|JDHs>8x9NV7POBDShka@M!=vAB8 zAbZ`$`95(2;3C6cRuyaVdl|cFP$1FHAG7@IwpY8@X*Y8n!#@?YpuUwQpYsz9 z{E5*37-+K%@DGjfPb3oo>m9O6> zs!Xu_y4UM9J-H41Oo}kd)O8&_6ws@@H$cHZ?o)r4;Z-1;@fI4 zey^P<_Gir5=z3MZ-^JE4Zv{)ar(Py1yif(%-E4aPO3&*;8Z1H7>S27F7JosN^wg&^XcpfRt^YY2U-O#PUBdsF5SXrf zmndEovJ-aP8ufF|3TOioyL_9d;+h+uDrB*$#h(rYlEIblVGd-w#txvzS`U%iQ7;p{ zO|tB%Ev$@wIBBh|K;iD{gbXmw>iSBVg zTFpjIKsnjYn2?zu&qF#phWY9?T7ILp-mif}`xc+lM}TqzC#4NOsgD7R_!F}7v!#}U zsg$*x8nGJ>0;J>12DbXm=B_&vw0ol3XnJ*}mJn%qpoP^-JU2Yz^HQ;PlI~|;1>aNuhv*>KKyAA|>M+(SF=5sd&9qVF~ ziQ}9+k~v(T$oN=|j(exW`4PuI#?kh!PptDSABE`aGj@7VFTvERs@dEracG2iUR()J zjEu7hY+>@a$TEzb9n_%gklWca9{OeWsW$4eifx?jf<84l$pa8dPtI0bt#)sz-M-lG zP@l)E^_6Y|$1(JoTW%A}w^*GQ@6*!%#fc4n%NvfF0Xtw=sfU zUDU^kZfv7{(Sta!&GX`yZ0{D9FLfKe?Hvz%-(pQZ6aFbn;H+vKE~-t7b+~!ls5WJ} zLu_LH%67F6okkr3avocGx8ETV1X68rvsJx>rBOZK^dO0{x{0F50CDmj!@0=2VspDc zO@}sGhR66bLZPx;I$d5~ncG~NFVC;7t*n*jPtC5(&CiwB7ayO8u4UV7*BmDwA3xPT z(Qnmho}9=ywa!LK>YzG4HLpZl5mq_2R=2b})K#LgS675qM7VBlF6?;~v%p{l1PT@@IUBSp27qE71p1r&c z0**2uH5;RR#^6g-4J@};3YdzRGQpg%NJVpQUbKD!I-)wx;G#fEE8O}@ycKX9=e*~& z9MUhv^q&1v2nvC`8klv_8r`L8GJ>RMIyIqI_!2lQMTP zEr$*r+5lU7LZ}kX<+po1h==#wQ*YON*YBT)SPjnXHrn^l+B`z9?>XOZH0$?>3jPs6 z&HgZkam8Yxbh?S~k*exo~gDK+`%aa(9*9WCRP3gRjqTW+U$EpX9x8Q zZeA%`ATW=zt2`g#Zx8etsLWX3FKH}^B>*wo!K6Z6*mLp%3M?#%uVSDhEx4;{<5nOX z?{~2Zv)2N}i2WcZa@1QpHZ8I1R(D7p?6kL>eyiE8VS^9g!@J&gHKc3t2Z<%;MfdJA zdFV87)_^jo=%}Bnc}%@%w*aw0>Up7@8$x21bq8N3GEx*IaHCbkPJX8iO|h6CNoQDi z`eT8JP2fyS*17yPppE~=5UKd6ErRW&N%g~wt>~lAeKVJ5T?&pwfwtW*Y9(d4QID)(vcyaa!C`ZAajv{He+n|f zQ)Wj`Cpvmsbo8{H*3l?2orFgJnX#y`B8N=?TL@Il5V-tNvVTlzHY2G4ozlLD(FIG1 zM)z!1pQ6!%R_AJkZE^#!OsN1$h1F`Ko=xAx^Ei$6t4$J<=f!kl}}YUX^_k!3eO# zeslpFrz&5l1nmHbC2tExR&Y9~ff9hkS@B5r*-{jpP80QsI2&Cj1YuQz;Op5VKnhpP zZeeu9Dkd8C)uDcGVc}D}XjEe?_P3RNI_QBqba4LEeFQ23b}N^#DV;%dG(<&x3*WAdSFlK*+u7H|QI}BdTMA zmOp|~mZ4^;7NNQ8G`hQm)d+-YCI_Bx_8jzEvY(1H2&N(@S{%6`H>(kOU6*}HkK+Rv zho*rLSiCexQP_wyyypD{RHZ|XVta!6*6a@>Edo^8ByEwz9s3ZuvEjDmAzK5EW%s%O zR~n+hXUIJP&t}g?0f&G}o+;N3*_B8;YhJIrYbrRdpA2rzejZ0H4=3c-1t-!8u#8@u zCh1Y|TPRYl8KY0b4!-8Szu&-?h4pfx-AyoDi`~!p==pZL$=;Uz#_Zf2ItwZYWvSrs z1fL-cgsgQg56)RO>J(PdsbF6IVhe|)hVYh1Y>9b30d^qQF?;)HiBs2tS^AD}I-ygI z5W+OeU94A}eAS_HTBBHidiN4eaio%Igq;a)IZ=^~S6uddo+@b@fMje?u9M17GFAey zuoUci*p7UuOoMbEIeCv}zfo#7ouH(Y4AikmFHP(tIQNLAp|)|^80`dwji3@WzuCeu z2VdhI+?M^${yXTaMsydev(Rz2cLee`aGDZ)I4_7LMuuH_2R$ zEi*Ch7y!{f$Fg6Hbr1c7Xh%{=M?#>d*k#Y;XQehmK#~ez;Rc>jUx5G7C)g)a51~`O zmLF-Om^A6ongIKe{((5F+q`iY9HN2MNRlVL0#(gUgXDwkg*y{ zhv+sil6{G<2IjD6k-&`obG{lFy3Hc&#Z;hjqyqJNbL-+C=ueckf)#9vD7QjT<7jFT3a#a>pVMIU1h`yGpy1?qzkPwo-L7FMpN-r?> z4Tyai_N{$jU@kENG{y4)LHXa|WN4QrSQ;~oE#FCPcPOE}l0qooA4n*%FTl+!sR)>g zKo-Nn_oKw|3NZ9Tpc4Pjyh2FL{FMC^RqU^Qi~aoC2lQ&nfPOP@K(Q|v(5tCknp&@7 zuu5qSfWtugjO2q!T+$!kKzf zyf5QK-}kyPG)>W4vUkwI#LIISVo9iD{20v7y|O%r$G_#|@dc-+X>FZQM<-#nZtNW5 zd`t)obi^|CkNJfDF)#FwhxRoz)h5s9vBBU#+JH1?L21Cp)@yKq2D&CnaQuc>Ru9ZJ zd{4&a{_YYi1AX{GhVL`vIn-<>Ka4OX^}zeO@6Dk_NRKtNc^eI^UI*1#?AXIFl%8q# zyHcPb!U&r_z$V|2nsr%4}ev)eg`mjuidU6`rsfHf=&SJe3{-cBbr8n}fYm(~ok zVVmV-e>NK+bKMDzf|?eA7V-#1Z~LJgg-4z>d}E^ogS|}bJr;Y32fGmVF$q(|&lwbZ zTY9g#TAj|E3X?#kWnLh-J-yQ8Ul{m|ppyS`#4eq{?AxW&ScrCM39H4PdmQF$yR?qx z?a~|!*mh|Jc5Az|$Zo;&5$ut6=_GJtm)2mww@b?~+}owcV6V4Jn{f2BOB?XYv`de} z)zUt`j(Y<3@db7po^$Y$w2vQW@5J*A8^d#+-Hzwu><{pKANxZ*m*LuPAKzei;JL#7 z2+tDxV>};Y<9I&G?!J9`9AhOJQvx+c&@P})H=bInZ0^~ox-?Iuob*1u~j^m8RqTeJX=GL^K2cz z7uW`#i)<6mHTEc;OYAW`=h$gHSJ@dnH`(KOZm=itJju@Dd5WFG^D*}K;(3OZG13iI z!E>2aF(V~*9=}hq8lIc1j@emf9-gPz7M^qL0-kGZ8_!2r1J8N(7kDnSi+C=vCY~E? zhuQC2W-UBdSsTxJ*1>ayy&sr=oIzps@I3SJTx2~wS6Ls=HFgQl$Jk{&PqHh_UMjI& zJRfBr!1Fl!`|w<6PvW`8K8WWT_V?qt$o>I5H`rA?H`#|U;}5fc5YLnBAHwr7_7t9H z*oX0al>NhaF0p?E&kgo8o(t?Fcs|1ZQ9Re!KZfTfdj{5!4fav|KF$7d%*ZnPC-8fY zJ&Wfodk)W2?4QJQp8ZpJuCwRyEU}N_`8fNh@myyA3|xas>;*j6*vIi)W&bRmOYEP+ zYC6R}f#0+2lXyPP{&_qX*}s72Jo^-$C)ua*++_bEo+sG9gw|Hsi}=05KEv#lW%e(F zDjsJ43Z9R#m+)L?pT)Dp{#86rvVRTFGmwGp)p__5cw6#I|R+ByVIdwrID6VD~~ALDtF z{U>-n%)W)^BKtO;$Ju|1=L-AJnEiN(eFrqT&c2H`>+CTX| zT44VdC~cno2BThPzs2)0_J0HOkFfs-V|fgskG+1H{f=Ru+t1#WrhdRp9f((SN$t*v z7=pbwZg9O75*+?JoZeSXs;srP8+*!KoF5aW){Vv4hv(OnvGp!AF#?A#Y%YaJk1Ww4 z3Zd|k^!}!*O5-V1<8u)u-W)W@ks~(GS4y}%;`c&5+*+Hwn8_XfDvy|m*)j16H&}!X z4q78XF|B<{q%z+E76Qe7hRs3aqpv35b^@+$SpeNQ&X2Iux&a{@tXxJJdFR9s5+EDA z4=(nL!KItn!5?mXflw`^i8{QeUxigk`tmX{iVWn8_46obQvyrT8!(b-Z70*&!vb+H6GWcLm0SGI~`dL7&k znmfR7YbiU~5hvubxV03q2;1;UwiX#5FUqSeLgSavwZ;g`{wZ`E&IQ~CY>}@K&P1VN z@4YbOc|xlnF|osE77Bj1soZXa&Wj8$syhC5rz8Y}Y_U-oxczD>49c`R9EwkwP=pWw zYIqO9zyl4oFzALLrJLQNAZ6^ICqN2308CtI*R;#z&av;l@=AWzuiXra7Bh0nA+BT5o|zgtqRX1 z{DaHQ(%-VVD+Z@+%42i=ot<5F(B9;@chG{`T{S?aWVp|gRSa(I&Ib8Us>T#uIyj8t z%Zatp^1O5DUZ>vn{MMfl*$Tr8002s+Hdf|V9#EuwBYjXxU^|(sxZIdMrq~X+xV-Y1 z%6jr-jp?*8+LRfYlHaOL;Ta2OcK+1Nh6A6z=$%y9`nDPu9#W3{%>D>me0JKxJ1j5x z6jtIkS$mZKEo?cWOD7K-q%5Hv&kE8>v}cfk3xN=%3ae?1LIqqT=)8$XAkU! zq)P-TE<}(OErO#WyiKZ?u+1)V;0Z(Db@IFL%%ciE=(jC@Il^fZ;z<+hvLvHbC^HB4Ugvyd?C+E$FhF2+I5m=~R)FCiNFBVO2x!?&LV~w11^_C>mO@UhK^uAD zI7y@P#|AkpU+?JBm^e#&IbuI6{Wl3npJ*r*1%I73)#;H`P5 zKYkJ8^m{EGD|;whI)r=d#R3fN(4ZJGc`R!lB0SHrGr%H_3!0a)c1rw>UOCHrPnINC z&9$r(xN%BvjT?*O192S3oksqDg=6T1YkjbxfsP>iqvJ(r>Gd5yNMU5iIB4G=rBzRL z^Lu~hZj=16B-nw5Z1L*?-lEkn&lXWYRR`QXs1)w#(tJ^OUpChO_G9gHj!Ui7p;_5o znkU~Z&o6CZ7gzl!1lLD6e`UG4d)^Zo`kA5PhbSV=L=Q3Bej(u4(uyKP{v^oXFhMps zB1y1j%{*oW0w?ZQ5PRRy%tb+-B0folh&m7+vY$dVa2|s#1p<*m-dqa!Ru}GT6nUyai)CsR}+g`bdyU~z18O!3bp2aFc)k1G@UVen9+Dr4{ zbXrAY%J?WWH_|5`JA&~6txKPMG`o58I8Emr?C5k6mJaowGD%h*xad46MU$Jy>EOCU zfUuj#X;__a9;fN{@80(%&)hsm-#kat<;U>sdh;BuRWfv(F|<0t8TjTo8v3T2=V+YF zuV>}lJV)b}{NI(jiks)?o9E~hjr`4Xw6OoW6o2E~&GYNc^J{Mx4hT2R!8gspZ+^U= z>do`(&GYN^NZ~i_z!a-Ucob+eLi&l0OsrDbdeaU(z<9Jzzmc1E;HdwEp>v{unm6sh zURU^r!TaaU(GlD{zur8*-aNk!jUVaVJip#Nzur8*-gIY%E{lA}-|Tp`4IaeQ)A>0f zZp?_d!1(lxzBQu)>y2?0Y?OjUMO{m|quYr`BI7yfNs)LzF5(V%{T+_@3vg{k0F`)L zIz&-HG@R-cd27c<{Dmo0@^xUHy1sjEbxJb%2)>4%NIFzX;PWaYznFtakIpq@Fh%Y4 zMWHKIqABZnqj&v13C1yf;L-BX=o=16PI{-Mc+6$27ls0<9q8O8J?9eVNtEq>-Z2@t zM-`v<5$h!xMn`@Q@l@5pD67F-y0Lp(zP?8Wr$Q5X`-bUyXwI@;Jq4FF#DMVutPZTC z@3+C19Pu-8CqfQKc?An3;*EPcicTGr@y0=azh&c3rK?SHAAEgl zDkmo~PO=F1qkKKXRey{1Ed;9+m=z>U`U*h`%5B;}Yv3vBZfKC@u@nAgHxy>u`bIj; z(hWHkasNux5O>p7H5BUh+M57JHi8japPF|xdI*&n!cvLB zB5$lB^4ay_C66p2aOzDW=2q(yF~mdwlGOxuZlD|Q4z94Cmm&<(jN;Oi@Fn$&`rRe3 zmJdZ7a`k1_Iyv+HK1^r$em**_u9o5YB&9%85?N9(J3T(%t;*=p6YyU~f*oAR8s!e& z3S}yS->49S?Jk9*hMRjlU^Jfq+K}=9=`G@)aQmH;42qT=SvlOJaWnC~(uqO@JJ*5Y z;bTvp6+x#*WIb6_##w_O{@18X(5;LhN3V9OS16f>idIidzUy7Cc15}y`j>c45CAW> zvc`ZbWVwk&dFMG9`93~0B(I>61)kpFz+{i$;J6hgk~_!--0^jU5kj^OO1OhrNs2Rr zy2@C0axhy_$H@nnao}DYbZT@`VfWdj>TI$#wd0%cdh?QX9$>tZAzZ8;cR)u@U2MYbrFpHI^=;_-?2&61ui z`wmKeLDv=qyyWgL+m%!VLhUvHDfLU{0^G=u4FiN4QrviuCg}PcLNOwP4@qm-&?!w7 zSo!q2m?K{#&+_VU;eATUr?`a+T9i|Wi^XUcw=L*iotrz3p#E-b32}I>Bj~+q zv#h(U2sb>v`N+3~n%Z{1brG1sVnwKZ6}rDt7os*TF`40mO1{7E^*uNDFa?tagP92U zLIT|MQ5>?q2ujtrRzhBOQ8cJmMzEOOjdeMDg3=*-%9LvCE!NA#6a{UI8xS%j8VEvM zHm5ZOs_G!A3?&R3r+}bHVuln!si=LcbvTYfL|>(A{n$*ph(gl9T`3wpEhpd<*1&4G zaYWdoJGCnIE`Uvp4;TV0nn4(w-Aph#$o%UdlS0?|F;MVIs)TFwh{Wc*4&n~i zy!kHD29E9^pxTGPvFR0X!`?=zn#jKk?6)R&Vk#nd5L$C5PRUs(7PJshKoA9ce|zM( z4EF7(<^y=U^$djy6!5ECRB8;WJ5Y-6*2CbK9%9O2Ye1ZTArjmC>;>FmMG8j>%||zv zYapAXILDU)T=@gwAGKb?nrx`n1w~sf17ZE_nZzx&;vL7Qe zS+Mww-q_1NSZ!_l!&q8cT38ov*gLJK^&1DSf7C+A^c0c0Pp=8t5uAgNUtI;(}Us?yfzCaV~R;Cqg^FTWQZ$yNHjTSU6EZme$WZ-^9Q}StFsg# zLP#;l^Q*5j?sp~^Anah>=oZRI1ssv-7Qh~ce81hg8g`Fm(n(_K2A+@lJR8lmmxm-- zhMe8H;0I!=5#(o=+p)7yoXsL;YCgoy2Tf^r{Jac083vK~AZ|Dw>~r>^M6&_M<)e8B zK$`zDCb={8eu!u^L9acL-YCP0;*V1EGNrB@VeG>^NZdyo3`R6YDVzK_@gkXEuv6gX zfRt@~qVbb;l|`s5-aOC6!;YVRPgP3ABm_b4VIMdu{kcCeS(@patZ)WjhsE_ zT9fmL&4hp(A|=*G4ZO>vLL57kuT`BQ_BvlM+$TqA1oRNgRjd^~XdxLZS0utrn7d0J zdUYLuOL0+XbSU--L4=OdTSC^MssuRFEM3?}yrlkx3kZ02BSY9c7h+7MIgep1I}IEt z4SNqe60oMU+`Zj0#Ey?4F01~GOb(8*I-;P9{LLaG1s##zlx7t4s;wEL!rx7g5tKWOyeMj$q-~s*m(>yya>UO)56FQv+3FsqJD6DqbxdjjM@_EFjS@UWh0@6TMpA4o5Ti$1}wNlaL0mVcVzzr}656RDvr^+huA-zEhK>-nPaBmsvC^42T z($6Vdjq2=1Qq5=i=rN_<3np*e?+R)tf=_nQ_>j~ijHcAlB|6dpdHMyuM?!-VKA6#`v|%*9X);;05)5`io>CM1?bMsTdS2IaC79=h^l3w;;WL1n9f zS%y|nf`*K#_^}WUKxbP^1nn?!HgNFV{=OWZ);Nh{1jV8gnHfzGgt|$K{I?lnE;_+L zaR`LA4q8DVC@;@h1il)q@j}o@VM(TRmWa^?&-gr=;|S!-jQx}`Eg}vd4gwKGyHAX3cK)RwlW{OO3 zkS2MH-spej7oF{EPC}?dr6PX)P!OZ%O$)S}0-A`Y37rTUb6-h=%_u<3ThOHjk`ADC zfy^Lc>oDNV$%_Jaz<$vHj?#e2k&EDsK%fDHYee@V48{r@B?EAS=_YuK;;$1T%~2vM zj{)I9`$eb|Jd${$%3KKTRk3IR7aF8oN>2vyZK5&zRLAa=_@R?44eRw5`{liR4H7Kv z)vx5EYaVfsB&`^OWl{cU4;;JZ1Vq!KRrhPb*kb_;)!-q4Kth$%L^a$QldrCOy#x)L zaQzxVlFjm`&;mPT-$tq)IXAE~bjeaF1bpg1^J5*vFTyM7qn<$bl|4a^))nAS&9!Tg zcw0T8W=ll)GlBmt0t)NWB;);#b4ULTt?x5Z;zQ1J(H;(Wy((!kh;B8EGrGJ|m<>f% ztiQKfS4)WEsan^Ha#{mH^9u-Z+3S+Qw5u2H&=JL=DVzDxv-TH5CM-7&sXfJbRHkzT zb-YM=wq_OC(H}H6je8)LYB(f^LGBqy^4ML~xDlpMM{ySOD^@*)(Ij3e_78VMW{?nM zM>4?t6`YX#1j4=-hh;~!3jy~C zJY^a!_oy)t@NFD3!|-5i{r zU~LN&QzUBShN(j1()Wgv*IgMdvxY{hFjmO$mz7YKY;g|FH=2}~Q>EX0h`rseqjNQR z2&O8!S7h>=NQN}g+#>efXelIXM)Jcpr3x3s1$_y1;ukupgOVU5Y0YE?M>71GeE`o! z?H><vIq#?TsQjZthXVXU(9RPHua^fSfAc0M_NsDG|n80;khR;Q+ z32w~p&+v`NYtb47hG!4PYpf$iE4$5pMne&wBMb;QCq0dOh^LQ7v@TUS#E^@Q@d7@A zSYfCw;$i!RCv`s&_)a$4=jCv-Y`~Z{GyHT)ogssIhyASXEIz0UqCYvRujFO#<^aq$ z@e#;`bTl>l5s9ORpm!oztllOgB7L9>Gj>Dm_jgSjx|pc5VgmG%1&Zci$|N=aFj^W+ zG-EcIo6-a?B6mIZXMk494$#{&M1ngXfFDXVE?57kmeej1W7I#oocDDuv zPrJqbAp3KY*-3{iw)+j*lU4k8X&)>?NUVFv@d~XJj(tiBpp(XZ84^6OdrH0R6BT)c zr3)C9b6SAwO6^(q9?@F&9@Q8fjFL2pnFi;Z=9|^i@U^7FC)S*eH(3PYO5V3&-d_ij_+A8NwuGp5W)~52k>xC_Xe@zMdgGzsC?H)bLvMN-C7H z0Dai`>kb=UV=*hTM0r(D1*G%+;2v^e6udZzOWstB5b|K$pO(14ma+VieOF>E8voZk zn%`gdVB{=FwzZ6udlcc-7l)^z8^lhAuj>4xN*hh=;UV_N_7Br%2w4*#X11X`1ILlw zm`5r1x$B=0F$T#3q}~dK6WTkmroz4iow!;QQV_^#8@?9~9O}6JwfIo=1cu#44s`Cv z-{e86{@o?1i&_%Nh&S3|VI}6%RG1lC(w#V##MYQfYK*x5QX^&@f!z=7dq@(da0fA_ zP5d-8nC7x`&&rBAM>CW|JJ&RzKS|D0kf%8qQgoi)zt2Gh?L1M@qmy(vbU<|}QfeWE zq;4fD*n=eAbW#0JF;!v%QZlM;(V-?o;Y&5{da+T7y1EXX7Q(sNQOB}?0qSDZaH>l zp5^Sxb895mC`>{yf&GlLpQTqnR;9^T9&%*Hh}(`B9~+z9Twh$Z*e_tJ6PexaM?!5j zI=gskJ^B(}CX4Hfr$i1oN0dBz?>P)EyEMOOv0p+>C|=$>d5(zW#NtW3y-UBPq839Z zNEC;xVVL?~($6vR^H-6aanPQ|v()_>W%1vy(?=^89Al*+6Od3c*=_@w^2Alyzz=}>ov@mfqYC%DRV zRJ{{2g*yJ|ibU$T)>@>bzjWONPA~^xo>!%mMv1Y%*#qNj{R>1W~I``#1H zkc%lzI}B)7wI~UVD8^nJ6e#J+G9XfZIZGFbfIs(Ke(@U zqVNa>D4aUL-kPNhFDgc}*=-URf+C^TZ3tb!VuoK;A0q>r3yYwJP$QP>-qs@-KBI~& zI|j5mr3kIfCuwb7(%O6`HKRoqP|`{bOqpv;_Q;Z9PfO?0>$3`5v1so0|ht1X8RPHjF7ot}_Y zq0S;{3F<>dmW$yBI>z&3W=SOYXg|d#RZ*nGYs1xyrI;tl<=2ZKrjewYMLJB0TY_{IC5fb9e9E0#3`(ejYZ6G8Jr^}Ik=wu5y+@1z`7>kV?srH)tf!8@ zNM%Ey^q;-z73Z$P1YAL7kAvsl7_qWSxuoVHmGUvGLc9pX@1}Lud zLJu3W0Ww;(2{j|F)Aid!;vY|;YC9Ld66Ar-~ank-Y>veguFDOfiy zpHqLpk{9NrGTqFa5X)`_zx1-c$`Nb_YtSCJuGQkSxm1LMuNm4bF3nPS`N0gI5R6@} z}*|k<6%0I9;Wq zcpk1YwTm5SGg3TAN9SgPuZrgmOf+a9hkX?6H>^nvImbI4l|j3VJI*k8LEYj%@W63t zUt)%Y%CdDVk)U76W+WeW*-iYE7}2FQ$`zY8M4J9d5M{ z5{4WTZpDzf{f!8a)gd5ivVS2RL=|O9Y$1($!IjDb6L8@&INXT#y$s)`ldoA#1ka*o zahQO6qUo(r)#h9SvBFbZb~QK;cfh%6Rs@$c2JWtk&n67un+bkwpmW6j>7HSgo2zbs_I^%7&jyy2iNz>6`1aT4T4ANQ9^j+ zWwc@79C&@;s7q`E(34L1`*E%sykHN;CeffNgSH7-$k<(Pz-Ogr>Q)T|>UJn1phl};vuCtq5< zUrwXNq9dSkBE1&es{;qIANCXFsJ4Ch^$r2#D-SONra}P~AH@yals}WcDKCU%R#qF- zpbaI<=WsI;2V1%$30ox86aHs2h@BxArg{UN%#!xG+M}G^sB5|Wv)DW{pUbe%r2{z; zbO=MJ>IfSgpAOy&%gh%*oWXaYf9K=EW2@_b6;8nfXM~EN-2B2`9mX3Rn^^Q=nFS(x zFr9EdCYBGjerM4yosYjJtD|3P?XGND>@Ojs3RKY%o)lB4LD$h!zKyW_qQ9tOWmxRX zK=KA|EPFlu4)O-t1I`ZNI^bSIh}Y%z6nVxYsz!C&n1aWFWC0U2VMBll-R)e(+5oMa{_xgkxae+^Z9_G`F+BZ4~@(Yl0*!E4v(H z-=;BqH^aW0-uyIlj3VkuSum{$F{hG%@_F2Ogi?~Oxud5Ea#@2s*Ms4nO&ssw9yk06fF;Y_Vexx7wG_z!^|~hrw*}eXvsc^@a%f1ydPr zbCN3``nv^pIGfU@Vc6#H2reH4aN^7ZEAIDbl%L749}Lj|B&AR1EY5<;`FzQ1UFdBO zIsxj{YJcB605(M(@?@$gJz|9}&Yj=w;hKhd*jo+GdL;G8Y6bKxwu=aTL*U=fUiu>l z=ka>bp1(%W(Mb~^>CLDTFINe)dP@9KC(?+jQpjO+z&-_l<1G|A3UmroMcPCh7ocR^ z58zrKnX$h`uxcPFI+bb&w_L6afbfc`9g9JDrQlYe3{Hh;=)p9)MA^?mqY{Sn5b|*e zq{adC71t0Ra&%fA0P>5eAfsieIn?+C^hIdBTG(1hK{`4}jmUlhJJoDk>CH=W-7r4F zCuU2Eka1OdspLQ*O$6A`ExM7}73yl~2Q^#L|6(%aC5@@slJ-l3nLlxu33Qt5zzClq zzOJ1C$S!ffM)*0^yYfmSXS9GS+cn>P*+dG;3fFR|#0A;5YoRK=>lZLEB|!|-tsb=J zf-bc%vXJPaFb5rSyIY?Ff&)q&q*PBs^DS1Bx`9#$yF40lNS6(j3dx~2G=Rg8hA2jp zT!A9ZC?*f)Qi7)vO_|Ige?Vo#`ydd z`I9p&EYr;Zd?0SP|1fws%Kc(kZwb=R$OC# zM9NYYk_4nT9Z)Qtxt>+Ls%)@=GI*8dXnZF2;diiL5~}kdt`QHudZhs2>z6|Y84P4> z0pb>Ij^uZyj6*=`>Sn8xe9zgWJeD8~kaYE$Uh~@B3)NQR1HwxlmcOwTs2aN@LH#N+ z8NW_W#;@gM{CWtS`4D*|k&e=GFfeW?tbR*s;ZmrLWbC&?+Km?F_Jmev;tU?wc4}7w zk{rN5un$>DB{YcYcO)PDO@`q=@W-nlH9j)fUSTj(Aj>r09~eP9zvb-E$Y3jG?mYBg z?G&wgPTMaNx5Pr0dMj8ebmOQ`A&=IGw=j0w2+zxxWGrV!)Q0SnQ0nUKz>ytC73TvC zT!`BZWYOKXZtor(ZA4TH^cvg_DmrVkk2<)d4BD&zoq|JwzGo4cWXN`KRBZ0Dod@+5zc7>2L==(4Mj^{=`Od``$f7 zT8iD&Mr*5GCZX@H5k4(HE#egklNds6 zn|zS{!U#V`LzoqRimDjL;k^NfbQT-OU3*uL0~BkaK$ti(!jA0SQqcgNOswVxag>_5 zZ-m{qcQb0{iBHo0Io3fyNCYzvEy&ImHiGlj+Qs{UX(h1qkG==kx_`u!r5+qf$Wjji z3~YP!&jC2zjAV<-DAQ?l{NzD+b#(!|XS<7VRn1kDSnc)^D>uRF10G`RK)L6`s?O@- zs_#%`Vw1t0J5si@qHzK0g(Hr6W03+tOCK8?TOpyqPl6&UxL-lB^9U+hkp*zhRJX}h zv5x8p?Gs;)m#3rlCAu?D#|mmTUVa950T4W@+EnHyC#C^n^CSGUECYXaia4fYKw%1& zNB9^}C2icnoWW%k8r-dT-`nI2~`L6Aby+@$wKh`%m|;< zFyh!!g@@yJN`z!{i(IAF;WDbAG@unsc2Rb%#pjzNnUkhu* zkgF;i4xt)Q-HyvSY7a)gYC*XEB7zg7u|x|mqXCJeYLn(icZ#2hvO%^Na!m5ng`dO< zGpOp^2oDlJi8?HkdzKaoBo>HMKs!Z^mjo>6K{;1l*K`k`Ihq(fP63JxjE^a-8h5Pc)R&}@FejYW3tpQCo)Ra2`nx1X85qfeM zodkHZa!`W=%t6$$MoZlI>-~pK$*mV*ey`FAk&3mxd!LB zVZ#{}u^kOQ$PVP5C$g6rzR-*$eLYa^jZ%LT#yU?NBFdE&shlU>bPyet0+uyu+hX_x z7YyM6Sb`J+*xjDeoX)qZHKB1qbniwxNKh5ufs)vOLl*_VG!b+#_aY%k>r!!MlTA~k zZnP~o3+;Av9sBSX2VsGB^=vJj0vR_N@i^t8b;N0`Y*SNoqOmd9Rl z!XDr4+!y5nqCVtKCQu@KmqMFqt+*bnyaKH3xt9uh5hE2)xcjOk$i}F28a5kXZ2cmb zBf>ZK29b)*C#eh)H;7^+Vn<&b%Ke7WqP_XT6m7y+5PJ+QWd!J_bSu7W>2)uq=Yb{@ zD#cC+G1LXrA{dc7pp@8d!%`ch{=eh_7fa+ez~|hp>AX z3Q#;iru_uIM)z~+fhtqnz)+xio>^~IJN|YXE++_3oZ?MXg^Ev?!I>gER;O9=RV_(( zvg&n>g5V6BSMw5z=ei%HYEnIJAkDxzM_&s+2gktR)OStmXE@8hfo_xYQLV8| z3j^&gsd&7uWyafwkrochJJ9>~c41vML)gP{j6PAII|NEuBu^FnCuyh`(>gJW*b^IG zZM#L9X>uso>>xKqom|j>{)kpv!l!kz;l-y%BD(U;q^^7uN^&%}nbzDi__m?5jcfbQ zq}7S3Z0%7Bu3@nvN6?7--h)9X99EkV(*Zy@m)2ZN3CMFuI0VHDvaF#cokcMK3UejZ?~n%0*of}*@WI(WcPrZK`AX?3RcE-QsUI%mPX zH58e6?y^TIV|HL2&Xcw*NT5()YzHk{NM4g;?~hCq1kJd6NL5Z#pJ3S?VfYUK zA9%Ao!ag*TJ*KT3`to+t)R8|H#1$NL%j7ja6O@sx@W^%ue;!!#)k(0kPZB&2~%Hb5`W2FoBBFcA# ze&Le!wZR=n?KC9{3ssYFfD!!_`LxJg*XBQEt zcc(4naGWdza4u{}K`71uHwlS9jtb+p)WO`(p&QX;EY=iU$(-PDK|R4yj*>2k>v2S( z>Y`VSNT0kL5dcHSwlLtFvfUo$R3HEn>XUP7tdyBo^&u~1K_!dx6LNf0o<*dZLjI3x z7~It@h?bPMZ`hCYT^8sINE8AWyvJp5)YP`N5g-m>c3&?VZ^?Zljz+~ph3qHMi5a|p z^u00wd)rl{+{Bf!aMsXGR}8A|{)Q?IN7RtoPl9!|FY77YXv^I(n874pj5=c3W1kld zfM7%}rGPb%hqT-TL(227k($1gpf-32i2RwUjbD}193KHpEh>OVg2zY4a%k*T*+P6U zaG*8PpS}?z6LY4KE>;PQHVR4vcTPc_yue6gd_$d%KRl8eg{`P}0NiGb3rG?1mVJc8 zw2zK3{0G79wGWT5=hB-DL+>OwIJX@zY!P&EKro3QF?Q&Z5sTIMu@OFc>coamGXKZY zA;`A2da?|J+2H1=!AE(vQTIQt^j>I8=*d1#1N`I&`{dw8$3$5=MQF#>Pg7wKGww@6 z!P9Hk+RgHo=OyLVZ0>~Tt*2auHB{fsdP;~=sv!prDIU}YRf+A$ot|xb;I6d>yuH(! z`^*T3T;s1%X{5$mr3R^;T3F4^0~E*^xRwQ%+=NZv04QTkqNr1oW!)Qic>T;sYDlhd zXo#h!k2m_?&xQvGtwTz=vYrbMT5x)%(CtZO5g!xTGQ1GL%6~PxVlI|PX|I|DZ*Pkga?7UL3>iQg|*n+T|v5W zc~pMAfF7`3BP1Gd)*!~U5X7fTFiO2t03_rsXbK^AtKMUYYCk9V_2?-3Lga*QB@XDM z_`%)Gk?fpeXylhCt|vs74>0EkWNF`N(T-Rk9} zL2_?kEb9;fW1J{LVCdW-+T9bHB?B{B=avv6lbASQiCFvL$ilt@+mA#1 zj0G24AIYxRH{p=F)B5ro7m&7-vX_W4gf|s%UmoOrqS3@X4=6AbCs#wl3O$T( zv39tq=ivIWtQbNEV-Ct!iR}yP`o8WmU5Lk>9muxXZ4 zTsWp=zQAB)v*hSlg->b0Y90w_y6jf#YFLrFHI|&fv+tfZ5CZv38zJ|>kKSfCjk@wA z8Ps<>ksu^Szr>H_Hn}dAwoa2feB1s##}pv$MAUCSa94f1wV1kTO77u@Ykbg_r3w}u zSwO_WC~V_QqlAv-Y6}URo4eOQY@^l-VSRXp$p%8AQ-oG8Agyx{rd7!>PF#lh0aTER z*$QG3hr|>T_|XWz681`)e?nv*kS=%7>!08ZN2teQhd)MK>v@}vNO0t*V9aocZ6!24 z!sS>s$BOUI;PL^Y1?C}5kzr0;uvIA~)o(BeM9-uMwS{fTdp6o?P7EyWZ*{!Gx+0q( zUh7HAmN^dhs?j9Uy|*bt6dfjZUxz&NPWvkZ#Tl~;C1l{>@jV`zdL9_6D5dlrfsRe+ ze-x(?n8-w&5Zn8`VPC=9YevN8Lml+jCh z3Og?%%BIGdqNlpasPm# zkAHK|w)HV49L~2Rs)z3;oddp$hM|1;?w)PW2!`0{>2nY1Vl9;$&!@h@>GG88H zKZtY*=`ik(fHKtOkM`_xI=Z=AMdR)UALXM<^7~55VB7HRn9{FBadO5mE28U3SwM<8 ziSHRUBfponaA=|hNyz^RjqYb7>}PvIorUm#+xvmOeU#^92(;Ldo6BP!cB;e&VWNZV zXdGrz0wp6`k&!wnd(GX9LRs${N_}T#YYWQh2Gp`MDrlRwQA7{Xd`|DNfKdj)iWSH~ zcDU$u4|AT|5Wk=zm7d+EjvFCM44oG)=TRVvTFNck+%#RDBLQz8`TKqehZBu zD@Om?;3?Cx?H2}_%!8U4c!n^6_|*t^G}K5Uq~c4^8>t^dEV--<87l4}LKiCo%)9Kx zJaAy@WrAO0Q>7 z2eOB`Z12X5>jql7en~9-S0n6KgIGFNi{wbgQbGX9z$7S+Z@;GdCn&knA^rr#q0sx4 zWfa5Tj_@bd!5|+5-YYsGfzUO8U+>v}qyu|QUCTnCKNSleyXkKuyYBCjyYBBWT9l)I zEc?5et6&NkKDS`1Otnwv{b2Z_d%5Zv?7E|%#Cs1|a@hB_>a-yEmh>S>n!}%!rQ=#+MFCep2z8BpT(WZt{m0WAKzEmAI*5Q>nF45e;|DJXM? z#qLNS-IC@YMu_ma1S4R4^cb%CA$1{~soGruaVQb8RpZ;rW$2sz?MBB!S_GblO|6Fg z9ELXlBMDa29*yBYuCUQ+bDV>Na2xNLBK%B?2@AT}tDzVWaiBo4ckUlELm7BB-95o> zcj5~=U!$;~Vyz#xf^)tY7p-{E_~FRhem5Bt3{gaBcJH#X$XFp<7BDeM)86DROqCHWmU& zno}^75Fv|o>-o)A1DR!vD2D>H_~>SgR>2we z9>dx$&xd~;wfIKZ3Mm>@W;*L>A@_I)VGx#v6OE((XI5bK$ectdUJLQ=wXjNwd*MOls?VXP}*Wi>sj zE@H~yIxYMZW0|;IisK9`n;UNu=-?9AiEp{WU_MhEdG(k}p(!zg-g{Tcxjhd=c+KK*Hr& z4k9EV0ZPlwWZ|nD0uyTJ<#){)m{X^31tf#?O40hI#bO#~Z? zMb7G%8tpzVWYRYo@qv$1VK_vk+8V58PzOb1q>6k)T+apfo4~ZB^fPk`8&aeTDmSo; z(^Nd!x|RK+x!Pdj6%n7*fP+mg7&TiQy31_^Yf5Zu0fxZUBXdZFlkz86Akp-|PdEft!imjP-{7<}bqU7>kf3SQ%+3kP0*)VofSAU7k=}TF*-b zrsMDKoNqTtOrWhQYz7+{w1@|@uK;~Y_#hf4ZWs{1#)8mZ8C#RfzP0b|24-TRNj-N1 zH6(@f!&VljmxyF;`eh%nY~zp<6TGQlBoi+33GjttdQmI5M4Euk=rOx2`7xF5QV2x5&{AP{9F(l!#i z8dVWS6HzQ9xfxRvF|r3EO{ai3I=X~wP*ASqP6+uDN8g;}%1{Ut<*)f_x4BDpl~SZN zK~-2fLPkVdhVd1;me*)mkpyNeuvA#=uwi0gY~ISws1r6tX7~Hu-Q+PlyGkM2=^Ko0 z=lfk>T-i#vH{>Oa- z+M9Gu>FW*=-e0(kAPuCTq5Vzt?M{o1w0ffsRq?mdy4GDnQzUL~3tx&B+>B@dF2X!v zpg|+#elkxVkXh6E;_&8>&suDvq9Na%TI_i{K|^fBx|5gazQ6@iP2rO`N#gKdb<&!p z-8h6a3S*vHmTSlwgm}xk?R9o1@j<43b?>C)TSKmn9I#F!-Z=S+kak2*7_=+M>D)w& z%=*TatWNHlQ0KtlDw#^0Zw=}2puMVEmZmC-D~4FH$5vOC&MeQbFFfFgbMuXK;#jtV zP!;E)S&A@okmJl|3)fXW3X3FY%3_Z|O{Xj_8qeYj__O_UC}R*=Q&o`U3Hm~$JA~T= z*~3JPNMn73l*3&QxxY3pAWUc7t!%8!tvujtwn)uH{@HZt7&LbyQSnGb%UnrV5Gq2) zylG`mE8e4(HD#exOfjpEO`hzw`yHifj;GEEwZaf9U@|A7W#O~Jwc1xtIc0{X!Xtnng`+mftSvrYhqS)if(k}iIws(3>=NZ*#;jC!M=tdf$ z5?Ow(4ODD$QBb433cv$%_|NwZIF6+e;AQxK7=+1((9~P7h%j>$5`jRQ7%R;3O8`#H zm;gk0E8v`?ZSh^|@vLlF8FD}rm7A8f}z!p3hf~cS~lHG^^AZZ;T0Au#{L7fA% zf}$%KIdvFaMZ0D(Tv*wj1_i?uqmopmL$cn%qq8#vCM1x-wnlR#+fnB@f#@5VC;m(* z8*~L1Pq`>Lx&#MY<$Awb-Ngn66YE%vhT?oZO+XC{#KFau?00n2;(n02=|<<$3hXlI zsSHuGLb7WGtgb8m5|Wg>`V`>##f9F`1stvMVkpQ*dzULIrT17JVDzhgA$TpH)RgEJ+09sc8LfLK6Ws!ywOr1GR(5=y?hLaWzO?=61n~;1qu?~AmXdKE-#*kutB%Tajc6$XZ@U5R3w(V z^0Si`T-`9GQPWd(UV4D=90Y7Nu0ZRAQWO%#Wx01b$Zh2@c?q}Of~N3tbyxaQ1*oDm zFRtOrXfEVC?@{nEB8c8L?zsxtk8Zxe$D5>5e3+~FUbR^c##eFk`)lA+R!d=~&clJ?1gsf59pca4ZR{+=cL>5mfqVhBRG z!0p9O|mo~L{akx`8X3rTUr`UIqT3fr@zP^n>ycUUC+C~h+ViIyc&5e-2j(VZrM zrCEhSYFKd$_&;dq<7j*)iN=7Yv|PleNDEJ6i_Nd~`BT_q#h}G>24Q-jB@L|gx@VYq zNvogM%rk*OBWz3U*+K0Cu)hYQfP^4Q(!e#8Ik9VjRpf|Z6O6+8L}I~-a&oyCh@uq>$xW2ZGTR!xem#uOgN) z>`50ruY)6s1HPh8F3rY8Fb^CS1)0++9)yVh#B$f9COkO;D|CSqoW2XuNR~bC)vDO` zDNzLJ3HlV_2rbe|grG#xD3Ife4E2ZmMIn9dE4qmeM zVV*=FP5^)tmtDj8L5if$)PLe=KVgb2Ex&<4$Wt^6;=CQG_n8cuozw0LJ1}es?R(63T6~u7crbOR^ zc6xid)M?NRX=cSdi)ZnUu?9Rrgi82PXyCza;RGLf~3$_DQA3Wat)QX(8zhuR( zuHlZWnEA;*GnA1xR<#B5u?Vq$BT1njxw%Vdcm&6 zXAmtatVC)n>x;3aMVbKgi1n)5rVT^utCr9}aJf`5p+qFb;OY!JmkIoXgIeO!^1u(( z43BrPhK(KkjAwrw0TqxS&L72p7cS*O`&jp2vJ$Zyz(K`L36hi#WFp)k{Su$PxpR+n zP`?KisWIG^CC2hZg}Ni|CjT-<69y2J7M9c^-&Z0UmM{(uQpKS8q;XwWVpI z0TykLLJH9YYLgFI*=My@Rgoe^9i!k%-SQ41KQ+o7EbEkIkE=`VCage6;v~*9Sy;1i zSU_Ci4}nhSHC@YBP}^nwlg{O&TRv{WbB@N-`g!AL74{h~XOjf_}8h0>5!wCq6GmabSP zauxdN$h?Ep91Gnx4s}ujKnv}b=g#SwJ%MG=q!=3Z@QEMuk=WP!u*Iiz&2@SK8^;}D zsvrdm4j66_Te{_9h&6MT!__C6cBgg2($2-Cra5Sr1b#3P7^tyNIXiu1<)YYEPzm@| z2o#7624kG`p;1(X+gPHGo>MFca&L7JTl;dgivuu*tV9yVUzph-+u~Li&dFte7dzU{ z0}p^-!AbfdBhH1sND?>sj#zhb(gmwS64n|ZgLKzbUFoAG5=p2@_le?!aRMbt)(i0E zj;}Yd1;3&2S=QlH_`NdFigzYxGz8b3TP0SqL7W|Ty+BPApAP<| zJ0F2=^c3<529a%GWP2sd&lj}i70I;i6GNu5c1pXiNdv#RvMqS}oV z2R>xk`{J`n#yO^4Mab`DUEmacC$QK_{L)?O6A;7ccnY_ZiFs^!Q0LTk;gG~WY}s>u zr`$q#{<2;Verz2gdG8ch6ok7bIUinxqYTnwKs*GU2iLGB{Ql11uXDlIvj6@*&dl(~ zPqe{4vQHF@2}-c+<1M-horU*V`pA*i9apt<{PjdXX)aLN z1tbz2$2t@aM%n$WAOIwrRQyda8z6jISpga!kZ*ADm! z^Z(NT;NU3xjFpWHQpud7bVw5-r-NXQaJsoDO!M?3)Dp4y zA1nD;=g*z>g4q7RAu6*K1S)G?fDH#gRjBofI6zj`D`+JcsrXoJl{F-lv-($=HgxP9 zWyD&lUBuYqAdZaQ!3V)8_BGme>TPjYZ$a@an$e<(-0mb?@c}&}$1`*+MFLZ4w=gZ_ zL*joHTQGU`!M^n<fSj?_xB^9`{4vS1sEpL#*cPZo#kvoU-o`~^pjF*~@O+Vxz`?gs z7^Fmw4CFelUK4FeRLRy|+YmMr7DdIiC=n;5jRO zP7q;$mYyJ=vd}W7Eyr7|7Y8m!L8l&sPNnyU01+IIu%{xybr<3Ddt|Z?d~3vAFo8ZL z`jFlQVk)U=DN3c{f9_`mFSFR^@GsceB>Murm}Gw$=Pe>*pFb%AQ9LG+d61_B&yz1p zS%#kDIr#yM3<(vJF9BZ}HxPaQ%NBnMt`OR*1s4zzqET((-SMwlfG5|2zO~x?s>MlDQ4B6P2d@AcLa{>7-j!w8SJOuthX)LkPm93@$aBI0 zPtkyb4`0VMJ$2@hqaxl;B}8Jtw67pBSfXL#O8LmX9&wj(67DjNaF_XJ`Z#33kR`$T zFvUCzIKEBNR~-Lh3u52CHk^-!C?8E=T)qhrF8*fUg_|t)w#$-+X4KX;cV5vB-O7en zXkG6qW0$*NHTqia_heGdW)`J@z79Pi-5Eu-+c*U0 z;I62$TjJOZ868^`3?tCl$$$!&D#8JWe5Zt(@x8GH*5Fr(m+LGOE>PF4TDOeBv zjrL-Tv{62efOhHsW$$f3E4!|<;j_nAvL=xexgEE1E4SB){8e(LV~sn`H&$hTqmjlQ zy&28OBaLIf_I&qV=^l-4E#0f!AI~T_;6MTiIN*Q-DWs4<3<nt-bfz=l)2VAC2w23T-mF=bZhs_F8MN|0NS=C$wOs%F1cM zs9afp$Vl?xbuXf+njwqKiDkYGQH~7$TwfqZC)whN|S z(~C@%_d;z%Onh^lM7z8P9%|{*n2!RhfQn!R(6rf{TQRWTUJY}y0HYJ+=q3@2XUXdO~Fs6 z>*kk5jfSv@ORD+ruxvp`r#=E{&>1xwr>-WY7Ygpdi^GR>u@rq6%>ExjHowe`MZe4qQaf5hlpl=Ytwv$Bw3-YeYI1m~wTiAI{PHgiN(R** ze&mtkk4{g!pZ}8-h;jZ47W>Qqjm=uKF|>^T=C_VZ{dc!{M#>e4%+1Eqc_5sc3tVFw zl>9Wgfv1lTnB1D_gNoDo*a?)h{Md={$eaL3NDc*=s;|#X&FT-FR2mo5EV3V<<&O`?{Xi zL~u}J*+a5tbXQ+`Mt5NkM{?2KeVGyzeH~ZbJ$R4BCHlG?qyzBiQaza$SVP|%v8zWR ziavA7{t>(op)yyv>s)kSpLss}Tl)GD7TmJ00|v<1=rb$fFX^jLNAKNjm7QyWfH7ll zq2>;fVi4>;WLDtfOX@Hy>Gjmyksx@~#c1I8{|ib8&ml5nFV@!!&@W((MVtkec0v9f znNdD~ysaR4pd0x-a~dq-%yx}o z|3Mi9>h#x5tI_y%lgebD^0VUstxPJt4@JjGH2CY0z96!E)miRSGr-`vdcxGO0^Dhp z7i)UW516yzpNb=o_Lobn+UHCGd~-Krq9LIXFp5~$d0`Gz|KS8!#0r%%+e@H6Uh&{`>a zh}qHUU#b>TYm}9-6pX%lmnmJL7hG?6d)w3Jgq%BSeBupQMZ+S|^<+%7&C3h8Ai10= z2`D2JaRqL7foH+l=novQCjT1?*t;OAKuqBoNmxFN_c%6y-bzCb#&Y`Fv%=>N(7XmGT0+xydUTM8ut3D;9g(MQVj;)YZl&1w5&o0q= zmF%o;6sj~Y0&bup7$9{15{pd6&zeO#5n(x$Q2`JJdSEpnZ38BoB~TW6ZsV|7nG8ZS z!9%!aHi&Ow0z%8P6{-f}C~-U3L9+6#G=)6c*G;&a@8E?4!^#QGV|@b)W%EngkUcZ` zWzOKoj{A8^Qr2iXrHKj5T!(;o*ARK4^GWnr-w^d=tC5UI#Aan}SckCR4-9J?N;4!4 zX3cD0bj(bkSUr?98_hU%77n86X(ta1t7R4@X!|K-2USGDRhtv0?e!T?ij6|o7lu`; zJz<8e$Q8}@4F>BThHiysb+AIf*t~MJrrmF&GkszNXu!z^m2+khCShn?VA=NWfN$A8 z8!`~NNV4IZ$_YrB)?*gCncU5pLcnk)v4OVT zW}NQ^W_o76#lDIlS-4jib$Ag(TW><>z6bN@-PvQY0@6Ga7)zV9%Pm(U)N;3S zj8fL};#@{dx+C|>viQr%DwMEoA*m1yxxX1jh9@}U(w;R(B zJyfo(HDXw6QC}Dvi7T~-7(717pC4LnRW{2HX%y#VB3YRajdN7U3c`O>w~YDIVxJGv zXYd*De`~wLd6FB1NgejGYVGQ1P}3xeW+1GpEaA){62TT-GIDtdFU=(1u}vS?9C)VK zros0h(%a@w`2~B6Y?sjA+C}YK2d~&;-V(PaYVX^9$oTMdR{zNILm-pPAVG4h4a<1C zNDVE1dqFzj6&xZsH94!=$=z`ZFSns~nra-R53KH-DlXD%*xG{W5FNG9bN4N({{FPA zrQHV)$U@x(4os&JqT0k~S?7{<*TB1!AA`T1#&m3g_BBan7Z^yN+~S4miaRZwKv9K* z(k9w};a*b*)p!ZcpX1)4Ky;PcFa2q&1+yE?Tw~&bbKk}JF&{Dv|ImD;tdTv_)AW!s ztmIT4AtTj-^Su|x-{MSyaJZkUW!By03m)Y3A>sC1v?7cy@Rr_KPf-&XjD{aI(WO40 zs4WpNiOV`k)qrEiV0^D2RMRDAQ>dS{F)!3MQM>yqaL>Wx448#Pj_zjiGtd}=C)eWW zZR8)(b2kl8fsw#?B~i-Gik;fcwED8MUd7Rm_Kz|J^?euOh;`a!;^H*0g8|b_1czWj z$&h=3Ol}nj0$U{oyv0&#ar7#K&=3u?z^`N~|>at0}s%v+gl+4}dX;@g%$%HL1sNNd=RLZjnGGMuM z6$lc42X_fNIWnH+MS7&b7hMdU%3W%>bi>>j^dF!#qM+S!vW7GPw8D{2b-1d~^cIj(nBD9lBPJz*Fy50ej!eDw z1m4KEwn-U!gx&TRL0ET$F$>w&b5`Vckw_@xuHnF4h_#M{4YsPDbX-`O=%yY6+)}0bj9No3s=@Kj%(&}-p(Pu*%BdGRIU?%~LwWQ!sckqVEY?!P4 zRN^BE?>KSEJi)QkGZWJCFjba8cL(oM1{+skCND9aj)x_7ft1}44ORa6w~b^I!K-*g zM!DnOSCz}w@IXL)4Y-OpT7Rkm1+^^wW6OKv=#5=<-vxL{2B4t$@-7Wg!WXejtZLNNwCM=qAG=ECw^h!nH) z{K>=cs|L+J5J6|3JUo?){@vI|4^Lf=FyrN3VpX6o9z&t;rjsimkV(>^a(2cg68YVA z?{rch)Vt@aIcWO+Qk6u_!7LRM{?WgCw>aoemCZFR;(ZZkKzyct}P`* zqiH6fUBL#k)eb|e0nn~1z z?D-01b`?8mr(C8kv!;I|_IOzeM!CS_?-}Fv8AZ>$D9J8X>zpwY(E7yI>r; z%YnzMP>E1FvUy?sK&c|Rs|6}t-fAm#;y&=qrDw$V8K>iVcYYJ!ODqiT%toukBuF=a zI)behT6BvB6rniYa~)i_s9d+`a>ryBP{HAAh{isepV9b}$0u>KL4%>Ng^K`cAxDgEkN+)iUTC zeqA)|J#)vHJoFfSbBlASpm!`*EKCVQRyL>iOiVW$e?_(5#^@6iPal)b*hD zCku@~JGs|?D8Za&c({fcP3QmLKZ!qfBLBbs25kwiqJkIY6g+L9X#k?>YWXock;|ik zTR>;VNlICP@wb6Er~Pop^I!*)ykO~LRrwv5d4pX2qI_&j*>O1t1!5>l90_G$-TYEa$XXlt7TC% zfJZ;!fi#j$uxgl2(w|OWyckRTu>B1x81m8gjXR8uD)1r+S7N64t5a&jCwC0L3hSMm ztY;EfmrK;JWEMyF88N3?X`Kek?2SXtSG;J$CQs{bz{Aiq5Ii2y=`ocLe%)upM!5gW zXRNrwilPhlYATM$(YGl??QZD=5f|wqDaIWd?XZep`-bSv(r#{K(VVgNW=IL?4L$)g zG>aDr^sT+tS!lU-xlVXFJ9*LaJj!{i3EVo#S_QNW^(~;p$H35*5mrcn#L?=6`U}cs zNyLGvhId$cg<&u)&(LMAO5>Hh3eAAOlui&kpEZjByX&YJnBjj*sJB^lH$zGuoo(9s za^vPS-c@BzogUWEP4NR(bUYG*;kx8*sUtUmxQ%eEs_j5&vG$f)azEKq9t;(Ym2)Ds zfn@^k!A&K=9AVhGH)riZsaQvz3exj$h#iXZ4cRmAdK}0F0CF7?2o#X*C*|bxge`wU zXH=3Kv^4PRbEs6*T4$Lb3}DF&8i@NRpjONC8?Y1#e~ig!C1=mjsVhu;6Ver}DbPgz z?P)#>ztALQe-D=Bsd|L zxP$6k6ht9dNTC$O`VEXeeSEemC&Ad?rypi4+^72nclo;0t#t|lJZfwCdu-1Z_1ATQBoF3vymBm_sD1I|$xSYV_mDm95FCYZV*X`IwWFr_9dS>_n z#-s530ILu;kxPvYfHDeP@NEP~vXC5-nq8M

    wb|3&&^2ENqy<-X`kDM70U)Z95H z>Hw-n!(nl}(S*;JQDnBZ>C0wJl}|+YA$%a{)PyEXqw)>=#2^Q4_knHqF%C@CDrv7Y z&g9(f7=c1hg(vDOhccas4!O%WRss7O8X!N5a1_PGB~bB4i?HN$@ZyxqN#!>g*?(GKov>(0fZ4k_fg9)`j#=U1b^fI zXgsrCwKC!=gI&1!P+^xZwp_>F%Z7TE-N;zmBFB9+s4Y2%N{1n~yFuGGfqpynGNgA; zPDDSyL%3|`#pGZme>uY>JXmDyA(X?BmFOW1P_c14IxzMO6DCTJ2Ali_V~(lzK(~Md z_o4t+(5Y?VaRh75tg}1bXC4GUqHn-qN>OUhf<@_-l4>aO7Hh`=BOu3!txq%;2`>E^ z#tHDP>nPpN_A7drg01!dDTx+fsw-^0fIvV+bEFpwF1s`KGS?l)9x>GM;V2~KWH3>^ zq~dB-Ke!w|VH1FkAfuz*Hj#+0kuW5s^~FjlFPiGu6{;&$T0+J%@cR+Aomo~<7BL%= zgGWoIY5`4`{tSLV+>cZ`kb6;T@Zv!tpN!+L&0Ox)|AF_ym618LpXLe=J82&cnNqKu z;{!pJ6rV5=R7^K@Jc=tsSuk>0_3CJ2!WzYM)EI3jy9ev-AAA$;EiRJOq)fLCWUd1( z>-hxwIoYwQTs#C^EU1rtfrV9t3?(=Px3=v9jHPCl9#0_@5PGvNxtBECzT`V|uPq`a zTGeoGRIsZ9M0Lz^yh6?UQz)|Hs88g9Xkh3~n9S`Bf#r)+!qKN(d*tL;G|WK`gQEOL z^OADbh@NM+w{GJe&AojwnS=otno-wbX(aIcDLl1#o>~UY{pr2VbRs8&X5|*#i&pG= zDTAFN_Jtx5?5?}suOC2r1vzBkW{BqTlHOuBva~kbH>Z>qM5mx?+VIr=!2xJYw22EQ zWf$;iQ?y(x{jdn79?}Y{Bq2C|11TT4wFp;LSR5O-12yzY=Zx}Fpdsg>y`H+VRuGbL zWP`xwZe%lZQ|ZRLvtyr>3l>_&gEaMNi4e5=>sc(**~BjNOvIx#pf`& z!~Z?zzbjX{vHA4`vqTE6o?Qrf$fQ&V%|NrqJPx*TkelOLjE^(c!I8%23lS{E0!U}aI(3a=m{^29(wMo#WZ;&<}AGj4XGmyWDkh+o>{)@S*r ztOm6&k?zAM-=8Agcqr0Myboo%QdXwx6xQh{&^Ti&#>t&645m$rYrEk;XK=x!ZZ3vH zfNepz$HnNZ<2pFx*c!6s8{1H2Ngx*~H6=@`Fnm1OS*b0%Yc0#QL%C6r#!|zv~kCh zW>;}E6$tUuN8u6|PrKtps*HyGs7>A#7G=d1UE*7I2nsUThK@inu5F8=;nHNm)yF@v zU$w!Qg^()PgI2u8&6^!$LKlp0VH!f{J(DnLHVMTEsW5=JM+7F}0_p^8oC;ZQ=pyC- zC8^q-%95E~Q_G3P<3E{~(@66sMB2w3J=C@)t=N7G#G*n#i-^_6FCB)ZV|=CYH8TNw zu_N2)?!g~ISIKnik@#FJ-Ib|u_YkKk60Ksi5fT}hhnCqM3od2tI84qXkR&;b$dLm3@-LY-aD$C^%85peKAey&`GYvRyw>Qu@V^RvMkZ#YC%)N|*jUP+ZhU=>!8LyDPUpvtmLUchS*OWu_Qk$A0N zH8Xq#p=cRH2}94?Cm}!c^OAKao!J}4n-7C!ICYKplDjnnlJ4UqA5V79BSco~mLOJ; z)`fP?87y0E6@IWq4#Dr$KZLswi)>#wC=ud6l@l*iarHel_AL%-T`O4LLgO^~2%>9w z*LE2n%aeRNh5@J{QS8)mC@#d`ulVa6e4#PN(_OIWqQk0bGcX;<6=BmVyW)dR-0MJ} z?}mdo=>d2U1uX%D#^3ds@9^4Cw9BmOx}~h&nc2``+Ob#A>jAR@*tOYh=n_gsDd{m+&gc39v%3yqg}^c_>NZzjJS_3; zL);amqYmadst1JYGi$W?-H9Jw63T1GJ2Zcy!$`R!gn0x^csh*E^pw&_CmXwXJv7mFWqUwVT*VOSY)aUlc`p8pv+rTZ2vHBkT z)<=HO7yY1bsO&>PaHVY_)<&Bf<9uzs0*^yW%kDnGu{ds-i6wwrJbUARHK-qjk1`JY zlVoWH@;dZIuP6Vz&kUV?2*Q)=aX9PeHw)T}18J>m^nYS;1tECq;2ryu{srJDLd0K00 z!Udtd%-GN`hp&iT6VDLr$KZ>i(cyhu93C&HE>+znl9Um)_FZp^=NFV1pbhzZ1~-v7 zf>Yo6ymecrk^@|df0*WKTGbxOu!8lZ4N_-9_-p(0)I9KX^4P(q;JlzSY*O7NV zB~~vNX5k;t;F#x;z>696h=+2|yCe2>O!atA;nffu8qwY9yBSPq#MeTu-5ZoQ7h}=9D@HoEK@35}WAxj(ufZs>S>^=@yuz<^W_dIYoLn)B zVp!EDI+pthVWRwwc;7?cv9y`0mYZ|Jr{-~)l@lGpGBK$1_n-!hKIax-1mU>M!11p@ zRz|WfGTQY-fKf;`lZAvY#VaYB3>2#9cQl8vWMh;qI;k-Q89zv+MlglyIpCuzufPU# zR;@G=plEF|(eDnR+mkgRiT{U)sUgTP!F&~NVT{8nDqA%z99I03hf&`h5GHG`HxR0f z_qN;YKUuUG&i#sqYiCIfRS0gEcDVormgy`#;P-9Fv)ML!20!o3z1Ds3Hf)_2<5cF; z-^;DYk7=;8BKAz1rWyTy?kVGGNQjKl_vE=Mo6;Bv17DMVS9en~d`OT{O%v!KS1m&m z3(XVpsdjlW8p%mwgrAI?;3z$$L~8L}CB*2y+;;^m;0GykV}ZS7^qqJrRC1y}&@5VE z|HLn5#r9Hiz$usmL9)^-7FP`7=d|KnBl^SKKU-n|ZX&Qw@+G7UuUc0H2U1&UV0Df+ z_%{2cYE`Za>rWz5Py~QRl+XQmv2=~)bArr1n}QH>dAP)}cBW}?pm^zYshqh5BntTc z+?FA{(q-Thl0Hf}WS>C=iVa8RmsEOj_E)L!61+tQAjBoSCNk$3ittn#zLrzw^XMa} z8qHrU&M*&z;u3}{$^djz@E&#-f^*)s6 zTAJV{=ned7b2HuyWjh84C3T2J$a4pyk3O1P(Lb_GI)171BT5SN;Z?8j)*j8hM9A{G z2I+X2GBt|EuXYY$zYpCC59EH%afpnbw1q4JgbA-vo`yfp+nzuDk5npt+86z_Z>U>% zyw!@1NyB+GM$s5pqy!=&GM7d*OD=U*Z#O5)F#RB6mceP_va_#;AuX<0zKa)){;6+p z%7zWdlwnvg$~;H81vHc>(gma|DQIwJqaa-hkQpccJ7gwwiDLgp680koH!#XB0`+mW zGBQkY@~&X+2J%>t-44CER&_=_oxnzaN(jmh-eEda)|z@3eHSuR5xKBD%`}0xa||dQ zI!G|p=1zRlg}v&2G!d^2pu0u_nSoLhfu-GIa8JE9uSp+}x?C_TD9QV{wh$Xiuh48~ zI7MaMeGuFxR`NuqZ2luE(dwc2KegYdbQnuUpJE18rkYtG7+hI}p>h!x;jl8*v| zlt$TFKOh==sE9~P0TgjoYz>SXUW2gh+t$h}2O8(W&MzCrUNSZiu_Ec~)pyw13 zU!1}P1mh#VD|dgKKMOsK{0EqEuW_$H^^;&1ahiY;Y94d3ME?pUJIV+^qXsTms1X`P zpkR^^JKWIg`5itd@e2STZPQH1yA~?Emx{~CxxeuGm($0}% zkD6JH=dx&^!vp*zSc^Z4pl)$d@C13S*i9Aj=>_ey$6Ja~s9Avj7?5)AexKuw0*UHx zrJJ(L5Z_5p!HH2YD_})LOBariuI@zU#Jg?sj05~TK)Aib?e%-Ov zS)o+LdhAJ>2|@!+F;#3Qyfl@D@h={lHB6A}2!I_`flQwb$P_$AiOznl@1}!8colk6 z38OuvgYHWJ35F12TFF>!B&vbO>6b1{!lGB4M=}Qv7{nCPp|m3>yk*_Yqy#zmWxOpz zp=JO-k?R~M70_dre?uO!U4Sx#`S#v;()9@Fl(q!hfhu;xX>7P6^F-q+nsq5i5uK}V zWr@NJ0?o2NPw*8N435_EiBcU*JzAp}$L}VHL46cDbjt|O7_tAFMbij+ z*wV4kEo&G(twr1rslmcY%8~;^AUILGR53Z;~6Xx=BrB!XW>R^JkM*U;B)TvtO#>qp|-H^3C zh=@;CCaL4eP9C`c%?Bmii0CGwnc46Oi4`9&%Jx`Pwqdquck7751AOy^O= z@%&St`ImzPN|#B4RSiV*OSMgutZ1NBj=g?SP_fVa^dQ&NF=eo#qkxlJiM=r(p5&tc zIA}O^P8zK01HkBHZ3ETbOPhXqx#*V%jnN%*25b6YwB5O;5M=+^XZnsDAiv*j_F$cZ z(J9+lIe^@M^_hP>NEBZl+-V-;ItT0H4YMxuGJPK1xp zIKEh_qEKEPC6xOQ_LlCLGFZ`l(ac<}j%GA42vCpWIlbO*{^3ADlbtYF%^w7-fjElh zin-`}w`(;zVX&G%jE0sf+Ys%3(0{O64`&JHy+0aVLU*9`+GeGei~gbiV6`4URj`7O zL=%u~n>F-*MZ64T+kW$dgT#nnvS1Y-jYgN(Hj;7+zU5r>uLleVKUJ`T(P(TrX*RVN z4n)@j<{9Z+!5SXG8W_-rHf?Lb#ry6&SiY6c6|CX^i3XROz{SZs&DReS4=_nE>mNm^ zYK%hPtvbq@&E9#ivXh%Bn13u9xzwz%MlNg*cOIEFbn$1uKX{t=_NXOLrcuypU@3cFJHy4@LQz0dpcu63lu$+BmbxK2I=$*%)%swU!W53^@GVod>IF_MSUfBhncDJ?*Tw=Byyy zf_ILcg3=%7=bTE-t%`*f7LG ze3A1>wT22c*FD1Xgl1jq#KQ89>P|Wc60zG8sm#dBp;yv=1b>VFD7&}sV{MG=L+A&< z%dj}RHD>vB{n}?UJ-~f2%u?+VsM~^=7xBs9(_liKz=jJTvq*f5e9xm$JkJekpgjsd zuskv9{Ag6lQ^st-Il7vhW_@Pn#>+o61oQFe$k6x0{W28E);HF}E_qae-<2W%ZCSFP z#U6t27kZSidi_OPEzSrUqcoc094gI@*xGo$M3NbTv2XKV`^-!1u04aGCe##^Mwv4U zkE3x1NLsM<@#v2EdyM{tEHt<*Gho19h-N5qtYXm6(U&oT&zg}}RU|>6_T=oQ+@Y*i zxrstX2(aK_;1^QJ!j8g}1Q)+7J})f}CPCS80-A9T?dHl8_n|lp0xiT}#+BfdkX4RR z7~w%sU@H9*aX;{#3v^JDh!Z0=3a{}igtoF;gjNBLCd~?#rlo-uzkm(SJtVqmLfMLIAn0p!=jk>`Yz9C!pV8Y@$DpMlTR^m;7PcXhAx=WjxqK171%_g1(m@X!C zZWrUf#uD^IHEd8|ij%hh7pA2r3;I^Nxz!R&wBbG+PEhqM1*5;e<+(*jTu>|qgl4-UzA^CIU2WqyaL2Q4gQvkz82CU zmH}02^`a#jJsIs(kEC79U%y&m|4PqKZ^a?y9xxR1;N?Yh4%QM!jwx-M|&FiLmJCkPxy z>1I1Z97gF%ZDt?Xdl;pwDF}yAy6;Yu?k^85U5Az~S5y4Z(q+uhYORJC;X_N;p{1){ zhqb1|Hg#y}V!sq`6F#(bF-Q0PVd?tMLrWJ^{SWie5A)GAnf5Rroz9T8Aiv+)aIAM! z({B&+(aX_cKKfxkI(%t|`RKN680-AoiW2lODqIfp(K7)u#fx2%+7B&V?~bMGzYZ;3 zhnB8GOILfO%Auv}Fs3Uxv~(TDbRkm8hC}`a#B}}lp{484(uL}Uhm{v?fyYBj*P*40 z1+iHBOeWTUpO+qq@9|?NA~O+Ghwtk*=PqnBdvGQwERRxn!)LXd z6EjHMDl!FTUuQOtT@=%r?5r+x&wZ00TiHN)de?yu{W;JUA=_XD*&j$zk%pA0^v_mF zYt0tYx9|sR6OYID+Nsj5*gQzMi#Z>635?fWGLHtSGAL!|mp+LX^37}UmpD$ad5%(( z%_Gsuw&DmLqj;~BxzsEjBm)OXgc)8$t;=p-xwCWmI>=UXz-aH&ndUJeZEw3hZ7-9v z=Q0s{6kgBU=39Qx+_GCi=G;(_wCL7D04&K)NRvJ2~|>!0b) zlOJ>4J{QWx@oW;{o?wUF-Gd!V&Ojbbw}92wI2iweC+IiA7eQi3HP*_XHo+0^yXHxX zzcy7lGCYY-wrX`W34tvEl_ywyhNEGFA{Jhhe$jUIe1^EqbqkrfzAS%_c zbSJ*3y<6o??1h}bLWp>{toJ&BrQ3+Fbvu&6iOe&x@KVQJLJpsH!>Z@Uo(qJG%j1%|@42ktrW}>~RHTJ2J9abd4(3s^ zB3XRS;NRFpq1;~VcP_5q+gLkyGVzpM*EZ`lq32~QGbetf#_d6H-IKa`9I-es$aI3>@~>UM@S)t_ z+}b6z@2MRkD^@Tq{8CrHjc`^jDcj8GqJAqD3X_ZVHpiOv$X2&{~YVNey<6 zNo!pjEEi>SSfYbPhS0qXb!|8)(ihMU1!}^o7RirM%f+u)OTfI00vf{d?0unyHS{HR z#)?t>#tr7g?=7{th+i4KzQEhrIig@ELG2$jd#tzyjO^4p*Q(c(>e>#2( zZzuRK+=G_&pqDL*V4)xo8cdRW$zAqD2jq)Iz}AY3hMm0k1NEj(q<E3N}b>A_d3_Tsjv08E_X(OPnfqo;26^e3du4;PRkGSB1^s-&rrNREW2 zK>okqGh1Cjzr^Cv8cP;Lf(db6x@=YOE4D!3p)}hi6sHE&Jy+!4#mgvl%8nxZV;qQ! z-&@tp6a8~s7vg$rrTsNg*saz`zRM1d(t|}cbW{oAc0z#D)(o=5>RE@X9nGUGp8sqw zJYPVUzbjSHBZg&CKnJo9>$=gGvOA|ba_%YPiofE5K`msd8RwCoyoW%O=E&ebKoZ!7 z(9u_@n(Z;xX>CRKBq@z1+a=uIfyJ~^D}%JkAV*kFUxXSxnzo)!^;#AQ{)uth@&&+0_s@H zhC$zC&34PMWt4FPsrR18Eqt$dwbI-u*GpFmdLm#RB33w~HZ2R^C9)_oOZzkQzLYZA zWNKZ&9>acmzJ`9&VkIX~754y#RDRdBQTkllXjNYT2Wx=!6&Fj_Kmk}ap3KRE;`pqQ z)z&739pRX?QLl71X7M_Ej%X?=1c-L>9fLPewHhD3SVEI6^wc?Ho-59Q(M?Zx?*20E zjMmr#3{xhDwvAv@7W>?SE9<~Z6gb0xFlmYWRbuJHIgVEHpMjepqq=&5EiGTbA;UljG*1 z7@|N&C?P4Qh$FYqN>vMgI7JwClNKn#Wzg~o?#z`<=#*<`+1^-vHFyj3VSwD-ozS01!t=it=^`q+a1wnnT@;qjrb+I3DIa*IChumzIitiYS=-zgDj-|9|?CWD!+HZ(1w4LMr}6` z+FVO180^ypb*}qF*(I!+^1+r0g*uD z;OXge3yTXYaJGsE_`IGA*=i|YH7OKH^H0w=Gdz$984 z)~oR`;f!dr_@+BB+yW`GCLm2PN{_QZS$BkS^xneKw&S^RNo#46^;FZch6HB(=4Ad8 zsxXkEMIyu@*(3EjfRj<-wuwhsW>&Naa*6$Fk9SV}_1MK^avUGaN#a8h7HpGR@(gsZ z^=ctWzALX_K0G8yF#j0d`U1S_*>$oWWy0geE5Ggv%rE?L?-?lovTgwMVezrhOM|k@lD}wk2ZsWZFwe?qu z?RC`I`9Q9PPq6J~y#Z77nd&)f2I&G%h+-=Zh}B8w9*5U)U)AdO^qY~T zqz)OX8GUf%F6g6p+e+EH0G(oJ2~~tS#CvMHC%|^sl0vmsfRxpU22Z^41b^U(sZ0lL z8rP;2^TrEMFv`g~>}-r?+1DYAqIz|y&SLY?y@rT~^6Ogb9TJ3uIDs(hz*@1p!v2+C zrK(4B6PBhrD-?65XHgb>6yvlM%{vC$DnUPo5K_GY^YazT&}q^M^(7cGV2;D~L>v)g zP4c!MMM8GS87fuiAaGk%AlqQgP7D=U9N~%R21ScVmP%&e^@BIx8}?4(UQH@jHk#97 z%X5%Ut`gMIT_+bzC#bdGHJ&?(IM})@qJfJHLQ$NbWp#Ji2Z}vIf1zl4 zv08l#9AK2@xachfY!(!e@G5* zc+}8vUJe_G9DN0^5jQP8T7wDQC9`yfYdAJ;Tw|6> zb=;xgJB?{7<)VezsU3e-1aDXi0MvTE2Xdt8A%<5A*6n6N5V_tMFf*P|_!}$WPjOl` zhcA?)jt&3T#9dg$jv8^n@yML*Xyk5K3}sMoe%vE|Y*~!|84HS|1!%ZM|AJ0lbe0xb ziZ{wzON4(pW>^CZYF1gS)zJ}-R<_y$=zTz_!CYyz*IHdYYDpO)!_&@)0!NH+Yq7PV z0Yd_-GB<)T>*9cG#K*ZjEEKV&dY{pHMo6wE&8rEnwBmD?ka?FN(gN2RB#Rv&%yx6* zPaT!>;bolMC4(h9D}?MvZa=`!Nqx@4g?j}vIb9D}s0QJTay5~M(G2G7^(O8e3`Ew( z8u=Db_Bh&k?spI?)r9>Q%>KgIULYEe5ur)bd{1A%Z;!lvQQp9LcXb3bY(qNHWP#nz z_83QR5g6@`KL-ffBfy_65%g9P;MHRn^1vv;@WmXHXLS;E;>1Au8^I_fjWV(>^`D%-fxYcm$dY#IrmZ96%g3kij=0-BOV$%GrTOBu?uqt->>t0el>R zPSj09*aQ~6{JL7s;rB}oBsSuj66Vkgm9-b3Sweuhdsma_Jrnw}oNR)plBsz{Z!ycBH7wW=?PxM{o5j|IQTqMi4K&L7 ze%?83ph)rTfO4Rvo?nq)pGOas>HMPfgVsR_Jg`|H-4^f!Se8_wy+DklzgV3=BKZT( z>HM_dLsbEBL!7Q%6U~ZpC(yT!6Y-ZA&nXrI1GzWOh<2fML|6`+vk(EG9*UJ5W(VT? zef{Q{IeC6zd*-x8bVw`-f=uLfzkoeoKL@Qp7+s7S_xGC#3ebK3?@3jIBe0l1FSPeRt!#|8W}GsncIAX zEp#iQX&-R6!OXafAO%Svgm8}5HkiHR!bQ8iq!{PVFs3KNnjr@WXJf1c{dF{Vym^rp zk*!2E0xvt#V#r+yhssEbarB6FN%{#qnyU}TgV_25t(xrSR5=XWXbCCe_7_z`;umVP z6;YT{fYU-HC?{O@u*F|Q&}R8 zo>g;#H$QPKU_w;H3{GGe8f+SB z_YpBmj|-B|<<9k#D?mToV6>}X8+$Ja${ziJTq@SCX6eS10}Qm+>F7REUb-MXNM`JXsTC60rrj_x}GR;C0(cp#pbo3a8o6Q&J7>B`NJ?YZv2Nh09ccr65 z^@fTS6;RlK>vC-q;aH>~?hf3V^y?7@sU_Y?30;#;ds!~@1n>ZBBvsbUbH)XQ#*l*G z1Od47WC=utyFMmE#5zOWYmUKnML8t?{+?gG*TmvKCTiK)c6X8$TH2fSS^@HV_o7^u)^JM@5o z@l|=2m$q*3{sdo?J-B%GLB4#ZRot2#xwKKf;N4;!o zdAURRuG&n4?Qg)hRsc?0VHLJO4|n7zxKxFgvt5u*LK0xSaakpo$$m3oGlfN-{=LDU z%xbz^IItf~a26Ya4Ho|&=n(s{0XG%Hdn_4AAKjPy`y<~n&Tklp8RS-WP4U%rX~}2hji+TrOa- z;1*)jAf7f5%eS`iIRtnu+c%fxm*@|2TSot>1`zHI7fTZgkZ@LLFr@~V0?tF#{bJjg z5Gm(K?NnDGB&*y-VXjW^^0$>a_COIBvqRkNjpS$PXUM*6!w&xtIUAlExHrI)n1=?& zQ|$aOjn%Rna#&i7S5#UgCKj&1yi%{ys@{89V}Mj+qkuS>MprjcKKFI=q#s9CwFWn% zFnF~p$%N#hDGqtOwthYsZ}t;4C%iM|#f7!fHj;L@ef%rrpZ6cT-?;wI>HB#}OVAsa zR}UzR@S~*Zmj;@X5)_Tym-zi#xVd7_e-$K*YiI3)Iox_xci|x`N zUkk~y|Fu)ofkoT#txU$btAC&^&1SyCESDSg&Ip4Hn&D+J(jj5z82&|nMKm_&wSwqK zG-6-RA(1EjG`b_wL?8TocYhQedA2XQr+@H7W4i#mLURM+M`djcycnhn&|1Ss7(}^f zzznobM$x_eY$&>KkJKRBF8jiE4*5mHW)RcXwz1qnkV7sSHZ08&4J)I?a-;jNXFO0> zcD$jE@gBII@eoVVHXwd!U*Y)mj0lu&8xg;>k2sl0!W!yG!Wxn!tmFNI9y`?M-jRJZ zK-pdheZUNn-XB452pm8k$3KBA@Ke{;r_6|WEGDOoQkiy(|Oki?<+J3f3( z7$!s}@G6d5jPEnEq$7|MLbT~VN8?&%%6t=<{DJ`vF#ROZsjbX#Q#tcoX|qB zyq@0fppK*K2h1f%iPr%c%^?%nip}Xm4OCNHGfn0Y2)j+0ZGK@MY6H)d zLx7)Fst_caJKM;qK@y49B9Pl!{4n`3;kB)X)FOJyY$3;ss;nYKssX#jNH$R!!Q5+% zt_+ufOO$%C$0IIeOitl7J34fzaB#T<{kZM;@R-L3TF%mA#}RWk6y&ZCO<DFy_ZIPwKyE zG#XvwO*=g;-ocfcwX-3kc&W9zSy^KlCHV*X#;rp5{bkO)3Bx;0wAb_PXl1Jak*rcp zzGci?GYea|xbesJ4RX$=@;2dYt~Ayt$m~4YZ{C@i)p{?@oq6~3bqyRn+CTUVFGM#? zI{YAHk6{Y{+=zc^Aj8%le&mtkk9xR7kEQI|!nlK751vEw1muhrD8j#3TNB&;fH@of zSrDc@+i$+hQdVbz7njJ*nGbsw_rBCAJIy$?^DWlFeH>ne8S*D69Js}0kTZSel=7|% z{87FK4jhG=!&OK-d(npdS{{OqXG65=R_%sluz}1pk@^7XidqML6)u^P_~4VYGg$Hz z>xPxgNl~&WB-Ei98*{NZ3eIz{S5?gbQi7~+;%<@%vmg*X61k_SYW*{*O2_oa}|dH zHL-h)_5TTlS(A>~IPk@o!yWNu6rZ-4JeTY#77^G0UIRz*#yv*NZ8lERmU*J2uO>}= z@1qg@PxzDETt#Af0l}wO+ozz- z%5DmJd33&hWa=?<9s}$C<+`+?Z=S=5_+&+|Coj&PpI@4VIKknYJNYXmgcdZ#oMo35 zMSr^d|ffVxvBM2a?kjzh#B|zgQ~WuQUT1^qWL4o5{3sDIAMr!rdL4R zLwU1w1sPvg#;v9HDT0AQDa|&NIIO5EVZ3V_H6)u`*~bDwA>t12MVvQGnNC_x|AToa-vbZr524`bh+QmUhfS0 z?QV0R2(m#00)`jtse20{q8{I&C zjOHqwE(0e0_ZC99&bkK_V}q*|!t1Eq3XBr`3}jy^`{IaU0asfi-$f+}j_cUTOv#gJ ztM7k2|Ht_=qOQY*oBue4gg~*UQdG>3`Q^q|1c8^cfY(r;1S0L3%tzmbnwP#0MT?OX z6djsL4B?2j*-aK0ffKe-{CpmPv9LOPd>nBV;}N~;Bdf6kC`dC6}+qyJ_iM6;P6RM)P?O5vgpq%c$NtrMvAK{ z%2@H_8kmPwO&9nlv=@J=xEDsr4(-#E*`u*$_UMx-l~R2WdqlU%!8k^?6DUTNa;x7= z>GGEF1Nqb0_Jd0rJN;&fRx^EZku@=SsNlw}{sG4qvcrIvgr>F~noB?3AAP#Z3fqSz z9}2(yO#e{F;fz>?a{?T!VE>(ENS_1Ty;d5K#^=%%xIwZXW;xjx`Uj^hWRwIV}@7crzkpgKeSDKoBjm-Ag}LpGn@zWY!#}k&t5#c;Fi^IC_4a+09z5L7gi&t;vsbIx#AKflIHX@BK%Q(5(SpRK!by3x<4j% zb0Y$LvL5aRMUUMP6fbAYIkM+Z5_SE-@S|l$VA-$c6Wo@YaDt|9Tz08uMI?Bk!lwG) zc<0O9Vv%*{9H&d-3AZhY=iF^c|Lpe>96rCD&A*6C5W*2|54*q=4FK&&xtC5RK?+S-^ZsR_dpUuXh2{`lT-%Z<2VCX`ez}FU1cC1m83xcFZU@|H>2c7{Zdh+aT*Y}O2DGCiBFXSxAj*FSBb=`-!?z+s zbA$};dA&z;viL`wP=)z)%FG9t(aAP;GN^vL9e>~aYnSW`yCc9CZW009GTt*N@Y-%D z;8wdg68zjD0l~OGG~nPjhX`*7-ZXn7fr!XD$rKc1uw4~s5xnToKHvdP2H<;HiJ|}O zo0P6Bt}a#xtY^>A-y0pKrSB=P$X zxdHbn@2M;V#X;x1>b*wWlMk^>{4811MLFr~xEiWNdZY@- z^HY14vkSQhEn=TlpMmSy%kAc`MiF9(8!E`sx&@1nMkCAavofrx&(^ZVWM$g#HOWGK z)@firXqJvtWNt7X&fdk47@XlMX8#fgUzouOfc>ENTl`EiENt4MEt5=P#6pv)iVm;k zB+Ic#UfEN!pF?O5&ngv2{o7cY8!#xFA>zL~{(I1{#2Y3|YvuR~XH=Lb!BX@4T&H%|MwZ`+UtK_S(K-ye z!RS&|!Kq)n+W(mO%ZeT4B-!dgtXk6hdT4cEBi$K?*n3dKsxh>}dvh<+u$nb}|{L&wpl&CLnA3JXUFxag7l-J6(2U-HB(_;3UC z>}mK$Df%lw2^eFcOit%JiJ7)f93)q}$t`TvTD!wdk(qmG zw&~fPfOEJ|uB~Z9735;z-;FQ!n-err&fDK%om8aA8a_TS|MDz4fBCPw$z3+=?}n`& zSY9vzr7_p{rA)Kr&#VLG6f^969?Vi86zm{%b@Z^Pbn%D$(wI}w2l%OXghYe$ zZ!Ej)b!Y6LgzBnw+PTz99!LLplUT&7k;Csfm2$)P6}NhfS7hdF+PpCBz)uy;9?C4gVGQ5RP~r_9O4E=;EX3GQ<9T6=!WacHlVZ zfzH?A3cPFnC!xtu#j#)p-V}k^kYKW;{PmkeZrzRGcjv6alHXVO+#)W>MsOX$jlzC* zD1hF^H@(5ez0uA%dxCo}>=s}BLOQdaYRWwQ$=N^`S)MqaGCnvxmC)8GwwGJu+B(N* zB5i-@BQ*AJhoE*|@cQh(nF+7NB0TX!D^HmxSP`8@8s{1lH9@TpqS_a;Llm7f?;(}Zmp!bFC{2d^@nj(PcD_{=K6|IHNvgg8|{Z!mY!TDy$tUEQm5p?NHuFFtJxO}->B+TztsaT@& zT58+NnCMmlvFKg2C!&&;jdN8exsAo5lRReznma+r?uVzYX$%>&e^}$34tKpzB%S#7 z>RHrg)l5q)kRV4gNz~z`i4tjVh)xHamh@9+aL}8Ids8t$!bPP*U|aNn+h;~&qT8Tj z(_Lg)g(t|P+sIb;?lJ*a-*tHBWOgT&2~ZU=zcZ|~bD;f8D$Ov$slZNj1s$$H$X##9 z)4cswFISEbpwxkeJqesD8+{{QRJYaC0SwTW@DmgGUz}7PQv@9 z;{Y<08vmw+Ms;HdT{uAxlzI(9XA%teJwgh`uD%CTc6( zy;26@+Y8+-jd>yT9^9;T7CT`5N7?TC(B45VhSP9-%kswHOd#Uo2)pXqebg=6#O%%k zu@X0!qDCWlU}4&LoI~iTic+e_im=_bg$M%Z(PF$YILA?DWpzHjjI{KOW^| zz=SSq1l#uZ7Hl^>Q`uk#i^3~`#fADtW>g^aLSqqbb;xXlt@T2Ld*_f+l@VD-0?Et( zvf+isIn)Trgp>La{IZxv56S6U++61nyP193#@fFiwSnDRdD@ME)*%vN+(U2fP4Skd zCy$s{I#=I8%+YTxy^Ry>O3O&nlqK{+kI&qs%ACOpH`n{mB6KqpFGyy$-h*ZAgHmB! zbAdSY0rlW6dy=#0q(FvVXd?_|cdB-$*r841tlwMY-N9ijgE+Ibor&pj^r+Vxc}&7L z;@6y#RY3Sk0oyBpZ!p`L%&y?RI@bNZ9-^iHkt1e418Q28QBkUaIHkwhpDp9Z1G>$B z`}war(UK8q=+6p%Ae(993NcDO-E0_+OGnL2Cxk3?NC2{Ih$7ZDBV81PD_U_xH{j730+|o|mt29y`%N(UyaRL_U$e}PMw%W1 z$_=u(V@t0(gaI?k3XTe0&KXDFx@DZmvO0fg9RH9JX&;?ljA&0$;tPuBM}nc%C`dXtvV*D>!ay@>nDW(`rhV#G!C z7I$;~vdTTDUh7H7I=*!U+~1p$Q5_M5xzKhNY5NkS>7<9e9U()sS+7D9S5G#iFc>Yq zt=D!Mn(*bG7vhrwa-MtUMzs5EV}x?#?I8>9Ff&Gf2~f=3ygJb?cUU`UyIf+w`J^$g z{_()a)guJMW_9yKvU%FSbFQhbdCk$1BMX8*<6D`J)j9a>%-X!s=-Tc%&_O!Z3aP=T zW(y7MZIimoGgE%vEgn~iNnqAaL$@XZ*SdA*ZX(ZE7{vnWUTv|H6;f4%hPfj}Dl!Qx za}r?LEmeZ=)QLrpp$MS#c&0DMD9pw9JuA&QZpyOVJ3U#D|pv+TDhnQCq$MOXn04{kn^PWR)-?3k4a4?6R^XJ@*b7%ET+(wwcv zClQu-)@B~=)GK1abAK96uWVBs-I;)jGA1G$M!7dNiC`t8xMTi!vNMm???^ArTvVMa z?9kazMU|fgW*||EGf0HdyP0{rkA4e{y<+-mU&-l&9mpChwewG`%%O`JYAm3vYCw7! z^kR=(yse=<9xy?cNtX`qZWqviux1+hkn7h`5qSe_9WTOQ=C zW{z~T;cGgD3(XHFflWs)eWjb=NkPBC_}vff_r`t}a-9^ga4&}Gnq5J;O9p4#fmtrY zvudB>_8*p~bPpRKkmNiBhh^0|{ya;Q)&7nQIj{lnA)k?eShu@fDs>ai0~~BQNRm-P z>wZqZKk<#F6zRJXmjh&0XO>$qt2E!zJiJ>(Bztk$MbZu+Fsq;{%b8@PmF^^yVjIZ@ z`ThZ`@S?I(O?ncg&F+UVG6DMsF+$;=j;+Mpu6Au7?=v~u@%7Sh5gSX z-3V3CvYa$$G=RRj!}8;dY$;t6 zBw2KWJ|5jS|F;Hjf<`kp50YBt7J<}Y=P!!C48XR^>z(Ehc31I?d5ygnp`zyPCHUi{M5UOD=nD+x3ss%WwUJ(twlso3+5sg0O;k6Gf*W2h<~0 zzzBI}dy`n`$FVF_@g{3*=r%zIk=bR%&$FDYEy`VJ)~tq7L1&xJ0^MEp@jqPo*%^ey zq48G(okEz;P(x2KEx5Oen(j$hE1K~WxZ8zIppooNM?-S)n9|h*ez$Vf?prj;O5kyII!Sl$`@%neT-P&XNbLWYJL*S{Kd3v0D|WQxbF;E$N{+T8KAW?3U*# zTawEhUhSK<^XIh_i&YaMd zvc)3pP9Pm`mV_t9xC~`y2i!ktKbsQZB|(6s`~(t4WtRPrcXnQG#Gb3SrrmlHe;{3R zNa8m_nPNdydRb^-fOD3;t!$|2As`|>SW*%BPf9`Qo;R(RQ(eA3XtBU>v;lKY&(awU zC2hY)96CNadXcNv)*bt4BZPdECqMEqstto=-th8jo?jyn6pK^6E}acb8?=+MU%XF@m5 z_i-hjE|o7xphkdz)^=nOFs;?7mGnAO5gowttvU>fb%dWc*6J0tiS0j@{-=cYESZkm zH{GTOA5C*B`w@MS?Q;IhL|^J3Jh#e9+-R?udXpOS?zhz@>=_I`o@q0144~ck%eiH? z(%CvyU@R%`(UDPekSOreJ?@?uw8{Hvqa&9O26I2kd= z)=F?-?i?{gbF*w5H0sma|GeKkZ}W+KZnvtptk$DtJ=S(Ym)9tptvAqeBne9rcBv>j zwp~Jp-zppp%`r2q8A+&?uQE^rzxEk((#~!3m7?g42MoF{p~av`=TahxVti@4!h-gG zPuTK=6VB#l)A|Wz_V6ppZi^F%5juCJHl>&d>w`0Qv5pF^Yw#iQjdHz&9*c6hqb;$m zf{GrJ;w7XT9#WtSP=X0;eqlb2#vxir2Wx)>TCS5V>o78|s%9QX=KxTY{pi-^Q3{3P z#1AX$u&dQxgwq5zE>IKxMpf%-Qp6tF-Uk0wPcU<}rV=FlgAd63EM8)}ky4zOY#7;K zunpPQRStt1`4(dkxdc)dskRKyn)6R&CqW%LWRY2@*`}0!3LC}7W|;(NI^V=Sri>!7 z0NL7R39W$8yGJfH2WY|*Tf|mY(RXNF${I>n?d=wHHYtRR?QS7E>Ip(3s7q%L4L&8b zDyZ6(Xt7270vpRF+H?U{5YSk`;p#>WEgjLfsX6h@us5f(=}E`O_Ct>s%~`bFM189X zp2AfWE!`?1rVSgS9*qtONRvki@yZ%NNE9ueuB`%9T+d&id!>n9tla>2Ky1r*h9q~@&w`5dUa!|E_H15YI`r@?LlS=bdfQFP{nF)M0WD$T8nYP8xK!Km+)R(HM zG&0L(2w+_}ivXJ`GE19;$+U7a#-sr-wO+*UV5~D#)OSuNc$6$DZ`RS${l%^7)p}`r zY&<{nSUvz>{4;#7od)J+^&^Y>zS4*KywPSH49G`t&CSN&lrJx$acI3fj|*JB28qxh z05%9H;6Wa~k|h2&yqdl^yN)IhavR!Da0LW!=N}Iih_WsCHUyT$w81imC>Q{YSguwK zr)9`5jCXR%@VlcJpjQp{!V>0rIJC-@HJSqx z`|?AVs&HVn{rDC}oOd@PNOV>xexdO{(Im%@?l*)vqo&48_10^`Z);dY8hU25O%r%#4Q zNE;jF1@OOBHNk2Eg>)dBfrl%LLc5~m3Mx=iHoJ;^qD4?LJOH?@SB0wc+wJQGm&%s6 zO~nWSL9mO7uV4=#UjW7}#?4*|#EG`cRWQ=ABfXM++50?XkTMHq>KV!9DI74_M5H|M zQn-{rEe7 zjz*mH*iBehZmb+Lev>3zs)BC|E-ODy`CO6W%uK-Bio$$@FN85FGuMsqi^r{O48_7T zasBef*fymIu$dL|9mGPO-m!e2rv+Z)*}gV$_BWEn@J9%C%iWZrENQp*3$}JDgED!M zt(G9`A%#OK0h$bCcwDaxv0(p3mGB(Z#8Z?Q3YL%uI{4MF62Qx5EOq)u zM~c5*!dH&`NgX1yU#U@WCNlMv}~`XBjv9S z$?T4aS7FF(p%o3XHnKb{aQsdDObr*p)KXo^>X;BzGNJ$!7%yP&U+CZvQtS<%?dVCv#0q@4t_N?*TPxH8eU z@n;pqMSO5~rAi#41@08%a~h9;{tl^uwd25Z6W$%!cHUws!cwTYhz$gA-btDhZ|m6; zLwH8(El9xEfAR;ys~7fj_K?>mv5!f&r>=6I-~xkk-s}AMyFi0biWT|O;X|tU(+mLY zD8{$aXYl9!xnVVY=V1K*g&7#4wKs~Qp=DTHbI~uN$VAa!^bckF*^jMlBx^5hLrCgu zZ9g<`>pQ0JbdPn7M!%odPh^EA=pgAgv>pln5CH@KhIJnji4Ve;CBO+}h z{x32T-G(m0Z?}!DTqd@LrjFDu#KprtPsZm|PFMvrXiR#<%@e~?(k1fj^2!p)_e-MOen1q@;IfK?Q;SXbGu=TMM@W_-j zgq0h>8?b%2PeeSA1uLX+Do* z11;y1D#lp@Eb0jg?$WFDBFy;{f9-A6h+p5Nj9H@=zyaJMRP5X;m4O`JT!ak?qP*j^ zWWo8Rg{AzMjSOw%Kf0PZdJfPl{RmNY#NjL21V@R3nU@ zQ@%R~HR^B!-awT41=52c2XC?;bV^y`wsONj2a~g;?K&M&yb29;^8@ox9xiZHk6-sp zk6S6We7%3L?4uE!d5C!)G!Jz|AdGG>3q4B{v1_y}%a33B+> z5p$AFgisD#e?e3N#B(uD?(tqU@oU8V^EOJ?fUC~0fp;Y@5ni3vz(hBc=X7z!EQr~b zd>sE@Zs9hBRT|bmYJiMX5yJ!}3phF}Yit(DwrmYxBhH8UA246Luk_ATyhlV%mRUat z#v!FsP^MYCky`YJ3WBNvU_*53<`VYZI2*+>p`k_GzW(e$2U;L?;_ZL@gNv3U^bW9RYP3Fv(%fPP)=Zc1mI3! zm3zRlh=TZ=r8S#i7?4^IFrHG(Na67hN6dy&m!sy3DSbR19hrISqRs$lTT02mQ>7DI z+1hU`j^63M%QRA@0dFEUIaX?{0q-b7f%GWKs22y-j<_+WDXYhZaoL`DAwPr^^!c_x zbx#hS7$&~!UrG0m^Wd9lS&sBkaEUN+J=8Xo9|yt}h3W3p2=OeIj3E@MQRXpA;!MG# zW3``4k>scC54OO@P>`&pA)GyYFRed+R$ZijXyeBA`}h*%c$hZxzkNpWW-m zkAH}}N2`S(YeU*mF`L#&1>JVgi;aLW%k6#Rkj;7m?;QOkP>@3^3R*v(uC}NlnZoNd zb#ynNgI6gR{>_6r<-h8cB)H)BAv2BOR^w~0qxe&L-vsx2G%)(}MFjt}1uUiPGrVt! zEW32!zRd{z%7eVKxx1bcRWA&_mHN=@{ewlX54A;Scc?>S&+r1KMavf6E@+&5&J626 ztb`j4{CFAIPOQhv`Jz4)eYohWkJHMO)VE+FT8HG+M3t51BEtA2!ZbC-y;v#X&|r&; z&v9-~v=Y(KD;a-8;~5%1MUM)NeXuM8!bfCI{KzfN(IP@2itX=-m8fV3f=tpo7_}{4 zhJka~SQVk(YM{mbiYgsZr54$zj@nc&BCMEEmDZlyh<~0jF!18mkqJh(Qq{v*lScG8 zAu5QN@sIGWTdTm`eV{*DLy3IHflCaGibfG%dq!d>#5onphp9EX*d`>(o_38=lqf!= zTP&8UI}WO-T3i7b>=NU28!>PLfr^jYvIzeD>1jl)jE(mc1~)@&AWZ4S1tbcH^XhRg z4&u@0j+jA&jzveN&d^q!0aY+cp3!0gDEPNvi>DA-2Fw_{XipBxO}p{qHsHvQGdLpV zNuo#l(j``$rtcjnVQPoQj;uX1RlnskhR#XcYw9Y5F2nZPxMs_UN>7?=2Zk#>gyHAq zbSq_P@)ewH51Y#Mlu-ur+?npJtj&y%iBDw@&sZsy(0_r>q6(Uwj6O+S;? zv|lFMGjt|N+hIH1nNE8Cd^1g|I#ub^PEr-CD$^ZN7-0uiP*4~_LBW9$6ck2SK|w)5 z!G#qR6ck*T1%(ktP;fzE7QWx_ocr&2sw$oC&dl_<4Vmer>OS|m_uO;NJ^zn22v}?} z7WJ!j!5?8ro2;8rC@z++W3tCLTFtIp5VOI?2zwsns`TYu=vZ4I9%NAQ?|S0l*_nUD zZ?Hv`5sR?O!0jNvX&kmP#BsL_Qpj=d5l0@P{AFy7ao4vP)L@>v-BFD3NV7~{ad~9bu%puKS5L;itB(L(J?A_ z{n2>AfCjvqv5rDu{u(B!6Bgz|_F{>64#86qw_?(naMPL`lsAK_Ug*r>u>-Iex+}R8 z2_)0yVcgyYLsN!`^&v)SF^*pz`rYcw4kP zVl{A%^#Yz@Mj|XO&=2>Ap@S)r<1yHDpmb*CBaYMhG4Mb3q@nSq6mnIzkT2JtNnw zL`l=Zvkv-ztEYrm5)Dg8cDi0=!9kJ>yZCeqMD+~c;2w)Py)z{1T`4zZNkU$L>Zm5Y zxq~E9WPo9(*grEN5xW6GE?#RDlS{z@owktHE^PYK&8Qi=Fx-XAZd$0Fk=O^BR%s8m zF;fGD9EyyB7IQ3$UvHO?toA4tCP}CvM@_2DRc4?RL1c2dj?xM6qx-z*L44Fad?-G}%WEK5SfohBrY5k|kiEW_F5XWUekN9VxRX(nI19Q)Lqk1Ix(|FAx_bRaG3xl61O@ zxE*kQ;5ejTS9k*Q2Hu*vvY#aOSdDf+iaVSiUT7c*xCOKBgK6h%1HK@{W zK*I#0@~_k?=aNsVkkIk%*uff+n&I)Pj#m6)GM=Mq*i$= zJV+0pE@+q1w%@=rYjruZ(k4ufVnGZb5y+4@*6!jw8TuP2&3k$5PT*m0>NWjktC6+o z=hDW}S=>mJ-c%;xk7lx2ix87aS4EB8P^dPHu3 z6?}G)A4T!F8OF*$M-IiKI)HV3qIjUO_UwakJb0yE-;DaBgY?0CEfq@tjo!9c`fs2< zPaH+x=*@Ta)l6MX8E3HGqc#q&oQu3|CyGwbUq?;|1TFi0F3JR9#!R0vq!M1$Yq3#4SctgsFHeQ`^6^|_YGO`wVfst^#T%%uKfdr-NQsJporYZE< zI^2UIVo?i}~fhFxXcAc?GlGQ<(IwQ&@ zG`Jgq&B0H1V)P9KJlANqR!_cWTV$09C46k_x2`F8X^!h!CI!Q4R!w5^L(M9HRaS?pGjVt8MhKaYfZ>Cg>Xv6;E$kb{nilxIYKvoTF zxh{cUxi!qr04oAjY~|5WFZhg5e*uxdL0GG z;7%87&~4Rt86?kYS4D<|m7Orw8D%7oVI=$^b4TJ?*pUiF8G?PQZOOtasDeUp5DhzP zz$sNkfMNMi#@-PaFbENi*;eZ`{)SSm?~&8&%ywL97F{H;0E&bdh|L~68{k|R#bOLV zT(OPdh5U`R!wjcQ?-`~(7>HN!prn~%O0uhMWKXH3$!rU6rJdQ-W1{m@Y~eDk^7G8J zULVm+@nskY^dtn?EQ{^HAq?V59VVO_mIJC6IyXs|+@)P7VlwMx79?Tj9wL&Yq@HBa zCN#h3^Oj0ja?zoB+YI2E_+I@5k28x34_Cy3?4I#e`pu=4-n6&OpiL5mal8W&HxhjD z))g2LR0+w9`*O^}K~hfK9W2S&pR1vkmw+j@6@j(yDPrLN7M`3ZK?bS>q5-7s~h4kjmHZ4rXq3l$Nw;!KlOk_qGfe>!=5Spcsf1-PZ$N=vZ9D0A< zI6A48eWUod`B)B*{`jK!Io{s9$cuLeYHq$WE~|qyJN}?|VBCa$Z&$aQZHA(`GQ(E3 zQOB^diohN;KSS#1<|@YmcjR+t5RJw^$#`1TN%<8;bv!O2JHr(G1PtbGCXnl)!Mdt9 zQoD_{g?;3=Q9#0i3aO+mWFuNh4-xcK6I3Cv*C*@d@b<4l+_l9FdC79Z*z4G&7a4*M`%o$^S*R1Gq@f08V!A{SDT&5Pb@B#{myX1!ta1iL4@l|A<$>`0FO zk39NCg~yWF;+#T5A=ViO?At6<90cDAWRSuzHe?O9ytNj+)~g8ig0hQDOyn0z8{WZq z3VjYAVS#fMilUzJY6>xIIGdY<<_JvkRv-Ge$rxlM;gNS;ZRU9Aw0P{ih0K!7wAb-= zo0(+!rqjCQ_iRJu0aqcTM~hxon?`<*{_9w9hTkuE$|{sFM9!2T@#wmYYj>??3S=Z0BUdv zu!e__{%<+|lEM`%e_rO@3oC-R=xn=w6>k}0F!75>(R>E~lPWa1cmN;fW4$5a+vRhGxN=c>N03)!7=OM$5!PP1 zjv#4u7gT z#T`M-zXq|%D#L@^$Flu-O1%RHT|8UCk)C5d#$Lzi_m1E)IxOFcgB(!-p)wdd0qVDh zNiBgvun;1AAbVPdekV^vrMCN>}q=%#4Q)97C57WLD z(jZ<#lx*%?p+rj&Rq9K+GB8Fg*ZWPCh8o)7AzCz@Wd0ePr1f5Olkt-mFvto=_Qb=Q zGhi~Cn@k`_*tcxl4N8lm8ci+r`!TGvnfwxu04^LpBT<9mxIhT@6-d7tac|$tYN=~G z%_iKS@>l>leHvD!Y4MYLbavO-SR$0_^a@2%Phx9PRyBRxDxwE%(PQ%a=aeECgAbIgnJOoT( zr>4=;Ze_LJKu5P-r!aQX9r~Vrg&r^>5#1BE>>T6<6JCtO)vHjg;3U)A!^g=k#4A|E zd!Z9Oi*5-xh4)eugO{&TyNbX}W4w}CL7N)=34<^K3GzCIW*i2(~} z?*tW08v~d(7m6n*G$aa;tzkXvki-vhASWge)TeR;Q(qJSlNb&lnRCZ+u4t4s`ju~U z>k=tVBIE+F(%t&b-{Yk<*61nPFRfOG-aWdxdJW;nVS$=`5hDjxMUmlwSmb6|Iau5T z{-6+Ps_2nIDa5MasGCDTpb3$%4Lvi90->I5alxzEJG_Q7M7|%K7zdEeO92w20~_)I z{48Mo{eW^(bl`Q++70RgQ4n_wUuToPO9rU3AF-?H7IUE*mtYA!AU6S^b3fwz;Wua4 zJLWEJqRJAuYx25G&^m)&l&Flb#THTM1m-B#0iKoStY$COro_ZhftMT;I3{8j0Y3=+ z`feKXacl)BPXvQzZcq=JIy${b+uP86H|P1Q;YE&nL(tc63u||075q~WR(gZW}re% zdJ*uvbk5Na&yJBOi0NCUf5J`ILR++u=I-Y)-RK6i%*$H2@V42uY5yG)btX*19C_Ai z6*o`=2TUXEel18H-!I0Lt|-r!yAXO?K?Q8YQGu{2ZC-pstaZrW9d!>Y0k+T)!=6Tf z_HF`F57D+01w|w8E1V}oJ)A)Sn;xK;#GO&Hs9dkCNt;7Su>|{->_-HvAxk7dy-fC{ z=!TvBXCI9(2AwN7XFDzy9zp&Z_!qAWM$6$HP_6X(U{gN4NNc-8K-I8>O;cbT%mvM) z#R;Oza zL55E+#CY7M?~(n0FqIv06 zGv$hrpZLiSS8nW6;NElzMBek+xgOY$G$x!BCA*`F0Ih3f| zXQmFlPqD*8u#6U_cut_jYk3CrBz>7tQ^`~%7fZ4=KWR`Zmyq=)=ry>G18Z)e4i2Kk z7QDswMh{Tt<(L}F4af@vdf4I$FS0!ZZXI=gVNNNZb^!^lQ~QN zPk8LvWdlXqT(@rH0AX4cBycE?WgNJyysicu0VqzwP7z?8m0M?=*t#g&4Gyvso{2e5WJ8??VJ2^w66$bNpTa zqVk+N{1zYB_LYSo^T$Cb|!Yy#?o8Nxa8*fX69kJt$ z7nTjRg6pBe%hRu!c;M=x2g|Mf3h5RH_E*3L_zwqe`&cD*6`1_NJp?nroq) zF;L$mH0Z}-;bYx2(^txDqmyciiZImva7d=&i`z^F*|7##Z|Y>NPQyLM9w1ni8!86C zV_?>2L{&r{$0kgOc1!54_>?T(*eJ#>vuqLcJEN(4j`S$$>nVFs@|UTw2ixK0j6v_< zj0^YlfGaxq(_H>6#CvRo94&;i5WIY1*&j~`m_iF7alYjDa#7H%SQs_!M~Y_muz=#? zrT)O08Yr7ams={xW}eHjK+tKLf~Xw~c06KtbY=^}#!_@ED7Yunc5_(DrQlhwfiy_+ z0Sgz~-))&vj*|t=ib0KA2Xz|uZ>yUUp3v}Zf(>*Wa%2pJixxH>Q%*+wu*p|Kex|Tu z@(k;12A7J~P~vg=V+LYhmA(}$LIXc8A?e4Z;Hp&rV)&|s@?y0q$q4>6xIBbnQ4&+r z6t2K2#I;*GWFc(j?rT`$&!YHq>m^c544x7%!h8X!BekDoXA^xXyPWoLP?`5 zI7vM(B=~!2m7W@W02Pas2ni-aP4+CIV96^tfA9>Sc~j2)C3Lf31twa-xNKq{SWpLN z$B)4^ZqoXNN5mlIW|kBXyh-I3zJ&F4WV1$FJIMInAE9bM&%gCX_=$4)#X~>ojee32 z`5kJp0nAkTrbOw05yPO+&2Lz_9V>gA>=;D&o)$+!dfa4|VuhPsS;mu?(Fkl>#FLww3l zxIT_4(kvIy3bWnC|qHc!}1~x1ARC;0k{aFEaPOIaH5> zC@7h(l8;x!g4A`v)W3HBoqKaahU(_w99!FT;~8Xhq5rVErtT6H+)JDp3<$a5EE8p5wuuN}9cif&zR1W5MS)e~qF0w0M* zo>c@~wCZI(>|n zfWCKP;Uh;dFA+%=f4XOQN%4FCfi^P2#kL8%O9PX^m*?CJmx(fAh3#2cJeJ~)Tb3$1 z3ynGYZiILs;%tv)XKQJNSWqm%1HIi5Vk4!U)&`obnAVNCXi0h^xXr8z$`8bYyaqF% zjq|N~_M;&g|BK%EC>6#tpcmGgdofe;m5|CXA zn9@((T{pBM04mf5-5TwYu!+noc4Sh>^m6QU@`SB6kV=lkT&!7w-|e<^;h10V4}bElE@(;wVJkCaS37!|mG0cT-W!VMujv zrb6&Q$duA|#!eJ0Ghi}kFsIf&4=L0p1ok2L2-maR$!H+5O0aoi5-gO-6)*rd{V=9E zmV1*m@JQ#L&vMqe>bk@y*y6ssOO`%;BJZA4vhpUA?g=Gya?r`Fpn+1s3%5o&WDSPU zdEA0xZW}Y4GmKnti$)?i-D-{~&C;D8TIy$3YW1C~8&ZqbCbi2d&(~dPOO&BQI?Rkl z|G?Nlj03=xa}z;uGYCp;OXojI92|qVGIT^xb;Zc?a8e)6_^K$)sC3qCdEp(iAp?MC5-+fJsA_*MH$@k(vD~PFC zRaGXyv@X^8C*0wHEoInC@6lJ_Upa23veqWSO{O1^5s*v?a$->+MWj6&|B8)!{YAL| zdnK{`>@yW9WT+p)<<|gfz;KzAU8x`d^Sh^taEm+oAUANpoIBb^_?&dp3|e3Q56 z^`g@Y$EL9<6j=gNfbEo(REfmOFkp1IQ>V$~lSJ9<`aIe$nDuz9b>>?W>_b*i3vL?(SE95muETcNFqz2oL_tE4U11tL{X;Lt79ss`gNpVMvVwyK%{K`e`+^&S zL@o;g+^-P?bVJ~P0}wP2E4l(OAD{KaErKTyDGj4|%8%$Q;J;(|d-1HCP+Ifyh!QX^ z`x4wb79YjR%o6{ZIuZn){II1W+(jiP)i-2Stu z5X8@eK>H|0or$gbKgScM`2jqC^@pSAKllPro8;=&TXjUGtgcroZ5nyr)=FKgS8zYA zRl%Qf@p$mpR}RHcA)6O@aYfPK_ci4~Sw3cj#oj$AW=I}!Dm~Z9vg~DIJ<297Y(s^&--a2cgI^C9#%fY5e~w0x)pEx$&GqM}&0w(Ic2>KDrhIAzqty2L4fZpCNdf3_O2jf8|akru@oH{Nw{2wuC$`uP~Meon1GBu2B|+Iscs!_(6j={w!3%whz%Ms9lsn)vP( zio1g{?OYI@TczeR$uQ(l#1`he?qUcz@|Ekhp>ghoSs5=bmFX2_BCQ~Di1LP z8&~`az9U=4^6zMv_2iydHq=9d7*=fdHKEYbU5W1{+|{AnbqgKykOe~sl+fV)u-}2$yXF48zX0r!*fBY_0 zJNFxh+G^~6#hEq9du0m=G*sK&{sFo@$un#pA4Nk?*!w{2#4JC-36tn02mz*% z3MJ)vl!PW$NRy~S>5AyHI`$!oZsxrlI@4&d0miy1N=OL=nl}BhMtYzS&GD)$Z$t9b zyB`)gc{x)8u~N>(MRF?n93~gqM-&$2C2cLXDqq=_mJ+l1okQ`+W84MP*KC)oc32HQ zJ&!an;JVBJeah@EiD+q{(I8y_(L2p_HP}T36C~dcA(ei_bU!o8xAViy#8Px-<=833 zr)oL1?DnJT8C=S&mrvg8V!1Uwm)#s?X?|{HYuRG5q$Ue#@`VT^*lciGk|0>^i6>!# zgPtjY5`;9;AY_0&i$C_pza|o1)Q{&BcTzZsmS5A;7uMGy5>{)=K#3BJ_Z74Ni$|Sm z&^+81|MC&!Zo?e=$O;-rEmvCJU9^BuJj}6Jx~?&i7uKD!fHq}^&@)-AIdr_hO6S%K zj}lSIZb=ZZzP=8rmZm(b6{Qtx3ECoBI0eVgC)%`8OTyPE#wrw{5{d$v0TbsV4%&#D zr;2HS6))QiAxL7#+6RM{t={@K7ExRfU9op~puRCU|SK_3!tc49%li zo9f81g1mY{xStYzx7N4Avb*Nbgs-om2aqr^IAccciD%TmRg&D*IvdpL;J{E4U>?2T z&(=4eC6-(3Y7*TvOg>JS=z9nf$J*_yJ8*Vo&mpl{{%$-*w3a)dXY8OBSf_a2-0-cz zt9PUd3lq&S(#p&jq)gTo__kR-uN_$~q0|j{3`j%`Y4p;ATts}j1u#mO);_=pZ#A7M zl)wUGoZS8C^;urCOlX{4 z+d=uP08NH@Yj?N^y>;kvPkhekhXJp}^>)@eQCHn%W7V;#+Ip+m{_$DM-`l^M(CF(` zsb2AeTs&o7`M3mSKOE&J{~0C%EFQX|*-iF7OtVfg#^I)$mZ+hp=xg&Ay|=#wpy1J{ z8wF{SxaiVX4<;&Hpa;}M$YUjy1_Z9BeE5XiK&Hw+7RRLrolWzAJ>KO_SZL}MUG zh5NBX5IcF5JhyF$VkS)=Y1<_H+6cE69q6a-Fxz{G^X-_>HlrQVby=V0L?PZ_ikTo$ z$JV%cs;F3mQu9kD&eY1Z96LEU-_+P%Gj9Dt5k2HgHdiGiTl~IWFGBWXpok*`nm~A< zPZdpgV2Jd5AS;HcWmSs`xtMh%1Ct{KOCOH)wt*D#3z&rsX+CCe_V|?7`&KD{|LRbT zUKLgqT)`(@*U`e?m4So;D@tm2HVlbK&)>;&w<*@b|F-U~{k3(^RB08`i51kH{ zz1qoI-GB7y8F6b#x#?hZnth0WUI>q(mokyM%>a9;h|;J;WCU}9Ab1x7%=KiK z*qQ;9nfR$<8d{iEbujUz(JWw&U!W2T56b+a71LaQJl{%vPfpgR+ zz?@*}w83sb>tOxK78mW$p>0w%wdkxF%4uI>VU%G-6(C|`tx_J73KBd)%sK-Ev&sWF zt1>fyp=x_^3LnWV?p3UfN6hB~vVW>bzXTpeYd(~uR52s-=ms$y-XmCp=qL}7edO(f z><6P@-k4_IG5IN_8Ky^AU372y5hkCZpSxsZY4I&38<9D^X(B^?S$XDGHR{_S&Wt`4 zhBlmSr&qB%b&y~WhB)3?_%0kn%u5YJUqp%zI+KPhGnL7F0QQ!&82VONK$aN%Q*M;5 z8Ez?Vvo{v(1BLI?QOB2x>Mu-3-fN5{8j{@=?u)#)aB<&^oeQFtBoENk5WLTBzLxxe zlLmy-X7md5BV0eXNI7y7bK|K0wihL6vQKz(bvqKT%Vnb4?kOO?nrUnzLE1W8DFNVs zuvr%irK*&Ip+BEA=)_#*Wv4djhjAac(REfae88eH`Mv_&mc~w!3W#c1{nxsJQqpZV zu%%SeLOiTWMD(uQC*q5!;4LD%WQw|0lj98X#}#P=a!6J*aZ#fq!!V10s^*q~7+@G z+HE6+-Y{N&AG1@l$3j{J>kE{e?CF4~r2CkiI1{m6fNA zdh5s~iJq4X=DoGwfER1Y-#ygc_7(5R7If;6g$6X%%|&!Da>Y%O#o+k=5HaK~YDzX6 z;-{q?TOi=<12wx|^zGPoZ(n@YGGRId4EsGY{#PUs#QS7(ZvO|*;7-1!<~@;{TS@3SJMGKIJqrV;fd}kxLnt|Or(l+tCHoZI66fSWeS>(9| zySSu)y5kqqAcO<;DS70=Jqa(9sI_oc!Kn-fLml2t_n`|L<$c=ifiWo)j{*)hO;g0cE;9KM?YL4oW>>En=WNyx3wm8qtwZb7 zIuEu^r*?eVm)4#sj57WOP(p^e+j431T4|RdCE9afEP1Y@h7z13qK49YZ1)QNuc4nI zsE(mmdQx^j2;>RZrat4;_4QUA-Mn}*ycD;;qjPzm;jT0+tejl$U|a~mxF2$8GwOD+ zC;Z*W4&c3~i{StPd$I$pFg*hk+VR{3as?P;!j}{}@KxNk9}se({opjqE`;{dd^|z` z0x8>RE$-q#89sH{RAp(47(u<@9R|x3idqTcOueCzOo){#W_z>QW)l)ICmgDDDYgVn z0W~{4y+*=yg!!VnBHPbYb)2@zp@|yt;_R%$!imiHKz)_z&m(FWOgNyWCaN2vyoHoC zlvsGS>-i13mUu#?gUS}E1v6wJCvtK6hgt|7Lpv5JIKzy%ooNl=Vb)7=~s^*-<1V>tHP-V%AN_G+6D{mV%);ud`{ie-Ofl zDirA%2u8DKlvpN=kX$NhoR|*Z31noUh1t0|6iG!!W-~#ZGr#7)mttecm8`C{@2(|< z-k55G|5*E~QU555*2wzOm*8vu5(J&EU{`u2+S4a$jEAvQ+_*+qYH3wkt z4HMM@BWsW(1b(LbiA{g5acS#Fpi&tpha{|JY~(a`)_xmn6Z|J@s(uJG6J>z)Xo z4~$?HXqZ+RlJAcOFUUo4UtD-Rh-_bj3p?aTZv!IEhEb|`cpjaQjS&tk^a8iu!1XxLHG2vrS;u|_s3Cm z58mz4$9>s=09Q`WWZbt=GynjxT}4BEz3Q+#(idy;xHuW27?pIis?%PBrfm4H&S4_U zqa!z5Rro5b$3-{W*z^gc2eY`C)c>*{9>v>MC3DKY=-w2Vu!Z~}g;X5N;4&gqb6AOh z>Au@JqUZF8w$S%5bw=;$^C^|M6O~c6rBn_|vs_mBMT03}kE^V>-z_m`lwV4GZu5S4 zf7}a~@iAj`fg7iuTV??xa6+BcT>k#SH2Y;GS*wJA?IExMl!cgbQ6YHYWvY%a&QyaV zkn68ilZv`-gz6-J!es6*Ovh!UiXEYBiBxO|7bqLXMT&M}c-$}4MwT!qke^Blg@_ht zw6RCn^B}kaG!BD{>v-4c%{@@+gLUEp8?u|*6i_pH6D?% zBU0P$9b8`&#pe6_;-wTSUXsL8gmRyH6#_#Y@n1}AK`9D`{Gj**(5sGMnQ99;G|k=G zn!fY_${;*az6~cCwiCIN(DXAQmh$X_qpqW&B15&4moZ48!x0J)2z8}Rr1|M-IhdlL zx~q9YLCqoUB7g<4f)f<|XbPnogsqu~R?!WP|INgu7Vyb%E-P_@-P@WVU9v3C1w*Z< zKGqj+IxJc-6oSGND#p2iY8VF4~lMv>o=%<0YSz)aN$F zKuYPz?!1l@ppU$x4R&3bpIwdRLoIgG(EQgdNBL40#3W^FQ9(Ni<}i6Q&n`MQL+bdmc_CPHS#(RV z4&VGYzZuJXb05FCH-~SI_YI8N8Xv9pTH7OYrnm>>YJ@Jsa@`n>ne8dr^1kX`CjL04 zkgr4JY(ueOj?>@*>;CYh9ntpe5Gq_XnkV|=DJF(3HL7cs6?_7j!sW50GKPnMPmNY* z+kQL%eWuG-XHEZVSj1pZZZU5yEE9IhLqlrM9EXAWj02Dq9E!GoIjgDB+P2(3Av6I( zL?bsgWd*jfa<7F~5y88h}?<3fsm@3mE*A~ zg$zdPi{Nq+7DYyySd;cQlsI!6pg`J0xi;SfGSy%HjP%3?EL^OtfnpdWHB?#V zZ}xUqQ<3b>rqo+rg==^Mq1?8GPV*sJb?wGII*^`S)Hv@C)|Ie^6tfpKX34Wg&P7Ik z<z3n0kc+%GTa)@W~{;`3DR>JKzh^pMvqUvD2$#sequt9 zqdA5S-q2>$=i92IZke?MlDV2QhoH@#&JS{Gm&k?Lmsc(r`yz_TP=1uAngqN*|7Ky- zT4z~PQH--{b{l&?=M#G4Qk~aGKEdj?D*r%}Y>~P)n(GAEb_E6L=pNcqD`{nOR}KQy znVJZH?>P-DK}>N}-&6~;NZsUiLgu8X%vRmn*|NZak<^{LIWd>?3xx`^S}q`)^lKOD z=Y(f>5G-*V1YefK0aox55MEkfaS-UGyMDkxFYQn4)-PX1E+XrbsLL z*|B5Og<04;u@DP;X0n)4cQ^yYU28&usDOIsIJ~^0qT45H*v15;kmHGk@q|w}{Zu2eVFt+>$tFb1m8HM8fmU3xux7giz^jr=bqc zQA2Ixg@-NSjTb&zX`m_qir#^tj)-g7YICG#yVUTjC*6bq};7*w<1@7xpuv6%wRwSF9c9}x?o$xU8v2n0GAJo#`4kYj~AuG zJ7KoXMKpt@Pf88!W3Qxz5`9s|2JyrB%7@)%mne2>mD32MujuzIlEW=;` z8fXSrZFnEPhC?+jWiz9@_JW(u_-l*it;!dR{_-M&=XWA8HqO^uXXpjuNi1(8(+ZUh zRE*T`U2_Gw(Ae-e_3SzL2l%M}kW9$9Re^zPo2YwRmiy8Vnb)pRd~VisVWo7&Cs8-C z$%N>2w?I0qmGfPb`%8qz1xWmG5J{Qm6>2X{n7>s<=d9Qilmg*?1_OQXO@kHyv7(01 z@`4kuX5{{4lfdx$TdR}fYcr2)1tZagmI9O_LD|`!BGj&0S(KQLimACV{bF+isw%8W%`ckV1ng=IB-h19kxqnzjG9(XEMB? z3l}hv26O9h4}KKIt=-Is?MZXzQ02bCt>1I@wG|kd(38ATMHMEUJAJ>BhoE#kH5OVV zJ-OkYcz^sj3z?+uV~2*|7)+?8j|7;+o)jGOvWz}AK zYY>&T0~MEn3I75KOV}VM-T{Tw>gc?It`vA)SaSA`l+#V00?*dnk+>b|YrJNIcCG#d zdB-W}4-J;7h>!PqkUD1Il7YD=L?&Yq}IE0=R-bMKN&m`8Sv`IBLz9L>IHNRiuG{br#<^BfW20Lkmn96Fo`0)a#{ z{1WvhAwvvS#*U%H|{rPWE9@NM;E7_HRCY!)@Js zIt7J(Z-zXtQ6kpfV!h&?V-!XW@QvWU4dXVIxAh&`x5s2QoCGfs&Q-US;_TU`jGAP# z!PIRQ$+sb+`P2R`BsXD(LyZEsPN65Z5nn&pbarJ ziSEl#ofQZIG$!&JHP_E2QL$<;C}>$Ih!;kG;^`-MWH?0fuh; z0jVPBUArJSJw#CwVQvs#?O#9T-`-_^O9X$AkufI_xZQKIFFM(m4`N!5iZO5nhG+!d z$3x;34_!_}V(|_>i5^TnKY0eCiX)~Q=S{@<5#uVzMH$ao6wzcTK7m~H5ITo&YGvIQ z(|t%>a>lrO!r2Sq2aE7@#~}UzTv36*m7ev+YmXQt?{hxh$o!3&zJXIF@CdmMCB%^I zw#C8cC*VB4veRfv=b>CYd8JZA>M3k!4RpGj?~AW94CoQ};qEEpD!j0MYUN>cYKcZ3 zjTc}7F~Nv1A!`q2!a32=tgDZDA{HC!#~nw>(cnT7EyMyk^DS*wRp_})9SiOhUbjITTY`9teQMDS z3SCI#MhquCNNzJvZnMxAE%fC(rPGWDXqg)^P>P4ag3y=Yxp>qbh~!CGXxed6wAeQ= zWynKYJGN8D$dCl==i(uX5Y0#X;*XIW_Uz4f_G8Obg4o#-vHrvXhNsByGD#A>yogv8 zT!8!&*Pk2}RR)uPN7o5#_!`EOM3)&sDNh2iRzN87JLw5i*s1L_f((p|(Ye&Z=(`p0 zQD=*I5I$6O(+K^+d;z7P)|xJ8mIBkJxM^)GQ7nvl7ZVhDJKANEjU~|~misrG00l`S zPb^3auzltyRAjB$3B9xp;H4Ir^L z0k(2}RFN*lVnPzPwyI!oJU@dB5g57v&$Vh}ZD)(HLtp|RUT1SA%G=-oavnQy%D_=; zxdBlDnpy2ctll0h!gh?y5y zlwQ9q7TRBc7qhCq313U?T@1<1COtrUSX*c^uqcWrw}Dv$g-Ek;IZl_1^dy;EB`Q?jzu>(5xh%iuDfTc`>)6t``45fxIrYx)bgm&5R}hDw zDqUfxSm}Xh5E|5Kn5G;pf{LzGHcFcym-P{SSrToWsURkl6asgsbl1RB`h429|Ic6u z`Vh-U7}l=*K!8{&zlsr5cO=FEgB*Z#OJ;l4%*qXM+4AuB4Y$El1fJnDW?pD5e&Gg6 z(P_q1F3vBXoo06)5X@0Q)m1!wGmNum^0mDgr$`FW%D0R@=Pr5*2ec$tK-YCRDMc31 zn;&?NJ)niz<`p=mWCoHI11f~$YP12*1oDdD^j-FBZYx|VZwvN3ZtoMQ#`*Xtig75- zJlPkou#qnK#1hUI+5Q*Ax&zsM-;H(;4gYw~g2UMR)CM3_EQSC&3Psz8Rxk4>(GQ7= zc2)L5RJ%A?2C2%1WUjIr_G&bm%-ecqE)ywVqMBz>JaAKPcS6$+dL-$1x%^;u{%&!Qje5X0QBKXeGn`iT$S1jpzf z{CW~$h#ceL3o#Q_Svcu)j4mFNxV!AR0N zfN~^;zS54Z`rLPoDYMX&hKnPoOn3ukIt@C);4MseS(=Qw>k3% zACBG`oxZdUGkLiZ%v-(9c_$x^?uiB;tD{4FwAB|MiJO(p_33Gp@hELqS2wB<6KhEP zTHD+~PgQIg8)dqaJ(20@^pNRkPKA6r9Kpb(IRfKDu=niIi=}G{(%ey}GsG~L43c-? zWQG-2F-fXcN~EPJP-vvoH*h+82*zIKCr=spatl$ME6gMK0`{{q-Vs#}V2|IbpmS`K5NvK`poX83Ny@?u;PO57T>cF2nLz`ieg1r1w@XLc^;L98HSWK|%zO2`=u?NZ+Z zcFL1+JjgZRq7g`UL-F|3ld)E_(5pL`+zJxr_=t>RRF+70A}o*`>3{$d&rk8V8>YZQ z)*Vwkir^i-#Sm+%Ny8}n3cnBvBoIV`x4nR|7Nu;_4q2Cf2n`>-oBhtksei{#&exZB z);4B7tk?-SOFDrdxH$u{ED7a;7qlg@XOL$Cu_5p@D5vbk35DL%=Ix%TmoCbasS_qT zT2DY1#y~?+SH_@WDT;1Ic`KL)t71s|<$vL$`U=R8{)B@eZ`>)qBCv1G)P&{~`erd; z#KK=JM@cO%;f4iNU>oNU0Ci?(bFnOYb9S)$m6=FX$#uNJ z4vqiIj2U1!HqtitWZEpi(CuunDc?Ah3=`fdY}~TZfPOg3d8AYXkP=q!p4kIfukQ)0 z^fYOB$ys!R*aYmGXmYMxvI}P%k{Qxi9uEm$JrScM8WB(K#VB|BPjL5QKEZu?te`iT zTv--JJ-edu)}w2>ZVj!U-C%CQv{Lkt$OB!dK)0zR$t#?voshxG@^}&BnzHLNNpoVH z2a#pg=;{<5G&{T%CU(ojC*_fDOntn$OAKn<+$@svfY#EoPRj_C!G0uiZEtcs2d^gF zXscI{FUD3%JlA*_QfQs^s4wWS#Ut& z^Av8xGd?|Se9<%ERt$TzFL0I^$#~1i1B8_gGXg8K=Vk5!FDv2T06`m{ zWxh~V8_emMzW;wuw~fmo^{%LhhDveGP-nYL7`I>j35!?G#u0nm^3UMhXjHJ zda!2&)_6mi`MPmvH3)47rC ztx|B1n)R*^TTriDqfMh8o}v82gET=dIrpRH{2K>cWkPpkEM`@P$MG#~# zIjE6;NqK&}-95#+(PGduJ5cSG6%MP2;+0}AnhkB(92kN=iz9P)s?<0P8Of{&N6M6R z1Ngm7ZN)mcO>6|;Ihsi3%*EsP+ji~5Q!nVPBlnyisN4;2{HVm$q#+`ry5-@PbGfm& zHiSW$%M3vA;10I>23!?#shis;#n?Mv740hzFN&>OyC@(n%#_O)>Bz4%mSpEB36}-u zSCq@Q>?$keGxf$Lpp}f}g|_Em2k1?%=0VSEirexCoBXQNtAd5$W$l3AwWpjA#{MAW z%9oUqP$79$aJ)#ZR+#}oWQxkVrP*@X6|yw%^DA`t+(HU4YP0I?hMMDl4^hj8q|I;_ zZq=RU3zo6384sA$R2AJPr$fN1|3*faih5li8s%0kx!frN*fDv9fzt#U75#$ow_J6 zHujfPlRa>XY_#%g;+W+{zz2UN1Y*Kp;aNXK{G;g~K`tWM5lRLQxIw`K;RPm_RRU4# zzc4a}ezRB@mHwR*ADA+JfTeQfc9G}s__ycGByT11h@0gG$YbsZCxHA9#2~4X-vxst zsvlLbMSh@pQF0iH2ALdk9cY}y$3s7H4MC4PZY1fE!lv5 z4e>Kl?@I@L5|!(;^3|zS$_Q1zwK`~LdirdsiI{_Jtoz~VY3-tb#i1+7L_ESU`<*F7 zROIfB=PIbhLCZRu^E8;mNMGPn#bpU9;Qr85llK^IOd3upJJ*hzRl)7Y0m*ZWDnfWW zi^JH~%;ib|nBlj2=Y&eI^EOb#gDAk-3PBV*jw(2ZY9Vwm0h~c9tnu1`ubIIlBX;iE*1xP;G8~ zx-TA|GwB8RGdi^N+9g?u_~naSN702R`cve^2ID27)yXDQr>P=J?|ue8ij<89z3+W{yALwMeC*iA~nX?KDs&3L*D!{|DpsD&IyQE#A=r1D2u;x0c!wQz)1t zPp-wtSMj}Qldv$qgI3HPjg4x)z;^^sSw>_8Dx;+QG}Q!48Dw*M+6*pU9$hezPT*nY zTgjV&XcC+;LhohifDnG@J)rc)1R*SOexBo@+tr+rI~?2W`WWEAjiu_2JrrPD<&%hVhBIwb$2ip?HMyBW%f^DzRklR9TBRLb|ZZT900~`maiLgW; zJ41015+KA_LsD_GSwaJESCk7mU>Bu2So2lBNz$eO2vg*ga1W0J$OzhRB2c4Tm%s&C znx_;~QCECT$BqGx$Bw01IhD)cmM*!>Zigg?pfm6^5~^%WI>bH{3skrWHxzoIOo7d# zV;~*Sz#55#CN!Bx%A*zF@#;0jUdX!vn6tu2Y!D_Zb0-pXdjMjl4?uroMa&Hbh@Vin5$4612LU5Z=PKC9IYr zA~)Fn3eLsM$W_?a`McKHOYp6}Ad#YePBu4_;BVvisMH`Cui+$x4H@nYgf=K(Ibw2& zbs{=S@@7g~zSCP4+)8PzB(ngM1ieY>npG5ED#$K@QCKkyeZ~*N$UVJ&frc#HS5BDK zO)1X2u3FnhVkke*C#hPg@xmf5%VHkWn-cei&2XkmrHP7Mt>bo_{cc?L40pV(5Gg2a z;x4{!vdL(9=YPBAnl)d$qX1tOh|2|?d2OR|6(z&r2Dg~A_cZgmdeEF*ypXCeP2z~gA@1F!8CuEKPMTW5)#aVx)+ zU=*KaQ?4UB8Hl1{5biYlzSKgp3{1+3-4a_O2moqU3pE&LfqrMQDz?HCjpoM%&u4jP z``}ss4xUBSG(5|0R4+@gD+pK=FmV|-O4krk)Ix$dE5O_opCi&bHm$YyUlDW3s8!I&ON37m$wu04LU z!~(WNUSXB8akF8mJVrK}l5{ZGVuUWb)EdF<0PrQ8-*8lcrxjOC9a_T|jT(q61_0%r zMZn#pQ_mcOV|GnkL*Ud4X5GAsQP)d~RaiiAIj}yVR0yO}&<#aanN{<#P^H|;&2lC1 zeYC$wQ|J}`(eaWYr?$Jqt;na`Tg;moGsp?dt*?55wsJFJMtq9g%G?XkYRnUgPl!UX zwW#nmcVGr6JZ3~A*r0GB#p7;CdNn2EJT_wudn*}xSE2sK7M=Xi>mGR_vbSlDq9B?I zz6v->L8aza;RP(>3RoDuFUVSzJSh>0?W2Bh^6 z@));K9|5pN)i0GlLi|=;#8m?8w8%M|DQrpaKuyS>K&oBu^L^3tD9424EKQ|s2F6|F zT$xbG=##0YzOWBxoBDnaIY#*TbO*EaAi^@$Ky*rJ0yyV$FtIkuov(SW3khoOJHfwSOto9K`oJ6mXm$`R=Az7`3%&h3Z z4&#IPM4S&g`MeMx9)J`D?rhDHWPU}j&p@WtNOyTf9d#NuP|14>Sr-s{RIgXM5rPu} z+$zDQ(?UgEMDOD%suyWzJ430uFHH0d+gmfMb6f%|4pt}EZ`*>PnepB);_WoB>9yiO z)MB#`>F_ zjpThIEdJZvKap3>L=+Gl!0e43h&K1bwpnfQMf``SXOW7^tz&C%}G2SsRKJgB{vv+ zQyGIIU8HyD)=^)BF&QfUrdShAYZAb*2d277+;C^|lw!9#Y1f12%qL61Td;OTL zp3(VC$E&ee#b9ax>#?Um?OiHg)9P*6x+5|{N})928Gtje0{WBf!eH#Is77^{x8LRM z@W0)Hw)#WE+YLsm^l7ooB3Q`o|HrX(1_|97OTV)jdCLSi(yU>NEUZGTLJv>KUWiZE z@0*|Ni;IlB73~c-)$Bd(+0cUmEsjjCK1JYyX7D zZrxt@3lZ!y_Bw|R9VFX>k!quMsuR)e&7r#6kl}Ju2QIDsF1~@d1~D00=o=%gy|v_@ zQMqr9{HcTe6_Njs4f(6|Gfgfks+S7c9mSu6BYjapZ=}>75a}Z{P3k$Z)>1wm!2eN_ zU|?puimaC!EW@kj`!DsyQ|IxwDgVScy2A%r1L$)sgmSC8? zB^M8JhD#QLeVvN*bJmI~HjJ=6e)p6z5LhqKpPx7twVcmR}Z>wFBW} z&|Vm(S~7J__Z{$0mC4TTtJJk9eKMVL_2FEwQOC_!S~l7_3qg8+-fM9RK)(o6{tjF>Ii{FguvvC`j+Ih*x#w-M8(X7e90@C3ey0z11X8fJ< z27?d}B5nXIs(~WKyO;=F47W>FoPfmI0Z{}DBDMJ59uBVbeki1n&x=YNX#08AA;2C0 zIyCTIgD@f1v*u7zm||Y*72; z8-1=9`wTP37s`lgE^v4Y^%1_=7e8%+=~3D6%uelU6_HjZWd4+&kg8PkTYd4|`7_-d+vdOT=MSEe0fuKR!Y-mVCbrA#sCY1y# zAu_bJ2pY*p`~jvMGcexxD^=*SuD7w|b9^OaFqlrO(hJUpUBL@yAcCM_46xBVhIqIa z4}b*wLRcw7prL0e&_R71By%U9lEG?%K8m9D zYT^9|8J|Dt8JG;qyY}AEzRXpVYHUDD-fwL_X=p+k0#1a$l#CZ!QH0ME;{<4KPJ0>( zI?T;5B_ahza=PSaT;XErx;9b2uuf#0586hX<@pl)XbNAVzNK)X%tWwwaB>4zC9;Iy zVA1^AsgQIb!twu2zV#AVo!-EeGWs;hta!cI0E4p(_NHH1LnC##t~$J#ESCF|R(yW$ zM6&AVz}BVyQ-@a-%J$35v2#Xk>_-4f(1kcox)qc-D%EGmMgrau)=7MtxNY~d3M)gS zissLi=J)#IGA%ne61%<``z1KdlTGxgzBrYEzR;3}unfSH)lsIWb7HRv1yHpUARkX`w=t<8IFjW;BmDTNo>?a4jxqrQ05+~iDe>pAt~i}F&vTlGMR z$WA=fn-v~+hhgcf`VOJCmkqJ$-A&{~3PwPfKm|y?Xm5nlsL5|I*lkA`P8Tww$ms-+ zH=lMSs~V@#fiC??rK><$Yqp(J7+{|u+mizspueQZ)eO1D?zL^^Ji}vuYUubyOx4Lx21G09~I&#r> z`r;Kz9y1gm?F|Gm47t7Ep@Hbhp6Gl0_XmB^54z92gmbVDJHds9q5+7{Pxi#8v(wu| z=J)rYG<^8#$4Z+!l_>gAYQJb1rggxhXmAaAs@Lq^fmOUv?BN?c}EC&$`_ z6lB3k^y3v^w+Wl1^)tTV*|w?47fHz`>~js40h+LSyLukc&hnsk$;gdm~jxW`TS z>^jP!6&7JrVci7AS6EO`J6chvKqOlo6>A{Ty3LM?9fdiIF!9OW zs#}!@G}>~^tUI*`D6fn0b_wPFnLbH2?hk^|nl54D z#n6_X1>BMJ$|9iHkOi4p2XH{G3`vW-MdwVUJk{2ASCK<2cAZt2*uWc52-tKwZhnPC zs~roPB<>lF!={y|r|@K~J9TGlBx2aWc3`%}>mWMOu*O9()Y#-fA>CPZC8058Q#^TM z1ws5TLd9IIh3%4IUDMODRBYd5J#yzZ)f0Q-zO$fGYoH7gBH>$vl@RZW^A-r0vlOp{ z7>lo|L|8TPp{-5)-HMN?p5j|E@WCDRumkuG4PWnfjSzOjY;*~YFRNSGR!(m=6uEE!gE zgZtsOnD?QhUtI3Wn2o8-u;rf;cKc+@`Xm|iDkra7!_mcWIO zNKbkLw?Jna1rI(0AK>vKl3>Y*Sm{Mxj%Pw&g3X|jS-|@0jnIH%(HbdD;roHftjtUH z=h@r6@fO<$5#g2R(EHIu9d4AUg8{BlKo*qP(L|NpMw*|M0j+C;ecqCDS9$r=*pYE{ z9akAY%v0a{D~v9M_${I+~9L7U>!`6<+}ZQfKmD$ zwpCT063~=Lf#!;X=t+@bdfL;BR6}r`$c-gr6H8>y3M~lr?{fy~)K5u06ZBHqi}N70 z=O87>pY-MTB?XNK(o8P59RI8@f|<&m|Ihm3+%ovOAl&n4HEg+(uyA~V8riin+arJQ z15xy|zWmcJ?B95dU^?I0s@JB@!v(f%V4=?#O?I_wlBg@lpA<4_q#rP^E(;$AAP^? zi|`Zm{;@CmBRb@;&rSn*DX@H1*GAzhTg44gyV@K^K=CC446U(EXRC;y>G?}vgddsr zzd7%J>VQA=~qw ze1snva6bp!&jE*Z0KwfemXGiw1CDdRaSrI!0X&1AllcfgGT=cDc#s3IP`-i((=(Hg z@FN4}Ibfax@E-^8uzD8r5q@OAqa5%k2lVRz9$?Rt`3OHU;4%kX=74wTfD#8(@)3Sy zK$Qck9PmyZu*Cr%$w&B+0XrP9!vO<2V3z|vo{#V&13tk4pWuLdbinf*@X36H9~tmz z4)`<&yh{gsmIFSQkMJV{zQ6%r;DC4QfG_3uN2y&kh`f?Uqxm9Y21tmp=}+oDh+fR+ zhLvl=iyniJv#QhcICm(EU*TfEmXGiQWRAYUpZpwfvj*~YvQl%z$VI8PO>FFC+Q^?m zEFvzVO4&4cHpJU#els8cvji(TVQRdP8H=dJ=$l-|xAGBwxQyZGJNd4Co?!LXM5D*Z zPIBXqQ20N;vvsA?hzHTReF&<3<@zA3^l8)*DrW(so)a}dJl`U>w=vRvt7mi(NO2?yblwACzdPixTx`r}bZ zl0A8}Fa}LpkU^6vEvs$;7WL%jpj)8V@CM}#0b+8>errkwgL8bweguCZf+&#O0XGJN z0q8xjW##AG9_{ETmpkV^^e=y(RFIYL^WX_n(Wnu}C zhh z-S;N1uds0oms6-DR}%(V$X07>i3 z1hO{;@m3|N)*oPb#^e0>fh#+RhJ8R3?&fiQ@PRSTDxxaX2-SoVe)NOk+JCX?{4l}+d_tI>M^rtZ@JR5ybj2X5=twZjEqY8e67FNZ_U169(dF7>_>MQ z^<74Nmr>t3qyD$MjG93%M%KE^sNX1o;3sz(^<74Nmr>t3qyE`lMtzr27v6Zy?H6jU ziK1WWFQd_a$S?f!Kl20UoNbue8A`7{i*Ock$iq`HXO&ed;j^sb$Vh>sR-JB|k~T2{ zzNisXjkZ;8etUzdo#kg41=T9K;YFz2wN^YD4-Tv1f>aQ^uey0Sj;D-oLC3(H6P=s4 z)pOA{maZr?7lo+|CN5J{_e=>@Ov_PEgc71$8h$?n`(-|V%4o56iztvTmC&K2Vr%)G zsVMq=ejqz4rS3B4CEjqh7SkID6KvD4W0iJa1X>kMl<7f50vJZb-h_VVbBhdn0F-UX zv1Em54poHQEYs84Xf8DWze=MHOV7{k7lCm=97zqH74%ft7`$4COqP%0xkL<8Iu#V! zNtmgi3F~9lnq-#%J=Iy0EM$_?cw)X*-?_SB)&tY^$(Ykrv zIV8I{*tcvTU`7FV-C=Wh+L%rpT$>4Y0)Ld#b$fGjGjNRJqXL~()PIu+25_V1 z1M#*T_2s6_-(oo`C-%=71D!mkFhwF9gic%YBQ`u!h9^Gi&wbl|#??Fv+l6>rYk&y% zVF8C2!xA4z!YR5CH| zv9V3!ga{Tlimu_%3X>q*g_veGf38|XRg{(bqCw1PAa^9z5n`W#At5UK+(3yHC{DLbdv zvxEa=MM$^Yr!CtvaB(c;-MNE?bd`kUNW@e%To#M?_uG_(oIF%LV+NuIU`Ygm>$fWOUs(SF4f z*sGW@3Ce*wkXSD0@}wRacTpp?sjz8M;)X;oK8$;hcsgXNA(2IyGaB?#pe# zgAMn;>+=bNyIe*fL*I<9X#41i{aaH*KwLEha+&x6$(v6YWh7Zlqhn0)OLFc!VS6s` zAXGz@z2uMi{FJ%oP{|E>2v;X@%ktlIl`=f;lC(Jl2XagD4JX1l8n}yn4Z3yjMvUDpA4P{uS7IB?2D zQy}t(fmF@7KYk&YalTO!kAqBb7XA!`o6Mo>@CJl}|ANGEMPDAIhBe3SXU|sFM*UQ9 z_{4w7!;g-8|G(j^<9d;}8~vpXcH_Y|a<*SpJWS7;gi`?^_R}aHs5DCO_#vxE7aC!5 zxXu2OkK+EDUEZLs?!I2Xy2Jh1lLcYnsu9d-%DE0WM`M3~{B^(KRJ4>mfZ$;Oe?o(F zKo6_c8Y1`ICgM@XU$NF{rTkzV53-O+6!qWqjw0RB>wZJ`v~6fo#XouXdY$s7bruHe zA?h|-5Di_}$%iI!ct_xa&gBQA=-#$zPhrA~f>TR%q>wZ_dr1f5@nBFCkHU$Cg7{^m zZQR!%KljK=qf%KcZJ!D}rNMZt;J*G`!H&x3{xObnkHO)Yi{3-;IRDpke}9A@dQb>fRVf7TbV>L-A3GQ)DJw6#GFy#QL>bSfO!P?l}5- zg)~RqeB+2F+GKzae7y0|2C||X6eC`br$`cR7`}uMyo+F?VAklk>|_TkInh6m;W-*^ zB+Q3fz%R>)#6$w+AkYcF0msA#e3TyxRRi7_*;04LV@iEL1m&gP z0HsWF(H3uU9w)mmYn1Q3C_z?fvK}#UQo%-JTujySYG(Hj^7tO=kMKjZLt6e!+v|py zz}GDM3UrmSy>^$-3jyHB$5YH{BGUxlg3e#&nr>eFbx?G;8j>7dCh^bckZ z#f&xosQXUznNLwaK$LW=!F1OKHdMw3xTolU*3Yc;mlW^~E)?df=azJoTqSP6q!FAR zLFGScVY#9V52eK`@)a&vl^&N$)BvES1ZxO~1N=-yn3zXK)b0vP(195#BdeI*=B3EleLMFMg`%oOj z#f>&ADCoI}+6@}%U2pL1+KYrA8(wZc9z(fYwB4u?&cGqU67RS-7F46AK8{QbltbD? z5oEgA)o;B84GNC+3LE)hv2=es{_=p^2;Hp=OxIf*zU$9m`yw?q5lSkO2;xAQA}=xD zYZL%PZ3}KvXj5OdPcf&nM(QTvW zCIA&kg5mf=A#=3aK+gbKW2`2})%R^w20nW3v?@B+y4M^MIO0elaknP?Tnk0d1J z3Mdb;FO0xo%^bdSXImt6U01aMP(=2K2 z0!Kk-x+H3W6p9e7P|Ybq1dJb+u1sr=qY0VfH8|fj^c>nmBn86CL2=M46nuzGY@$y6 zoKemUz9K~f;e(5O7Xy>=pHs`s4w=MZG^pk-@(Z?-!iQ-?k$_)>zE_yLMIGm#sBRJZ zI4BDG|B9$t2KmU>&r~Yg_)`9Cmew`DfP+o6sauz0Tuo?lzwEFqhqyf3vZS+Q7kGM> zzCFpA!EVnX*5U7RulUb|&*9K%1S%{VB@tSbmJB7E^ka+3xQNFfSY$*|xnstX@_Eif zLWNBwA;LB{?5#aluQc(*Jfo?g;r-lgD$VNwD3ngImWiw}a62_6rVHhR=>N)n*Ubt} zoSDk33}n-pRom zqLJL^!!`PA!P$Q_zARbt^B6M&W{=*J`;`4$$egeZm(XIJ-sJOS2xRqQYhEz*4S-k> zOwdiBxuelF(f^Y>89#12vRUCN;64tI1V4d>JkEz7DtzF957OXMblY~Hl?1r2(iL9XCXgpN=O4aQL+vLR56jVebFZG4@*b9Soc+XGAtX`S-34oo z%HH%4pvC?H*3bvmlhceKdk8r}m8lE*FN)p6wBO9buCJO(92Mj%6t#}O6+@b4z7dhA z@vS&^U!_$W(Gu(g&=MXM0siX~(IrasPxeRnp@w#{H@YmpmHH>5QvbjR)`c6XGQ8H< z-EP&7BF2s88sx7-#XB93Jhe0R4~5CgQB(GHtl8<0Vuku92<7+1c;2OZnIV>;ZozppjOr!?=JeM~lA)r)oBCh4_}-)Kesf4gJq_fONz7m6rUd@>~lM!46%k_EPGF}7XrtIEal%vgEE0#QKtf3-2PR=xHCxubX+9XHZ#v93Wu6!2 zc8hO%!fEs7UQlk1*z$X^BP}Y?WwF8|B?{ibIII;Yw@UdxQ3aL*=i0#c3hi$ya6L)rEy`q1T7V2p!oTI%y3%K2mXQoqY-faFnWsj2qtN)<|dL&YOaNg-v7(h(to*>mxz)eIdEfcI(j9pujmbEOBBx?=?TBPVMlZ6FiEv~` zBaLKDB3Z&389UgWdo}ltW}^AWy?3xgp%GitnhmtjnyqP}H7zt^Yj&XxS+jMv&_dT~ zp@kN9p@j`;p=-9#LL0WEOOpNmp68tNzIWzIHfiI}_K!aX&wK9sp7We@p7Z>Fo@29{ zLG4~Q!`*U$n2?ryKlzxgn0X^V!^~|EiNaa-K@*s-T+Tk^e|#s;KH`6UH_txme^ILB zWB%7|6fN<;UbQLvg#C5-O7F#7buQceLM-;Z__6|)f6=SHL?yj!1-Ine&1fRODvy<-@n5? zvhBnIv3y=;HR^R>VKHNhr&vt;SEz~;i{!3jRcv<_X5sVP>%@@$wX5yRdz+P4j4^kM z2mJd0aVgd#iQ5$?p$BP-K}vF5!YE{JdzsoKakMEpQA|&-^qPyxBwV~SA;r>3_)wUN zesseb^*N&I*#k_U3eHI4vF2?BVZ~R_AAHH!yIAc4u}>dVO0J=+BtO8h&dM9w%S7y0 zER}y;fgB~3pFOf^*@PLa&yTTmGKU%d#x!>S6xw!_(K_w5rQ%@lbDau7LRg@$Ad+Y| z6f=b6N5~k4r^Q(=pS27&!5Qx6ElyMxCiSqb_SCcYVCO9?TCzjmg~p;gZn3vuhkk%w zf(%6*SNf$ut?Gpp8L73V0mlwO(%!>z91IkFI$XAez4_tzceFW3VDmZ;s@QX*TeFIAXeQYJCyoL{ijY}RQu+}PFZVn zgYYSC9oew1GC=f)7_iRd<_K%TTKhILjm849G8F0u%EO``MCt!w(2)46m5zHoRAb4! z86a^CUVCxvnfOw@e5-CA3^y}WmfH*%=FqTJNx0)lj|O9~zU-{6h9gjKZ1}ZNJYw%+ z-ilLK;<7MEH%# zBrJHeZxF4(WP5HSCj8;rOMZX}c@ard>o$(q>KhTcajF|kyO@P9+K=_Px~5G+Fw8c+ ze4Z>tVRZb}mSn1X!u%!}h2OaDW1lmhyJuzH&hc4uk>LZYGZTClWALZf^Q?!VYAFzwR#%>O1mb%TPYd4aJ~6(f)ZC%YKY)SgAJ)e6;fyU$); zd$OFS&BN4@px;zx8P+<&H6_<=?2I04lx!aadcdMBBl(qG_0k(QUNJc2_m)54kl*LI z?8E0w5x=zQa`uI-BaL7P!~=#Uk${aE=#pYy_ECPq>!b5DKtuo1*3swo?MBu8;Jzah zY}sKDZjQPPS?%)^pvdZi^w8?4CWzXV7v}X6SK52dKjKb{q+SM*A&0N`e;yA=MNTlu zlW)m2LUDjE(Q}(L4oUjirr|w#e-~wt3j(`7sH+;MM~<*Kvpt1vSRWK8kx|_`vX`i^ zJB1<&hQS(%JEKSoRXIABET%#SBh8fljC(9BIX|IXr()iKY!06YbaV1J1$R?I2T^s3 zsk4GJu9T@BFQZ7ti&Hk~QsIqaM%+9SmQ8_7rtMVrRwjk3tbaVswt%JN&idUK0$>!_ zb;=jI}a)RNT{v4-0DY)ZUf3y#81FBYugKc?y^VPQ^ZiPNx zP%MC4KAuNGgqxDTL0kPxOk4tb7{9d5;RSggZspLV|mCO&GP+j+73?On4G#h`ue-y z+M2J%;QWJULa3@PW=)Bu-&z;G|ISUs?~md3{tkfK|84s2){K9N4teLMvFx|)uPg7| zl>N>+D|7|=0UR;kHri*_uDrdG2ks1|zaqp8{%NRiS`I3YhN#o)FiibtQ^Z*zF zHqK3CElxvpBrL`+123bLvQa=6<7AGt$EX#VZeX1lgV3ck<=%B&gWFttBTR->T7~VMEM8Pu?;*qrUUAWlBZX$WB zcJq9nzM*XcQ@f9ss@4n%dfXDz@q+TUSEjQmBLO5N6r;@bp=_@w>54sfKes8LSDr=r zO~_ByuQhEtn54+a8a~?RWE7td-QtY{yTMCk?UY?qwJ;q{WKSToTfDlnRM91;CWN9n zCW6J`03r>-+9lm+*o1kkEX)$rXVS4^HATO{PIXBSmXul?WQIx{cIet&j@Q#P(TB?G zQ)71!l+^iGM+vUtQ0T?O^`}~jQv6!#hIuK184&`XL_OpN1z$alcq{sQ3mQ&I&N=lp zu=UikR@`_AvN02@^2e}N1TT330NjR@;OwUdBuGhhIx@l0djEtv3n7!yGSfIR!EGr> zu~mXZRt@4e`k&=GZ*dP3-^RB>auI^Ia+9Q87N^S(OwDo4>bj9HYfuF0%DerVXj4j& z@!6YAdAb=x2{pvuM(`aA9@{wH%C128Qk8PK&6az`oAYBBbK4i2PWE?+!Asfb_#pC`5d>_e&uTYt;{0N8y;y=A;0_}+{96jAgD`h@3z{aHi(n}V=U;k%0$u^ z%3y!KiPlRXTAL_weUtvXGkfW^NRjW&00OpW+trOVJN>JTbnL*mnQ2%aC;^o7s~n$b zC6a0j8W{fdTWGjXO?TmS{IdoqyU|ed?fe+l9bJ~?gn-cv-*c=S$IS>~bTis_%2VZYmU&^hrQ!zj!trn|28M z4{ES*2&JmV4`RZtn)0c+BSw8qP1gcn)mUGtJFb&h1gS0F9EdvYG+U-l& z+Khy*-SWytahfVBQjgt2U`vGjyahenfAHmiC4_w`>Jx}b#&Wp!#W&xCGkhzAsCKx4 z&11fcL*4=VAA7y7HXk}g9+yOKOYNqD;&>k*>=0lOn;br1$O;SxUejSPehPJqwj$$T zk8zs4C|q;aj-PY6uF6uBh5+^7g$mpemtvKIw;hER$&JUV z%Y=fF2Y-@P84hgR)|wMxtb?U#z8*h`=~!@8wtA_UbPjUQk$aD^fVy@8!-tvnX-Zcl zXbuYB2`sprhD*5nc=rr5bH`;}?1sPB7Mr^U;KVBx|SpJ}n5H`$qqPHZny-l&8n{`FSUKd$)}o57HTuw>h0LNN*%iwd2(gu;7o#YTwj~xXU5UY^^uX zLJ%mXWzlc8Hu3Pm3*E{3yifI(Z6o7xstc=Kk5=4wnm?oWbbX!mo%!%W>m+w9@)DvA zb?7^b6Pr@agtMJRqG!ij?e1)6fr}j^oD;vr-SkPD2SNdS5+tDhqjoBT8 z`W<18!*z&)6$8(|K2+9E$Yo*bUpxh>+lyZx%F{;~g#oM?3-jjug!d(ty1bSsn;10q zJ||krPgumQF-kxsmG9lO5|_@KAb=OzmAT|&s)WDpO>0{JW_EPY$fKfJ==fO*=FBR+ zXH$c|ITUY4i2l&5=9_l zJ@lC{0;(R$&RNYgoasxb)=Ok|WBJO5jmWsB)e3iO8LcNP+bQB&@o5pL z_*9MiTXL!thY4l<#WGdfjmZiEyKewr)qe;C7DGB10tppikm~p`4S7P=__hcXw};%4 z8>uxLIRS1ayqK0?FV(qR#U%z-Ag(WVMM~?-LnGDK9YDc|@E+-!+Oh;#SVv>J2`Uw9 zK>R}qAOhNG2>RVqr^AU&dZnqU3-Qf#A(NAl{y@pt%~0*rshi*`YR<8Jh9VY1BIuS< zMF$%^R^9V2n~TU$*DM)$LhLu~qt}GB}r zd1S#0?FsXRoSN(JY@7QsjnY+IFXY?P={5SiFT|@Iar_H50fpW!+F}N@3|_MsyG9^R zz@E5cfClj#3HGwpz!BmuAZKgW!#5IL0m{#`S2-j)5+af+7?2=lj?Oa|7FIbXgzbLc zvYIiyaVoG3cEhEVB0BI1{K81++yTk^t42aNAFeK_MIOOOLY=W-895=9l(=3je6dcO zbsxJ-@TIZrlCu;REij}=dx&arJPt6`Vo6O}ChB)#aOc*yfrx!apd$>gOE|W;s!-+3 z&InS7G!Lz#0aC1<3FJ0abelxoUJh2>(c1TqM&j#6heSO}+AwDk&-l~)Dm&>mWq{&h z+*=OY)N&fkclw6f_eo2P+Z=RcH(-b|fYFnh5s8C{5uMinb|Y zrq0fjKW^Koj&UA%i8y!-9fh^9R6}2o=i91q)}*t`-_Gv$Ki;xAd(i%R=1SJ|rf0IY zw=8VS_*a(G_ioOXwxxU|WuDEgEH11BEkM*)2bW4)>fvyRdMAy#`g>Fh4SlH#qo_6)Zi{(jVos)6_@}xGAy1uQYqu1uva)*`dB0pk>O3K zx3l92;}~~7PWP!?)Z!o~u(^y$^tZH5Ovf++8_BHwW*H@BCyf~?9uZ?^38SmV@)QPM z?&Y)sVq-k<7E6saOI#>DWcCe5M+ltB zo}{Z(uA*`%kWkbUt4Z+BQkQ^`@{aYXNL~_n2(ZVd1Nsq0%@V;Q z=e1w@xPnZ+e%RY=#PBM`k>ac7PE`~W^92{f>#?#@4D0l-mB`bA`+eLbacOid4X4|a zmxbf1N+k^MJ*2J@tlbS^tbCM$%U@9YxI z6Y(jXhpvlV$0^p9U{xvGE8)fJCIpsl8|HM1iBWs?c@D%}lRIDZucvF%dn>ami!*cW zcwKshL5^_5O7a-&5RuVw5m)usSREuWJZKUzQ-%z5UYt0)d>loKY_X}OK=8T*j64D+ zP<6&@c3?Bs3---IdaDlzZtU$Yv@S&;Hmw6fx0CVn)qr@uSNakw9ZO-b%HbyJYn73G z)3%zG#(4X-GPjtv%H57{-nQXx$2TJ;VP$&rwv=BVg~`tDB!uo5l{ApoMvt)d`CGR2 zTV3{_HiYQ<72Ns#*Y%lUcI5b0bxHU_>m!@Y zH?hJyPpqt5SX&+L|0o|pp9yw0u4jGg54`6ClKR=uO>f$ky|a{KNalsC==X>M)B!<2eg9n; zWZ)|9rmSl3BGp0FAPTlu9Iu+rNI}7GgCP3tvNa@Xz?G6xCFW+r7l8s+iXr| z?K0E&O6PKaWq>i(daZ3a@}Jn8@3z;KT$N?-HXZ3>n-?}^?+t%aGQj@2{ISj12cC88 zamYB=x?7;kaJoCApFCjJrLb&z4LY!}Dc@iDP%eSG!?@7;!sh&7IMW8GUAlU(oUKjc zOPlk>Gid=dm%j7f=Omyy!TNhU@-cKN%)fHj5BwP`C<}I#pR*6z0xfL%)aL9%&$>dp zAr{i%*ZM0x=Oc$gIUds-Bq2gU4ka5x_z}W!I<-x&9B#`*gMo!w-c?sa7Gg{xAs-3A zJ(GR(Sz();pnhxz;|Wrg!-#KY*V*L@geWfq&aM)Qy1&Y~VT_O27|(z;zh-}30arfp z?4wn-Jgi7RqU1XVkG<2$5hHW8u<3X;92M1Xxl^ScFGtw$TP-{80yt`ATFY!G%RUvB z>T>q$&kB6&WXPM_uw+&;<5`!DavvU1-d`+(#r({+k;x!Yl~{gt^Tg+_@p?u4dOF&B z><~fIr|pk*YFE)8!ALraOY!AvCU1tA!BUBY|fTT&H zQA=a23?;KI^^^l$tn3=5f<6?G@fA1_VJI{$8hXMJIv}c92)o$8A1?7c+QbOFmGVMq zPVs8Y+jb`UOp9FlQhui+weFj-pT`j3?g|yLsKAMJhy+PZ!nwij;#qZea^$|DplEnc8>-az!I92?=s!lJ^TU<3KNj-p-4K{|;l(v`3&()! za$Qo+y_pAzo@GJOl2~bs&+mzw8R3nax_&!vbQAgd z?Mz@t406cVZRGt|W6;Wei@4uW!YUE6z!j4eh+)&&p; zhmlPYhDQ#Khu&lU#1=n|0(R1U&nl0hJ@s<#A@&|h+3(Pej_N3J6pIxs3`eL$lOMJG zg8^ugj!_@t$zC+ExLDycU76kvW6ZU#G44_$F&_+ZV#<)v` zt`zSG2fIQpUCiy1J8!DJ)dM|V+t~0TmJg3UXgsJ`<$-UwEX)g)p_73+dHdexujz^b z3pEjbo$5qH@ncL?4NteI^c1ye7*UKsv4duIb1H@r7P6rbL$^|*FKp4-g%*V}J`2i} zSs`nniWU{(Zy_uqXr<#J?pOiiG2yPVIOgIFKHl9_^>s8#vXz{cka_xbkw)axuH`bX zux(QcmeZCZ7ZGz_v_k%CI}F%mn@%ma!FtMOd^-MEb}4v!Ah21gMSnFJLkORctd!Ab zN+&^|`tjQ8L|Icy%+dtm$Rt-I#WHc!*?WoKKjDSbHj+UT65^d^{nYhzmF-5Qg}N6X z*Q%}Oyx2jk7{~xNIq2H6JprEZm7noqnDTh7 zBA8Z%9%H)KI_a*4qEKghYabtYf?bZ}1Vh=Q@6@jbEv9u&r%8Z7l3ZF%)VHX88M+mG zSN#XyCglY@5UHB>j+wcvhhjDIYRIT6e5rp#BpgE+P^n(=^!l@uFw~iiM`b8IhBOj4 zpFQlP#a2BM6e3Yo8sGghUFukT8`$kc%EN13n-Cr!MKhDrz(}VqwkvipIGY8ctLZQm z5|9Y#YZiL*txoeHf|hQneNodfAukaFBZaK0?{ldmK*YnB%g?(B?+aKL23YbZW81kN zw|UK=R2>XPW6KQ&BUSJETbtdef75kXJap|B?RG)jm&|(cm2E?{>?>C@U!ac=VZJci z9n%8d((O^#NQOdRb}VsM@?Ex(GQsTzWqM{_`_|^Xt`F=eWWPDMcMrD3-(1P9e4r02 zh!_jycWRo$vt@IBeOtO>ubgPWmxNs7^)n=Pe*HgWMQ=1{YT2IkEBXyv(U;UNXW!a3 zoNO{_4F|-Ee5YcJN$+hmvhPC8GK`MrMT_ejqr7(f9*ZW)-pT;H|DA0kl@~T5 z{DFSEV#aDeXTzei99TnXxhVq`>&oc2^rD<1_Ut~s!+CfHwdT@GIvse~UHMm@sZ~`4 zTTGABLx0^358VNe(L-TNoB9f8*W9KTku4U z1uH@+iJ~};J{r18JRK*NcyAf$I%qgcpGgbiiku;QG1=FpT`r-FQFU4A2>nXrLejC_ zSP()%?sbF{T^8)daFg4)EC$Fnq&mUQ#6;EA$E#cd%MzC6~rj; zZBdbjzB|)&X^tw#d19(n>x+wCCQqUic}7}A{M#4ErHgylaS@N8OeRW~kj+h78WkwWB4E4w0K--g~UtH0%?P*GkDuU`Hnwzqd2n3RLsGop~-(1{a$E|K+ z(lNUAF$>PI6s~dbBcvJIH`G?@%@#zbg^3`}B9$$le+}+bZj;)&5eq%f&wlQ+Hdn{% zVn!zMQ)P*K{o>lOwa9=rohTDx*tJW!q!w7MVUCPXij4(Y)tGjxjmPCgJ;dKBF*g`> z9pP6xRyPm{R;cghNQM70rR}v>+a~#o`Z*dU*(XJ#J!A@2v;kCJ<9?_%B`Znpb^U<% zODrE?9oK!~LWk1S5%f#Ht3o-q&X#<`*wH?N4K%~j&&^b0I)qLId&B8P5SRLj>9=CG z6EKo!g`YZbCdvl3I}qgOJD4QjK5{TnbcD@jcdc`2Bh?;0fyA9^3&k**tOnL7$lSj`S_c8>BJT~G; zOVR6H<2u8ay=@({30L^(TC#P0L<&e*R&t#;kIu7A?w=uy0m>xX7iUN$=>}!u_Nw&J zUpbg^dF>ez#XFj+eH?ug(W>;|ReHJeYP}GA%TeISx_>FUappV>9(EaeUNH>7CYbLubDvAcTL&pUE$-JVh+&ym!GT`roYk_ImBQb~x&X8B5#I*dWioF3bu1QZM_@gY?o3|_XNUx(SM z+)z{r+>uq6B#=-5*+oSckhmapVRrocTwKH{pfl2Ea7!~H7sJpS%n^*mkvXgN;mIuF zXdpHyRc|{4WcHqS)VqE=bZYp@ZFzRX_L2JnjmO?;7jn)JzDAv-fR6(N`4>IgH@-6rZ)uHo4;?34;ymwxNC_O_S!RcLzW>CN3X(+U!YggL)F5 zzeX?9rWkVyPc*x|V_cT%pw)))F9;4BTwIh{>vk-u4vQSAP`_rOCuVEzOcV?-t~EYS znHvci`ogtdDqG-SG0i?^M_}L)_-W-hbhhk>@lIB>jK<0P6DpE)Y#NS+h%T5gmSlag zDrz(it~k5p4>oxE`IeY&Eae3}AtXh|;7MYTEKayK0%Ia_b~r~BzQo4NPy?L!DOxk# zUmvu>YEJV@uGVMel+`ECB5ARW71Wac4sWbHBC#J!V3N%6 zxtQFsu^yMpo@yRTAXy6{%|WvDNO*7Oy00%Tuk1e;VVyY{s$v$rDOc+$Eqzg%AhtLN zX{+m!@$U1H)B7obkz+de;9U2g*TK1I`#@{=HLk?k7{mP1?I~jq2SQI=zB`IMyL9L@ zWxtx|Uc;X!scE~Y%i^+ZM^1U{y~WgWRO0`V=r#DW~0~w_`e{U|M|4vOR+*{ah}z+&KHaSDXEA zOY5=n6Por&xCo56_#`8rnloT`A)~2O#joZ0zM#m3U!d!ACid-SRbIJ2%WfGk+AiIm z0*l&*;n`L{jakokAzLb#pCI?0O68U7;9wYzLfqE(Z7gBPP!Et9RJ*mjGn{yW=Et?R z$NAHK*&ha^A_Eb2vG7D{wXCw(db;}VOc;6R`gx|e^zF01C9(Z#Z)LY#V~Hr7XDc1% zY52&!g&Vdcd(~hRxyHG;V|&f=IVQH3`5bp#1C)c4IQy}C#!W*^8?;;51R~?6JGN&> z2lSPS9@Jw#fX!$m-)Z_tcM4ceEKtya1RUzuZ#Z-(x91qNQnLqxbZw6hk`3CMnOlzM z^VQq)L&s@4wp@8Do4OWIap-J!z7O$!8F$snD(%5@jlIF3K`=kIk{yy6I zv4y$#Fnq2P|J=cJ%OC1-^6}^6v0(Q5{VZWr!87!7ucvTMiKwqnM zVH*>_I$*!6XWPEmyxX2;&bJfvp#{(Bx_5f*G~qEviRx#usq)={fCj-t5xW}?&F4ES z55=~fTJyy>^gZ^{<8FRkU0I!7P9W+1_UqCM`}K%=w%qD2yyDi_OWC?sX&vM5hqxM* zPvVO^thegZa+<0}qBukR(I3~UkLUY;J>Tp5l~Ane%Zu&4Un}QBJ)iIYl~~m3x15XW ztB z%dGrx$h)1PFHdW${I-joz^c)$G}X^HyHKOKUZrhUG~||`O=2oknotbUz{FAhcraMy zXEuJf&+@lsLiA_($p{h9l^*uHSO&#b!f54(5x}cF?(hh~vLBL%2rD!)A?cvtLq$ zb8F{k2=VE{a{525{4faqaR}B-5Pm8jHY&~b8MVz#j=I)6_)^xtvtRuTLN~}A7wirg z`M$m%27!D?xQ=_YJK*cq`rih1Fb=sN@a^eJ^Ptc6sdUeP@20EmgFY;yFG>_KmR4Cz zwvhNg&}c^Iu=0a5ws?TJ+O~s3fU-B0S57D1hQk!o&H7CkmrR8nk+8h#XBR8Y>4Xj( zV7~gMc&MMAby$d}>PG zx{n*{e!BYS=N8$-^<(?zIEd$`BacHlS;AwH^WSk1aOOcQM@Fh9%zp zsFe6R7mCuz4KSw{{K8q)^2SC5scJ6TsiB~FCp`9@rUv$vHC$ebkW?RBX*|vvNng)Yf>EI6$y)nPLICLZ|7bZ2&51`@=!QN>VHMnOz zgpyiiUqL)6FfFuj@rAlz*A3rcdnESLw>6C_p_0eNI8>uAF2Nw*0PbYO+XS`^nLr+{ zebPW?K+dYy4ey6pmrrZ`3@A~pV%%`kqBOfiXuOp36wnFeqIiTN4hRrmZk=1Xs7iQf zmgY(IkY%^hrbQB}5jbGE(*8>I-&SJwsYb2^Wc7)u4%NGq zC4?i;@f$Q&oDZQGkHjW%Jhc(3FQ;Mf$;!^Z|6U1%X^%$SbS$kH^dak?Z@`SkG_JYk zMSJ%QzxiFf9yfx`voUQ}GDu77HM-dPoRn6Zg&q+m^Q-)iGJ?ZDa!%5MPx&deS#@h5L5$uoO&L*d*z67v5rbR zmDwS?VdSWvO1p3&xrl-{OuJ=2m^y2oAy$16Q>+ujbw5IEtajkZ+{g*b=@&Anq=e!F zj8f3L)?K5MOZDKQb-#if&q8ZvvA7~<3q*o|^t2)S_^{IsQS_J|v4b&zSFg3#+VZ_+ zKfEK)@3Fgv@UivbSqMg`(nv8ReeQ+-L<;4bD>Aqde-pKjqr(8=k^@ z$*FjTsm`-ZS8n^Gr0tFotC=4dtKDO+LUeNSJLOP0N0uOdP-G3K9A+z1 zI%s;-0zVZC*5xYln{qFBV*xwK{pIXDadIHW9%%cK9I8=;3rDiMexwt!uO5vuPWED^ zb5aB*ekbl4ieT&9a4-UqjM>!=w+@Q{55m#zBd`XK&)!*^%Jl?V;9BMe%c}_sdWR+Q z%5xlByjoUHo<0d8BMyad$cV(HRB(?XFWBSk#?hDN(~=+~$%d>68<7*avcrzpIXE0# z3)X4d)Ui*gBBw#k1tA(k5tnW;m7lg$HaYsL^uoh0fYR{YwSPJzwsi?22Lk9O>TXfD zI2IjNesp`};-v?3q|nzdH0$@AJ|bs+7kIx(pHaLLFpk(RKzgA*5YXQzv!P{cqO_^;{`65D}r zqQTg4B3A#|0r?^%ipeqc zv6!Y5Nb>|XRl83m3h(HepVtqNN35;vvB`=ImWFR;2uuK z>jXOab>xu(pQ5N2eGtG(xxgg8&74bpa?drqvvj0!5WpItq#qE_8A5G|w6D0!a;Y$%Io zD%Wu&L16u@3K>UvvBiz6@Vt|p=Jw$joE~fL?Z3y%ww!@=t#yZYC+RcKc7=F`oLfc4 z&n_pk3+2y(!1K}J{PbA*V!R$c*h6qu>8H)I-C>M&i%VR?r|s?eYN$Ros0YG8c9>x= zx}VhH-Yw}S6T(b*CCl2|t5p|)XL$5(WF<;!jh-RQww8TV1-!Cs!Gbr(N3*3LI5=Qq z*vRY382`A88?A#ocS2+iFA#@Zdz@GrD{!dektl`Es6;R64_<7f*f-&YmN*p%b$RXm z=|c%IQ5~?H2TmEsJbk%e2Pws5VbFV8=LiN^o}%=t2Ih2tjk;0-kV3s4>4!e@X0Ia~ zCnrse@my515J_UV6xEE#E5P(ys!GEH#)xvui6!5P+>rXBu%vxpa-Vl*`cjLtOWSMpnA3}EG{1jSR?9wi9p~Xqb^_kK zot8J-pO

    (); @@ -87,7 +87,7 @@ pub fn frame_v2_migrate( old_pallet_name.as_bytes(), pallet_name.as_bytes(), ); - weight += Weight::from_ref_time(100_000_000); + weight += Weight::from_parts(100_000_000, 0); } weight From e30e2d98a24b1955a9f7106a324e02765b027221 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Mon, 6 Jan 2025 21:27:27 +0800 Subject: [PATCH 14/97] T::BlockNumber update --- pallets/asset/src/lib.rs | 4 +- pallets/bridge/src/lib.rs | 12 ++-- pallets/committee/src/lib.rs | 17 +++--- pallets/pips/src/lib.rs | 59 ++++++++++--------- pallets/runtime/common/src/runtime.rs | 7 +-- .../develop/src/benchmarks/pallet_session.rs | 5 +- pallets/runtime/develop/src/runtime.rs | 6 +- pallets/runtime/mainnet/src/runtime.rs | 6 +- pallets/runtime/testnet/src/runtime.rs | 7 +-- pallets/runtime/tests/src/settlement_test.rs | 3 +- pallets/runtime/tests/src/signed_extra.rs | 1 - pallets/runtime/tests/src/staking/mock.rs | 9 +-- pallets/runtime/tests/src/storage.rs | 6 +- pallets/settlement/src/benchmarking.rs | 2 +- pallets/settlement/src/lib.rs | 39 +++++++----- pallets/sudo/src/mock.rs | 10 +--- pallets/validators/src/lib.rs | 2 +- pallets/validators/src/permissioned.rs | 2 +- 18 files changed, 88 insertions(+), 109 deletions(-) diff --git a/pallets/asset/src/lib.rs b/pallets/asset/src/lib.rs index 647e9458a1..507ed92557 100644 --- a/pallets/asset/src/lib.rs +++ b/pallets/asset/src/lib.rs @@ -95,6 +95,7 @@ use frame_support::traits::{Currency, Get, UnixTime}; use frame_support::weights::Weight; use frame_support::BoundedBTreeSet; use frame_system::ensure_root; +use frame_system::pallet_prelude::*; use sp_io::hashing::blake2_128; use sp_runtime::traits::Zero; use sp_std::collections::btree_set::BTreeSet; @@ -149,7 +150,6 @@ pub use pallet::*; pub mod pallet { use super::*; use frame_support::pallet_prelude::*; - use frame_system::pallet_prelude::*; #[pallet::config] pub trait Config: @@ -3103,7 +3103,7 @@ impl Pallet { } pub fn generate_asset_id(caller_acc: T::AccountId, update: bool) -> AssetId { - let genesis_hash = frame_system::Pallet::::block_hash(T::BlockNumber::zero()); + let genesis_hash = frame_system::Pallet::::block_hash(BlockNumberFor::::zero()); let nonce = Self::get_nonce(&caller_acc, update); blake2_128(&(b"modlpy/pallet_asset", genesis_hash, caller_acc, nonce).encode()).into() } diff --git a/pallets/bridge/src/lib.rs b/pallets/bridge/src/lib.rs index b4c98c0866..719caa881d 100644 --- a/pallets/bridge/src/lib.rs +++ b/pallets/bridge/src/lib.rs @@ -19,6 +19,7 @@ #![cfg_attr(not(feature = "std"), no_std)] use codec::{Decode, Encode}; +use frame_system::pallet_prelude::*; use polymesh_primitives::{storage_migration_ver, Balance, IdentityId}; use scale_info::TypeInfo; use sp_core::H256; @@ -29,7 +30,7 @@ pub use pallet::*; #[frame_support::pallet] pub mod pallet { use super::*; - use frame_support::pallet_prelude::{ValueQuery, *}; + use frame_support::pallet_prelude::*; #[pallet::config] pub trait Config: frame_system::Config {} @@ -109,7 +110,7 @@ pub mod pallet { T::AccountId, Blake2_128Concat, u32, - BridgeTxDetail, + BridgeTxDetail>, ValueQuery, >; @@ -129,18 +130,19 @@ pub mod pallet { /// The bridge transaction timelock period, in blocks, since the acceptance of the /// transaction proposal during which the admin key can freeze the transaction. #[pallet::storage] - pub(super) type Timelock = StorageValue<_, T::BlockNumber, ValueQuery>; + pub(super) type Timelock = StorageValue<_, BlockNumberFor, ValueQuery>; /// The maximum number of bridged POLYX per identity within a set interval of /// blocks. Fields: POLYX amount and the block interval duration. #[pallet::storage] - pub(super) type BridgeLimit = StorageValue<_, (Balance, T::BlockNumber), ValueQuery>; + pub(super) type BridgeLimit = + StorageValue<_, (Balance, BlockNumberFor), ValueQuery>; /// Amount of POLYX bridged by the identity in last block interval. Fields: the bridged /// amount and the last interval number. #[pallet::storage] pub(super) type PolyxBridged = - StorageMap<_, Identity, IdentityId, (Balance, T::BlockNumber), ValueQuery>; + StorageMap<_, Identity, IdentityId, (Balance, BlockNumberFor), ValueQuery>; /// Identities not constrained by the bridge limit. #[pallet::storage] diff --git a/pallets/committee/src/lib.rs b/pallets/committee/src/lib.rs index bf1e5d59d5..45dfd313f2 100644 --- a/pallets/committee/src/lib.rs +++ b/pallets/committee/src/lib.rs @@ -184,7 +184,7 @@ pub mod pallet { #[pallet::storage] #[pallet::unbounded] pub type Voting, I: 'static = ()> = - StorageMap<_, Identity, T::Hash, PolymeshVotes, OptionQuery>; + StorageMap<_, Identity, T::Hash, PolymeshVotes>, OptionQuery>; /// Proposals so far. #[pallet::storage] @@ -207,7 +207,7 @@ pub mod pallet { /// Time after which a proposal will expire. #[pallet::storage] pub type ExpiresAfter, I: 'static = ()> = - StorageValue<_, MaybeBlock, ValueQuery>; + StorageValue<_, MaybeBlock>, ValueQuery>; #[pallet::genesis_config] #[derive(frame_support::DefaultNoBound)] @@ -215,7 +215,7 @@ pub mod pallet { pub members: Vec, pub vote_threshold: (u32, u32), pub release_coordinator: IdentityId, - pub expires_after: MaybeBlock, + pub expires_after: MaybeBlock>, #[serde(skip)] pub phantom: PhantomData<(T, I)>, } @@ -307,10 +307,7 @@ pub mod pallet { ReleaseCoordinatorUpdated(Option), /// Proposal expiry time has been updated. /// Parameters: caller DID, new expiry time (if any). - ExpiresAfterUpdated( - IdentityId, - MaybeBlock<::BlockNumber>, - ), + ExpiresAfterUpdated(IdentityId, MaybeBlock>), /// Voting threshold has been updated /// Parameters: caller DID, numerator, denominator VoteThresholdUpdated(IdentityId, u32, u32), @@ -385,7 +382,7 @@ pub mod pallet { #[pallet::call_index(2)] pub fn set_expires_after( origin: OriginFor, - expiry: MaybeBlock, + expiry: MaybeBlock>, ) -> DispatchResult { T::CommitteeOrigin::ensure_origin(origin)?; >::put(expiry); @@ -489,7 +486,7 @@ pub mod pallet { fn ensure_proposal( hash: &T::Hash, idx: ProposalIndex, - ) -> Result, DispatchError> { + ) -> Result>, DispatchError> { let voting = Voting::::get(&hash).ok_or(Error::::NoSuchProposal)?; ensure!(voting.index == idx, Error::::MismatchedVotingIndex); Ok(voting) @@ -623,7 +620,7 @@ pub mod pallet { /// As a side-effect, on error, any existing proposal data is pruned. fn ensure_not_expired( proposal: &T::Hash, - expiry: MaybeBlock, + expiry: MaybeBlock>, ) -> Result<(), Error> { match expiry { MaybeBlock::Some(e) if e <= frame_system::Pallet::::block_number() => { diff --git a/pallets/pips/src/lib.rs b/pallets/pips/src/lib.rs index 260f9e947e..1518b9824c 100644 --- a/pallets/pips/src/lib.rs +++ b/pallets/pips/src/lib.rs @@ -80,7 +80,7 @@ use frame_support::pallet_prelude::*; use frame_support::storage::types::StorageValue; use frame_support::traits::schedule::{DispatchTime, Named}; use frame_support::traits::{Currency, EnsureOrigin, Get, WithdrawReasons}; -use frame_system::pallet_prelude::{BlockNumberFor, OriginFor}; +use frame_system::pallet_prelude::*; use frame_system::{ensure_root, ensure_signed, RawOrigin}; use sp_runtime::traits::{BlakeTwo256, Dispatchable, Hash, One, Saturating, Zero}; use sp_runtime::DispatchError; @@ -214,7 +214,7 @@ pub mod pallet { Balance, Option, Option, - MaybeBlock, + MaybeBlock>, ProposalData, ), /// The state of a proposal was updated. @@ -245,15 +245,15 @@ pub mod pallet { /// Parameters: /// - `IdentityId`: The DID of the caller. /// - `PipId`: The ID of the PIP. - /// - `T::BlockNumber`: The block number at which the PIP is scheduled for execution. - ExecutionScheduled(IdentityId, PipId, T::BlockNumber), + /// - `BlockNumber`: The block number at which the PIP is scheduled for execution. + ExecutionScheduled(IdentityId, PipId, BlockNumberFor), /// The default enactment period was changed. /// /// Parameters: /// - `IdentityId`: The DID of the caller. - /// - `T::BlockNumber`: The old enactment period. - /// - `T::BlockNumber`: The new enactment period. - DefaultEnactmentPeriodChanged(IdentityId, T::BlockNumber, T::BlockNumber), + /// - `BlockNumber`: The old enactment period. + /// - `BlockNumber`: The new enactment period. + DefaultEnactmentPeriodChanged(IdentityId, BlockNumberFor, BlockNumberFor), /// The minimum deposit amount for proposals was changed. /// /// Parameters: @@ -269,8 +269,8 @@ pub mod pallet { /// - `MaybeBlock`: The new expiry time. PendingPipExpiryChanged( IdentityId, - MaybeBlock, - MaybeBlock, + MaybeBlock>, + MaybeBlock>, ), /// The maximum number of times a PIP can be skipped was changed. /// @@ -333,22 +333,22 @@ pub mod pallet { /// Parameters: /// - `IdentityId`: The DID of the caller. /// - `PipId`: The ID of the PIP. - /// - `T::BlockNumber`: The block number at which the PIP was scheduled for execution. - ExecutionSchedulingFailed(IdentityId, PipId, T::BlockNumber), + /// - `BlockNumber`: The block number at which the PIP was scheduled for execution. + ExecutionSchedulingFailed(IdentityId, PipId, BlockNumberFor), /// The PIP has been scheduled for expiry. /// /// Parameters: /// - `IdentityId`: The DID of the caller. /// - `PipId`: The ID of the PIP. - /// - `T::BlockNumber`: The block number at which the PIP is scheduled for expiry. - ExpiryScheduled(IdentityId, PipId, T::BlockNumber), + /// - `BlockNumber`: The block number at which the PIP is scheduled for expiry. + ExpiryScheduled(IdentityId, PipId, BlockNumberFor), /// Scheduling of the PIP for expiry failed in the scheduler pallet. /// /// Parameters: /// - `IdentityId`: The DID of the caller. /// - `PipId`: The ID of the PIP. - /// - `T::BlockNumber`: The block number at which the PIP was scheduled for expiry. - ExpirySchedulingFailed(IdentityId, PipId, T::BlockNumber), + /// - `BlockNumber`: The block number at which the PIP was scheduled for expiry. + ExpirySchedulingFailed(IdentityId, PipId, BlockNumberFor), /// Cancelling the PIP execution failed in the scheduler pallet. /// /// Parameters: @@ -361,7 +361,7 @@ pub mod pallet { frame_system::Config + pallet_timestamp::Config + IdentityConfig + pallet_base::Config { /// Currency type for this module. - type Currency: LockableCurrencyExt; + type Currency: LockableCurrencyExt>; /// Origin type for enacting results for PIPs (e.g., reject, approve, skip). type VotingMajorityOrigin: EnsureOrigin; /// Governance committee responsible for overseeing the PIPs. @@ -377,7 +377,7 @@ pub mod pallet { /// Scheduler for executed or expired proposals. The scheduler module does not have instances, /// so the names of scheduled tasks must be unique within this pallet. Names cannot be just PIP /// IDs because names of executed and expired PIPs should be different. - type Scheduler: Named; + type Scheduler: Named, Self::SchedulerCall, Self::SchedulerOrigin>; /// A call type used by the scheduler. type SchedulerCall: From> + Into<::Proposal>; /// The maximum number of votes that can be pruned at once. @@ -395,12 +395,13 @@ pub mod pallet { /// Default enactment period that will be use after a proposal is accepted by GC. #[pallet::storage] - pub type DefaultEnactmentPeriod = StorageValue<_, T::BlockNumber, ValueQuery>; + pub type DefaultEnactmentPeriod = StorageValue<_, BlockNumberFor, ValueQuery>; /// Number of blocks it will take, after a `Pending` PIP expires, assuming it has not transitioned to another `ProposalState`. #[pallet::storage] #[pallet::unbounded] - pub type PendingPipExpiry = StorageValue<_, MaybeBlock, ValueQuery>; + pub type PendingPipExpiry = + StorageValue<_, MaybeBlock>, ValueQuery>; /// Maximum times a PIP can be skipped before triggering `CannotSkipPip` in `enact_snapshot_results`. #[pallet::storage] @@ -426,7 +427,7 @@ pub mod pallet { #[pallet::storage] #[pallet::unbounded] pub type ProposalMetadata = - StorageMap<_, Twox64Concat, PipId, PipsMetadata, OptionQuery>; + StorageMap<_, Twox64Concat, PipId, PipsMetadata>, OptionQuery>; /// All locked [`DepositInfo`] per [`PipId`] for each account. #[pallet::storage] @@ -459,7 +460,7 @@ pub mod pallet { /// Maps PIPs to the block at which they will be executed. #[pallet::storage] pub type PipToSchedule = - StorageMap<_, Twox64Concat, PipId, T::BlockNumber, OptionQuery>; + StorageMap<_, Twox64Concat, PipId, BlockNumberFor, OptionQuery>; /// A live priority queue (lowest priority at index 0) /// of pending PIPs up to the active limit. @@ -483,7 +484,7 @@ pub mod pallet { /// The [`SnapshotMetadata`]. #[pallet::storage] pub type SnapshotMeta = - StorageValue<_, SnapshotMetadata, OptionQuery>; + StorageValue<_, SnapshotMetadata, T::AccountId>, OptionQuery>; /// The number of times a certain PIP has been skipped. /// Once a (configurable) threshhold is exceeded, a PIP cannot be skipped again. @@ -518,8 +519,8 @@ pub mod pallet { pub struct GenesisConfig { pub prune_historical_pips: bool, pub min_proposal_deposit: Balance, - pub default_enactment_period: T::BlockNumber, - pub pending_pip_expiry: MaybeBlock, + pub default_enactment_period: BlockNumberFor, + pub pending_pip_expiry: MaybeBlock>, pub max_pip_skip_count: u8, pub active_pip_limit: u32, } @@ -605,7 +606,7 @@ pub mod pallet { #[pallet::weight((::WeightInfo::set_default_enactment_period(), Operational))] pub fn set_default_enactment_period( origin: OriginFor, - duration: T::BlockNumber, + duration: BlockNumberFor, ) -> DispatchResult { ensure_root(origin)?; let old_value = DefaultEnactmentPeriod::::get(); @@ -631,7 +632,7 @@ pub mod pallet { #[pallet::weight((::WeightInfo::set_pending_pip_expiry(), Operational))] pub fn set_pending_pip_expiry( origin: OriginFor, - expiry: MaybeBlock, + expiry: MaybeBlock>, ) -> DispatchResult { ensure_root(origin)?; let old_value = PendingPipExpiry::::get(); @@ -1019,7 +1020,7 @@ pub mod pallet { pub fn reschedule_execution( origin: OriginFor, id: PipId, - until: Option, + until: Option>, ) -> DispatchResult { let did = pallet_identity::Pallet::::ensure_perms(origin)?; @@ -1356,7 +1357,7 @@ impl Pallet { } /// Adds a PIP expiry call to the PIP expiry schedule. - fn schedule_pip_for_expiry(id: PipId, at: T::BlockNumber) { + fn schedule_pip_for_expiry(id: PipId, at: BlockNumberFor) { let did = GC_DID; let call = Call::::expire_scheduled_pip { did, id }.into(); let event = match T::Scheduler::schedule_named( @@ -1505,7 +1506,7 @@ impl Pallet { } /// Emit event based on a `result` from scheduling a PIP for execution. - fn handle_exec_scheduling_result(id: PipId, at: T::BlockNumber, result: Result) { + fn handle_exec_scheduling_result(id: PipId, at: BlockNumberFor, result: Result) { Self::deposit_event(match result { Err(_) => Event::ExecutionSchedulingFailed(GC_DID, id, at), Ok(_) => Event::ExecutionScheduled(GC_DID, id, at), diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 17f1164370..b0fc31bacc 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -63,15 +63,12 @@ macro_rules! misc_pallet_impls { type Lookup = Indices; /// The index type for storing how many extrinsics an account has signed. type Index = polymesh_primitives::Index; - /// The index type for blocks. - type BlockNumber = polymesh_primitives::BlockNumber; /// The type for hashing blocks and tries. type Hash = polymesh_primitives::Hash; /// The hashing algorithm used. type Hashing = sp_runtime::traits::BlakeTwo256; - /// The header type. - type Header = - sp_runtime::generic::Header; + /// The block type. + type Block = Block; /// The ubiquitous event type. type RuntimeEvent = RuntimeEvent; /// The ubiquitous origin type. diff --git a/pallets/runtime/develop/src/benchmarks/pallet_session.rs b/pallets/runtime/develop/src/benchmarks/pallet_session.rs index ea300a64bf..a16c2d1218 100644 --- a/pallets/runtime/develop/src/benchmarks/pallet_session.rs +++ b/pallets/runtime/develop/src/benchmarks/pallet_session.rs @@ -24,6 +24,7 @@ use codec::Decode; use frame_benchmarking::benchmarks; use frame_support::traits::{Currency, Get, OnInitialize}; +use frame_system::pallet_prelude::BlockNumberFor; use frame_system::RawOrigin; use pallet_session::{Call, Pallet as Session}; use pallet_staking::benchmarking::create_validator_with_nominators; @@ -38,8 +39,8 @@ pub trait Config: { } -impl OnInitialize for Pallet { - fn on_initialize(n: T::BlockNumber) -> frame_support::weights::Weight { +impl OnInitialize> for Pallet { + fn on_initialize(n: BlockNumberFor) -> frame_support::weights::Weight { Session::::on_initialize(n) } } diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index a67c049a72..5909b5de2e 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -348,11 +348,7 @@ mod benches { } construct_runtime!( - pub enum Runtime where - Block = Block, - NodeBlock = polymesh_primitives::Block, - UncheckedExtrinsic = UncheckedExtrinsic - { + pub struct Runtime { System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index 13f6506305..2e0fc34025 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -296,11 +296,7 @@ impl pallet_group::Config for Runtime { } construct_runtime!( - pub enum Runtime where - Block = Block, - NodeBlock = polymesh_primitives::Block, - UncheckedExtrinsic = UncheckedExtrinsic - { + pub struct Runtime { System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index c274e1ccba..7fda9efc9e 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -301,12 +301,7 @@ impl pallet_group::Config for Runtime { pub type AllModulesExported = AllPalletsWithSystem; construct_runtime!( - pub enum Runtime where - Block = Block, - NodeBlock = polymesh_primitives::Block, - UncheckedExtrinsic = UncheckedExtrinsic - { - + pub struct Runtime { System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, diff --git a/pallets/runtime/tests/src/settlement_test.rs b/pallets/runtime/tests/src/settlement_test.rs index 0eee1a6aef..8ffca3c3ce 100644 --- a/pallets/runtime/tests/src/settlement_test.rs +++ b/pallets/runtime/tests/src/settlement_test.rs @@ -8,6 +8,7 @@ use frame_support::{ assert_err_ignore_postinfo, assert_noop, assert_ok, assert_storage_noop, traits::TryCollect, BoundedBTreeSet, }; +use frame_system::pallet_prelude::BlockNumberFor; use rand::{prelude::*, thread_rng}; use sp_runtime::{AccountId32, AnySignature}; use sp_std::collections::btree_set::BTreeSet; @@ -64,7 +65,7 @@ type AssetError = pallet_asset::Error; type OffChainSignature = AnySignature; type Origin = ::RuntimeOrigin; type Moment = ::Moment; -type BlockNumber = ::BlockNumber; +type BlockNumber = BlockNumberFor; type Settlement = pallet_settlement::Pallet; type System = frame_system::Pallet; type Error = pallet_settlement::Error; diff --git a/pallets/runtime/tests/src/signed_extra.rs b/pallets/runtime/tests/src/signed_extra.rs index 806426afff..f2d2c74463 100644 --- a/pallets/runtime/tests/src/signed_extra.rs +++ b/pallets/runtime/tests/src/signed_extra.rs @@ -7,7 +7,6 @@ use polymesh_runtime_develop::{ }; use frame_support::dispatch::{DispatchClass, DispatchInfo, Weight}; -use frame_support::pallet_prelude::*; use frame_system::{ CheckEra, CheckGenesis, CheckNonce, CheckSpecVersion, CheckTxVersion, CheckWeight, }; diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index c852cd4953..8fb257674f 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -98,15 +98,11 @@ pub fn is_disabled(controller: AccountId) -> bool { Session::disabled_validators().contains(&validator_index) } -type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; type Block = frame_system::mocking::MockBlock; pub type Call = RuntimeCall; frame_support::construct_runtime!( - pub enum Test where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic, + pub enum Test { System: frame_system::{Pallet, Call, Config, Storage, Event}, Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned}, @@ -165,13 +161,12 @@ impl frame_system::Config for Test { type DbWeight = RocksDbWeight; type RuntimeOrigin = RuntimeOrigin; type Index = AccountIndex; - type BlockNumber = BlockNumber; type RuntimeCall = RuntimeCall; type Hash = H256; type Hashing = ::sp_runtime::traits::BlakeTwo256; type AccountId = AccountId; type Lookup = IdentityLookup; - type Header = Header; + type Block = Block; type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; type Version = (); diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index 25bba7f275..76704f5fbe 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -245,11 +245,7 @@ parameter_types! { } frame_support::construct_runtime!( - pub enum TestStorage where - Block = Block, - NodeBlock = polymesh_primitives::Block, - UncheckedExtrinsic = UncheckedExtrinsic, -{ + pub struct TestStorage { System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, diff --git a/pallets/settlement/src/benchmarking.rs b/pallets/settlement/src/benchmarking.rs index 62ff9851ae..9107a7fa69 100644 --- a/pallets/settlement/src/benchmarking.rs +++ b/pallets/settlement/src/benchmarking.rs @@ -199,7 +199,7 @@ where fn setup_execute_instruction( sender: &User, receiver: &User, - settlement_type: SettlementType, + settlement_type: SettlementType>, venue_id: VenueId, f: u32, n: u32, diff --git a/pallets/settlement/src/lib.rs b/pallets/settlement/src/lib.rs index f688efe506..5435ab99e8 100644 --- a/pallets/settlement/src/lib.rs +++ b/pallets/settlement/src/lib.rs @@ -159,7 +159,7 @@ pub mod pallet { IdentityId, Option, InstructionId, - SettlementType, + SettlementType>, Option, Option, Vec, @@ -425,7 +425,11 @@ pub mod pallet { type Proposal: From> + Into<::Proposal>; /// Scheduler of settlement instructions. - type Scheduler: Named::Proposal, Self::SchedulerOrigin>; + type Scheduler: Named< + BlockNumberFor, + ::Proposal, + Self::SchedulerOrigin, + >; /// Portfolio module. type Portfolio: PortfolioSubTrait; @@ -612,7 +616,7 @@ pub mod pallet { _, Twox64Concat, InstructionId, - Instruction, + Instruction>, ValueQuery, >; @@ -689,8 +693,13 @@ pub mod pallet { /// Instruction statuses. instruction_id -> InstructionStatus #[pallet::storage] - pub type InstructionStatuses = - StorageMap<_, Twox64Concat, InstructionId, InstructionStatus, ValueQuery>; + pub type InstructionStatuses = StorageMap< + _, + Twox64Concat, + InstructionId, + InstructionStatus>, + ValueQuery, + >; /// Legs under an instruction. (instruction_id, leg_id) -> Leg #[pallet::storage] @@ -1017,7 +1026,7 @@ pub mod pallet { pub fn add_instruction( origin: OriginFor, venue_id: Option, - settlement_type: SettlementType, + settlement_type: SettlementType>, trade_date: Option, value_date: Option, legs: Vec, @@ -1055,7 +1064,7 @@ pub mod pallet { pub fn add_and_affirm_instruction( origin: OriginFor, venue_id: Option, - settlement_type: SettlementType, + settlement_type: SettlementType>, trade_date: Option, value_date: Option, legs: Vec, @@ -1297,7 +1306,7 @@ pub mod pallet { pub fn add_instruction_with_mediators( origin: OriginFor, venue_id: Option, - settlement_type: SettlementType, + settlement_type: SettlementType>, trade_date: Option, value_date: Option, legs: Vec, @@ -1337,7 +1346,7 @@ pub mod pallet { pub fn add_and_affirm_with_mediators( origin: OriginFor, venue_id: Option, - settlement_type: SettlementType, + settlement_type: SettlementType>, trade_date: Option, value_date: Option, legs: Vec, @@ -1502,7 +1511,7 @@ impl Pallet { origin: OriginFor, id: InstructionId, is_execute: bool, - ) -> EnsureValidInstructionResult { + ) -> EnsureValidInstructionResult> { let origin_data = pallet_identity::Pallet::::ensure_origin_call_permissions(origin)?; Ok(( origin_data.primary_did, @@ -1521,7 +1530,7 @@ impl Pallet { pub fn base_add_instruction( did: IdentityId, venue_id: Option, - settlement_type: SettlementType, + settlement_type: SettlementType>, trade_date: Option, value_date: Option, legs: Vec, @@ -1772,7 +1781,7 @@ impl Pallet { fn ensure_instruction_validity( id: InstructionId, is_execute: bool, - ) -> Result, DispatchError> { + ) -> Result>, DispatchError> { let details = InstructionDetails::::get(id); ensure!( InstructionStatuses::::get(id) != InstructionStatus::Unknown, @@ -2185,7 +2194,7 @@ impl Pallet { /// for the given block so there are chances where the instruction execution block no. may drift. pub(crate) fn schedule_instruction( id: InstructionId, - execution_at: T::BlockNumber, + execution_at: BlockNumberFor, weight_limit: Weight, ) { let call = Call::::execute_scheduled_instruction { id, weight_limit }.into(); @@ -2391,7 +2400,7 @@ impl Pallet { fn execute_settle_on_affirmation_instruction( id: InstructionId, affirms_pending: u64, - settlement_type: SettlementType, + settlement_type: SettlementType>, caller_did: IdentityId, ) -> DispatchResult { // We assume `settlement_type == SettleOnAffirmation`, @@ -2859,7 +2868,7 @@ impl Pallet { /// Returns `Ok` if [`SettlementType::SettleManual`] and the `block_number` is reached. fn ensure_manual_settlement_type( - settlement_type: SettlementType, + settlement_type: SettlementType>, ) -> DispatchResult { if let SettlementType::SettleManual(block_number) = settlement_type { ensure!( diff --git a/pallets/sudo/src/mock.rs b/pallets/sudo/src/mock.rs index 8ad842e0d5..659a0d7fdc 100644 --- a/pallets/sudo/src/mock.rs +++ b/pallets/sudo/src/mock.rs @@ -23,7 +23,6 @@ use frame_support::traits::{ConstU32, ConstU64, Contains}; use sp_core::H256; use sp_io; use sp_runtime::{ - testing::Header, traits::{BlakeTwo256, IdentityLookup}, BuildStorage, }; @@ -100,14 +99,10 @@ pub mod logger { pub type I32Log = StorageValue<_, BoundedVec>, ValueQuery>; } -type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; type Block = frame_system::mocking::MockBlock; frame_support::construct_runtime!( - pub enum Test where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic, + pub struct Test { System: frame_system::{Pallet, Call, Config, Storage, Event}, Sudo: sudo::{Pallet, Call, Config, Storage, Event}, @@ -130,12 +125,11 @@ impl frame_system::Config for Test { type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; type Index = u64; - type BlockNumber = u64; type Hash = H256; type Hashing = BlakeTwo256; type AccountId = u64; type Lookup = IdentityLookup; - type Header = Header; + type Block = Block; type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); diff --git a/pallets/validators/src/lib.rs b/pallets/validators/src/lib.rs index 3746e5ee76..6c85ac0ea0 100644 --- a/pallets/validators/src/lib.rs +++ b/pallets/validators/src/lib.rs @@ -165,7 +165,7 @@ pub mod pallet { type PalletsOrigin: From>; /// To schedule the rewards for the stakers after the end of era. - type RewardScheduler: Anon::Call, Self::PalletsOrigin>; + type RewardScheduler: Anon, ::Call, Self::PalletsOrigin>; } /// Entities that are allowed to run operator/validator nodes. diff --git a/pallets/validators/src/permissioned.rs b/pallets/validators/src/permissioned.rs index 8b85518d23..17fc3355cd 100644 --- a/pallets/validators/src/permissioned.rs +++ b/pallets/validators/src/permissioned.rs @@ -148,7 +148,7 @@ impl PermissionedStaking for Pallet { .enumerate() { let schedule_block_number = - next_block_number + index.saturated_into::(); + next_block_number + index.saturated_into::>(); match T::RewardScheduler::schedule( DispatchTime::At(schedule_block_number), None, From 5df2400eeca5759e1fee7c20aaaae942c5ab4ff8 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Mon, 6 Jan 2025 22:43:19 +0800 Subject: [PATCH 15/97] Fix chrono deprecated warnings. --- primitives/src/calendar.rs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/primitives/src/calendar.rs b/primitives/src/calendar.rs index 7eed73a760..9886728213 100644 --- a/primitives/src/calendar.rs +++ b/primitives/src/calendar.rs @@ -1,4 +1,4 @@ -use chrono::{Datelike, NaiveDate, NaiveDateTime}; +use chrono::{DateTime, Datelike, NaiveDate}; use codec::{Decode, Encode}; use core::num::NonZeroU64; use scale_info::TypeInfo; @@ -201,14 +201,13 @@ fn next_checkpoint_secs( } FixedOrVariableCalendarUnit::Variable(variable_unit) => { // The period is of variable length. - let date_time_start = NaiveDateTime::from_timestamp_opt(i64::try_from(start).ok()?, 0)?; - let date_start = date_time_start.date(); + let date_time_start = DateTime::from_timestamp(i64::try_from(start).ok()?, 0)?; + let date_start = date_time_start.date_naive(); let year_start = date_start.year(); let month_start = date_start.month(); let day_start = date_start.day(); - let date_time_now = - NaiveDateTime::from_timestamp_opt(i64::try_from(now_as_secs_utc).ok()?, 0)?; - let date_now = date_time_now.date(); + let date_time_now = DateTime::from_timestamp(i64::try_from(now_as_secs_utc).ok()?, 0)?; + let date_now = date_time_now.date_naive(); let date_next = match variable_unit { VariableCalendarUnit::Month => { // Convert the base unit amount to match the type of month. @@ -261,7 +260,13 @@ fn next_checkpoint_secs( )? } }; - Moment::try_from(date_next.and_time(date_time_start.time()).timestamp()).ok() + Moment::try_from( + date_next + .and_time(date_time_start.time()) + .and_utc() + .timestamp(), + ) + .ok() } } } From 8fe660b6fe875ea116917514f067869b75685609 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Mon, 6 Jan 2025 22:53:53 +0800 Subject: [PATCH 16/97] Fix deprecated check_accrue call. --- primitives/src/weight_meter.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/primitives/src/weight_meter.rs b/primitives/src/weight_meter.rs index d230be90ad..bb64e93010 100644 --- a/primitives/src/weight_meter.rs +++ b/primitives/src/weight_meter.rs @@ -69,16 +69,16 @@ impl WeightMeter { /// Consumes the given weight after checking that it can be consumed. Returns an error otherwise. pub fn check_accrue(&mut self, weight: Weight) -> Result<(), String> { - if !self.meter.check_accrue(weight) { - return Err(String::from("Maximum weight limit exceeded")); - } + self.meter + .try_consume(weight) + .map_err(|_| "Maximum weight limit exceeded")?; Ok(()) } /// Consumes the given `weight`. /// If the new consumed weight is greater than the limit, consumed will be set to limit and an error will be returned. pub fn consume_weight_until_limit(&mut self, weight: Weight) -> Result<(), String> { - if !self.meter.check_accrue(weight) { + if self.check_accrue(weight).is_err() { self.meter.consume(self.meter.remaining()); return Err(String::from("Maximum weight limit exceeded")); } From 16bd20d729ce6fa03e88a77a6999eea40583908e Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Mon, 6 Jan 2025 22:59:18 +0800 Subject: [PATCH 17/97] Add TypeInfo to Runtime API types. --- pallets/group/rpc/runtime-api/Cargo.toml | 1 + pallets/group/rpc/runtime-api/src/lib.rs | 3 ++- pallets/identity/src/types.rs | 6 +++--- pallets/pips/src/types.rs | 2 +- pallets/protocol-fee/rpc/runtime-api/Cargo.toml | 1 + pallets/protocol-fee/rpc/runtime-api/src/lib.rs | 3 ++- pallets/transaction-payment/src/types.rs | 7 ++++--- primitives/src/authorization.rs | 2 +- primitives/src/settlement.rs | 2 +- 9 files changed, 16 insertions(+), 11 deletions(-) diff --git a/pallets/group/rpc/runtime-api/Cargo.toml b/pallets/group/rpc/runtime-api/Cargo.toml index 86451e45bf..6e6acd1301 100644 --- a/pallets/group/rpc/runtime-api/Cargo.toml +++ b/pallets/group/rpc/runtime-api/Cargo.toml @@ -18,6 +18,7 @@ serde = { version = "1.0.104", default-features = false, optional = true, featur codec = { workspace = true, default-features = false, features = ["derive"] } sp-api = { workspace = true, default-features = false } sp-std = { workspace = true, default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive", "decode"] } [features] default = ["std"] diff --git a/pallets/group/rpc/runtime-api/src/lib.rs b/pallets/group/rpc/runtime-api/src/lib.rs index 7c61143b45..2b448f0919 100644 --- a/pallets/group/rpc/runtime-api/src/lib.rs +++ b/pallets/group/rpc/runtime-api/src/lib.rs @@ -5,11 +5,12 @@ use polymesh_primitives::traits::group::InactiveMember; use polymesh_primitives::{IdentityId, Moment}; use codec::{Decode, Encode}; +use scale_info::TypeInfo; #[cfg(feature = "std")] use serde::{Deserialize, Serialize}; use sp_std::{prelude::*, vec::Vec}; -#[derive(Eq, PartialEq, Encode, Decode)] +#[derive(Eq, PartialEq, Encode, Decode, TypeInfo)] #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] pub struct Member { diff --git a/pallets/identity/src/types.rs b/pallets/identity/src/types.rs index 5d34e0334b..6652f648ab 100644 --- a/pallets/identity/src/types.rs +++ b/pallets/identity/src/types.rs @@ -17,7 +17,7 @@ pub fn zero_account_id() -> AccountId { } /// A result of execution of get_votes. -#[derive(Eq, PartialEq, Encode, Decode)] +#[derive(Eq, PartialEq, Encode, Decode, TypeInfo)] #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] pub enum RpcDidRecords { @@ -30,7 +30,7 @@ pub enum RpcDidRecords { IdNotFound, } -#[derive(Encode, Decode, MaxEncodedLen, PartialEq, Eq)] +#[derive(Encode, Decode, TypeInfo, MaxEncodedLen, PartialEq, Eq)] #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] pub enum DidStatus { Unknown, @@ -39,7 +39,7 @@ pub enum DidStatus { } /// Aggregate information about an `AccountId` in relation to an `IdentityId`. -#[derive(Eq, PartialEq, Encode, Decode)] +#[derive(Eq, PartialEq, Encode, Decode, TypeInfo)] #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub struct KeyIdentityData { /// The identity of the provided `AccountId`. diff --git a/pallets/pips/src/types.rs b/pallets/pips/src/types.rs index 0275dc1ac3..af4fa36d6d 100644 --- a/pallets/pips/src/types.rs +++ b/pallets/pips/src/types.rs @@ -82,7 +82,7 @@ pub struct Pip { /// A result of execution of get_votes. #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] -#[derive(Decode, Encode, Eq, PartialEq)] +#[derive(Decode, Encode, TypeInfo, MaxEncodedLen, Eq, PartialEq)] pub enum VoteCount { /// Proposal was found and has the following votes. ProposalFound { diff --git a/pallets/protocol-fee/rpc/runtime-api/Cargo.toml b/pallets/protocol-fee/rpc/runtime-api/Cargo.toml index 1234e0ec0f..0b4e2a6f35 100644 --- a/pallets/protocol-fee/rpc/runtime-api/Cargo.toml +++ b/pallets/protocol-fee/rpc/runtime-api/Cargo.toml @@ -18,6 +18,7 @@ serde = { version = "1.0.104", default-features = false, optional = true, featur codec = { workspace = true, default-features = false, features = ["derive"] } sp-api = { workspace = true, default-features = false} sp-runtime = { workspace = true, default-features = false} +scale-info = { workspace = true, default-features = false, features = ["derive", "decode"] } [features] default = ["std"] diff --git a/pallets/protocol-fee/rpc/runtime-api/src/lib.rs b/pallets/protocol-fee/rpc/runtime-api/src/lib.rs index 894ee16ecd..94a98c0483 100644 --- a/pallets/protocol-fee/rpc/runtime-api/src/lib.rs +++ b/pallets/protocol-fee/rpc/runtime-api/src/lib.rs @@ -19,13 +19,14 @@ use codec::{Decode, Encode}; use polymesh_common_utilities::protocol_fee::ProtocolOp; +use scale_info::TypeInfo; #[cfg(feature = "std")] use serde::{Deserialize, Serialize}; use sp_runtime::traits::{SaturatedConversion, UniqueSaturatedInto}; /// A capped version of `Balance` which is normally a `u128`, fit into `u64` which is a serializable /// type unlike `u128`. There are no fees that would not fit into `u64`. -#[derive(Eq, PartialEq, Encode, Decode)] +#[derive(Eq, PartialEq, Encode, Decode, TypeInfo)] #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] pub struct CappedFee(pub u64); diff --git a/pallets/transaction-payment/src/types.rs b/pallets/transaction-payment/src/types.rs index 2a8442d882..e0cc42048b 100644 --- a/pallets/transaction-payment/src/types.rs +++ b/pallets/transaction-payment/src/types.rs @@ -18,6 +18,7 @@ //! Types for transaction-payment RPC. use codec::{Decode, Encode}; +use scale_info::TypeInfo; #[cfg(feature = "std")] use serde::{Deserialize, Serialize}; @@ -27,7 +28,7 @@ use sp_std::prelude::*; use frame_support::dispatch::DispatchClass; /// The base fee and adjusted weight and length fees constitute the _inclusion fee_. -#[derive(Encode, Decode, Clone, Eq, PartialEq)] +#[derive(Encode, Decode, TypeInfo, Clone, Eq, PartialEq)] #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] pub struct InclusionFee { @@ -63,7 +64,7 @@ impl InclusionFee { /// - (Optional) `inclusion_fee`: Only the `Pays::Yes` transaction can have the inclusion fee. /// - `tip`: If included in the transaction, the tip will be added on top. Only signed /// transactions can have a tip. -#[derive(Encode, Decode, Clone, Eq, PartialEq)] +#[derive(Encode, Decode, TypeInfo, Clone, Eq, PartialEq)] #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] pub struct FeeDetails { @@ -91,7 +92,7 @@ impl FeeDetails { /// Information related to a dispatchable's class, weight, and fee that can be queried from the /// runtime. -#[derive(Eq, PartialEq, Encode, Decode, Default)] +#[derive(Eq, PartialEq, Encode, Decode, TypeInfo, Default)] #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] #[cfg_attr( diff --git a/primitives/src/authorization.rs b/primitives/src/authorization.rs index f0a27e4557..9ecbdbbf3c 100644 --- a/primitives/src/authorization.rs +++ b/primitives/src/authorization.rs @@ -77,7 +77,7 @@ impl AuthorizationData { } /// Type of authorization. -#[derive(Eq, PartialEq, Encode, Decode, Clone)] +#[derive(Eq, PartialEq, Encode, Decode, TypeInfo, Clone)] #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] pub enum AuthorizationType { /// CDD Authorization to rotate primary key. diff --git a/primitives/src/settlement.rs b/primitives/src/settlement.rs index 912666dcde..8ef3a96143 100644 --- a/primitives/src/settlement.rs +++ b/primitives/src/settlement.rs @@ -760,7 +760,7 @@ impl AffirmationCount { /// Stores the number of fungible, non fungible and offchain assets in an instruction, the consumed weight for executing the instruction, /// and if executing the instruction would fail, the error thrown. #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -#[derive(Decode, Encode)] +#[derive(Decode, Encode, TypeInfo)] pub struct ExecuteInstructionInfo { /// Number of fungible tokens in the instruction. fungible_tokens: u32, From aa87c8805e2e3fc3b2d502c6c49eaf7de0f0d3b6 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Tue, 7 Jan 2025 00:08:34 +0800 Subject: [PATCH 18/97] System pallet renamed Index -> Nonce. --- node-rpc/src/lib.rs | 4 ++-- pallets/runtime/common/src/runtime.rs | 12 ++++++------ pallets/runtime/tests/src/signed_extra.rs | 4 ++-- pallets/runtime/tests/src/staking/mock.rs | 4 ++-- pallets/runtime/tests/src/storage.rs | 2 +- pallets/sudo/src/mock.rs | 2 +- primitives/src/lib.rs | 4 ++-- src/service.rs | 2 +- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/node-rpc/src/lib.rs b/node-rpc/src/lib.rs index 46fe7a3e2d..b437cc7ad3 100644 --- a/node-rpc/src/lib.rs +++ b/node-rpc/src/lib.rs @@ -33,7 +33,7 @@ use std::sync::Arc; use jsonrpsee::RpcModule; -use polymesh_primitives::{AccountId, Block, BlockNumber, Hash, IdentityId, Index, Moment, Ticker}; +use polymesh_primitives::{AccountId, Block, BlockNumber, Hash, IdentityId, Moment, Nonce, Ticker}; use sc_client_api::AuxStore; use sc_consensus_babe::{BabeConfiguration, Epoch}; use sc_consensus_epochs::SharedEpochChanges; @@ -106,7 +106,7 @@ where + Sync + Send + 'static, - C::Api: substrate_frame_rpc_system::AccountNonceApi, + C::Api: substrate_frame_rpc_system::AccountNonceApi, C::Api: node_rpc::transaction_payment::TransactionPaymentRuntimeApi, C::Api: node_rpc::pips::PipsRuntimeApi, C::Api: node_rpc::identity::IdentityRuntimeApi, diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index b0fc31bacc..0acbbfba98 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -61,8 +61,8 @@ macro_rules! misc_pallet_impls { type RuntimeCall = RuntimeCall; /// The lookup mechanism to get account ID from whatever is passed in dispatchers. type Lookup = Indices; - /// The index type for storing how many extrinsics an account has signed. - type Index = polymesh_primitives::Index; + /// The nonce type for storing how many extrinsics an account has signed. + type Nonce = polymesh_primitives::Nonce; /// The type for hashing blocks and tries. type Hash = polymesh_primitives::Hash; /// The hashing algorithm used. @@ -588,7 +588,7 @@ macro_rules! misc_pallet_impls { call: RuntimeCall, public: ::Signer, account: polymesh_primitives::AccountId, - nonce: polymesh_primitives::Index, + nonce: polymesh_primitives::Nonce, ) -> Option<( RuntimeCall, ::SignaturePayload, @@ -755,7 +755,7 @@ macro_rules! runtime_apis { use polymesh_primitives::settlement::{InstructionId, ExecuteInstructionInfo}; use polymesh_primitives::transfer_compliance::TransferCondition; use polymesh_primitives::compliance_manager::{AssetComplianceResult, ComplianceReport}; - use polymesh_primitives::{IdentityId, Index, NFTs, PortfolioId}; + use polymesh_primitives::{IdentityId, Nonce, NFTs, PortfolioId}; use polymesh_primitives::{Signatory, Ticker, WeightMeter, IdentityClaim}; /// The address format for describing accounts. @@ -945,8 +945,8 @@ macro_rules! runtime_apis { } } - impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { - fn account_nonce(account: polymesh_primitives::AccountId) -> Index { + impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { + fn account_nonce(account: polymesh_primitives::AccountId) -> Nonce { System::account_nonce(account) } } diff --git a/pallets/runtime/tests/src/signed_extra.rs b/pallets/runtime/tests/src/signed_extra.rs index f2d2c74463..ff41af8cad 100644 --- a/pallets/runtime/tests/src/signed_extra.rs +++ b/pallets/runtime/tests/src/signed_extra.rs @@ -1,6 +1,6 @@ use pallet_group as group; use pallet_identity as identity; -use polymesh_primitives::{identity_id::GenesisIdentityRecord, AccountId, IdentityId, Index}; +use polymesh_primitives::{identity_id::GenesisIdentityRecord, AccountId, IdentityId, Nonce}; use polymesh_runtime_develop::{ runtime::{RuntimeCall, SignedExtra}, Runtime, @@ -27,7 +27,7 @@ pub fn make_call() -> (::RuntimeCall, usize) { /// - Transaction `priority` == `tip`. /// - Only `Operational` transactions could have `tip` != 0. /// - `Normal` transactions have `priority` == 0, as `tip` == 0. -fn make_signed_extra(current_block: u64, period: u64, nonce: Index, tip: u128) -> SignedExtra { +fn make_signed_extra(current_block: u64, period: u64, nonce: Nonce, tip: u128) -> SignedExtra { ( CheckSpecVersion::::new(), CheckTxVersion::::new(), diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index 8fb257674f..d86677e62f 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -58,7 +58,7 @@ pub const BLOCK_TIME: u64 = 1_000; /// The AccountId alias in this test module. pub(crate) type AccountId = u64; -pub(crate) type AccountIndex = u64; +pub(crate) type Nonce = u64; pub(crate) type BlockNumber = u64; pub(crate) type Balance = u128; @@ -160,7 +160,7 @@ impl frame_system::Config for Test { type BlockLength = (); type DbWeight = RocksDbWeight; type RuntimeOrigin = RuntimeOrigin; - type Index = AccountIndex; + type Nonce = Nonce; type RuntimeCall = RuntimeCall; type Hash = H256; type Hashing = ::sp_runtime::traits::BlakeTwo256; diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index 76704f5fbe..f3423f7a02 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -1026,7 +1026,7 @@ fn sign(xt: CheckedExtrinsic) -> UncheckedExtrinsic { } /// Returns transaction extra. -fn signed_extra(nonce: Index) -> SignedExtra { +fn signed_extra(nonce: Nonce) -> SignedExtra { ( frame_system::CheckSpecVersion::new(), frame_system::CheckTxVersion::new(), diff --git a/pallets/sudo/src/mock.rs b/pallets/sudo/src/mock.rs index 659a0d7fdc..150226e212 100644 --- a/pallets/sudo/src/mock.rs +++ b/pallets/sudo/src/mock.rs @@ -124,7 +124,7 @@ impl frame_system::Config for Test { type DbWeight = (); type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; - type Index = u64; + type Nonce = u64; type Hash = H256; type Hashing = BlakeTwo256; type AccountId = u64; diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index 7be2931e2e..b93580f2cd 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -59,8 +59,8 @@ pub type ChainId = u32; /// A hash of some data used by the relay chain. pub type Hash = sp_core::H256; -/// Index of a transaction in the relay chain. 32-bit should be plenty. -pub type Index = u32; +/// Nonce of a transaction. 32-bit should be plenty. +pub type Nonce = u32; /// Alias for Gas. pub type Gas = Weight; diff --git a/src/service.rs b/src/service.rs index 58cdd35844..001e18ca48 100644 --- a/src/service.rs +++ b/src/service.rs @@ -3,7 +3,7 @@ use futures::stream::StreamExt; use polymesh_node_rpc as node_rpc; pub use polymesh_primitives::{ - AccountId, Balance, Block, IdentityId, Index as Nonce, Moment, Ticker, + AccountId, Balance, Block, IdentityId, Nonce, Moment, Ticker, }; pub use polymesh_runtime_develop; pub use polymesh_runtime_mainnet; From a5e1bbc2c2e256ef4c5eebda0c47e932ebf34ca1 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Tue, 7 Jan 2025 00:20:05 +0800 Subject: [PATCH 19/97] Update contracts --- pallets/contracts/src/lib.rs | 2 +- pallets/runtime/common/src/lib.rs | 10 +++-- pallets/runtime/common/src/runtime.rs | 55 +++++++++++++++++++++++--- pallets/runtime/develop/src/runtime.rs | 2 - pallets/runtime/mainnet/src/runtime.rs | 2 - pallets/runtime/testnet/src/runtime.rs | 2 - pallets/runtime/tests/src/storage.rs | 2 - 7 files changed, 57 insertions(+), 18 deletions(-) diff --git a/pallets/contracts/src/lib.rs b/pallets/contracts/src/lib.rs index 097a9a0670..17e88fe310 100644 --- a/pallets/contracts/src/lib.rs +++ b/pallets/contracts/src/lib.rs @@ -422,7 +422,7 @@ pub mod pallet { owner.clone(), self.upgradable_code.clone(), None, - Determinism::Deterministic, + Determinism::Enforced, ) .unwrap(); log::info!("Uploaded upgradeable code: {}", code_result.code_hash); diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index 5dd6af8f88..0d96069099 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -94,11 +94,15 @@ parameter_types! { /// Number of block delay an extrinsic claim surcharge has. pub const SignedClaimHandicap: u32 = 2; /// The balance every contract needs to deposit to stay alive indefinitely. - pub const DepositPerContract: u128 = 10 * CENTS; + pub const DepositPerContract: Balance = 10 * CENTS; /// The balance a contract needs to deposit per storage item to stay alive indefinitely. - pub const DepositPerItem: u128 = deposit(1, 0); + pub const DepositPerItem: Balance = deposit(1, 0); /// The balance a contract needs to deposit per storage byte to stay alive indefinitely. - pub const DepositPerByte: u128 = deposit(0, 1); + pub const DepositPerByte: Balance = deposit(0, 1); + /// The code hash lookup deposit. + pub CodeHashLockupDepositPercent: Perbill = Perbill::from_percent(30); + /// The default deposit limit. + pub const DefaultDepositLimit: Balance = deposit(1024, 1024 * 1024); /// The maximum nesting level of a call/instantiate stack. pub const ContractsMaxDepth: u32 = 32; /// The maximum size of a storage value and event payload in bytes. diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 0acbbfba98..60579b7dc5 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -417,13 +417,12 @@ macro_rules! misc_pallet_impls { type CallFilter = frame_support::traits::Nothing; type DepositPerItem = polymesh_runtime_common::DepositPerItem; type DepositPerByte = polymesh_runtime_common::DepositPerByte; + type DefaultDepositLimit = polymesh_runtime_common::DefaultDepositLimit; type CallStack = [pallet_contracts::Frame; 5]; type WeightPrice = pallet_transaction_payment::Pallet; type WeightInfo = polymesh_weights::pallet_contracts::SubstrateWeight; type ChainExtension = polymesh_contracts::PolymeshExtension; type Schedule = Schedule; - type DeletionQueueDepth = DeletionQueueDepth; - type DeletionWeightLimit = DeletionWeightLimit; type AddressGenerator = pallet_contracts::DefaultAddressGenerator; #[cfg(not(feature = "runtime-benchmarks"))] type PolymeshHooks = polymesh_contracts::ContractPolymeshHooks; @@ -433,6 +432,16 @@ macro_rules! misc_pallet_impls { type MaxStorageKeyLen = frame_support::traits::ConstU32<128>; type UnsafeUnstableInterface = frame_support::traits::ConstBool; type MaxDebugBufferLen = frame_support::traits::ConstU32<{ 2 * 1024 * 1024 }>; + #[cfg(not(feature = "runtime-benchmarks"))] + type Migrations = ( + pallet_contracts::migration::v11::Migration, + pallet_contracts::migration::v12::Migration, + pallet_contracts::migration::v13::Migration, + ); + #[cfg(feature = "runtime-benchmarks")] + type Migrations = pallet_contracts::migration::codegen::BenchMigrations; + type MaxDelegateDependencies = frame_support::traits::ConstU32<32>; + type CodeHashLockupDepositPercent = polymesh_runtime_common::CodeHashLockupDepositPercent; } impl pallet_compliance_manager::Config for Runtime { @@ -799,6 +808,11 @@ macro_rules! runtime_apis { ) >; + type EventRecord = frame_system::EventRecord< + ::RuntimeEvent, + ::Hash, + >; + sp_api::impl_runtime_apis! { impl sp_api::Core for Runtime { fn version() -> RuntimeVersion { @@ -818,6 +832,14 @@ macro_rules! runtime_apis { fn metadata() -> sp_core::OpaqueMetadata { sp_core::OpaqueMetadata::new(Runtime::metadata().into()) } + + fn metadata_at_version(version: u32) -> Option { + Runtime::metadata_at_version(version) + } + + fn metadata_versions() -> sp_std::vec::Vec { + Runtime::metadata_versions() + } } impl sp_block_builder::BlockBuilder for Runtime { @@ -957,6 +979,7 @@ macro_rules! runtime_apis { Balance, BlockNumber, polymesh_primitives::Hash, + EventRecord, > for Runtime { fn call( origin: polymesh_primitives::AccountId, @@ -965,9 +988,19 @@ macro_rules! runtime_apis { gas_limit: Option, storage_deposit_limit: Option, input_data: Vec, - ) -> pallet_contracts_primitives::ContractExecResult { + ) -> pallet_contracts_primitives::ContractExecResult { let gas_limit = gas_limit.unwrap_or(polymesh_runtime_common::RuntimeBlockWeights::get().max_block); - Contracts::bare_call(origin, dest, value, gas_limit, storage_deposit_limit, input_data, true, pallet_contracts::Determinism::Deterministic) + Contracts::bare_call( + origin, + dest, + value, + gas_limit, + storage_deposit_limit, + input_data, + pallet_contracts::DebugInfo::UnsafeDebug, + pallet_contracts::CollectEvents::UnsafeCollect, + pallet_contracts::Determinism::Enforced, + ) } fn instantiate( @@ -978,9 +1011,19 @@ macro_rules! runtime_apis { code: pallet_contracts_primitives::Code, data: Vec, salt: Vec, - ) -> pallet_contracts_primitives::ContractInstantiateResult { + ) -> pallet_contracts_primitives::ContractInstantiateResult { let gas_limit = gas_limit.unwrap_or(polymesh_runtime_common::RuntimeBlockWeights::get().max_block); - Contracts::bare_instantiate(origin, value, gas_limit, storage_deposit_limit, code, data, salt, true) + Contracts::bare_instantiate( + origin, + value, + gas_limit, + storage_deposit_limit, + code, + data, + salt, + pallet_contracts::DebugInfo::UnsafeDebug, + pallet_contracts::CollectEvents::UnsafeCollect, + ) } fn upload_code( diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index 5909b5de2e..38dfbfd48d 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -140,8 +140,6 @@ parameter_types! { // Contracts: pub Schedule: pallet_contracts::Schedule = Default::default(); - pub DeletionWeightLimit: Weight = Weight::from_parts(500_000_000_000, 0); - pub DeletionQueueDepth: u32 = 1024; pub MaxInLen: u32 = 8 * 1024; pub MaxOutLen: u32 = 8 * 1024; diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index 2e0fc34025..1b91ff3672 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -136,8 +136,6 @@ parameter_types! { // Contracts: pub Schedule: pallet_contracts::Schedule = Default::default(); - pub DeletionWeightLimit: Weight = Weight::from_parts(500_000_000_000, 0); - pub DeletionQueueDepth: u32 = 1024; pub MaxInLen: u32 = 8 * 1024; pub MaxOutLen: u32 = 8 * 1024; diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index 7fda9efc9e..2352c36768 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -139,8 +139,6 @@ parameter_types! { // Contracts: pub Schedule: pallet_contracts::Schedule = Default::default(); - pub DeletionWeightLimit: Weight = Weight::from_parts(500_000_000_000, 0); - pub DeletionQueueDepth: u32 = 1024; pub MaxInLen: u32 = 8 * 1024; pub MaxOutLen: u32 = 8 * 1024; diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index f3423f7a02..ee200a61c8 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -482,8 +482,6 @@ parameter_types! { pub const MaxValueSize: u32 = 16_384; pub Schedule: pallet_contracts::Schedule = Default::default(); - pub DeletionWeightLimit: Weight = Weight::from_parts(500_000_000_000, 0); - pub DeletionQueueDepth: u32 = 1024; pub MaxInLen: u32 = 8 * 1024; pub MaxOutLen: u32 = 8 * 1024; } From 97daddda838fd8e8adc35dd36729c72f774aa42f Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Tue, 7 Jan 2025 00:53:15 +0800 Subject: [PATCH 20/97] Update weights --- pallets/weights/src/frame_system.rs | 13 + pallets/weights/src/pallet_babe.rs | 20 +- pallets/weights/src/pallet_contracts.rs | 3810 +++++++++++------------ pallets/weights/src/pallet_grandpa.rs | 17 +- pallets/weights/src/pallet_im_online.rs | 92 +- 5 files changed, 1948 insertions(+), 2004 deletions(-) diff --git a/pallets/weights/src/frame_system.rs b/pallets/weights/src/frame_system.rs index 45e5819588..182685ca15 100644 --- a/pallets/weights/src/frame_system.rs +++ b/pallets/weights/src/frame_system.rs @@ -77,6 +77,19 @@ impl frame_system::WeightInfo for SubstrateWeight { .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } + /// Storage: System Digest (r:1 w:1) + /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: unknown `0x3a636f6465` (r:0 w:1) + /// Proof Skipped: unknown `0x3a636f6465` (r:0 w:1) + fn set_code() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `1485` + // Minimum execution time: 84_000_503_000 picoseconds. + Weight::from_parts(87_586_619_000, 1485) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(2_u64)) + } // Storage: Skipped Metadata (r:0 w:0) // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 1000]`. diff --git a/pallets/weights/src/pallet_babe.rs b/pallets/weights/src/pallet_babe.rs index c524b4d514..59a12c6b4d 100644 --- a/pallets/weights/src/pallet_babe.rs +++ b/pallets/weights/src/pallet_babe.rs @@ -1,13 +1,13 @@ // This file is part of Substrate. -// Copyright (C) 2021 Parity Technologies (UK) Ltd. +// Copyright (C) Parity Technologies (UK) Ltd. // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // -// http://www.apache.org/licenses/LICENSE-2.0 +// http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, @@ -21,24 +21,18 @@ use polymesh_primitives::{ RocksDbWeight as DbWeight, Weight, WEIGHT_REF_TIME_PER_MICROS, WEIGHT_REF_TIME_PER_NANOS, }; - /// Weights for pallet_babe using the Substrate node and recommended hardware. pub struct SubstrateWeight; impl pallet_babe::WeightInfo for SubstrateWeight { fn plan_config_change() -> Weight { - Weight::zero() + DbWeight::get().writes(1) } - // WARNING! Some components were not used: ["x"] - fn report_equivocation(validator_count: u32) -> Weight { + fn report_equivocation(validator_count: u32, max_nominators_per_validator: u32) -> Weight { // we take the validator set count from the membership proof to // calculate the weight but we set a floor of 100 validators. let validator_count = validator_count.max(100) as u64; - // worst case we are considering is that the given offender - // is backed by 200 nominators - const MAX_NOMINATORS: u64 = 200; - // checking membership proof Weight::from_parts(35u64 * WEIGHT_REF_TIME_PER_MICROS, 0) .saturating_add( @@ -51,10 +45,10 @@ impl pallet_babe::WeightInfo for SubstrateWeight { // report offence .saturating_add(Weight::from_parts(110u64 * WEIGHT_REF_TIME_PER_MICROS, 0)) .saturating_add(Weight::from_parts( - 25u64 * WEIGHT_REF_TIME_PER_MICROS * MAX_NOMINATORS, + 25u64 * WEIGHT_REF_TIME_PER_MICROS * max_nominators_per_validator as u64, 0, )) - .saturating_add(DbWeight::get().reads(14 + 3 * MAX_NOMINATORS)) - .saturating_add(DbWeight::get().writes(10 + 3 * MAX_NOMINATORS)) + .saturating_add(DbWeight::get().reads(14 + 3 * max_nominators_per_validator as u64)) + .saturating_add(DbWeight::get().writes(10 + 3 * max_nominators_per_validator as u64)) } } diff --git a/pallets/weights/src/pallet_contracts.rs b/pallets/weights/src/pallet_contracts.rs index 0157466938..33a96b6e37 100644 --- a/pallets/weights/src/pallet_contracts.rs +++ b/pallets/weights/src/pallet_contracts.rs @@ -1,13 +1,13 @@ // This file is part of Substrate. -// Copyright (C) 2021 Parity Technologies (UK) Ltd. +// Copyright (C) Parity Technologies (UK) Ltd. // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // -// http://www.apache.org/licenses/LICENSE-2.0 +// http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, @@ -15,1950 +15,1890 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! Autogenerated weights for pallet_contracts +//! Autogenerated weights for `pallet_contracts` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! DATE: 2023-07-25, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `runner-ynta1nyy-project-145-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` +//! EXECUTION: ``, WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` // Executed Command: -// ./polymesh +// target/production/substrate-node // benchmark // pallet -// -s -// 100 -// -r -// 5 -// -p=* -// -e=* -// --heap-pages -// 4096 -// --db-cache -// 512 -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// ./Polymesh/pallets/weights/src/ -// --template -// ./.maintain/frame-weight-template.hbs +// --steps=50 +// --repeat=20 +// --extrinsic=* +// --wasm-execution=compiled +// --heap-pages=4096 +// --json-file=/builds/parity/mirrors/substrate/.git/.artifacts/bench.json +// --pallet=pallet_contracts +// --chain=dev +// --header=./HEADER-APACHE2 +// --output=./frame/contracts/src/weights.rs +// --template=./.maintain/frame-weight-template.hbs +#![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] +#![allow(missing_docs)] use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; -/// Weights for pallet_contracts using the Substrate node and recommended hardware. +/// Weights for `pallet_contracts` using the Substrate node and recommended hardware. pub struct SubstrateWeight; -impl pallet_contracts::weights::WeightInfo for SubstrateWeight { - // Storage: Contracts DeletionQueue (r:1 w:0) - // Proof: Contracts DeletionQueue (max_values: Some(1), max_size: Some(133122), added: 133617, mode: Measured) - fn on_process_deletion_queue_batch() -> Weight { - // Minimum execution time: 3_976 nanoseconds. - Weight::from_parts(4_227_000).saturating_add(DbWeight::get().reads(1)) - } - // Storage: Skipped Metadata (r:0 w:0) - // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) - /// The range of component `k` is `[0, 1024]`. - fn on_initialize_per_trie_key(k: u32) -> Weight { - // Minimum execution time: 15_323 nanoseconds. - Weight::from_parts(15_714_000) - // Standard Error: 1_653 - .saturating_add(Weight::from_parts(1_014_805).saturating_mul(k.into())) - .saturating_add(DbWeight::get().reads(1)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(k.into()))) - .saturating_add(DbWeight::get().writes(1)) - .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(k.into()))) - } - // Storage: Contracts DeletionQueue (r:1 w:1) - // Proof: Contracts DeletionQueue (max_values: Some(1), max_size: Some(133122), added: 133617, mode: Measured) - /// The range of component `q` is `[0, 1024]`. - fn on_initialize_per_queue_item(q: u32) -> Weight { - // Minimum execution time: 4_337 nanoseconds. - Weight::from_parts(2_663_978) - // Standard Error: 9_706 - .saturating_add(Weight::from_parts(1_861_521).saturating_mul(q.into())) - .saturating_add(DbWeight::get().reads(1)) - .saturating_add(DbWeight::get().writes(1)) - } - // Storage: Contracts PristineCode (r:1 w:0) - // Proof: Contracts PristineCode (max_values: None, max_size: Some(125988), added: 128463, mode: Measured) - // Storage: Contracts CodeStorage (r:0 w:1) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - /// The range of component `c` is `[0, 61717]`. - fn reinstrument(c: u32) -> Weight { - // Minimum execution time: 53_400 nanoseconds. - Weight::from_parts(63_326_873) - // Standard Error: 147 - .saturating_add(Weight::from_parts(54_195).saturating_mul(c.into())) - .saturating_add(DbWeight::get().reads(1)) - .saturating_add(DbWeight::get().writes(1)) - } - // Storage: Identity KeyRecords (r:2 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System Account (r:1 w:1) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `c` is `[0, 125952]`. - fn call_with_code_per_byte(c: u32) -> Weight { - // Minimum execution time: 540_821 nanoseconds. - Weight::from_parts(577_943_143) - // Standard Error: 174 - .saturating_add(Weight::from_parts(32_416).saturating_mul(c.into())) - .saturating_add(DbWeight::get().reads(12)) - .saturating_add(DbWeight::get().writes(4)) - } - // Storage: Identity KeyRecords (r:3 w:1) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: Contracts OwnerInfoOf (r:1 w:1) - // Proof: Contracts OwnerInfoOf (max_values: None, max_size: Some(88), added: 2563, mode: Measured) - // Storage: Contracts Nonce (r:1 w:1) - // Proof: Contracts Nonce (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: System Account (r:2 w:2) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: Measured) - // Storage: System EventTopics (r:3 w:3) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - // Storage: Identity DidKeys (r:0 w:1) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Identity KeyPortfolioPermissions (r:0 w:1) - // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) - // Storage: Identity KeyExtrinsicPermissions (r:0 w:1) - // Proof Skipped: Identity KeyExtrinsicPermissions (max_values: None, max_size: None, mode: Measured) - // Storage: Identity KeyAssetPermissions (r:0 w:1) - // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) - // Storage: Contracts CodeStorage (r:0 w:1) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: Contracts PristineCode (r:0 w:1) - // Proof: Contracts PristineCode (max_values: None, max_size: Some(125988), added: 128463, mode: Measured) - /// The range of component `c` is `[0, 61717]`. - /// The range of component `i` is `[0, 1048576]`. - /// The range of component `s` is `[0, 1048576]`. - fn instantiate_with_code(c: u32, i: u32, s: u32) -> Weight { - // Minimum execution time: 3_878_728 nanoseconds. - Weight::from_parts(693_972_051) - // Standard Error: 187 - .saturating_add(Weight::from_parts(100_167).saturating_mul(c.into())) - // Standard Error: 11 - .saturating_add(Weight::from_parts(1_550).saturating_mul(i.into())) - // Standard Error: 11 - .saturating_add(Weight::from_parts(1_601).saturating_mul(s.into())) - .saturating_add(DbWeight::get().reads(16)) - .saturating_add(DbWeight::get().writes(15)) - } - // Storage: Identity KeyRecords (r:3 w:1) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: Contracts Nonce (r:1 w:1) - // Proof: Contracts Nonce (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: System Account (r:2 w:2) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: Measured) - // Storage: Contracts OwnerInfoOf (r:1 w:1) - // Proof: Contracts OwnerInfoOf (max_values: None, max_size: Some(88), added: 2563, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - // Storage: Identity DidKeys (r:0 w:1) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Identity KeyPortfolioPermissions (r:0 w:1) - // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) - // Storage: Identity KeyExtrinsicPermissions (r:0 w:1) - // Proof Skipped: Identity KeyExtrinsicPermissions (max_values: None, max_size: None, mode: Measured) - // Storage: Identity KeyAssetPermissions (r:0 w:1) - // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) - /// The range of component `i` is `[0, 1048576]`. - /// The range of component `s` is `[0, 1048576]`. - fn instantiate(i: u32, s: u32) -> Weight { - // Minimum execution time: 1_998_126 nanoseconds. - Weight::from_parts(384_573_388) - // Standard Error: 8 - .saturating_add(Weight::from_parts(1_563).saturating_mul(i.into())) - // Standard Error: 8 - .saturating_add(Weight::from_parts(1_613).saturating_mul(s.into())) - .saturating_add(DbWeight::get().reads(16)) - .saturating_add(DbWeight::get().writes(12)) - } - // Storage: Identity KeyRecords (r:2 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System Account (r:1 w:1) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - fn call() -> Weight { - // Minimum execution time: 245_889 nanoseconds. - Weight::from_parts(276_054_000) - .saturating_add(DbWeight::get().reads(12)) - .saturating_add(DbWeight::get().writes(4)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: Contracts OwnerInfoOf (r:1 w:1) - // Proof: Contracts OwnerInfoOf (max_values: None, max_size: Some(88), added: 2563, mode: Measured) - // Storage: System EventTopics (r:1 w:1) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - // Storage: Contracts CodeStorage (r:0 w:1) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: Contracts PristineCode (r:0 w:1) - // Proof: Contracts PristineCode (max_values: None, max_size: Some(125988), added: 128463, mode: Measured) - /// The range of component `c` is `[0, 61717]`. - fn upload_code(c: u32) -> Weight { - // Minimum execution time: 564_797 nanoseconds. - Weight::from_parts(598_173_828) - // Standard Error: 298 - .saturating_add(Weight::from_parts(98_207).saturating_mul(c.into())) - .saturating_add(DbWeight::get().reads(7)) - .saturating_add(DbWeight::get().writes(4)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: Contracts OwnerInfoOf (r:1 w:1) - // Proof: Contracts OwnerInfoOf (max_values: None, max_size: Some(88), added: 2563, mode: Measured) - // Storage: System EventTopics (r:1 w:1) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - // Storage: Contracts CodeStorage (r:0 w:1) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: Contracts PristineCode (r:0 w:1) - // Proof: Contracts PristineCode (max_values: None, max_size: Some(125988), added: 128463, mode: Measured) - fn remove_code() -> Weight { - // Minimum execution time: 63_966 nanoseconds. - Weight::from_parts(66_920_000) - .saturating_add(DbWeight::get().reads(7)) - .saturating_add(DbWeight::get().writes(4)) - } - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts OwnerInfoOf (r:2 w:2) - // Proof: Contracts OwnerInfoOf (max_values: None, max_size: Some(88), added: 2563, mode: Measured) - // Storage: System EventTopics (r:3 w:3) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - fn set_code() -> Weight { - // Minimum execution time: 37_527 nanoseconds. - Weight::from_parts(40_390_000) - .saturating_add(DbWeight::get().reads(6)) - .saturating_add(DbWeight::get().writes(6)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_caller(r: u32) -> Weight { - // Minimum execution time: 523_846 nanoseconds. - Weight::from_parts(555_283_517) - // Standard Error: 119_283 - .saturating_add(Weight::from_parts(34_403_204).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1601 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_is_contract(r: u32) -> Weight { - // Minimum execution time: 527_511 nanoseconds. - Weight::from_parts(397_513_912) - // Standard Error: 775_745 - .saturating_add(Weight::from_parts(306_459_192).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1601 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_code_hash(r: u32) -> Weight { - // Minimum execution time: 528_202 nanoseconds. - Weight::from_parts(397_864_443) - // Standard Error: 816_166 - .saturating_add(Weight::from_parts(392_206_177).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_own_code_hash(r: u32) -> Weight { - // Minimum execution time: 527_782 nanoseconds. - Weight::from_parts(556_350_298) - // Standard Error: 285_990 - .saturating_add(Weight::from_parts(47_026_771).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_caller_is_origin(r: u32) -> Weight { - // Minimum execution time: 526_820 nanoseconds. - Weight::from_parts(556_093_160) - // Standard Error: 119_283 - .saturating_add(Weight::from_parts(10_906_360).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_address(r: u32) -> Weight { - // Minimum execution time: 527_501 nanoseconds. - Weight::from_parts(559_700_423) - // Standard Error: 132_729 - .saturating_add(Weight::from_parts(33_770_625).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_gas_left(r: u32) -> Weight { - // Minimum execution time: 528_742 nanoseconds. - Weight::from_parts(564_866_652) - // Standard Error: 127_233 - .saturating_add(Weight::from_parts(33_166_665).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:2 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_balance(r: u32) -> Weight { - // Minimum execution time: 523_946 nanoseconds. - Weight::from_parts(573_437_181) - // Standard Error: 234_629 - .saturating_add(Weight::from_parts(170_616_101).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(11)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_value_transferred(r: u32) -> Weight { - // Minimum execution time: 526_238 nanoseconds. - Weight::from_parts(559_048_166) - // Standard Error: 172_069 - .saturating_add(Weight::from_parts(33_843_592).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_minimum_balance(r: u32) -> Weight { - // Minimum execution time: 525_448 nanoseconds. - Weight::from_parts(553_270_611) - // Standard Error: 139_208 - .saturating_add(Weight::from_parts(34_189_121).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_block_number(r: u32) -> Weight { - // Minimum execution time: 526_119 nanoseconds. - Weight::from_parts(559_366_345) - // Standard Error: 108_401 - .saturating_add(Weight::from_parts(33_650_874).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_now(r: u32) -> Weight { - // Minimum execution time: 526_480 nanoseconds. - Weight::from_parts(561_503_863) - // Standard Error: 129_832 - .saturating_add(Weight::from_parts(33_644_096).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: TransactionPayment NextFeeMultiplier (r:1 w:0) - // Proof: TransactionPayment NextFeeMultiplier (max_values: Some(1), max_size: Some(16), added: 511, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_weight_to_fee(r: u32) -> Weight { - // Minimum execution time: 522_352 nanoseconds. - Weight::from_parts(560_876_274) - // Standard Error: 160_615 - .saturating_add(Weight::from_parts(119_618_219).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(11)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_gas(r: u32) -> Weight { - // Minimum execution time: 219_520 nanoseconds. - Weight::from_parts(242_833_568) - // Standard Error: 99_077 - .saturating_add(Weight::from_parts(9_331_370).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_input(r: u32) -> Weight { - // Minimum execution time: 522_524 nanoseconds. - Weight::from_parts(556_526_408) - // Standard Error: 100_774 - .saturating_add(Weight::from_parts(24_791_762).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 1024]`. - fn seal_input_per_kb(n: u32) -> Weight { - // Minimum execution time: 554_061 nanoseconds. - Weight::from_parts(565_676_259) - // Standard Error: 8_715 - .saturating_add(Weight::from_parts(11_865_975).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 1]`. - fn seal_return(r: u32) -> Weight { - // Minimum execution time: 516_345 nanoseconds. - Weight::from_parts(545_428_144) - // Standard Error: 5_011_570 - .saturating_add(Weight::from_parts(2_163_020).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 1024]`. - fn seal_return_per_kb(n: u32) -> Weight { - // Minimum execution time: 530_936 nanoseconds. - Weight::from_parts(556_530_842) - // Standard Error: 3_520 - .saturating_add(Weight::from_parts(284_791).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:4 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:4 w:4) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: Measured) - // Storage: Contracts DeletionQueue (r:1 w:1) - // Proof: Contracts DeletionQueue (max_values: Some(1), max_size: Some(133122), added: 133617, mode: Measured) - // Storage: Contracts OwnerInfoOf (r:1 w:1) - // Proof: Contracts OwnerInfoOf (max_values: None, max_size: Some(88), added: 2563, mode: Measured) - // Storage: System EventTopics (r:3 w:3) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 1]`. - fn seal_terminate(r: u32) -> Weight { - // Minimum execution time: 522_024 nanoseconds. - Weight::from_parts(554_541_096) - // Standard Error: 5_739_935 - .saturating_add(Weight::from_parts(73_574_570).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().reads((10_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3)) - .saturating_add(DbWeight::get().writes((7_u64).saturating_mul(r.into()))) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: RandomnessCollectiveFlip RandomMaterial (r:1 w:0) - // Proof: RandomnessCollectiveFlip RandomMaterial (max_values: Some(1), max_size: Some(2594), added: 3089, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_random(r: u32) -> Weight { - // Minimum execution time: 522_093 nanoseconds. - Weight::from_parts(564_361_561) - // Standard Error: 199_260 - .saturating_add(Weight::from_parts(185_943_661).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(11)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_deposit_event(r: u32) -> Weight { - // Minimum execution time: 523_524 nanoseconds. - Weight::from_parts(580_562_913) - // Standard Error: 294_841 - .saturating_add(Weight::from_parts(321_589_317).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:322 w:322) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `t` is `[0, 4]`. - /// The range of component `n` is `[0, 16]`. - fn seal_deposit_event_per_topic_and_kb(t: u32, n: u32) -> Weight { - // Minimum execution time: 1_682_403 nanoseconds. - Weight::from_parts(842_877_771) - // Standard Error: 829_052 - .saturating_add(Weight::from_parts(252_190_620).saturating_mul(t.into())) - // Standard Error: 225_983 - .saturating_add(Weight::from_parts(56_055_640).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(t.into()))) - .saturating_add(DbWeight::get().writes(3)) - .saturating_add(DbWeight::get().writes((80_u64).saturating_mul(t.into()))) - } - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_debug_message(r: u32) -> Weight { - // Minimum execution time: 215_783 nanoseconds. - Weight::from_parts(238_081_555) - // Standard Error: 101_403 - .saturating_add(Weight::from_parts(17_553_904).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(6)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `i` is `[0, 1024]`. - fn seal_debug_message_per_kb(i: u32) -> Weight { - // Minimum execution time: 629_093 nanoseconds. - Weight::from_parts(661_562_743) - // Standard Error: 2_844 - .saturating_add(Weight::from_parts(852_358).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(6)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Skipped Metadata (r:0 w:0) - // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 10]`. - fn seal_set_storage(r: u32) -> Weight { - // Minimum execution time: 524_947 nanoseconds. - Weight::from_parts(468_265_151) - // Standard Error: 1_137_296 - .saturating_add(Weight::from_parts(503_173_868).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3)) - .saturating_add(DbWeight::get().writes((80_u64).saturating_mul(r.into()))) - } - // Storage: Skipped Metadata (r:0 w:0) - // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 8]`. - fn seal_set_storage_per_new_kb(n: u32) -> Weight { - // Minimum execution time: 730_164 nanoseconds. - Weight::from_parts(918_834_147) - // Standard Error: 2_107_295 - .saturating_add(Weight::from_parts(105_144_502).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(58)) - .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) - .saturating_add(DbWeight::get().writes(51)) - .saturating_add(DbWeight::get().writes((7_u64).saturating_mul(n.into()))) - } - // Storage: Skipped Metadata (r:0 w:0) - // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 8]`. - fn seal_set_storage_per_old_kb(n: u32) -> Weight { - // Minimum execution time: 735_272 nanoseconds. - Weight::from_parts(883_668_183) - // Standard Error: 1_549_905 - .saturating_add(Weight::from_parts(63_633_258).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(57)) - .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) - .saturating_add(DbWeight::get().writes(50)) - .saturating_add(DbWeight::get().writes((7_u64).saturating_mul(n.into()))) - } - // Storage: Skipped Metadata (r:0 w:0) - // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 10]`. - fn seal_clear_storage(r: u32) -> Weight { - // Minimum execution time: 525_779 nanoseconds. - Weight::from_parts(470_012_174) - // Standard Error: 1_040_597 - .saturating_add(Weight::from_parts(497_818_740).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3)) - .saturating_add(DbWeight::get().writes((80_u64).saturating_mul(r.into()))) - } - // Storage: Skipped Metadata (r:0 w:0) - // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 8]`. - fn seal_clear_storage_per_kb(n: u32) -> Weight { - // Minimum execution time: 698_547 nanoseconds. - Weight::from_parts(845_589_720) - // Standard Error: 1_746_906 - .saturating_add(Weight::from_parts(68_116_173).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(56)) - .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) - .saturating_add(DbWeight::get().writes(49)) - .saturating_add(DbWeight::get().writes((7_u64).saturating_mul(n.into()))) - } - // Storage: Skipped Metadata (r:0 w:0) - // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 10]`. - fn seal_get_storage(r: u32) -> Weight { - // Minimum execution time: 524_937 nanoseconds. - Weight::from_parts(499_235_847) - // Standard Error: 833_562 - .saturating_add(Weight::from_parts(419_411_717).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Skipped Metadata (r:0 w:0) - // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 8]`. - fn seal_get_storage_per_kb(n: u32) -> Weight { - // Minimum execution time: 659_298 nanoseconds. - Weight::from_parts(806_624_172) - // Standard Error: 1_558_888 - .saturating_add(Weight::from_parts(155_780_234).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(57)) - .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Skipped Metadata (r:0 w:0) - // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 10]`. - fn seal_contains_storage(r: u32) -> Weight { - // Minimum execution time: 524_697 nanoseconds. - Weight::from_parts(486_839_180) - // Standard Error: 921_666 - .saturating_add(Weight::from_parts(396_312_810).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Skipped Metadata (r:0 w:0) - // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 8]`. - fn seal_contains_storage_per_kb(n: u32) -> Weight { - // Minimum execution time: 658_558 nanoseconds. - Weight::from_parts(790_340_713) - // Standard Error: 1_363_405 - .saturating_add(Weight::from_parts(60_074_828).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(56)) - .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Skipped Metadata (r:0 w:0) - // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 10]`. - fn seal_take_storage(r: u32) -> Weight { - // Minimum execution time: 523_115 nanoseconds. - Weight::from_parts(467_995_064) - // Standard Error: 1_162_377 - .saturating_add(Weight::from_parts(511_579_790).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3)) - .saturating_add(DbWeight::get().writes((80_u64).saturating_mul(r.into()))) - } - // Storage: Skipped Metadata (r:0 w:0) - // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 8]`. - fn seal_take_storage_per_kb(n: u32) -> Weight { - // Minimum execution time: 701_593 nanoseconds. - Weight::from_parts(861_901_495) - // Standard Error: 1_816_711 - .saturating_add(Weight::from_parts(158_033_438).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(57)) - .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) - .saturating_add(DbWeight::get().writes(50)) - .saturating_add(DbWeight::get().writes((7_u64).saturating_mul(n.into()))) - } - // Storage: Identity KeyRecords (r:1602 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1602 w:1601) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_transfer(r: u32) -> Weight { - // Minimum execution time: 528_082 nanoseconds. - Weight::from_parts(540_641_000) - // Standard Error: 2_268_145 - .saturating_add(Weight::from_parts(2_818_079_627).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(12)) - .saturating_add(DbWeight::get().reads((160_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(4)) - .saturating_add(DbWeight::get().writes((80_u64).saturating_mul(r.into()))) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1601 w:1601) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:2 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:1602 w:1602) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_call(r: u32) -> Weight { - // Minimum execution time: 527_550 nanoseconds. - Weight::from_parts(537_526_000) - // Standard Error: 9_328_669 - .saturating_add(Weight::from_parts(38_277_163_473).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(11)) - .saturating_add(DbWeight::get().reads((160_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3)) - .saturating_add(DbWeight::get().writes((160_u64).saturating_mul(r.into()))) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1536 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:1537 w:1537) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_delegate_call(r: u32) -> Weight { - // Minimum execution time: 529_014 nanoseconds. - Weight::from_parts(543_015_000) - // Standard Error: 10_034_631 - .saturating_add(Weight::from_parts(38_085_820_243).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().reads((150_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3)) - .saturating_add(DbWeight::get().writes((75_u64).saturating_mul(r.into()))) - } - // Storage: Identity KeyRecords (r:4 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:82 w:3) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:81 w:3) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:2 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: Identity IsDidFrozen (r:3 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: Measured) - // Storage: System EventTopics (r:4 w:4) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `t` is `[0, 1]`. - /// The range of component `c` is `[0, 1024]`. - fn seal_call_per_transfer_clone_kb(t: u32, c: u32) -> Weight { - // Minimum execution time: 2_383_715 nanoseconds. - Weight::from_parts(13_838_973_067) - // Standard Error: 22_196 - .saturating_add(Weight::from_parts(12_185_812).saturating_mul(c.into())) - .saturating_add(DbWeight::get().reads(171)) - .saturating_add(DbWeight::get().reads((9_u64).saturating_mul(t.into()))) - .saturating_add(DbWeight::get().writes(163)) - } - // Storage: Identity KeyRecords (r:3202 w:1600) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:3202 w:3202) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1601 w:1601) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1601 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: Contracts Nonce (r:1 w:1) - // Proof: Contracts Nonce (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: Measured) - // Storage: Contracts OwnerInfoOf (r:1600 w:1600) - // Proof: Contracts OwnerInfoOf (max_values: None, max_size: Some(88), added: 2563, mode: Measured) - // Storage: System EventTopics (r:1602 w:1602) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - // Storage: Identity DidKeys (r:0 w:1600) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Identity KeyPortfolioPermissions (r:0 w:1600) - // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) - // Storage: Identity KeyExtrinsicPermissions (r:0 w:1600) - // Proof Skipped: Identity KeyExtrinsicPermissions (max_values: None, max_size: None, mode: Measured) - // Storage: Identity KeyAssetPermissions (r:0 w:1600) - // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_instantiate(r: u32) -> Weight { - // Minimum execution time: 532_698 nanoseconds. - Weight::from_parts(547_732_000) - // Standard Error: 61_834_234 - .saturating_add(Weight::from_parts(53_166_481_809).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(13)) - .saturating_add(DbWeight::get().reads((640_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(5)) - .saturating_add(DbWeight::get().writes((800_u64).saturating_mul(r.into()))) - } - // Storage: Identity KeyRecords (r:162 w:80) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:162 w:162) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:81 w:81) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:2 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: Contracts Nonce (r:1 w:1) - // Proof: Contracts Nonce (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: Measured) - // Storage: Contracts OwnerInfoOf (r:1 w:1) - // Proof: Contracts OwnerInfoOf (max_values: None, max_size: Some(88), added: 2563, mode: Measured) - // Storage: System EventTopics (r:82 w:82) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - // Storage: Identity DidKeys (r:0 w:80) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Identity KeyPortfolioPermissions (r:0 w:80) - // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) - // Storage: Identity KeyExtrinsicPermissions (r:0 w:80) - // Proof Skipped: Identity KeyExtrinsicPermissions (max_values: None, max_size: None, mode: Measured) - // Storage: Identity KeyAssetPermissions (r:0 w:80) - // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) - /// The range of component `t` is `[0, 1]`. - /// The range of component `i` is `[0, 960]`. - /// The range of component `s` is `[0, 960]`. - fn seal_instantiate_per_transfer_input_salt_kb(t: u32, i: u32, s: u32) -> Weight { - // Minimum execution time: 143_039_451 nanoseconds. - Weight::from_parts(24_149_373_642) - // Standard Error: 107_503_088 - .saturating_add(Weight::from_parts(1_573_055_094).saturating_mul(t.into())) - // Standard Error: 170_588 - .saturating_add(Weight::from_parts(123_562_194).saturating_mul(i.into())) - // Standard Error: 170_588 - .saturating_add(Weight::from_parts(123_174_665).saturating_mul(s.into())) - .saturating_add(DbWeight::get().reads(495)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(t.into()))) - .saturating_add(DbWeight::get().writes(726)) - .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(t.into()))) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 1]`. - fn seal_hash_sha2_256(r: u32) -> Weight { - // Minimum execution time: 521_092 nanoseconds. - Weight::from_parts(549_756_253) - // Standard Error: 4_912_912 - .saturating_add(Weight::from_parts(42_145_080).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 1024]`. - fn seal_hash_sha2_256_per_kb(n: u32) -> Weight { - // Minimum execution time: 565_038 nanoseconds. - Weight::from_parts(570_743_640) - // Standard Error: 75_789 - .saturating_add(Weight::from_parts(71_877_485).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 1]`. - fn seal_hash_keccak_256(r: u32) -> Weight { - // Minimum execution time: 520_631 nanoseconds. - Weight::from_parts(548_856_345) - // Standard Error: 4_774_220 - .saturating_add(Weight::from_parts(72_776_321).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 1024]`. - fn seal_hash_keccak_256_per_kb(n: u32) -> Weight { - // Minimum execution time: 603_646 nanoseconds. - Weight::from_parts(589_857_099) - // Standard Error: 92_340 - .saturating_add(Weight::from_parts(233_271_241).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 1]`. - fn seal_hash_blake2_256(r: u32) -> Weight { - // Minimum execution time: 521_293 nanoseconds. - Weight::from_parts(548_086_915) - // Standard Error: 4_227_483 - .saturating_add(Weight::from_parts(44_695_417).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 1024]`. - fn seal_hash_blake2_256_per_kb(n: u32) -> Weight { - // Minimum execution time: 584_126 nanoseconds. - Weight::from_parts(455_420_818) - // Standard Error: 55_489 - .saturating_add(Weight::from_parts(99_687_551).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 1]`. - fn seal_hash_blake2_128(r: u32) -> Weight { - // Minimum execution time: 522_604 nanoseconds. - Weight::from_parts(553_499_457) - // Standard Error: 4_520_787 - .saturating_add(Weight::from_parts(54_118_542).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 1024]`. - fn seal_hash_blake2_128_per_kb(n: u32) -> Weight { - // Minimum execution time: 590_276 nanoseconds. - Weight::from_parts(446_645_617) - // Standard Error: 32_141 - .saturating_add(Weight::from_parts(99_746_726).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 1]`. - fn seal_ecdsa_recover(r: u32) -> Weight { - // Minimum execution time: 525_218 nanoseconds. - Weight::from_parts(554_737_112) - // Standard Error: 5_073_773 - .saturating_add(Weight::from_parts(3_710_895_554).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 1]`. - fn seal_ecdsa_to_eth_address(r: u32) -> Weight { - // Minimum execution time: 524_447 nanoseconds. - Weight::from_parts(553_526_771) - // Standard Error: 4_965_388 - .saturating_add(Weight::from_parts(883_719_895).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1536 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: Contracts OwnerInfoOf (r:1536 w:1536) - // Proof: Contracts OwnerInfoOf (max_values: None, max_size: Some(88), added: 2563, mode: Measured) - // Storage: System EventTopics (r:1538 w:1538) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_set_code_hash(r: u32) -> Weight { - // Minimum execution time: 529_995 nanoseconds. - Weight::from_parts(545_868_000) - // Standard Error: 5_045_496 - .saturating_add(Weight::from_parts(2_026_142_732).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().reads((225_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3)) - .saturating_add(DbWeight::get().writes((150_u64).saturating_mul(r.into()))) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_reentrance_count(r: u32) -> Weight { - // Minimum execution time: 524_397 nanoseconds. - Weight::from_parts(557_472_545) - // Standard Error: 116_920 - .saturating_add(Weight::from_parts(11_388_938).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_account_reentrance_count(r: u32) -> Weight { - // Minimum execution time: 528_141 nanoseconds. - Weight::from_parts(625_286_159) - // Standard Error: 314_371 - .saturating_add(Weight::from_parts(25_329_831).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) - .saturating_add(DbWeight::get().writes(3)) - } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:1 w:0) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: Measured) - // Storage: Contracts ContractInfoOf (r:1 w:1) - // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: Measured) - // Storage: Contracts CodeStorage (r:1 w:0) - // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: Measured) - // Storage: Contracts Nonce (r:1 w:1) - // Proof: Contracts Nonce (max_values: Some(1), max_size: Some(8), added: 503, mode: Measured) - // Storage: System EventTopics (r:2 w:2) - // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) - /// The range of component `r` is `[0, 20]`. - fn seal_instantiation_nonce(r: u32) -> Weight { - // Minimum execution time: 535_894 nanoseconds. - Weight::from_parts(561_829_766) - // Standard Error: 105_459 - .saturating_add(Weight::from_parts(9_173_564).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(11)) - .saturating_add(DbWeight::get().writes(4)) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64const(r: u32) -> Weight { - // Minimum execution time: 1_352 nanoseconds. - Weight::from_parts(2_783_730) - // Standard Error: 7_339 - .saturating_add(Weight::from_parts(444_972).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64load(r: u32) -> Weight { - // Minimum execution time: 1_903 nanoseconds. - Weight::from_parts(3_697_937) - // Standard Error: 11_979 - .saturating_add(Weight::from_parts(966_137).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64store(r: u32) -> Weight { - // Minimum execution time: 1_973 nanoseconds. - Weight::from_parts(2_757_471) - // Standard Error: 13_718 - .saturating_add(Weight::from_parts(1_104_431).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_select(r: u32) -> Weight { - // Minimum execution time: 1_412 nanoseconds. - Weight::from_parts(3_181_079) - // Standard Error: 10_936 - .saturating_add(Weight::from_parts(955_369).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_if(r: u32) -> Weight { - // Minimum execution time: 1_412 nanoseconds. - Weight::from_parts(2_324_194) - // Standard Error: 25_130 - .saturating_add(Weight::from_parts(1_440_799).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_br(r: u32) -> Weight { - // Minimum execution time: 1_372 nanoseconds. - Weight::from_parts(3_283_270) - // Standard Error: 8_465 - .saturating_add(Weight::from_parts(544_421).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_br_if(r: u32) -> Weight { - // Minimum execution time: 1_382 nanoseconds. - Weight::from_parts(3_338_465) - // Standard Error: 9_756 - .saturating_add(Weight::from_parts(816_473).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_br_table(r: u32) -> Weight { - // Minimum execution time: 1_382 nanoseconds. - Weight::from_parts(3_177_028) - // Standard Error: 10_463 - .saturating_add(Weight::from_parts(1_035_963).saturating_mul(r.into())) - } - /// The range of component `e` is `[1, 256]`. - fn instr_br_table_per_entry(e: u32) -> Weight { - // Minimum execution time: 3_225 nanoseconds. - Weight::from_parts(4_194_754) - // Standard Error: 558 - .saturating_add(Weight::from_parts(4_369).saturating_mul(e.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_call(r: u32) -> Weight { - // Minimum execution time: 1_352 nanoseconds. - Weight::from_parts(1_834_243) - // Standard Error: 14_134 - .saturating_add(Weight::from_parts(3_373_361).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_call_indirect(r: u32) -> Weight { - // Minimum execution time: 1_823 nanoseconds. - Weight::from_parts(3_998_489) - // Standard Error: 19_496 - .saturating_add(Weight::from_parts(5_744_104).saturating_mul(r.into())) - } - /// The range of component `p` is `[0, 128]`. - fn instr_call_indirect_per_param(p: u32) -> Weight { - // Minimum execution time: 7_912 nanoseconds. - Weight::from_parts(10_851_572) - // Standard Error: 3_777 - .saturating_add(Weight::from_parts(181_526).saturating_mul(p.into())) - } - /// The range of component `l` is `[0, 1024]`. - fn instr_call_per_local(l: u32) -> Weight { - // Minimum execution time: 4_396 nanoseconds. - Weight::from_parts(4_797_570) - // Standard Error: 921 - .saturating_add(Weight::from_parts(115_290).saturating_mul(l.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_local_get(r: u32) -> Weight { - // Minimum execution time: 3_966 nanoseconds. - Weight::from_parts(5_462_134) - // Standard Error: 7_223 - .saturating_add(Weight::from_parts(309_078).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_local_set(r: u32) -> Weight { - // Minimum execution time: 3_946 nanoseconds. - Weight::from_parts(4_964_072) - // Standard Error: 7_086 - .saturating_add(Weight::from_parts(334_457).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_local_tee(r: u32) -> Weight { - // Minimum execution time: 3_936 nanoseconds. - Weight::from_parts(6_557_158) - // Standard Error: 9_590 - .saturating_add(Weight::from_parts(465_847).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_global_get(r: u32) -> Weight { - // Minimum execution time: 1_622 nanoseconds. - Weight::from_parts(3_553_697) - // Standard Error: 9_162 - .saturating_add(Weight::from_parts(872_644).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_global_set(r: u32) -> Weight { - // Minimum execution time: 1_603 nanoseconds. - Weight::from_parts(3_406_118) - // Standard Error: 8_451 - .saturating_add(Weight::from_parts(896_599).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_memory_current(r: u32) -> Weight { - // Minimum execution time: 1_993 nanoseconds. - Weight::from_parts(3_550_590) - // Standard Error: 8_487 - .saturating_add(Weight::from_parts(677_960).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 1]`. - fn instr_memory_grow(r: u32) -> Weight { - // Minimum execution time: 1_382 nanoseconds. - Weight::from_parts(1_782_096) - // Standard Error: 936_282 - .saturating_add(Weight::from_parts(296_916_570).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64clz(r: u32) -> Weight { - // Minimum execution time: 1_422 nanoseconds. - Weight::from_parts(3_246_580) - // Standard Error: 8_507 - .saturating_add(Weight::from_parts(750_957).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64ctz(r: u32) -> Weight { - // Minimum execution time: 1_412 nanoseconds. - Weight::from_parts(3_370_936) - // Standard Error: 7_962 - .saturating_add(Weight::from_parts(743_303).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64popcnt(r: u32) -> Weight { - // Minimum execution time: 1_362 nanoseconds. - Weight::from_parts(3_312_128) - // Standard Error: 8_706 - .saturating_add(Weight::from_parts(731_242).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64eqz(r: u32) -> Weight { - // Minimum execution time: 1_392 nanoseconds. - Weight::from_parts(3_198_835) - // Standard Error: 7_976 - .saturating_add(Weight::from_parts(745_980).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64extendsi32(r: u32) -> Weight { - // Minimum execution time: 1_392 nanoseconds. - Weight::from_parts(3_585_237) - // Standard Error: 8_560 - .saturating_add(Weight::from_parts(736_239).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64extendui32(r: u32) -> Weight { - // Minimum execution time: 1_392 nanoseconds. - Weight::from_parts(3_206_681) - // Standard Error: 8_505 - .saturating_add(Weight::from_parts(763_525).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i32wrapi64(r: u32) -> Weight { - // Minimum execution time: 1_372 nanoseconds. - Weight::from_parts(2_983_110) - // Standard Error: 13_750 - .saturating_add(Weight::from_parts(2_218_164).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64eq(r: u32) -> Weight { - // Minimum execution time: 1_352 nanoseconds. - Weight::from_parts(3_205_218) - // Standard Error: 10_221 - .saturating_add(Weight::from_parts(805_266).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64ne(r: u32) -> Weight { - // Minimum execution time: 1_422 nanoseconds. - Weight::from_parts(3_239_502) - // Standard Error: 10_206 - .saturating_add(Weight::from_parts(786_528).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64lts(r: u32) -> Weight { - // Minimum execution time: 1_392 nanoseconds. - Weight::from_parts(3_325_658) - // Standard Error: 9_625 - .saturating_add(Weight::from_parts(802_863).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64ltu(r: u32) -> Weight { - // Minimum execution time: 1_442 nanoseconds. - Weight::from_parts(3_201_207) - // Standard Error: 8_220 - .saturating_add(Weight::from_parts(778_538).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64gts(r: u32) -> Weight { - // Minimum execution time: 1_392 nanoseconds. - Weight::from_parts(3_259_518) - // Standard Error: 9_793 - .saturating_add(Weight::from_parts(799_152).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64gtu(r: u32) -> Weight { - // Minimum execution time: 1_312 nanoseconds. - Weight::from_parts(3_294_521) - // Standard Error: 8_990 - .saturating_add(Weight::from_parts(780_969).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64les(r: u32) -> Weight { - // Minimum execution time: 1_472 nanoseconds. - Weight::from_parts(3_594_211) - // Standard Error: 9_450 - .saturating_add(Weight::from_parts(771_796).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64leu(r: u32) -> Weight { - // Minimum execution time: 1_472 nanoseconds. - Weight::from_parts(3_424_447) - // Standard Error: 9_162 - .saturating_add(Weight::from_parts(771_317).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64ges(r: u32) -> Weight { - // Minimum execution time: 1_412 nanoseconds. - Weight::from_parts(3_190_916) - // Standard Error: 9_309 - .saturating_add(Weight::from_parts(786_726).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64geu(r: u32) -> Weight { - // Minimum execution time: 1_382 nanoseconds. - Weight::from_parts(3_500_169) - // Standard Error: 9_913 - .saturating_add(Weight::from_parts(794_546).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64add(r: u32) -> Weight { - // Minimum execution time: 1_372 nanoseconds. - Weight::from_parts(3_731_711) - // Standard Error: 9_528 - .saturating_add(Weight::from_parts(749_925).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64sub(r: u32) -> Weight { - // Minimum execution time: 1_342 nanoseconds. - Weight::from_parts(3_159_584) - // Standard Error: 9_229 - .saturating_add(Weight::from_parts(769_079).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64mul(r: u32) -> Weight { - // Minimum execution time: 1_292 nanoseconds. - Weight::from_parts(3_687_415) - // Standard Error: 9_473 - .saturating_add(Weight::from_parts(756_447).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64divs(r: u32) -> Weight { - // Minimum execution time: 1_372 nanoseconds. - Weight::from_parts(3_205_775) - // Standard Error: 10_518 - .saturating_add(Weight::from_parts(946_927).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64divu(r: u32) -> Weight { - // Minimum execution time: 1_402 nanoseconds. - Weight::from_parts(3_434_550) - // Standard Error: 11_131 - .saturating_add(Weight::from_parts(1_021_101).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64rems(r: u32) -> Weight { - // Minimum execution time: 1_412 nanoseconds. - Weight::from_parts(3_546_024) - // Standard Error: 9_706 - .saturating_add(Weight::from_parts(972_567).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64remu(r: u32) -> Weight { - // Minimum execution time: 1_402 nanoseconds. - Weight::from_parts(3_021_270) - // Standard Error: 10_847 - .saturating_add(Weight::from_parts(945_604).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64and(r: u32) -> Weight { - // Minimum execution time: 1_302 nanoseconds. - Weight::from_parts(3_505_463) - // Standard Error: 10_203 - .saturating_add(Weight::from_parts(796_210).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64or(r: u32) -> Weight { - // Minimum execution time: 1_372 nanoseconds. - Weight::from_parts(3_516_154) - // Standard Error: 10_127 - .saturating_add(Weight::from_parts(773_188).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64xor(r: u32) -> Weight { - // Minimum execution time: 1_372 nanoseconds. - Weight::from_parts(3_567_010) - // Standard Error: 9_691 - .saturating_add(Weight::from_parts(774_602).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64shl(r: u32) -> Weight { - // Minimum execution time: 1_402 nanoseconds. - Weight::from_parts(3_452_123) - // Standard Error: 9_970 - .saturating_add(Weight::from_parts(797_048).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64shrs(r: u32) -> Weight { - // Minimum execution time: 1_342 nanoseconds. - Weight::from_parts(3_440_660) - // Standard Error: 9_536 - .saturating_add(Weight::from_parts(764_439).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64shru(r: u32) -> Weight { - // Minimum execution time: 1_373 nanoseconds. - Weight::from_parts(3_004_001) - // Standard Error: 9_392 - .saturating_add(Weight::from_parts(773_645).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64rotl(r: u32) -> Weight { - // Minimum execution time: 1_362 nanoseconds. - Weight::from_parts(3_273_952) - // Standard Error: 10_637 - .saturating_add(Weight::from_parts(809_037).saturating_mul(r.into())) - } - /// The range of component `r` is `[0, 50]`. - fn instr_i64rotr(r: u32) -> Weight { - // Minimum execution time: 1_322 nanoseconds. - Weight::from_parts(3_288_736) - // Standard Error: 9_241 - .saturating_add(Weight::from_parts(769_025).saturating_mul(r.into())) - } +impl pallet_contracts::WeightInfo for SubstrateWeight { + /// Storage: `Contracts::DeletionQueueCounter` (r:1 w:0) + /// Proof: `Contracts::DeletionQueueCounter` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + fn on_process_deletion_queue_batch() -> Weight { + // Proof Size summary in bytes: + // Measured: `142` + // Estimated: `1627` + // Minimum execution time: 2_527_000 picoseconds. + Weight::from_parts(2_651_000, 1627) + .saturating_add(DbWeight::get().reads(1_u64)) + } + /// Storage: `Skipped::Metadata` (r:0 w:0) + /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `k` is `[0, 1024]`. + fn on_initialize_per_trie_key(k: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `451 + k * (69 ±0)` + // Estimated: `441 + k * (70 ±0)` + // Minimum execution time: 13_291_000 picoseconds. + Weight::from_parts(13_825_000, 441) + // Standard Error: 1_137 + .saturating_add(Weight::from_parts(1_244_309, 0).saturating_mul(k.into())) + .saturating_add(DbWeight::get().reads(2_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(k.into()))) + .saturating_add(DbWeight::get().writes(2_u64)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(k.into()))) + .saturating_add(Weight::from_parts(0, 70).saturating_mul(k.into())) + } + /// Storage: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc553022fca90611ba8b7942f8bdb3b97f6580` (r:2 w:1) + /// Proof: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc553022fca90611ba8b7942f8bdb3b97f6580` (r:2 w:1) + /// The range of component `c` is `[0, 125952]`. + fn v9_migration_step(c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `211 + c * (1 ±0)` + // Estimated: `6149 + c * (1 ±0)` + // Minimum execution time: 8_359_000 picoseconds. + Weight::from_parts(9_179_121, 6149) + // Standard Error: 1 + .saturating_add(Weight::from_parts(1_312, 0).saturating_mul(c.into())) + .saturating_add(DbWeight::get().reads(2_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(c.into())) + } + /// Storage: `Contracts::ContractInfoOf` (r:3 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + fn v10_migration_step() -> Weight { + // Proof Size summary in bytes: + // Measured: `709` + // Estimated: `9124` + // Minimum execution time: 42_457_000 picoseconds. + Weight::from_parts(44_556_000, 9124) + .saturating_add(DbWeight::get().reads(4_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: `Contracts::DeletionQueue` (r:1 w:1025) + /// Proof: `Contracts::DeletionQueue` (`max_values`: None, `max_size`: Some(142), added: 2617, mode: `Measured`) + /// Storage: `Contracts::DeletionQueueCounter` (r:0 w:1) + /// Proof: `Contracts::DeletionQueueCounter` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// The range of component `k` is `[0, 1024]`. + fn v11_migration_step(k: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `171 + k * (1 ±0)` + // Estimated: `3635 + k * (1 ±0)` + // Minimum execution time: 3_839_000 picoseconds. + Weight::from_parts(3_462_337, 3635) + // Standard Error: 1_384 + .saturating_add(Weight::from_parts(1_166_522, 0).saturating_mul(k.into())) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(2_u64)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(k.into()))) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(k.into())) + } + /// Storage: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc553053f13fd319a03c211337c76e0fe776df` (r:2 w:0) + /// Proof: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc553053f13fd319a03c211337c76e0fe776df` (r:2 w:0) + /// Storage: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc553022fca90611ba8b7942f8bdb3b97f6580` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc553022fca90611ba8b7942f8bdb3b97f6580` (r:1 w:1) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:0 w:1) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// The range of component `c` is `[0, 125952]`. + fn v12_migration_step(c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `325 + c * (1 ±0)` + // Estimated: `6263 + c * (1 ±0)` + // Minimum execution time: 17_001_000 picoseconds. + Weight::from_parts(17_095_380, 6263) + // Standard Error: 1 + .saturating_add(Weight::from_parts(411, 0).saturating_mul(c.into())) + .saturating_add(DbWeight::get().reads(4_u64)) + .saturating_add(DbWeight::get().writes(2_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(c.into())) + } + /// Storage: `Contracts::ContractInfoOf` (r:3 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + fn v13_migration_step() -> Weight { + // Proof Size summary in bytes: + // Measured: `639` + // Estimated: `9054` + // Minimum execution time: 35_342_000 picoseconds. + Weight::from_parts(36_839_000, 9054) + .saturating_add(DbWeight::get().reads(3_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:1) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + fn migration_noop() -> Weight { + // Proof Size summary in bytes: + // Measured: `142` + // Estimated: `1627` + // Minimum execution time: 3_272_000 picoseconds. + Weight::from_parts(3_553_000, 1627) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:1) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc55304e7b9012096b41c4eb3aaf947f6ea429` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc55304e7b9012096b41c4eb3aaf947f6ea429` (r:1 w:1) + fn migrate() -> Weight { + // Proof Size summary in bytes: + // Measured: `166` + // Estimated: `3631` + // Minimum execution time: 12_788_000 picoseconds. + Weight::from_parts(13_163_000, 3631) + .saturating_add(DbWeight::get().reads(2_u64)) + .saturating_add(DbWeight::get().writes(2_u64)) + } + /// Storage: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc55304e7b9012096b41c4eb3aaf947f6ea429` (r:1 w:0) + /// Proof: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc55304e7b9012096b41c4eb3aaf947f6ea429` (r:1 w:0) + fn on_runtime_upgrade_noop() -> Weight { + // Proof Size summary in bytes: + // Measured: `142` + // Estimated: `3607` + // Minimum execution time: 4_794_000 picoseconds. + Weight::from_parts(5_086_000, 3607) + .saturating_add(DbWeight::get().reads(1_u64)) + } + /// Storage: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc55304e7b9012096b41c4eb3aaf947f6ea429` (r:1 w:0) + /// Proof: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc55304e7b9012096b41c4eb3aaf947f6ea429` (r:1 w:0) + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + fn on_runtime_upgrade_in_progress() -> Weight { + // Proof Size summary in bytes: + // Measured: `167` + // Estimated: `3632` + // Minimum execution time: 6_616_000 picoseconds. + Weight::from_parts(7_034_000, 3632) + .saturating_add(DbWeight::get().reads(2_u64)) + } + /// Storage: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc55304e7b9012096b41c4eb3aaf947f6ea429` (r:1 w:0) + /// Proof: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc55304e7b9012096b41c4eb3aaf947f6ea429` (r:1 w:0) + /// Storage: `Contracts::MigrationInProgress` (r:1 w:1) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + fn on_runtime_upgrade() -> Weight { + // Proof Size summary in bytes: + // Measured: `142` + // Estimated: `3607` + // Minimum execution time: 6_985_000 picoseconds. + Weight::from_parts(7_477_000, 3607) + .saturating_add(DbWeight::get().reads(2_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `c` is `[0, 125952]`. + fn call_with_code_per_byte(c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `783` + // Estimated: `6732 + c * (1 ±0)` + // Minimum execution time: 306_088_000 picoseconds. + Weight::from_parts(268_361_911, 6732) + // Standard Error: 76 + .saturating_add(Weight::from_parts(38_334, 0).saturating_mul(c.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(c.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:1) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `System::EventTopics` (r:3 w:3) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Contracts::Nonce` (r:1 w:1) + /// Proof: `Contracts::Nonce` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::Account` (r:2 w:2) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:0 w:1) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// The range of component `c` is `[0, 125952]`. + /// The range of component `i` is `[0, 1048576]`. + /// The range of component `s` is `[0, 1048576]`. + fn instantiate_with_code(c: u32, i: u32, s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `303` + // Estimated: `8745` + // Minimum execution time: 4_224_657_000 picoseconds. + Weight::from_parts(451_557_864, 8745) + // Standard Error: 216 + .saturating_add(Weight::from_parts(111_761, 0).saturating_mul(c.into())) + // Standard Error: 26 + .saturating_add(Weight::from_parts(1_794, 0).saturating_mul(i.into())) + // Standard Error: 26 + .saturating_add(Weight::from_parts(2_013, 0).saturating_mul(s.into())) + .saturating_add(DbWeight::get().reads(10_u64)) + .saturating_add(DbWeight::get().writes(9_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:1) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Contracts::Nonce` (r:1 w:1) + /// Proof: `Contracts::Nonce` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::Account` (r:2 w:2) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `i` is `[0, 1048576]`. + /// The range of component `s` is `[0, 1048576]`. + fn instantiate(i: u32, s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `527` + // Estimated: `6517` + // Minimum execution time: 2_029_313_000 picoseconds. + Weight::from_parts(353_077_600, 6517) + // Standard Error: 8 + .saturating_add(Weight::from_parts(1_781, 0).saturating_mul(i.into())) + // Standard Error: 8 + .saturating_add(Weight::from_parts(1_729, 0).saturating_mul(s.into())) + .saturating_add(DbWeight::get().reads(10_u64)) + .saturating_add(DbWeight::get().writes(7_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn call() -> Weight { + // Proof Size summary in bytes: + // Measured: `817` + // Estimated: `6757` + // Minimum execution time: 204_086_000 picoseconds. + Weight::from_parts(216_738_000, 6757) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(4_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:1) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `System::EventTopics` (r:1 w:1) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:0 w:1) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// The range of component `c` is `[0, 125952]`. + fn upload_code(c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `142` + // Estimated: `3607` + // Minimum execution time: 269_337_000 picoseconds. + Weight::from_parts(220_186_006, 3607) + // Standard Error: 106 + .saturating_add(Weight::from_parts(74_291, 0).saturating_mul(c.into())) + .saturating_add(DbWeight::get().reads(3_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:1) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `System::EventTopics` (r:1 w:1) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:0 w:1) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + fn remove_code() -> Weight { + // Proof Size summary in bytes: + // Measured: `259` + // Estimated: `3724` + // Minimum execution time: 35_127_000 picoseconds. + Weight::from_parts(36_180_000, 3724) + .saturating_add(DbWeight::get().reads(3_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:2 w:2) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `System::EventTopics` (r:3 w:3) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn set_code() -> Weight { + // Proof Size summary in bytes: + // Measured: `576` + // Estimated: `8991` + // Minimum execution time: 37_550_000 picoseconds. + Weight::from_parts(39_149_000, 8991) + .saturating_add(DbWeight::get().reads(7_u64)) + .saturating_add(DbWeight::get().writes(6_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_caller(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `857 + r * (6 ±0)` + // Estimated: `6798 + r * (6 ±0)` + // Minimum execution time: 269_991_000 picoseconds. + Weight::from_parts(293_993_592, 6798) + // Standard Error: 665 + .saturating_add(Weight::from_parts(343_796, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1601 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_is_contract(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `924 + r * (232 ±0)` + // Estimated: `6831 + r * (2707 ±0)` + // Minimum execution time: 274_151_000 picoseconds. + Weight::from_parts(83_529_206, 6831) + // Standard Error: 8_452 + .saturating_add(Weight::from_parts(3_534_024, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 2707).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1601 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_code_hash(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `910 + r * (236 ±0)` + // Estimated: `6835 + r * (2711 ±0)` + // Minimum execution time: 276_689_000 picoseconds. + Weight::from_parts(110_268_281, 6835) + // Standard Error: 8_106 + .saturating_add(Weight::from_parts(4_376_136, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 2711).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_own_code_hash(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `864 + r * (6 ±0)` + // Estimated: `6806 + r * (6 ±0)` + // Minimum execution time: 274_079_000 picoseconds. + Weight::from_parts(282_258_090, 6806) + // Standard Error: 1_343 + .saturating_add(Weight::from_parts(464_680, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_caller_is_origin(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `854 + r * (3 ±0)` + // Estimated: `6799 + r * (3 ±0)` + // Minimum execution time: 270_960_000 picoseconds. + Weight::from_parts(281_985_584, 6799) + // Standard Error: 378 + .saturating_add(Weight::from_parts(184_462, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 3).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_caller_is_root(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `744 + r * (3 ±0)` + // Estimated: `6684 + r * (3 ±0)` + // Minimum execution time: 244_835_000 picoseconds. + Weight::from_parts(270_660_753, 6684) + // Standard Error: 390 + .saturating_add(Weight::from_parts(164_232, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(7_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 3).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_address(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `858 + r * (6 ±0)` + // Estimated: `6800 + r * (6 ±0)` + // Minimum execution time: 273_269_000 picoseconds. + Weight::from_parts(274_468_168, 6800) + // Standard Error: 2_246 + .saturating_add(Weight::from_parts(386_838, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_gas_left(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `854 + r * (6 ±0)` + // Estimated: `6795 + r * (6 ±0)` + // Minimum execution time: 275_244_000 picoseconds. + Weight::from_parts(281_299_739, 6795) + // Standard Error: 2_890 + .saturating_add(Weight::from_parts(600_498, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:2 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_balance(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `998 + r * (6 ±0)` + // Estimated: `6922 + r * (6 ±0)` + // Minimum execution time: 271_540_000 picoseconds. + Weight::from_parts(298_456_935, 6922) + // Standard Error: 2_881 + .saturating_add(Weight::from_parts(1_719_337, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(9_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_value_transferred(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `868 + r * (6 ±0)` + // Estimated: `6817 + r * (6 ±0)` + // Minimum execution time: 274_832_000 picoseconds. + Weight::from_parts(286_078_648, 6817) + // Standard Error: 695 + .saturating_add(Weight::from_parts(345_045, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_minimum_balance(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `866 + r * (6 ±0)` + // Estimated: `6815 + r * (6 ±0)` + // Minimum execution time: 267_337_000 picoseconds. + Weight::from_parts(283_693_170, 6815) + // Standard Error: 580 + .saturating_add(Weight::from_parts(345_350, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_block_number(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `863 + r * (6 ±0)` + // Estimated: `6813 + r * (6 ±0)` + // Minimum execution time: 276_313_000 picoseconds. + Weight::from_parts(287_689_703, 6813) + // Standard Error: 1_251 + .saturating_add(Weight::from_parts(342_536, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_now(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `854 + r * (6 ±0)` + // Estimated: `6799 + r * (6 ±0)` + // Minimum execution time: 274_196_000 picoseconds. + Weight::from_parts(288_641_687, 6799) + // Standard Error: 530 + .saturating_add(Weight::from_parts(336_194, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `TransactionPayment::NextFeeMultiplier` (r:1 w:0) + /// Proof: `TransactionPayment::NextFeeMultiplier` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_weight_to_fee(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `928 + r * (14 ±0)` + // Estimated: `6861 + r * (14 ±0)` + // Minimum execution time: 254_997_000 picoseconds. + Weight::from_parts(292_260_891, 6861) + // Standard Error: 1_019 + .saturating_add(Weight::from_parts(1_447_021, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(9_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 14).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_input(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `856 + r * (6 ±0)` + // Estimated: `6800 + r * (6 ±0)` + // Minimum execution time: 272_720_000 picoseconds. + Weight::from_parts(287_125_181, 6800) + // Standard Error: 491 + .saturating_add(Weight::from_parts(294_488, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 1048576]`. + fn seal_input_per_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `860` + // Estimated: `6800` + // Minimum execution time: 280_665_000 picoseconds. + Weight::from_parts(233_022_448, 6800) + // Standard Error: 23 + .saturating_add(Weight::from_parts(996, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1]`. + fn seal_return(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `844 + r * (45 ±0)` + // Estimated: `6784 + r * (45 ±0)` + // Minimum execution time: 250_335_000 picoseconds. + Weight::from_parts(278_774_071, 6784) + // Standard Error: 873_509 + .saturating_add(Weight::from_parts(4_562_628, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 45).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 1048576]`. + fn seal_return_per_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `854` + // Estimated: `6807` + // Minimum execution time: 278_402_000 picoseconds. + Weight::from_parts(285_491_021, 6807) + // Standard Error: 0 + .saturating_add(Weight::from_parts(312, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:4 w:4) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:2 w:2) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `Contracts::DeletionQueueCounter` (r:1 w:1) + /// Proof: `Contracts::DeletionQueueCounter` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:3 w:3) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Contracts::DeletionQueue` (r:0 w:1) + /// Proof: `Contracts::DeletionQueue` (`max_values`: None, `max_size`: Some(142), added: 2617, mode: `Measured`) + /// The range of component `r` is `[0, 1]`. + fn seal_terminate(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `2963 + r * (400 ±0)` + // Estimated: `8903 + r * (7825 ±0)` + // Minimum execution time: 281_030_000 picoseconds. + Weight::from_parts(305_435_226, 8903) + // Standard Error: 816_824 + .saturating_add(Weight::from_parts(131_691_873, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(DbWeight::get().writes((9_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 7825).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `RandomnessCollectiveFlip::RandomMaterial` (r:1 w:0) + /// Proof: `RandomnessCollectiveFlip::RandomMaterial` (`max_values`: Some(1), `max_size`: Some(2594), added: 3089, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_random(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `935 + r * (10 ±0)` + // Estimated: `6876 + r * (10 ±0)` + // Minimum execution time: 261_369_000 picoseconds. + Weight::from_parts(300_458_315, 6876) + // Standard Error: 3_506 + .saturating_add(Weight::from_parts(1_971_733, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(9_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 10).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_deposit_event(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `854 + r * (10 ±0)` + // Estimated: `6799 + r * (10 ±0)` + // Minimum execution time: 262_894_000 picoseconds. + Weight::from_parts(285_321_838, 6799) + // Standard Error: 6_585 + .saturating_add(Weight::from_parts(3_998_744, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 10).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:6 w:6) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `t` is `[0, 4]`. + /// The range of component `n` is `[0, 16384]`. + fn seal_deposit_event_per_topic_and_byte(t: u32, n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `873 + t * (32 ±0)` + // Estimated: `6820 + t * (2508 ±0)` + // Minimum execution time: 275_909_000 picoseconds. + Weight::from_parts(289_251_568, 6820) + // Standard Error: 94_431 + .saturating_add(Weight::from_parts(3_007_409, 0).saturating_mul(t.into())) + // Standard Error: 26 + .saturating_add(Weight::from_parts(815, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(t.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(t.into()))) + .saturating_add(Weight::from_parts(0, 2508).saturating_mul(t.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_debug_message(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `853 + r * (7 ±0)` + // Estimated: `6797 + r * (7 ±0)` + // Minimum execution time: 168_482_000 picoseconds. + Weight::from_parts(178_065_606, 6797) + // Standard Error: 371 + .saturating_add(Weight::from_parts(242_851, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 7).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `MaxEncodedLen`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `MaxEncodedLen`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `MaxEncodedLen`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `i` is `[0, 1048576]`. + fn seal_debug_message_per_byte(i: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `125804` + // Estimated: `131746` + // Minimum execution time: 407_401_000 picoseconds. + Weight::from_parts(426_585_443, 131746) + // Standard Error: 22 + .saturating_add(Weight::from_parts(986, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + } + /// Storage: `Skipped::Metadata` (r:0 w:0) + /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 800]`. + fn seal_set_storage(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `921 + r * (292 ±0)` + // Estimated: `919 + r * (293 ±0)` + // Minimum execution time: 275_800_000 picoseconds. + Weight::from_parts(161_230_700, 919) + // Standard Error: 12_908 + .saturating_add(Weight::from_parts(6_965_844, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 293).saturating_mul(r.into())) + } + /// Storage: `Skipped::Metadata` (r:0 w:0) + /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 16384]`. + fn seal_set_storage_per_new_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1380` + // Estimated: `1356` + // Minimum execution time: 289_258_000 picoseconds. + Weight::from_parts(334_318_402, 1356) + // Standard Error: 59 + .saturating_add(Weight::from_parts(808, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(10_u64)) + .saturating_add(DbWeight::get().writes(6_u64)) + } + /// Storage: `Skipped::Metadata` (r:0 w:0) + /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 16384]`. + fn seal_set_storage_per_old_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1243 + n * (1 ±0)` + // Estimated: `1243 + n * (1 ±0)` + // Minimum execution time: 277_874_000 picoseconds. + Weight::from_parts(303_956_600, 1243) + // Standard Error: 33 + .saturating_add(Weight::from_parts(58, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(9_u64)) + .saturating_add(DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) + } + /// Storage: `Skipped::Metadata` (r:0 w:0) + /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 800]`. + fn seal_clear_storage(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `917 + r * (288 ±0)` + // Estimated: `921 + r * (289 ±0)` + // Minimum execution time: 255_230_000 picoseconds. + Weight::from_parts(163_226_984, 921) + // Standard Error: 12_691 + .saturating_add(Weight::from_parts(6_808_905, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 289).saturating_mul(r.into())) + } + /// Storage: `Skipped::Metadata` (r:0 w:0) + /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 16384]`. + fn seal_clear_storage_per_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1239 + n * (1 ±0)` + // Estimated: `1239 + n * (1 ±0)` + // Minimum execution time: 275_780_000 picoseconds. + Weight::from_parts(301_967_262, 1239) + // Standard Error: 34 + .saturating_add(Weight::from_parts(128, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(9_u64)) + .saturating_add(DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) + } + /// Storage: `Skipped::Metadata` (r:0 w:0) + /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 800]`. + fn seal_get_storage(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `911 + r * (296 ±0)` + // Estimated: `916 + r * (297 ±0)` + // Minimum execution time: 279_295_000 picoseconds. + Weight::from_parts(208_289_066, 916) + // Standard Error: 8_330 + .saturating_add(Weight::from_parts(5_600_713, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 297).saturating_mul(r.into())) + } + /// Storage: `Skipped::Metadata` (r:0 w:0) + /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 16384]`. + fn seal_get_storage_per_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1255 + n * (1 ±0)` + // Estimated: `1255 + n * (1 ±0)` + // Minimum execution time: 276_745_000 picoseconds. + Weight::from_parts(298_824_233, 1255) + // Standard Error: 36 + .saturating_add(Weight::from_parts(717, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(9_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) + } + /// Storage: `Skipped::Metadata` (r:0 w:0) + /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 800]`. + fn seal_contains_storage(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `932 + r * (288 ±0)` + // Estimated: `933 + r * (289 ±0)` + // Minimum execution time: 275_137_000 picoseconds. + Weight::from_parts(196_695_898, 933) + // Standard Error: 9_207 + .saturating_add(Weight::from_parts(5_466_071, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 289).saturating_mul(r.into())) + } + /// Storage: `Skipped::Metadata` (r:0 w:0) + /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 16384]`. + fn seal_contains_storage_per_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1242 + n * (1 ±0)` + // Estimated: `1242 + n * (1 ±0)` + // Minimum execution time: 269_315_000 picoseconds. + Weight::from_parts(296_795_271, 1242) + // Standard Error: 39 + .saturating_add(Weight::from_parts(242, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(9_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) + } + /// Storage: `Skipped::Metadata` (r:0 w:0) + /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 800]`. + fn seal_take_storage(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `905 + r * (296 ±0)` + // Estimated: `912 + r * (297 ±0)` + // Minimum execution time: 256_406_000 picoseconds. + Weight::from_parts(156_850_288, 912) + // Standard Error: 12_496 + .saturating_add(Weight::from_parts(7_055_305, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 297).saturating_mul(r.into())) + } + /// Storage: `Skipped::Metadata` (r:0 w:0) + /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 16384]`. + fn seal_take_storage_per_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1256 + n * (1 ±0)` + // Estimated: `1256 + n * (1 ±0)` + // Minimum execution time: 280_297_000 picoseconds. + Weight::from_parts(302_241_752, 1256) + // Standard Error: 34 + .saturating_add(Weight::from_parts(748, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(9_u64)) + .saturating_add(DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1602 w:1601) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_transfer(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1449 + r * (45 ±0)` + // Estimated: `7346 + r * (2520 ±0)` + // Minimum execution time: 274_834_000 picoseconds. + Weight::from_parts(176_977_557, 7346) + // Standard Error: 32_386 + .saturating_add(Weight::from_parts(39_393_162, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(9_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(4_u64)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:801 w:801) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:2 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:2 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:803 w:803) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 800]`. + fn seal_call(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1304 + r * (268 ±0)` + // Estimated: `9485 + r * (2744 ±0)` + // Minimum execution time: 279_802_000 picoseconds. + Weight::from_parts(287_995_000, 9485) + // Standard Error: 99_110 + .saturating_add(Weight::from_parts(245_521_843, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(11_u64)) + .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(4_u64)) + .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2744).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:736 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:736 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:737 w:737) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 800]`. + fn seal_delegate_call(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0 + r * (576 ±0)` + // Estimated: `6803 + r * (2637 ±3)` + // Minimum execution time: 273_435_000 picoseconds. + Weight::from_parts(276_865_000, 6803) + // Standard Error: 148_051 + .saturating_add(Weight::from_parts(244_660_274, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2637).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:3 w:2) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:2 w:2) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:2 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:2 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:4 w:4) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `t` is `[0, 1]`. + /// The range of component `c` is `[0, 1048576]`. + fn seal_call_per_transfer_clone_byte(t: u32, c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1322 + t * (310 ±0)` + // Estimated: `12212 + t * (5260 ±0)` + // Minimum execution time: 477_593_000 picoseconds. + Weight::from_parts(69_887_451, 12212) + // Standard Error: 11_764_606 + .saturating_add(Weight::from_parts(373_361_977, 0).saturating_mul(t.into())) + // Standard Error: 17 + .saturating_add(Weight::from_parts(1_000, 0).saturating_mul(c.into())) + .saturating_add(DbWeight::get().reads(13_u64)) + .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(t.into()))) + .saturating_add(DbWeight::get().writes(6_u64)) + .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(t.into()))) + .saturating_add(Weight::from_parts(0, 5260).saturating_mul(t.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1602 w:1602) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:801 w:801) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:801 w:800) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:801 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `Contracts::Nonce` (r:1 w:1) + /// Proof: `Contracts::Nonce` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:802 w:802) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[1, 800]`. + fn seal_instantiate(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1380 + r * (255 ±0)` + // Estimated: `7204 + r * (5206 ±0)` + // Minimum execution time: 652_387_000 picoseconds. + Weight::from_parts(658_670_000, 7204) + // Standard Error: 363_054 + .saturating_add(Weight::from_parts(395_547_049, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(10_u64)) + .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(6_u64)) + .saturating_add(DbWeight::get().writes((5_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 5206).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:4 w:4) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:2 w:2) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:2 w:1) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:2 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `Contracts::Nonce` (r:1 w:1) + /// Proof: `Contracts::Nonce` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:3 w:3) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `t` is `[0, 1]`. + /// The range of component `i` is `[0, 983040]`. + /// The range of component `s` is `[0, 983040]`. + fn seal_instantiate_per_transfer_input_salt_byte(t: u32, i: u32, s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1233 + t * (156 ±0)` + // Estimated: `9663 + t * (2578 ±2)` + // Minimum execution time: 2_299_620_000 picoseconds. + Weight::from_parts(1_274_859_063, 9663) + // Standard Error: 12_129_871 + .saturating_add(Weight::from_parts(16_608_792, 0).saturating_mul(t.into())) + // Standard Error: 19 + .saturating_add(Weight::from_parts(1_014, 0).saturating_mul(i.into())) + // Standard Error: 19 + .saturating_add(Weight::from_parts(1_180, 0).saturating_mul(s.into())) + .saturating_add(DbWeight::get().reads(15_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(t.into()))) + .saturating_add(DbWeight::get().writes(10_u64)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(t.into()))) + .saturating_add(Weight::from_parts(0, 2578).saturating_mul(t.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_hash_sha2_256(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `853 + r * (8 ±0)` + // Estimated: `6794 + r * (8 ±0)` + // Minimum execution time: 267_959_000 picoseconds. + Weight::from_parts(282_967_946, 6794) + // Standard Error: 624 + .saturating_add(Weight::from_parts(402_344, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 8).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 1048576]`. + fn seal_hash_sha2_256_per_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `861` + // Estimated: `6801` + // Minimum execution time: 274_585_000 picoseconds. + Weight::from_parts(272_480_647, 6801) + // Standard Error: 1 + .saturating_add(Weight::from_parts(1_089, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_hash_keccak_256(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `855 + r * (8 ±0)` + // Estimated: `6797 + r * (8 ±0)` + // Minimum execution time: 268_346_000 picoseconds. + Weight::from_parts(284_168_231, 6797) + // Standard Error: 620 + .saturating_add(Weight::from_parts(805_038, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 8).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 1048576]`. + fn seal_hash_keccak_256_per_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `863` + // Estimated: `6805` + // Minimum execution time: 273_073_000 picoseconds. + Weight::from_parts(280_346_065, 6805) + // Standard Error: 1 + .saturating_add(Weight::from_parts(3_357, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_hash_blake2_256(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `855 + r * (8 ±0)` + // Estimated: `6800 + r * (8 ±0)` + // Minimum execution time: 263_072_000 picoseconds. + Weight::from_parts(284_487_433, 6800) + // Standard Error: 668 + .saturating_add(Weight::from_parts(458_763, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 8).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 1048576]`. + fn seal_hash_blake2_256_per_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `863` + // Estimated: `6809` + // Minimum execution time: 271_488_000 picoseconds. + Weight::from_parts(273_877_727, 6809) + // Standard Error: 1 + .saturating_add(Weight::from_parts(1_202, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_hash_blake2_128(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `855 + r * (8 ±0)` + // Estimated: `6801 + r * (8 ±0)` + // Minimum execution time: 271_365_000 picoseconds. + Weight::from_parts(285_100_883, 6801) + // Standard Error: 651 + .saturating_add(Weight::from_parts(462_754, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 8).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 1048576]`. + fn seal_hash_blake2_128_per_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `863` + // Estimated: `6803` + // Minimum execution time: 272_341_000 picoseconds. + Weight::from_parts(275_388_470, 6803) + // Standard Error: 1 + .saturating_add(Weight::from_parts(1_192, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[0, 125697]`. + fn seal_sr25519_verify_per_byte(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `988 + n * (1 ±0)` + // Estimated: `6925 + n * (1 ±0)` + // Minimum execution time: 341_302_000 picoseconds. + Weight::from_parts(354_111_630, 6925) + // Standard Error: 8 + .saturating_add(Weight::from_parts(5_913, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 160]`. + fn seal_sr25519_verify(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `804 + r * (112 ±0)` + // Estimated: `6742 + r * (112 ±0)` + // Minimum execution time: 275_325_000 picoseconds. + Weight::from_parts(333_041_903, 6742) + // Standard Error: 11_171 + .saturating_add(Weight::from_parts(56_605_218, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 112).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 160]`. + fn seal_ecdsa_recover(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `898 + r * (76 ±0)` + // Estimated: `6793 + r * (77 ±0)` + // Minimum execution time: 274_165_000 picoseconds. + Weight::from_parts(347_487_800, 6793) + // Standard Error: 15_398 + .saturating_add(Weight::from_parts(46_072_020, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 77).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 160]`. + fn seal_ecdsa_to_eth_address(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `868 + r * (42 ±0)` + // Estimated: `6807 + r * (42 ±0)` + // Minimum execution time: 270_855_000 picoseconds. + Weight::from_parts(320_777_105, 6807) + // Standard Error: 11_106 + .saturating_add(Weight::from_parts(12_053_053, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 42).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1536 w:1536) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1536 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:1538 w:1538) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_set_code_hash(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0 + r * (965 ±0)` + // Estimated: `6798 + r * (3090 ±10)` + // Minimum execution time: 257_732_000 picoseconds. + Weight::from_parts(280_982_000, 6798) + // Standard Error: 68_194 + .saturating_add(Weight::from_parts(27_413_991, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 3090).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:33 w:32) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 32]`. + fn add_delegate_dependency(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `918 + r * (132 ±0)` + // Estimated: `6870 + r * (2606 ±0)` + // Minimum execution time: 278_285_000 picoseconds. + Weight::from_parts(298_012_554, 6870) + // Standard Error: 24_160 + .saturating_add(Weight::from_parts(6_363_118, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2606).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `MaxEncodedLen`) + /// Storage: `Contracts::CodeInfoOf` (r:33 w:32) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `MaxEncodedLen`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `MaxEncodedLen`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 32]`. + fn remove_delegate_dependency(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `965 + r * (183 ±0)` + // Estimated: `129453 + r * (2568 ±0)` + // Minimum execution time: 258_198_000 picoseconds. + Weight::from_parts(290_090_206, 129453) + // Standard Error: 19_792 + .saturating_add(Weight::from_parts(6_004_811, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2568).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_reentrance_count(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `849 + r * (3 ±0)` + // Estimated: `6799 + r * (3 ±0)` + // Minimum execution time: 263_315_000 picoseconds. + Weight::from_parts(284_093_748, 6799) + // Standard Error: 371 + .saturating_add(Weight::from_parts(176_949, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 3).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_account_reentrance_count(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `2082 + r * (39 ±0)` + // Estimated: `7886 + r * (40 ±0)` + // Minimum execution time: 274_583_000 picoseconds. + Weight::from_parts(352_081_486, 7886) + // Standard Error: 1_799 + .saturating_add(Weight::from_parts(313_433, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 40).saturating_mul(r.into())) + } + /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) + /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:1 w:0) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `Contracts::Nonce` (r:1 w:1) + /// Proof: `Contracts::Nonce` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `System::EventTopics` (r:2 w:2) + /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `r` is `[0, 1600]`. + fn seal_instantiation_nonce(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `852 + r * (3 ±0)` + // Estimated: `6799 + r * (3 ±0)` + // Minimum execution time: 267_291_000 picoseconds. + Weight::from_parts(287_500_540, 6799) + // Standard Error: 393 + .saturating_add(Weight::from_parts(152_587, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(9_u64)) + .saturating_add(DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 3).saturating_mul(r.into())) + } + /// The range of component `r` is `[0, 5000]`. + fn instr_i64const(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_440_000 picoseconds. + Weight::from_parts(1_656_631, 0) + // Standard Error: 13 + .saturating_add(Weight::from_parts(10_486, 0).saturating_mul(r.into())) + } } diff --git a/pallets/weights/src/pallet_grandpa.rs b/pallets/weights/src/pallet_grandpa.rs index 8c45c7f1d2..a105dbd286 100644 --- a/pallets/weights/src/pallet_grandpa.rs +++ b/pallets/weights/src/pallet_grandpa.rs @@ -54,15 +54,11 @@ use polymesh_primitives::{ /// Weights for pallet_grandpa using the Substrate node and recommended hardware. pub struct SubstrateWeight; impl pallet_grandpa::WeightInfo for SubstrateWeight { - fn report_equivocation(validator_count: u32) -> Weight { + fn report_equivocation(validator_count: u32, max_nominators_per_validator: u32) -> Weight { // we take the validator set count from the membership proof to // calculate the weight but we set a floor of 100 validators. let validator_count = validator_count.max(100) as u64; - // worst case we are considering is that the given offender - // is backed by 200 nominators - const MAX_NOMINATORS: u64 = 200; - // checking membership proof Weight::from_parts(35u64 * WEIGHT_REF_TIME_PER_MICROS, 0) .saturating_add( @@ -75,16 +71,17 @@ impl pallet_grandpa::WeightInfo for SubstrateWeight { // report offence .saturating_add(Weight::from_parts(110u64 * WEIGHT_REF_TIME_PER_MICROS, 0)) .saturating_add(Weight::from_parts( - 25u64 * WEIGHT_REF_TIME_PER_MICROS * MAX_NOMINATORS, + 25u64 * WEIGHT_REF_TIME_PER_MICROS * max_nominators_per_validator as u64, 0, )) - .saturating_add(DbWeight::get().reads(14 + 3 * MAX_NOMINATORS)) - .saturating_add(DbWeight::get().writes(10 + 3 * MAX_NOMINATORS)) + .saturating_add(DbWeight::get().reads(14 + 3 * max_nominators_per_validator as u64)) + .saturating_add(DbWeight::get().writes(10 + 3 * max_nominators_per_validator as u64)) // fetching set id -> session index mappings .saturating_add(DbWeight::get().reads(2)) } - // Storage: Grandpa Stalled (r:0 w:1) + fn note_stalled() -> Weight { - Weight::from_parts(2_979_000, 0).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(3u64 * WEIGHT_REF_TIME_PER_MICROS, 0) + .saturating_add(DbWeight::get().writes(1)) } } diff --git a/pallets/weights/src/pallet_im_online.rs b/pallets/weights/src/pallet_im_online.rs index 569604930c..30729e3f05 100644 --- a/pallets/weights/src/pallet_im_online.rs +++ b/pallets/weights/src/pallet_im_online.rs @@ -1,13 +1,13 @@ // This file is part of Substrate. -// Copyright (C) 2021 Parity Technologies (UK) Ltd. +// Copyright (C) Parity Technologies (UK) Ltd. // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // -// http://www.apache.org/licenses/LICENSE-2.0 +// http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, @@ -18,61 +18,61 @@ //! Autogenerated weights for pallet_im_online //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! DATE: 2023-06-16, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `runner-e8ezs4ez-project-145-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: -// ./polymesh +// ./target/production/substrate // benchmark // pallet -// -s -// 100 -// -r -// 5 -// -p=* -// -e=* -// --heap-pages -// 4096 -// --db-cache -// 512 -// --execution -// wasm -// --wasm-execution -// compiled -// --output -// ./Polymesh/pallets/weights/src/ -// --template -// ./.maintain/frame-weight-template.hbs +// --chain=dev +// --steps=50 +// --repeat=20 +// --pallet=pallet_im_online +// --no-storage-info +// --no-median-slopes +// --no-min-squares +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --output=./frame/im-online/src/weights.rs +// --header=./HEADER-APACHE2 +// --template=./.maintain/frame-weight-template.hbs +#![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] +#![allow(missing_docs)] use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; /// Weights for pallet_im_online using the Substrate node and recommended hardware. pub struct SubstrateWeight; impl pallet_im_online::WeightInfo for SubstrateWeight { - // Storage: Session Validators (r:1 w:0) - // Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Session CurrentIndex (r:1 w:0) - // Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) - // Storage: ImOnline Keys (r:1 w:0) - // Proof: ImOnline Keys (max_values: Some(1), max_size: Some(320002), added: 320497, mode: MaxEncodedLen) - // Storage: ImOnline ReceivedHeartbeats (r:1 w:1) - // Proof: ImOnline ReceivedHeartbeats (max_values: None, max_size: Some(10021032), added: 10023507, mode: MaxEncodedLen) - // Storage: ImOnline AuthoredBlocks (r:1 w:0) - // Proof: ImOnline AuthoredBlocks (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) - /// The range of component `k` is `[1, 1000]`. - /// The range of component `e` is `[1, 100]`. - fn validate_unsigned_and_then_heartbeat(k: u32, e: u32) -> Weight { - // Minimum execution time: 145_028 nanoseconds. - Weight::from_parts(124_121_935) - // Standard Error: 1_342 - .saturating_add(Weight::from_parts(29_304).saturating_mul(k.into())) - // Standard Error: 13_550 - .saturating_add(Weight::from_parts(569_717).saturating_mul(e.into())) - .saturating_add(DbWeight::get().reads(4)) - .saturating_add(DbWeight::get().writes(1)) - } + /// Storage: Session Validators (r:1 w:0) + /// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: Session CurrentIndex (r:1 w:0) + /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) + /// Storage: ImOnline Keys (r:1 w:0) + /// Proof: ImOnline Keys (max_values: Some(1), max_size: Some(320002), added: 320497, mode: MaxEncodedLen) + /// Storage: ImOnline ReceivedHeartbeats (r:1 w:1) + /// Proof: ImOnline ReceivedHeartbeats (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + /// Storage: ImOnline AuthoredBlocks (r:1 w:0) + /// Proof: ImOnline AuthoredBlocks (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + /// The range of component `k` is `[1, 1000]`. + fn validate_unsigned_and_then_heartbeat(k: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `295 + k * (32 ±0)` + // Estimated: `321487 + k * (1761 ±0)` + // Minimum execution time: 80_568_000 picoseconds. + Weight::from_parts(95_175_595, 321487) + // Standard Error: 627 + .saturating_add(Weight::from_parts(39_094, 0).saturating_mul(k.into())) + .saturating_add(DbWeight::get().reads(4_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 1761).saturating_mul(k.into())) + } } From 3821c18615f276b8b65c3b31a5f5efb525d0d22d Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Tue, 7 Jan 2025 01:07:29 +0800 Subject: [PATCH 21/97] Bump recursion_limit --- pallets/runtime/common/src/lib.rs | 2 +- pallets/runtime/develop/src/lib.rs | 2 +- pallets/runtime/mainnet/src/lib.rs | 2 +- pallets/runtime/testnet/src/lib.rs | 2 +- pallets/runtime/tests/src/lib.rs | 2 ++ 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index 0d96069099..62a7615f4b 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -15,7 +15,7 @@ #![cfg_attr(not(feature = "std"), no_std)] // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] +#![recursion_limit = "1024"] pub mod fee_details; pub mod impls; diff --git a/pallets/runtime/develop/src/lib.rs b/pallets/runtime/develop/src/lib.rs index ce50ba6285..301fcd5056 100644 --- a/pallets/runtime/develop/src/lib.rs +++ b/pallets/runtime/develop/src/lib.rs @@ -1,6 +1,6 @@ #![cfg_attr(not(feature = "std"), no_std)] // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] +#![recursion_limit = "1024"] #[cfg(feature = "runtime-benchmarks")] #[macro_use] diff --git a/pallets/runtime/mainnet/src/lib.rs b/pallets/runtime/mainnet/src/lib.rs index 4909e0202e..242ca986b8 100644 --- a/pallets/runtime/mainnet/src/lib.rs +++ b/pallets/runtime/mainnet/src/lib.rs @@ -1,6 +1,6 @@ #![cfg_attr(not(feature = "std"), no_std)] // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] +#![recursion_limit = "1024"] pub mod constants; pub mod runtime; diff --git a/pallets/runtime/testnet/src/lib.rs b/pallets/runtime/testnet/src/lib.rs index e7b27f0a0f..e53a4055d6 100644 --- a/pallets/runtime/testnet/src/lib.rs +++ b/pallets/runtime/testnet/src/lib.rs @@ -1,6 +1,6 @@ #![cfg_attr(not(feature = "std"), no_std)] // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] +#![recursion_limit = "1024"] pub mod constants; pub mod runtime; diff --git a/pallets/runtime/tests/src/lib.rs b/pallets/runtime/tests/src/lib.rs index 0c7b8ae822..9fcb365f31 100644 --- a/pallets/runtime/tests/src/lib.rs +++ b/pallets/runtime/tests/src/lib.rs @@ -1,5 +1,7 @@ #![allow(dead_code)] #![cfg(test)] +// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. +#![recursion_limit = "1024"] pub mod storage; pub use storage::{ From b3468da024cec6c625ba0e5dcfff11122dea17d1 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Tue, 7 Jan 2025 01:31:03 +0800 Subject: [PATCH 22/97] Update Babe and Grandpa. --- pallets/runtime/common/src/runtime.rs | 40 ++++------------------- pallets/runtime/tests/src/staking/mock.rs | 16 +++------ 2 files changed, 11 insertions(+), 45 deletions(-) diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 60579b7dc5..ac0e822d08 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -106,24 +106,11 @@ macro_rules! misc_pallet_impls { type EpochChangeTrigger = pallet_babe::ExternalTrigger; type DisabledValidators = Session; - type KeyOwnerProofSystem = Historical; - - type KeyOwnerProof = >::Proof; - - type KeyOwnerIdentification = >::IdentificationTuple; - - type HandleEquivocation = pallet_babe::EquivocationHandler< - Self::KeyOwnerIdentification, - Offences, - ReportLongevity, - >; type MaxAuthorities = MaxAuthorities; + type KeyOwnerProof = + >::Proof; + type EquivocationReportSystem = + pallet_babe::EquivocationReportSystem; } impl pallet_indices::Config for Runtime { @@ -517,8 +504,6 @@ macro_rules! misc_pallet_impls { type OnOffenceHandler = Staking; } - type GrandpaKey = (sp_core::crypto::KeyTypeId, pallet_grandpa::AuthorityId); - impl pallet_im_online::Config for Runtime { type AuthorityId = pallet_im_online::sr25519::AuthorityId; type RuntimeEvent = RuntimeEvent; @@ -535,23 +520,12 @@ macro_rules! misc_pallet_impls { impl pallet_grandpa::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type KeyOwnerProofSystem = Historical; - - type KeyOwnerProof = - >::Proof; - - type KeyOwnerIdentification = - >::IdentificationTuple; - - type HandleEquivocation = pallet_grandpa::EquivocationHandler< - Self::KeyOwnerIdentification, - Offences, - ReportLongevity, - >; - type WeightInfo = (); type MaxAuthorities = MaxAuthorities; type MaxSetIdSessionEntries = MaxSetIdSessionEntries; + type KeyOwnerProof = >::Proof; + type EquivocationReportSystem = + pallet_grandpa::EquivocationReportSystem; } impl pallet_insecure_randomness_collective_flip::Config for Runtime {} diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index d86677e62f..7b8455a60f 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -483,19 +483,11 @@ impl pallet_babe::Config for Test { type EpochChangeTrigger = pallet_babe::ExternalTrigger; type DisabledValidators = Session; - type KeyOwnerProofSystem = (); - type KeyOwnerProof = >::Proof; - type KeyOwnerIdentification = >::IdentificationTuple; - type HandleEquivocation = - pallet_babe::EquivocationHandler; - type MaxAuthorities = MaxAuthorities; + type MaxNominators = MaxNominatorRewardedPerValidator; + type KeyOwnerProof = + >::Proof; + type EquivocationReportSystem = pallet_babe::EquivocationReportSystem; } pallet_staking_reward_curve::build! { From c8f0f7e256c0da324eda74e443efed305ade0d42 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Tue, 7 Jan 2025 00:04:17 +0800 Subject: [PATCH 23/97] Update staking pallet --- pallets/runtime/common/src/runtime.rs | 37 +- .../develop/src/benchmarks/pallet_session.rs | 1 + pallets/runtime/tests/Cargo.toml | 6 +- pallets/runtime/tests/src/staking/mock.rs | 87 +- pallets/runtime/tests/src/staking/mod.rs | 1245 +++--- .../runtime/tests/src/staking_extra_tests.rs | 6 - pallets/validators/Cargo.toml | 9 +- pallets/validators/src/benchmarking.rs | 55 +- pallets/validators/src/lib.rs | 35 +- pallets/validators/src/permissioned.rs | 53 - pallets/weights/src/pallet_validators.rs | 39 - scripts/cli/polymesh-meta.json | 2 +- scripts/cli/src/helpers/staking_helper.ts | 19 +- .../cli/src/interfaces/augment-api-consts.ts | 183 +- .../cli/src/interfaces/augment-api-errors.ts | 303 +- .../cli/src/interfaces/augment-api-events.ts | 360 +- .../cli/src/interfaces/augment-api-query.ts | 253 +- .../cli/src/interfaces/augment-api-runtime.ts | 10 +- scripts/cli/src/interfaces/augment-api-tx.ts | 3578 +++-------------- scripts/cli/src/interfaces/augment-types.ts | 5 +- scripts/cli/src/interfaces/default/types.ts | 145 +- scripts/cli/src/interfaces/definitions.ts | 2 +- scripts/cli/src/interfaces/lookup.ts | 1442 +++---- scripts/cli/src/interfaces/registry.ts | 111 +- scripts/cli/src/interfaces/types-lookup.ts | 1556 ++++--- scripts/cli/src/util/offchain_worker_test.ts | 2 +- scripts/cli/util/offchain_worker_test.js | 16 +- 27 files changed, 3441 insertions(+), 6119 deletions(-) diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index ac0e822d08..5450819ebb 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -107,6 +107,7 @@ macro_rules! misc_pallet_impls { type DisabledValidators = Session; type MaxAuthorities = MaxAuthorities; + type MaxNominators = MaxNominatorRewardedPerValidator; type KeyOwnerProof = >::Proof; type EquivocationReportSystem = @@ -231,7 +232,7 @@ macro_rules! misc_pallet_impls { type Currency = Balances; type CurrencyBalance = Balance; type UnixTime = Timestamp; - type CurrencyToVote = frame_support::traits::U128CurrencyToVote; + type CurrencyToVote = sp_staking::currency_to_vote::U128CurrencyToVote; type ElectionProvider = ElectionProviderMultiPhase; type GenesisElectionProvider = Self::ElectionProvider; type MaxNominations = polymesh_runtime_common::MaxNominations; @@ -252,7 +253,7 @@ macro_rules! misc_pallet_impls { type VoterList = pallet_staking::UseNominatorsAndValidatorsMap; type TargetList = pallet_staking::UseValidatorsMap; type MaxUnlockingChunks = polymesh_runtime_common::MaxUnlockingChunks; - type OnStakerSlash = pallet_staking::OnStakerSlashMock; + type EventListeners = (); type BenchmarkingConfig = pallet_staking::TestBenchmarkingConfig; type WeightInfo = polymesh_weights::pallet_staking::SubstrateWeight; type Permissioned = Validators; @@ -522,6 +523,7 @@ macro_rules! misc_pallet_impls { type WeightInfo = (); type MaxAuthorities = MaxAuthorities; + type MaxNominators = MaxNominatorRewardedPerValidator; type MaxSetIdSessionEntries = MaxSetIdSessionEntries; type KeyOwnerProof = >::Proof; type EquivocationReportSystem = @@ -701,21 +703,22 @@ macro_rules! misc_pallet_impls { impl pallet_election_provider_multi_phase::MinerConfig for Runtime { type AccountId = polymesh_primitives::AccountId; - type MaxLength = polymesh_runtime_common::MinerMaxLength; - type MaxWeight = polymesh_runtime_common::MinerMaxWeight; - type Solution = polymesh_runtime_common::NposSolution16; - type MaxVotesPerVoter = - <::DataProvider as frame_election_provider_support::ElectionDataProvider>::MaxVotesPerVoter; - - // The unsigned submissions have to respect the weight of the submit_unsigned call, thus their - // weight estimate function is wired to this call's weight. - fn solution_weight(v: u32, t: u32, a: u32, d: u32) -> Weight { - < - ::WeightInfo - as - pallet_election_provider_multi_phase::WeightInfo - >::submit_unsigned(v, t, a, d) - } + type MaxLength = polymesh_runtime_common::MinerMaxLength; + type MaxWeight = polymesh_runtime_common::MinerMaxWeight; + type Solution = polymesh_runtime_common::NposSolution16; + type MaxVotesPerVoter = + <::DataProvider as frame_election_provider_support::ElectionDataProvider>::MaxVotesPerVoter; + type MaxWinners = polymesh_runtime_common::MaxActiveValidators; + + // The unsigned submissions have to respect the weight of the submit_unsigned call, thus their + // weight estimate function is wired to this call's weight. + fn solution_weight(v: u32, t: u32, a: u32, d: u32) -> Weight { + < + ::WeightInfo + as + pallet_election_provider_multi_phase::WeightInfo + >::submit_unsigned(v, t, a, d) + } } }; } diff --git a/pallets/runtime/develop/src/benchmarks/pallet_session.rs b/pallets/runtime/develop/src/benchmarks/pallet_session.rs index a16c2d1218..208140a247 100644 --- a/pallets/runtime/develop/src/benchmarks/pallet_session.rs +++ b/pallets/runtime/develop/src/benchmarks/pallet_session.rs @@ -62,6 +62,7 @@ impl ValidatorInfo { nominators, ::MaxNominations::get(), false, + false, RewardDestination::Staked, ) .unwrap() diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index fc9218f8e1..579e262986 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -37,7 +37,7 @@ pallet-utility = { workspace = true, default-features = false } polymesh-contracts = { workspace = true, default-features = false } polymesh-common-utilities = { workspace = true, default-features = false } polymesh-primitives = { workspace = true, default-features = false } -polymesh-runtime-common = { workspace = true, default-features = false, features = ["testing"] } +polymesh-runtime-common = { workspace = true, default-features = false } polymesh-runtime-develop = { workspace = true } polymesh-weights = { workspace = true, default-features = false } polymesh-exec-macro = { path = "exec_macro" } @@ -107,7 +107,9 @@ sp-tracing = { workspace = true, default-features = false, features = ["std"] } [features] default = ["std", "testing", "equalize"] -testing = [] +testing = [ + "pallet-staking/testing", +] equalize = [] only-staking = [] diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index 7b8455a60f..bac2405697 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -30,7 +30,7 @@ use frame_support::{assert_ok, ord_parameter_types, parameter_types}; use frame_system::{EnsureRoot, EnsureSignedBy}; use sp_core::H256; use sp_runtime::curve::PiecewiseLinear; -use sp_runtime::testing::{Header, TestXt, UintAuthorityId}; +use sp_runtime::testing::{TestXt, UintAuthorityId}; use sp_runtime::traits::{IdentityLookup, Zero}; use sp_runtime::transaction_validity::InvalidTransaction; use sp_runtime::BuildStorage; @@ -534,7 +534,6 @@ parameter_types! { pub static HistoryDepth: u32 = 80; pub static MaxUnlockingChunks: u32 = 32; pub static RewardOnUnbalanceWasCalled: bool = false; - pub static LedgerSlashPerEra: (BalanceOf, BTreeMap>) = (Zero::zero(), BTreeMap::new()); pub static MaxWinners: u32 = 100; } @@ -557,8 +556,14 @@ impl OnUnbalanced> for MockReward { } } -pub struct OnStakerSlashMock(core::marker::PhantomData); -impl sp_staking::OnStakerSlash for OnStakerSlashMock { +parameter_types! { + pub static LedgerSlashPerEra: + (BalanceOf, BTreeMap>) = + (Zero::zero(), BTreeMap::new()); +} + +pub struct EventListenerMock; +impl sp_staking::OnStakingUpdate for EventListenerMock { fn on_slash( _pool_account: &AccountId, slashed_bonded: Balance, @@ -572,7 +577,7 @@ impl pallet_staking::Config for Test { type Currency = Balances; type CurrencyBalance = Balance; type UnixTime = Timestamp; - type CurrencyToVote = frame_support::traits::U128CurrencyToVote; + type CurrencyToVote = sp_staking::currency_to_vote::U128CurrencyToVote; type ElectionProvider = onchain::OnChainExecution; type GenesisElectionProvider = Self::ElectionProvider; type MaxNominations = MaxNominations; @@ -593,7 +598,7 @@ impl pallet_staking::Config for Test { type VoterList = pallet_staking::UseNominatorsAndValidatorsMap; type TargetList = pallet_staking::UseValidatorsMap; type MaxUnlockingChunks = MaxUnlockingChunks; - type OnStakerSlash = OnStakerSlashMock; + type EventListeners = EventListenerMock; type BenchmarkingConfig = pallet_staking::TestBenchmarkingConfig; type WeightInfo = polymesh_weights::pallet_staking::SubstrateWeight; type Permissioned = Validators; @@ -780,7 +785,8 @@ impl ExtBuilder { (999, 1_000_000_000_000), ], } - .assimilate_storage(&mut storage).unwrap(); + .assimilate_storage(&mut storage) + .unwrap(); pallet_group::GenesisConfig:: { active_members_limit: u32::MAX, @@ -945,7 +951,8 @@ impl ExtBuilder { slashing_allowed_for: self.slashing_allowed_for, ..Default::default() } - .assimilate_storage(&mut storage).unwrap(); + .assimilate_storage(&mut storage) + .unwrap(); pallet_staking::GenesisConfig:: { stakers: stakers @@ -967,7 +974,8 @@ impl ExtBuilder { min_validator_bond: self.min_validator_bond, ..Default::default() } - .assimilate_storage(&mut storage).unwrap(); + .assimilate_storage(&mut storage) + .unwrap(); let _ = pallet_session::GenesisConfig:: { keys: if self.has_stakers { @@ -1087,36 +1095,28 @@ pub(crate) fn current_era() -> EraIndex { Staking::current_era().unwrap() } -pub(crate) fn bond(stash: AccountId, ctrl: AccountId, val: Balance) { - let _ = Balances::make_free_balance_be(&stash, val); - let _ = Balances::make_free_balance_be(&ctrl, val); +pub(crate) fn bond(who: AccountId, val: Balance) { + let _ = Balances::make_free_balance_be(&who, val); - provide_did_to_user(stash); - add_secondary_key(stash, ctrl); + provide_did_to_user(who); - if Staking::bonded(&stash).is_none() { + if Staking::bonded(&who).is_none() { assert_ok!(Staking::bond( - RuntimeOrigin::signed(stash), - ctrl, + RuntimeOrigin::signed(who), val, RewardDestination::Controller, )); } } -pub(crate) fn bond_validator(stash: AccountId, ctrl: AccountId, val: Balance) { - bond_validator_with_intended_count(stash, ctrl, val, None) +pub(crate) fn bond_validator(who: AccountId, val: Balance) { + bond_validator_with_intended_count(who, val, None) } -pub fn bond_validator_with_intended_count( - stash: AccountId, - ctrl: AccountId, - val: Balance, - i_count: Option, -) { - bond(stash, ctrl, val); +pub fn bond_validator_with_intended_count(who: AccountId, val: Balance, i_count: Option) { + bond(who, val); - let stash_id = Identity::get_identity(&stash).unwrap(); + let stash_id = Identity::get_identity(&who).unwrap(); if Validators::permissioned_identity(stash_id).is_none() { assert_ok!(Validators::add_permissioned_validator( frame_system::RawOrigin::Root.into(), @@ -1126,24 +1126,19 @@ pub fn bond_validator_with_intended_count( } assert_ok!(Staking::validate( - RuntimeOrigin::signed(ctrl), + RuntimeOrigin::signed(who), ValidatorPrefs::default() )); assert_ok!(Session::set_keys( - RuntimeOrigin::signed(ctrl), - SessionKeys { other: ctrl.into() }, + RuntimeOrigin::signed(who), + SessionKeys { other: who.into() }, vec![] )); } -pub(crate) fn bond_nominator( - stash: AccountId, - ctrl: AccountId, - val: Balance, - target: Vec, -) { - bond(stash, ctrl, val); - assert_ok!(Staking::nominate(RuntimeOrigin::signed(ctrl), target)); +pub(crate) fn bond_nominator(who: AccountId, val: Balance, target: Vec) { + bond(who, val); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(who), target)); } /// Progress to the given block, triggering session and era changes as we progress. @@ -1399,10 +1394,9 @@ pub fn get_identity(key: AccountId) -> bool { pallet_identity::KeyRecords::::contains_key(&key) } -pub fn bond_nominator_cdd(stash: AccountId, ctrl: AccountId, val: Balance, target: Vec) { - provide_did_to_user(stash); - add_secondary_key(stash, ctrl); - bond_nominator(stash, ctrl, val, target); +pub fn bond_nominator_cdd(who: AccountId, val: Balance, target: Vec) { + provide_did_to_user(who); + bond_nominator(who, val, target); } // `iter_prefix_values` has no guarantee that it will iterate in a sequential @@ -1483,19 +1477,16 @@ pub fn run_to_block_scheduler(n: u64) { } pub fn bond_nominator_with_expiry(acc: u64, val: u128, claim_expiry: u64, target: Vec) { - // a = controller - // a + 1 = stash - let controller = acc; - let stash = acc + 1; + // a = stash + let stash = acc; let _ = Balances::make_free_balance_be(&(stash), val); assert_ok!(Staking::bond( Origin::signed(stash), - controller, val, RewardDestination::Controller )); create_did_and_add_claim_with_expiry(stash, claim_expiry); - assert_ok!(Staking::nominate(Origin::signed(controller), target)); + assert_ok!(Staking::nominate(Origin::signed(stash), target)); } pub fn create_did_and_add_claim_with_expiry(stash: AccountId, expiry: u64) { diff --git a/pallets/runtime/tests/src/staking/mod.rs b/pallets/runtime/tests/src/staking/mod.rs index 18e1752f16..feb86f1389 100644 --- a/pallets/runtime/tests/src/staking/mod.rs +++ b/pallets/runtime/tests/src/staking/mod.rs @@ -118,8 +118,8 @@ fn set_staking_configs_works() { #[test] fn force_unstake_works() { ExtBuilder::default().build_and_execute(|| { - // Account 11 is stashed and locked, and account 10 is the controller - assert_eq!(Staking::bonded(&11), Some(10)); + // Account 11 (also controller) is stashed and locked + assert_eq!(Staking::bonded(&11), Some(11)); // Adds 2 slashing spans add_slash(&11); // Cant transfer @@ -149,8 +149,8 @@ fn force_unstake_works() { #[test] fn kill_stash_works() { ExtBuilder::default().build_and_execute(|| { - // Account 11 is stashed and locked, and account 10 is the controller - assert_eq!(Staking::bonded(&11), Some(10)); + // Account 11 (also controller) is stashed and locked + assert_eq!(Staking::bonded(&11), Some(11)); // Adds 2 slashing spans add_slash(&11); // Only can kill a stash account @@ -171,16 +171,16 @@ fn kill_stash_works() { fn basic_setup_works() { // Verifies initial conditions of mock ExtBuilder::default().build_and_execute(|| { - // Account 11 is stashed and locked, and account 10 is the controller - assert_eq!(Staking::bonded(&11), Some(10)); - // Account 21 is stashed and locked, and account 20 is the controller - assert_eq!(Staking::bonded(&21), Some(20)); + // Account 11 is stashed and locked, and is the controller + assert_eq!(Staking::bonded(&11), Some(11)); + // Account 21 is stashed and locked and is the controller + assert_eq!(Staking::bonded(&21), Some(21)); // Account 1 is not a stashed assert_eq!(Staking::bonded(&1), None); - // Account 10 controls the stash from account 11, which is 100 * balance_factor units + // Account 11 controls its own stash, which is 100 * balance_factor units assert_eq!( - Staking::ledger(&10).unwrap(), + Staking::ledger(&11).unwrap(), StakingLedger { stash: 11, total: 1000, @@ -189,9 +189,9 @@ fn basic_setup_works() { claimed_rewards: bounded_vec![], } ); - // Account 20 controls the stash from account 21, which is 200 * balance_factor units + // Account 21 controls its own stash, which is 200 * balance_factor units assert_eq!( - Staking::ledger(&20), + Staking::ledger(&21), Some(StakingLedger { stash: 21, total: 1000, @@ -214,7 +214,7 @@ fn basic_setup_works() { ); assert_eq!( - Staking::ledger(100), + Staking::ledger(101), Some(StakingLedger { stash: 101, total: 500, @@ -269,15 +269,55 @@ fn basic_setup_works() { #[test] fn change_controller_works() { ExtBuilder::default().build_and_execute(|| { - // 10 and 11 are bonded as stash controller. - assert_eq!(Staking::bonded(&11), Some(10)); + let (stash, controller) = testing_utils::create_unique_stash_controller::( + 0, + 100, + RewardDestination::Staked, + false, + ) + .unwrap(); + + provide_did_to_user(stash); + assert_add_permissioned_validator!(&stash); + + // ensure `stash` and `controller` are bonded as stash controller pair. + assert_eq!(Staking::bonded(&stash), Some(controller)); - // 10 can control 11 who is initially a validator. - assert_ok!(Staking::chill(RuntimeOrigin::signed(10))); + // `controller` can control `stash` who is initially a validator. + assert_ok!(Staking::chill(RuntimeOrigin::signed(controller))); - // change controller - assert_ok!(Staking::set_controller(RuntimeOrigin::signed(11), 5)); - assert_eq!(Staking::bonded(&11), Some(5)); + // sets controller back to `stash`. + assert_ok!(Staking::set_controller(RuntimeOrigin::signed(stash))); + assert_eq!(Staking::bonded(&stash), Some(stash)); + mock::start_active_era(1); + + // `controller` is no longer in control. `stash` is now controller. + assert_noop!( + Staking::validate(RuntimeOrigin::signed(controller), ValidatorPrefs::default()), + Error::::NotController, + ); + assert_ok!(Staking::validate( + RuntimeOrigin::signed(stash), + ValidatorPrefs::default() + )); + }) +} + +#[test] +fn change_controller_already_paired_once_stash() { + ExtBuilder::default().build_and_execute(|| { + // 10 and 11 are bonded as controller and stash respectively. + assert_eq!(Staking::bonded(&11), Some(11)); + + // 11 is initially a validator. + assert_ok!(Staking::chill(RuntimeOrigin::signed(11))); + + // Controller cannot change once matching with stash. + assert_noop!( + Staking::set_controller(RuntimeOrigin::signed(11)), + Error::::AlreadyPaired + ); + assert_eq!(Staking::bonded(&11), Some(11)); mock::start_active_era(1); // 10 is no longer in control. @@ -286,7 +326,7 @@ fn change_controller_works() { Error::::NotController, ); assert_ok!(Staking::validate( - RuntimeOrigin::signed(5), + RuntimeOrigin::signed(11), ValidatorPrefs::default() )); }) @@ -298,11 +338,8 @@ fn rewards_should_work() { .nominate(true) .session_per_era(3) .build_and_execute(|| { - let init_balance_10 = Balances::total_balance(&10); let init_balance_11 = Balances::total_balance(&11); - let init_balance_20 = Balances::total_balance(&20); let init_balance_21 = Balances::total_balance(&21); - let init_balance_100 = Balances::total_balance(&100); let init_balance_101 = Balances::total_balance(&101); // Set payees @@ -322,11 +359,8 @@ fn rewards_should_work() { start_session(1); assert_eq_uvec!(Session::validators(), vec![11, 21]); - assert_eq!(Balances::total_balance(&10), init_balance_10); assert_eq!(Balances::total_balance(&11), init_balance_11); - assert_eq!(Balances::total_balance(&20), init_balance_20); assert_eq!(Balances::total_balance(&21), init_balance_21); - assert_eq!(Balances::total_balance(&100), init_balance_100); assert_eq!(Balances::total_balance(&101), init_balance_101); assert_eq!( Staking::eras_reward_points(active_era()), @@ -335,10 +369,10 @@ fn rewards_should_work() { individual: vec![(11, 100), (21, 50)].into_iter().collect(), } ); - let part_for_10 = Perbill::from_rational::(1000, 1125); - let part_for_20 = Perbill::from_rational::(1000, 1375); - let part_for_100_from_10 = Perbill::from_rational::(125, 1125); - let part_for_100_from_20 = Perbill::from_rational::(375, 1375); + let part_for_11 = Perbill::from_rational::(1000, 1125); + let part_for_21 = Perbill::from_rational::(1000, 1375); + let part_for_101_from_11 = Perbill::from_rational::(125, 1125); + let part_for_101_from_21 = Perbill::from_rational::(375, 1375); start_session(2); start_session(3); @@ -359,25 +393,22 @@ fn rewards_should_work() { mock::make_all_reward_payment(0); assert_eq_error_rate!( - Balances::total_balance(&10), - init_balance_10 + part_for_10 * total_payout_0 * 2 / 3, + Balances::total_balance(&11), + init_balance_11 + part_for_11 * total_payout_0 * 2 / 3, 2, ); - assert_eq_error_rate!(Balances::total_balance(&11), init_balance_11, 2); assert_eq_error_rate!( - Balances::total_balance(&20), - init_balance_20 + part_for_20 * total_payout_0 * 1 / 3, + Balances::total_balance(&21), + init_balance_21 + part_for_21 * total_payout_0 * 1 / 3, 2, ); - assert_eq_error_rate!(Balances::total_balance(&21), init_balance_21, 2); assert_eq_error_rate!( - Balances::total_balance(&100), - init_balance_100 - + part_for_100_from_10 * total_payout_0 * 2 / 3 - + part_for_100_from_20 * total_payout_0 * 1 / 3, + Balances::total_balance(&101), + init_balance_101 + + part_for_101_from_11 * total_payout_0 * 2 / 3 + + part_for_101_from_21 * total_payout_0 * 1 / 3, 2 ); - assert_eq_error_rate!(Balances::total_balance(&101), init_balance_101, 2); assert_eq_uvec!(Session::validators(), vec![11, 21]); Pallet::::reward_by_ids(vec![(11, 1)]); @@ -401,25 +432,22 @@ fn rewards_should_work() { mock::make_all_reward_payment(1); assert_eq_error_rate!( - Balances::total_balance(&10), - init_balance_10 + part_for_10 * (total_payout_0 * 2 / 3 + total_payout_1), + Balances::total_balance(&11), + init_balance_11 + part_for_11 * (total_payout_0 * 2 / 3 + total_payout_1), 2, ); - assert_eq_error_rate!(Balances::total_balance(&11), init_balance_11, 2); assert_eq_error_rate!( - Balances::total_balance(&20), - init_balance_20 + part_for_20 * total_payout_0 * 1 / 3, + Balances::total_balance(&21), + init_balance_21 + part_for_21 * total_payout_0 * 1 / 3, 2, ); - assert_eq_error_rate!(Balances::total_balance(&21), init_balance_21, 2); assert_eq_error_rate!( - Balances::total_balance(&100), - init_balance_100 - + part_for_100_from_10 * (total_payout_0 * 2 / 3 + total_payout_1) - + part_for_100_from_20 * total_payout_0 * 1 / 3, + Balances::total_balance(&101), + init_balance_101 + + part_for_101_from_11 * (total_payout_0 * 2 / 3 + total_payout_1) + + part_for_101_from_21 * total_payout_0 * 1 / 3, 2 ); - assert_eq_error_rate!(Balances::total_balance(&101), init_balance_101, 2); }); } @@ -427,7 +455,7 @@ fn rewards_should_work() { fn staking_should_work() { ExtBuilder::default().nominate(false).build_and_execute(|| { // remember + compare this along with the test. - assert_eq_uvec!(validator_controllers(), vec![20, 10]); + assert_eq_uvec!(validator_controllers(), vec![21, 11]); // put some money in account that we'll use. for i in 1..5 { @@ -437,33 +465,31 @@ fn staking_should_work() { // --- Block 2: start_session(2); provide_did_to_user(3); - add_secondary_key(3, 4); // add a new candidate for being a validator. account 3 controlled by 4. assert_ok!(Staking::bond( RuntimeOrigin::signed(3), - 4, 1500, RewardDestination::Controller )); assert_add_permissioned_validator!(&3); assert_ok!(Staking::validate( - RuntimeOrigin::signed(4), + RuntimeOrigin::signed(3), ValidatorPrefs::default() )); assert_ok!(Session::set_keys( - RuntimeOrigin::signed(4), + RuntimeOrigin::signed(3), SessionKeys { other: 4.into() }, vec![] )); // No effects will be seen so far. - assert_eq_uvec!(validator_controllers(), vec![20, 10]); + assert_eq_uvec!(validator_controllers(), vec![21, 11]); // --- Block 3: start_session(3); // No effects will be seen so far. Era has not been yet triggered. - assert_eq_uvec!(validator_controllers(), vec![20, 10]); + assert_eq_uvec!(validator_controllers(), vec![21, 11]); // --- Block 4: the validators will now be queued. start_session(4); @@ -475,25 +501,25 @@ fn staking_should_work() { // --- Block 6: the validators will now be changed. start_session(6); - assert_eq_uvec!(validator_controllers(), vec![20, 4]); + assert_eq_uvec!(validator_controllers(), vec![21, 3]); // --- Block 6: Unstake 4 as a validator, freeing up the balance stashed in 3 // 4 will chill - Staking::chill(RuntimeOrigin::signed(4)).unwrap(); + Staking::chill(RuntimeOrigin::signed(3)).unwrap(); - // --- Block 7: nothing. 4 is still there. + // --- Block 7: nothing. 3 is still there. start_session(7); - assert_eq_uvec!(validator_controllers(), vec![20, 4]); + assert_eq_uvec!(validator_controllers(), vec![21, 3]); // --- Block 8: start_session(8); // --- Block 9: 4 will not be a validator. start_session(9); - assert_eq_uvec!(validator_controllers(), vec![20, 10]); + assert_eq_uvec!(validator_controllers(), vec![21, 11]); // Note: the stashed value of 4 is still lock assert_eq!( - Staking::ledger(&4), + Staking::ledger(&3), Some(StakingLedger { stash: 3, total: 1500, @@ -520,23 +546,23 @@ fn blocking_and_kicking_works() { .build_and_execute(|| { // block validator 10/11 assert_ok!(Staking::validate( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), ValidatorPrefs { blocked: true, ..Default::default() } )); // attempt to nominate from 100/101... - assert_ok!(Staking::nominate(RuntimeOrigin::signed(100), vec![11])); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(101), vec![11])); // should have worked since we're already nominated them assert_eq!(Nominators::::get(&101).unwrap().targets, vec![11]); // kick the nominator - assert_ok!(Staking::kick(RuntimeOrigin::signed(10), vec![101])); + assert_ok!(Staking::kick(RuntimeOrigin::signed(11), vec![101])); // should have been kicked now assert!(Nominators::::get(&101).unwrap().targets.is_empty()); // attempt to nominate from 100/101... assert_noop!( - Staking::nominate(RuntimeOrigin::signed(100), vec![11]), + Staking::nominate(RuntimeOrigin::signed(101), vec![11]), Error::::BadTarget ); }); @@ -551,12 +577,12 @@ fn less_than_needed_candidates_works() { .build_and_execute(|| { assert_eq!(Staking::validator_count(), 4); assert_eq!(Staking::minimum_validator_count(), 1); - assert_eq_uvec!(validator_controllers(), vec![30, 20, 10]); + assert_eq_uvec!(validator_controllers(), vec![31, 21, 11]); mock::start_active_era(1); // Previous set is selected. NO election algorithm is even executed. - assert_eq_uvec!(validator_controllers(), vec![30, 20, 10]); + assert_eq_uvec!(validator_controllers(), vec![31, 21, 11]); // But the exposure is updated in a simple way. No external votes exists. // This is purely self-vote. @@ -574,24 +600,24 @@ fn no_candidate_emergency_condition() { .nominate(false) .build_and_execute(|| { // initial validators - assert_eq_uvec!(validator_controllers(), vec![10, 20, 30, 40]); + assert_eq_uvec!(validator_controllers(), vec![11, 21, 31, 41]); let prefs = ValidatorPrefs { commission: Perbill::one(), ..Default::default() }; - pallet_staking::Validators::::insert(11, prefs.clone()); + Validators::::insert(11, prefs.clone()); // set the minimum validator count. - pallet_staking::MinimumValidatorCount::::put(10); + MinimumValidatorCount::::put(11); // try to chill - let res = Staking::chill(RuntimeOrigin::signed(10)); + let res = Staking::chill(RuntimeOrigin::signed(11)); assert_ok!(res); let current_era = CurrentEra::::get(); // try trigger new era - mock::run_to_block(20); + mock::run_to_block(21); assert_eq!( *staking_events().last().unwrap(), Event::StakingElectionFailed @@ -604,9 +630,9 @@ fn no_candidate_emergency_condition() { // Previous ones are elected. chill is not effective in active era (as era hasn't // changed) - assert_eq_uvec!(validator_controllers(), vec![10, 20, 30, 40]); + assert_eq_uvec!(validator_controllers(), vec![11, 21, 31, 41]); // The chill is still pending. - assert!(!pallet_staking::Validators::::contains_key(11)); + assert!(!Validators::::contains_key(11)); // No new era is created. assert_eq!(current_era, CurrentEra::::get()); }); @@ -621,70 +647,66 @@ fn nominating_and_rewards_should_work() { .set_status(31, StakerStatus::Idle) .build_and_execute(|| { // initial validators. - assert_eq_uvec!(validator_controllers(), vec![40, 20]); + assert_eq_uvec!(validator_controllers(), vec![41, 21]); // re-validate with 11 and 31. assert_add_permissioned_validator!(&11); assert_ok!(Staking::validate( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), Default::default() )); assert_add_permissioned_validator!(&31); assert_ok!(Staking::validate( - RuntimeOrigin::signed(30), + RuntimeOrigin::signed(31), Default::default() )); // Set payee to controller. assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), RewardDestination::Controller )); assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(20), + RuntimeOrigin::signed(21), RewardDestination::Controller )); assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(30), + RuntimeOrigin::signed(31), RewardDestination::Controller )); assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(40), + RuntimeOrigin::signed(41), RewardDestination::Controller )); // give the man some money let initial_balance = 1000; - for i in [1, 2, 3, 4, 5, 10, 11, 20, 21].iter() { + for i in [1, 3, 5, 11, 21].iter() { let _ = Balances::make_free_balance_be(i, initial_balance); } // bond two account pairs and state interest in nomination. provide_did_to_user(1); - add_secondary_key(1, 2); assert_ok!(Staking::bond( RuntimeOrigin::signed(1), - 2, 1000, RewardDestination::Controller )); assert_add_permissioned_validator!(&1); assert_ok!(Staking::nominate( - RuntimeOrigin::signed(2), + RuntimeOrigin::signed(1), vec![11, 21, 31] )); provide_did_to_user(3); - add_secondary_key(3, 4); assert_ok!(Staking::bond( RuntimeOrigin::signed(3), - 4, 1000, RewardDestination::Controller )); assert_add_permissioned_validator!(&3); assert_ok!(Staking::nominate( - RuntimeOrigin::signed(4), + RuntimeOrigin::signed(3), vec![11, 21, 41] )); @@ -696,21 +718,21 @@ fn nominating_and_rewards_should_work() { mock::start_active_era(1); // 10 and 20 have more votes, they will be chosen. - assert_eq_uvec!(validator_controllers(), vec![20, 10]); + assert_eq_uvec!(validator_controllers(), vec![21, 11]); // old validators must have already received some rewards. - let initial_balance_40 = Balances::total_balance(&40); - let mut initial_balance_20 = Balances::total_balance(&20); + let initial_balance_41 = Balances::total_balance(&41); + let mut initial_balance_21 = Balances::total_balance(&21); mock::make_all_reward_payment(0); assert_eq!( - Balances::total_balance(&40), - initial_balance_40 + total_payout_0 / 2 + Balances::total_balance(&41), + initial_balance_41 + total_payout_0 / 2 ); assert_eq!( - Balances::total_balance(&20), - initial_balance_20 + total_payout_0 / 2 + Balances::total_balance(&21), + initial_balance_21 + total_payout_0 / 2 ); - initial_balance_20 = Balances::total_balance(&20); + initial_balance_21 = Balances::total_balance(&21); assert_eq!( ErasStakers::::iter_prefix_values(active_era()).count(), @@ -750,34 +772,34 @@ fn nominating_and_rewards_should_work() { // nominators will also be paid. See below mock::make_all_reward_payment(1); - let payout_for_10 = total_payout_1 / 3; - let payout_for_20 = 2 * total_payout_1 / 3; - // Nominator 2: has [400/1800 ~ 2/9 from 10] + [600/2200 ~ 3/11 from 20]'s reward. ==> + let payout_for_11 = total_payout_1 / 3; + let payout_for_21 = 2 * total_payout_1 / 3; + // Nominator 2: has [400/1800 ~ 2/9 from 10] + [600/2200 ~ 3/11 from 21]'s reward. ==> // 2/9 + 3/11 assert_eq_error_rate!( - Balances::total_balance(&2), - initial_balance + (2 * payout_for_10 / 9 + 3 * payout_for_20 / 11), + Balances::total_balance(&1), + initial_balance + (2 * payout_for_11 / 9 + 3 * payout_for_21 / 11), 2, ); - // Nominator 4: has [400/1800 ~ 2/9 from 10] + [600/2200 ~ 3/11 from 20]'s reward. ==> + // Nominator 3: has [400/1800 ~ 2/9 from 10] + [600/2200 ~ 3/11 from 21]'s reward. ==> // 2/9 + 3/11 assert_eq_error_rate!( - Balances::total_balance(&4), - initial_balance + (2 * payout_for_10 / 9 + 3 * payout_for_20 / 11), + Balances::total_balance(&3), + initial_balance + (2 * payout_for_11 / 9 + 3 * payout_for_21 / 11), 2, ); - // Validator 10: got 800 / 1800 external stake => 8/18 =? 4/9 => Validator's share = 5/9 + // Validator 11: got 800 / 1800 external stake => 8/18 =? 4/9 => Validator's share = 5/9 assert_eq_error_rate!( - Balances::total_balance(&10), - initial_balance + 5 * payout_for_10 / 9, + Balances::total_balance(&11), + initial_balance + 5 * payout_for_11 / 9, 2, ); - // Validator 20: got 1200 / 2200 external stake => 12/22 =? 6/11 => Validator's share = + // Validator 21: got 1200 / 2200 external stake => 12/22 =? 6/11 => Validator's share = // 5/11 assert_eq_error_rate!( - Balances::total_balance(&20), - initial_balance_20 + 5 * payout_for_20 / 11, + Balances::total_balance(&21), + initial_balance_21 + 5 * payout_for_21 / 11, 2, ); }); @@ -793,9 +815,9 @@ fn nominators_also_get_slashed_pro_rata() { assert_eq!(initial_exposure.others.first().unwrap().who, 101); // staked values; - let nominator_stake = Staking::ledger(100).unwrap().active; + let nominator_stake = Staking::ledger(101).unwrap().active; let nominator_balance = balances(&101).0; - let validator_stake = Staking::ledger(10).unwrap().active; + let validator_stake = Staking::ledger(11).unwrap().active; let validator_balance = balances(&11).0; let exposed_stake = initial_exposure.total; let exposed_validator = initial_exposure.own; @@ -814,8 +836,8 @@ fn nominators_also_get_slashed_pro_rata() { // ----------------------------------------------------------------- // Nominator slashing is switched of // validator stake must have decreased - assert!(Staking::ledger(100).unwrap().active == nominator_stake); - assert!(Staking::ledger(10).unwrap().active < validator_stake); + assert!(Staking::ledger(101).unwrap().active == nominator_stake); + assert!(Staking::ledger(11).unwrap().active < validator_stake); // ----------------------------------------------------------------- let slash_amount = slash_percent * exposed_stake; @@ -830,11 +852,11 @@ fn nominators_also_get_slashed_pro_rata() { // both stakes must have been decreased pro-rata. // assert_eq!( - // Staking::ledger(100).unwrap().active, + // Staking::ledger(101).unwrap().active, // nominator_stake - nominator_share // ); assert_eq!( - Staking::ledger(10).unwrap().active, + Staking::ledger(11).unwrap().active, validator_stake - validator_share ); assert_eq!( @@ -846,7 +868,7 @@ fn nominators_also_get_slashed_pro_rata() { validator_balance - validator_share, ); // Because slashing happened. - assert!(is_disabled(10)); + assert!(is_disabled(11)); }); } @@ -858,56 +880,59 @@ fn double_staking_should_fail() { // * an account already bonded as controller can nominate. ExtBuilder::default().build_and_execute(|| { let arbitrary_value = 5; - // 2 = controller, 1 stashed => ok - assert_ok!(Staking::bond( - RuntimeOrigin::signed(1), - 2, + let (stash, controller) = testing_utils::create_unique_stash_controller::( + 0, arbitrary_value, - RewardDestination::default() - )); - // 4 = not used so far, 1 stashed => not allowed. + RewardDestination::default(), + false, + ) + .unwrap(); + + // 4 = not used so far, stash => not allowed. assert_noop!( Staking::bond( - RuntimeOrigin::signed(1), - 4, - arbitrary_value, + RuntimeOrigin::signed(stash), + arbitrary_value.into(), RewardDestination::default() ), Error::::AlreadyBonded, ); - // 1 = stashed => attempting to nominate should fail. + // stash => attempting to nominate should fail. assert_noop!( - Staking::nominate(RuntimeOrigin::signed(1), vec![1]), + Staking::nominate(RuntimeOrigin::signed(stash), vec![1]), Error::::NotController ); - // 2 = controller => nominating should work. - assert_ok!(Staking::nominate(RuntimeOrigin::signed(2), vec![1]),); + // controller => nominating should work. + assert_ok!(Staking::nominate( + RuntimeOrigin::signed(controller), + vec![1] + )); }); } #[test] -fn double_controlling_should_fail() { +fn double_controlling_attempt_should_fail() { // should test (in the same order): // * an account already bonded as controller CANNOT be reused as the controller of another // account. ExtBuilder::default().build_and_execute(|| { let arbitrary_value = 5; - // 2 = controller, 1 stashed => ok - assert_ok!(Staking::bond( - RuntimeOrigin::signed(1), - 2, + let (stash, _) = testing_utils::create_unique_stash_controller::( + 0, arbitrary_value, RewardDestination::default(), - )); - // 2 = controller, 3 stashed (Note that 2 is reused.) => no-op + false, + ) + .unwrap(); + + // Note that controller (same as stash) is reused => no-op. assert_noop!( Staking::bond( - RuntimeOrigin::signed(3), - 2, - arbitrary_value, + RuntimeOrigin::signed(stash), + arbitrary_value.into(), RewardDestination::default() ), - Error::::AlreadyPaired, + Error::::AlreadyBonded, ); }); } @@ -1065,10 +1090,10 @@ fn cannot_transfer_staked_balance() { // Tests that a stash account cannot transfer funds ExtBuilder::default().nominate(false).build_and_execute(|| { // Confirm account 11 is stashed - assert_eq!(Staking::bonded(&11), Some(10)); + assert_eq!(Staking::bonded(&11), Some(11)); // Confirm account 11 has some free balance assert_eq!(Balances::free_balance(11), 1000); - // Confirm account 11 (via controller 10) is totally staked + // Confirm account 11 (via controller) is totally staked assert_eq!(Staking::eras_stakers(active_era(), 11).total, 1000); // Confirm account 11 cannot transfer as a result assert_noop!( @@ -1090,10 +1115,10 @@ fn cannot_transfer_staked_balance_2() { // 21 has 2000 free balance but 1000 at stake ExtBuilder::default().nominate(false).build_and_execute(|| { // Confirm account 21 is stashed - assert_eq!(Staking::bonded(&21), Some(20)); + assert_eq!(Staking::bonded(&21), Some(21)); // Confirm account 21 has some free balance assert_eq!(Balances::free_balance(21), 2000); - // Confirm account 21 (via controller 20) is totally staked + // Confirm account 21 (via controller) is totally staked assert_eq!(Staking::eras_stakers(active_era(), 21).total, 1000); // Confirm account 21 can transfer at most 1000 assert_noop!( @@ -1109,7 +1134,7 @@ fn cannot_reserve_staked_balance() { // Checks that a bonded account cannot reserve balance from free balance ExtBuilder::default().build_and_execute(|| { // Confirm account 11 is stashed - assert_eq!(Staking::bonded(&11), Some(10)); + assert_eq!(Staking::bonded(&11), Some(11)); // Confirm account 11 has some free balance assert_eq!(Balances::free_balance(11), 1000); // Confirm account 11 (via controller 10) is totally staked @@ -1139,7 +1164,7 @@ fn reward_destination_works() { assert_eq!(Balances::free_balance(11), 1000); // Check how much is at stake assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1162,7 +1187,7 @@ fn reward_destination_works() { assert_eq!(Balances::free_balance(11), 1000 + total_payout_0); // Check that amount at stake increased accordingly assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000 + total_payout_0, @@ -1189,11 +1214,9 @@ fn reward_destination_works() { Balances::free_balance(11), 1000 + total_payout_0 + total_payout_1 ); - // Record this value - let recorded_stash_balance = 1000 + total_payout_0 + total_payout_1; // Check that amount at stake is NOT increased assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000 + total_payout_0, @@ -1207,7 +1230,7 @@ fn reward_destination_works() { >::insert(&11, RewardDestination::Controller); // Check controller balance - assert_eq!(Balances::free_balance(10), 1); + assert_eq!(Balances::free_balance(11), 23150); // Compute total payout now for whole duration as other parameter won't change let total_payout_2 = current_total_payout_for_duration(reward_time_per_era()); @@ -1219,10 +1242,10 @@ fn reward_destination_works() { // Check that RewardDestination is Controller assert_eq!(Staking::payee(&11), RewardDestination::Controller); // Check that reward went to the controller account - assert_eq!(Balances::free_balance(10), 1 + total_payout_2); + assert_eq!(Balances::free_balance(11), 23150 + total_payout_2); // Check that amount at stake is NOT increased assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000 + total_payout_0, @@ -1231,8 +1254,6 @@ fn reward_destination_works() { claimed_rewards: bounded_vec![0, 1, 2], }) ); - // Check that amount in staked account is NOT increased. - assert_eq!(Balances::free_balance(11), recorded_stash_balance); }); } @@ -1258,8 +1279,8 @@ fn validator_payment_prefs_work() { mock::start_active_era(1); mock::make_all_reward_payment(0); - let balance_era_1_10 = Balances::total_balance(&10); - let balance_era_1_100 = Balances::total_balance(&100); + let balance_era_1_11 = Balances::total_balance(&11); + let balance_era_1_101 = Balances::total_balance(&101); // Compute total payout now for whole duration as other parameter won't change let total_payout_1 = current_total_payout_for_duration(reward_time_per_era()); @@ -1274,13 +1295,13 @@ fn validator_payment_prefs_work() { let reward_of_10 = shared_cut * exposure_1.own / exposure_1.total + taken_cut; let reward_of_100 = shared_cut * exposure_1.others[0].value / exposure_1.total; assert_eq_error_rate!( - Balances::total_balance(&10), - balance_era_1_10 + reward_of_10, + Balances::total_balance(&11), + balance_era_1_11 + reward_of_10, 2 ); assert_eq_error_rate!( - Balances::total_balance(&100), - balance_era_1_100 + reward_of_100, + Balances::total_balance(&101), + balance_era_1_101 + reward_of_100, 2 ); }); @@ -1295,10 +1316,10 @@ fn bond_extra_works() { // Check that account 10 is a validator assert!(>::contains_key(11)); // Check that account 10 is bonded to account 11 - assert_eq!(Staking::bonded(&11), Some(10)); + assert_eq!(Staking::bonded(&11), Some(11)); // Check how much is at stake assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1315,7 +1336,7 @@ fn bond_extra_works() { assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(11), 100)); // There should be 100 more `total` and `active` in the ledger assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000 + 100, @@ -1332,7 +1353,7 @@ fn bond_extra_works() { )); // The full amount of the funds should now be in the total and active assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000000, @@ -1355,7 +1376,7 @@ fn bond_extra_and_withdraw_unbonded_works() { ExtBuilder::default().nominate(false).build_and_execute(|| { // Set payee to controller. avoids confusion assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), RewardDestination::Controller )); @@ -1366,14 +1387,14 @@ fn bond_extra_and_withdraw_unbonded_works() { assert_eq!(active_era(), 0); // check the balance of a validator accounts. - assert_eq!(Balances::total_balance(&10), 1); + assert_eq!(Balances::total_balance(&11), 1000000); // confirm that 10 is a normal validator and gets paid at the end of the era. mock::start_active_era(1); - // Initial state of 10 + // Initial state of 11 assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1395,7 +1416,7 @@ fn bond_extra_and_withdraw_unbonded_works() { Staking::bond_extra(RuntimeOrigin::signed(11), 100).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000 + 100, @@ -1420,7 +1441,7 @@ fn bond_extra_and_withdraw_unbonded_works() { // ledger should be the same. assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000 + 100, @@ -1440,9 +1461,9 @@ fn bond_extra_and_withdraw_unbonded_works() { ); // Unbond almost all of the funds in stash. - Staking::unbond(RuntimeOrigin::signed(10), 1000).unwrap(); + Staking::unbond(RuntimeOrigin::signed(11), 1000).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000 + 100, @@ -1456,9 +1477,9 @@ fn bond_extra_and_withdraw_unbonded_works() { ); // Attempting to free the balances now will fail. 2 eras need to pass. - assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(10), 0)); + assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(11), 0)); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000 + 100, @@ -1475,9 +1496,9 @@ fn bond_extra_and_withdraw_unbonded_works() { mock::start_active_era(3); // nothing yet - assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(10), 0)); + assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(11), 0)); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000 + 100, @@ -1493,10 +1514,10 @@ fn bond_extra_and_withdraw_unbonded_works() { // trigger next era. mock::start_active_era(5); - assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(10), 0)); + assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(11), 0)); // Now the value is free and the staking ledger is updated. assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 100, @@ -1520,7 +1541,7 @@ fn many_unbond_calls_should_work() { // There is only 1 chunk per era, so we need to be in a new era to create a chunk. current_era = i as u32; mock::start_active_era(current_era); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(10), 1)); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(11), 1)); } current_era += 1; @@ -1528,9 +1549,9 @@ fn many_unbond_calls_should_work() { // This chunk is locked at `current_era` through `current_era + 2` (because // `BondingDuration` == 3). - assert_ok!(Staking::unbond(RuntimeOrigin::signed(10), 1)); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(11), 1)); assert_eq!( - Staking::ledger(&10).map(|l| l.unlocking.len()).unwrap(), + Staking::ledger(&11).map(|l| l.unlocking.len()).unwrap(), <::MaxUnlockingChunks as Get>::get() as usize ); @@ -1540,12 +1561,12 @@ fn many_unbond_calls_should_work() { // There is only 1 chunk per era, so we need to be in a new era to create a chunk. current_era = i as u32; mock::start_active_era(current_era); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(10), 1)); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(11), 1)); } // only slots within last `BondingDuration` are filled. assert_eq!( - Staking::ledger(&10).map(|l| l.unlocking.len()).unwrap(), + Staking::ledger(&11).map(|l| l.unlocking.len()).unwrap(), <::BondingDuration>::get() as usize ); }) @@ -1563,7 +1584,7 @@ fn auto_withdraw_may_not_unlock_all_chunks() { // fills the chunking slots for account mock::start_active_era(current_era); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(10), 1)); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(11), 1)); current_era += 1; mock::start_active_era(current_era); @@ -1572,14 +1593,14 @@ fn auto_withdraw_may_not_unlock_all_chunks() { // can be released because current chunk hasn't stay in the queue for at least // `BondingDuration` assert_noop!( - Staking::unbond(RuntimeOrigin::signed(10), 1), + Staking::unbond(RuntimeOrigin::signed(11), 1), Error::::NoMoreChunks ); // fast-forward a few eras for unbond to be successful with implicit withdraw current_era += 10; mock::start_active_era(current_era); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(10), 1)); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(11), 1)); }) } @@ -1593,7 +1614,7 @@ fn rebond_works() { ExtBuilder::default().nominate(false).build_and_execute(|| { // Set payee to controller. avoids confusion assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), RewardDestination::Controller )); @@ -1603,9 +1624,9 @@ fn rebond_works() { // confirm that 10 is a normal validator and gets paid at the end of the era. mock::start_active_era(1); - // Initial state of 10 + // Initial state of 11 assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1620,14 +1641,14 @@ fn rebond_works() { // Try to rebond some funds. We get an error since no fund is unbonded. assert_noop!( - Staking::rebond(RuntimeOrigin::signed(10), 500), + Staking::rebond(RuntimeOrigin::signed(11), 500), Error::::NoUnlockChunk ); // Unbond almost all of the funds in stash. - Staking::unbond(RuntimeOrigin::signed(10), 900).unwrap(); + Staking::unbond(RuntimeOrigin::signed(11), 900).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1641,9 +1662,9 @@ fn rebond_works() { ); // Re-bond all the funds unbonded. - Staking::rebond(RuntimeOrigin::signed(10), 900).unwrap(); + Staking::rebond(RuntimeOrigin::signed(11), 900).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1654,9 +1675,9 @@ fn rebond_works() { ); // Unbond almost all of the funds in stash. - Staking::unbond(RuntimeOrigin::signed(10), 900).unwrap(); + Staking::unbond(RuntimeOrigin::signed(11), 900).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1667,9 +1688,9 @@ fn rebond_works() { ); // Re-bond part of the funds unbonded. - Staking::rebond(RuntimeOrigin::signed(10), 500).unwrap(); + Staking::rebond(RuntimeOrigin::signed(11), 500).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1680,9 +1701,9 @@ fn rebond_works() { ); // Re-bond the remainder of the funds unbonded. - Staking::rebond(RuntimeOrigin::signed(10), 500).unwrap(); + Staking::rebond(RuntimeOrigin::signed(11), 500).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1693,11 +1714,11 @@ fn rebond_works() { ); // Unbond parts of the funds in stash. - Staking::unbond(RuntimeOrigin::signed(10), 300).unwrap(); - Staking::unbond(RuntimeOrigin::signed(10), 300).unwrap(); - Staking::unbond(RuntimeOrigin::signed(10), 300).unwrap(); + Staking::unbond(RuntimeOrigin::signed(11), 300).unwrap(); + Staking::unbond(RuntimeOrigin::signed(11), 300).unwrap(); + Staking::unbond(RuntimeOrigin::signed(11), 300).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1708,9 +1729,9 @@ fn rebond_works() { ); // Re-bond part of the funds unbonded. - Staking::rebond(RuntimeOrigin::signed(10), 500).unwrap(); + Staking::rebond(RuntimeOrigin::signed(11), 500).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1728,7 +1749,7 @@ fn rebond_is_fifo() { ExtBuilder::default().nominate(false).build_and_execute(|| { // Set payee to controller. avoids confusion assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), RewardDestination::Controller )); @@ -1740,7 +1761,7 @@ fn rebond_is_fifo() { // Initial state of 10 assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1753,9 +1774,9 @@ fn rebond_is_fifo() { mock::start_active_era(2); // Unbond some of the funds in stash. - Staking::unbond(RuntimeOrigin::signed(10), 400).unwrap(); + Staking::unbond(RuntimeOrigin::signed(11), 400).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1771,9 +1792,9 @@ fn rebond_is_fifo() { mock::start_active_era(3); // Unbond more of the funds in stash. - Staking::unbond(RuntimeOrigin::signed(10), 300).unwrap(); + Staking::unbond(RuntimeOrigin::signed(11), 300).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1795,9 +1816,9 @@ fn rebond_is_fifo() { mock::start_active_era(4); // Unbond yet more of the funds in stash. - Staking::unbond(RuntimeOrigin::signed(10), 200).unwrap(); + Staking::unbond(RuntimeOrigin::signed(11), 200).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1821,9 +1842,9 @@ fn rebond_is_fifo() { ); // Re-bond half of the unbonding funds. - Staking::rebond(RuntimeOrigin::signed(10), 400).unwrap(); + Staking::rebond(RuntimeOrigin::signed(11), 400).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1851,7 +1872,7 @@ fn rebond_emits_right_value_in_event() { ExtBuilder::default().nominate(false).build_and_execute(|| { // Set payee to controller. avoids confusion assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), RewardDestination::Controller )); @@ -1862,9 +1883,9 @@ fn rebond_emits_right_value_in_event() { mock::start_active_era(1); // Unbond almost all of the funds in stash. - Staking::unbond(RuntimeOrigin::signed(10), 900).unwrap(); + Staking::unbond(RuntimeOrigin::signed(11), 900).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1878,9 +1899,9 @@ fn rebond_emits_right_value_in_event() { ); // Re-bond less than the total - Staking::rebond(RuntimeOrigin::signed(10), 100).unwrap(); + Staking::rebond(RuntimeOrigin::signed(11), 100).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1902,9 +1923,9 @@ fn rebond_emits_right_value_in_event() { ); // Re-bond way more than available - Staking::rebond(RuntimeOrigin::signed(10), 100_000).unwrap(); + Staking::rebond(RuntimeOrigin::signed(11), 100_000).unwrap(); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -1974,23 +1995,20 @@ fn reward_to_stake_works() { mock::make_all_reward_payment(0); assert_eq!(Staking::eras_stakers(active_era(), 11).total, 1000); - assert_eq!(Staking::eras_stakers(active_era(), 21).total, 69); + assert_eq!(Staking::eras_stakers(active_era(), 21).total, 2000); let _11_balance = Balances::free_balance(&11); + let _21_balance = Balances::free_balance(&21); + assert_eq!(_11_balance, 1000 + total_payout_0 / 2); + assert_eq!(_21_balance, 2000 + total_payout_0 / 2); // Trigger another new era as the info are frozen before the era start. mock::start_active_era(2); // -- new infos - assert_eq!( - Staking::eras_stakers(active_era(), 11).total, - 1000 + total_payout_0 / 2 - ); - assert_eq!( - Staking::eras_stakers(active_era(), 21).total, - 69 + total_payout_0 / 2 - ); + assert_eq!(Staking::eras_stakers(active_era(), 11).total, _11_balance); + assert_eq!(Staking::eras_stakers(active_era(), 21).total, _21_balance); }); } @@ -2001,11 +2019,10 @@ fn reap_stash_works() { .balance_factor(10) .build_and_execute(|| { // given - assert_eq!(Balances::free_balance(10), 10); assert_eq!(Balances::free_balance(11), 10 * 1000); - assert_eq!(Staking::bonded(&11), Some(10)); + assert_eq!(Staking::bonded(&11), Some(11)); - assert!(>::contains_key(&10)); + assert!(>::contains_key(&11)); assert!(>::contains_key(&11)); assert!(>::contains_key(&11)); assert!(>::contains_key(&11)); @@ -2018,32 +2035,31 @@ fn reap_stash_works() { // Polymesh change // ----------------------------------------------------------------- // controller or any other account is not reapable - // assert_noop!( - // Staking::reap_stash(RuntimeOrigin::signed(20), 10, 0), - // Error::::NotStash - // ); + assert_noop!( + Staking::reap_stash(RuntimeOrigin::signed(20), 10, 0), + Error::::NotStash + ); // ----------------------------------------------------------------- // no easy way to cause an account to go below ED, we tweak their staking ledger // instead. - //Ledger::::insert( - // 10, - // StakingLedger { - // stash: 11, - // total: 5, - // active: 5, - // unlocking: Default::default(), - // claimed_rewards: bounded_vec![], - // }, - //); + Ledger::::insert( + 11, + StakingLedger { + stash: 11, + total: 0, + active: 0, + unlocking: Default::default(), + claimed_rewards: bounded_vec![], + }, + ); - let _ = Balances::slash(&11, Balance::max_value()); // reap-able assert_ok!(Staking::reap_stash(RuntimeOrigin::signed(20), 11, 0)); // then - assert!(!>::contains_key(&10)); + assert!(!>::contains_key(&11)); assert!(!>::contains_key(&11)); assert!(!>::contains_key(&11)); assert!(!>::contains_key(&11)); @@ -2056,14 +2072,14 @@ fn switching_roles() { // minimal overhead. ExtBuilder::default().nominate(false).build_and_execute(|| { // Reset reward destination - for i in &[10, 20] { + for i in &[11, 21] { assert_ok!(Staking::set_payee( RuntimeOrigin::signed(*i), RewardDestination::Controller )); } - assert_eq_uvec!(validator_controllers(), vec![20, 10]); + assert_eq_uvec!(validator_controllers(), vec![21, 11]); // put some money in account that we'll use. for i in 1..7 { @@ -2071,72 +2087,66 @@ fn switching_roles() { } provide_did_to_user(1); - add_secondary_key(1, 2); // add 2 nominators assert_ok!(Staking::bond( RuntimeOrigin::signed(1), - 2, 2000, RewardDestination::Controller )); - assert_ok!(Staking::nominate(RuntimeOrigin::signed(2), vec![11, 5])); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(1), vec![11, 5])); provide_did_to_user(3); - add_secondary_key(3, 4); assert_ok!(Staking::bond( RuntimeOrigin::signed(3), - 4, 500, RewardDestination::Controller )); - assert_ok!(Staking::nominate(RuntimeOrigin::signed(4), vec![21, 1])); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![21, 1])); provide_did_to_user(5); - add_secondary_key(5, 6); // add a new validator candidate assert_ok!(Staking::bond( RuntimeOrigin::signed(5), - 6, 1000, RewardDestination::Controller )); assert_add_permissioned_validator!(&5); assert_ok!(Staking::validate( - RuntimeOrigin::signed(6), + RuntimeOrigin::signed(5), ValidatorPrefs::default() )); assert_ok!(Session::set_keys( - RuntimeOrigin::signed(6), + RuntimeOrigin::signed(5), SessionKeys { other: 6.into() }, vec![] )); mock::start_active_era(1); - // with current nominators 10 and 5 have the most stake - assert_eq_uvec!(validator_controllers(), vec![6, 10]); + // with current nominators 11 and 5 have the most stake + assert_eq_uvec!(validator_controllers(), vec![5, 11]); assert_add_permissioned_validator!(&1); // 2 decides to be a validator. Consequences: assert_ok!(Staking::validate( - RuntimeOrigin::signed(2), + RuntimeOrigin::signed(1), ValidatorPrefs::default() )); assert_ok!(Session::set_keys( - RuntimeOrigin::signed(2), + RuntimeOrigin::signed(1), SessionKeys { other: 2.into() }, vec![] )); // new stakes: - // 10: 1000 self vote - // 20: 1000 self vote + 250 vote - // 6 : 1000 self vote - // 2 : 2000 self vote + 250 vote. - // Winners: 20 and 2 + // 11: 1000 self vote + // 21: 1000 self vote + 250 vote + // 5 : 1000 self vote + // 1 : 2000 self vote + 250 vote. + // Winners: 21 and 1 mock::start_active_era(2); - assert_eq_uvec!(validator_controllers(), vec![2, 20]); + assert_eq_uvec!(validator_controllers(), vec![1, 21]); }); } @@ -2146,7 +2156,7 @@ fn wrong_vote_is_moot() { .add_staker( IdentityId::from(61), 61, - 60, + 61, 500, StakerStatus::Nominator(vec![ 11, 21, // good votes @@ -2158,7 +2168,7 @@ fn wrong_vote_is_moot() { mock::start_active_era(1); // new validators - assert_eq_uvec!(validator_controllers(), vec![20, 10]); + assert_eq_uvec!(validator_controllers(), vec![21, 11]); // our new voter is taken into account assert!(Staking::eras_stakers(active_era(), 11) @@ -2184,7 +2194,6 @@ fn bond_with_no_staked_value() { .minimum_validator_count(1) .build_and_execute(|| { provide_did_to_user(1); - add_secondary_key(1, 2); // Polymesh change // ----------------------------------------------------------------- // The assertion below would fail as we have exestential deposit = 0 (Hard coded) @@ -2192,7 +2201,6 @@ fn bond_with_no_staked_value() { //assert_noop!( // Staking::bond( // RuntimeOrigin::signed(1), - // 2, // 1, // RewardDestination::Controller // ), @@ -2202,19 +2210,18 @@ fn bond_with_no_staked_value() { // bonded with absolute minimum value possible. assert_ok!(Staking::bond( RuntimeOrigin::signed(1), - 2, 5, RewardDestination::Controller )); assert_eq!(Locks::::get(&1)[0].amount, 5); // unbonding even 1 will cause all to be unbonded. - assert_ok!(Staking::unbond(RuntimeOrigin::signed(2), 1)); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(1), 1)); // Polymesh change // ----------------------------------------------------------------- // The assertion below would fail as we have exestential deposit = 0 (Hard coded) assert_eq!( - Staking::ledger(2), + Staking::ledger(1), Some(StakingLedger { stash: 1, active: 4, @@ -2229,15 +2236,15 @@ fn bond_with_no_staked_value() { mock::start_active_era(2); // not yet removed. - assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(2), 0)); - assert!(Staking::ledger(2).is_some()); + assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(1), 0)); + assert!(Staking::ledger(1).is_some()); assert_eq!(Locks::::get(&1)[0].amount, 5); mock::start_active_era(3); // poof. Account 1 is removed from the staking system. - assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(2), 0)); - assert!(Staking::ledger(2).is_some()); + assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(1), 0)); + assert!(Staking::ledger(1).is_some()); assert_eq!(Locks::::get(&1).len(), 1); }); } @@ -2250,31 +2257,29 @@ fn bond_with_little_staked_value_bounded() { .minimum_validator_count(1) .build_and_execute(|| { // setup - assert_ok!(Staking::chill(RuntimeOrigin::signed(30))); + assert_ok!(Staking::chill(RuntimeOrigin::signed(31))); assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), RewardDestination::Controller )); - let init_balance_2 = Balances::free_balance(&2); - let init_balance_10 = Balances::free_balance(&10); + let init_balance_1 = Balances::free_balance(&1); + let init_balance_11 = Balances::free_balance(&11); provide_did_to_user(1); // Stingy validator. assert_ok!(Staking::bond( RuntimeOrigin::signed(1), - 2, 1, RewardDestination::Controller )); - add_secondary_key(1, 2); assert_add_permissioned_validator!(&1); assert_ok!(Staking::validate( - RuntimeOrigin::signed(2), + RuntimeOrigin::signed(1), ValidatorPrefs::default() )); assert_ok!(Session::set_keys( - RuntimeOrigin::signed(2), - SessionKeys { other: 2.into() }, + RuntimeOrigin::signed(1), + SessionKeys { other: 1.into() }, vec![] )); @@ -2287,17 +2292,17 @@ fn bond_with_little_staked_value_bounded() { mock::make_all_reward_payment(0); // 2 is elected. - assert_eq_uvec!(validator_controllers(), vec![20, 10, 2]); + assert_eq_uvec!(validator_controllers(), vec![21, 11, 1]); assert_eq!(Staking::eras_stakers(active_era(), 2).total, 0); // Old ones are rewarded. assert_eq_error_rate!( - Balances::free_balance(10), - init_balance_10 + total_payout_0 / 3, + Balances::free_balance(11), + init_balance_11 + total_payout_0 / 3, 1 ); // no rewards paid to 2. This was initial election. - assert_eq!(Balances::free_balance(2), init_balance_2); + assert_eq!(Balances::free_balance(1), init_balance_1); // reward era 2 let total_payout_1 = current_total_payout_for_duration(reward_time_per_era()); @@ -2305,18 +2310,18 @@ fn bond_with_little_staked_value_bounded() { mock::start_active_era(2); mock::make_all_reward_payment(1); - assert_eq_uvec!(validator_controllers(), vec![20, 10, 2]); + assert_eq_uvec!(validator_controllers(), vec![21, 11, 1]); assert_eq!(Staking::eras_stakers(active_era(), 2).total, 0); // 2 is now rewarded. assert_eq_error_rate!( - Balances::free_balance(2), - init_balance_2 + total_payout_1 / 3, + Balances::free_balance(1), + init_balance_1 + total_payout_1 / 3, 1 ); assert_eq_error_rate!( - Balances::free_balance(&10), - init_balance_10 + total_payout_0 / 3 + total_payout_1 / 3, + Balances::free_balance(&11), + init_balance_11 + total_payout_0 / 3 + total_payout_1 / 3, 2, ); }); @@ -2333,7 +2338,7 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider() { // ensure all have equal stake. assert_eq!( >::iter() - .map(|(v, _)| (v, Staking::ledger(v - 1).unwrap().total)) + .map(|(v, _)| (v, Staking::ledger(v).unwrap().total)) .collect::>(), vec![(31, 1000), (21, 1000), (11, 1000)], ); @@ -2350,27 +2355,23 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider() { } provide_did_to_user(1); - add_secondary_key(1, 2); assert_ok!(Staking::bond( RuntimeOrigin::signed(1), - 2, 1000, RewardDestination::Controller )); assert_ok!(Staking::nominate( - RuntimeOrigin::signed(2), + RuntimeOrigin::signed(1), vec![11, 11, 11, 21, 31] )); provide_did_to_user(3); - add_secondary_key(3, 4); assert_ok!(Staking::bond( RuntimeOrigin::signed(3), - 4, 1000, RewardDestination::Controller )); - assert_ok!(Staking::nominate(RuntimeOrigin::signed(4), vec![21, 31])); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![21, 31])); // winners should be 21 and 31. Otherwise this election is taking duplicates into // account. @@ -2413,7 +2414,7 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider_elected() { // ensure all have equal stake. assert_eq!( >::iter() - .map(|(v, _)| (v, Staking::ledger(v - 1).unwrap().total)) + .map(|(v, _)| (v, Staking::ledger(v).unwrap().total)) .collect::>(), vec![(31, 1000), (21, 1000), (11, 1000)], ); @@ -2428,27 +2429,23 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider_elected() { } provide_did_to_user(1); - add_secondary_key(1, 2); assert_ok!(Staking::bond( RuntimeOrigin::signed(1), - 2, 1000, RewardDestination::Controller )); assert_ok!(Staking::nominate( - RuntimeOrigin::signed(2), + RuntimeOrigin::signed(1), vec![11, 11, 11, 21] )); provide_did_to_user(3); - add_secondary_key(3, 4); assert_ok!(Staking::bond( RuntimeOrigin::signed(3), - 4, 1000, RewardDestination::Controller )); - assert_ok!(Staking::nominate(RuntimeOrigin::signed(4), vec![21])); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![21])); // winners should be 21 and 11. let supports = ::ElectionProvider::elect().unwrap(); @@ -2501,15 +2498,15 @@ fn phragmen_should_not_overflow() { let _ = Staking::chill(RuntimeOrigin::signed(10)); let _ = Staking::chill(RuntimeOrigin::signed(20)); - bond_validator(3, 2, Votes::max_value() as Balance); - bond_validator(5, 4, Votes::max_value() as Balance); + bond_validator(3, Votes::max_value() as Balance); + bond_validator(5, Votes::max_value() as Balance); - bond_nominator(7, 6, Votes::max_value() as Balance, vec![3, 5]); - bond_nominator(9, 8, Votes::max_value() as Balance, vec![3, 5]); + bond_nominator(7, Votes::max_value() as Balance, vec![3, 5]); + bond_nominator(9, Votes::max_value() as Balance, vec![3, 5]); mock::start_active_era(1); - assert_eq_uvec!(validator_controllers(), vec![4, 2]); + assert_eq_uvec!(validator_controllers(), vec![3, 5]); // We can safely convert back to values within [u64, u128]. assert!(Staking::eras_stakers(active_era(), 3).total > Votes::max_value() as Balance); @@ -2554,7 +2551,6 @@ fn reward_validator_slashing_validator_does_not_overflow() { // only slashes out of bonded stake are applied. without this line, it is 0. Staking::bond( RuntimeOrigin::signed(2), - 20000, stake - 1, RewardDestination::default(), ) @@ -2642,7 +2638,7 @@ fn unbonded_balance_is_not_slashable() { // total amount staked is slashable. assert_eq!(Staking::slashable_balance_of(&11), 1000); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(10), 800)); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(11), 800)); // only the active portion. assert_eq!(Staking::slashable_balance_of(&11), 200); @@ -2792,7 +2788,7 @@ fn slash_in_old_span_does_not_deselect() { mock::start_active_era(2); - Staking::validate(RuntimeOrigin::signed(10), Default::default()).unwrap(); + Staking::validate(RuntimeOrigin::signed(11), Default::default()).unwrap(); assert_eq!(Staking::force_era(), Forcing::NotForcing); assert!(>::contains_key(11)); assert!(!Session::validators().contains(&11)); @@ -2813,7 +2809,7 @@ fn slash_in_old_span_does_not_deselect() { ); // the validator doesn't get chilled again - assert!(pallet_staking::Validators::::iter().any(|(stash, _)| stash == 11)); + assert!(Validators::::iter().any(|(stash, _)| stash == 11)); // but we are still forcing a new era assert_eq!(Staking::force_era(), Forcing::ForceNew); @@ -2830,10 +2826,10 @@ fn slash_in_old_span_does_not_deselect() { ); // the validator doesn't get chilled again - assert!(pallet_staking::Validators::::iter().any(|(stash, _)| stash == 11)); + assert!(Validators::::iter().any(|(stash, _)| stash == 11)); // but it's disabled - assert!(is_disabled(10)); + assert!(is_disabled(11)); // and we are still forcing a new era assert_eq!(Staking::force_era(), Forcing::ForceNew); }); @@ -3041,11 +3037,8 @@ fn garbage_collection_after_slashing() { ); assert_eq!(Balances::free_balance(11), 2000 - 200); - assert!(pallet_staking::SlashingSpans::::get(&11).is_some()); - assert_eq!( - pallet_staking::SpanSlash::::get(&(11, 0)).amount(), - &200 - ); + assert!(SlashingSpans::::get(&11).is_some()); + assert_eq!(SpanSlash::::get(&(11, 0)).amount(), &200); on_offence_now( &[OffenceDetails { @@ -3061,7 +3054,7 @@ fn garbage_collection_after_slashing() { assert_eq!(Balances::free_balance(11), 0); assert_eq!(Balances::total_balance(&11), 0); - let slashing_spans = pallet_staking::SlashingSpans::::get(&11).unwrap(); + let slashing_spans = SlashingSpans::::get(&11).unwrap(); assert_eq!(slashing_spans.iter().count(), 2); // reap_stash respects num_slashing_spans so that weight is accurate @@ -3071,11 +3064,8 @@ fn garbage_collection_after_slashing() { ); assert_ok!(Staking::reap_stash(RuntimeOrigin::signed(20), 11, 2)); - assert!(pallet_staking::SlashingSpans::::get(&11).is_none()); - assert_eq!( - pallet_staking::SpanSlash::::get(&(11, 0)).amount(), - &0 - ); + assert!(SlashingSpans::::get(&11).is_none()); + assert_eq!(SpanSlash::::get(&(11, 0)).amount(), &0); }) } @@ -3108,19 +3098,19 @@ fn garbage_collection_on_window_pruning() { // assert_eq!(Balances::free_balance(101), 2000 - (nominated_value / 10)); // ----------------------------------------------------------------- - assert!(pallet_staking::ValidatorSlashInEra::::get(&now, &11).is_some()); - assert!(pallet_staking::NominatorSlashInEra::::get(&now, &101).is_none()); + assert!(ValidatorSlashInEra::::get(&now, &11).is_some()); + assert!(NominatorSlashInEra::::get(&now, &101).is_none()); // + 1 because we have to exit the bonding window. for era in (0..(BondingDuration::get() + 1)).map(|offset| offset + now + 1) { - assert!(pallet_staking::ValidatorSlashInEra::::get(&now, &11).is_some()); - assert!(pallet_staking::NominatorSlashInEra::::get(&now, &101).is_none()); + assert!(ValidatorSlashInEra::::get(&now, &11).is_some()); + assert!(NominatorSlashInEra::::get(&now, &101).is_none()); mock::start_active_era(era); } - assert!(pallet_staking::ValidatorSlashInEra::::get(&now, &11).is_none()); - assert!(pallet_staking::NominatorSlashInEra::::get(&now, &101).is_none()); + assert!(ValidatorSlashInEra::::get(&now, &11).is_none()); + assert!(NominatorSlashInEra::::get(&now, &101).is_none()); }) } @@ -3183,7 +3173,7 @@ fn slashing_nominators_by_span_max() { }, ]; - let get_span = |account| pallet_staking::SlashingSpans::::get(&account).unwrap(); + let get_span = |account| SlashingSpans::::get(&account).unwrap(); assert_eq!(get_span(11).iter().collect::>(), expected_spans); @@ -3245,7 +3235,7 @@ fn slashes_are_summed_across_spans() { assert_eq!(Balances::free_balance(21), 2000); assert_eq!(Staking::slashable_balance_of(&21), 1000); - let get_span = |account| pallet_staking::SlashingSpans::::get(&account).unwrap(); + let get_span = |account| SlashingSpans::::get(&account).unwrap(); on_offence_now( &[OffenceDetails { @@ -3272,7 +3262,7 @@ fn slashes_are_summed_across_spans() { assert_eq!(Balances::free_balance(21), 1900); // 21 has been force-chilled. re-signal intent to validate. - Staking::validate(RuntimeOrigin::signed(20), Default::default()).unwrap(); + Staking::validate(RuntimeOrigin::signed(21), Default::default()).unwrap(); mock::start_active_era(4); @@ -3445,8 +3435,8 @@ fn retroactive_deferred_slashes_one_before() { // unbond at slash era. mock::start_active_era(2); - assert_ok!(Staking::chill(RuntimeOrigin::signed(10))); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(10), 100)); + assert_ok!(Staking::chill(RuntimeOrigin::signed(11))); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(11), 100)); mock::start_active_era(3); System::reset_events(); @@ -3462,7 +3452,7 @@ fn retroactive_deferred_slashes_one_before() { mock::start_active_era(4); - assert_eq!(Staking::ledger(10).unwrap().total, 1000); + assert_eq!(Staking::ledger(11).unwrap().total, 1000); // slash happens after the next line. mock::start_active_era(5); @@ -3483,9 +3473,9 @@ fn retroactive_deferred_slashes_one_before() { )); // their ledger has already been slashed. - assert_eq!(Staking::ledger(10).unwrap().total, 900); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(10), 1000)); - assert_eq!(Staking::ledger(10).unwrap().total, 900); + assert_eq!(Staking::ledger(11).unwrap().total, 900); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(11), 1000)); + assert_eq!(Staking::ledger(11).unwrap().total, 900); }) } @@ -3512,14 +3502,14 @@ fn staker_cannot_bail_deferred_slash() { ); // now we chill - assert_ok!(Staking::chill(RuntimeOrigin::signed(100))); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(100), 500)); + assert_ok!(Staking::chill(RuntimeOrigin::signed(101))); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(101), 500)); assert_eq!(Staking::current_era().unwrap(), 1); assert_eq!(active_era(), 1); assert_eq!( - Ledger::::get(100).unwrap(), + Ledger::::get(101).unwrap(), StakingLedger { active: 0, total: 500, @@ -3552,12 +3542,12 @@ fn staker_cannot_bail_deferred_slash() { // and cannot yet unbond: assert_storage_noop!(assert!(Staking::withdraw_unbonded( - RuntimeOrigin::signed(100), + RuntimeOrigin::signed(101), 0 ) .is_ok())); assert_eq!( - Ledger::::get(100).unwrap().unlocking.into_inner(), + Ledger::::get(101).unwrap().unlocking.into_inner(), vec![UnlockChunk { era: 4u32, value: 500 as Balance @@ -3729,7 +3719,7 @@ fn remove_multi_deferred() { &[Perbill::from_percent(25)], ); - assert_eq!(pallet_staking::UnappliedSlashes::::get(&4).len(), 5); + assert_eq!(UnappliedSlashes::::get(&4).len(), 5); // fails if list is not sorted assert_noop!( @@ -3753,7 +3743,7 @@ fn remove_multi_deferred() { vec![0, 2, 4] )); - let slashes = pallet_staking::UnappliedSlashes::::get(&4); + let slashes = UnappliedSlashes::::get(&4); assert_eq!(slashes.len(), 2); assert_eq!(slashes[0].validator, 21); assert_eq!(slashes[1].validator, 42); @@ -3823,11 +3813,11 @@ fn slash_kicks_validators_not_nominators_and_disables_nominator_for_kicked_valid // ----------------------------------------------------------------- // check that validator was chilled. - assert!(pallet_staking::Validators::::iter().all(|(stash, _)| stash != 11)); + assert!(Validators::::iter().all(|(stash, _)| stash != 11)); // actually re-bond the slashed validator assert_ok!(Staking::validate( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), Default::default() )); @@ -3923,9 +3913,9 @@ fn non_slashable_offence_doesnt_disable_validator() { ); // the offence for validator 10 wasn't slashable so it wasn't disabled - assert!(!is_disabled(10)); + assert!(!is_disabled(11)); // whereas validator 20 gets disabled - assert!(is_disabled(20)); + assert!(is_disabled(21)); }); } @@ -4000,9 +3990,9 @@ fn slashing_independent_of_disabling_validator() { ); // the offence for validator 10 was explicitly disabled - assert!(is_disabled(10)); - // whereas validator 20 is explicitly not disabled - assert!(!is_disabled(20)); + assert!(is_disabled(11)); + // whereas validator 21 is explicitly not disabled + assert!(!is_disabled(21)); }); } @@ -4091,18 +4081,18 @@ fn disabled_validators_are_kept_disabled_for_whole_era() { // nominations are not updated. assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); - // validator 10 should not be disabled since the offence wasn't slashable - assert!(!is_disabled(10)); - // validator 20 gets disabled since it got slashed - assert!(is_disabled(20)); + // validator 11 should not be disabled since the offence wasn't slashable + assert!(!is_disabled(11)); + // validator 21 gets disabled since it got slashed + assert!(is_disabled(21)); advance_session(); // disabled validators should carry-on through all sessions in the era - assert!(!is_disabled(10)); - assert!(is_disabled(20)); + assert!(!is_disabled(11)); + assert!(is_disabled(21)); - // validator 10 should now get disabled + // validator 11 should now get disabled on_offence_now( &[OffenceDetails { offender: (11, exposure_11.clone()), @@ -4117,14 +4107,14 @@ fn disabled_validators_are_kept_disabled_for_whole_era() { advance_session(); // and both are disabled in the last session of the era - assert!(is_disabled(10)); - assert!(is_disabled(20)); + assert!(is_disabled(11)); + assert!(is_disabled(21)); mock::start_active_era(2); // when a new era starts disabled validators get cleared - assert!(!is_disabled(10)); - assert!(!is_disabled(20)); + assert!(!is_disabled(11)); + assert!(!is_disabled(21)); }); } @@ -4138,11 +4128,11 @@ fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() { // Consumed weight for all payout_stakers dispatches that fail let err_weight = ::WeightInfo::payout_stakers_alive_staked(0); - let init_balance_10 = Balances::total_balance(&10); - let init_balance_100 = Balances::total_balance(&100); + let init_balance_11 = Balances::total_balance(&11); + let init_balance_101 = Balances::total_balance(&101); - let part_for_10 = Perbill::from_rational::(1000, 1125); - let part_for_100 = Perbill::from_rational::(125, 1125); + let part_for_11 = Perbill::from_rational::(1000, 1125); + let part_for_101 = Perbill::from_rational::(125, 1125); // Check state Payee::::insert(11, RewardDestination::Controller); @@ -4202,12 +4192,12 @@ fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() { // only era 1 and 2 can be rewarded. assert_eq!( - Balances::total_balance(&10), - init_balance_10 + part_for_10 * (total_payout_1 + total_payout_2), + Balances::total_balance(&11), + init_balance_11 + part_for_11 * (total_payout_1 + total_payout_2), ); assert_eq!( - Balances::total_balance(&100), - init_balance_100 + part_for_100 * (total_payout_1 + total_payout_2), + Balances::total_balance(&101), + init_balance_101 + part_for_101 * (total_payout_1 + total_payout_2), ); }); } @@ -4234,7 +4224,7 @@ fn zero_slash_keeps_nominators() { assert_eq!(Balances::free_balance(101), 2000); // 11 is still removed.. - assert!(pallet_staking::Validators::::iter().all(|(stash, _)| stash != 11)); + assert!(Validators::::iter().all(|(stash, _)| stash != 11)); // but their nominations are kept. assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); }); @@ -4317,21 +4307,14 @@ fn test_max_nominator_rewarded_per_validator_and_cant_steal_someone_else_reward( for i in 0..=<::MaxNominatorRewardedPerValidator as Get>::get() as i32 { let stash = 10_000 + i as AccountId; - let controller = 20_000 + i as AccountId; let balance = 10_000 + i as Balance; Balances::make_free_balance_be(&stash, balance); - provide_did_to_user(stash); - add_secondary_key(stash, controller); assert_ok!(Staking::bond( RuntimeOrigin::signed(stash), - controller, balance, RewardDestination::Stash )); - assert_ok!(Staking::nominate( - RuntimeOrigin::signed(controller), - vec![11] - )); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(stash), vec![11])); } mock::start_active_era(1); @@ -4369,13 +4352,13 @@ fn test_payout_stakers() { // Track the exposure of the validator and the nominators that will get paid out. let mut payout_exposure = balance; // Create a validator: - bond_validator(11, 10, balance); // Default(64) + bond_validator(11, balance); // Default(64) assert_eq!(Validators::::count(), 1); // Create nominators, targeting stash of validators for i in 0..100 { let bond_amount = balance + i as Balance; - bond_nominator_cdd(1000 + i, 100 + i, bond_amount, vec![11]); + bond_nominator(1000 + i, bond_amount, vec![11]); total_exposure += bond_amount; if i >= 36 { payout_exposure += bond_amount; @@ -4404,18 +4387,18 @@ fn test_payout_stakers() { // Top 64 nominators of validator 11 automatically paid out, including the validator // Validator payout goes to controller. - assert!(Balances::free_balance(&10) > balance); + assert!(Balances::free_balance(&11) > balance); for i in 36..100 { - assert!(Balances::free_balance(&(100 + i)) > balance + i as Balance); + assert!(Balances::free_balance(&(1000 + i)) > balance + i as Balance); } // The bottom 36 do not for i in 0..36 { - assert_eq!(Balances::free_balance(&(100 + i)), balance + i as Balance); + assert_eq!(Balances::free_balance(&(1000 + i)), balance + i as Balance); } // We track rewards in `claimed_rewards` vec assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -4450,7 +4433,7 @@ fn test_payout_stakers() { // We track rewards in `claimed_rewards` vec assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -4483,7 +4466,7 @@ fn test_payout_stakers() { expected_last_reward_era )); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -4501,7 +4484,7 @@ fn test_payout_stakers() { assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 23)); assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 42)); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -4530,11 +4513,11 @@ fn payout_stakers_handles_basic_errors() { // Same setup as the test above let balance = 1000; - bond_validator(11, 10, balance); // Default(64) + bond_validator(11, balance); // Default(64) // Create nominators, targeting stash for i in 0..100 { - bond_nominator(1000 + i, 100 + i, balance + i as Balance, vec![11]); + bond_nominator(1000 + i, balance + i as Balance, vec![11]); } mock::start_active_era(1); @@ -4637,7 +4620,7 @@ fn payout_stakers_handles_weight_refund() { assert!(max_nom_rewarded_weight.any_gt(half_max_nom_rewarded_weight)); let balance = 1000; - bond_validator(11, 10, balance); + bond_validator(11, balance); // Era 1 start_active_era(1); @@ -4648,12 +4631,7 @@ fn payout_stakers_handles_weight_refund() { // Add some `half_max_nom_rewarded` nominators who will start backing the validator in the // next era. for i in 0..half_max_nom_rewarded { - bond_nominator( - (1000 + i).into(), - (100 + i).into(), - balance + i as Balance, - vec![11], - ); + bond_nominator((1000 + i).into(), balance + i as Balance, vec![11]); } // Era 2 @@ -4713,12 +4691,7 @@ fn payout_stakers_handles_weight_refund() { // Add enough nominators so that we are at the limit. They will be active nominators // in the next era. for i in half_max_nom_rewarded..max_nom_rewarded { - bond_nominator( - (1000 + i).into(), - (100 + i).into(), - balance + i as Balance, - vec![11], - ); + bond_nominator((1000 + i).into(), balance + i as Balance, vec![11]); } // Era 5 @@ -4766,9 +4739,9 @@ fn bond_during_era_correctly_populates_claimed_rewards() { .has_stakers(false) .build_and_execute(|| { // Era = None - bond_validator(9, 8, 1000); + bond_validator(9, 1000); assert_eq!( - Staking::ledger(&8), + Staking::ledger(&9), Some(StakingLedger { stash: 9, total: 1000, @@ -4778,9 +4751,9 @@ fn bond_during_era_correctly_populates_claimed_rewards() { }) ); mock::start_active_era(5); - bond_validator(11, 10, 1000); + bond_validator(11, 1000); assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -4794,9 +4767,9 @@ fn bond_during_era_correctly_populates_claimed_rewards() { let current_era = 99; let last_reward_era = 99 - HistoryDepth::get(); mock::start_active_era(current_era); - bond_validator(13, 12, 1000); + bond_validator(13, 1000); assert_eq!( - Staking::ledger(&12), + Staking::ledger(&13), Some(StakingLedger { stash: 13, total: 1000, @@ -4863,7 +4836,7 @@ fn offences_weight_calculated_correctly() { // One `slash_cost` + ::DbWeight::get().reads_writes(6, 5) // `slash_cost` * nominators (1) - // + ::DbWeight::get().reads_writes(6, 5) + //+ ::DbWeight::get().reads_writes(6, 5) // `reward_cost` * reporters (1) + ::DbWeight::get().reads_writes(2, 2) ; @@ -4887,24 +4860,42 @@ fn payout_creates_controller() { .build_and_execute(|| { let balance = 1000; // Create a validator: - bond_validator(11, 10, balance); + bond_validator(11, balance); - // Create a stash/controller pair - bond_nominator(1234, 1337, 100, vec![11]); + // create a stash/controller pair and nominate + let (stash, controller) = testing_utils::create_unique_stash_controller::( + 0, + 100, + RewardDestination::Controller, + false, + ) + .unwrap(); + assert_ok!(Staking::nominate( + RuntimeOrigin::signed(controller), + vec![11] + )); // kill controller - assert_ok!(Balances::transfer(RuntimeOrigin::signed(1337), 1234, 100)); - assert_eq!(Balances::free_balance(1337), 0); + assert_ok!(Balances::transfer( + RuntimeOrigin::signed(controller), + stash, + 100 + )); + assert_eq!(Balances::free_balance(controller), 0); mock::start_active_era(1); Staking::reward_by_ids(vec![(11, 1)]); // compute and ensure the reward amount is greater than zero. let _ = current_total_payout_for_duration(reward_time_per_era()); mock::start_active_era(2); - assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 1)); + assert_ok!(Staking::payout_stakers( + RuntimeOrigin::signed(controller), + 11, + 1 + )); // Controller is created - assert!(Balances::free_balance(1337) > 0); + assert!(Balances::free_balance(controller) > 0); }) } @@ -4915,14 +4906,14 @@ fn payout_to_any_account_works() { .build_and_execute(|| { let balance = 1000; // Create a validator: - bond_validator(11, 10, balance); // Default(64) + bond_validator(11, balance); // Default(64) // Create a stash/controller pair - bond_nominator(1234, 1337, 100, vec![11]); + bond_nominator(1234, 100, vec![11]); // Update payout location assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(1337), + RuntimeOrigin::signed(1234), RewardDestination::Account(42) )); @@ -4934,7 +4925,7 @@ fn payout_to_any_account_works() { // compute and ensure the reward amount is greater than zero. let _ = current_total_payout_for_duration(reward_time_per_era()); mock::start_active_era(2); - assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 1)); + assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1234), 11, 1)); // Payment is successful assert!(Balances::free_balance(42) > 0); @@ -5047,31 +5038,31 @@ fn session_buffering_no_offset() { fn cannot_rebond_to_lower_than_ed() { ExtBuilder::default() .existential_deposit(0) - .balance_factor(10) + .balance_factor(11) .build_and_execute(|| { // initial stuff. assert_eq!( - Staking::ledger(&20).unwrap(), + Staking::ledger(&21).unwrap(), StakingLedger { stash: 21, - total: 10 * 1000, - active: 10 * 1000, + total: 11 * 1000, + active: 11 * 1000, unlocking: Default::default(), claimed_rewards: bounded_vec![], } ); // unbond all of it. must be chilled first. - assert_ok!(Staking::chill(RuntimeOrigin::signed(20))); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(20), 10 * 1000)); + assert_ok!(Staking::chill(RuntimeOrigin::signed(21))); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(21), 11 * 1000)); assert_eq!( - Staking::ledger(&20).unwrap(), + Staking::ledger(&21).unwrap(), StakingLedger { stash: 21, - total: 10 * 1000, + total: 11 * 1000, active: 0, unlocking: bounded_vec![UnlockChunk { - value: 10 * 1000, + value: 11 * 1000, era: 3 }], claimed_rewards: bounded_vec![], @@ -5081,7 +5072,7 @@ fn cannot_rebond_to_lower_than_ed() { // now bond a wee bit more // Polymesh change // ----------------------------------------------------------------- - assert_ok!(Staking::rebond(RuntimeOrigin::signed(20), 5),); + assert_ok!(Staking::rebond(RuntimeOrigin::signed(21), 5),); // ----------------------------------------------------------------- }) } @@ -5090,31 +5081,31 @@ fn cannot_rebond_to_lower_than_ed() { fn cannot_bond_extra_to_lower_than_ed() { ExtBuilder::default() .existential_deposit(0) - .balance_factor(10) + .balance_factor(11) .build_and_execute(|| { // initial stuff. assert_eq!( - Staking::ledger(&20).unwrap(), + Staking::ledger(&21).unwrap(), StakingLedger { stash: 21, - total: 10 * 1000, - active: 10 * 1000, + total: 11 * 1000, + active: 11 * 1000, unlocking: Default::default(), claimed_rewards: bounded_vec![], } ); // unbond all of it. must be chilled first. - assert_ok!(Staking::chill(RuntimeOrigin::signed(20))); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(20), 10 * 1000)); + assert_ok!(Staking::chill(RuntimeOrigin::signed(21))); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(21), 11 * 1000)); assert_eq!( - Staking::ledger(&20).unwrap(), + Staking::ledger(&21).unwrap(), StakingLedger { stash: 21, - total: 10 * 1000, + total: 11 * 1000, active: 0, unlocking: bounded_vec![UnlockChunk { - value: 10 * 1000, + value: 11 * 1000, era: 3 }], claimed_rewards: bounded_vec![], @@ -5138,7 +5129,7 @@ fn do_not_die_when_active_is_ed() { .build_and_execute(|| { // given assert_eq!( - Staking::ledger(&20).unwrap(), + Staking::ledger(&21).unwrap(), StakingLedger { stash: 21, total: 1000 * ed, @@ -5149,13 +5140,13 @@ fn do_not_die_when_active_is_ed() { ); // when unbond all of it except ed. - assert_ok!(Staking::unbond(RuntimeOrigin::signed(20), 999 * ed)); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(21), 999 * ed)); start_active_era(3); - assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(20), 100)); + assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(21), 100)); // then assert_eq!( - Staking::ledger(&20).unwrap(), + Staking::ledger(&21).unwrap(), StakingLedger { stash: 21, total: ed, @@ -5224,21 +5215,21 @@ mod election_data_provider { .add_staker( IdentityId::from(61), 61, - 60, + 61, 2_000, StakerStatus::::Nominator(vec![21]), ) .add_staker( IdentityId::from(71), 71, - 70, + 71, 10, StakerStatus::::Nominator(vec![21]), ) .add_staker( IdentityId::from(81), 81, - 80, + 81, 50, StakerStatus::::Nominator(vec![21]), ) @@ -5254,13 +5245,91 @@ mod election_data_provider { } #[test] - fn set_minimum_active_stake_zero_correct() { + fn set_minimum_active_stake_lower_bond_works() { + // if there are no voters, minimum active stake is zero (should not happen). ExtBuilder::default() .has_stakers(false) .build_and_execute(|| { + assert_eq!(::VoterList::count(), 0); assert_ok!(::electing_voters(None)); assert_eq!(MinimumActiveStake::::get(), 0); }); + + // lower non-zero active stake below `MinNominatorBond` is the minimum active stake if + // it is selected as part of the npos voters. + ExtBuilder::default() + .has_stakers(true) + .nominate(true) + .build_and_execute(|| { + assert_eq!(MinNominatorBond::::get(), 1); + assert_eq!(::VoterList::count(), 4); + + assert_ok!(Staking::bond( + RuntimeOrigin::signed(4), + 5, + Default::default(), + )); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(4), vec![1])); + assert_eq!(::VoterList::count(), 5); + + let voters_before = + ::electing_voters(None).unwrap(); + assert_eq!(MinimumActiveStake::::get(), 5); + + // update minimum nominator bond. + MinNominatorBond::::set(10); + assert_eq!(MinNominatorBond::::get(), 10); + // voter list still considers nominator 4 for voting, even though its active stake is + // lower than `MinNominatorBond`. + assert_eq!(::VoterList::count(), 5); + + let voters = ::electing_voters(None).unwrap(); + assert_eq!(voters_before, voters); + + // minimum active stake is lower than `MinNominatorBond`. + assert_eq!(MinimumActiveStake::::get(), 5); + }); + } + + #[test] + fn set_minimum_active_bond_corrupt_state() { + ExtBuilder::default() + .has_stakers(true) + .nominate(true) + .add_staker( + IdentityId::from(61), + 61, + 61, + 2_000, + StakerStatus::::Nominator(vec![21]), + ) + .build_and_execute(|| { + assert_eq!(Staking::weight_of(&101), 500); + let voters = ::electing_voters(None).unwrap(); + assert_eq!(voters.len(), 5); + assert_eq!(MinimumActiveStake::::get(), 500); + + assert_ok!(Staking::unbond(RuntimeOrigin::signed(101), 200)); + start_active_era(10); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(101), 100)); + start_active_era(20); + + // corrupt ledger state by lowering max unlocking chunks bounds. + MaxUnlockingChunks::set(1); + + let voters = ::electing_voters(None).unwrap(); + // number of returned voters decreases since ledger entry of stash 101 is now + // corrupt. + assert_eq!(voters.len(), 4); + // minimum active stake does not take into consideration the corrupt entry. + assert_eq!(MinimumActiveStake::::get(), 2_000); + + // voter weight of corrupted ledger entry is 0. + assert_eq!(Staking::weight_of(&101), 0); + + // reset max unlocking chunks for try_state to pass. + MaxUnlockingChunks::set(32); + }) } #[test] @@ -5307,7 +5376,6 @@ mod election_data_provider { // Tests the criteria that in `ElectionDataProvider::voters` function, we try to get at most // `maybe_max_len` voters, and if some of them end up being skipped, we iterate at most `2 * // maybe_max_len`. - #[ignore] #[test] fn only_iterates_max_2_times_max_allowed_len() { ExtBuilder::default() @@ -5317,21 +5385,21 @@ mod election_data_provider { .add_staker( IdentityId::from(61), 61, - 60, + 61, 2_000, StakerStatus::::Nominator(vec![21, 22, 23, 24, 25]), ) .add_staker( IdentityId::from(71), 71, - 70, + 71, 2_000, StakerStatus::::Nominator(vec![21, 22, 23, 24, 25]), ) .add_staker( IdentityId::from(81), 81, - 80, + 81, 2_000, StakerStatus::::Nominator(vec![21, 22, 23, 24, 25]), ) @@ -5339,7 +5407,7 @@ mod election_data_provider { // all voters ordered by stake, assert_eq!( ::VoterList::iter().collect::>(), - vec![61, 71, 81, 11, 21, 31] + vec![31, 21, 11, 81, 71, 61] ); MaxNominations::set(2); @@ -5357,7 +5425,7 @@ mod election_data_provider { .map(|(stash, _, _)| stash) .copied() .collect::>(), - vec![11], + vec![31, 21], ); }); } @@ -5486,55 +5554,53 @@ fn min_bond_checks_work() { // 500 is not enough for any role assert_ok!(Staking::bond( RuntimeOrigin::signed(3), - 4, 500, RewardDestination::Controller )); assert_noop!( - Staking::nominate(RuntimeOrigin::signed(4), vec![1]), + Staking::nominate(RuntimeOrigin::signed(3), vec![1]), Error::::InsufficientBond ); assert_noop!( - Staking::validate(RuntimeOrigin::signed(4), ValidatorPrefs::default()), + Staking::validate(RuntimeOrigin::signed(3), ValidatorPrefs::default()), Error::::InsufficientBond, ); // 1000 is enough for nominator provide_did_to_user(3); - add_secondary_key(3, 4); assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(3), 500)); - assert_ok!(Staking::nominate(RuntimeOrigin::signed(4), vec![1])); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![1])); assert_noop!( - Staking::validate(RuntimeOrigin::signed(4), ValidatorPrefs::default()), + Staking::validate(RuntimeOrigin::signed(3), ValidatorPrefs::default()), Error::::InsufficientBond, ); // 1500 is enough for validator assert_add_permissioned_validator!(&3); assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(3), 500)); - assert_ok!(Staking::nominate(RuntimeOrigin::signed(4), vec![1])); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![1])); assert_ok!(Staking::validate( - RuntimeOrigin::signed(4), + RuntimeOrigin::signed(3), ValidatorPrefs::default() )); // Can't unbond anything as validator assert_noop!( - Staking::unbond(RuntimeOrigin::signed(4), 500), + Staking::unbond(RuntimeOrigin::signed(3), 500), Error::::InsufficientBond ); // Once they are a nominator, they can unbond 500 - assert_ok!(Staking::nominate(RuntimeOrigin::signed(4), vec![1])); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(4), 500)); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![1])); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(3), 500)); assert_noop!( - Staking::unbond(RuntimeOrigin::signed(4), 500), + Staking::unbond(RuntimeOrigin::signed(3), 500), Error::::InsufficientBond ); // Once they are chilled they can unbond everything - assert_ok!(Staking::chill(RuntimeOrigin::signed(4))); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(4), 1000)); + assert_ok!(Staking::chill(RuntimeOrigin::signed(3))); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(3), 1000)); }) } @@ -5555,7 +5621,7 @@ fn min_commission_works() { )); // account 10 controls the stash from account 11 assert_ok!(Staking::validate( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), ValidatorPrefs { commission: Perbill::from_percent(5), blocked: false @@ -5587,7 +5653,7 @@ fn min_commission_works() { // can't make it less than 10 now assert_noop!( Staking::validate( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), ValidatorPrefs { commission: Perbill::from_percent(5), blocked: false @@ -5598,7 +5664,7 @@ fn min_commission_works() { // can only change to higher. assert_ok!(Staking::validate( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), ValidatorPrefs { commission: Perbill::from_percent(10), blocked: false @@ -5606,7 +5672,7 @@ fn min_commission_works() { )); assert_ok!(Staking::validate( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), ValidatorPrefs { commission: Perbill::from_percent(15), blocked: false @@ -5622,14 +5688,14 @@ fn change_of_max_nominations() { .add_staker( IdentityId::from(61), 61, - 60, + 61, 10, StakerStatus::Nominator(vec![1]), ) .add_staker( IdentityId::from(71), 71, - 70, + 71, 10, StakerStatus::Nominator(vec![1, 2, 3]), ) @@ -5704,7 +5770,7 @@ fn change_of_max_nominations() { assert_eq!(Staking::electing_voters(None).unwrap().len(), 3 + 1); // now one of them can revive themselves by re-nominating to a proper value. - assert_ok!(Staking::nominate(RuntimeOrigin::signed(70), vec![1])); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(71), vec![1])); assert_eq!( Nominators::::iter() .map(|(k, n)| (k, n.targets.len())) @@ -5715,7 +5781,7 @@ fn change_of_max_nominations() { // or they can be chilled by any account. assert!(Nominators::::contains_key(101)); assert!(Nominators::::get(101).is_none()); - assert_ok!(Staking::chill_other(RuntimeOrigin::signed(71), 100)); + assert_ok!(Staking::chill_other(RuntimeOrigin::signed(71), 101)); assert!(!Nominators::::contains_key(101)); assert!(Nominators::::get(101).is_none()); }) @@ -5743,7 +5809,7 @@ mod sorted_list_provider { // ----------------------------------------------------------------- // when account 101 renominates - assert_ok!(Staking::nominate(RuntimeOrigin::signed(100), vec![41])); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(101), vec![41])); // then counts don't change assert_eq!(::VoterList::count(), pre_insert_voter_count); @@ -5777,7 +5843,7 @@ mod sorted_list_provider { // when account 11 re-validates assert_ok!(Staking::validate( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), Default::default() )); @@ -5803,12 +5869,8 @@ fn force_apply_min_commission_works() { }; let validators = || Validators::::iter().collect::>(); ExtBuilder::default().build_and_execute(|| { - assert_ok!(PalletValidators::set_commission_cap( - RuntimeOrigin::root(), - Perbill::from_percent(60) - )); - assert_ok!(Staking::validate(RuntimeOrigin::signed(30), prefs(10))); - assert_ok!(Staking::validate(RuntimeOrigin::signed(20), prefs(5))); + assert_ok!(Staking::validate(RuntimeOrigin::signed(31), prefs(10))); + assert_ok!(Staking::validate(RuntimeOrigin::signed(21), prefs(5))); // Given assert_eq!( @@ -6147,7 +6209,6 @@ fn pre_bonding_era_cannot_be_claimed() { // add a new candidate for being a validator. account 3 controlled by 4. assert_ok!(Staking::bond( RuntimeOrigin::signed(3), - 4, 1500, RewardDestination::Controller )); @@ -6157,7 +6218,7 @@ fn pre_bonding_era_cannot_be_claimed() { .try_into() .unwrap(); assert_eq!( - Staking::ledger(&4).unwrap(), + Staking::ledger(&3).unwrap(), StakingLedger { stash: 3, total: 1500, @@ -6173,7 +6234,7 @@ fn pre_bonding_era_cannot_be_claimed() { // claiming reward for last era in which validator was active works assert_ok!(Staking::payout_stakers( - RuntimeOrigin::signed(4), + RuntimeOrigin::signed(3), 3, current_era - 1 )); @@ -6183,7 +6244,7 @@ fn pre_bonding_era_cannot_be_claimed() { // cannot claim rewards for an era before bonding occured as it is // already marked as claimed. assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(4), 3, current_era - 2), + Staking::payout_stakers(RuntimeOrigin::signed(3), 3, current_era - 2), Error::::AlreadyClaimed.with_weight(err_weight) ); @@ -6193,7 +6254,7 @@ fn pre_bonding_era_cannot_be_claimed() { // make sure stakers still cannot claim rewards that they are not meant to assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(4), 3, current_era - 2), + Staking::payout_stakers(RuntimeOrigin::signed(3), 3, current_era - 2), Error::::NotController ); @@ -6211,7 +6272,7 @@ fn reducing_history_depth_abrupt() { let last_reward_era = current_era - 1; let start_reward_era = current_era - original_history_depth; - // put some money in (stash, controller)=(3,4),(5,6). + // put some money in (stash, controller)=(3,3),(5,5). for i in 3..7 { let _ = Balances::make_free_balance_be(&i, 2000); } @@ -6219,10 +6280,9 @@ fn reducing_history_depth_abrupt() { // start current era mock::start_active_era(current_era); - // add a new candidate for being a staker. account 3 controlled by 4. + // add a new candidate for being a staker. account 3 controlled by 3. assert_ok!(Staking::bond( RuntimeOrigin::signed(3), - 4, 1500, RewardDestination::Controller )); @@ -6234,7 +6294,7 @@ fn reducing_history_depth_abrupt() { .try_into() .unwrap(); assert_eq!( - Staking::ledger(&4).unwrap(), + Staking::ledger(&3).unwrap(), StakingLedger { stash: 3, total: 1500, @@ -6250,7 +6310,7 @@ fn reducing_history_depth_abrupt() { // claiming reward for last era in which validator was active works assert_ok!(Staking::payout_stakers( - RuntimeOrigin::signed(4), + RuntimeOrigin::signed(3), 3, current_era - 1 )); @@ -6264,14 +6324,13 @@ fn reducing_history_depth_abrupt() { HistoryDepth::set(history_depth); // claiming reward does not work anymore assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(4), 3, current_era - 1), + Staking::payout_stakers(RuntimeOrigin::signed(3), 3, current_era - 1), Error::::NotController ); // new stakers can still bond assert_ok!(Staking::bond( RuntimeOrigin::signed(5), - 6, 1200, RewardDestination::Controller )); @@ -6284,7 +6343,7 @@ fn reducing_history_depth_abrupt() { .try_into() .unwrap(); assert_eq!( - Staking::ledger(&6).unwrap(), + Staking::ledger(&5).unwrap(), StakingLedger { stash: 5, total: 1200, @@ -6309,14 +6368,13 @@ fn reducing_max_unlocking_chunks_abrupt() { start_active_era(10); assert_ok!(Staking::bond( RuntimeOrigin::signed(3), - 4, 300, RewardDestination::Staked )); - assert!(matches!(Staking::ledger(4), Some(_))); + assert!(matches!(Staking::ledger(3), Some(_))); // when staker unbonds - assert_ok!(Staking::unbond(RuntimeOrigin::signed(4), 20)); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(3), 20)); // then an unlocking chunk is added at `current_era + bonding_duration` // => 10 + 3 = 13 @@ -6325,7 +6383,7 @@ fn reducing_max_unlocking_chunks_abrupt() { value: 20 as Balance, era: 13 as EraIndex }]; - assert!(matches!(Staking::ledger(4), + assert!(matches!(Staking::ledger(3), Some(StakingLedger { unlocking, .. @@ -6333,13 +6391,13 @@ fn reducing_max_unlocking_chunks_abrupt() { // when staker unbonds at next era start_active_era(11); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(4), 50)); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(3), 50)); // then another unlock chunk is added let expected_unlocking: BoundedVec, MaxUnlockingChunks> = bounded_vec![ UnlockChunk { value: 20, era: 13 }, UnlockChunk { value: 50, era: 14 } ]; - assert!(matches!(Staking::ledger(4), + assert!(matches!(Staking::ledger(3), Some(StakingLedger { unlocking, .. @@ -6349,7 +6407,7 @@ fn reducing_max_unlocking_chunks_abrupt() { start_active_era(12); // then further unbonding not possible assert_noop!( - Staking::unbond(RuntimeOrigin::signed(4), 20), + Staking::unbond(RuntimeOrigin::signed(3), 20), Error::::NoMoreChunks ); @@ -6357,11 +6415,11 @@ fn reducing_max_unlocking_chunks_abrupt() { MaxUnlockingChunks::set(1); // then unbond, rebond ops are blocked with ledger in corrupt state assert_noop!( - Staking::unbond(RuntimeOrigin::signed(4), 20), + Staking::unbond(RuntimeOrigin::signed(3), 20), Error::::NotController ); assert_noop!( - Staking::rebond(RuntimeOrigin::signed(4), 100), + Staking::rebond(RuntimeOrigin::signed(3), 100), Error::::NotController ); @@ -6453,7 +6511,7 @@ fn set_min_commission_works_with_admin_origin() { // setting commission below min_commission fails assert_noop!( Staking::validate( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), ValidatorPrefs { commission: Perbill::from_percent(14), blocked: false @@ -6463,12 +6521,8 @@ fn set_min_commission_works_with_admin_origin() { ); // setting commission >= min_commission works - assert_ok!(PalletValidators::set_commission_cap( - RuntimeOrigin::root(), - Perbill::from_percent(60) - )); assert_ok!(Staking::validate( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), ValidatorPrefs { commission: Perbill::from_percent(15), blocked: false @@ -6489,13 +6543,13 @@ mod staking_interface { // without slash let _ = with_storage_layer::<(), _, _>(|| { // bond an account, can unstake - assert_eq!(Staking::bonded(&11), Some(10)); + assert_eq!(Staking::bonded(&11), Some(11)); assert_ok!(::force_unstake(11)); Err(DispatchError::from("revert")) }); // bond again and add a slash, still can unstake. - assert_eq!(Staking::bonded(&11), Some(10)); + assert_eq!(Staking::bonded(&11), Some(11)); add_slash(&11); assert_ok!(::force_unstake(11)); }); @@ -6512,20 +6566,46 @@ mod staking_interface { &[Perbill::from_percent(100)], ); - assert_eq!(Staking::bonded(&11), Some(10)); + assert_eq!(Staking::bonded(&11), Some(11)); assert_noop!( - Staking::withdraw_unbonded(RuntimeOrigin::signed(10), 0), + Staking::withdraw_unbonded(RuntimeOrigin::signed(11), 0), Error::::IncorrectSlashingSpans ); let num_slashing_spans = Staking::slashing_spans(&11).map_or(0, |s| s.iter().count()); assert_ok!(Staking::withdraw_unbonded( - RuntimeOrigin::signed(10), + RuntimeOrigin::signed(11), num_slashing_spans as u32 )); }); } + + #[test] + fn status() { + ExtBuilder::default().build_and_execute(|| { + // stash of a validator is identified as a validator + assert_eq!(Staking::status(&11).unwrap(), StakerStatus::Validator); + // .. but not the controller. + assert!(Staking::status(&10).is_err()); + + // stash of nominator is identified as a nominator + assert_eq!( + Staking::status(&101).unwrap(), + StakerStatus::Nominator(vec![11, 21]) + ); + // .. but not the controller. + assert!(Staking::status(&100).is_err()); + + // stash of chilled is identified as a chilled + assert_eq!(Staking::status(&41).unwrap(), StakerStatus::Idle); + // .. but not the controller. + assert!(Staking::status(&40).is_err()); + + // random other account. + assert!(Staking::status(&42).is_err()); + }) + } } // Polymesh change @@ -6585,8 +6665,7 @@ fn create_on_offence_now(offender: u64) { fn add_nominator_without_cdd() { ExtBuilder::default().nominate(true).build_and_execute(|| { let alice_acc = 500; - let alice_controller_acc = 501; - let alice_controller_signed = RuntimeOrigin::signed(alice_controller_acc); + let alice_controller_signed = RuntimeOrigin::signed(alice_acc); let (_, _) = make_account_with_balance(alice_acc, 1_000_000, Some(Utc::now().timestamp() as u64)); @@ -6596,7 +6675,6 @@ fn add_nominator_without_cdd() { assert_ok!(Staking::bond( RuntimeOrigin::signed(alice_acc.clone()), - alice_controller_acc, 1000, RewardDestination::Stash )); @@ -6611,13 +6689,11 @@ fn add_nominator_without_cdd() { fn add_valid_nominator_with_multiple_claims() { ExtBuilder::default().nominate(true).build_and_execute(|| { let alice_acc = 500; - let alice_controller_acc = 501; - let alice_controller_signed = RuntimeOrigin::signed(alice_controller_acc); + let alice_controller_signed = RuntimeOrigin::signed(alice_acc); let (_, _) = make_account_with_balance(alice_acc, 1_000_000, None); assert_ok!(Staking::bond( Origin::signed(alice_acc.clone()), - alice_controller_acc, 1000, RewardDestination::Stash )); @@ -6635,8 +6711,7 @@ fn validate_nominators_with_valid_cdd() { .min_nominator_bond(0) .build_and_execute(|| { let alice_acc = 500; - let alice_controller_acc = 501; - let alice_controller_signed = RuntimeOrigin::signed(alice_controller_acc); + let alice_controller_signed = RuntimeOrigin::signed(alice_acc); let (_, _) = make_account_with_balance( alice_acc, 1_000_000, @@ -6647,8 +6722,7 @@ fn validate_nominators_with_valid_cdd() { add_trusted_cdd_provider(claim_issuer_1_did); let eve_acc = 700; - let eve_controller_acc = 701; - let eve_controller_signed = Origin::signed(eve_controller_acc); + let eve_controller_signed = Origin::signed(eve_acc); let (_, _) = make_account_with_balance( eve_acc, 1_000_000, @@ -6657,13 +6731,11 @@ fn validate_nominators_with_valid_cdd() { assert_ok!(Staking::bond( RuntimeOrigin::signed(alice_acc.clone()), - alice_controller_acc, 1000, RewardDestination::Stash )); assert_ok!(Staking::bond( Origin::signed(eve_acc), - eve_controller_acc, 1000, RewardDestination::Stash )); @@ -6681,13 +6753,13 @@ fn validate_nominators_with_valid_cdd() { fn should_initialize_stakers_and_validators() { // Verifies initial conditions of mock ExtBuilder::default().build_and_execute(|| { - assert_eq!(Staking::bonded(&11), Some(10)); // Account 11 is stashed and locked, and account 10 is the controller - assert_eq!(Staking::bonded(&21), Some(20)); // Account 21 is stashed and locked, and account 20 is the controller + assert_eq!(Staking::bonded(&11), Some(11)); // Account 11 is stashed and locked, and account 10 is the controller + assert_eq!(Staking::bonded(&21), Some(21)); // Account 21 is stashed and locked, and account 20 is the controller assert_eq!(Staking::bonded(&500), None); // Account 1 is not a stashed // Account 10 controls the stash from account 11, which is 100 * balance_factor units assert_eq!( - Staking::ledger(&10), + Staking::ledger(&11), Some(StakingLedger { stash: 11, total: 1000, @@ -6698,7 +6770,7 @@ fn should_initialize_stakers_and_validators() { ); // Account 20 controls the stash from account 21, which is 200 * balance_factor units assert_eq!( - Staking::ledger(&20), + Staking::ledger(&21), Some(StakingLedger { stash: 21, total: 1000, @@ -6775,12 +6847,7 @@ fn voting_for_pip_overlays_with_staking() { }; // Bond all but 10. - assert_ok!(Staking::bond( - alice_signer, - alice_acc, - 90, - RewardDestination::Stash - )); + assert_ok!(Staking::bond(alice_signer, 90, RewardDestination::Stash)); // OK, because we're overlaying with 90 tokens already locked. assert_ok!(alice_proposal(50)); // OK, because we're still overlaying, but also increasing it by 10. @@ -6931,7 +6998,6 @@ fn check_slashing_for_different_switches() { // Add nominator. // add a new candidate for being a nominator. account 3 controlled by 4. bond_nominator_with_expiry(3, 2000, 99999999, vec![11, 21]); - add_secondary_key(4, 3); mock::start_active_era(2); @@ -6944,7 +7010,7 @@ fn check_slashing_for_different_switches() { // Balance of account 11 [validator] get slashed by 10% i.e 10 % of 1000 (total staked). assert_eq!(Balances::free_balance(11), 900); // Balance of account 4 [nominator] get slashed by 10% i.e 10 % of 2000 (total staked). - assert_eq!(Balances::free_balance(4), 1800); + assert_eq!(Balances::free_balance(3), 1800); // Balance of account 21 [validator] get slashed by 10% i.e 10 % of 1000 (total staked). assert_eq!(Balances::free_balance(21), 1900); }) @@ -6956,21 +7022,20 @@ fn chill_from_governance() { .validator_count(8) .minimum_validator_count(1) .build_and_execute(|| { - // 50 stash and 51 controller (corrected) - bond(50, 51, 500000); + // 50 stash + bond(50, 500000); let entity_id = mock::Identity::get_identity(&50).unwrap(); // Add a new validator successfully. - bond_validator_with_intended_count(50, 51, 500000, Some(2)); + bond_validator_with_intended_count(50, 500000, Some(2)); assert_permissioned_identity_prefs!(entity_id, 2, 1); // Add other stash and controller to the same did. add_secondary_key(50, 60); - add_secondary_key(50, 61); // Validate one more validator from the same entity. - // 60 stash and 61 controller. - bond_validator(60, 61, 500000); + // 60 stash + bond_validator(60, 500000); assert_permissioned_identity_prefs!(entity_id, 2, 2); // Removes 50 and 60 from being validators @@ -6990,16 +7055,15 @@ fn chill_from_governance() { ValidatorsError::::ValidatorNotFound ); - // 70 stash and 71 controller - bond(70, 71, 500000); + // 70 stash + bond(70, 500000); let entity_id_2 = mock::Identity::get_identity(&70).unwrap(); // Add a new validator successfully. - bond_validator_with_intended_count(70, 71, 500000, Some(2)); + bond_validator_with_intended_count(70, 500000, Some(2)); // Add other stash and controller to the same did. add_secondary_key(70, 80); - add_secondary_key(70, 81); // Check keys that aren't joined with identity gives error assert_noop!( @@ -7029,21 +7093,20 @@ fn test_running_count() { .validator_count(8) .minimum_validator_count(1) .build_and_execute(|| { - // 50 stash and 51 controller - bond(50, 51, 500000); + // 50 stash + bond(50, 500000); let entity_id = mock::Identity::get_identity(&50).unwrap(); // Add a new validator successfully. - bond_validator_with_intended_count(50, 51, 500000, Some(2)); + bond_validator_with_intended_count(50, 500000, Some(2)); assert_permissioned_identity_prefs!(entity_id, 2, 1); // Add other stash and controller to the same did. add_secondary_key(50, 60); - add_secondary_key(50, 61); // Validate one more validator from the same entity. - // 60 stash and 61 controller. - bond_validator(60, 61, 500000); + // 60 stash + bond_validator(60, 500000); assert_permissioned_identity_prefs!(entity_id, 2, 2); // Ensure that the validator's stash key can't be removed from it's identity. @@ -7053,7 +7116,7 @@ fn test_running_count() { ); // chill to remove the validator - assert_ok!(Staking::chill(Origin::signed(61))); + assert_ok!(Staking::chill(Origin::signed(60))); // remove validator's stash key from it's identity assert_ok!(mock::Identity::remove_secondary_keys( @@ -7072,30 +7135,30 @@ fn validator_unbonding() { MinValidatorBond::::put(50_000); // Add a new validator successfully. - bond_validator_with_intended_count(50, 51, 500_000, Some(2)); + bond_validator_with_intended_count(50, 500_000, Some(2)); let entity_id = mock::Identity::get_identity(&50).unwrap(); assert_permissioned_identity_prefs!(entity_id, 2, 1); // Check that an error is given when unbonding beyond the minimum bond threshold as a validator assert_noop!( - Staking::unbond(Origin::signed(51), 480_000), + Staking::unbond(Origin::signed(50), 480_000), Error::::InsufficientBond ); // Check that validator can unbond once it doesn't go below the minimum bond threshold - assert_ok!(Staking::unbond(Origin::signed(51), 80_000)); - assert_ok!(Staking::unbond(Origin::signed(51), 80_000)); - assert_ok!(Staking::unbond(Origin::signed(51), 80_000)); - assert_ok!(Staking::unbond(Origin::signed(51), 80_000)); + assert_ok!(Staking::unbond(Origin::signed(50), 80_000)); + assert_ok!(Staking::unbond(Origin::signed(50), 80_000)); + assert_ok!(Staking::unbond(Origin::signed(50), 80_000)); + assert_ok!(Staking::unbond(Origin::signed(50), 80_000)); // Check the remaining bond amount can't all be unbond assert_noop!( - Staking::unbond(Origin::signed(51), 180_000), + Staking::unbond(Origin::signed(50), 180_000), Error::::InsufficientBond ); // Chill validator - assert_ok!(Staking::chill(Origin::signed(51))); + assert_ok!(Staking::chill(Origin::signed(50))); // After chilling validator checks that entity can unbond successfully - assert_ok!(Staking::unbond(Origin::signed(51), 180_000)); + assert_ok!(Staking::unbond(Origin::signed(50), 180_000)); }); } diff --git a/pallets/runtime/tests/src/staking_extra_tests.rs b/pallets/runtime/tests/src/staking_extra_tests.rs index c16837e692..dd026f4c04 100644 --- a/pallets/runtime/tests/src/staking_extra_tests.rs +++ b/pallets/runtime/tests/src/staking_extra_tests.rs @@ -38,7 +38,6 @@ fn updating_controller() { assert_ok!(pallet_staking::Pallet::::bond( alice.origin(), - sp_runtime::MultiAddress::Id(alice.acc()), 10_000_000, pallet_staking::RewardDestination::Controller )); @@ -80,10 +79,5 @@ fn updating_controller() { None ) ); - - assert_ok!(pallet_staking::Pallet::::set_controller( - alice.origin(), - sp_runtime::MultiAddress::Id(eve.acc()), - )); }); } diff --git a/pallets/validators/Cargo.toml b/pallets/validators/Cargo.toml index b42c613902..942f43ec88 100644 --- a/pallets/validators/Cargo.toml +++ b/pallets/validators/Cargo.toml @@ -46,6 +46,7 @@ sp-tracing = { workspace = true } default = ["std"] no_std = [] std = [ + "frame-benchmarking?/std", "polymesh-primitives/std", "serde", "codec/std", @@ -66,9 +67,11 @@ std = [ "rand_chacha", ] runtime-benchmarks = [ - "frame-benchmarking", - "pallet-staking/runtime-benchmarks", - "pallet-identity/runtime-benchmarks", + "frame-benchmarking/runtime-benchmarks", + "frame-election-provider-support/runtime-benchmarks", "rand_chacha", + "sp-staking/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", ] try-runtime = [] diff --git a/pallets/validators/src/benchmarking.rs b/pallets/validators/src/benchmarking.rs index 9136663675..ee0a6e0a1e 100644 --- a/pallets/validators/src/benchmarking.rs +++ b/pallets/validators/src/benchmarking.rs @@ -16,7 +16,7 @@ use super::*; use testing_utils::*; -use frame_support::traits::{Currency, Get}; +use frame_support::traits::Currency; use sp_runtime::{ traits::{One, StaticLookup}, Perbill, Saturating, @@ -30,12 +30,12 @@ pub use frame_benchmarking::v1::{ use frame_system::RawOrigin; use pallet_staking::{ - CurrentEra, EraRewardPoints, ErasRewardPoints, ErasValidatorReward, RewardDestination, + CurrentEra, EraRewardPoints, ErasRewardPoints, ErasValidatorReward, Nominators, + RewardDestination, }; use crate::types::SlashingSwitch; use pallet_identity::benchmarking::UserBuilder; -use polymesh_primitives::identity_claim::ClaimType; use polymesh_primitives::IdentityId; use polymesh_primitives::Permissions; @@ -49,7 +49,8 @@ pub fn get_did(who: &T::AccountId) -> IdentityId { pub fn create_validator_with_nominators( n: u32, upper_bound: u32, - dead: bool, + dead_controller: bool, + unique_controller: bool, destination: RewardDestination, ) -> Result<(T::AccountId, Vec<(T::AccountId, T::AccountId)>), &'static str> { // Clean up any existing state. @@ -57,7 +58,12 @@ pub fn create_validator_with_nominators( let mut points_total = 0; let mut points_individual = Vec::new(); - let (v_stash, v_controller) = create_stash_controller::(0, 100, destination.clone())?; + let (v_stash, v_controller) = if unique_controller { + create_unique_stash_controller::(0, 100, destination.clone(), false)? + } else { + create_stash_controller::(0, 100, destination.clone())? + }; + let validator_prefs = ValidatorPrefs { commission: Perbill::from_percent(50), ..Default::default() @@ -74,10 +80,10 @@ pub fn create_validator_with_nominators( // Give the validator n nominators, but keep total users in the system the same. for i in 0..upper_bound { - let (n_stash, n_controller) = if !dead { + let (n_stash, n_controller) = if !dead_controller { create_stash_controller::(u32::MAX - i, 100, destination.clone())? } else { - create_stash_and_dead_controller::(u32::MAX - i, 100, destination.clone())? + create_unique_stash_controller::(u32::MAX - i, 100, destination.clone(), true)? }; if i < n { StakingPallet::::nominate( @@ -187,7 +193,6 @@ benchmarks! { let mut signatories = Vec::new(); for x in 0 .. s { let key = UserBuilder::::default().seed(x).balance(10_000u32).build("key").account(); - let key_lookup = T::Lookup::unlookup(key.clone()); let _ = T::Currency::issue(10_000u32.into()); let did = get_did::(&validator); @@ -198,7 +203,6 @@ benchmarks! { ); StakingPallet::::bond( RawOrigin::Signed(key.clone()).into(), - key_lookup, 2_000_000u32.into(), RewardDestination::Staked ) @@ -241,37 +245,4 @@ benchmarks! { ); }); } - - validate_cdd_expiry_nominators { - let n in 1 .. T::MaxNominations::get(); - - clear_validators_and_nominators::(); - - let (validator, nominators) = create_validator_with_nominators::( - n, - T::MaxNominatorRewardedPerValidator::get() as u32, - true, - RewardDestination::Controller, - )?; - - for nominator in &nominators { - let did = get_did::(&nominator.0); - let claim_first = pallet_identity::Claim1stKey { - target: did, - claim_type: ClaimType::CustomerDueDiligence - }; - let _ = pallet_identity::Claims::::clear_prefix(claim_first, 1, None); - } - - let nominators: Vec = nominators.iter().map(|x| x.0.clone()).collect(); - for nominator in &nominators { - assert!(Nominators::::contains_key(nominator)); - } - - }: _(RawOrigin::Root, nominators.clone()) - verify { - for nominator in nominators { - assert!(!Nominators::::contains_key(nominator)); - } - } } diff --git a/pallets/validators/src/lib.rs b/pallets/validators/src/lib.rs index 6c85ac0ea0..8a374f04ee 100644 --- a/pallets/validators/src/lib.rs +++ b/pallets/validators/src/lib.rs @@ -50,8 +50,8 @@ use polymesh_primitives::{IdentityId, GC_DID}; pub(crate) use pallet_staking::{ ActiveEraInfo, BalanceOf, Bonded, Config as StakingConfig, EraPayout, Error as StakingError, - Ledger, MinValidatorBond, Nominators, Pallet as StakingPallet, SessionInterface as _, - ValidatorCount, ValidatorPrefs, Validators, WeightInfo as _, + Ledger, MinValidatorBond, Pallet as StakingPallet, SessionInterface as _, ValidatorCount, + ValidatorPrefs, Validators, WeightInfo as _, }; use types::{PermissionedIdentityPrefs, SlashingSwitch}; @@ -77,7 +77,6 @@ pub trait WeightInfo { fn update_permissioned_validator_intended_count() -> Weight; fn chill_from_governance(n: u32) -> Weight; fn set_commission_cap(n: u32) -> Weight; - fn validate_cdd_expiry_nominators(n: u32) -> Weight; } mod migrations { @@ -165,7 +164,11 @@ pub mod pallet { type PalletsOrigin: From>; /// To schedule the rewards for the stakers after the end of era. - type RewardScheduler: Anon, ::Call, Self::PalletsOrigin>; + type RewardScheduler: Anon< + BlockNumberFor, + ::Call, + Self::PalletsOrigin, + >; } /// Entities that are allowed to run operator/validator nodes. @@ -261,8 +264,6 @@ pub mod pallet { StashIdentityDoesNotExist, /// Validator's stash identity is not permissioned. StashIdentityNotPermissioned, - /// Nominator stash has not gone through CDD. - StashIdentityNotCDDed, /// Permissioned validator already exists. IdentityIsAlreadyPermissioned, /// Identity has not gone throught CDD. @@ -317,21 +318,7 @@ pub mod pallet { Self::base_remove_permissioned_validator(origin, identity) } - /// Validate the nominators CDD expiry time. - /// - /// If an account from a given set of address is nominating then check the CDD expiry time - /// of it and if it is expired then the account should be unbonded and removed from the - /// nominating process. #[pallet::call_index(2)] - #[pallet::weight(::WeightInfo::validate_cdd_expiry_nominators(targets.len() as u32))] - pub fn validate_cdd_expiry_nominators( - origin: OriginFor, - targets: Vec, - ) -> DispatchResult { - Self::base_validate_cdd_expiry_nominators(origin, targets) - } - - #[pallet::call_index(3)] #[pallet::weight(::WeightInfo::payout_stakers_alive_staked( T::MaxNominatorRewardedPerValidator::get() ))] @@ -344,7 +331,7 @@ pub mod pallet { } /// Switch slashing status on the basis of given `slashing_switch`. Can only be called by root. - #[pallet::call_index(4)] + #[pallet::call_index(3)] #[pallet::weight(::WeightInfo::change_slashing_allowed_for())] pub fn change_slashing_allowed_for( origin: OriginFor, @@ -354,7 +341,7 @@ pub mod pallet { } /// Sets the intended count to `new_intended_count` for the given `identity`. - #[pallet::call_index(5)] + #[pallet::call_index(4)] #[pallet::weight(::WeightInfo::update_permissioned_validator_intended_count())] pub fn update_permissioned_validator_intended_count( origin: OriginFor, @@ -369,7 +356,7 @@ pub mod pallet { } /// Governance council forcefully chills a validator. Effects will be felt at the beginning of the next era. - #[pallet::call_index(6)] + #[pallet::call_index(5)] #[pallet::weight(::WeightInfo::chill_from_governance(stash_keys.len() as u32))] pub fn chill_from_governance( origin: OriginFor, @@ -384,7 +371,7 @@ pub mod pallet { /// /// # Arguments /// * `new_cap` the new commission cap. - #[pallet::call_index(7)] + #[pallet::call_index(6)] #[pallet::weight(::WeightInfo::set_commission_cap(150))] pub fn set_commission_cap(origin: OriginFor, new_cap: Perbill) -> DispatchResult { Self::base_set_commission_cap(origin, new_cap) diff --git a/pallets/validators/src/permissioned.rs b/pallets/validators/src/permissioned.rs index 17fc3355cd..debbd85e56 100644 --- a/pallets/validators/src/permissioned.rs +++ b/pallets/validators/src/permissioned.rs @@ -8,14 +8,11 @@ use frame_support::traits::schedule::Anon; use frame_support::traits::schedule::{DispatchTime, HIGHEST_PRIORITY}; use frame_support::traits::Currency; -use polymesh_primitives::constants::GC_PALLET_ID; use polymesh_primitives::IdentityId; use polymesh_primitives::GC_DID; #[cfg(feature = "runtime-benchmarks")] use polymesh_primitives::{traits::IdentityFnTrait, AuthorizationData, Permissions, Signatory}; -use sp_runtime::traits::AccountIdConversion; - use pallet_staking::{PermissionedStaking, WhoToSlash}; use crate::types::{PermissionedIdentityPrefs, SlashingSwitch}; @@ -282,56 +279,6 @@ impl Pallet { Ok(()) } - pub(crate) fn base_validate_cdd_expiry_nominators( - origin: OriginFor, - targets: Vec, - ) -> DispatchResult { - ensure_root(origin.clone())?; - - ensure!(!targets.is_empty(), StakingError::::EmptyTargets); - - let mut expired_nominators = Vec::new(); - // Iterate provided list of accountIds (These accountIds should be stash type account). - for target in targets - .iter() - // Nominator must be vouching for someone. - .filter(|target| Nominators::::get(target).is_some()) - // Access the DIDs of the nominators whose CDDs have expired. - .filter(|target| { - // Fetch all the claim values provided by the trusted service providers - // There is a possibility that nominator will have more than one claim for the same key, - // So we iterate all of them and if any one of the claim value doesn't expire then nominator posses - // valid CDD otherwise it will be removed from the pool of the nominators. - // If the target has no DID, it's also removed. - pallet_identity::Pallet::::get_identity(&target) - .filter(|did| pallet_identity::Pallet::::has_valid_cdd(*did)) - .is_none() - }) - { - // Un-bonding the balance that bonded with the controller account of a Stash account - // This unbonded amount only be accessible after completion of the BondingDuration - // Controller account need to call the dispatchable function `withdraw_unbond` to withdraw fund. - - let controller = Bonded::::get(target).ok_or(StakingError::::NotStash)?; - let mut ledger = - Ledger::::get(&controller).ok_or(StakingError::::NotController)?; - let active_balance = ledger.active; - if ledger.unlocking.len() < T::MaxUnlockingChunks::get() as usize { - StakingPallet::::unbond_balance(controller, &mut ledger, active_balance)?; - - expired_nominators.push(target.clone()); - // Free the nominator from the valid nominator list - >::remove(target); - } - } - Pallet::::deposit_event(Event::::InvalidatedNominators { - governance_councill_did: GC_DID, - governance_councill_account: GC_PALLET_ID.into_account_truncating(), - expired_nominators: expired_nominators, - }); - Ok(()) - } - pub(crate) fn base_payout_stakers_by_system( origin: OriginFor, validator_stash: T::AccountId, diff --git a/pallets/weights/src/pallet_validators.rs b/pallets/weights/src/pallet_validators.rs index c5a39d5546..2c291c5cac 100644 --- a/pallets/weights/src/pallet_validators.rs +++ b/pallets/weights/src/pallet_validators.rs @@ -133,43 +133,4 @@ impl pallet_validators::WeightInfo for SubstrateWeight { .saturating_add(DbWeight::get().writes(2)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(m.into()))) } - // Storage: Staking Nominators (r:16 w:16) - // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) - // Storage: Identity KeyRecords (r:32 w:0) - // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: Instance2Group ActiveMembers (r:1 w:0) - // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:16 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: Identity ParentDid (r:16 w:0) - // Proof Skipped: Identity ParentDid (max_values: None, max_size: None, mode: Measured) - // Storage: Staking Bonded (r:16 w:0) - // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) - // Storage: Staking Ledger (r:16 w:16) - // Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) - // Storage: Staking MinNominatorBond (r:1 w:0) - // Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) - // Storage: Staking CurrentEra (r:1 w:0) - // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) - // Storage: Balances Locks (r:16 w:16) - // Proof Skipped: Balances Locks (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:16 w:16) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - // Storage: Identity IsDidFrozen (r:16 w:0) - // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) - // Storage: Staking CounterForNominators (r:1 w:1) - // Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) - /// The range of component `n` is `[1, 16]`. - fn validate_cdd_expiry_nominators(n: u32) -> Weight { - // Minimum execution time: 211_797 nanoseconds. - Weight::from_parts(153_423_017, 0) - // Standard Error: 176_413 - .saturating_add(Weight::from_parts(82_196_945, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(5)) - .saturating_add(DbWeight::get().reads((10_u64).saturating_mul(n.into()))) - .saturating_add(DbWeight::get().writes(1)) - .saturating_add(DbWeight::get().writes((4_u64).saturating_mul(n.into()))) - } } diff --git a/scripts/cli/polymesh-meta.json b/scripts/cli/polymesh-meta.json index 63b87897fd..8660abafdc 100644 --- a/scripts/cli/polymesh-meta.json +++ b/scripts/cli/polymesh-meta.json @@ -1 +1 @@ -{"jsonrpc":"2.0","result":"0x6d6574610e250c000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500141064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974732062616c616e6365732c4163636f756e744461746100001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000200c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6524010c75363400012870726f6f665f73697a6524010c75363400002400000628002800000506002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c01147068617365bd04011450686173650001146576656e744c010445000118746f70696373c10401185665633c543e00004c0c60706f6c796d6573685f72756e74696d655f646576656c6f701c72756e74696d653052756e74696d654576656e740001ac1853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e6469636573040074017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0003002042616c616e636573040078017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404009001a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e000600204964656e74697479040094017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e0007004c4364645365727669636550726f76696465727304003d0101d470616c6c65745f67726f75703a3a4576656e743c52756e74696d652c2070616c6c65745f67726f75703a3a496e7374616e6365323e00080044506f6c796d657368436f6d6d69747465650400490101f470616c6c65745f636f6d6d69747465653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6d6d69747465653a3a496e7374616e6365313e0009004c436f6d6d69747465654d656d6265727368697004005d0101d470616c6c65745f67726f75703a3a4576656e743c52756e74696d652c2070616c6c65745f67726f75703a3a496e7374616e6365313e000a0048546563686e6963616c436f6d6d69747465650400650101f470616c6c65745f636f6d6d69747465653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6d6d69747465653a3a496e7374616e6365333e000b0070546563686e6963616c436f6d6d69747465654d656d6265727368697004006d0101d470616c6c65745f67726f75703a3a4576656e743c52756e74696d652c2070616c6c65745f67726f75703a3a496e7374616e6365333e000c004055706772616465436f6d6d69747465650400750101f470616c6c65745f636f6d6d69747465653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6d6d69747465653a3a496e7374616e6365343e000d006855706772616465436f6d6d69747465654d656d6265727368697004007d0101d470616c6c65745f67726f75703a3a4576656e743c52756e74696d652c2070616c6c65745f67726f75703a3a496e7374616e6365343e000e00204d756c746953696704008501017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e000f001c5374616b696e6704008d01017870616c6c65745f7374616b696e673a3a4576656e743c52756e74696d653e001100204f6666656e6365730400a501015870616c6c65745f6f6666656e6365733a3a4576656e740012001c53657373696f6e0400a901015470616c6c65745f73657373696f6e3a3a4576656e740013001c4772616e6470610400ad01015470616c6c65745f6772616e6470613a3a4576656e7400150020496d4f6e6c696e650400c101018070616c6c65745f696d5f6f6e6c696e653a3a4576656e743c52756e74696d653e001700105375646f0400e501016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e0019001441737365740400e901017070616c6c65745f61737365743a3a4576656e743c52756e74696d653e001a004c4361706974616c446973747269627574696f6e04009102018870616c6c65745f6361706974616c5f646973747269627574696f6e3a3a4576656e74001b0028436865636b706f696e740400a902016070616c6c65745f636865636b706f696e743a3a4576656e74001c0044436f6d706c69616e63654d616e616765720400c102018070616c6c65745f636f6d706c69616e63655f6d616e616765723a3a4576656e74001d003c436f72706f72617465416374696f6e0400f502017c70616c6c65745f636f72706f726174655f616374696f6e733a3a4576656e74001e003c436f72706f7261746542616c6c6f7404002903017870616c6c65745f636f72706f726174655f62616c6c6f743a3a4576656e74001f00105069707304006103016c70616c6c65745f706970733a3a4576656e743c52756e74696d653e00210024506f7274666f6c696f0400a103015c70616c6c65745f706f7274666f6c696f3a3a4576656e740022002c50726f746f636f6c4665650400c103018c70616c6c65745f70726f746f636f6c5f6665653a3a4576656e743c52756e74696d653e002300245363686564756c65720400c903018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e00240028536574746c656d656e740400d503018470616c6c65745f736574746c656d656e743a3a4576656e743c52756e74696d653e002500285374617469737469637304000504016070616c6c65745f737461746973746963733a3a4576656e740026000c53746f04004504016870616c6c65745f73746f3a3a4576656e743c52756e74696d653e00270020547265617375727904006104017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0028001c5574696c69747904006504017870616c6c65745f7574696c6974793a3a4576656e743c52756e74696d653e002900104261736504007504014870616c6c65745f626173653a3a4576656e74002a003845787465726e616c4167656e747304007d04017470616c6c65745f65787465726e616c5f6167656e74733a3a4576656e74002b001c52656c6179657204008104017870616c6c65745f72656c617965723a3a4576656e743c52756e74696d653e002c0024436f6e74726163747304008504018070616c6c65745f636f6e7472616374733a3a4576656e743c52756e74696d653e002e0044506f6c796d657368436f6e747261637473040089040188706f6c796d6573685f636f6e7472616374733a3a4576656e743c52756e74696d653e002f0020507265696d61676504009904017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e0030000c4e667404009d04014470616c6c65745f6e66743a3a4576656e7400310068456c656374696f6e50726f76696465724d756c746950686173650400a50401d070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a4576656e743c52756e74696d653e00320024546573745574696c730400b904018470616c6c65745f746573745f7574696c733a3a4576656e743c52756e74696d653e00c80000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874200118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f72746564000600006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909781064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974732062616c616e636573205261774576656e7404244163636f756e7449640100011c1c456e646f7765640c007c01484f7074696f6e3c4964656e7469747949643e00000001244163636f756e744964000018011c42616c616e63650000043101416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e205c5b6469642c206163636f756e742c20667265655f62616c616e63655d205472616e7366657218007c01484f7074696f6e3c4964656e7469747949643e00000001244163636f756e74496400007c01484f7074696f6e3c4964656e7469747949643e00000001244163636f756e744964000018011c42616c616e636500008401304f7074696f6e3c4d656d6f3e000104f45472616e7366657220737563636565646564202866726f6d5f6469642c2066726f6d2c20746f5f6469642c20746f2c2076616c75652c206d656d6f292e2842616c616e636553657410008001284964656e74697479496400000001244163636f756e744964000018011c42616c616e6365000018011c42616c616e6365000204d4412062616c616e6365207761732073657420627920726f6f7420286469642c2077686f2c20667265652c207265736572766564292e504163636f756e7442616c616e63654275726e65640c008001284964656e74697479496400000001244163636f756e744964000018011c42616c616e63650003083d01546865206163636f756e7420616e642074686520616d6f756e74206f6620756e6c6f636b65642062616c616e6365206f662074686174206163636f756e74207468617420776173206275726e65642e8c2863616c6c65722049642c2063616c6c6572206163636f756e742c20616d6f756e742920526573657276656408000001244163636f756e744964000018011c42616c616e63650004041901536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e205c5b77686f2c2076616c75655d28556e726573657276656408000001244163636f756e744964000018011c42616c616e63650005042101536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e205c5b77686f2c2076616c75655d4852657365727665526570617472696174656410000001244163636f756e74496400000001244163636f756e744964000018011c42616c616e636500008c011853746174757300060c4d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652ea05c5b66726f6d2c20746f2c2062616c616e63652c2064657374696e6174696f6e5f7374617475735d085c4576656e747320666f722074686973206d6f64756c652e007c04184f7074696f6e04045401800108104e6f6e6500000010536f6d650400800000010000800c4c706f6c796d6573685f7072696d6974697665732c6964656e746974795f6964284964656e746974794964000004000401385b75383b20555549445f4c454e5d00008404184f7074696f6e04045401880108104e6f6e6500000010536f6d65040088000001000088084c706f6c796d6573685f7072696d697469766573104d656d6f000004000401205b75383b2033325d00008c14346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e636553746174757300010810467265650000002052657365727665640001000090086870616c6c65745f7472616e73616374696f6e5f7061796d656e74205261774576656e74081c42616c616e63650118244163636f756e74496401000104485472616e73616374696f6e466565506169640c010c77686f0001244163636f756e74496400012861637475616c5f66656518011c42616c616e636500010c74697018011c42616c616e6365000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e085c4576656e747320666f722074686973206d6f64756c652e00941064706f6c796d6573685f636f6d6d6f6e5f7574696c697469657318747261697473206964656e74697479205261774576656e7408244163636f756e7449640100184d6f6d656e740128015428446964437265617465640c008001284964656e74697479496400000001244163636f756e74496400009801705665633c5365636f6e646172794b65793c4163636f756e7449643e3e00000c444964656e7469747920637265617465642e0088284449442c207072696d617279206b65792c207365636f6e64617279206b65797329485365636f6e646172794b657973416464656408008001284964656e74697479496400009801705665633c5365636f6e646172794b65793c4163636f756e7449643e3e00010c845365636f6e64617279206b65797320616464656420746f206964656e746974792e003c284449442c206e6577206b65797329505365636f6e646172794b65797352656d6f76656408008001284964656e7469747949640000fc01385665633c4163636f756e7449643e00020c945365636f6e64617279206b6579732072656d6f7665642066726f6d206964656e746974792e0080284449442c20746865206b657973207468617420676f742072656d6f76656429605365636f6e646172794b65794c6566744964656e7469747908008001284964656e74697479496400000001244163636f756e74496400030c9041207365636f6e64617279206b6579206c656674207468656972206964656e746974792e0050284449442c207365636f6e64617279206b657929785365636f6e646172794b65795065726d697373696f6e735570646174656410008001284964656e74697479496400000001244163636f756e7449640000a0012c5065726d697373696f6e730000a0012c5065726d697373696f6e7300040c885365636f6e64617279206b6579207065726d697373696f6e7320757064617465642e000d01284449442c2075706461746564207365636f6e64617279206b65792c2070726576696f7573207065726d697373696f6e732c206e6577207065726d697373696f6e7329445072696d6172794b6579557064617465640c008001284964656e74697479496400000001244163636f756e74496400000001244163636f756e74496400050c805072696d617279206b6579206f66206964656e74697479206368616e6765642e00a4284449442c206f6c64207072696d617279206b6579206163636f756e742049442c206e65772049442928436c61696d416464656408008001284964656e7469747949640000010101344964656e74697479436c61696d00060c60436c61696d20616464656420746f206964656e746974792e0030284449442c20636c61696d2930436c61696d5265766f6b656408008001284964656e7469747949640000010101344964656e74697479436c61696d00070c70436c61696d207265766f6b65642066726f6d206964656e746974792e0030284449442c20636c61696d294841737365744469645265676973746572656408008001284964656e7469747949640000210101185469636b657200080c7041737365742773206964656e7469747920726567697374657265642e004c284173736574204449442c207469636b65722948417574686f72697a6174696f6e416464656418008001284964656e74697479496400007c01484f7074696f6e3c4964656e7469747949643e0000290101444f7074696f6e3c4163636f756e7449643e000028010c75363400002d010170417574686f72697a6174696f6e446174613c4163636f756e7449643e0000050101384f7074696f6e3c4d6f6d656e743e00090c604e657720617574686f72697a6174696f6e2061646465642e00310128617574686f72697365645f62792c207461726765745f6469642c207461726765745f6b65792c20617574685f69642c20617574686f72697a6174696f6e5f646174612c206578706972792950417574686f72697a6174696f6e5265766f6b65640c007c01484f7074696f6e3c4964656e7469747949643e0000290101444f7074696f6e3c4163636f756e7449643e000028010c753634000a0ca0417574686f72697a6174696f6e207265766f6b65642062792074686520617574686f72697a65722e00b828617574686f72697a65645f6964656e746974792c20617574686f72697a65645f6b65792c20617574685f69642954417574686f72697a6174696f6e52656a65637465640c007c01484f7074696f6e3c4964656e7469747949643e0000290101444f7074696f6e3c4163636f756e7449643e000028010c753634000b0cd8417574686f72697a6174696f6e2072656a65637465642062792074686520757365722077686f2077617320617574686f72697a65642e00b828617574686f72697a65645f6964656e746974792c20617574686f72697a65645f6b65792c20617574685f69642954417574686f72697a6174696f6e436f6e73756d65640c007c01484f7074696f6e3c4964656e7469747949643e0000290101444f7074696f6e3c4163636f756e7449643e000028010c753634000c0c5c417574686f72697a6174696f6e20636f6e73756d65642e00b828617574686f72697a65645f6964656e746974792c20617574686f72697a65645f6b65792c20617574685f69642978417574686f72697a6174696f6e52657472794c696d6974526561636865640c007c01484f7074696f6e3c4964656e7469747949643e0000290101444f7074696f6e3c4163636f756e7449643e000028010c753634000d0cb0416363657074696e6720417574686f72697a6174696f6e207265747279206c696d697420726561636865642e00b828617574686f72697a65645f6964656e746974792c20617574686f72697a65645f6b65792c20617574685f69642988436464526571756972656d656e74466f725072696d6172794b657955706461746564040039010110626f6f6c000e0cc443444420726571756972656d656e7420666f72207570646174696e67207072696d617279206b6579206368616e6765642e0044286e65775f726571756972656d656e742950436464436c61696d73496e76616c69646174656408008001284964656e74697479496400002801184d6f6d656e74000f10410143444420636c61696d732067656e65726174656420627920604964656e74697479496460202861204344442050726f7669646572292068617665206265656e20696e76616c6964617465642066726f6d24604d6f6d656e74602e0094284344442070726f7669646572204449442c2064697361626c652066726f6d2064617465294c5365636f6e646172794b65797346726f7a656e04008001284964656e74697479496400100cc4416c6c205365636f6e64617279206b657973206f6620746865206964656e74697479204944206172652066726f7a656e2e00142844494429545365636f6e646172794b657973556e66726f7a656e04008001284964656e74697479496400110ccc416c6c205365636f6e64617279206b657973206f6620746865206964656e746974792049442061726520756e66726f7a656e2e0014284449442950437573746f6d436c61696d5479706541646465640c008001284964656e746974794964000019010144437573746f6d436c61696d547970654964000030011c5665633c75383e00120c8041206e657720437573746f6d436c61696d54797065207761732061646465642e003c284449442c2069642c2054797065293c4368696c64446964437265617465640c008001284964656e74697479496400008001284964656e74697479496400000001244163636f756e74496400130c5c4368696c64206964656e7469747920637265617465642e009028506172656e74204449442c204368696c64204449442c207072696d617279206b657929404368696c64446964556e6c696e6b65640c008001284964656e74697479496400008001284964656e74697479496400008001284964656e74697479496400140cb44368696c64206964656e7469747920756e6c696e6b65642066726f6d20706172656e74206964656e746974792e008c2843616c6c6572204449442c20506172656e74204449442c204368696c642044494429085c4576656e747320666f722074686973206d6f64756c652e00980000029c009c0c4c706f6c796d6573685f7072696d697469766573347365636f6e646172795f6b6579305365636f6e646172794b657904244163636f756e74496401000008010c6b65790001244163636f756e74496400012c7065726d697373696f6e73a0012c5065726d697373696f6e730000a00c4c706f6c796d6573685f7072696d697469766573347365636f6e646172795f6b65792c5065726d697373696f6e7300000c01146173736574a4014041737365745065726d697373696f6e7300012465787472696e736963b8015045787472696e7369635065726d697373696f6e73000124706f7274666f6c696fe40150506f7274666f6c696f5065726d697373696f6e730000a40c4c706f6c796d6573685f7072696d69746976657318737562736574445375627365745265737472696374696f6e04044101a8010c1457686f6c650000001454686573650400b0012c42547265655365743c413e000100184578636570740400b0012c42547265655365743c413e00020000a80c4c706f6c796d6573685f7072696d6974697665731461737365741c4173736574494400000400ac01205b75383b2031365d0000ac000003100000000800b00420425472656553657404045401a8000400b4000000b4000002a800b80c4c706f6c796d6573685f7072696d697469766573347365636f6e646172795f6b65795045787472696e7369635065726d697373696f6e7300010c1457686f6c650000001454686573650400bc019c42547265654d61703c50616c6c65744e616d652c2050616c6c65745065726d697373696f6e733e000100184578636570740400bc019c42547265654d61703c50616c6c65744e616d652c2050616c6c65745065726d697373696f6e733e00020000bc042042547265654d617008044b01c0045601c8000400dc000000c0084c706f6c796d6573685f7072696d6974697665732850616c6c65744e616d6500000400c40118537472696e670000c40000050200c80c4c706f6c796d6573685f7072696d697469766573347365636f6e646172795f6b65794450616c6c65745065726d697373696f6e73000004012865787472696e73696373cc013845787472696e7369634e616d65730000cc0c4c706f6c796d6573685f7072696d69746976657318737562736574445375627365745265737472696374696f6e04044101d0010c1457686f6c650000001454686573650400d4012c42547265655365743c413e000100184578636570740400d4012c42547265655365743c413e00020000d0084c706f6c796d6573685f7072696d6974697665733445787472696e7369634e616d6500000400c40118537472696e670000d40420425472656553657404045401d0000400d8000000d8000002d000dc000002e000e000000408c0c800e40c4c706f6c796d6573685f7072696d69746976657318737562736574445375627365745265737472696374696f6e04044101e8010c1457686f6c650000001454686573650400f4012c42547265655365743c413e000100184578636570740400f4012c42547265655365743c413e00020000e80c4c706f6c796d6573685f7072696d6974697665732c6964656e746974795f69642c506f7274666f6c696f4964000008010c6469648001284964656e7469747949640001106b696e64ec0134506f7274666f6c696f4b696e640000ec0c4c706f6c796d6573685f7072696d6974697665732c6964656e746974795f696434506f7274666f6c696f4b696e640001081c44656661756c7400000010557365720400f0013c506f7274666f6c696f4e756d62657200010000f00c4c706f6c796d6573685f7072696d6974697665732c6964656e746974795f69643c506f7274666f6c696f4e756d6265720000040028010c7536340000f40420425472656553657404045401e8000400f8000000f8000002e800fc000002000001010c4c706f6c796d6573685f7072696d697469766573386964656e746974795f636c61696d344964656e74697479436c61696d0000140130636c61696d5f6973737565728001284964656e74697479496400013469737375616e63655f646174652801184d6f6d656e740001406c6173745f7570646174655f646174652801184d6f6d656e74000118657870697279050101384f7074696f6e3c4d6f6d656e743e000114636c61696d09010114436c61696d0000050104184f7074696f6e04045401280108104e6f6e6500000010536f6d65040028000001000009010c4c706f6c796d6573685f7072696d697469766573386964656e746974795f636c61696d14436c61696d000128284163637265646974656404000d01011453636f706500000024416666696c6961746504000d01011453636f7065000100244275794c6f636b757004000d01011453636f70650002002853656c6c4c6f636b757004000d01011453636f706500030050437573746f6d657244756544696c6967656e63650400110101144364644964000400404b6e6f77596f7572437573746f6d657204000d01011453636f7065000500304a7572697364696374696f6e08001501012c436f756e747279436f646500000d01011453636f7065000600204578656d7074656404000d01011453636f70650007001c426c6f636b656404000d01011453636f706500080018437573746f6d080019010144437573746f6d436c61696d54797065496400001d0101344f7074696f6e3c53636f70653e000900000d010c4c706f6c796d6573685f7072696d697469766573386964656e746974795f636c61696d1453636f706500010c204964656e7469747904008001284964656e7469747949640000001441737365740400a8011c4173736574494400010018437573746f6d040030011c5665633c75383e0002000011010c4c706f6c796d6573685f7072696d697469766573186364645f6964144364644964000004000401205b75383b2033325d000015010c4c706f6c796d6573685f7072696d697469766573306a7572697364696374696f6e2c436f756e747279436f64650001e90308414600000008415800010008414c00020008445a00030008415300040008414400050008414f000600084149000700084151000800084147000900084152000a0008414d000b00084157000c00084155000d00084154000e0008415a000f0008425300100008424800110008424400120008424200130008425900140008424500150008425a00160008424a00170008424d00180008425400190008424f001a00084241001b00084257001c00084256001d00084252001e00085647001f0008494f00200008424e002100084247002200084246002300084249002400084b4800250008434d002600084341002700084356002800084b59002900084346002a00085444002b0008434c002c0008434e002d0008484b002e00084d4f002f0008435800300008434300310008434f003200084b4d00330008434700340008434400350008434b003600084352003700084349003800084852003900084355003a00084359003b0008435a003c0008444b003d0008444a003e0008444d003f0008444f00400008454300410008454700420008535600430008475100440008455200450008454500460008455400470008464b00480008464f00490008464a004a00084649004b00084652004c00084746004d00085046004e00085446004f0008474100500008474d00510008474500520008444500530008474800540008474900550008475200560008474c005700084744005800084750005900084755005a00084754005b00084747005c0008474e005d00084757005e00084759005f0008485400600008484d00610008564100620008484e00630008485500640008495300650008494e006600084944006700084952006800084951006900084945006a0008494d006b0008494c006c00084954006d00084a4d006e00084a50006f00084a45007000084a4f007100084b5a007200084b45007300084b49007400084b50007500084b52007600084b57007700084b47007800084c41007900084c56007a00084c42007b00084c53007c00084c52007d00084c59007e00084c49007f00084c54008000084c55008100084d4b008200084d47008300084d57008400084d59008500084d56008600084d4c008700084d54008800084d48008900084d51008a00084d52008b00084d55008c00085954008d00084d58008e0008464d008f00084d44009000084d43009100084d4e009200084d45009300084d53009400084d41009500084d5a009600084d4d009700084e41009800084e52009900084e50009a00084e4c009b0008414e009c00084e43009d00084e5a009e00084e49009f00084e4500a000084e4700a100084e5500a200084e4600a300084d5000a400084e4f00a500084f4d00a60008504b00a70008505700a80008505300a90008504100aa0008504700ab0008505900ac0008504500ad0008504800ae0008504e00af0008504c00b00008505400b10008505200b20008514100b30008524500b40008524f00b50008525500b60008525700b70008424c00b80008534800b900084b4e00ba00084c4300bb00084d4600bc0008504d00bd0008564300be0008575300bf0008534d00c00008535400c10008534100c20008534e00c30008525300c40008534300c50008534c00c60008534700c70008534b00c80008534900c90008534200ca0008534f00cb00085a4100cc0008475300cd0008535300ce0008455300cf00084c4b00d00008534400d10008535200d20008534a00d30008535a00d40008534500d50008434800d60008535900d70008545700d80008544a00d90008545a00da0008544800db0008544c00dc0008544700dd0008544b00de0008544f00df0008545400e00008544e00e10008545200e20008544d00e30008544300e40008545600e50008554700e60008554100e70008414500e80008474200e90008555300ea0008554d00eb0008555900ec0008555a00ed0008565500ee0008564500ef0008564e00f00008564900f10008574600f20008454800f30008594500f400085a4d00f500085a5700f60008425100f70008435700f80008535800f9000019010c4c706f6c796d6573685f7072696d697469766573386964656e746974795f636c61696d44437573746f6d436c61696d5479706549640000040010010c75333200001d0104184f7074696f6e040454010d010108104e6f6e6500000010536f6d6504000d01000001000021010c4c706f6c796d6573685f7072696d697469766573187469636b6572185469636b657200000400250101405b75383b205449434b45525f4c454e5d000025010000030c0000000800290104184f7074696f6e04045401000108104e6f6e6500000010536f6d6504000000000100002d010c4c706f6c796d6573685f7072696d69746976657334617574686f72697a6174696f6e44417574686f72697a6174696f6e4461746104244163636f756e74496401000128604174746573745072696d6172794b6579526f746174696f6e04008001284964656e74697479496400000040526f746174655072696d6172794b6579000100385472616e736665725469636b65720400210101185469636b6572000200444164644d756c74695369675369676e657204000001244163636f756e744964000300585472616e7366657241737365744f776e6572736869700400a8011c41737365744944000400304a6f696e4964656e746974790400a0012c5065726d697373696f6e7300050040506f7274666f6c696f437573746f64790400e8012c506f7274666f6c696f49640006002c4265636f6d654167656e740800a8011c417373657449440000310101284167656e7447726f75700007004c41646452656c61796572506179696e674b65790c000001244163636f756e74496400000001244163636f756e744964000018011c42616c616e63650008006c526f746174655072696d6172794b6579546f5365636f6e646172790400a0012c5065726d697373696f6e730009000031010c4c706f6c796d6573685f7072696d697469766573146167656e74284167656e7447726f75700001141046756c6c00000018437573746f6d04003501011041474964000100284578636570744d65746100020034506f6c796d657368563143414100030034506f6c796d65736856315049410004000035010c4c706f6c796d6573685f7072696d697469766573146167656e7410414749640000040010010c7533320000390100000500003d011064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974731467726f7570205261774576656e740c244163636f756e74496401003052756e74696d654576656e74014c0449014101011c2c4d656d626572416464656408008001284964656e74697479496400008001284964656e746974794964000008e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e6c63616c6c6572204449442c204e6577206d656d626572204449442e344d656d62657252656d6f76656408008001284964656e74697479496400008001284964656e746974794964000108e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2ea063616c6c6572204449442c206d656d626572204449442074686174206765742072656d6f7665642e344d656d6265725265766f6b656408008001284964656e74697479496400008001284964656e746974794964000208e454686520676976656e206d656d62657220686173206265656e207265766f6b65642061742073706563696669632074696d652d7374616d702ea063616c6c6572204449442c206d656d62657220444944207468617420676574207265766f6b65642e384d656d62657273537761707065640c008001284964656e74697479496400008001284964656e74697479496400008001284964656e746974794964000308d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e9463616c6c6572204449442c2052656d6f766564204449442c204e657720616464204449442e304d656d62657273526573657408008001284964656e74697479496400004501013c5665633c4964656e7469747949643e0004081501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e8063616c6c6572204449442c204c697374206f66206e6577206d656d626572732e484163746976654c696d69744368616e6765640c008001284964656e746974794964000010012c4d656d626572436f756e74000010012c4d656d626572436f756e740005042d01546865206c696d6974206f6620686f77206d616e7920616374697665206d656d626572732074686572652063616e20626520636f6e63757272656e746c7920776173206368616e6765642e1444756d6d790006046c5068616e746f6d206d656d6265722c206e6576657220757365642e085c4576656e747320666f722074686973206d6f64756c652e004101083070616c6c65745f67726f757024496e7374616e63653200000000450100000280004901084070616c6c65745f636f6d6d6974746565205261774576656e740c1048617368012c2c426c6f636b4e756d62657201100449014d0101282050726f706f7365640c008001284964656e746974794964000010013450726f706f73616c496e64657800002c011048617368000008890141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e20604d656d626572436f756e7460292ed8506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20696e6465782c2070726f706f73616c20686173682e14566f7465641c008001284964656e746974794964000010013450726f706f73616c496e64657800002c011048617368000039010110626f6f6c000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400010c050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e674901612074616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e950163616c6c6572204449442c2050726f706f73616c20696e6465782c2050726f706f73616c20686173682c2063757272656e7420766f74652c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e34566f746552657472616374656410008001284964656e746974794964000010013450726f706f73616c496e64657800002c011048617368000039010110626f6f6c000208cc4120766f7465206f6e2061206d6f74696f6e2028676976656e20686173682920686173206265656e207265747261637465642e050163616c6c6572204449442c2050726f706f73616c496e6465782c2050726f706f73616c20686173682c20766f7465207468617420776173207265747261637465642846696e616c566f74657314007c01484f7074696f6e3c4964656e7469747949643e000010013450726f706f73616c496e64657800002c01104861736800004501013c5665633c4964656e7469747949643e00004501013c5665633c4964656e7469747949643e0003089046696e616c20766f746573206f6e2061206d6f74696f6e2028676976656e206861736829f863616c6c6572204449442c2050726f706f73616c496e6465782c2050726f706f73616c20686173682c2079657320766f746572732c206e6f20766f74657220417070726f76656414007c01484f7074696f6e3c4964656e7469747949643e00002c011048617368000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400040c090141206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c6420776974682074686520666f6c6c6f77696e67410174616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e4d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e2052656a656374656414007c01484f7074696f6e3c4964656e7469747949643e00002c011048617368000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400050c090141206d6f74696f6e207761732072656a656374656420627920746865207265717569726564207468726573686f6c6420776974682074686520666f6c6c6f77696e67410174616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e4d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e2045786563757465640c007c01484f7074696f6e3c4964656e7469747949643e00002c0110486173680000510101384469737061746368526573756c74000608390141206d6f74696f6e207761732065786563757465643b20604469737061746368526573756c746020697320604f6b28282929602069662072657475726e656420776974686f7574206572726f722e0d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c20726573756c74206f662070726f706f73616c2064697370617463682e6452656c65617365436f6f7264696e61746f725570646174656404007c01484f7074696f6e3c4964656e7469747949643e0007089452656c6561736520636f6f7264696e61746f7220686173206265656e20757064617465642eac506172616d65746572733a20444944206f66207468652072656c6561736520636f6f7264696e61746f722e4c4578706972657341667465725570646174656408008001284964656e74697479496400005901015c4d61796265426c6f636b3c426c6f636b4e756d6265723e0008089850726f706f73616c206578706972792074696d6520686173206265656e20757064617465642ec4506172616d65746572733a2063616c6c6572204449442c206e6577206578706972792074696d652028696620616e79292e50566f74655468726573686f6c64557064617465640c008001284964656e746974794964000010010c753332000010010c75333200090884566f74696e67207468726573686f6c6420686173206265656e2075706461746564b8506172616d65746572733a2063616c6c6572204449442c206e756d657261746f722c2064656e6f6d696e61746f72085c4576656e747320666f722074686973206d6f64756c652e004d01084070616c6c65745f636f6d6d697474656524496e7374616e6365310000000051010418526573756c74080454015501044501600108084f6b04005501000000000c45727204006000000100005501000004000059010864706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573284d61796265426c6f636b042c426c6f636b4e756d6265720110010810536f6d65040010012c426c6f636b4e756d626572000000104e6f6e65000100005d011064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974731467726f7570205261774576656e740c244163636f756e74496401003052756e74696d654576656e74014c0449016101011c2c4d656d626572416464656408008001284964656e74697479496400008001284964656e746974794964000008e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e6c63616c6c6572204449442c204e6577206d656d626572204449442e344d656d62657252656d6f76656408008001284964656e74697479496400008001284964656e746974794964000108e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2ea063616c6c6572204449442c206d656d626572204449442074686174206765742072656d6f7665642e344d656d6265725265766f6b656408008001284964656e74697479496400008001284964656e746974794964000208e454686520676976656e206d656d62657220686173206265656e207265766f6b65642061742073706563696669632074696d652d7374616d702ea063616c6c6572204449442c206d656d62657220444944207468617420676574207265766f6b65642e384d656d62657273537761707065640c008001284964656e74697479496400008001284964656e74697479496400008001284964656e746974794964000308d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e9463616c6c6572204449442c2052656d6f766564204449442c204e657720616464204449442e304d656d62657273526573657408008001284964656e74697479496400004501013c5665633c4964656e7469747949643e0004081501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e8063616c6c6572204449442c204c697374206f66206e6577206d656d626572732e484163746976654c696d69744368616e6765640c008001284964656e746974794964000010012c4d656d626572436f756e74000010012c4d656d626572436f756e740005042d01546865206c696d6974206f6620686f77206d616e7920616374697665206d656d626572732074686572652063616e20626520636f6e63757272656e746c7920776173206368616e6765642e1444756d6d790006046c5068616e746f6d206d656d6265722c206e6576657220757365642e085c4576656e747320666f722074686973206d6f64756c652e006101083070616c6c65745f67726f757024496e7374616e636531000000006501084070616c6c65745f636f6d6d6974746565205261774576656e740c1048617368012c2c426c6f636b4e756d6265720110044901690101282050726f706f7365640c008001284964656e746974794964000010013450726f706f73616c496e64657800002c011048617368000008890141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e20604d656d626572436f756e7460292ed8506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20696e6465782c2070726f706f73616c20686173682e14566f7465641c008001284964656e746974794964000010013450726f706f73616c496e64657800002c011048617368000039010110626f6f6c000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400010c050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e674901612074616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e950163616c6c6572204449442c2050726f706f73616c20696e6465782c2050726f706f73616c20686173682c2063757272656e7420766f74652c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e34566f746552657472616374656410008001284964656e746974794964000010013450726f706f73616c496e64657800002c011048617368000039010110626f6f6c000208cc4120766f7465206f6e2061206d6f74696f6e2028676976656e20686173682920686173206265656e207265747261637465642e050163616c6c6572204449442c2050726f706f73616c496e6465782c2050726f706f73616c20686173682c20766f7465207468617420776173207265747261637465642846696e616c566f74657314007c01484f7074696f6e3c4964656e7469747949643e000010013450726f706f73616c496e64657800002c01104861736800004501013c5665633c4964656e7469747949643e00004501013c5665633c4964656e7469747949643e0003089046696e616c20766f746573206f6e2061206d6f74696f6e2028676976656e206861736829f863616c6c6572204449442c2050726f706f73616c496e6465782c2050726f706f73616c20686173682c2079657320766f746572732c206e6f20766f74657220417070726f76656414007c01484f7074696f6e3c4964656e7469747949643e00002c011048617368000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400040c090141206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c6420776974682074686520666f6c6c6f77696e67410174616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e4d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e2052656a656374656414007c01484f7074696f6e3c4964656e7469747949643e00002c011048617368000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400050c090141206d6f74696f6e207761732072656a656374656420627920746865207265717569726564207468726573686f6c6420776974682074686520666f6c6c6f77696e67410174616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e4d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e2045786563757465640c007c01484f7074696f6e3c4964656e7469747949643e00002c0110486173680000510101384469737061746368526573756c74000608390141206d6f74696f6e207761732065786563757465643b20604469737061746368526573756c746020697320604f6b28282929602069662072657475726e656420776974686f7574206572726f722e0d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c20726573756c74206f662070726f706f73616c2064697370617463682e6452656c65617365436f6f7264696e61746f725570646174656404007c01484f7074696f6e3c4964656e7469747949643e0007089452656c6561736520636f6f7264696e61746f7220686173206265656e20757064617465642eac506172616d65746572733a20444944206f66207468652072656c6561736520636f6f7264696e61746f722e4c4578706972657341667465725570646174656408008001284964656e74697479496400005901015c4d61796265426c6f636b3c426c6f636b4e756d6265723e0008089850726f706f73616c206578706972792074696d6520686173206265656e20757064617465642ec4506172616d65746572733a2063616c6c6572204449442c206e6577206578706972792074696d652028696620616e79292e50566f74655468726573686f6c64557064617465640c008001284964656e746974794964000010010c753332000010010c75333200090884566f74696e67207468726573686f6c6420686173206265656e2075706461746564b8506172616d65746572733a2063616c6c6572204449442c206e756d657261746f722c2064656e6f6d696e61746f72085c4576656e747320666f722074686973206d6f64756c652e006901084070616c6c65745f636f6d6d697474656524496e7374616e636533000000006d011064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974731467726f7570205261774576656e740c244163636f756e74496401003052756e74696d654576656e74014c0449017101011c2c4d656d626572416464656408008001284964656e74697479496400008001284964656e746974794964000008e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e6c63616c6c6572204449442c204e6577206d656d626572204449442e344d656d62657252656d6f76656408008001284964656e74697479496400008001284964656e746974794964000108e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2ea063616c6c6572204449442c206d656d626572204449442074686174206765742072656d6f7665642e344d656d6265725265766f6b656408008001284964656e74697479496400008001284964656e746974794964000208e454686520676976656e206d656d62657220686173206265656e207265766f6b65642061742073706563696669632074696d652d7374616d702ea063616c6c6572204449442c206d656d62657220444944207468617420676574207265766f6b65642e384d656d62657273537761707065640c008001284964656e74697479496400008001284964656e74697479496400008001284964656e746974794964000308d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e9463616c6c6572204449442c2052656d6f766564204449442c204e657720616464204449442e304d656d62657273526573657408008001284964656e74697479496400004501013c5665633c4964656e7469747949643e0004081501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e8063616c6c6572204449442c204c697374206f66206e6577206d656d626572732e484163746976654c696d69744368616e6765640c008001284964656e746974794964000010012c4d656d626572436f756e74000010012c4d656d626572436f756e740005042d01546865206c696d6974206f6620686f77206d616e7920616374697665206d656d626572732074686572652063616e20626520636f6e63757272656e746c7920776173206368616e6765642e1444756d6d790006046c5068616e746f6d206d656d6265722c206e6576657220757365642e085c4576656e747320666f722074686973206d6f64756c652e007101083070616c6c65745f67726f757024496e7374616e636533000000007501084070616c6c65745f636f6d6d6974746565205261774576656e740c1048617368012c2c426c6f636b4e756d6265720110044901790101282050726f706f7365640c008001284964656e746974794964000010013450726f706f73616c496e64657800002c011048617368000008890141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e20604d656d626572436f756e7460292ed8506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20696e6465782c2070726f706f73616c20686173682e14566f7465641c008001284964656e746974794964000010013450726f706f73616c496e64657800002c011048617368000039010110626f6f6c000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400010c050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e674901612074616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e950163616c6c6572204449442c2050726f706f73616c20696e6465782c2050726f706f73616c20686173682c2063757272656e7420766f74652c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e34566f746552657472616374656410008001284964656e746974794964000010013450726f706f73616c496e64657800002c011048617368000039010110626f6f6c000208cc4120766f7465206f6e2061206d6f74696f6e2028676976656e20686173682920686173206265656e207265747261637465642e050163616c6c6572204449442c2050726f706f73616c496e6465782c2050726f706f73616c20686173682c20766f7465207468617420776173207265747261637465642846696e616c566f74657314007c01484f7074696f6e3c4964656e7469747949643e000010013450726f706f73616c496e64657800002c01104861736800004501013c5665633c4964656e7469747949643e00004501013c5665633c4964656e7469747949643e0003089046696e616c20766f746573206f6e2061206d6f74696f6e2028676976656e206861736829f863616c6c6572204449442c2050726f706f73616c496e6465782c2050726f706f73616c20686173682c2079657320766f746572732c206e6f20766f74657220417070726f76656414007c01484f7074696f6e3c4964656e7469747949643e00002c011048617368000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400040c090141206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c6420776974682074686520666f6c6c6f77696e67410174616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e4d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e2052656a656374656414007c01484f7074696f6e3c4964656e7469747949643e00002c011048617368000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400050c090141206d6f74696f6e207761732072656a656374656420627920746865207265717569726564207468726573686f6c6420776974682074686520666f6c6c6f77696e67410174616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e4d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e2045786563757465640c007c01484f7074696f6e3c4964656e7469747949643e00002c0110486173680000510101384469737061746368526573756c74000608390141206d6f74696f6e207761732065786563757465643b20604469737061746368526573756c746020697320604f6b28282929602069662072657475726e656420776974686f7574206572726f722e0d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c20726573756c74206f662070726f706f73616c2064697370617463682e6452656c65617365436f6f7264696e61746f725570646174656404007c01484f7074696f6e3c4964656e7469747949643e0007089452656c6561736520636f6f7264696e61746f7220686173206265656e20757064617465642eac506172616d65746572733a20444944206f66207468652072656c6561736520636f6f7264696e61746f722e4c4578706972657341667465725570646174656408008001284964656e74697479496400005901015c4d61796265426c6f636b3c426c6f636b4e756d6265723e0008089850726f706f73616c206578706972792074696d6520686173206265656e20757064617465642ec4506172616d65746572733a2063616c6c6572204449442c206e6577206578706972792074696d652028696620616e79292e50566f74655468726573686f6c64557064617465640c008001284964656e746974794964000010010c753332000010010c75333200090884566f74696e67207468726573686f6c6420686173206265656e2075706461746564b8506172616d65746572733a2063616c6c6572204449442c206e756d657261746f722c2064656e6f6d696e61746f72085c4576656e747320666f722074686973206d6f64756c652e007901084070616c6c65745f636f6d6d697474656524496e7374616e636534000000007d011064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974731467726f7570205261774576656e740c244163636f756e74496401003052756e74696d654576656e74014c0449018101011c2c4d656d626572416464656408008001284964656e74697479496400008001284964656e746974794964000008e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e6c63616c6c6572204449442c204e6577206d656d626572204449442e344d656d62657252656d6f76656408008001284964656e74697479496400008001284964656e746974794964000108e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2ea063616c6c6572204449442c206d656d626572204449442074686174206765742072656d6f7665642e344d656d6265725265766f6b656408008001284964656e74697479496400008001284964656e746974794964000208e454686520676976656e206d656d62657220686173206265656e207265766f6b65642061742073706563696669632074696d652d7374616d702ea063616c6c6572204449442c206d656d62657220444944207468617420676574207265766f6b65642e384d656d62657273537761707065640c008001284964656e74697479496400008001284964656e74697479496400008001284964656e746974794964000308d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e9463616c6c6572204449442c2052656d6f766564204449442c204e657720616464204449442e304d656d62657273526573657408008001284964656e74697479496400004501013c5665633c4964656e7469747949643e0004081501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e8063616c6c6572204449442c204c697374206f66206e6577206d656d626572732e484163746976654c696d69744368616e6765640c008001284964656e746974794964000010012c4d656d626572436f756e74000010012c4d656d626572436f756e740005042d01546865206c696d6974206f6620686f77206d616e7920616374697665206d656d626572732074686572652063616e20626520636f6e63757272656e746c7920776173206368616e6765642e1444756d6d790006046c5068616e746f6d206d656d6265722c206e6576657220757365642e085c4576656e747320666f722074686973206d6f64756c652e008101083070616c6c65745f67726f757024496e7374616e6365340000000085010c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001383c4d756c74695369674372656174656414012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e74496400011863616c6c6572000130543a3a4163636f756e74496400011c7369676e6572738901019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e000134736967735f726571756972656428010c7536340000047041204d756c746973696720686173206265656e20637265617465642e3450726f706f73616c41646465640c012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c7536340001049441204d756c74697369672070726f706f73616c20686173206265656e20637265617465642e4050726f706f73616c457865637574656410012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c753634000118726573756c74510101384469737061746368526573756c740002049841204d756c74697369672070726f706f73616c20686173206265656e2065786563757465642e4c4d756c74695369675369676e657241646465640c012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e7449640001187369676e6572000130543a3a4163636f756e744964000304a841206e6577207369676e657220686173206265656e20616464656420746f2061204d756c74697369672e644d756c74695369675369676e657273417574686f72697a65640c012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e74496400011c7369676e6572738901019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e000404e84e6577206b6579732068617665206265656e20617574686f72697a656420746f206265207369676e657273206f6e2061204d756c74697369672e584d756c74695369675369676e65727352656d6f7665640c012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e74496400011c7369676e6572738901019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e000504a85369676e6572732068617665206265656e2072656d6f7665642066726f6d2061204d756c74697369672e784d756c74695369675369676e65727352657175697265644368616e6765640c012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e744964000134736967735f726571756972656428010c753634000604e041204d756c746973696720686173206368616e67656420697473207265717569726564206e756d626572206f6620617070726f76616c732e5050726f706f73616c417070726f76616c566f746510012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e7449640001187369676e6572000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c753634000704c841207369676e65722068617320766f74656420746f20617070726f76652061204d756c74697369672070726f706f73616c2e5450726f706f73616c52656a656374696f6e566f746510012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e7449640001187369676e6572000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c753634000804c441207369676e65722068617320766f74656420746f2072656a6563742061204d756c74697369672070726f706f73616c2e4050726f706f73616c417070726f7665640c012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c7536340009049841204d756c74697369672070726f706f73616c20686173206265656e20617070726f7665642e4050726f706f73616c52656a65637465640c012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c753634000a049841204d756c74697369672070726f706f73616c20686173206265656e2072656a65637465642e484d756c7469536967416464656441646d696e0c012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e74496400012461646d696e5f6469648001284964656e746974794964000b048841204d756c74697369672068617320616464656420616e2061646d696e204449442e504d756c746953696752656d6f76656441646d696e0c012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e74496400012461646d696e5f6469648001284964656e746974794964000c049841204d756c7469736967206861732072656d6f76656420697427732061646d696e204449442e604d756c746953696752656d6f766564506179696e674469640c012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e744964000128706179696e675f6469648001284964656e746974794964000d049c41204d756c7469736967206861732072656d6f766564206974277320706179696e67204449442e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090989010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400fc01185665633c543e00008d01103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144576656e740404540001581c457261506169640c01246572615f696e646578100120457261496e64657800014076616c696461746f725f7061796f757418013042616c616e63654f663c543e00012472656d61696e64657218013042616c616e63654f663c543e000008550154686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973c07468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e2052657761726465640c01206964656e746974798001284964656e7469747949640001147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000104bc546865206e6f6d696e61746f7220686173206265656e207265776172646564206279207468697320616d6f756e742e1c536c61736865640801187374616b6572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0002041d0141207374616b6572202876616c696461746f72206f72206e6f6d696e61746f722920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e34536c6173685265706f727465640c012476616c696461746f72000130543a3a4163636f756e7449640001206672616374696f6e9101011c50657262696c6c000124736c6173685f657261100120457261496e64657800030859014120736c61736820666f722074686520676976656e2076616c696461746f722c20666f722074686520676976656e2070657263656e74616765206f66207468656972207374616b652c2061742074686520676976656e54657261206173206265656e207265706f727465642e684f6c64536c617368696e675265706f727444697363617264656404013473657373696f6e5f696e64657810013053657373696f6e496e6465780004081901416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64446e6f742062652070726f6365737365642e385374616b657273456c65637465640005048441206e657720736574206f66207374616b6572732077617320656c65637465642e18426f6e6465640c01206964656e746974798001284964656e7469747949640001147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000610d0416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d004d014e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c210169742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e20556e626f6e6465640c01206964656e746974798001284964656e7469747949640001147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00070490416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e2457697468647261776e0801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0008085901416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365606466726f6d2074686520756e6c6f636b696e672071756575652e184b69636b65640801246e6f6d696e61746f72000130543a3a4163636f756e7449640001147374617368000130543a3a4163636f756e744964000904b441206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e545374616b696e67456c656374696f6e4661696c6564000a04ac54686520656c656374696f6e206661696c65642e204e6f206e65772065726120697320706c616e6e65642e1c4368696c6c65640401147374617368000130543a3a4163636f756e744964000b042101416e206163636f756e74206861732073746f707065642070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000c0498546865207374616b657273272072657761726473206172652067657474696e6720706169642e4456616c696461746f7250726566735365740801147374617368000130543a3a4163636f756e74496400011470726566739501013856616c696461746f725072656673000d0498412076616c696461746f72206861732073657420746865697220707265666572656e6365732e20466f7263654572610401106d6f64659d01011c466f7263696e67000e047441206e657720666f72636520657261206d6f646520776173207365742e244e6f6d696e617465640c01486e6f6d696e61746f725f6964656e746974798001284964656e7469747949640001147374617368000130543a3a4163636f756e74496400011c74617267657473fc01445665633c543a3a4163636f756e7449643e000f048c55736572206861732075706461746564207468656972206e6f6d696e6174696f6e732e645065726d697373696f6e65644964656e74697479416464656408015c676f7665726e616e63655f636f756e63696c6c5f6469648001284964656e74697479496400014c76616c696461746f72735f6964656e746974798001284964656e746974794964001004f0416e206964656e74697479206861732069737375656420612063616e64696461637920666f72206265636f6d696e6720612076616c696461746f722e6c5065726d697373696f6e65644964656e7469747952656d6f76656408015c676f7665726e616e63655f636f756e63696c6c5f6469648001284964656e74697479496400014c76616c696461746f72735f6964656e746974798001284964656e7469747949640011040d01416e206964656e7469747920686173206265656e2072656d6f7665642066726f6d20746865207065726d697373696f6e6564206964656e74697469657320706f6f6c2e54496e76616c6964617465644e6f6d696e61746f72730c015c676f7665726e616e63655f636f756e63696c6c5f6469648001284964656e74697479496400016c676f7665726e616e63655f636f756e63696c6c5f6163636f756e748001284964656e746974794964000148657870697265645f6e6f6d696e61746f7273fc01445665633c543a3a4163636f756e7449643e0012041d0152656d6f766520746865206e6f6d696e61746f72732066726f6d207468652076616c6964206e6f6d696e61746f7273207768656e2074686572652043444420657870697265642e64536c617368696e67416c6c6f776564466f724368616e67656404013c736c617368696e675f737769746368a1010138536c617368696e6753776974636800130488536c617368696e6720616c6c6f77656420686173206265656e20757064617465642e885265776172645061796d656e745363686564756c696e67496e7465727275707465640c01286163636f756e745f6964000130543a3a4163636f756e74496400010c657261100120457261496e6465780001146572726f7260013444697370617463684572726f7200140478526577617264207363686564756c696e6720696e7465727275707465642e50436f6d6d697373696f6e436170557064617465640c015c676f7665726e616e63655f636f756e63696c6c5f6469648001284964656e7469747949640001486f6c645f636f6d6d697373696f6e5f6361709101011c50657262696c6c0001486e65775f636f6d6d697373696f6e5f6361709101011c50657262696c6c00150480436f6d6d697373696f6e2063617020686173206265656e20757064617465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090991010c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c75333200009501083870616c6c65745f7374616b696e673856616c696461746f7250726566730000080128636f6d6d697373696f6e9901011c50657262696c6c00011c626c6f636b656439010110626f6f6c000099010000069101009d01083870616c6c65745f7374616b696e671c466f7263696e67000110284e6f74466f7263696e6700000020466f7263654e657700010024466f7263654e6f6e650002002c466f726365416c7761797300030000a1010c3870616c6c65745f7374616b696e6714747970657338536c617368696e6753776974636800010c2456616c696461746f720000005456616c696461746f72416e644e6f6d696e61746f72000100104e6f6e6500020000a5010c3c70616c6c65745f6f6666656e6365731870616c6c6574144576656e740001041c4f6666656e63650801106b696e64ac01104b696e6400012074696d65736c6f743001384f706171756554696d65536c6f7400000c5101546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e643501286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4c5c5b6b696e642c2074696d65736c6f745c5d2e04304576656e747320747970652ea9010c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ad010c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574b1010134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b101000002b50100b50100000408b9012800b9010c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c696300000400bd01013c656432353531393a3a5075626c69630000bd010c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000c1010c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144576656e7404045400010c444865617274626561745265636569766564040130617574686f726974795f6964c5010138543a3a417574686f726974794964000004c041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964602e1c416c6c476f6f64000104d041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504011c6f66666c696e65cd01016c5665633c4964656e74696669636174696f6e5475706c653c543e3e000204290141742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c501104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139185075626c696300000400c901013c737232353531393a3a5075626c69630000c9010c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000cd01000002d10100d1010000040800d50100d501083870616c6c65745f7374616b696e67204578706f7375726508244163636f756e74496401001c42616c616e63650118000c0114746f74616cd901011c42616c616e636500010c6f776ed901011c42616c616e63650001186f7468657273dd0101ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e0000d9010000061800dd01000002e10100e101083870616c6c65745f7374616b696e6748496e646976696475616c4578706f7375726508244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011476616c7565d901011c42616c616e63650000e501082c70616c6c65745f7375646f205261774576656e7404244163636f756e7449640100010c1453756469640400510101384469737061746368526573756c740000048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d284b65794368616e6765640400290101444f7074696f6e3c4163636f756e7449643e000104fc546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c6965642e285375646f4173446f6e650400510101384469737061746368526573756c740002048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d085c4576656e747320666f722074686973206d6f64756c652e00e9011064706f6c796d6573685f636f6d6d6f6e5f7574696c697469657318747261697473146173736574205261774576656e7404184d6f6d656e74012801783041737365744372656174656420008001284964656e7469747949640000a8011c41737365744944000039010110626f6f6c0000ed01012441737365745479706500008001284964656e7469747949640000f901012441737365744e616d650000fd0101505665633c41737365744964656e7469666965723e00000d0201604f7074696f6e3c46756e64696e67526f756e644e616d653e000008804576656e7420666f72206372656174696f6e206f66207468652061737365742ec50163616c6c6572204449442f206f776e6572204449442c20417373657449442c2064697669736962696c6974792c20617373657420747970652c2062656e6566696369617279204449442c206173736574206e616d652c206964656e746966696572732c2066756e64696e6720726f756e64484964656e74696669657273557064617465640c008001284964656e7469747949640000a8011c417373657449440000fd0101505665633c41737365744964656e7469666965723e000108d44576656e7420656d6974746564207768656e20616e7920746f6b656e206964656e746966696572732061726520757064617465642e110163616c6c6572204449442c20417373657449442c206120766563746f72206f6620286964656e74696669657220747970652c206964656e7469666965722076616c7565294c44697669736962696c6974794368616e6765640c008001284964656e7469747949640000a8011c41737365744944000039010110626f6f6c000208844576656e7420666f72206368616e676520696e2064697669736962696c6974792e8463616c6c6572204449442c20417373657449442c2064697669736962696c697479405469636b6572526567697374657265640c008001284964656e7469747949640000210101185469636b65720000050101384f7074696f6e3c4d6f6d656e743e0003087c456d6974207768656e207469636b657220697320726567697374657265642eec63616c6c657220444944202f207469636b6572206f776e6572206469642c207469636b65722c207469636b6572206f776e65722c20657870697279445469636b65725472616e736665727265640c008001284964656e7469747949640000210101185469636b657200008001284964656e74697479496400040880456d6974207768656e207469636b6572206973207472616e736665727265642ed063616c6c657220444944202f207469636b6572207472616e7366657272656420746f204449442c207469636b65722c2066726f6d6441737365744f776e6572736869705472616e736665727265640c008001284964656e7469747949640000a8011c4173736574494400008001284964656e746974794964000508a4456d6974207768656e20746f6b656e206f776e657273686970206973207472616e736665727265642ef863616c6c657220444944202f20746f6b656e206f776e657273686970207472616e7366657272656420746f204449442c20417373657449442c2066726f6d2c417373657446726f7a656e08008001284964656e7469747949640000a8011c41737365744944000608a4416e206576656e7420656d6974746564207768656e20616e2061737365742069732066726f7a656e2e7c506172616d657465723a2063616c6c6572204449442c20417373657449442e344173736574556e66726f7a656e08008001284964656e7469747949640000a8011c41737365744944000708ac416e206576656e7420656d6974746564207768656e20616e20617373657420697320756e66726f7a656e2e7c506172616d657465723a2063616c6c6572204449442c20417373657449442e30417373657452656e616d65640c008001284964656e7469747949640000a8011c417373657449440000f901012441737365744e616d65000808a4416e206576656e7420656d6974746564207768656e206120746f6b656e2069732072656e616d65642ec0506172616d65746572733a2063616c6c6572204449442c20417373657449442c206e657720746f6b656e206e616d652e3c46756e64696e67526f756e645365740c008001284964656e7469747949640000a8011c4173736574494400001102014046756e64696e67526f756e644e616d650009081101416e206576656e74206361727279696e6720746865206e616d65206f66207468652063757272656e742066756e64696e6720726f756e64206f6620616e2061737365742ed0506172616d65746572733a2063616c6c6572204449442c20417373657449442c2066756e64696e6720726f756e64206e616d652e34446f63756d656e74416464656410008001284964656e7469747949640000a8011c41737365744944000015020128446f63756d656e744964000019020120446f63756d656e74000a048c41206e657720646f63756d656e7420617474616368656420746f20616e2061737365743c446f63756d656e7452656d6f7665640c008001284964656e7469747949640000a8011c41737365744944000015020128446f63756d656e744964000b04804120646f63756d656e742072656d6f7665642066726f6d20616e20617373657448436f6e74726f6c6c65725472616e7366657210008001284964656e7469747949640000a8011c417373657449440000e8012c506f7274666f6c696f4964000018011c42616c616e6365000c08b44576656e7420666f72207768656e206120666f72636564207472616e736665722074616b657320706c6163652e3d0163616c6c6572204449442f20636f6e74726f6c6c6572204449442c20457874656e73696f6e52656d6f7665642c20506f7274666f6c696f206f6620746f6b656e20686f6c6465722c2076616c75652e54437573746f6d4173736574547970654578697374730c008001284964656e7469747949640000f1010144437573746f6d4173736574547970654964000030011c5665633c75383e000d08b04120637573746f6d206173736574207479706520616c726561647920657869737473206f6e2d636861696e2e310163616c6c6572204449442c20746865204944206f662074686520637573746f6d20617373657420747970652c2074686520737472696e6720636f6e74656e747320726567697374657265642e64437573746f6d417373657454797065526567697374657265640c008001284964656e7469747949640000f1010144437573746f6d4173736574547970654964000030011c5665633c75383e000e08b04120637573746f6d2061737365742074797065207761732072656769737465726564206f6e2d636861696e2e310163616c6c6572204449442c20746865204944206f662074686520637573746f6d20617373657420747970652c2074686520737472696e6720636f6e74656e747320726567697374657265642e5453657441737365744d6574616461746156616c756510008001284964656e7469747949640000a8011c4173736574494400004502014841737365744d6574616461746156616c75650000490201a04f7074696f6e3c41737365744d6574616461746156616c756544657461696c3c4d6f6d656e743e3e000f0864536574206173736574206d657461646174612076616c75652ef42843616c6c6572204449442c20417373657449442c206d657461646174612076616c75652c206f7074696f6e616c2076616c75652064657461696c73297053657441737365744d6574616461746156616c756544657461696c730c008001284964656e7469747949640000a8011c4173736574494400004d02018041737365744d6574616461746156616c756544657461696c3c4d6f6d656e743e001008dc536574206173736574206d657461646174612076616c75652064657461696c7320286578706972652c206c6f636b20737461747573292e902843616c6c6572204449442c20417373657449442c2076616c75652064657461696c732978526567697374657241737365744d657461646174614c6f63616c5479706514008001284964656e7469747949640000a8011c4173736574494400005502014441737365744d657461646174614e616d6500005902015441737365744d657461646174614c6f63616c4b657900005d02014441737365744d65746164617461537065630011088c5265676973746572206173736574206d65746164617461206c6f63616c20747970652e09012843616c6c6572204449442c20417373657449442c204c6f63616c2074797065206e616d652c204c6f63616c2074797065206b65792c2074797065207370656373297c526567697374657241737365744d65746164617461476c6f62616c547970650c005502014441737365744d657461646174614e616d6500007502015841737365744d65746164617461476c6f62616c4b657900005d02014441737365744d6574616461746153706563001208905265676973746572206173736574206d6574616461746120676c6f62616c20747970652ebc28476c6f62616c2074797065206e616d652c20476c6f62616c2074797065206b65792c207479706520737065637329404173736574547970654368616e6765640c008001284964656e7469747949640000a8011c417373657449440000ed010124417373657454797065001308cc416e206576656e7420656d6974746564207768656e207468652074797065206f6620616e206173736574206368616e6765642ec0506172616d65746572733a2063616c6c6572204449442c20417373657449442c206e657720746f6b656e20747970652e5c4c6f63616c4d657461646174614b657944656c657465640c008001284964656e7469747949640000a8011c4173736574494400005902015441737365744d657461646174614c6f63616c4b6579001408f0416e206576656e7420656d6974746564207768656e2061206c6f63616c206d65746164617461206b657920686173206265656e2072656d6f7665642eac506172616d65746572733a2063616c6c657220417373657449442c204c6f63616c2074797065206e616d65504d6574616461746156616c756544656c657465640c008001284964656e7469747949640000a8011c4173736574494400007902014041737365744d657461646174614b6579001508f8416e206576656e7420656d6974746564207768656e2061206c6f63616c206d657461646174612076616c756520686173206265656e2072656d6f7665642eac506172616d65746572733a2063616c6c657220417373657449442c204c6f63616c2074797065206e616d654c417373657442616c616e63655570646174656418008001284964656e7469747949640000a8011c41737365744944000018011c42616c616e636500007d02014c4f7074696f6e3c506f7274666f6c696f49643e00007d02014c4f7074696f6e3c506f7274666f6c696f49643e000081020154506f7274666f6c696f557064617465526561736f6e00160ce4456d6974746564207768656e20546f6b656e732077657265206973737565642c2072656465656d6564206f72207472616e736665727265642e3502436f6e7461696e7320746865205b604964656e746974794964605d206f66207468652072656365697665722f6973737565722f72656465656d65722c20746865205b6041737365744944605d20666f722074686520746f6b656e2c207468652062616c616e6365207468617420776173206973737565642f7472616e736665727265642f72656465656d65642cb101746865205b60506f7274666f6c696f4964605d206f662074686520736f757263652c20746865205b60506f7274666f6c696f4964605d206f66207468652064657374696e6174696f6e20616e6420746865205b60506f7274666f6c696f557064617465526561736f6e605d2e64417373657441666669726d6174696f6e4578656d7074696f6e0400a8011c417373657449440017086d01416e20617373657420686173206265656e20616464656420746f20746865206c697374206f662070726520617072726f76656420726563656976656d656e74202876616c696420666f7220616c6c206964656e746974696573292ec8506172616d65746572733a205b6041737365744944605d206f66207468652070726520617070726f7665642061737365742e7c52656d6f7665417373657441666669726d6174696f6e4578656d7074696f6e0400a8011c417373657449440018087d01416e20617373657420686173206265656e2072656d6f7665642066726f6d20746865206c697374206f662070726520617072726f76656420726563656976656d656e74202876616c696420666f7220616c6c206964656e746974696573292e94506172616d65746572733a205b6041737365744944605d206f66207468652061737365742e40507265417070726f766564417373657408008001284964656e7469747949640000a8011c417373657449440019081d01416e206964656e746974792068617320616464656420616e20617373657420746f20746865206c697374206f662070726520617072726f76656420726563656976656d656e742e3101506172616d65746572733a205b604964656e746974794964605d206f662063616c6c65722c205b6041737365744944605d206f66207468652070726520617070726f7665642061737365742e5852656d6f7665507265417070726f766564417373657408008001284964656e7469747949640000a8011c41737365744944001a082501416e206964656e74697479206861732072656d6f76656420616e20617373657420746f20746865206c697374206f662070726520617072726f76656420726563656976656d656e742efc506172616d65746572733a205b604964656e746974794964605d206f662063616c6c65722c205b6041737365744944605d206f66207468652061737365742e4c41737365744d65646961746f727341646465640c008001284964656e7469747949640000a8011c4173736574494400008d02015042547265655365743c4964656e7469747949643e001b08d8416e206964656e7469747920686173206164646564206d616e6461746f7279206d65646961746f727320746f20616e2061737365742e9101506172616d65746572733a205b604964656e746974794964605d206f662063616c6c65722c205b6041737365744944605d206f66207468652061737365742c20746865206964656e74697479206f6620616c6c206d65646961746f72732061646465642e5441737365744d65646961746f727352656d6f7665640c008001284964656e7469747949640000a8011c4173736574494400008d02015042547265655365743c4964656e7469747949643e001c08c0416e206964656e74697479206861732072656d6f766564206d65646961746f72732066726f6d20616e2061737365742e9901506172616d65746572733a205b604964656e746974794964605d206f662063616c6c65722c205b6041737365744944605d206f66207468652061737365742c20746865206964656e74697479206f6620616c6c206d65646961746f72732072656d6f7665642e4c5469636b65724c696e6b6564546f41737365740c008001284964656e7469747949640000210101185469636b65720000a8011c41737365744944001d08b0416e206964656e7469747920686173206c696e6b65642061207469636b657220746f20616e2061737365742e8101506172616d65746572733a205b604964656e746974794964605d206f662063616c6c65722c205b605469636b6572605d206f66207468652061737365742c20746865206173736574206964656e746966696572205b6041737365744944605d2e085c4576656e747320666f722074686973206d6f64756c652e00ed010c4c706f6c796d6573685f7072696d6974697665731461737365742441737365745479706500013030457175697479436f6d6d6f6e0000003c45717569747950726566657272656400010024436f6d6d6f646974790002002c4669786564496e636f6d6500030010524549540004001046756e6400050054526576656e7565536861726541677265656d656e74000600445374727563747572656450726f64756374000700284465726976617469766500080018437573746f6d0400f1010144437573746f6d417373657454797065496400090028537461626c65436f696e000a002c4e6f6e46756e6769626c650400f501013c4e6f6e46756e6769626c6554797065000b0000f1010c4c706f6c796d6573685f7072696d69746976657314617373657444437573746f6d41737365745479706549640000040010010c7533320000f5010c4c706f6c796d6573685f7072696d6974697665731461737365743c4e6f6e46756e6769626c655479706500011028446572697661746976650000002c4669786564496e636f6d650001001c496e766f69636500020018437573746f6d0400f1010144437573746f6d417373657454797065496400030000f9010c4c706f6c796d6573685f7072696d6974697665731461737365742441737365744e616d650000040030011c5665633c75383e0000fd0100000201020001020c4c706f6c796d6573685f7072696d6974697665734061737365745f6964656e7469666965723c41737365744964656e74696669657200011414435553495004000502011c5b75383b20395d0000001043494e5304000502011c5b75383b20395d000100104953494e0400250101205b75383b2031325d0002000c4c45490400090201205b75383b2032305d00030010464947490400250101205b75383b2031325d00040000050200000309000000080009020000031400000008000d0204184f7074696f6e0404540111020108104e6f6e6500000010536f6d6504001102000001000011020c4c706f6c796d6573685f7072696d6974697665731461737365744046756e64696e67526f756e644e616d650000040030011c5665633c75383e000015020c4c706f6c796d6573685f7072696d69746976657320646f63756d656e7428446f63756d656e7449640000040010010c753332000019020c4c706f6c796d6573685f7072696d69746976657320646f63756d656e7420446f63756d656e74000014010c7572691d02012c446f63756d656e74557269000130636f6e74656e745f6861736821020130446f63756d656e74486173680001106e616d6539020130446f63756d656e744e616d65000120646f635f747970653d0201504f7074696f6e3c446f63756d656e74547970653e00012c66696c696e675f64617465050101384f7074696f6e3c4d6f6d656e743e00001d020c4c706f6c796d6573685f7072696d69746976657320646f63756d656e742c446f63756d656e745572690000040030011c5665633c75383e000021020c4c706f6c796d6573685f7072696d69746976657334646f63756d656e745f6861736830446f63756d656e7448617368000124104e6f6e6500000010483531320400250201205b75383b2036345d00010010483338340400290201205b75383b2034385d000200104833323004002d0201205b75383b2034305d000300104832353604000401205b75383b2033325d00040010483232340400310201205b75383b2032385d00050010483139320400350201205b75383b2032345d00060010483136300400090201205b75383b2032305d00070010483132380400ac01205b75383b2031365d00080000250200000340000000080029020000033000000008002d0200000328000000080031020000031c0000000800350200000318000000080039020c4c706f6c796d6573685f7072696d69746976657320646f63756d656e7430446f63756d656e744e616d650000040030011c5665633c75383e00003d0204184f7074696f6e0404540141020108104e6f6e6500000010536f6d6504004102000001000041020c4c706f6c796d6573685f7072696d69746976657320646f63756d656e7430446f63756d656e74547970650000040030011c5665633c75383e000045020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174614841737365744d6574616461746156616c75650000040030011c5665633c75383e0000490204184f7074696f6e040454014d020108104e6f6e6500000010536f6d6504004d0200000100004d020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174616041737365744d6574616461746156616c756544657461696c04184d6f6d656e74012800080118657870697265050101384f7074696f6e3c4d6f6d656e743e00012c6c6f636b5f7374617475735102017c41737365744d657461646174614c6f636b5374617475733c4d6f6d656e743e000051020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174615c41737365744d657461646174614c6f636b53746174757304184d6f6d656e740128010c20556e6c6f636b6564000000184c6f636b65640001002c4c6f636b6564556e74696c04002801184d6f6d656e740002000055020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174614441737365744d657461646174614e616d650000040030011c5665633c75383e000059020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174615441737365744d657461646174614c6f63616c4b65790000040028010c75363400005d020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174614441737365744d657461646174615370656300000c010c75726c6102012c4f7074696f6e3c55726c3e00012c6465736372697074696f6e690201804f7074696f6e3c41737365744d657461646174614465736372697074696f6e3e000120747970655f6465667102013c4f7074696f6e3c5665633c75383e3e0000610204184f7074696f6e0404540165020108104e6f6e6500000010536f6d650400650200000100006502084c706f6c796d6573685f7072696d6974697665730c55726c0000040030011c5665633c75383e0000690204184f7074696f6e040454016d020108104e6f6e6500000010536f6d6504006d0200000100006d020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174616041737365744d657461646174614465736372697074696f6e0000040030011c5665633c75383e0000710204184f7074696f6e04045401300108104e6f6e6500000010536f6d65040030000001000075020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174615841737365744d65746164617461476c6f62616c4b65790000040028010c753634000079020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174614041737365744d657461646174614b657900010818476c6f62616c04007502015841737365744d65746164617461476c6f62616c4b6579000000144c6f63616c04005902015441737365744d657461646174614c6f63616c4b6579000100007d0204184f7074696f6e04045401e80108104e6f6e6500000010536f6d650400e8000001000081020c4c706f6c796d6573685f7072696d69746976657324706f7274666f6c696f54506f7274666f6c696f557064617465526561736f6e0001101849737375656404014866756e64696e675f726f756e645f6e616d650d0201604f7074696f6e3c46756e64696e67526f756e644e616d653e0000002052656465656d65640001002c5472616e73666572726564080138696e737472756374696f6e5f6964850201544f7074696f6e3c496e737472756374696f6e49643e000140696e737472756374696f6e5f6d656d6f8401304f7074696f6e3c4d656d6f3e00020048436f6e74726f6c6c65725472616e7366657200030000850204184f7074696f6e0404540189020108104e6f6e6500000010536f6d6504008902000001000089020c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e7434496e737472756374696f6e49640000040028010c75363400008d02042042547265655365740404540180000400450100000091020c6070616c6c65745f636f72706f726174655f616374696f6e7330646973747269627574696f6e144576656e740001101c437265617465640c00950201204576656e74446964000099020110434149640000a1020130446973747269627574696f6e000010b841206361706974616c20646973747269627574696f6e2c20776974682064657461696c7320696e636c756465642c31017761732063726561746564206279207468652044494420287065726d697373696f6e6564206167656e742920666f7220746865204341206964656e746966696564206279206043414964602e00a8284167656e74204449442c20434127732049442c20646973747269627574696f6e2064657461696c73293842656e65666974436c61696d65641800950201204576656e744469640000950201204576656e74446964000099020110434149640000a1020130446973747269627574696f6e000018011c42616c616e63650000a502010c54617800010c51014120746f6b656e20686f6c64657227732062656e65666974206f662061206361706974616c20646973747269627574696f6e20666f722074686520676976656e206043414964602077617320636c61696d65642e0091012843616c6c6572204449442c20486f6c6465722f436c61696d616e74204449442c20434127732049442c207570646174656420646973747269627574696f6e2064657461696c732c2044494427732062656e656669742c20444944277320746178202529245265636c61696d65640c00950201204576656e7444696400009902011043414964000018011c42616c616e636500020c9853746174732066726f6d2060707573685f62656e65666974602077617320656d69747465642e001501284167656e74204449442c20434127732049442c206d61782072657175657374656420444944732c2070726f63657373656420444944732c206661696c65642044494473291c52656d6f7665640800950201204576656e744469640000990201104341496400030c8c41206361706974616c20646973747269627574696f6e207761732072656d6f7665642e0050284167656e74204449442c204341277320494429085c4576656e747320666f722074686973206d6f64756c652e0095020c4c706f6c796d6573685f7072696d697469766573286576656e745f6f6e6c79244576656e744f6e6c7904045401800004008001045400009902086070616c6c65745f636f72706f726174655f616374696f6e731043414964000008012061737365745f6964a8011c417373657449440001206c6f63616c5f69649d0201244c6f63616c4341496400009d02086070616c6c65745f636f72706f726174655f616374696f6e73244c6f63616c434149640000040010010c7533320000a1020c6070616c6c65745f636f72706f726174655f616374696f6e7330646973747269627574696f6e30446973747269627574696f6e000020011066726f6de8012c506f7274666f6c696f496400012063757272656e6379a8011c417373657449440001247065725f736861726518011c42616c616e6365000118616d6f756e7418011c42616c616e636500012472656d61696e696e6718011c42616c616e63650001247265636c61696d656439010110626f6f6c0001287061796d656e745f61742801184d6f6d656e74000128657870697265735f6174050101384f7074696f6e3c4d6f6d656e743e0000a5020c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000a9021064706f6c796d6573685f636f6d6d6f6e5f7574696c69746965731874726169747328636865636b706f696e74144576656e7400011044436865636b706f696e744372656174656414007c01484f7074696f6e3c4964656e7469747949643e0000a8011c417373657449440000ad020130436865636b706f696e744964000018011c42616c616e636500002801184d6f6d656e7400000c644120636865636b706f696e742077617320637265617465642e0021012863616c6c6572204449442c20417373657449442c20636865636b706f696e742049442c20746f74616c20737570706c792c20636865636b706f696e742074696d657374616d7029844d6178696d756d5363686564756c6573436f6d706c65786974794368616e67656408008001284964656e746974794964000028010c75363400010c2501546865206d6178696d756d20636f6d706c657869747920666f7220616e206172626974726172792061737365742773207363686564756c652073657420776173206368616e6765642e0064284743204449442c20746865206e6577206d6178696d756d293c5363686564756c654372656174656410008001284964656e7469747949640000a8011c417373657449440000b10201285363686564756c6549640000b502014c5363686564756c65436865636b706f696e747300020c884120636865636b706f696e74207363686564756c652077617320637265617465642e00b02863616c6c6572204449442c20417373657449442c207363686564756c652069642c207363686564756c65293c5363686564756c6552656d6f76656410008001284964656e7469747949640000a8011c417373657449440000b10201285363686564756c6549640000b502014c5363686564756c65436865636b706f696e747300030c884120636865636b706f696e74207363686564756c65207761732072656d6f7665642e00b02863616c6c6572204449442c20417373657449442c207363686564756c652069642c207363686564756c6529085c4576656e747320666f722074686973206d6f64756c652e00ad020c4c706f6c796d6573685f7072696d69746976657314617373657430436865636b706f696e7449640000040028010c7536340000b1021064706f6c796d6573685f636f6d6d6f6e5f7574696c69746965731874726169747328636865636b706f696e74285363686564756c6549640000040028010c7536340000b5021064706f6c796d6573685f636f6d6d6f6e5f7574696c69746965731874726169747328636865636b706f696e744c5363686564756c65436865636b706f696e7473000004011c70656e64696e67b902014042547265655365743c4d6f6d656e743e0000b902042042547265655365740404540128000400bd02000000bd020000022800c1021064706f6c796d6573685f636f6d6d6f6e5f7574696c69746965731874726169747348636f6d706c69616e63655f6d616e61676572144576656e7400012470436f6d706c69616e6365526571756972656d656e74437265617465640c008001284964656e7469747949640000a8011c417373657449440000c5020154436f6d706c69616e6365526571756972656d656e74000008cc456d6974746564207768656e206e657720636f6d706c69616e636520726571756972656d656e7420697320637265617465642eb42863616c6c6572204449442c20417373657449442c20436f6d706c69616e6365526571756972656d656e74292e70436f6d706c69616e6365526571756972656d656e7452656d6f7665640c008001284964656e7469747949640000a8011c41737365744944000010010c753332000108c4456d6974746564207768656e206120636f6d706c69616e636520726571756972656d656e742069732072656d6f7665642e982863616c6c6572204449442c20417373657449442c20726571756972656d656e745f6964292e5c4173736574436f6d706c69616e63655265706c616365640c008001284964656e7469747949640000a8011c417373657449440000f10201685665633c436f6d706c69616e6365526571756972656d656e743e000208b4456d6974746564207768656e20616e20617373657420636f6d706c69616e6365206973207265706c616365642ed8506172616d65746572733a2063616c6c6572204449442c20417373657449442c206e657720617373657420636f6d706c69616e63652e504173736574436f6d706c69616e6365526573657408008001284964656e7469747949640000a8011c41737365744944000308e0456d6974746564207768656e20616e20617373657420636f6d706c69616e6365206f6620612061737365745f69642069732072657365742e582863616c6c6572204449442c2041737365744944292e584173736574436f6d706c69616e6365526573756d656408008001284964656e7469747949640000a8011c417373657449440004080901456d6974746564207768656e20616e20617373657420636f6d706c69616e636520666f72206120676976656e2061737365745f6964206765747320726573756d652e582863616c6c6572204449442c2041737365744944292e544173736574436f6d706c69616e636550617573656408008001284964656e7469747949640000a8011c417373657449440005080901456d6974746564207768656e20616e20617373657420636f6d706c69616e636520666f72206120676976656e2061737365745f69642067657473207061757365642e582863616c6c6572204449442c2041737365744944292e70436f6d706c69616e6365526571756972656d656e744368616e6765640c008001284964656e7469747949640000a8011c417373657449440000c5020154436f6d706c69616e6365526571756972656d656e74000608e0456d6974746564207768656e20636f6d706c69616e636520726571756972656d656e7420676574206d6f6469666965642f6368616e67652eb42863616c6c6572204449442c20417373657449442c20436f6d706c69616e6365526571756972656d656e74292e785472757374656444656661756c74436c61696d49737375657241646465640c008001284964656e7469747949640000a8011c417373657449440000e1020134547275737465644973737565720007081d01456d6974746564207768656e2064656661756c7420636c61696d20697373756572206c69737420666f72206120676976656e2061737365745f696420676574732061646465642eac2863616c6c6572204449442c20417373657449442c2041646465642054727573746564497373756572292e805472757374656444656661756c74436c61696d49737375657252656d6f7665640c008001284964656e7469747949640000a8011c4173736574494400008001284964656e7469747949640008082101456d6974746564207768656e2064656661756c7420636c61696d20697373756572206c69737420666f72206120676976656e2061737365745f6964206765742072656d6f7665642eb42863616c6c6572204449442c20417373657449442c2052656d6f7665642054727573746564497373756572292e085c4576656e747320666f722074686973206d6f64756c652e00c5020c4c706f6c796d6573685f7072696d69746976657348636f6d706c69616e63655f6d616e6167657254436f6d706c69616e6365526571756972656d656e7400000c014473656e6465725f636f6e646974696f6e73c90201385665633c436f6e646974696f6e3e00014c72656365697665725f636f6e646974696f6e73c90201385665633c436f6e646974696f6e3e000108696410010c7533320000c902000002cd0200cd020c4c706f6c796d6573685f7072696d69746976657324636f6e646974696f6e24436f6e646974696f6e0000080138636f6e646974696f6e5f74797065d1020134436f6e646974696f6e5479706500011c69737375657273dd0201485665633c547275737465644973737565723e0000d1020c4c706f6c796d6573685f7072696d69746976657324636f6e646974696f6e34436f6e646974696f6e5479706500011424497350726573656e74040009010114436c61696d000000204973416273656e74040009010114436c61696d0001001c4973416e794f660400d50201285665633c436c61696d3e0002002049734e6f6e654f660400d50201285665633c436c61696d3e0003002849734964656e746974790400d90201385461726765744964656e7469747900040000d502000002090100d9020c4c706f6c796d6573685f7072696d69746976657324636f6e646974696f6e385461726765744964656e746974790001083445787465726e616c4167656e7400000020537065636966696304008001284964656e74697479496400010000dd02000002e10200e1020c4c706f6c796d6573685f7072696d69746976657324636f6e646974696f6e345472757374656449737375657200000801186973737565728001284964656e74697479496400012c747275737465645f666f72e502012854727573746564466f720000e5020c4c706f6c796d6573685f7072696d69746976657324636f6e646974696f6e2854727573746564466f720001080c416e790000002053706563696669630400e90201385665633c436c61696d547970653e00010000e902000002ed0200ed020c4c706f6c796d6573685f7072696d697469766573386964656e746974795f636c61696d24436c61696d54797065000128284163637265646974656400000024416666696c69617465000100244275794c6f636b75700002002853656c6c4c6f636b757000030050437573746f6d657244756544696c6967656e6365000400404b6e6f77596f7572437573746f6d6572000500304a7572697364696374696f6e000600204578656d707465640007001c426c6f636b656400080018437573746f6d040019010144437573746f6d436c61696d54797065496400090000f102000002c50200f502086070616c6c65745f636f72706f726174655f616374696f6e73144576656e740001205c4d617844657461696c734c656e6774684368616e67656408008001284964656e746974794964000010010c753332000008d4546865206d6178696d756d206c656e677468206f66206064657461696c736020696e20627974657320776173206368616e6765642e50284743204449442c206e6577206c656e677468297844656661756c745461726765744964656e7469746965734368616e6765640c008001284964656e7469747949640000a8011c417373657449440000f90201405461726765744964656e746974696573000108f054686520736574206f662064656661756c7420605461726765744964656e7469746965736020666f7220746865206173736574206368616e6765642ea8284167656e74204449442c20417373657449442c204e6577205461726765744964656e746974696573297044656661756c7457697468686f6c64696e675461784368616e6765640c008001284964656e7469747949640000a8011c417373657449440000a502010c546178000208c85468652064656661756c742077697468686f6c64696e672074617820666f7220746865206173736574206368616e6765642e78284167656e74204449442c20417373657449442c204e657720546178292e6044696457697468686f6c64696e675461784368616e67656410008001284964656e7469747949640000a8011c4173736574494400008001284964656e74697479496400000103012c4f7074696f6e3c5461783e000308f05468652077697468686f6c64696e672074617820737065636966696320746f20612044494420666f7220746865206173736574206368616e6765642ea4284167656e74204449442c20417373657449442c205461786564204449442c204e657720546178292e2c4341496e697469617465641000950201204576656e744469640000990201104341496400000503013c436f72706f72617465416374696f6e000021030124434144657461696c730004084c412043412077617320696e697469617465642ea8284167656e74204449442c2043412069642c207468652043412c207468652043412064657461696c73293443414c696e6b6564546f446f630c008001284964656e7469747949640000990201104341496400002503013c5665633c446f63756d656e7449643e000508844120434120776173206c696e6b656420746f206120736574206f6620646f63732eac284167656e74204449442c2043412049642c204c697374206f6620646f63206964656e746966696572732924434152656d6f7665640800950201204576656e74446964000099020110434149640006084441204341207761732072656d6f7665642e48284167656e74204449442c20434120496429445265636f7264446174654368616e6765640c00950201204576656e744469640000990201104341496400000503013c436f72706f72617465416374696f6e0007046c412043412773207265636f72642064617465206368616e6765642e085c4576656e747320666f722074686973206d6f64756c652e00f902086070616c6c65745f636f72706f726174655f616374696f6e73405461726765744964656e74697469657300000801286964656e7469746965734501013c5665633c4964656e7469747949643e00012474726561746d656e74fd02013c54617267657454726561746d656e740000fd02086070616c6c65745f636f72706f726174655f616374696f6e733c54617267657454726561746d656e740001081c496e636c7564650000001c4578636c75646500010000010304184f7074696f6e04045401a5020108104e6f6e6500000010536f6d650400a50200000100000503086070616c6c65745f636f72706f726174655f616374696f6e733c436f72706f72617465416374696f6e00001801106b696e640903011843414b696e640001246465636c5f646174652801184d6f6d656e7400012c7265636f72645f646174650d0301484f7074696f6e3c5265636f7264446174653e00011c74617267657473f90201405461726765744964656e74697469657300015c64656661756c745f77697468686f6c64696e675f746178a502010c54617800013c77697468686f6c64696e675f746178190301585665633c284964656e7469747949642c20546178293e00000903086070616c6c65745f636f72706f726174655f616374696f6e731843414b696e64000114485072656469637461626c6542656e6566697400000050556e7072656469637461626c6542656e65666974000100304973737565724e6f746963650002003852656f7267616e697a6174696f6e000300144f74686572000400000d0304184f7074696f6e0404540111030108104e6f6e6500000010536f6d650400110300000100001103086070616c6c65745f636f72706f726174655f616374696f6e73285265636f7264446174650000080110646174652801184d6f6d656e74000128636865636b706f696e74150301304341436865636b706f696e7400001503086070616c6c65745f636f72706f726174655f616374696f6e73304341436865636b706f696e74000108245363686564756c65640800b10201285363686564756c654964000028010c753634000000204578697374696e670400ad020130436865636b706f696e7449640001000019030000021d03001d030000040880a502002103086070616c6c65745f636f72706f726174655f616374696f6e7324434144657461696c730000040030011c5665633c75383e0000250300000215020029030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f74144576656e740001181c4372656174656414008001284964656e7469747949640000990201104341496400002d03013c42616c6c6f7454696d6552616e676500003103012842616c6c6f744d657461000039010110626f6f6c00000c7c4120636f72706f726174652062616c6c6f742077617320637265617465642e001501284167656e74204449442c20434127732049442c20566f74696e672073746172742f656e642c2042616c6c6f74206d657461646174612c2052435620656e61626c65643f2920566f7465436173740c008001284964656e7469747949640000990201104341496400005103013c5665633c42616c6c6f74566f74653e00010c984120766f746520776173206361737420696e206120636f72706f726174652062616c6c6f742e006028766f746572204449442c20434149642c20566f746573293052616e67654368616e6765640c008001284964656e7469747949640000990201104341496400002d03013c42616c6c6f7454696d6552616e676500020cd04120636f72706f726174652062616c6c6f74206368616e676564206974732073746172742f656e6420646174652072616e67652e0098284167656e74204449442c20434127732049442c20566f74696e672073746172742f656e64292c4d6574614368616e6765640c008001284964656e7469747949640000990201104341496400003103012842616c6c6f744d65746100030ca04120636f72706f726174652062616c6c6f74206368616e67656420697473206d657461646174612e0088284167656e74204449442c20434127732049442c204e6577206d6574616461746129285243564368616e6765640c008001284964656e74697479496400009902011043414964000039010110626f6f6c00040cac4120636f72706f726174652062616c6c6f74206368616e676564206974732052435620737570706f72742e0084284167656e74204449442c20434127732049442c204e657720737570706f7274291c52656d6f7665640800950201204576656e744469640000990201104341496400050c7c4120636f72706f726174652062616c6c6f74207761732072656d6f7665642e0050284167656e74204449442c204341277320494429085c4576656e747320666f722074686973206d6f64756c652e002d030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f743c42616c6c6f7454696d6552616e6765000008011473746172742801184d6f6d656e7400010c656e642801184d6f6d656e74000031030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f742842616c6c6f744d65746100000801147469746c653503012c42616c6c6f745469746c6500011c6d6f74696f6e733903012c5665633c4d6f74696f6e3e000035030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f742c42616c6c6f745469746c650000040030011c5665633c75383e000039030000023d03003d030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f74184d6f74696f6e00000c01147469746c654103012c4d6f74696f6e5469746c65000124696e666f5f6c696e6b450301384d6f74696f6e496e666f4c696e6b00011c63686f69636573490301405665633c43686f6963655469746c653e000041030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f742c4d6f74696f6e5469746c650000040030011c5665633c75383e000045030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f74384d6f74696f6e496e666f4c696e6b0000040030011c5665633c75383e000049030000024d03004d030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f742c43686f6963655469746c650000040030011c5665633c75383e0000510300000255030055030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f742842616c6c6f74566f74650000080114706f77657218011c42616c616e636500012066616c6c6261636b5903012c4f7074696f6e3c7531363e0000590304184f7074696f6e040454015d030108104e6f6e6500000010536f6d6504005d0300000100005d0300000504006103082c70616c6c65745f70697073205261774576656e7408244163636f756e74496401002c426c6f636b4e756d6265720110015050486973746f726963616c506970735072756e65640c008001284964656e746974794964000039010110626f6f6c000039010110626f6f6c00000445015072756e696e6720486973746f726963616c205049507320697320656e61626c6564206f722064697361626c6564202863616c6c6572204449442c206f6c642076616c75652c206e65772076616c7565293c50726f706f73616c4372656174656420008001284964656e74697479496400006503014c50726f706f7365723c4163636f756e7449643e00006d0301145069704964000018011c42616c616e636500006102012c4f7074696f6e3c55726c3e0000710301584f7074696f6e3c5069704465736372697074696f6e3e00005901015c4d61796265426c6f636b3c426c6f636b4e756d6265723e00007903013050726f706f73616c4461746100011498412050495020776173206d61646520776974682061206042616c616e636560207374616b652e00342320506172616d65746572733a00510143616c6c6572204449442c2050726f706f7365722c205049502049442c206465706f7369742c2055524c2c206465736372697074696f6e2c206578706972792074696d652c2070726f706f73616c20646174612e5050726f706f73616c5374617465557064617465640c008001284964656e74697479496400006d030114506970496400007d03013450726f706f73616c5374617465000204d854726967676572656420656163682074696d6520746865207374617465206f6620612070726f706f73616c20697320616d656e64656414566f74656414008001284964656e74697479496400000001244163636f756e74496400006d0301145069704964000039010110626f6f6c000018011c42616c616e6365000304f8604163636f756e7449646020766f7465642060626f6f6c60206f6e207468652070726f706f73616c207265666572656e636564206279206050697049646024506970436c6f7365640c008001284964656e74697479496400006d0301145069704964000039010110626f6f6c000404e850697020686173206265656e20636c6f7365642c20626f6f6c20696e6469636174657320776865746865722064617461206973207072756e656448457865637574696f6e5363686564756c65640c008001284964656e74697479496400006d0301145069704964000010012c426c6f636b4e756d626572000504e0457865637574696f6e206f6620612050495020686173206265656e207363686564756c656420617420737065636966696320626c6f636b2e7444656661756c74456e6163746d656e74506572696f644368616e6765640c008001284964656e746974794964000010012c426c6f636b4e756d626572000010012c426c6f636b4e756d626572000608d844656661756c7420656e6163746d656e7420706572696f642028696e20626c6f636b732920686173206265656e206368616e6765642e902863616c6c6572204449442c206f6c6420706572696f642c206e657720706572696f6429744d696e696d756d50726f706f73616c4465706f7369744368616e6765640c008001284964656e746974794964000018011c42616c616e6365000018011c42616c616e63650007087c4d696e696d756d206465706f73697420616d6f756e74206d6f646966696564902863616c6c6572204449442c206f6c6420616d6f756e742c206e657720616d6f756e74295c50656e64696e675069704578706972794368616e6765640c008001284964656e74697479496400005901015c4d61796265426c6f636b3c426c6f636b4e756d6265723e00005901015c4d61796265426c6f636b3c426c6f636b4e756d6265723e000808cc416d6f756e74206f6620626c6f636b7320616674657220776869636820612070656e64696e672050495020657870697265732e902863616c6c6572204449442c206f6c64206578706972792c206e65772065787069727929584d6178506970536b6970436f756e744368616e6765640c008001284964656e7469747949640000080130536b6970706564436f756e740000080130536b6970706564436f756e74000908cc546865206d6178696d756d2074696d65732061205049502063616e20626520736b697070656420776173206368616e6765642e882863616c6c6572204449442c206f6c642076616c75652c206e65772076616c756529544163746976655069704c696d69744368616e6765640c008001284964656e746974794964000010010c753332000010010c753332000a08b8546865206d6178696d756d206e756d626572206f6620616374697665205049507320776173206368616e6765642e882863616c6c6572204449442c206f6c642076616c75652c206e65772076616c7565293850726f706f73616c526566756e640c008001284964656e74697479496400006d0301145069704964000018011c42616c616e6365000b083c526566756e642070726f706f73616c482869642c20746f74616c20616d6f756e74293c536e617073686f74436c656172656408008001284964656e746974794964000081030128536e617073686f744964000c046454686520736e617073686f742077617320636c65617265642e34536e617073686f7454616b656e0c008001284964656e746974794964000081030128536e617073686f74496400008503014c5665633c536e617073686f747465645069703e000d046441206e657720736e617073686f74207761732074616b656e2e28506970536b69707065640c008001284964656e74697479496400006d03011450697049640000080130536b6970706564436f756e74000e08a0412050495020696e2074686520736e617073686f742071756575652077617320736b69707065642e802867635f6469642c207069705f69642c206e65775f736b69705f636f756e742958536e617073686f74526573756c7473456e616374656414008001284964656e7469747949640000910301484f7074696f6e3c536e617073686f7449643e0000950301685665633c2850697049642c20536b6970706564436f756e74293e00009d0301285665633c50697049643e00009d0301285665633c50697049643e000f083101526573756c74732028652e672e2c20617070726f7665642c2072656a65637465642c20616e6420736b6970706564292c207765726520656e616374656420666f7220736f6d6520504950732e51012867635f6469642c20736e617073686f745f69645f6f70742c20736b69707065645f706970735f776974685f6e65775f636f756e742c2072656a65637465645f706970732c20617070726f7665645f706970732964457865637574696f6e5363686564756c696e674661696c65640c008001284964656e74697479496400006d0301145069704964000010012c426c6f636b4e756d6265720010040d015363686564756c696e67206f66207468652050495020666f7220657865637574696f6e206661696c656420696e20746865207363686564756c65722070616c6c65742e3c4578706972795363686564756c65640c008001284964656e74697479496400006d0301145069704964000010012c426c6f636b4e756d626572001104985468652050495020686173206265656e207363686564756c656420666f72206578706972792e584578706972795363686564756c696e674661696c65640c008001284964656e74697479496400006d0301145069704964000010012c426c6f636b4e756d62657200120401015363686564756c696e67206f66207468652050495020666f7220657870697279206661696c656420696e20746865207363686564756c65722070616c6c65742e64457865637574696f6e43616e63656c6c696e674661696c656404006d0301145069704964001304f043616e63656c6c696e67207468652050495020657865637574696f6e206661696c656420696e20746865207363686564756c65722070616c6c65742e085c4576656e747320666f722074686973206d6f64756c652e006503082c70616c6c65745f706970732050726f706f73657204244163636f756e7449640100010824436f6d6d756e69747904000001244163636f756e74496400000024436f6d6d6974746565040069030124436f6d6d6974746565000100006903082c70616c6c65745f7069707324436f6d6d697474656500010824546563686e6963616c0000001c55706772616465000100006d03082c70616c6c65745f706970731450697049640000040010010c7533320000710304184f7074696f6e0404540175030108104e6f6e6500000010536f6d650400750300000100007503082c70616c6c65745f70697073385069704465736372697074696f6e0000040030011c5665633c75383e00007903082c70616c6c65745f706970733050726f706f73616c44617461000108104861736804002c0110483235360000002050726f706f73616c040030011c5665633c75383e000100007d03082c70616c6c65745f706970733450726f706f73616c53746174650001181c50656e64696e670000002052656a6563746564000100245363686564756c6564000200184661696c65640003002045786563757465640004001c45787069726564000500008103082c70616c6c65745f7069707328536e617073686f7449640000040010010c753332000085030000028903008903082c70616c6c65745f7069707338536e617073686f74746564506970000008010869646d03011450697049640001187765696768748d03013c28626f6f6c2c2042616c616e63652900008d030000040839011800910304184f7074696f6e0404540181030108104e6f6e6500000010536f6d6504008103000001000095030000029903009903000004086d0308009d030000026d0300a1031064706f6c796d6573685f636f6d6d6f6e5f7574696c69746965731874726169747324706f7274666f6c696f144576656e7400012040506f7274666f6c696f437265617465640c008001284964656e7469747949640000f0013c506f7274666f6c696f4e756d6265720000a5030134506f7274666f6c696f4e616d65000018b054686520706f7274666f6c696f20686173206265656e207375636365737366756c6c7920637265617465642e00302320506172616d6574657273302a206f726967696e20444944482a20706f7274666f6c696f206e756d626572402a20706f7274666f6c696f206e616d6540506f7274666f6c696f44656c6574656408008001284964656e7469747949640000f0013c506f7274666f6c696f4e756d626572000114b054686520706f7274666f6c696f20686173206265656e207375636365737366756c6c792072656d6f7665642e00302320506172616d6574657273302a206f726967696e20444944482a20706f7274666f6c696f206e756d62657240506f7274666f6c696f52656e616d65640c008001284964656e7469747949640000f0013c506f7274666f6c696f4e756d6265720000a5030134506f7274666f6c696f4e616d65000218fc54686520706f7274666f6c696f206964656e746966696564207769746820606e756d6020686173206265656e2072656e616d656420746f20606e616d65602e00302320506172616d6574657273302a206f726967696e20444944482a20706f7274666f6c696f206e756d626572402a20706f7274666f6c696f206e616d653855736572506f7274666f6c696f7308008001284964656e7469747949640000a90301945665633c28506f7274666f6c696f4e756d6265722c20506f7274666f6c696f4e616d65293e000314d4416c6c206e6f6e2d64656661756c7420706f7274666f6c696f206e756d6265727320616e64206e616d6573206f662061204449442e00302320506172616d6574657273302a206f726967696e20444944742a20766563746f72206f66206e756d6265722d6e616d6520706169727364506f7274666f6c696f437573746f6469616e4368616e6765640c008001284964656e7469747949640000e8012c506f7274666f6c696f496400008001284964656e746974794964000418f4437573746f6479206f66206120706f7274666f6c696f20686173206265656e20676976656e20746f206120646966666572656e74206964656e7469747900302320506172616d6574657273302a206f726967696e20444944382a20706f7274666f6c696f206964642a20706f7274666f6c696f20637573746f6469616e206469646c46756e64734d6f7665644265747765656e506f7274666f6c696f7314008001284964656e7469747949640000e8012c506f7274666f6c696f49640000e8012c506f7274666f6c696f49640000b103013c46756e644465736372697074696f6e00008401304f7074696f6e3c4d656d6f3e0005208c46756e64732068617665206d6f766564206265747765656e20706f7274666f6c696f7300302320506172616d6574657273342a204f726967696e204449442e4c2a20536f7572636520706f7274666f6c696f2e602a2044657374696e6174696f6e20706f7274666f6c696f2e882a205468652074797065206f662066756e64207468617420776173206d6f7665642e742a204f7074696f6e616c206d656d6f20666f7220746865206d6f76652e50507265417070726f766564506f7274666f6c696f0c008001284964656e7469747949640000e8012c506f7274666f6c696f49640000a8011c41737365744944000618e44120706f7274666f6c696f206861732070726520617070726f7665642074686520726563656976656d656e74206f6620616e2061737365742e00302320506172616d65746572737c2a205b604964656e746974794964605d206f66207468652063616c6c65722e21012a205b60506f7274666f6c696f4964605d20746861742077696c6c20726563656976652061737365747320776974686f7574206578706c696369742061666669726d6174696f6e2e29012a205b6041737365744944605d206f6620746865206173736574207468617420686173206265656e206578656d70742066726f6d206578706c696369742061666669726d6174696f6e2e685265766f6b65507265417070726f766564506f7274666f6c696f0c008001284964656e7469747949640000e8012c506f7274666f6c696f49640000a8011c41737365744944000718c44120706f7274666f6c696f206861732072656d6f7665642074686520617070726f76616c206f6620616e2061737365742e00302320506172616d65746572737c2a205b604964656e746974794964605d206f66207468652063616c6c65722ed02a205b60506f7274666f6c696f4964605d207468617420686164206974732070726520617070726f76616c207265766f6b65642ef42a205b6041737365744944605d206f6620746865206173736574207468617420686164206974732070726520617070726f76616c207265766f6b65642e085c4576656e747320666f722074686973206d6f64756c652e00a5030c4c706f6c796d6573685f7072696d6974697665732c6964656e746974795f696434506f7274666f6c696f4e616d650000040030011c5665633c75383e0000a903000002ad0300ad0300000408f0a50300b1030c4c706f6c796d6573685f7072696d69746976657324706f7274666f6c696f3c46756e644465736372697074696f6e0001082046756e6769626c6508012061737365745f6964a8011c41737365744944000118616d6f756e7418011c42616c616e63650000002c4e6f6e46756e6769626c650400b50301104e46547300010000b5030c4c706f6c796d6573685f7072696d6974697665730c6e6674104e465473000008012061737365745f6964a8011c4173736574494400010c696473b90301285665633c4e465449643e0000b903000002bd0300bd030c4c706f6c796d6573685f7072696d6974697665730c6e6674144e465449640000040028010c7536340000c103084c70616c6c65745f70726f746f636f6c5f666565205261774576656e7404244163636f756e7449640100010c1846656553657408008001284964656e746974794964000018011c42616c616e6365000004845468652070726f746f636f6c20666565206f6620616e206f7065726174696f6e2e38436f656666696369656e7453657408008001284964656e7469747949640000c5030120506f73526174696f000104505468652066656520636f656666696369656e742e284665654368617267656408000001244163636f756e744964000018011c42616c616e63650002043046656520636861726765642e085c4576656e747320666f722074686973206d6f64756c652e00c503084c706f6c796d6573685f7072696d69746976657320506f73526174696f0000080010010c753332000010010c7533320000c9030c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bcd03016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d10301404f7074696f6e3c5461736b4e616d653e000118726573756c74510101384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bcd03016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d10301404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bcd03016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d10301404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bcd03016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d10301404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ecd0300000408101000d10304184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d5031064706f6c796d6573685f636f6d6d6f6e5f7574696c69746965731874726169747328736574746c656d656e74205261774576656e740c184d6f6d656e7401282c426c6f636b4e756d6265720110244163636f756e744964010001603056656e75654372656174656410008001284964656e7469747949640000d903011c56656e756549640000dd03013056656e756544657461696c730000e103012456656e756554797065000004ec41206e65772076656e756520686173206265656e206372656174656420286469642c2076656e75655f69642c2064657461696c732c2074797065294c56656e756544657461696c73557064617465640c008001284964656e7469747949640000d903011c56656e756549640000dd03013056656e756544657461696c730001041501416e206578697374696e672076656e756527732064657461696c7320686173206265656e207570646174656420286469642c2076656e75655f69642c2064657461696c73294056656e756554797065557064617465640c008001284964656e7469747949640000d903011c56656e756549640000e103012456656e756554797065000204fc416e206578697374696e672076656e75652773207479706520686173206265656e207570646174656420286469642c2076656e75655f69642c2074797065294c496e737472756374696f6e41666669726d65640c008001284964656e7469747949640000e8012c506f7274666f6c696f4964000089020134496e737472756374696f6e49640003040501416e20696e737472756374696f6e20686173206265656e2061666669726d656420286469642c20706f7274666f6c696f2c20696e737472756374696f6e5f6964295041666669726d6174696f6e57697468647261776e0c008001284964656e7469747949640000e8012c506f7274666f6c696f4964000089020134496e737472756374696f6e49640004040901416e2061666669726d6174696f6e20686173206265656e2077697468647261776e20286469642c20706f7274666f6c696f2c20696e737472756374696f6e5f6964294c496e737472756374696f6e52656a656374656408008001284964656e746974794964000089020134496e737472756374696f6e4964000504d8416e20696e737472756374696f6e20686173206265656e2072656a656374656420286469642c20696e737472756374696f6e5f6964293852656365697074436c61696d656418008001284964656e746974794964000089020134496e737472756374696f6e49640000e50301144c65674964000028010c75363400000001244163636f756e7449640000e903015c4f7074696f6e3c526563656970744d657461646174613e0006047d0141207265636569707420686173206265656e20636c61696d656420286469642c20696e737472756374696f6e5f69642c206c65675f69642c20726563656970745f7569642c207369676e65722c2072656365697074206d65746164617461293856656e756546696c746572696e670c008001284964656e7469747949640000a8011c41737365744944000039010110626f6f6c0007046d0156656e75652066696c746572696e6720686173206265656e20656e61626c6564206f722064697361626c656420666f7220616e20617373657420286469642c20417373657449442c2066696c746572696e675f656e61626c6564293456656e756573416c6c6f7765640c008001284964656e7469747949640000a8011c417373657449440000f10301305665633c56656e756549643e000804e056656e75657320616464656420746f20616c6c6f77206c69737420286469642c20417373657449442c207665633c76656e75655f69643e293456656e756573426c6f636b65640c008001284964656e7469747949640000a8011c417373657449440000f10301305665633c56656e756549643e000904e056656e75657320616464656420746f20626c6f636b206c69737420286469642c20417373657449442c207665633c76656e75655f69643e29484c65674661696c6564457865637574696f6e0c008001284964656e746974794964000089020134496e737472756374696f6e49640000e50301144c65674964000a04dc457865637574696f6e206f662061206c6567206661696c656420286469642c20696e737472756374696f6e5f69642c206c65675f69642944496e737472756374696f6e4661696c656408008001284964656e746974794964000089020134496e737472756374696f6e4964000b04c8496e737472756374696f6e206661696c656420657865637574696f6e20286469642c20696e737472756374696f6e5f6964294c496e737472756374696f6e457865637574656408008001284964656e746974794964000089020134496e737472756374696f6e4964000c04d8496e737472756374696f6e206578656375746564207375636365737366756c6c79286469642c20696e737472756374696f6e5f6964294456656e7565556e617574686f72697a65640c008001284964656e7469747949640000a8011c417373657449440000d903011c56656e75654964000d04050156656e7565206e6f742070617274206f662074686520746f6b656e277320616c6c6f77206c69737420286469642c20417373657449442c2076656e75655f696429405363686564756c696e674661696c6564080089020134496e737472756374696f6e4964000060013444697370617463684572726f72000e04805363686564756c696e67206f6620696e737472756374696f6e206661696c732e58496e737472756374696f6e52657363686564756c656408008001284964656e746974794964000089020134496e737472756374696f6e4964000f086c496e737472756374696f6e2069732072657363686564756c65642e702863616c6c6572204449442c20696e737472756374696f6e5f6964294c56656e75655369676e6572735570646174656410008001284964656e7469747949640000d903011c56656e756549640000fc01385665633c4163636f756e7449643e000039010110626f6f6c0010044901416e206578697374696e672076656e75652773207369676e65727320686173206265656e207570646174656420286469642c2076656e75655f69642c207369676e6572732c207570646174655f747970652968536574746c656d656e744d616e75616c6c79457865637574656408008001284964656e746974794964000089020134496e737472756374696f6e496400110498536574746c656d656e74206d616e75616c6c7920657865637574656420286469642c2069642948496e737472756374696f6e4372656174656420008001284964656e7469747949640000f503013c4f7074696f6e3c56656e756549643e000089020134496e737472756374696f6e49640000f903016c536574746c656d656e74547970653c426c6f636b4e756d6265723e0000050101384f7074696f6e3c4d6f6d656e743e0000050101384f7074696f6e3c4d6f6d656e743e0000fd0301205665633c4c65673e00008401304f7074696f6e3c4d656d6f3e0012088841206e657720696e737472756374696f6e20686173206265656e20637265617465645101286469642c2076656e75655f69642c20696e737472756374696f6e5f69642c20736574746c656d656e745f747970652c2074726164655f646174652c2076616c75655f646174652c206c6567732c206d656d6f29684661696c6564546f45786563757465496e737472756374696f6e080089020134496e737472756374696f6e4964000060013444697370617463684572726f72001304784661696c656420746f206578656375746520696e737472756374696f6e2e80496e737472756374696f6e4175746f6d61746963616c6c7941666669726d65640c008001284964656e7469747949640000e8012c506f7274666f6c696f4964000089020134496e737472756374696f6e4964001408bc416e20696e737472756374696f6e20686173206265656e206175746f6d61746963616c6c792061666669726d65642ed101506172616d65746572733a205b604964656e746974794964605d206f66207468652063616c6c65722c205b60506f7274666f6c696f4964605d206f66207468652072656365697665722c20616e64205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e2e6c4d65646961746f7241666669726d6174696f6e52656365697665640c008001284964656e746974794964000089020134496e737472756374696f6e49640000050101384f7074696f6e3c4d6f6d656e743e001508a8416e20696e737472756374696f6e206861732061666669726d65642062792061206d65646961746f722e5101506172616d65746572733a205b604964656e746974794964605d206f6620746865206d65646961746f7220616e64205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e2e704d65646961746f7241666669726d6174696f6e57697468647261776e08008001284964656e746974794964000089020134496e737472756374696f6e4964001608f0416e20696e737472756374696f6e2061666669726d6174696f6e20686173206265656e2077697468647261776e2062792061206d65646961746f722e5101506172616d65746572733a205b604964656e746974794964605d206f6620746865206d65646961746f7220616e64205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e2e50496e737472756374696f6e4d65646961746f7273080089020134496e737472756374696f6e496400008d02015042547265655365743c4964656e7469747949643e001708bc416e20696e737472756374696f6e2077697468206d65646961746f727320686173206265656e20637265617465642e6501506172616d65746572733a205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e20616e6420746865205b604964656e746974794964605d206f6620616c6c206d65646961746f72732e085c4576656e747320666f722074686973206d6f64756c652e00d9030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e741c56656e756549640000040028010c7536340000dd030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e743056656e756544657461696c730000040030011c5665633c75383e0000e1030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e742456656e756554797065000110144f7468657200000030446973747269627574696f6e0001000c53746f0002002045786368616e676500030000e5030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e74144c656749640000040028010c7536340000e90304184f7074696f6e04045401ed030108104e6f6e6500000010536f6d650400ed030000010000ed030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e743c526563656970744d65746164617461000004000401205b75383b2033325d0000f103000002d90300f50304184f7074696f6e04045401d9030108104e6f6e6500000010536f6d650400d9030000010000f9030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e7438536574746c656d656e7454797065042c426c6f636b4e756d6265720110010c4c536574746c654f6e41666669726d6174696f6e00000034536574746c654f6e426c6f636b040010012c426c6f636b4e756d62657200010030536574746c654d616e75616c040010012c426c6f636b4e756d62657200020000fd0300000201040001040c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e740c4c656700010c2046756e6769626c6510011873656e646572e8012c506f7274666f6c696f49640001207265636569766572e8012c506f7274666f6c696f496400012061737365745f6964a8011c41737365744944000118616d6f756e7418011c42616c616e63650000002c4e6f6e46756e6769626c650c011873656e646572e8012c506f7274666f6c696f49640001207265636569766572e8012c506f7274666f6c696f49640001106e667473b50301104e465473000100204f6666436861696e10013c73656e6465725f6964656e746974798001284964656e74697479496400014472656365697665725f6964656e746974798001284964656e7469747949640001187469636b6572210101185469636b6572000118616d6f756e7418011c42616c616e63650002000005041064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974732873746174697374696373144576656e740001183853746174547970657341646465640c008001284964656e7469747949640000a8011c417373657449440000090401345665633c53746174547970653e00000c685374617420747970657320616464656420746f2061737365742e00842843616c6c6572204449442c20417373657449442c2053746174207479706573294053746174547970657352656d6f7665640c008001284964656e7469747949640000a8011c417373657449440000090401345665633c53746174547970653e00010c78537461742074797065732072656d6f7665642066726f6d2061737365742e00842843616c6c6572204449442c20417373657449442c20537461742074797065732944417373657453746174735570646174656410008001284964656e7469747949640000a8011c4173736574494400000d040120537461745479706500001d04013c5665633c537461745570646174653e00020c50417373657420737461747320757064617465642e00a42843616c6c6572204449442c20417373657449442c205374617420747970652c2055706461746573296853657441737365745472616e73666572436f6d706c69616e63650c008001284964656e7469747949640000a8011c417373657449440000350401585665633c5472616e73666572436f6e646974696f6e3e00030ca0536574205472616e7366657220636f6d706c69616e63652072756c657320666f722061737365742e00a82843616c6c6572204449442c20417373657449442c205472616e7366657220636f6e646974696f6e7329805472616e73666572436f6e646974696f6e4578656d7074696f6e7341646465640c008001284964656e74697479496400003d0401685472616e73666572436f6e646974696f6e4578656d70744b657900004501013c5665633c4964656e7469747949643e00040c150141646420604964656e7469747949646073206578656d707420666f72207472616e7366657220636f6e646974696f6e73206d61746368696e67206578656d7074206b65792e00882843616c6c6572204449442c204578656d7074206b65792c20456e74697469657329885472616e73666572436f6e646974696f6e4578656d7074696f6e7352656d6f7665640c008001284964656e74697479496400003d0401685472616e73666572436f6e646974696f6e4578656d70744b657900004501013c5665633c4964656e7469747949643e00050c210152656d6f766520604964656e7469747949646073206578656d707420666f72207472616e7366657220636f6e646974696f6e73206d61746368696e67206578656d7074206b65792e00882843616c6c6572204449442c204578656d7074206b65792c20456e74697469657329085c4576656e747320666f722074686973206d6f64756c652e0009040000020d04000d040c4c706f6c796d6573685f7072696d697469766573287374617469737469637320537461745479706500000801386f7065726174696f6e5f7479706511040128537461744f7054797065000130636c61696d5f6973737565721504017c4f7074696f6e3c28436c61696d547970652c204964656e746974794964293e000011040c4c706f6c796d6573685f7072696d697469766573287374617469737469637328537461744f705479706500010814436f756e740000001c42616c616e636500010000150404184f7074696f6e0404540119040108104e6f6e6500000010536f6d65040019040000010000190400000408ed0280001d0400000221040021040c4c706f6c796d6573685f7072696d6974697665732873746174697374696373285374617455706461746500000801106b6579322504012853746174326e644b657900011476616c7565310401304f7074696f6e3c753132383e000025040c4c706f6c796d6573685f7072696d69746976657328737461746973746963732853746174326e644b65790001082c4e6f436c61696d5374617400000014436c61696d04002904012453746174436c61696d0001000029040c4c706f6c796d6573685f7072696d69746976657328737461746973746963732453746174436c61696d00010c2841636372656469746564040039010110626f6f6c00000024416666696c69617465040039010110626f6f6c000100304a7572697364696374696f6e04002d04014c4f7074696f6e3c436f756e747279436f64653e000200002d0404184f7074696f6e0404540115010108104e6f6e6500000010536f6d65040015010000010000310404184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000350400000239040039040c4c706f6c796d6573685f7072696d6974697665734c7472616e736665725f636f6d706c69616e6365445472616e73666572436f6e646974696f6e000110404d6178496e766573746f72436f756e74040028010c753634000000504d6178496e766573746f724f776e6572736869700400a502012850657263656e7461676500010028436c61696d436f756e7410002904012453746174436c61696d00008001284964656e746974794964000028010c75363400000501012c4f7074696f6e3c7536343e00020038436c61696d4f776e65727368697010002904012453746174436c61696d00008001284964656e7469747949640000a502012850657263656e746167650000a502012850657263656e74616765000300003d040c4c706f6c796d6573685f7072696d6974697665734c7472616e736665725f636f6d706c69616e6365685472616e73666572436f6e646974696f6e4578656d70744b657900000c012061737365745f6964a8011c417373657449440001086f7011040128537461744f7054797065000128636c61696d5f74797065410401444f7074696f6e3c436c61696d547970653e0000410404184f7074696f6e04045401ed020108104e6f6e6500000010536f6d650400ed0200000100004504082870616c6c65745f73746f205261774576656e7404184d6f6d656e74012801184446756e647261697365724372656174656410008001284964656e74697479496400004904013046756e64726169736572496400004d04013846756e647261697365724e616d6500005104014846756e647261697365723c4d6f6d656e743e0000088841206e65772066756e6472616973657220686173206265656e20637265617465642efc284167656e74204449442c2066756e647261697365722069642c2066756e64726169736572206e616d652c2066756e647261697365722064657461696c732920496e76657374656418008001284964656e74697479496400004904013046756e6472616973657249640000a8011c417373657449440000a8011c41737365744944000018011c42616c616e6365000018011c42616c616e63650001089c416e20696e766573746f7220696e76657374656420696e207468652066756e647261697365722e850128496e766573746f722c2066756e647261697365725f69642c206f66666572696e6720746f6b656e2c20726169736520746f6b656e2c206f66666572696e675f746f6b656e5f616d6f756e742c2072616973655f746f6b656e5f616d6f756e74294046756e6472616973657246726f7a656e08008001284964656e74697479496400004904013046756e64726169736572496400020874412066756e6472616973657220686173206265656e2066726f7a656e2e68284167656e74204449442c2066756e64726169736572206964294846756e64726169736572556e66726f7a656e08008001284964656e74697479496400004904013046756e6472616973657249640003087c412066756e6472616973657220686173206265656e20756e66726f7a656e2e68284167656e74204449442c2066756e64726169736572206964296046756e6472616973657257696e646f774d6f6469666965641800950201204576656e7444696400004904013046756e64726169736572496400002801184d6f6d656e740000050101384f7074696f6e3c4d6f6d656e743e00002801184d6f6d656e740000050101384f7074696f6e3c4d6f6d656e743e00040898412066756e647261697365722077696e646f7720686173206265656e206d6f6469666965642e0901284167656e74204449442c2066756e647261697365722069642c206f6c645f73746172742c206f6c645f656e642c206e65775f73746172742c206e65775f656e64294046756e64726169736572436c6f73656408008001284964656e74697479496400004904013046756e64726169736572496400050878412066756e6472616973657220686173206265656e2073746f707065642e68284167656e74204449442c2066756e6472616973657220696429085c4576656e747320666f722074686973206d6f64756c652e004904082870616c6c65745f73746f3046756e6472616973657249640000040028010c75363400004d04082870616c6c65745f73746f3846756e647261697365724e616d650000040030011c5665633c75383e00005104082870616c6c65745f73746f2846756e6472616973657204184d6f6d656e740128002c011c63726561746f728001284964656e7469747949640001486f66666572696e675f706f7274666f6c696fe8012c506f7274666f6c696f49640001386f66666572696e675f6173736574a8011c4173736574494400014472616973696e675f706f7274666f6c696fe8012c506f7274666f6c696f496400013472616973696e675f6173736574a8011c4173736574494400011474696572735504014c5665633c46756e64726169736572546965723e00012076656e75655f6964d903011c56656e7565496400011473746172742801184d6f6d656e7400010c656e64050101384f7074696f6e3c4d6f6d656e743e0001187374617475735d04014046756e647261697365725374617475730001486d696e696d756d5f696e766573746d656e7418011c42616c616e6365000055040000025904005904082870616c6c65745f73746f3846756e647261697365725469657200000c0114746f74616c18011c42616c616e6365000114707269636518011c42616c616e636500012472656d61696e696e6718011c42616c616e636500005d04082870616c6c65745f73746f4046756e64726169736572537461747573000110104c6976650000001846726f7a656e00010018436c6f7365640002002c436c6f7365644561726c79000300006104083c70616c6c65745f7472656173757279205261774576656e74081c42616c616e63650118244163636f756e7449640100010c50547265617375727944697362757273656d656e7410008001284964656e74697479496400008001284964656e74697479496400000001244163636f756e744964000018011c42616c616e636500000c8844697362757273656d656e7420746f206120746172676574204964656e746974792e000101287472656173757279206964656e746974792c20746172676574206964656e746974792c20746172676574207072696d617279206b65792c20616d6f756e742968547265617375727944697362757273656d656e744661696c656410008001284964656e74697479496400008001284964656e74697479496400000001244163636f756e744964000018011c42616c616e636500010ca444697362757273656d656e7420746f206120746172676574204964656e74697479206661696c65642e000101287472656173757279206964656e746974792c20746172676574206964656e746974792c20746172676574207072696d617279206b65792c20616d6f756e74295454726561737572795265696d62757273656d656e7408008001284964656e746974794964000018011c42616c616e636500020c5c5472656173757279207265696d62757273656d656e742e006428736f75726365206964656e746974792c20616d6f756e7429085c4576656e747320666f722074686973206d6f64756c652e0065040c3870616c6c65745f7574696c6974791870616c6c6574144576656e74040454000128404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74510101384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e2452656c6179656454780c012863616c6c65725f6469648001284964656e746974794964000118746172676574000130543a3a4163636f756e744964000118726573756c74510101384469737061746368526573756c740006085052656c61796564207472616e73616374696f6e2e40504f4c594d4553483a206576656e742e4c4261746368496e7465727275707465644f6c6408006904012c4576656e74436f756e747300006d04011c4572726f724174000710ac4261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792edc496e636c75646573206120766563746f72206f66206576656e7420636f756e747320666f72206561636820646973706174636820616e64f474686520696e646578206f6620746865206669727374206661696c696e672064697370617463682061732077656c6c20617320746865206572726f722e6c504f4c594d4553483a206576656e7420646570726563617465642e5442617463684f7074696d69737469634661696c656408006904012c4576656e74436f756e74730000710401305665633c4572726f7241743e000810ac4261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792ecc496e636c75646573206120766563746f72206f66206576656e7420636f756e747320666f7220656163682063616c6c20616e6429016120766563746f72206f6620616e79206661696c65642064697370617463686573207769746820746865697220696e646963657320616e64206173736f636961746564206572726f722e6c504f4c594d4553483a206576656e7420646570726563617465642e444261746368436f6d706c657465644f6c6404006904012c4576656e74436f756e747300090cc84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722ed0496e636c75646573206120766563746f72206f66206576656e7420636f756e747320666f7220656163682064697370617463682e6c504f4c594d4553483a206576656e7420646570726563617465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909690400000210006d040000040810600071040000026d040075041064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974731062617365144576656e740001043c556e65787065637465644572726f720400790401544f7074696f6e3c44697370617463684572726f723e000004e4416e20756e6578706563746564206572726f722068617070656e656420746861742073686f756c6420626520696e766573746967617465642e085c4576656e747320666f722074686973206d6f64756c652e00790404184f7074696f6e04045401600108104e6f6e6500000010536f6d6504006000000100007d041064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974733c65787465726e616c5f6167656e7473144576656e740001143047726f7570437265617465641000950201204576656e744469640000a8011c41737365744944000035010110414749640000b8015045787472696e7369635065726d697373696f6e7300000c6c416e204167656e742047726f75702077617320637265617465642e00d42843616c6c6572204449442c204147277320417373657449442c20414727732049442c2041472773207065726d697373696f6e73295c47726f75705065726d697373696f6e73557064617465641000950201204576656e744469640000a8011c41737365744944000035010110414749640000b8015045787472696e7369635065726d697373696f6e7300010ca4416e204167656e742047726f75702773207065726d697373696f6e732077617320757064617465642e00e42843616c6c6572204449442c204147277320417373657449442c20414727732049442c2041472773206e6577207065726d697373696f6e7329284167656e7441646465640c00950201204576656e744469640000a8011c417373657449440000310101284167656e7447726f757000020c4c416e206167656e74207761732061646465642e00c82843616c6c65722f4167656e74204449442c204167656e74277320417373657449442c204167656e7427732067726f757029304167656e7452656d6f7665640c00950201204576656e744469640000a8011c4173736574494400008001284964656e74697479496400030c54416e206167656e74207761732072656d6f7665642e00a82843616c6c6572204449442c204167656e74277320417373657449442c204167656e74277320444944293047726f75704368616e6765641000950201204576656e744469640000a8011c4173736574494400008001284964656e7469747949640000310101284167656e7447726f757000040c74416e206167656e7427732067726f757020776173206368616e6765642e0019012843616c6c6572204449442c204167656e74277320417373657449442c204167656e742773204449442c20546865206e65772067726f7570206f6620746865206167656e7429085c4576656e747320666f722074686973206d6f64756c652e0081041064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974731c72656c61796572205261774576656e7404244163636f756e744964010001104c417574686f72697a6564506179696e674b65791400950201204576656e7444696400000001244163636f756e74496400000001244163636f756e744964000018011c42616c616e6365000028010c75363400000ccc417574686f72697a6174696f6e20676976656e20666f722060706179696e675f6b65796020746f2060757365725f6b6579602e0001012843616c6c6572204449442c2055736572204b65792c20506179696e67204b65792c20496e697469616c20504f4c5958206c696d69742c204175746820494429444163636570746564506179696e674b65790c00950201204576656e7444696400000001244163636f756e74496400000001244163636f756e74496400010c50416363657074656420706179696e67206b65792e00882843616c6c6572204449442c2055736572204b65792c20506179696e67204b6579294052656d6f766564506179696e674b65790c00950201204576656e7444696400000001244163636f756e74496400000001244163636f756e74496400020c4c52656d6f76656420706179696e67206b65792e00882843616c6c6572204449442c2055736572204b65792c20506179696e67204b6579294455706461746564506f6c79784c696d69741400950201204576656e7444696400000001244163636f756e74496400000001244163636f756e744964000018011c42616c616e6365000018011c42616c616e636500030c505570646174656420706f6c7978206c696d69742e0011012843616c6c6572204449442c2055736572204b65792c20506179696e67204b65792c20504f4c5958206c696d69742c206f6c642072656d61696e696e6720504f4c595829085c4576656e747320666f722074686973206d6f64756c652e0085040c4070616c6c65745f636f6e7472616374731870616c6c6574144576656e7404045400012030496e7374616e7469617465640801206465706c6f796572000130543a3a4163636f756e744964000120636f6e7472616374000130543a3a4163636f756e744964000004d8436f6e7472616374206465706c6f7965642062792061646472657373206174207468652073706563696669656420616464726573732e285465726d696e61746564080120636f6e7472616374000130543a3a4163636f756e744964048454686520636f6e7472616374207468617420776173207465726d696e617465642e012c62656e6566696369617279000130543a3a4163636f756e74496404e4546865206163636f756e7420746861742072656365697665642074686520636f6e7472616374732072656d61696e696e672062616c616e6365011868436f6e747261637420686173206265656e2072656d6f7665642e001823204e6f7465003d01546865206f6e6c792077617920666f72206120636f6e747261637420746f2062652072656d6f76656420616e6420656d697474696e672074686973206576656e742069732062792063616c6c696e6744607365616c5f7465726d696e617465602e28436f646553746f726564040124636f64655f686173682c011c543a3a48617368000204b4436f646520776974682074686520737065636966696564206861736820686173206265656e2073746f7265642e3c436f6e7472616374456d6974746564080120636f6e7472616374000130543a3a4163636f756e744964049054686520636f6e7472616374207468617420656d697474656420746865206576656e742e01106461746130011c5665633c75383e0835014461746120737570706c6965642062792074686520636f6e74726163742e204d657461646174612067656e65726174656420647572696e6720636f6e747261637420636f6d70696c6174696f6e5c6973206e656564656420746f206465636f64652069742e03049c4120637573746f6d206576656e7420656d69747465642062792074686520636f6e74726163742e2c436f646552656d6f766564040124636f64655f686173682c011c543a3a48617368000404ac4120636f6465207769746820746865207370656369666965642068617368207761732072656d6f7665642e4c436f6e7472616374436f6465557064617465640c0120636f6e7472616374000130543a3a4163636f756e744964048c54686520636f6e7472616374207468617420686173206265656e20757064617465642e01346e65775f636f64655f686173682c011c543a3a4861736804b04e657720636f646520686173682074686174207761732073657420666f722074686520636f6e74726163742e01346f6c645f636f64655f686173682c011c543a3a48617368048c50726576696f757320636f64652068617368206f662074686520636f6e74726163742e0504784120636f6e7472616374277320636f64652077617320757064617465642e1843616c6c656408011863616c6c6572000130543a3a4163636f756e744964049c546865206163636f756e7420746861742063616c6c6564207468652060636f6e7472616374602e0120636f6e7472616374000130543a3a4163636f756e744964047454686520636f6e74726163742074686174207761732063616c6c65642e061c11014120636f6e7472616374207761732063616c6c656420656974686572206279206120706c61696e206163636f756e74206f7220616e6f7468657220636f6e74726163742e001823204e6f7465003101506c65617365206b65657020696e206d696e642074686174206c696b6520616c6c206576656e74732074686973206973206f6e6c7920656d697474656420666f72207375636365737366756c290163616c6c732e20546869732069732062656361757365206f6e206661696c75726520616c6c2073746f72616765206368616e67657320696e636c7564696e67206576656e74732061726530726f6c6c6564206261636b2e3844656c656761746543616c6c6564080120636f6e7472616374000130543a3a4163636f756e74496408210154686520636f6e7472616374207468617420706572666f726d6564207468652064656c65676174652063616c6c20616e642068656e636520696e2077686f736520636f6e74657874707468652060636f64655f68617368602069732065786563757465642e0124636f64655f686173682c012c436f6465486173683c543e049c54686520636f646520686173682074686174207761732064656c65676174652063616c6c65642e071c9c4120636f6e74726163742064656c65676174652063616c6c6564206120636f646520686173682e001823204e6f7465003101506c65617365206b65657020696e206d696e642074686174206c696b6520616c6c206576656e74732074686973206973206f6e6c7920656d697474656420666f72207375636365737366756c290163616c6c732e20546869732069732062656361757365206f6e206661696c75726520616c6c2073746f72616765206368616e67657320696e636c7564696e67206576656e74732061726530726f6c6c6564206261636b2e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090989040848706f6c796d6573685f636f6e747261637473205261774576656e74081048617368012c244163636f756e744964010001083841706948617368557064617465640c008d04010c417069000091040130436861696e56657273696f6e00002c011048617368000008f0456d6974746564207768656e206120636f6e74726163742073746172747320737570706f7274696e672061206e65772041504920757067726164652e2101436f6e7461696e7320746865205b60417069605d2c205b60436861696e56657273696f6e605d2c20616e642074686520627974657320666f722074686520636f646520686173682e34534352756e74696d6543616c6c08000001244163636f756e74496400009504012c45787472696e7369634964000108bc456d6974746564207768656e206120636f6e74726163742063616c6c7320696e746f207468652072756e74696d652e2901436f6e7461696e7320746865206163636f756e74206964207365742062792074686520636f6e7472616374206f776e657220616e6420746865205b6045787472696e7369634964605d2e085c4576656e747320666f722074686973206d6f64756c652e008d040848706f6c796d6573685f636f6e7472616374730c41706900000801106465736340011c5b75383b20345d0001146d616a6f7210010c753332000091040848706f6c796d6573685f636f6e74726163747330436861696e56657273696f6e0000080130737065635f76657273696f6e10010c75333200012874785f76657273696f6e10010c753332000095040c48706f6c796d6573685f636f6e7472616374733c636861696e5f657874656e73696f6e2c45787472696e736963496400000800080108753800000801087538000099040c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f746564040110686173682c011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e24526571756573746564040110686173682c011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c6561726564040110686173682c011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909099d041064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974730c6e6674144576656e74000108504e6674436f6c6c656374696f6e437265617465640c008001284964656e7469747949640000a8011c417373657449440000a104013c4e4654436f6c6c656374696f6e4964000004b4456d6974746564207768656e2061206e6577206e667420636f6c6c656374696f6e20697320637265617465642e4c4e4654506f7274666f6c696f5570646174656414008001284964656e7469747949640000b50301104e46547300007d02014c4f7074696f6e3c506f7274666f6c696f49643e00007d02014c4f7074696f6e3c506f7274666f6c696f49643e000081020154506f7274666f6c696f557064617465526561736f6e00010cdc456d6974746564207768656e204e4654732077657265206973737565642c2072656465656d6564206f72207472616e736665727265642e0502436f6e7461696e7320746865205b604964656e746974794964605d206f66207468652072656365697665722f6973737565722f72656465656d65722c20746865205b604e465473605d2c20746865205b60506f7274666f6c696f4964605d206f662074686520736f757263652c20746865205b60506f7274666f6c696f4964605dd46f66207468652064657374696e6174696f6e20616e6420746865205b60506f7274666f6c696f557064617465526561736f6e605d2e085c4576656e747320666f722074686973206d6f64756c652e00a1040c4c706f6c796d6573685f7072696d6974697665730c6e66743c4e4654436f6c6c656374696f6e49640000040028010c7536340000a5040c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144576656e7404045400011838536f6c7574696f6e53746f7265640c011c636f6d70757465a904013c456c656374696f6e436f6d707574650001186f726967696e290101504f7074696f6e3c543a3a4163636f756e7449643e000130707265765f656a656374656439010110626f6f6c00001cb44120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e00510154686520606f726967696e6020696e6469636174657320746865206f726967696e206f662074686520736f6c7574696f6e2e20496620606f726967696e602069732060536f6d65284163636f756e74496429602c55017468652073746f72656420736f6c7574696f6e20776173207375626d6974656420696e20746865207369676e65642070686173652062792061206d696e657220776974682074686520604163636f756e744964602e25014f74686572776973652c2074686520736f6c7574696f6e207761732073746f7265642065697468657220647572696e672074686520756e7369676e6564207068617365206f722062794d0160543a3a466f7263654f726967696e602e205468652060626f6f6c6020697320607472756560207768656e20612070726576696f757320736f6c7574696f6e2077617320656a656374656420746f206d616b6548726f6f6d20666f722074686973206f6e652e44456c656374696f6e46696e616c697a656408011c636f6d70757465a904013c456c656374696f6e436f6d7075746500011473636f7265ad040134456c656374696f6e53636f7265000104190154686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682074686520676976656e20636f6d7075746174696f6e20616e642073636f72652e38456c656374696f6e4661696c656400020c4c416e20656c656374696f6e206661696c65642e0001014e6f74206d7563682063616e20626520736169642061626f757420776869636820636f6d7075746573206661696c656420696e207468652070726f636573732e20526577617264656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0003042501416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e1c536c617368656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0004042101416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e4450686173655472616e736974696f6e65640c011066726f6db104015450686173653c543a3a426c6f636b4e756d6265723e000108746fb104015450686173653c543a3a426c6f636b4e756d6265723e000114726f756e6410010c753332000504b85468657265207761732061207068617365207472616e736974696f6e20696e206120676976656e20726f756e642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a904089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653c456c656374696f6e436f6d707574650001141c4f6e436861696e000000185369676e656400010020556e7369676e65640002002046616c6c6261636b00030024456d657267656e637900040000ad04084473705f6e706f735f656c656374696f6e7334456c656374696f6e53636f726500000c01346d696e696d616c5f7374616b6518013c457874656e64656442616c616e636500012473756d5f7374616b6518013c457874656e64656442616c616e636500014473756d5f7374616b655f7371756172656418013c457874656e64656442616c616e63650000b104089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651450686173650408426e011001100c4f6666000000185369676e656400010020556e7369676e65640400b504012828626f6f6c2c20426e2900020024456d657267656e637900030000b5040000040839011000b904084470616c6c65745f746573745f7574696c73205261774576656e7404244163636f756e744964010001082444696453746174757308008001284964656e74697479496400000001244163636f756e744964000008e4456d6974732074686520604964656e7469747949646020616e642074686520604163636f756e74496460206f66207468652063616c6c65722e702843616c6c6572204449442c2043616c6c6572206163636f756e7429244364645374617475730c007c01484f7074696f6e3c4964656e7469747949643e00000001244163636f756e744964000039010110626f6f6c00010c550153686f777320746865206044494460206173736f63696174656420746f2074686520604163636f756e744964602c20616e64206120666c616720696e646963617465732069662074686174204449442068617320614076616c69642043444420636c61696d2ed828546172676574204449442c20546172676574204163636f756e742c20612076616c69642043444420636c61696d2065786973747329085c4576656e747320666f722074686973206d6f64756c652e00bd0408306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000c1040000022c00c504000002cd0300c90408306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ecd04014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65c4016473705f72756e74696d653a3a52756e74696d65537472696e670000cd040000061000d1040c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e000010684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e0034232320436f6d706c6578697479202d20604f28312960387365745f686561705f7061676573040114706167657328010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646530011c5665633c75383e0002106453657420746865206e65772072756e74696d6520636f64652e0034232320436f6d706c657869747931012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f6465605c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0034232320436f6d706c65786974798c2d20604f2843296020776865726520604360206c656e677468206f662060636f6465602c7365745f73746f726167650401146974656d73d50401345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973dd0401205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed504000002d90400d90400000408303000dd040000023000e1040c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2001185765696768740001246d61785f626c6f636b2001185765696768740001247065725f636c617373e50401845065724469737061746368436c6173733c57656967687473506572436c6173733e0000e5040c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401e904000c01186e6f726d616ce90401045400012c6f7065726174696f6e616ce9040104540001246d616e6461746f7279e9040104540000e9040c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632001185765696768740001346d61785f65787472696e736963ed0401384f7074696f6e3c5765696768743e0001246d61785f746f74616ced0401384f7074696f6e3c5765696768743e0001207265736572766564ed0401384f7074696f6e3c5765696768743e0000ed0404184f7074696f6e04045401200108104e6f6e6500000010536f6d650400200000010000f1040c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178f50401545065724469737061746368436c6173733c7533323e0000f5040c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f7279100104540000f904082873705f776569676874733c52756e74696d65446257656967687400000801107265616428010c753634000114777269746528010c7536340000fd04082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65c4013452756e74696d65537472696e67000124696d706c5f6e616d65c4013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069730105011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800000105040c436f77040454010505000400050500000005050000020905000905000004080d0510000d0500000308000000080011050c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657415050c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454011905045300000400210501185665633c543e00001905000004081d0528001d050c4473705f636f6e73656e7375735f626162650c617070185075626c696300000400c901013c737232353531393a3a5075626c6963000021050000021905002505084873705f636f6e73656e7375735f736c6f747310536c6f740000040028010c753634000029050c4473705f636f6e73656e7375735f626162651c64696765737473504e657874436f6e66696744657363726970746f72000104085631080104632d050128287536342c2075363429000134616c6c6f7765645f736c6f747331050130416c6c6f776564536c6f7473000100002d05000004082828003105084473705f636f6e73656e7375735f6261626530416c6c6f776564536c6f747300010c305072696d617279536c6f7473000000745072696d617279416e645365636f6e64617279506c61696e536c6f74730001006c5072696d617279416e645365636f6e64617279565246536c6f74730002000035050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540104045300000400390501185665633c543e0000390500000204003d0504184f7074696f6e0404540141050108104e6f6e6500000010536f6d6504004105000001000041050c4473705f636f6e73656e7375735f626162651c646967657374732450726544696765737400010c1c5072696d6172790400450501405072696d617279507265446967657374000100385365636f6e64617279506c61696e04004905015c5365636f6e64617279506c61696e507265446967657374000200305365636f6e6461727956524604004d0501545365636f6e646172795652465072654469676573740003000045050c4473705f636f6e73656e7375735f626162651c64696765737473405072696d617279507265446967657374000010013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7425050110536c6f740001287672665f6f75747075740401245652464f75747075740001247672665f70726f6f662502012056524650726f6f66000049050c4473705f636f6e73656e7375735f626162651c646967657374735c5365636f6e64617279506c61696e507265446967657374000008013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7425050110536c6f7400004d050c4473705f636f6e73656e7375735f626162651c64696765737473545365636f6e64617279565246507265446967657374000010013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7425050110536c6f740001287672665f6f75747075740401245652464f75747075740001247672665f70726f6f662502012056524650726f6f6600005105084473705f636f6e73656e7375735f62616265584261626545706f6368436f6e66696775726174696f6e0000080104632d050128287536342c2075363429000134616c6c6f7765645f736c6f747331050130416c6c6f776564536c6f7473000055050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540159050453000004005d0501185665633c543e00005905000004082810005d0500000259050061050c2c70616c6c65745f626162651870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f6665050184426f783c45717569766f636174696f6e50726f6f663c543a3a4865616465723e3e00013c6b65795f6f776e65725f70726f6f6671050140543a3a4b65794f776e657250726f6f6600001009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f6665050184426f783c45717569766f636174696f6e50726f6f663c543a3a4865616465723e3e00013c6b65795f6f776e65725f70726f6f6671050140543a3a4b65794f776e657250726f6f6600012009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e0d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e48706c616e5f636f6e6669675f6368616e6765040118636f6e666967290501504e657874436f6e66696744657363726970746f720002105d01506c616e20616e2065706f636820636f6e666967206368616e67652e205468652065706f636820636f6e666967206368616e6765206973207265636f7264656420616e642077696c6c20626520656e6163746564206f6e5101746865206e6578742063616c6c20746f2060656e6163745f65706f63685f6368616e6765602e2054686520636f6e6669672077696c6c20626520616374697661746564206f6e652065706f63682061667465722e59014d756c7469706c652063616c6c7320746f2074686973206d6574686f642077696c6c207265706c61636520616e79206578697374696e6720706c616e6e656420636f6e666967206368616e6765207468617420686164546e6f74206265656e20656e6163746564207965742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6505084873705f636f6e73656e7375735f736c6f74734445717569766f636174696f6e50726f6f660818486561646572016905084964011d05001001206f6666656e6465721d0501084964000110736c6f7425050110536c6f7400013066697273745f686561646572690501184865616465720001347365636f6e645f6865616465726905011848656164657200006905102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d62657201101048617368016d050014012c706172656e745f686173682c0130486173683a3a4f75747075740001186e756d626572cd0401184e756d62657200012873746174655f726f6f742c0130486173683a3a4f757470757400013c65787472696e736963735f726f6f742c0130486173683a3a4f757470757400011864696765737434011844696765737400006d050c2873705f72756e74696d65187472616974732c426c616b6554776f323536000000007105082873705f73657373696f6e3c4d656d6265727368697050726f6f6600000c011c73657373696f6e10013053657373696f6e496e646578000128747269655f6e6f646573dd0401305665633c5665633c75383e3e00013c76616c696461746f725f636f756e7410013856616c696461746f72436f756e74000075050c2c70616c6c65745f626162651870616c6c6574144572726f7204045400011060496e76616c696445717569766f636174696f6e50726f6f660000043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c69644b65794f776e65727368697050726f6f66000104310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400020415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e50496e76616c6964436f6e66696775726174696f6e0003048c5375626d697474656420636f6e66696775726174696f6e20697320696e76616c69642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090979050c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77240124543a3a4d6f6d656e7400003c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7d050000040c001839010081050c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e6465780000309841737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e00dc5061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00f02d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e207472616e7366657208010c6e6577850501504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e6465780001305d0141737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6eb86973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0025012d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e1066726565040114696e64657810013c543a3a4163636f756e74496e646578000230944672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e005d015061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e000d012d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e0084456d6974732060496e646578467265656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e38666f7263655f7472616e736665720c010c6e6577850501504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a6539010110626f6f6c0003345501466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c7265616479e868656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00a42d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e41012d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004304101467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d757374206861766520616c6e6f6e2d66726f7a656e206163636f756e742060696e646578602e00ac2d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e0088456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e85050c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780110011408496404000001244163636f756e74496400000014496e6465780400cd0401304163636f756e74496e6465780001000c526177040030011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400090201205b75383b2032305d0004000089050c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909098d050000029105009105083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c010869640d0501384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e739505011c526561736f6e73000095051064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974732062616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c000200009905083c70616c6c65745f62616c616e6365731043616c6c040454000118207472616e73666572080110646573748505018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d901011c42616c616e6365000058d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e1d0149742077696c6c2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d2062792074686520605472616e73666572466565602e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e002823203c7765696768743e2d012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f72c82020696e70757420636f6e6669672074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e65012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c657820636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365d0202020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e842d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d41012d2042617365205765696768743a2037332e363420c2b5732c20776f7273742063617365207363656e6172696f20286163636f756e7420637265617465642c206163636f756e742072656d6f76656429dc2d204442205765696768743a2031205265616420616e64203120577269746520746f2064657374696e6174696f6e206163636f756e742e11012d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e2c23203c2f7765696768743e487472616e736665725f776974685f6d656d6f0c0110646573748505018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d901011c42616c616e63650001106d656d6f8401304f7074696f6e3c4d656d6f3e000120fc5472616e7366657220746865206e61746976652063757272656e63792077697468207468652068656c70206f66206964656e74696669657220737472696e67ec746869732066756e6374696f6e616c6974792063616e2068656c7020746f20646966666572656e746961746520746865207472616e73666572732e002823203c7765696768743e41012d2042617365205765696768743a2037332e363420c2b5732c20776f7273742063617365207363656e6172696f20286163636f756e7420637265617465642c206163636f756e742072656d6f76656429dc2d204442205765696768743a2031205265616420616e64203120577269746520746f2064657374696e6174696f6e206163636f756e742e11012d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e2c23203c2f7765696768743e906465706f7369745f626c6f636b5f7265776172645f726573657276655f62616c616e636504011476616c7565d901011c42616c616e6365000204dc4d6f766520736f6d6520504f4c59582066726f6d2062616c616e6365206f662073656c6620746f2062616c616e6365206f66204252522e2c7365745f62616c616e63650c010c77686f8505018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001206e65775f66726565d901011c42616c616e63650001306e65775f7265736572766564d901011c42616c616e636500031890536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c0501616c736f2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f757263658505018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000110646573748505018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d901011c42616c616e636500041c4d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e002823203c7765696768743e3d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e742069738c20206e6f7420617373756d656420746f20626520696e20746865206f7665726c61792e2c23203c2f7765696768743e506275726e5f6163636f756e745f62616c616e6365040118616d6f756e7418011c42616c616e636500050429014275726e732074686520676976656e20616d6f756e74206f6620746f6b656e732066726f6d207468652063616c6c6572277320667265652c20756e6c6f636b65642062616c616e63652e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e9d05083c70616c6c65745f62616c616e636573144572726f72040454000114544c69717569646974795265737472696374696f6e73000004c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c204f766572666c6f7700010470476f7420616e206f766572666c6f7720616674657220616464696e674c496e73756666696369656e7442616c616e63650002047442616c616e636520746f6f206c6f7720746f2073656e642076616c7565484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369744852656365697665724364644d697373696e6700040488526563656976657220646f6573206e6f74206861766520612076616c69642043444400a1050c3473705f61726974686d657469632c66697865645f706f696e742446697865645531323800000400180110753132380000a505086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000a905000002ad0500ad05082873705f7765696768747358576569676874546f466565436f656666696369656e74041c42616c616e6365011800100134636f6566665f696e746567657218011c42616c616e6365000128636f6566665f667261639101011c50657262696c6c0001206e6567617469766539010110626f6f6c00011864656772656508010875380000b1050c4c706f6c796d6573685f7072696d697469766573206964656e74697479244469645265636f726404244163636f756e74496401000004012c7072696d6172795f6b6579290101444f7074696f6e3c4163636f756e7449643e0000b50500000408b905bd0500b9050c3c70616c6c65745f6964656e746974791474797065732c436c61696d3173744b657900000801187461726765748001284964656e746974794964000128636c61696d5f74797065ed020124436c61696d547970650000bd050c3c70616c6c65745f6964656e746974791474797065732c436c61696d326e644b657900000801186973737565728001284964656e74697479496400011473636f70651d0101344f7074696f6e3c53636f70653e0000c1050c4c706f6c796d6573685f7072696d697469766573347365636f6e646172795f6b6579244b65795265636f726404244163636f756e7449640100010c285072696d6172794b657904008001284964656e746974794964000000305365636f6e646172794b657904008001284964656e746974794964000100444d756c74695369675369676e65724b657904000001244163636f756e74496400020000c50500000408800000c90500000408cd052800cd050c4c706f6c796d6573685f7072696d697469766573347365636f6e646172795f6b6579245369676e61746f727904244163636f756e74496401000108204964656e7469747904008001284964656e7469747949640000001c4163636f756e7404000001244163636f756e74496400010000d1050c4c706f6c796d6573685f7072696d69746976657334617574686f72697a6174696f6e34417574686f72697a6174696f6e08244163636f756e7449640100184d6f6d656e74012800140148617574686f72697a6174696f6e5f646174612d010170417574686f72697a6174696f6e446174613c4163636f756e7449643e000134617574686f72697a65645f62798001284964656e746974794964000118657870697279050101384f7074696f6e3c4d6f6d656e743e00011c617574685f696428010c753634000114636f756e7410010c7533320000d50500000408802800d905083c70616c6c65745f6964656e746974791c56657273696f6e0000040008010875380000dd0500000408808000e105083c70616c6c65745f6964656e746974791043616c6c040454000160406364645f72656769737465725f6469640801387461726765745f6163636f756e74000130543a3a4163636f756e7449640001387365636f6e646172795f6b65797398017c5665633c5365636f6e646172794b65793c543a3a4163636f756e7449643e3e000020b8526567697374657220607461726765745f6163636f756e746020776974682061206e6577204964656e746974792e002423204661696c75726545012d20606f726967696e602068617320746f206265206120616374697665204344442070726f76696465722e20496e616374697665204344442070726f7669646572732063616e6e6f7420616464206e65771c636c61696d732e5d012d20607461726765745f6163636f756e746020287072696d617279206b6579206f6620746865206e6577204964656e74697479292063616e206265206c696e6b656420746f206a757374206f6e6520616e64206f6e6c79346f6e65206964656e746974792ef42d2045787465726e616c207365636f6e64617279206b6579732063616e206265206c696e6b656420746f206a757374206f6e65206964656e746974792e54696e76616c69646174655f6364645f636c61696d730c010c6364648001284964656e74697479496400013064697361626c655f66726f6d280124543a3a4d6f6d656e74000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e0001102101496e76616c69646174657320616e7920636c61696d2067656e6572617465642062792060636464602066726f6d206064697361626c655f66726f6d602074696d657374616d70732e009c596f752063616e20616c736f20646566696e6520616e2065787069726174696f6e2074696d652c6d0177686963682077696c6c20696e76616c696461746520616c6c20636c61696d732067656e657261746564206279207468617420606364646020616e642072656d6f766520697420617320434444206d656d6265722067726f75702e486163636570745f7072696d6172795f6b6579080140726f746174696f6e5f617574685f696428010c7536340001506f7074696f6e616c5f6364645f617574685f69640501012c4f7074696f6e3c7536343e000234650143616c6c2074686973207769746820746865206e6577207072696d617279206b65792e20427920696e766f6b696e672074686973206d6574686f642c2063616c6c6572206163636570747320617574686f72697a6174696f6e6501746f206265636f6d6520746865206e6577207072696d617279206b6579206f66207468652069737375696e67206964656e746974792e20496620612043444420736572766963652070726f766964657220617070726f766564250174686973206368616e676520286f722074686973206973206e6f74207265717569726564292c207072696d617279206b6579206f66207468652044494420697320757064617465642e005d015468652063616c6c657220286e6577207072696d617279206b657929206d757374206265206569746865722061207365636f6e64617279206b6579206f66207468652069737375696e67206964656e746974792c206f7264756e6c696e6b656420746f20616e79206964656e746974792e005d01446966666572732066726f6d20726f746174655f7072696d6172795f6b65795f746f5f7365636f6e6461727920696e20746861742069742077696c6c20756e6c696e6b20746865206f6c64207072696d617279206b6579a4696e7374656164206f66206c656176696e672069742061732061207365636f6e64617279206b65792e002c2320417267756d656e74731d012a20606f776e65725f617574685f69646020417574686f72697a6174696f6e2066726f6d20746865206f776e65722077686f20696e6974696174656420746865206368616e6765e42a20606364645f617574685f69646020417574686f72697a6174696f6e2066726f6d20612043444420736572766963652070726f7669646572986368616e67655f6364645f726571756972656d656e745f666f725f6d6b5f726f746174696f6e040134617574685f726571756972656439010110626f6f6c00031435015365742069662043444420617574686f72697a6174696f6e20697320726571756972656420666f72207570646174696e67207072696d617279206b6579206f6620616e206964656e746974792e7843616c6c61626c652076696120726f6f742028676f7665726e616e636529002c2320417267756d656e7473cc2a2060617574685f7265717569726564602043444420417574686f72697a6174696f6e207265717569726564206f72206e6f74506a6f696e5f6964656e746974795f61735f6b657904011c617574685f696428010c753634000404904a6f696e20616e206964656e746974792061732061207365636f6e64617279206b65792e546c656176655f6964656e746974795f61735f6b65790005048c4c6561766520746865207365636f6e64617279206b65792773206964656e746974792e246164645f636c61696d0c01187461726765748001284964656e746974794964000114636c61696d09010114436c61696d000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e00060cc4416464732061206e657720636c61696d207265636f7264206f7220656469747320616e206578697374696e67206f6e652e00a84f6e6c792063616c6c6564206279206469645f6973737565722773207365636f6e64617279206b65792e307265766f6b655f636c61696d0801187461726765748001284964656e746974794964000114636c61696d09010114436c61696d000704944d61726b73207468652073706563696669656420636c61696d206173207265766f6b65642e54667265657a655f7365636f6e646172795f6b657973000810c449742064697361626c657320616c6c207365636f6e64617279206b657973206174206064696460206964656e746974792e002023204572726f7273005c756e667265657a655f7365636f6e646172795f6b657973000904dc52652d656e61626c657320616c6c207365636f6e64617279206b657973206f66207468652063616c6c65722773206964656e746974792e446164645f617574686f72697a6174696f6e0c0118746172676574cd05015c5369676e61746f72793c543a3a4163636f756e7449643e000110646174612d01017c417574686f72697a6174696f6e446174613c543a3a4163636f756e7449643e000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e000a04584164647320616e20617574686f72697a6174696f6e2e5072656d6f76655f617574686f72697a6174696f6e0c0118746172676574cd05015c5369676e61746f72793c543a3a4163636f756e7449643e00011c617574685f696428010c7536340001445f617574685f6973737565725f7061797339010110626f6f6c000b086452656d6f76657320616e20617574686f72697a6174696f6e2e75015f617574685f6973737565725f706179732064657465726d696e657320776865746865722074686520697373756572206f662074686520617574686f7269736174696f6e207061797320746865207472616e73616374696f6e206665654067635f6164645f6364645f636c61696d0401187461726765748001284964656e746974794964000c044501417373756d696e6720746869732069732065786563757465642062792074686520474320766f74696e67206d616a6f726974792c20616464732061206e65772063646420636c61696d207265636f72642e4c67635f7265766f6b655f6364645f636c61696d0401187461726765748001284964656e746974794964000d046901417373756d696e6720746869732069732065786563757465642062792074686520474320766f74696e67206d616a6f726974792c2072656d6f76657320616e206578697374696e672063646420636c61696d207265636f72642e547265766f6b655f636c61696d5f62795f696e6465780c01187461726765748001284964656e746974794964000128636c61696d5f74797065ed020124436c61696d5479706500011473636f70651d0101344f7074696f6e3c53636f70653e000e10f5015265766f6b6573206120737065636966696320636c61696d207573696e6720697473205b436c61696d20556e6971756520496e6465785d282f70616c6c65745f6964656e746974792f696e6465782e68746d6c23636c61696d2d756e697175652d696e6465782920636f6d706f7365642062792060746172676574602c6860636c61696d5f74797065602c20616e64206073636f7065602e000501506c65617365206e6f7465207468617420606f726967696e60206d7573742062652074686520697373756572206f66207468652074617267657420636c61696d2e7c726f746174655f7072696d6172795f6b65795f746f5f7365636f6e6461727908011c617574685f696428010c7536340001506f7074696f6e616c5f6364645f617574685f69640501012c4f7074696f6e3c7536343e000f38650143616c6c2074686973207769746820746865206e6577207072696d617279206b65792e20427920696e766f6b696e672074686973206d6574686f642c2063616c6c6572206163636570747320617574686f72697a6174696f6e6501746f206265636f6d6520746865206e6577207072696d617279206b6579206f66207468652069737375696e67206964656e746974792e20496620612043444420736572766963652070726f766964657220617070726f766564290174686973206368616e67652c20286f722074686973206973206e6f74207265717569726564292c207072696d617279206b6579206f66207468652044494420697320757064617465642e005d015468652063616c6c657220286e6577207072696d617279206b657929206d757374206265206569746865722061207365636f6e64617279206b6579206f66207468652069737375696e67206964656e746974792c206f7264756e6c696e6b656420746f20616e79206964656e746974792e006101446966666572732066726f6d206163636570745f7072696d6172795f6b657920696e20746861742069742077696c6c206c6561766520746865206f6c64207072696d617279206b65792061732061207365636f6e6461727985016b6579207769746820746865207065726d697373696f6e732073706563696669656420696e2074686520636f72726573706f6e64696e6720526f746174655072696d6172794b6579546f5365636f6e6461727920617574686f72697a6174696f6ea4696e7374656164206f6620756e6c696e6b696e6720746865206f6c64207072696d617279206b65792e002c2320417267756d656e74731d012a20606f776e65725f617574685f69646020417574686f72697a6174696f6e2066726f6d20746865206f776e65722077686f20696e6974696174656420746865206368616e6765e42a20606364645f617574685f69646020417574686f72697a6174696f6e2066726f6d20612043444420736572766963652070726f7669646572946164645f7365636f6e646172795f6b6579735f776974685f617574686f72697a6174696f6e08013c6164646974696f6e616c5f6b657973e505019c5665633c5365636f6e646172794b657957697468417574683c543a3a4163636f756e7449643e3e000128657870697265735f6174280124543a3a4d6f6d656e74001034b041646473207365636f6e64617279206b65797320746f20746172676574206964656e7469747920606964602e0039014b65797320617265206469726563746c7920616464656420746f206964656e7469747920626563617573652065616368206f66207468656d2068617320616e20617574686f72697a6174696f6e2e00302320417267756d656e74733a0901202020202d20606f726967696e60207768696368206d75737420626520746865207072696d617279206b6579206f6620746865206964656e7469747920606964602ed4202020202d206069646020746f207768696368206e6577207365636f6e64617279206b6579732077696c6c2062652061646465642ed8202020202d20606164646974696f6e616c5f6b6579736020776869636820696e636c75646573207365636f6e64617279206b6579732c090120202020202020636f75706c6564207769746820617574686f72697a6174696f6e20646174612c20746f2061646420746f20746172676574206964656e746974792e002023204572726f7273ac202020202d2043616e206f6e6c792063616c6c6564206279207072696d617279206b6579206f776e65722ed0202020202d204b6579732073686f756c642062652061626c6520746f206c696e6b656420746f20616e79206964656e746974792e747365745f7365636f6e646172795f6b65795f7065726d697373696f6e7308010c6b6579000130543a3a4163636f756e7449640001147065726d73a0012c5065726d697373696f6e7300110cc853657473207065726d697373696f6e7320666f7220616e20737065636966696320607461726765745f6b657960206b65792e0035014f6e6c7920746865207072696d617279206b6579206f6620616e206964656e746974792069732061626c6520746f20736574207365636f6e64617279206b6579207065726d697373696f6e732e5472656d6f76655f7365636f6e646172795f6b6579730401386b6579735f746f5f72656d6f7665fc01445665633c543a3a4163636f756e7449643e001214d452656d6f76657320737065636966696564207365636f6e64617279206b657973206f662061204449442069662070726573656e742e002023204572726f727300cc5468652065787472696e7369632063616e206f6e6c792063616c6c6564206279207072696d617279206b6579206f776e65722e6872656769737465725f637573746f6d5f636c61696d5f74797065040108747930011c5665633c75383e0013186c526567697374657220637573746f6d20636c61696d20747970652e002023204572726f727349012a2060437573746f6d436c61696d54797065416c7265616479457869737473602054686520747970652074686174206973206265696e67207265676973746572656420616c7265616479206578697374732ed42a2060436f756e7465724f766572666c6f776020437573746f6d436c61696d54797065496420686173206f766572666c6f7765642ec82a2060546f6f4c6f6e6760205468652074797065206265696e67207265676973746572656420697320746f6f206c616e672e646364645f72656769737465725f6469645f776974685f6364640c01387461726765745f6163636f756e74000130543a3a4163636f756e7449640001387365636f6e646172795f6b65797398017c5665633c5365636f6e646172794b65793c543a3a4163636f756e7449643e3e000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e0014205901526567697374657220607461726765745f6163636f756e746020776974682061206e6577204964656e7469747920616e6420697373756520612043444420636c61696d2077697468206120626c616e6b204364644964002423204661696c75726545012d20606f726967696e602068617320746f206265206120616374697665204344442070726f76696465722e20496e616374697665204344442070726f7669646572732063616e6e6f7420616464206e65771c636c61696d732e5d012d20607461726765745f6163636f756e746020287072696d617279206b6579206f6620746865206e6577204964656e74697479292063616e206265206c696e6b656420746f206a757374206f6e6520616e64206f6e6c79346f6e65206964656e746974792ef42d2045787465726e616c207365636f6e64617279206b6579732063616e206265206c696e6b656420746f206a757374206f6e65206964656e746974792e546372656174655f6368696c645f6964656e746974790401347365636f6e646172795f6b6579000130543a3a4163636f756e74496400153019014372656174652061206368696c64206964656e7469747920616e64206d616b652074686520607365636f6e646172795f6b6579602069742773207072696d617279206b65792e00c44f6e6c7920746865207072696d617279206b65792063616e20637265617465206368696c64206964656e7469746965732e002c2320417267756d656e747365012d20607365636f6e646172795f6b65796020746865207365636f6e64617279206b657920746861742077696c6c206265636f6d6520746865207072696d617279206b6579206f6620746865206e6577206964656e746974792e002023204572726f727305012d20604b65794e6f74416c6c6f77656460206f6e6c7920746865207072696d617279206b65792063616e206372656174652061206e6577206964656e746974792e4d012d20604e6f74415369676e6572602074686520607365636f6e646172795f6b657960206973206e6f742061207365636f6e64617279206b6579206f66207468652063616c6c65722773206964656e746974792e6d012d20604163636f756e744b657949734265696e6755736564602074686520607365636f6e646172795f6b6579602063616e277420626520756e6c696e6b65642066726f6d20697427732063757272656e74206964656e746974792ea1012d206049734368696c644964656e7469747960207468652063616c6c65722773206964656e7469747920697320616c72656164792061206368696c64206964656e7469747920616e642063616e277420637265617465206368696c64206964656e7469746965732e5c6372656174655f6368696c645f6964656e7469746965730801286368696c645f6b657973f10501b85665633c4372656174654368696c644964656e7469747957697468417574683c543a3a4163636f756e7449643e3e000128657870697265735f6174280124543a3a4d6f6d656e7400163c684372656174652061206368696c64206964656e7469746965732e002501546865206e6577207072696d617279206b657920666f722065616368206368696c64206964656e746974792077696c6c206e65656420746f207369676e20286f66662d636861696e2944616e20617574686f72697a6174696f6e2e00c44f6e6c7920746865207072696d617279206b65792063616e20637265617465206368696c64206964656e7469746965732e002c2320417267756d656e747349012d20606368696c645f6b6579736020746865206b65797320746861742077696c6c206265636f6d65207072696d617279206b657973206f66207468656972206f776e206368696c64206964656e746974792e002023204572726f727305012d20604b65794e6f74416c6c6f77656460206f6e6c7920746865207072696d617279206b65792063616e206372656174652061206e6577206964656e746974792e0d012d2060416c72656164794c696e6b656460206f6e65206f6620746865206b65797320697320616c7265616479206c696e6b656420746f20616e206964656e746974792ef02d20604475706c69636174654b657960206f6e65206f6620746865206b65797320697320696e636c75646564206d756c7469706c652074696d65732ea1012d206049734368696c644964656e7469747960207468652063616c6c65722773206964656e7469747920697320616c72656164792061206368696c64206964656e7469747920616e642063616e277420637265617465206368696c64206964656e7469746965732e54756e6c696e6b5f6368696c645f6964656e746974790401246368696c645f6469648001284964656e74697479496400172cc8556e6c696e6b2061206368696c64206964656e746974792066726f6d206974277320706172656e74206964656e746974792e0045014f6e6c7920746865207072696d617279206b6579206f662074686520706172656e74206f72206368696c64206964656e7469746965732063616e20756e6c696e6b20746865206964656e7469746965732e002c2320417267756d656e747311012d20606368696c645f6469646020746865206368696c64206964656e7469747920746f20756e6c696e6b2066726f6d2069747320706172656e74206964656e746974792e002023204572726f7273a1012d20604b65794e6f74416c6c6f77656460206f6e6c7920746865207072696d617279206b6579206f66206569746865722074686520706172656e74206f72206368696c64206964656e746974792063616e20756e6c696e6b20746865206964656e7469746965732e35012d20604e6f506172656e744964656e746974796020746865206964656e7469747920606368696c645f6469646020646f65736e27742068617665206120706172656e74206964656e746974792e59012d20604e6f74506172656e744f724368696c644964656e7469747960207468652063616c6c65722773206964656e746974792069736e27742074686520706172656e74206f72206368696c64206964656e746974792e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ee505000002e90500e9051064706f6c796d6573685f636f6d6d6f6e5f7574696c697469657318747261697473206964656e74697479505365636f6e646172794b6579576974684175746804244163636f756e7449640100000801347365636f6e646172795f6b65799c015c5365636f6e646172794b65793c4163636f756e7449643e000138617574685f7369676e6174757265ed050110483531320000ed05083c7072696d69746976655f7479706573104835313200000400250201205b75383b2036345d0000f105000002f50500f5051064706f6c796d6573685f636f6d6d6f6e5f7574696c697469657318747261697473206964656e746974796c4372656174654368696c644964656e74697479576974684175746804244163636f756e74496401000008010c6b65790001244163636f756e744964000138617574685f7369676e6174757265ed050110483531320000f905083c70616c6c65745f6964656e74697479144572726f7204045400018834416c72656164794c696e6b6564000004dc4f6e65207365636f6e64617279206f72207072696d617279206b65792063616e206f6e6c792062656c6f6e6720746f206f6e65204449443c4d697373696e674964656e746974790001047843616c6c6572206973206d697373696e6720616e206964656e746974792e30556e617574686f72697a6564000204bc5369676e61746f7279206973206e6f742070726520617574686f72697a656420627920746865206964656e7469747944496e76616c69644163636f756e744b6579000304a84163636f756e742049642063616e6e6f74206265206578747261637465642066726f6d207369676e65725c556e417574686f72697a656443646450726f76696465720004049c4f6e6c792043444420736572766963652070726f7669646572732061726520616c6c6f7765642e74496e76616c6964417574686f72697a6174696f6e46726f6d4f776e6572000504a0416e20696e76616c696420617574686f72697a6174696f6e2066726f6d20746865206f776e65722e8c496e76616c6964417574686f72697a6174696f6e46726f6d43646450726f7669646572000604bc416e20696e76616c696420617574686f72697a6174696f6e2066726f6d20746865204344442070726f76696465722e644e6f7443646450726f76696465724174746573746174696f6e000704b84174746573746174696f6e20776173206e6f7420627920612043444420736572766963652070726f76696465722e70417574686f72697a6174696f6e734e6f74466f7253616d6544696473000804a0417574686f72697a6174696f6e7320617265206e6f7420666f72207468652073616d65204449442e4c4469644d757374416c726561647945786973740009046c54686520444944206d75737420616c72656164792065786973742e50417574686f72697a6174696f6e45787069726564000a049c546865206f6666636861696e20617574686f72697a6174696f6e2068617320657870697265642e385461726765744861734e6f436464000b0480546865207461726765742044494420686173206e6f2076616c6964204344442e6c417574686f72697a6174696f6e4861734265656e5265766f6b6564000c04a8417574686f72697a6174696f6e20686173206265656e206578706c696369746c79207265766f6b65642e74496e76616c6964417574686f72697a6174696f6e5369676e6174757265000d048c416e20696e76616c696420617574686f72697a6174696f6e207369676e61747572652e344b65794e6f74416c6c6f776564000e04d454686973206b6579206973206e6f7420616c6c6f77656420746f2065786563757465206120676976656e206f7065726174696f6e2e344e6f745072696d6172794b6579000f0461014f6e6c7920746865207072696d617279206b657920697320616c6c6f77656420746f207265766f6b6520616e204964656e74697479205369676e61746f7279206f66662d636861696e20617574686f72697a6174696f6e2e3c446964446f65734e6f7445786973740010045c5468652044494420646f6573206e6f742065786973742e40446964416c72656164794578697374730011045c5468652044494420616c7265616479206578697374732e785365636f6e646172794b657973436f6e7461696e5072696d6172794b6579001204ac546865207365636f6e64617279206b65797320636f6e7461696e20746865207072696d617279206b65792e444661696c6564546f436861726765466565001304a0436f756c646e2774206368617267652066656520666f7220746865207472616e73616374696f6e2e284e6f74415369676e6572001404d85369676e6572206973206e6f742061207365636f6e64617279206b6579206f66207468652070726f7669646564206964656e746974796c43616e6e6f744465636f64655369676e65724163636f756e744964001504150143616e6e6f7420636f6e7665727420612060543a3a4163636f756e7449646020746f2060416e795369676e61747572653a3a5369676e65723a3a4163636f756e744964602e484d756c746953696748617342616c616e636500160421014d756c74697369672063616e206e6f7420626520756e6c696e6b65642066726f6d20616e206964656e74697479207768696c65206974207374696c6c20686f6c647320504f4c5958544163636f756e744b657949734265696e6755736564001704d0546865206163636f756e74206b6579206973206265696e6720757365642c2069742063616e277420626520756e6c696e6b65642e48437573746f6d53636f7065546f6f4c6f6e670018086c4120637573746f6d2073636f706520697320746f6f206c6f6e672e9c49742063616e206174206d6f737420626520603332602063686172616374657273206c6f6e672e70437573746f6d436c61696d54797065416c7265616479457869737473001904f454686520637573746f6d20636c61696d207479706520747279696e6720746f206265207265676973746572656420616c7265616479206578697374732e6c437573746f6d436c61696d54797065446f65734e6f744578697374001a049454686520637573746f6d20636c61696d207479706520646f6573206e6f742065786973742e44436c61696d446f65734e6f744578697374001b0454436c61696d20646f6573206e6f742065786973742e3c49734368696c644964656e74697479001c0451014964656e7469747920697320616c72656164792061206368696c64206f6620616e206f74686572206964656e746974792c2063616e277420637265617465206772616e642d6368696c64206964656e746974792e404e6f506172656e744964656e74697479001d04b0546865204964656e7469747920646f65736e27742068617665206120706172656e74206964656e746974792e604e6f74506172656e744f724368696c644964656e74697479001e04bc5468652063616c6c6572206973206e6f742074686520706172656e74206f72206368696c64206964656e746974792e304475706c69636174654b6579001f04a45468652073616d65206b65792077617320696e636c75646564206d756c7469706c652074696d65732e744578636570744e6f74416c6c6f776564466f7245787472696e73696373002004e043616e6e6f742075736520457863657074207768656e2073706563696679696e672065787472696e736963207065726d697373696f6e732e6845786365656465644e756d6265724f66476976656e4175746873002104d04d6178696d756d206e756d626572206f6620676976656e20617574686f72697a6174696f6e73207761732065786365656465642e00fd0500000201060001061064706f6c796d6573685f636f6d6d6f6e5f7574696c6974696573187472616974731467726f757038496e6163746976654d656d62657204184d6f6d656e740128000c010869648001284964656e74697479496400013864656163746976617465645f61742801184d6f6d656e74000118657870697279050101384f7074696f6e3c4d6f6d656e743e00000506083070616c6c65745f67726f75701043616c6c08045400044900011c607365745f6163746976655f6d656d626572735f6c696d69740401146c696d697410012c4d656d626572436f756e7400001035014368616e676520746869732067726f75702773206c696d697420666f7220686f77206d616e7920636f6e63757272656e7420616374697665206d656d626572732074686579206d61792062652e002c2320417267756d656e74730d012a20606c696d697460202d20746865206e756d626572206f6620616374697665206d656d62657273207468657265206d617920626520636f6e63757272656e746c792e3864697361626c655f6d656d6265720c010c77686f8001284964656e746974794964000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e0001086174050101444f7074696f6e3c543a3a4d6f6d656e743e0001409444697361626c65732061206d656d626572206174207370656369666963206d6f6d656e742e004101506c65617365206e6f74652074686174206966206d656d62657220697320616c7265616479207265766f6b6564202861202276616c6964206d656d62657222292c20697473207265766f636174696f6e6c74696d652d7374616d702077696c6c20626520757064617465642e004d01416e792064697361626c6564206d656d6265722073686f756c64204e4f5420616c6c6f7720746f20616374206c696b6520616e20616374697665206d656d626572206f66207468652067726f75702e20466f725d01696e7374616e63652c20612064697361626c656420434444206d656d6265722073686f756c64204e4f542062652061626c6520746f2067656e657261746520612043444420636c61696d2e20486f776576657220616e79190167656e65726174656420636c61696d20697373756564206265666f7265206061746020776f756c6420626520636f6e7369646572656420617320612076616c6964206f6e652e005101496620796f752077616e7420746f20696e76616c696461746520616e792067656e65726174656420636c61696d2c20796f752073686f756c6420757365206053656c663a3a72656d6f76655f6d656d626572602e002c2320417267756d656e74737c2a2060617460202d205265766f636174696f6e2074696d652d7374616d702e942a206077686f60202d20546172676574206d656d626572206f66207468652067726f75702e55012a206065787069727960202d2054696d652d7374616d70207768656e206077686f602069732072656d6f7665642066726f6d204344442e20417320736f6f6e20617320697420697320657870697265642c20746865510167656e65726174656420636c61696d732077696c6c2062652022696e76616c696422206173206077686f60206973206e6f7420636f6e736964657265642061206d656d626572206f66207468652067726f75702e286164645f6d656d62657204010c77686f8001284964656e7469747949640002143901416464732061206d656d626572206077686f6020746f207468652067726f75702e204d6179206f6e6c792062652063616c6c65642066726f6d20604164644f726967696e60206f7220726f6f742e002c2320417267756d656e7473d02a20606f726967696e60202d204f726967696e20726570726573656e74696e6720604164644f726967696e60206f7220726f6f74b82a206077686f60202d204964656e74697479496420746f20626520616464656420746f207468652067726f75702e3472656d6f76655f6d656d62657204010c77686f8001284964656e746974794964000328510152656d6f7665732061206d656d626572206077686f602066726f6d20746865207365742e204d6179206f6e6c792062652063616c6c65642066726f6d206052656d6f76654f726967696e60206f7220726f6f742e004101416e7920636c61696d2070726576696f75736c792067656e6572617465642062792074686973206d656d626572206973206e6f742076616c696420617320612067726f757020636c61696d2e20466f725901696e7374616e63652c206966206120434444206d656d6265722067726f75702067656e657261746564206120636c61696d20666f72206120746172676574206964656e7469747920616e64207468656e206974206973610172656d6f7665642c207468617420636c61696d2077696c6c20626520696e76616c69642e2020496e206361736520796f752077616e7420746f206b656570207468652076616c6964697479206f662067656e657261746564dc636c61696d732c20796f75206861766520746f20757365206053656c663a3a64697361626c655f6d656d626572602066756e6374696f6e002c2320417267756d656e7473dc2a20606f726967696e60202d204f726967696e20726570726573656e74696e67206052656d6f76654f726967696e60206f7220726f6f74c82a206077686f60202d204964656e74697479496420746f2062652072656d6f7665642066726f6d207468652067726f75702e2c737761705f6d656d62657208011872656d6f76658001284964656e74697479496400010c6164648001284964656e746974794964000420dc5377617073206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f74686572206d656d6265722060616464602e00b44d6179206f6e6c792062652063616c6c65642066726f6d2060537761704f726967696e60206f7220726f6f742e002c2320417267756d656e7473d42a20606f726967696e60202d204f726967696e20726570726573656e74696e672060537761704f726967696e60206f7220726f6f74d42a206072656d6f766560202d204964656e74697479496420746f2062652072656d6f7665642066726f6d207468652067726f75702ed82a206061646460202d204964656e74697479496420746f20626520616464656420696e20706c616365206f66206072656d6f7665602e3472657365745f6d656d6265727304011c6d656d626572734501013c5665633c4964656e7469747949643e00051829014368616e67657320746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702eb84d6179206f6e6c792062652063616c6c65642066726f6d206052657365744f726967696e60206f7220726f6f742e002c2320417267756d656e7473d82a20606f726967696e60202d204f726967696e20726570726573656e74696e67206052657365744f726967696e60206f7220726f6f748c2a20606d656d6265727360202d204e657720736574206f66206964656e7469746965734c61626469636174655f6d656d626572736869700006284d01416c6c6f7773207468652063616c6c696e67206d656d62657220746f202a756e696c61746572616c6c7920717569742a20776974686f75742074686973206265696e67207375626a65637420746f206120474314766f74652e002c2320417267756d656e7473cc2a20606f726967696e60202d204d656d626572206f6620636f6d6d69747465652077686f2077616e747320746f20717569742e001c23204572726f7200802a204f6e6c79207072696d617279206b65792063616e2061626469636174652ea42a204c617374206d656d626572206f6620612067726f75702063616e6e6f742061626469636174652e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e0906083070616c6c65745f67726f7570144572726f72080454000449000118544f6e6c795072696d6172794b6579416c6c6f776564000004b04f6e6c79207072696d617279206b6579206f6620746865206964656e7469747920697320616c6c6f7765642e3c4475706c69636174654d656d6265720001047c47726f7570206d656d6265722077617320616464656420616c72656164792e304e6f537563684d656d626572000204a443616e27742072656d6f76652061206d656d626572207468617420646f65736e27742065786973742e504c6173744d656d62657243616e6e6f7451756974000304a84c617374206d656d626572206f662074686520636f6d6d69747465652063616e206e6f7420717569742e684163746976654d656d626572734c696d697445786365656465640004045d01546865206c696d697420666f7220746865206e756d626572206f6620636f6e63757272656e7420616374697665206d656d6265727320666f7220746869732067726f757020686173206265656e2065786365656465642e684163746976654d656d626572734c696d69744f766572666c6f770005041501416374697665206d656d626572206c696d6974207761732067726561746572207468616e206d6178696d756d20636f6d6d6974746565206d656d62657273206c696d69742e000d060c60706f6c796d6573685f72756e74696d655f646576656c6f701c72756e74696d652c52756e74696d6543616c6c0001ac1853797374656d0400d10401ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e00000010426162650400610501a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426162652c2052756e74696d653e0001002454696d657374616d700400790501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e64696365730400810501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0003002042616c616e6365730400990501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e000500204964656e746974790400e10501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e0007004c4364645365727669636550726f7669646572730400050601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4364645365727669636550726f7669646572732c2052756e74696d653e00080044506f6c796d657368436f6d6d69747465650400110601d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c796d657368436f6d6d69747465652c2052756e74696d653e0009004c436f6d6d69747465654d656d626572736869700400150601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6d6d69747465654d656d626572736869702c2052756e74696d653e000a0048546563686e6963616c436f6d6d69747465650400190601dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e000b0070546563686e6963616c436f6d6d69747465654d656d6265727368697004001d0601050273656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465654d656d626572736869702c2052756e74696d653e000c004055706772616465436f6d6d69747465650400210601d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c55706772616465436f6d6d69747465652c2052756e74696d653e000d006855706772616465436f6d6d69747465654d656d626572736869700400250601fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c55706772616465436f6d6d69747465654d656d626572736869702c2052756e74696d653e000e00204d756c74695369670400290601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74695369672c2052756e74696d653e000f001c5374616b696e670400310601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e0011001c53657373696f6e0400550601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0013001c4772616e6470610400610601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e00150020496d4f6e6c696e6504008d0601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496d4f6e6c696e652c2052756e74696d653e001700105375646f0400ad0601a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e0019001441737365740400b10601a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c41737365742c2052756e74696d653e001a004c4361706974616c446973747269627574696f6e0400bd0601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4361706974616c446973747269627574696f6e2c2052756e74696d653e001b0028436865636b706f696e740400c50601bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436865636b706f696e742c2052756e74696d653e001c0044436f6d706c69616e63654d616e616765720400c90601d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6d706c69616e63654d616e616765722c2052756e74696d653e001d003c436f72706f72617465416374696f6e0400cd0601d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f72706f72617465416374696f6e2c2052756e74696d653e001e003c436f72706f7261746542616c6c6f740400e50601d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f72706f7261746542616c6c6f742c2052756e74696d653e001f0010506970730400e90601a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506970732c2052756e74696d653e00210024506f7274666f6c696f0400f90601b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f7274666f6c696f2c2052756e74696d653e0022002c50726f746f636f6c4665650400050701c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f746f636f6c4665652c2052756e74696d653e002300245363686564756c657204000d0701b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e00240028536574746c656d656e740400150701bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c536574746c656d656e742c2052756e74696d653e00250028537461746973746963730400410701bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c537461746973746963732c2052756e74696d653e0026000c53746f0400510701a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53746f2c2052756e74696d653e0027002054726561737572790400610701b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0028001c5574696c69747904006d0701b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e00290010426173650400910701a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426173652c2052756e74696d653e002a003845787465726e616c4167656e74730400950701cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45787465726e616c4167656e74732c2052756e74696d653e002b001c52656c617965720400990701b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c52656c617965722c2052756e74696d653e002c0024436f6e74726163747304009d0701b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e7472616374732c2052756e74696d653e002e0044506f6c796d657368436f6e7472616374730400b10701d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c796d657368436f6e7472616374732c2052756e74696d653e002f0020507265696d6167650400c50701b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e0030000c4e66740400c90701a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e66742c2052756e74696d653e00310068456c656374696f6e50726f76696465724d756c746950686173650400e50701fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e50726f76696465724d756c746950686173652c2052756e74696d653e00320024546573745574696c730400d50801b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546573745574696c732c2052756e74696d653e00c800001106084070616c6c65745f636f6d6d69747465651043616c6c080454000449000114487365745f766f74655f7468726573686f6c640801046e10010c7533320001046410010c753332000018f84368616e67652074686520766f7465207468726573686f6c64207468652064657465726d696e6573207468652077696e6e696e672070726f706f73616c2e5501466f7220652e672e2c20666f7220612073696d706c65206d616a6f72697479207573652028312c20322920776869636820726570726573656e74732074686520696e2d6571756174696f6e20223e3d20312f32222e002c2320417267756d656e7473f82a20606e60202d204e756d657261746f72206f6620746865206672616374696f6e20726570726573656e74696e6720766f7465207468726573686f6c642e01012a20606460202d2044656e6f6d696e61746f72206f6620746865206672616374696f6e20726570726573656e74696e6720766f7465207468726573686f6c642e5c7365745f72656c656173655f636f6f7264696e61746f7204010869648001284964656e74697479496400011c804368616e676573207468652072656c6561736520636f6f7264696e61746f722e002c2320417267756d656e7473c02a2060696460202d2054686520444944206f6620746865206e65772072656c6561736520636f6f7264696e61746f722e002023204572726f727325012a20604e6f74414d656d626572602c20496620746865206e657720636f6f7264696e61746f722060696460206973206e6f742070617274206f662074686520636f6d6d69747465652e447365745f657870697265735f6166746572040118657870697279590101684d61796265426c6f636b3c543a3a426c6f636b4e756d6265723e000210c04368616e676573207468652074696d6520616674657220776869636820612070726f706f73616c20657870697265732e002c2320417267756d656e7473842a206065787069727960202d20546865206e6577206578706972792074696d652e3c766f74655f6f725f70726f706f736508011c617070726f766539010110626f6f6c00011063616c6c0d06017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e000344150150726f706f73657320746f2074686520636f6d6d69747465652074686174206063616c6c602073686f756c6420626520657865637574656420696e20697473206e616d652e5d01416c7465726e61746976656c792c206966207468652068617368206f66206063616c6c602068617320616c7265616479206265656e207265636f726465642c20692e652e2c20616c72656164792070726f706f7365642c1d017468656e20746869732063616c6c20636f756e7473206173206120766f74652c20692e652e2c2061732069662060766f74655f62795f6861736860207761732063616c6c65642e00202320576569676874002d0154686520776569676874206f66207468697320646973706174636861626c652069732074686174206f66206063616c6c602061732077656c6c2061732074686520636f6d706c657869747978666f72207265636f7264696e672074686520766f746520697473656c662e002c2320417267756d656e7473a02a2060617070726f766560202d206973207468697320616e20617070726f76696e6720766f74653f610120204966207468652070726f706f73616c20646f65736e27742065786973742c2070617373696e67206066616c7365602077696c6c20726573756c7420696e206572726f7220604669727374566f746552656a656374602eb42a206063616c6c60202d207468652063616c6c20746f2070726f706f736520666f7220657865637574696f6e2e002023204572726f72732d012a20604669727374566f746552656a656374602c206966206063616c6c60206861736e2774206265656e2070726f706f73656420616e642060617070726f7665203d3d2066616c7365602e09012a20604e6f74414d656d626572602c2069662074686520606f726967696e60206973206e6f742061206d656d626572206f66207468697320636f6d6d69747465652e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e64657810013450726f706f73616c496e64657800011c617070726f766539010110626f6f6c000428a4566f7465732060617070726f766560696e676c7920286f72206e6f742c206966206066616c73656029d46f6e20616e206578697374696e67206070726f706f73616c6020676976656e2062792069747320686173682c2060696e646578602e002c2320417267756d656e7473d42a206070726f706f73616c60202d20412068617368206f66207468652070726f706f73616c20746f20626520766f746564206f6e2e7c2a2060696e64657860202d205468652070726f706f73616c20696e6465782e2d012a2060617070726f766560202d20496620607472756560207468616e207468697320697320612060666f726020766f74652c20616e642060616761696e737460206f74686572776973652e002023204572726f727309012a20604e6f74414d656d626572602c2069662074686520606f726967696e60206973206e6f742061206d656d626572206f66207468697320636f6d6d69747465652e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e1506083070616c6c65745f67726f75701043616c6c08045400044900011c607365745f6163746976655f6d656d626572735f6c696d69740401146c696d697410012c4d656d626572436f756e7400001035014368616e676520746869732067726f75702773206c696d697420666f7220686f77206d616e7920636f6e63757272656e7420616374697665206d656d626572732074686579206d61792062652e002c2320417267756d656e74730d012a20606c696d697460202d20746865206e756d626572206f6620616374697665206d656d62657273207468657265206d617920626520636f6e63757272656e746c792e3864697361626c655f6d656d6265720c010c77686f8001284964656e746974794964000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e0001086174050101444f7074696f6e3c543a3a4d6f6d656e743e0001409444697361626c65732061206d656d626572206174207370656369666963206d6f6d656e742e004101506c65617365206e6f74652074686174206966206d656d62657220697320616c7265616479207265766f6b6564202861202276616c6964206d656d62657222292c20697473207265766f636174696f6e6c74696d652d7374616d702077696c6c20626520757064617465642e004d01416e792064697361626c6564206d656d6265722073686f756c64204e4f5420616c6c6f7720746f20616374206c696b6520616e20616374697665206d656d626572206f66207468652067726f75702e20466f725d01696e7374616e63652c20612064697361626c656420434444206d656d6265722073686f756c64204e4f542062652061626c6520746f2067656e657261746520612043444420636c61696d2e20486f776576657220616e79190167656e65726174656420636c61696d20697373756564206265666f7265206061746020776f756c6420626520636f6e7369646572656420617320612076616c6964206f6e652e005101496620796f752077616e7420746f20696e76616c696461746520616e792067656e65726174656420636c61696d2c20796f752073686f756c6420757365206053656c663a3a72656d6f76655f6d656d626572602e002c2320417267756d656e74737c2a2060617460202d205265766f636174696f6e2074696d652d7374616d702e942a206077686f60202d20546172676574206d656d626572206f66207468652067726f75702e55012a206065787069727960202d2054696d652d7374616d70207768656e206077686f602069732072656d6f7665642066726f6d204344442e20417320736f6f6e20617320697420697320657870697265642c20746865510167656e65726174656420636c61696d732077696c6c2062652022696e76616c696422206173206077686f60206973206e6f7420636f6e736964657265642061206d656d626572206f66207468652067726f75702e286164645f6d656d62657204010c77686f8001284964656e7469747949640002143901416464732061206d656d626572206077686f6020746f207468652067726f75702e204d6179206f6e6c792062652063616c6c65642066726f6d20604164644f726967696e60206f7220726f6f742e002c2320417267756d656e7473d02a20606f726967696e60202d204f726967696e20726570726573656e74696e6720604164644f726967696e60206f7220726f6f74b82a206077686f60202d204964656e74697479496420746f20626520616464656420746f207468652067726f75702e3472656d6f76655f6d656d62657204010c77686f8001284964656e746974794964000328510152656d6f7665732061206d656d626572206077686f602066726f6d20746865207365742e204d6179206f6e6c792062652063616c6c65642066726f6d206052656d6f76654f726967696e60206f7220726f6f742e004101416e7920636c61696d2070726576696f75736c792067656e6572617465642062792074686973206d656d626572206973206e6f742076616c696420617320612067726f757020636c61696d2e20466f725901696e7374616e63652c206966206120434444206d656d6265722067726f75702067656e657261746564206120636c61696d20666f72206120746172676574206964656e7469747920616e64207468656e206974206973610172656d6f7665642c207468617420636c61696d2077696c6c20626520696e76616c69642e2020496e206361736520796f752077616e7420746f206b656570207468652076616c6964697479206f662067656e657261746564dc636c61696d732c20796f75206861766520746f20757365206053656c663a3a64697361626c655f6d656d626572602066756e6374696f6e002c2320417267756d656e7473dc2a20606f726967696e60202d204f726967696e20726570726573656e74696e67206052656d6f76654f726967696e60206f7220726f6f74c82a206077686f60202d204964656e74697479496420746f2062652072656d6f7665642066726f6d207468652067726f75702e2c737761705f6d656d62657208011872656d6f76658001284964656e74697479496400010c6164648001284964656e746974794964000420dc5377617073206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f74686572206d656d6265722060616464602e00b44d6179206f6e6c792062652063616c6c65642066726f6d2060537761704f726967696e60206f7220726f6f742e002c2320417267756d656e7473d42a20606f726967696e60202d204f726967696e20726570726573656e74696e672060537761704f726967696e60206f7220726f6f74d42a206072656d6f766560202d204964656e74697479496420746f2062652072656d6f7665642066726f6d207468652067726f75702ed82a206061646460202d204964656e74697479496420746f20626520616464656420696e20706c616365206f66206072656d6f7665602e3472657365745f6d656d6265727304011c6d656d626572734501013c5665633c4964656e7469747949643e00051829014368616e67657320746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702eb84d6179206f6e6c792062652063616c6c65642066726f6d206052657365744f726967696e60206f7220726f6f742e002c2320417267756d656e7473d82a20606f726967696e60202d204f726967696e20726570726573656e74696e67206052657365744f726967696e60206f7220726f6f748c2a20606d656d6265727360202d204e657720736574206f66206964656e7469746965734c61626469636174655f6d656d626572736869700006284d01416c6c6f7773207468652063616c6c696e67206d656d62657220746f202a756e696c61746572616c6c7920717569742a20776974686f75742074686973206265696e67207375626a65637420746f206120474314766f74652e002c2320417267756d656e7473cc2a20606f726967696e60202d204d656d626572206f6620636f6d6d69747465652077686f2077616e747320746f20717569742e001c23204572726f7200802a204f6e6c79207072696d617279206b65792063616e2061626469636174652ea42a204c617374206d656d626572206f6620612067726f75702063616e6e6f742061626469636174652e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e1906084070616c6c65745f636f6d6d69747465651043616c6c080454000449000114487365745f766f74655f7468726573686f6c640801046e10010c7533320001046410010c753332000018f84368616e67652074686520766f7465207468726573686f6c64207468652064657465726d696e6573207468652077696e6e696e672070726f706f73616c2e5501466f7220652e672e2c20666f7220612073696d706c65206d616a6f72697479207573652028312c20322920776869636820726570726573656e74732074686520696e2d6571756174696f6e20223e3d20312f32222e002c2320417267756d656e7473f82a20606e60202d204e756d657261746f72206f6620746865206672616374696f6e20726570726573656e74696e6720766f7465207468726573686f6c642e01012a20606460202d2044656e6f6d696e61746f72206f6620746865206672616374696f6e20726570726573656e74696e6720766f7465207468726573686f6c642e5c7365745f72656c656173655f636f6f7264696e61746f7204010869648001284964656e74697479496400011c804368616e676573207468652072656c6561736520636f6f7264696e61746f722e002c2320417267756d656e7473c02a2060696460202d2054686520444944206f6620746865206e65772072656c6561736520636f6f7264696e61746f722e002023204572726f727325012a20604e6f74414d656d626572602c20496620746865206e657720636f6f7264696e61746f722060696460206973206e6f742070617274206f662074686520636f6d6d69747465652e447365745f657870697265735f6166746572040118657870697279590101684d61796265426c6f636b3c543a3a426c6f636b4e756d6265723e000210c04368616e676573207468652074696d6520616674657220776869636820612070726f706f73616c20657870697265732e002c2320417267756d656e7473842a206065787069727960202d20546865206e6577206578706972792074696d652e3c766f74655f6f725f70726f706f736508011c617070726f766539010110626f6f6c00011063616c6c0d06017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e000344150150726f706f73657320746f2074686520636f6d6d69747465652074686174206063616c6c602073686f756c6420626520657865637574656420696e20697473206e616d652e5d01416c7465726e61746976656c792c206966207468652068617368206f66206063616c6c602068617320616c7265616479206265656e207265636f726465642c20692e652e2c20616c72656164792070726f706f7365642c1d017468656e20746869732063616c6c20636f756e7473206173206120766f74652c20692e652e2c2061732069662060766f74655f62795f6861736860207761732063616c6c65642e00202320576569676874002d0154686520776569676874206f66207468697320646973706174636861626c652069732074686174206f66206063616c6c602061732077656c6c2061732074686520636f6d706c657869747978666f72207265636f7264696e672074686520766f746520697473656c662e002c2320417267756d656e7473a02a2060617070726f766560202d206973207468697320616e20617070726f76696e6720766f74653f610120204966207468652070726f706f73616c20646f65736e27742065786973742c2070617373696e67206066616c7365602077696c6c20726573756c7420696e206572726f7220604669727374566f746552656a656374602eb42a206063616c6c60202d207468652063616c6c20746f2070726f706f736520666f7220657865637574696f6e2e002023204572726f72732d012a20604669727374566f746552656a656374602c206966206063616c6c60206861736e2774206265656e2070726f706f73656420616e642060617070726f7665203d3d2066616c7365602e09012a20604e6f74414d656d626572602c2069662074686520606f726967696e60206973206e6f742061206d656d626572206f66207468697320636f6d6d69747465652e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e64657810013450726f706f73616c496e64657800011c617070726f766539010110626f6f6c000428a4566f7465732060617070726f766560696e676c7920286f72206e6f742c206966206066616c73656029d46f6e20616e206578697374696e67206070726f706f73616c6020676976656e2062792069747320686173682c2060696e646578602e002c2320417267756d656e7473d42a206070726f706f73616c60202d20412068617368206f66207468652070726f706f73616c20746f20626520766f746564206f6e2e7c2a2060696e64657860202d205468652070726f706f73616c20696e6465782e2d012a2060617070726f766560202d20496620607472756560207468616e207468697320697320612060666f726020766f74652c20616e642060616761696e737460206f74686572776973652e002023204572726f727309012a20604e6f74414d656d626572602c2069662074686520606f726967696e60206973206e6f742061206d656d626572206f66207468697320636f6d6d69747465652e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e1d06083070616c6c65745f67726f75701043616c6c08045400044900011c607365745f6163746976655f6d656d626572735f6c696d69740401146c696d697410012c4d656d626572436f756e7400001035014368616e676520746869732067726f75702773206c696d697420666f7220686f77206d616e7920636f6e63757272656e7420616374697665206d656d626572732074686579206d61792062652e002c2320417267756d656e74730d012a20606c696d697460202d20746865206e756d626572206f6620616374697665206d656d62657273207468657265206d617920626520636f6e63757272656e746c792e3864697361626c655f6d656d6265720c010c77686f8001284964656e746974794964000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e0001086174050101444f7074696f6e3c543a3a4d6f6d656e743e0001409444697361626c65732061206d656d626572206174207370656369666963206d6f6d656e742e004101506c65617365206e6f74652074686174206966206d656d62657220697320616c7265616479207265766f6b6564202861202276616c6964206d656d62657222292c20697473207265766f636174696f6e6c74696d652d7374616d702077696c6c20626520757064617465642e004d01416e792064697361626c6564206d656d6265722073686f756c64204e4f5420616c6c6f7720746f20616374206c696b6520616e20616374697665206d656d626572206f66207468652067726f75702e20466f725d01696e7374616e63652c20612064697361626c656420434444206d656d6265722073686f756c64204e4f542062652061626c6520746f2067656e657261746520612043444420636c61696d2e20486f776576657220616e79190167656e65726174656420636c61696d20697373756564206265666f7265206061746020776f756c6420626520636f6e7369646572656420617320612076616c6964206f6e652e005101496620796f752077616e7420746f20696e76616c696461746520616e792067656e65726174656420636c61696d2c20796f752073686f756c6420757365206053656c663a3a72656d6f76655f6d656d626572602e002c2320417267756d656e74737c2a2060617460202d205265766f636174696f6e2074696d652d7374616d702e942a206077686f60202d20546172676574206d656d626572206f66207468652067726f75702e55012a206065787069727960202d2054696d652d7374616d70207768656e206077686f602069732072656d6f7665642066726f6d204344442e20417320736f6f6e20617320697420697320657870697265642c20746865510167656e65726174656420636c61696d732077696c6c2062652022696e76616c696422206173206077686f60206973206e6f7420636f6e736964657265642061206d656d626572206f66207468652067726f75702e286164645f6d656d62657204010c77686f8001284964656e7469747949640002143901416464732061206d656d626572206077686f6020746f207468652067726f75702e204d6179206f6e6c792062652063616c6c65642066726f6d20604164644f726967696e60206f7220726f6f742e002c2320417267756d656e7473d02a20606f726967696e60202d204f726967696e20726570726573656e74696e6720604164644f726967696e60206f7220726f6f74b82a206077686f60202d204964656e74697479496420746f20626520616464656420746f207468652067726f75702e3472656d6f76655f6d656d62657204010c77686f8001284964656e746974794964000328510152656d6f7665732061206d656d626572206077686f602066726f6d20746865207365742e204d6179206f6e6c792062652063616c6c65642066726f6d206052656d6f76654f726967696e60206f7220726f6f742e004101416e7920636c61696d2070726576696f75736c792067656e6572617465642062792074686973206d656d626572206973206e6f742076616c696420617320612067726f757020636c61696d2e20466f725901696e7374616e63652c206966206120434444206d656d6265722067726f75702067656e657261746564206120636c61696d20666f72206120746172676574206964656e7469747920616e64207468656e206974206973610172656d6f7665642c207468617420636c61696d2077696c6c20626520696e76616c69642e2020496e206361736520796f752077616e7420746f206b656570207468652076616c6964697479206f662067656e657261746564dc636c61696d732c20796f75206861766520746f20757365206053656c663a3a64697361626c655f6d656d626572602066756e6374696f6e002c2320417267756d656e7473dc2a20606f726967696e60202d204f726967696e20726570726573656e74696e67206052656d6f76654f726967696e60206f7220726f6f74c82a206077686f60202d204964656e74697479496420746f2062652072656d6f7665642066726f6d207468652067726f75702e2c737761705f6d656d62657208011872656d6f76658001284964656e74697479496400010c6164648001284964656e746974794964000420dc5377617073206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f74686572206d656d6265722060616464602e00b44d6179206f6e6c792062652063616c6c65642066726f6d2060537761704f726967696e60206f7220726f6f742e002c2320417267756d656e7473d42a20606f726967696e60202d204f726967696e20726570726573656e74696e672060537761704f726967696e60206f7220726f6f74d42a206072656d6f766560202d204964656e74697479496420746f2062652072656d6f7665642066726f6d207468652067726f75702ed82a206061646460202d204964656e74697479496420746f20626520616464656420696e20706c616365206f66206072656d6f7665602e3472657365745f6d656d6265727304011c6d656d626572734501013c5665633c4964656e7469747949643e00051829014368616e67657320746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702eb84d6179206f6e6c792062652063616c6c65642066726f6d206052657365744f726967696e60206f7220726f6f742e002c2320417267756d656e7473d82a20606f726967696e60202d204f726967696e20726570726573656e74696e67206052657365744f726967696e60206f7220726f6f748c2a20606d656d6265727360202d204e657720736574206f66206964656e7469746965734c61626469636174655f6d656d626572736869700006284d01416c6c6f7773207468652063616c6c696e67206d656d62657220746f202a756e696c61746572616c6c7920717569742a20776974686f75742074686973206265696e67207375626a65637420746f206120474314766f74652e002c2320417267756d656e7473cc2a20606f726967696e60202d204d656d626572206f6620636f6d6d69747465652077686f2077616e747320746f20717569742e001c23204572726f7200802a204f6e6c79207072696d617279206b65792063616e2061626469636174652ea42a204c617374206d656d626572206f6620612067726f75702063616e6e6f742061626469636174652e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e2106084070616c6c65745f636f6d6d69747465651043616c6c080454000449000114487365745f766f74655f7468726573686f6c640801046e10010c7533320001046410010c753332000018f84368616e67652074686520766f7465207468726573686f6c64207468652064657465726d696e6573207468652077696e6e696e672070726f706f73616c2e5501466f7220652e672e2c20666f7220612073696d706c65206d616a6f72697479207573652028312c20322920776869636820726570726573656e74732074686520696e2d6571756174696f6e20223e3d20312f32222e002c2320417267756d656e7473f82a20606e60202d204e756d657261746f72206f6620746865206672616374696f6e20726570726573656e74696e6720766f7465207468726573686f6c642e01012a20606460202d2044656e6f6d696e61746f72206f6620746865206672616374696f6e20726570726573656e74696e6720766f7465207468726573686f6c642e5c7365745f72656c656173655f636f6f7264696e61746f7204010869648001284964656e74697479496400011c804368616e676573207468652072656c6561736520636f6f7264696e61746f722e002c2320417267756d656e7473c02a2060696460202d2054686520444944206f6620746865206e65772072656c6561736520636f6f7264696e61746f722e002023204572726f727325012a20604e6f74414d656d626572602c20496620746865206e657720636f6f7264696e61746f722060696460206973206e6f742070617274206f662074686520636f6d6d69747465652e447365745f657870697265735f6166746572040118657870697279590101684d61796265426c6f636b3c543a3a426c6f636b4e756d6265723e000210c04368616e676573207468652074696d6520616674657220776869636820612070726f706f73616c20657870697265732e002c2320417267756d656e7473842a206065787069727960202d20546865206e6577206578706972792074696d652e3c766f74655f6f725f70726f706f736508011c617070726f766539010110626f6f6c00011063616c6c0d06017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e000344150150726f706f73657320746f2074686520636f6d6d69747465652074686174206063616c6c602073686f756c6420626520657865637574656420696e20697473206e616d652e5d01416c7465726e61746976656c792c206966207468652068617368206f66206063616c6c602068617320616c7265616479206265656e207265636f726465642c20692e652e2c20616c72656164792070726f706f7365642c1d017468656e20746869732063616c6c20636f756e7473206173206120766f74652c20692e652e2c2061732069662060766f74655f62795f6861736860207761732063616c6c65642e00202320576569676874002d0154686520776569676874206f66207468697320646973706174636861626c652069732074686174206f66206063616c6c602061732077656c6c2061732074686520636f6d706c657869747978666f72207265636f7264696e672074686520766f746520697473656c662e002c2320417267756d656e7473a02a2060617070726f766560202d206973207468697320616e20617070726f76696e6720766f74653f610120204966207468652070726f706f73616c20646f65736e27742065786973742c2070617373696e67206066616c7365602077696c6c20726573756c7420696e206572726f7220604669727374566f746552656a656374602eb42a206063616c6c60202d207468652063616c6c20746f2070726f706f736520666f7220657865637574696f6e2e002023204572726f72732d012a20604669727374566f746552656a656374602c206966206063616c6c60206861736e2774206265656e2070726f706f73656420616e642060617070726f7665203d3d2066616c7365602e09012a20604e6f74414d656d626572602c2069662074686520606f726967696e60206973206e6f742061206d656d626572206f66207468697320636f6d6d69747465652e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e64657810013450726f706f73616c496e64657800011c617070726f766539010110626f6f6c000428a4566f7465732060617070726f766560696e676c7920286f72206e6f742c206966206066616c73656029d46f6e20616e206578697374696e67206070726f706f73616c6020676976656e2062792069747320686173682c2060696e646578602e002c2320417267756d656e7473d42a206070726f706f73616c60202d20412068617368206f66207468652070726f706f73616c20746f20626520766f746564206f6e2e7c2a2060696e64657860202d205468652070726f706f73616c20696e6465782e2d012a2060617070726f766560202d20496620607472756560207468616e207468697320697320612060666f726020766f74652c20616e642060616761696e737460206f74686572776973652e002023204572726f727309012a20604e6f74414d656d626572602c2069662074686520606f726967696e60206973206e6f742061206d656d626572206f66207468697320636f6d6d69747465652e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e2506083070616c6c65745f67726f75701043616c6c08045400044900011c607365745f6163746976655f6d656d626572735f6c696d69740401146c696d697410012c4d656d626572436f756e7400001035014368616e676520746869732067726f75702773206c696d697420666f7220686f77206d616e7920636f6e63757272656e7420616374697665206d656d626572732074686579206d61792062652e002c2320417267756d656e74730d012a20606c696d697460202d20746865206e756d626572206f6620616374697665206d656d62657273207468657265206d617920626520636f6e63757272656e746c792e3864697361626c655f6d656d6265720c010c77686f8001284964656e746974794964000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e0001086174050101444f7074696f6e3c543a3a4d6f6d656e743e0001409444697361626c65732061206d656d626572206174207370656369666963206d6f6d656e742e004101506c65617365206e6f74652074686174206966206d656d62657220697320616c7265616479207265766f6b6564202861202276616c6964206d656d62657222292c20697473207265766f636174696f6e6c74696d652d7374616d702077696c6c20626520757064617465642e004d01416e792064697361626c6564206d656d6265722073686f756c64204e4f5420616c6c6f7720746f20616374206c696b6520616e20616374697665206d656d626572206f66207468652067726f75702e20466f725d01696e7374616e63652c20612064697361626c656420434444206d656d6265722073686f756c64204e4f542062652061626c6520746f2067656e657261746520612043444420636c61696d2e20486f776576657220616e79190167656e65726174656420636c61696d20697373756564206265666f7265206061746020776f756c6420626520636f6e7369646572656420617320612076616c6964206f6e652e005101496620796f752077616e7420746f20696e76616c696461746520616e792067656e65726174656420636c61696d2c20796f752073686f756c6420757365206053656c663a3a72656d6f76655f6d656d626572602e002c2320417267756d656e74737c2a2060617460202d205265766f636174696f6e2074696d652d7374616d702e942a206077686f60202d20546172676574206d656d626572206f66207468652067726f75702e55012a206065787069727960202d2054696d652d7374616d70207768656e206077686f602069732072656d6f7665642066726f6d204344442e20417320736f6f6e20617320697420697320657870697265642c20746865510167656e65726174656420636c61696d732077696c6c2062652022696e76616c696422206173206077686f60206973206e6f7420636f6e736964657265642061206d656d626572206f66207468652067726f75702e286164645f6d656d62657204010c77686f8001284964656e7469747949640002143901416464732061206d656d626572206077686f6020746f207468652067726f75702e204d6179206f6e6c792062652063616c6c65642066726f6d20604164644f726967696e60206f7220726f6f742e002c2320417267756d656e7473d02a20606f726967696e60202d204f726967696e20726570726573656e74696e6720604164644f726967696e60206f7220726f6f74b82a206077686f60202d204964656e74697479496420746f20626520616464656420746f207468652067726f75702e3472656d6f76655f6d656d62657204010c77686f8001284964656e746974794964000328510152656d6f7665732061206d656d626572206077686f602066726f6d20746865207365742e204d6179206f6e6c792062652063616c6c65642066726f6d206052656d6f76654f726967696e60206f7220726f6f742e004101416e7920636c61696d2070726576696f75736c792067656e6572617465642062792074686973206d656d626572206973206e6f742076616c696420617320612067726f757020636c61696d2e20466f725901696e7374616e63652c206966206120434444206d656d6265722067726f75702067656e657261746564206120636c61696d20666f72206120746172676574206964656e7469747920616e64207468656e206974206973610172656d6f7665642c207468617420636c61696d2077696c6c20626520696e76616c69642e2020496e206361736520796f752077616e7420746f206b656570207468652076616c6964697479206f662067656e657261746564dc636c61696d732c20796f75206861766520746f20757365206053656c663a3a64697361626c655f6d656d626572602066756e6374696f6e002c2320417267756d656e7473dc2a20606f726967696e60202d204f726967696e20726570726573656e74696e67206052656d6f76654f726967696e60206f7220726f6f74c82a206077686f60202d204964656e74697479496420746f2062652072656d6f7665642066726f6d207468652067726f75702e2c737761705f6d656d62657208011872656d6f76658001284964656e74697479496400010c6164648001284964656e746974794964000420dc5377617073206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f74686572206d656d6265722060616464602e00b44d6179206f6e6c792062652063616c6c65642066726f6d2060537761704f726967696e60206f7220726f6f742e002c2320417267756d656e7473d42a20606f726967696e60202d204f726967696e20726570726573656e74696e672060537761704f726967696e60206f7220726f6f74d42a206072656d6f766560202d204964656e74697479496420746f2062652072656d6f7665642066726f6d207468652067726f75702ed82a206061646460202d204964656e74697479496420746f20626520616464656420696e20706c616365206f66206072656d6f7665602e3472657365745f6d656d6265727304011c6d656d626572734501013c5665633c4964656e7469747949643e00051829014368616e67657320746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702eb84d6179206f6e6c792062652063616c6c65642066726f6d206052657365744f726967696e60206f7220726f6f742e002c2320417267756d656e7473d82a20606f726967696e60202d204f726967696e20726570726573656e74696e67206052657365744f726967696e60206f7220726f6f748c2a20606d656d6265727360202d204e657720736574206f66206964656e7469746965734c61626469636174655f6d656d626572736869700006284d01416c6c6f7773207468652063616c6c696e67206d656d62657220746f202a756e696c61746572616c6c7920717569742a20776974686f75742074686973206265696e67207375626a65637420746f206120474314766f74652e002c2320417267756d656e7473cc2a20606f726967696e60202d204d656d626572206f6620636f6d6d69747465652077686f2077616e747320746f20717569742e001c23204572726f7200802a204f6e6c79207072696d617279206b65792063616e2061626469636174652ea42a204c617374206d656d626572206f6620612067726f75702063616e6e6f742061626469636174652e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e29060c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001443c6372656174655f6d756c74697369670c011c7369676e6572738901019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e000134736967735f726571756972656428010c75363400012c7065726d697373696f6e732d06014c4f7074696f6e3c5065726d697373696f6e733e00001848437265617465732061206d756c7469736967002c2320417267756d656e7473a5012a20607369676e65727360202d205369676e657273206f6620746865206d756c7469736967202854686579206e65656420746f2061636365707420617574686f72697a6174696f6e206265666f72652074686579206172652061637475616c6c79206164646564292e19012a2060736967735f726571756972656460202d204e756d626572206f66207369677320726571756972656420746f2070726f636573732061206d756c74692d7369672074782e91012a20607065726d697373696f6e7360202d206f7074696f6e616c20637573746f6d207065726d697373696f6e732e20204f6e6c7920746865207072696d617279206b65792063616e2070726f7669646520637573746f6d207065726d697373696f6e732e3c6372656174655f70726f706f73616c0c01206d756c7469736967000130543a3a4163636f756e74496400012070726f706f73616c0d060170426f783c3c5420617320436f6e6669673e3a3a50726f706f73616c3e000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e0001206c437265617465732061206d756c74697369672070726f706f73616c002c2320417267756d656e7473802a20606d756c746973696760202d204d756c746953696720616464726573732e9c2a206070726f706f73616c60202d2050726f706f73616c20746f20626520766f746564206f6e2eac2a206065787069727960202d204f7074696f6e616c2070726f706f73616c206578706972792074696d652e003101496620746869732069732031206f7574206f6620606d60206d756c74697369672c207468652070726f706f73616c2077696c6c20626520696d6d6564696174656c792065786563757465642e1c617070726f76650c01206d756c7469736967000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c7536340001286d61785f7765696768742001185765696768740002203101417070726f7665732061206d756c74697369672070726f706f73616c207573696e67207468652063616c6c65722773207365636f6e64617279206b65792028604163636f756e74496460292e002c2320417267756d656e7473802a20606d756c746973696760202d204d756c746953696720616464726573732ea42a206070726f706f73616c5f696460202d2050726f706f73616c20696420746f20617070726f76652ef02a20606d61785f77656967687460202d20546865206d6178696d756d2077656967687420746f2065786563757465207468652070726f706f73616c2e00010149662071756f72756d20697320726561636865642c207468652070726f706f73616c2077696c6c20626520696d6d6564696174656c792065786563757465642e1872656a6563740801206d756c7469736967000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c7536340003182d0152656a656374732061206d756c74697369672070726f706f73616c207573696e67207468652063616c6c65722773207365636f6e64617279206b65792028604163636f756e74496460292e002c2320417267756d656e7473802a20606d756c746973696760202d204d756c746953696720616464726573732ea02a206070726f706f73616c5f696460202d2050726f706f73616c20696420746f2072656a6563742e010149662071756f72756d20697320726561636865642c207468652070726f706f73616c2077696c6c20626520696d6d6564696174656c792065786563757465642e586163636570745f6d756c74697369675f7369676e657204011c617574685f696428010c7536340004102901416363657074732061206d756c7469736967207369676e657220617574686f72697a6174696f6e20676976656e20746f207369676e65722773206b657920284163636f756e744964292e002c2320417267756d656e7473ac2a2060617574685f696460202d2041757468206964206f662074686520617574686f72697a6174696f6e2e506164645f6d756c74697369675f7369676e65727304011c7369676e6572738901019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e000510290141646473207369676e65727320746f20746865206d756c74697369672e202054686973206d7573742062652063616c6c656420627920746865206d756c746973696720697473656c662e002c2320417267756d656e7473742a20607369676e65727360202d205369676e65727320746f206164642e5c72656d6f76655f6d756c74697369675f7369676e65727304011c7369676e6572738901019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e0006103d0152656d6f766573207369676e6572732066726f6d20746865206d756c74697369672e202054686973206d7573742062652063616c6c656420627920746865206d756c746973696720697473656c662e002c2320417267756d656e7473802a20607369676e65727360202d205369676e65727320746f2072656d6f76652e786164645f6d756c74697369675f7369676e6572735f7669615f61646d696e0801206d756c7469736967000130543a3a4163636f756e74496400011c7369676e6572738901019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e00071c4101416464732061207369676e657220746f20746865206d756c74697369672e202054686973206d7573742062652063616c6c6564206279207468652061646d696e206964656e74697479206f6620746865246d756c74697369672e002c2320417267756d656e74739c2a20606d756c746973696760202d2041646472657373206f6620746865206d756c746920736967742a20607369676e65727360202d205369676e65727320746f206164642e008472656d6f76655f6d756c74697369675f7369676e6572735f7669615f61646d696e0801206d756c7469736967000130543a3a4163636f756e74496400011c7369676e6572738901019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e00081c8c52656d6f7665732061207369676e65722066726f6d20746865206d756c74697369672ee854686973206d7573742062652063616c6c6564206279207468652061646d696e206964656e74697479206f6620746865206d756c74697369672e002c2320417267756d656e74739c2a20606d756c746973696760202d2041646472657373206f6620746865206d756c74697369672e802a20607369676e65727360202d205369676e65727320746f2072656d6f76652e00506368616e67655f736967735f7265717569726564040134736967735f726571756972656428010c75363400091451014368616e67657320746865206e756d626572206f66207369676e6174757265732072657175697265642062792061206d756c74697369672e202054686973206d7573742062652063616c6c656420627920746865406d756c746973696720697473656c662e002c2320417267756d656e7473d82a2060736967735f726571756972656460202d204e6577206e756d626572206f66207265717569726564207369676e6174757265732e786368616e67655f736967735f72657175697265645f7669615f61646d696e0801206d756c7469736967000130543a3a4163636f756e74496400014c7369676e6174757265735f726571756972656428010c753634000a14ad014368616e67657320746865206e756d626572206f66207369676e6174757265732072657175697265642062792061206d756c74697369672e202054686973206d7573742062652063616c6c6564206279207468652061646d696e206f6620746865206d756c74697369672e002c2320417267756d656e747359012a20606d756c746973696760202d20546865206163636f756e74206964656e74696669657220285b604163636f756e744964605d2920666f7220746865206d756c7469207369676e6174757265206163636f756e742ef02a20607369676e6174757265735f726571756972656460202d20546865206e756d626572206f66207265717569726564207369676e6174757265732e246164645f61646d696e04012461646d696e5f6469648001284964656e746974794964000b044d0141646420616e2061646d696e206964656e7469747920746f20746865206d756c74697369672e202054686973206d7573742062652063616c6c656420627920746865206d756c746973696720697473656c662e5872656d6f76655f61646d696e5f7669615f61646d696e0401206d756c7469736967000130543a3a4163636f756e744964000c04890152656d6f766573207468652061646d696e206964656e746974792066726f6d2074686520606d756c7469736967602e202054686973206d7573742062652063616c6c6564206279207468652061646d696e206f6620746865206d756c74697369672e3072656d6f76655f7061796572000d04750152656d6f7665732074686520706179696e67206964656e746974792066726f6d2074686520606d756c7469736967602e202054686973206d7573742062652063616c6c656420627920746865206d756c746973696720697473656c662e5872656d6f76655f70617965725f7669615f70617965720401206d756c7469736967000130543a3a4163636f756e744964000e04b50152656d6f7665732074686520706179696e67206964656e746974792066726f6d2074686520606d756c7469736967602e202054686973206d7573742062652063616c6c65642062792074686520706179696e67206964656e74697479206f6620746865206d756c74697369672e54617070726f76655f6a6f696e5f6964656e746974790801206d756c7469736967000130543a3a4163636f756e74496400011c617574685f696428010c753634000f1cac417070726f7665732061206d756c7469736967206a6f696e206964656e746974792070726f706f73616c2e002c2320417267756d656e7473802a20606d756c746973696760202d204d756c746953696720616464726573732ee42a2060617574685f696460202d20546865206a6f696e206964656e7469747920617574686f72697a6174696f6e20746f20617070726f76652e00390149662071756f72756d20697320726561636865642c20746865206a6f696e206964656e746974792070726f706f73616c2077696c6c20626520696d6d6564696174656c792065786563757465642e346a6f696e5f6964656e7469747904011c617574685f696428010c7536340010048d014163636570742061204a6f696e4964656e7469747920617574686f72697a6174696f6e20666f722074686973206d756c74697369672e202054686973206d7573742062652063616c6c656420627920746865206d756c746973696720697473656c662e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2d0604184f7074696f6e04045401a00108104e6f6e6500000010536f6d650400a000000100003106103870616c6c65745f7374616b696e671870616c6c65741870616c6c65741043616c6c04045400018810626f6e640c0128636f6e74726f6c6c6572850501504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565d901013042616c616e63654f663c543e00011470617965653506017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00003c610154616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c80626520746865206163636f756e74207468617420636f6e74726f6c732069742e002d016076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e002101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e003c456d6974732060426f6e646564602e34232320436f6d706c6578697479d02d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e1c2d204f2831292e642d20546872656520657874726120444220656e74726965732e004d014e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e65643d01756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e28626f6e645f65787472610401386d61785f6164646974696f6e616cd901013042616c616e63654f663c543e000138610141646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757030666f72207374616b696e672e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e004d01557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e5501556e6c696b65205b60626f6e64605d2853656c663a3a626f6e6429206f72205b60756e626f6e64605d2853656c663a3a756e626f6e642920746869732066756e6374696f6e20646f6573206e6f7420696d706f7365bc616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e003c456d6974732060426f6e646564602e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e1c2d204f2831292e18756e626f6e6404011476616c7565d901013042616c616e63654f663c543e00024c51015363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e64fc706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e2101543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0045014f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665bc7468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e0031014e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d6178556e6c6f636b696e674368756e6b736029410163616e20636f2d657869737473206174207468652073616d652074696d652e20496620746865726520617265206e6f20756e6c6f636b696e67206368756e6b7320736c6f747320617661696c61626c6545015b6043616c6c3a3a77697468647261775f756e626f6e646564605d2069732063616c6c656420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e00390149662061207573657220656e636f756e74657273207468652060496e73756666696369656e74426f6e6460206572726f72207768656e2063616c6c696e6720746869732065787472696e7369632c1901746865792073686f756c642063616c6c20606368696c6c6020666972737420696e206f7264657220746f206672656520757020746865697220626f6e6465642066756e64732e0044456d6974732060556e626f6e646564602e009453656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e4477697468647261775f756e626f6e6465640401486e756d5f736c617368696e675f7370616e7310010c753332000338290152656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e0031015468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f4877686174657665722069742077616e74732e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722e0048456d697473206057697468647261776e602e006853656520616c736f205b6043616c6c3a3a756e626f6e64605d2e0034232320436f6d706c6578697479d84f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2072656d6f766509014e4f54453a2057656967687420616e6e6f746174696f6e20697320746865206b696c6c207363656e6172696f2c20776520726566756e64206f74686572776973652e2076616c696461746504011470726566739501013856616c696461746f725072656673000414e44465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e206e6f6d696e61746504011c74617267657473390601645665633c4163636f756e7449644c6f6f6b75704f663c543e3e0005280d014465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c65786974792d012d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f662060746172676574736020284e29050177686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d49542028543a3a4d61784e6f6d696e6174696f6e73292ed42d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e146368696c6c000628c44465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e502d20436f6e7461696e73206f6e6520726561642ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e247365745f706179656504011470617965653506017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000730b42852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479182d204f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e242d2d2d2d2d2d2d2d2d387365745f636f6e74726f6c6c6572040128636f6e74726f6c6c6572850501504163636f756e7449644c6f6f6b75704f663c543e00082c8c2852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479104f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e4c7365745f76616c696461746f725f636f756e7404010c6e6577cd04010c75333200091890536574732074686520696465616c206e756d626572206f662076616c696461746f72732e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c6578697479104f28312960696e6372656173655f76616c696461746f725f636f756e740401286164646974696f6e616ccd04010c753332000a1ce4496e6372656d656e74732074686520696465616c206e756d626572206f662076616c696461746f7273207570746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e547363616c655f76616c696461746f725f636f756e74040118666163746f723d06011c50657263656e74000b1c0d015363616c652075702074686520696465616c206e756d626572206f662076616c696461746f7273206279206120666163746f72207570746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e34666f7263655f6e6f5f65726173000c34ac466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e3901546875732074686520656c656374696f6e2070726f63657373206d6179206265206f6e676f696e67207768656e20746869732069732063616c6c65642e20496e2074686973206361736520746865dc656c656374696f6e2077696c6c20636f6e74696e756520756e74696c20746865206e65787420657261206973207472696767657265642e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f28312934666f7263655f6e65775f657261000d384901466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c2062659c726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f283129447365745f696e76756c6e657261626c6573040134696e76756c6e657261626c6573fc01445665633c543a3a4163636f756e7449643e000e0cc8536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e34666f7263655f756e7374616b650801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c753332000f0c0901466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e50666f7263655f6e65775f6572615f616c776179730010240101466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e5463616e63656c5f64656665727265645f736c61736808010c657261100120457261496e646578000134736c6173685f696e6469636573690401205665633c7533323e0011149443616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e009843616e2062652063616c6c6564206279207468652060543a3a41646d696e4f726967696e602e000101506172616d65746572733a2065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e64657800122c0d01506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e0049012d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f2501202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e31012d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e005501546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966746974206973206e6f74206f6e65206f6620746865207374616b6572732e0034232320436f6d706c6578697479b82d204174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292e187265626f6e6404011476616c7565d901013042616c616e63654f663c543e00131cdc5265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e00d4546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479d02d2054696d6520636f6d706c65786974793a204f284c292c207768657265204c20697320756e6c6f636b696e67206368756e6b73882d20426f756e64656420627920604d6178556e6c6f636b696e674368756e6b73602e28726561705f73746173680801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c7533320014305d0152656d6f766520616c6c2064617461207374727563747572657320636f6e6365726e696e672061207374616b65722f7374617368206f6e636520697420697320617420612073746174652077686572652069742063616e0501626520636f6e736964657265642060647573746020696e20746865207374616b696e672073797374656d2e2054686520726571756972656d656e7473206172653a000501312e207468652060746f74616c5f62616c616e636560206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e1101322e206f722c2074686520606c65646765722e746f74616c60206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e00550154686520666f726d65722063616e2068617070656e20696e206361736573206c696b65206120736c6173683b20746865206c6174746572207768656e20612066756c6c7920756e626f6e646564206163636f756e7409016973207374696c6c20726563656976696e67207374616b696e67207265776172647320696e206052657761726444657374696e6174696f6e3a3a5374616b6564602e00310149742063616e2062652063616c6c656420627920616e796f6e652c206173206c6f6e672061732060737461736860206d65657473207468652061626f766520726571756972656d656e74732e00dc526566756e647320746865207472616e73616374696f6e20666565732075706f6e207375636365737366756c20657865637574696f6e2e106b69636b04010c77686f390601645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00152ce052656d6f76652074686520676976656e206e6f6d696e6174696f6e732066726f6d207468652063616c6c696e672076616c696461746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e004d012d206077686f603a2041206c697374206f66206e6f6d696e61746f72207374617368206163636f756e74732077686f20617265206e6f6d696e6174696e6720746869732076616c696461746f72207768696368c0202073686f756c64206e6f206c6f6e676572206265206e6f6d696e6174696e6720746869732076616c696461746f722e0055014e6f74653a204d616b696e6720746869732063616c6c206f6e6c79206d616b65732073656e736520696620796f7520666972737420736574207468652076616c696461746f7220707265666572656e63657320746f78626c6f636b20616e792066757274686572206e6f6d696e6174696f6e732e4c7365745f7374616b696e675f636f6e666967731801486d696e5f6e6f6d696e61746f725f626f6e6441060158436f6e6669674f703c42616c616e63654f663c543e3e0001486d696e5f76616c696461746f725f626f6e6441060158436f6e6669674f703c42616c616e63654f663c543e3e00014c6d61785f6e6f6d696e61746f725f636f756e7445060134436f6e6669674f703c7533323e00014c6d61785f76616c696461746f725f636f756e7445060134436f6e6669674f703c7533323e00013c6368696c6c5f7468726573686f6c6449060144436f6e6669674f703c50657263656e743e0001386d696e5f636f6d6d697373696f6e4d060144436f6e6669674f703c50657262696c6c3e001644ac5570646174652074686520766172696f7573207374616b696e6720636f6e66696775726174696f6e73202e0025012a20606d696e5f6e6f6d696e61746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f2062652061206e6f6d696e61746f722e25012a20606d696e5f76616c696461746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f20626520612076616c696461746f722e55012a20606d61785f6e6f6d696e61746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e2062652061206e6f6d696e61746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e55012a20606d61785f76616c696461746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e20626520612076616c696461746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e59012a20606368696c6c5f7468726573686f6c64603a2054686520726174696f206f6620606d61785f6e6f6d696e61746f725f636f756e7460206f7220606d61785f76616c696461746f725f636f756e74602077686963681901202073686f756c642062652066696c6c656420696e206f7264657220666f722074686520606368696c6c5f6f7468657260207472616e73616374696f6e20746f20776f726b2e61012a20606d696e5f636f6d6d697373696f6e603a20546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e550120205468697320697320636865636b6564206f6e6c792075706f6e2063616c6c696e67206076616c6964617465602e204578697374696e672076616c696461746f727320617265206e6f742061666665637465642e00c452756e74696d654f726967696e206d75737420626520526f6f7420746f2063616c6c20746869732066756e6374696f6e2e0035014e4f54453a204578697374696e67206e6f6d696e61746f727320616e642076616c696461746f72732077696c6c206e6f742062652061666665637465642062792074686973207570646174652e1101746f206b69636b2070656f706c6520756e64657220746865206e6577206c696d6974732c20606368696c6c5f6f74686572602073686f756c642062652063616c6c65642e2c6368696c6c5f6f74686572040128636f6e74726f6c6c6572000130543a3a4163636f756e74496400176841014465636c61726520612060636f6e74726f6c6c65726020746f2073746f702070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e004101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2c206275742063616e2062652063616c6c656420627920616e796f6e652e0059014966207468652063616c6c6572206973207468652073616d652061732074686520636f6e74726f6c6c6572206265696e672074617267657465642c207468656e206e6f206675727468657220636865636b7320617265d8656e666f726365642c20616e6420746869732066756e6374696f6e2062656861766573206a757374206c696b6520606368696c6c602e005d014966207468652063616c6c657220697320646966666572656e74207468616e2074686520636f6e74726f6c6c6572206265696e672074617267657465642c2074686520666f6c6c6f77696e6720636f6e646974696f6e73306d757374206265206d65743a001d012a2060636f6e74726f6c6c657260206d7573742062656c6f6e6720746f2061206e6f6d696e61746f722077686f20686173206265636f6d65206e6f6e2d6465636f6461626c652c000c4f723a003d012a204120604368696c6c5468726573686f6c6460206d7573742062652073657420616e6420636865636b656420776869636820646566696e657320686f7720636c6f736520746f20746865206d6178550120206e6f6d696e61746f7273206f722076616c696461746f7273207765206d757374207265616368206265666f72652075736572732063616e207374617274206368696c6c696e67206f6e652d616e6f746865722e59012a204120604d61784e6f6d696e61746f72436f756e746020616e6420604d617856616c696461746f72436f756e7460206d75737420626520736574207768696368206973207573656420746f2064657465726d696e65902020686f7720636c6f73652077652061726520746f20746865207468726573686f6c642e5d012a204120604d696e4e6f6d696e61746f72426f6e646020616e6420604d696e56616c696461746f72426f6e6460206d7573742062652073657420616e6420636865636b65642c2077686963682064657465726d696e65735101202069662074686973206973206120706572736f6e20746861742073686f756c64206265206368696c6c6564206265636175736520746865792068617665206e6f74206d657420746865207468726573686f6c64402020626f6e642072657175697265642e005501546869732063616e2062652068656c7066756c20696620626f6e6420726571756972656d656e74732061726520757064617465642c20616e64207765206e65656420746f2072656d6f7665206f6c642075736572739877686f20646f206e6f74207361746973667920746865736520726571756972656d656e74732e68666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e04013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400180c4501466f72636520612076616c696461746f7220746f2068617665206174206c6561737420746865206d696e696d756d20636f6d6d697373696f6e2e20546869732077696c6c206e6f74206166666563742061610176616c696461746f722077686f20616c726561647920686173206120636f6d6d697373696f6e2067726561746572207468616e206f7220657175616c20746f20746865206d696e696d756d2e20416e79206163636f756e743863616e2063616c6c20746869732e487365745f6d696e5f636f6d6d697373696f6e04010c6e65779101011c50657262696c6c00191025015365747320746865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e005901546869732063616c6c20686173206c6f7765722070726976696c65676520726571756972656d656e7473207468616e20607365745f7374616b696e675f636f6e6669676020616e642063616e2062652063616c6c6564cc6279207468652060543a3a41646d696e4f726967696e602e20526f6f742063616e20616c776179732063616c6c20746869732e686164645f7065726d697373696f6e65645f76616c696461746f720801206964656e746974798001284964656e746974794964000138696e74656e6465645f636f756e745106012c4f7074696f6e3c7533323e001a0cd8416464732061207065726d697373696f6e6564206964656e7469747920616e6420736574732069747320707265666572656e6365732e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e7472656d6f76655f7065726d697373696f6e65645f76616c696461746f720401206964656e746974798001284964656e746974794964001b1ca90152656d6f766520616e206964656e746974792066726f6d2074686520706f6f6c206f66202877616e6e616265292076616c696461746f72206964656e7469746965732e204566666563747320617265206b6e6f776e20696e20746865206e6578742073657373696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002c2320417267756d656e7473f02a206f726967696e205265717569726564206f726967696e20666f722072656d6f76696e67206120706f74656e7469616c2076616c696461746f722e882a206964656e746974792056616c696461746f722773204964656e7469747949642e7876616c69646174655f6364645f6578706972795f6e6f6d696e61746f727304011c74617267657473fc01445665633c543a3a4163636f756e7449643e001c14a056616c696461746520746865206e6f6d696e61746f727320434444206578706972792074696d652e005901496620616e206163636f756e742066726f6d206120676976656e20736574206f662061646472657373206973206e6f6d696e6174696e67207468656e20636865636b2074686520434444206578706972792074696d654d016f6620697420616e642069662069742069732065787069726564207468656e20746865206163636f756e742073686f756c6420626520756e626f6e64656420616e642072656d6f7665642066726f6d207468654c6e6f6d696e6174696e672070726f636573732e607061796f75745f7374616b6572735f62795f73797374656d08013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e646578001d006c6368616e67655f736c617368696e675f616c6c6f7765645f666f7204013c736c617368696e675f737769746368a1010138536c617368696e67537769746368001e046d0153776974636820736c617368696e6720737461747573206f6e20746865206261736973206f6620676976656e2060736c617368696e675f737769746368602e2043616e206f6e6c792062652063616c6c656420627920726f6f742eb07570646174655f7065726d697373696f6e65645f76616c696461746f725f696e74656e6465645f636f756e740801206964656e746974798001284964656e7469747949640001486e65775f696e74656e6465645f636f756e7410010c753332001f042501536574732074686520696e74656e64656420636f756e7420746f20606e65775f696e74656e6465645f636f756e746020666f722074686520676976656e20606964656e74697479602e546368696c6c5f66726f6d5f676f7665726e616e63650801206964656e746974798001284964656e74697479496400012873746173685f6b657973fc01445665633c543a3a4163636f756e7449643e002004a101476f7665726e616e636520636f756e63696c20666f72636566756c6c79206368696c6c7320612076616c696461746f722e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e487365745f636f6d6d697373696f6e5f63617004011c6e65775f6361709101011c50657262696c6c00211421014368616e67657320636f6d6d697373696f6e2072617465207768696368206170706c69657320746f20616c6c2076616c696461746f72732e204f6e6c7920476f7665726e616e6365a8636f6d6d697474656520697320616c6c6f77656420746f206368616e676520746869732076616c75652e002c2320417267756d656e74738c2a20606e65775f6361706020746865206e657720636f6d6d697373696f6e206361702e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3506083870616c6c65745f7374616b696e674452657761726444657374696e6174696f6e04244163636f756e74496401000114185374616b656400000014537461736800010028436f6e74726f6c6c65720002001c4163636f756e7404000001244163636f756e744964000300104e6f6e650004000039060000028505003d060c3473705f61726974686d65746963287065725f7468696e67731c50657263656e7400000400080108753800004106103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200004506103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200004906103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454013d06010c104e6f6f700000000c53657404003d060104540001001852656d6f7665000200004d06103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454019101010c104e6f6f700000000c536574040091010104540001001852656d6f766500020000510604184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000055060c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579735906011c543a3a4b65797300011470726f6f6630011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e59060c60706f6c796d6573685f72756e74696d655f646576656c6f701c72756e74696d652c53657373696f6e4b657973000010011c6772616e647061b90101d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000110626162651d0501c43c42616265206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000124696d5f6f6e6c696e65c50101d43c496d4f6e6c696e65206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300014c617574686f726974795f646973636f766572795d0601fc3c417574686f72697479446973636f76657279206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300005d060c5873705f617574686f726974795f646973636f766572790c617070185075626c696300000400c901013c737232353531393a3a5075626c6963000061060c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66650601bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6671050140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66650601bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6671050140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100138543a3a426c6f636b4e756d62657200016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d6265720002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6506085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f66080448012c044e0110000801187365745f6964280114536574496400013065717569766f636174696f6e6906014845717569766f636174696f6e3c482c204e3e00006906085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e080448012c044e011001081c507265766f746504006d060139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d6974040081060141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100006d06084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401b9010456017106045301750600100130726f756e645f6e756d62657228010c7536340001206964656e74697479b9010108496400011466697273747d06011828562c2053290001187365636f6e647d06011828562c20532900007106084066696e616c6974795f6772616e6470611c507265766f7465080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e000075060c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e61747572650000040079060148656432353531393a3a5369676e6174757265000079060c1c73705f636f72651c65643235353139245369676e617475726500000400250201205b75383b2036345d00007d060000040871067506008106084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401b9010456018506045301750600100130726f756e645f6e756d62657228010c7536340001206964656e74697479b9010108496400011466697273748906011828562c2053290001187365636f6e648906011828562c20532900008506084066696e616c6974795f6772616e64706124507265636f6d6d6974080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e000089060000040885067506008d060c4070616c6c65745f696d5f6f6e6c696e651870616c6c65741043616c6c04045400010424686561727462656174080124686561727462656174910601644865617274626561743c543a3a426c6f636b4e756d6265723e0001247369676e6174757265a50601bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500001438232320436f6d706c65786974793a59012d20604f284b202b20452960207768657265204b206973206c656e677468206f6620604b6579736020286865617274626561742e76616c696461746f72735f6c656e2920616e642045206973206c656e677468206f66b02020606865617274626561742e6e6574776f726b5f73746174652e65787465726e616c5f61646472657373608820202d20604f284b29603a206465636f64696e67206f66206c656e67746820604b60ac20202d20604f284529603a206465636f64696e672f656e636f64696e67206f66206c656e67746820604560042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e9106084070616c6c65745f696d5f6f6e6c696e6524486561727462656174042c426c6f636b4e756d626572011000140130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720001346e6574776f726b5f7374617465950601484f70617175654e6574776f726b537461746500013473657373696f6e5f696e64657810013053657373696f6e496e64657800013c617574686f726974795f696e64657810012441757468496e64657800013876616c696461746f72735f6c656e10010c753332000095060c1c73705f636f7265206f6666636861696e484f70617175654e6574776f726b5374617465000008011c706565725f6964990601304f706171756550656572496400014865787465726e616c5f6164647265737365739d0601505665633c4f70617175654d756c7469616464723e00009906081c73705f636f7265304f70617175655065657249640000040030011c5665633c75383e00009d06000002a10600a1060c1c73705f636f7265206f6666636861696e3c4f70617175654d756c7469616464720000040030011c5665633c75383e0000a506104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139245369676e617475726500000400a9060148737232353531393a3a5369676e61747572650000a9060c1c73705f636f72651c73723235353139245369676e617475726500000400250201205b75383b2036345d0000ad06082c70616c6c65745f7375646f1043616c6c040454000110107375646f04011063616c6c0d06017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000028350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292ec42d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2c23203c2f7765696768743e547375646f5f756e636865636b65645f77656967687408011063616c6c0d06017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011c5f776569676874200118576569676874000128350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292ecc2d2054686520776569676874206f6620746869732063616c6c20697320646566696e6564206279207468652063616c6c65722e2c23203c2f7765696768743e1c7365745f6b657904010c6e65778505018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000224710141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f206b65792e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e402d204f6e65204442206368616e67652e2c23203c2f7765696768743e1c7375646f5f617308010c77686f8505018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011063616c6c0d06017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00032c4d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292ec42d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652eb106083070616c6c65745f61737365741043616c6c0404540001805872656769737465725f756e697175655f7469636b65720401187469636b6572210101185469636b65720000241101526567697374657273206120756e69717565207469636b6572206f7220657874656e64732076616c6964697479206f6620616e206578697374696e67207469636b65722e11014e423a205469636b65722076616c696469747920646f6573206e6f742067657420636172727920666f7277617264207768656e2072656e6577696e67207469636b65722e002c2320417267756d656e7473cd012a20606f726967696e603a20697420636f6e7461696e7320746865207365636f6e64617279206b6579206f66207468652063616c6c65722028692e652e2077686f207369676e656420746865207472616e73616374696f6e20746f206578656375746520746869732066756e6374696f6e292e8c2a20607469636b6572603a205b605469636b6572605d20746f2072656769737465722e003423205065726d697373696f6e731c2a204173736574586163636570745f7469636b65725f7472616e7366657204011c617574685f696428010c75363400012068416363657074732061207469636b6572207472616e736665722e002d01436f6e73756d65732074686520617574686f72697a6174696f6e2060617574685f6964602028736565206070616c6c65745f6964656e746974793a3a636f6e73756d655f6175746860292e25014e423a20546f2072656a65637420746865207472616e736665722c2063616c6c2072656d6f766520617574682066756e6374696f6e20696e206964656e74697479206d6f64756c652e002c2320417267756d656e7473cd012a20606f726967696e603a20697420636f6e7461696e7320746865207365636f6e64617279206b6579206f66207468652063616c6c65722028692e652e2077686f207369676e656420746865207472616e73616374696f6e20746f206578656375746520746869732066756e6374696f6e292efc2a2060617574685f6964603a20617574686f72697a6174696f6e204944206f66207469636b6572207472616e7366657220617574686f72697a6174696f6e2e7c6163636570745f61737365745f6f776e6572736869705f7472616e7366657204011c617574685f696428010c753634000218ec546869732066756e6374696f6e206973207573656420746f20616363657074206120746f6b656e206f776e657273686970207472616e736665722e25014e423a20546f2072656a65637420746865207472616e736665722c2063616c6c2072656d6f766520617574682066756e6374696f6e20696e206964656e74697479206d6f64756c652e002c2320417267756d656e7473cd012a20606f726967696e603a20697420636f6e7461696e7320746865207365636f6e64617279206b6579206f66207468652063616c6c65722028692e652e2077686f207369676e656420746865207472616e73616374696f6e20746f206578656375746520746869732066756e6374696f6e292e31012a2060617574685f6964603a20617574686f72697a6174696f6e204944206f662074686520746f6b656e206f776e657273686970207472616e7366657220617574686f72697a6174696f6e2e306372656174655f617373657414012861737365745f6e616d65f901012441737365744e616d65000124646976697369626c6539010110626f6f6c00012861737365745f74797065ed01012441737365745479706500014461737365745f6964656e74696669657273fd0101505665633c41737365744964656e7469666965723e00014866756e64696e675f726f756e645f6e616d650d0201604f7074696f6e3c46756e64696e67526f756e644e616d653e0003343501496e697469616c697a65732061206e6577205b60417373657444657461696c73605d2c20776974682074686520696e6974696174696e67206163636f756e7420617320697473206f776e65722e3d0154686520746f74616c20737570706c792077696c6c20696e697469616c6c79206265207a65726f2e20546f206d696e7420746f6b656e732c20757365205b604d6f64756c653a3a6973737565605d2e002c2320417267756d656e7473c1012a20606f726967696e603a20636f6e7461696e7320746865207365636f6e64617279206b6579206f66207468652063616c6c65722028692e652e2077686f207369676e656420746865207472616e73616374696f6e20746f206578656375746520746869732066756e6374696f6e292e0d012a206061737365745f6e616d65603a20746865205b6041737365744e616d65605d206173736f63696174656420746f2074686520736563757269747920746f6b656e2e6d012a2060646976697369626c65603a2073657473205b60417373657444657461696c733a3a646976697369626c65605d2c20776865726520607472756560206d65616e732074686520746f6b656e20697320646976697369626c652e71012a206061737365745f74797065603a20746865205b60417373657454797065605d207468617420726570726573656e7473207468652073656375726974792074797065206f6620746865205b60417373657444657461696c73605d2edc2a206061737365745f6964656e74696669657273603a206120766563746f72206f66205b6041737365744964656e746966696572605d2e35012a206066756e64696e675f726f756e645f6e616d65603a20746865206e616d65206f66207468652066756e64696e6720726f756e6420285b6046756e64696e67526f756e644e616d65605d292e00382323205065726d697373696f6e732c2a20506f7274666f6c696f18667265657a6504012061737365745f6964a8011c417373657449440004208c467265657a6573207472616e7366657273206f66206120676976656e20746f6b656e2e002c2320417267756d656e7473b02a20606f726967696e603a20746865207365636f6e64617279206b6579206f66207468652073656e6465722ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2e003423205065726d697373696f6e731c2a20417373657420756e667265657a6504012061737365745f6964a8011c4173736574494400052094556e667265657a6573207472616e7366657273206f66206120676976656e20746f6b656e2e002c2320417267756d656e7473b02a20606f726967696e603a20746865207365636f6e64617279206b6579206f66207468652073656e6465722ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2e003423205065726d697373696f6e731c2a2041737365743072656e616d655f617373657408012061737365745f6964a8011c4173736574494400012861737365745f6e616d65f901012441737365744e616d65000624e45570646174657320746865205b6041737365744e616d65605d206173736f63696174656420746f206120736563757269747920746f6b656e2e002c2320417267756d656e7473b02a20606f726967696e603a20746865207365636f6e64617279206b6579206f66207468652073656e6465722ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2e1d012a206061737365745f6e616d65603a20746865205b6041737365744e616d65605d20746861742077696c6c206265206173736f63696174656420746f2074686520746f6b656e2e003423205065726d697373696f6e731c2a2041737365741469737375650c012061737365745f6964a8011c41737365744944000118616d6f756e7418011c42616c616e6365000138706f7274666f6c696f5f6b696e64ec0134506f7274666f6c696f4b696e6400072c590149737375652028692e65206d696e7429206e657720746f6b656e7320746f207468652063616c6c65722c207768696368206d75737420626520616e20617574686f72697a65642065787465726e616c206167656e742e002c2320417267756d656e747325012a20606f726967696e603a2041207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f6620607469636b6572602ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2ed42a2060616d6f756e74603a2054686520616d6f756e74206f6620746f6b656e7320746861742077696c6c206265206973737565642e7d012a2060706f7274666f6c696f5f6b696e64603a20546865205b60506f7274666f6c696f4b696e64605d206f662074686520706f7274666f6c696f20746861742077696c6c207265636569766520746865206d696e74656420746f6b656e732e003423205065726d697373696f6e731c2a2041737365742c2a20506f7274666f6c696f1872656465656d0c012061737365745f6964a8011c4173736574494400011476616c756518011c42616c616e6365000138706f7274666f6c696f5f6b696e64ec0134506f7274666f6c696f4b696e6400082ce10152656465656d732028692e65206275726e7329206578697374696e6720746f6b656e73206279207265647563696e67207468652062616c616e6365206f66207468652063616c6c6572277320706f7274666f6c696f20616e642074686520746f74616c20737570706c79206f662074686520746f6b656e2e002c2320417267756d656e747339012a20606f726967696e603a2069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2e982a206076616c7565603a20616d6f756e74206f6620746f6b656e7320746f2072656465656d2e35012a2060706f7274666f6c696f5f6b696e64603a20746865205b60506f7274666f6c696f4b696e64605d20746861742077696c6c2068617665206974732062616c616e636520726564756365642e003423205065726d697373696f6e731c2a2041737365742c2a20506f7274666f6c696f386d616b655f646976697369626c6504012061737365745f6964a8011c417373657449440009207d0149662074686520746f6b656e206173736f63696174656420746f206061737365745f69646020697320696e646976697369626c652c2073657473205b60417373657444657461696c733a3a646976697369626c65605d20746f20747275652e002c2320417267756d656e747331012a20606f726967696e603a2069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f6620607469636b6572602ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2e003423205065726d697373696f6e731c2a204173736574346164645f646f63756d656e7473080110646f6373b50601345665633c446f63756d656e743e00012061737365745f6964a8011c41737365744944000a248041646420646f63756d656e747320666f72206120676976656e20746f6b656e2e002c2320417267756d656e747339012a20606f726967696e603a2069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2ec02a2060646f6373603a20646f63756d656e747320746f20626520617474616368656420746f2074686520746f6b656e2e003423205065726d697373696f6e731c2a2041737365744072656d6f76655f646f63756d656e747308011c646f63735f69642503013c5665633c446f63756d656e7449643e00012061737365745f6964a8011c41737365744944000b248c52656d6f766520646f63756d656e747320666f72206120676976656e20746f6b656e2e002c2320417267756d656e747339012a20606f726967696e603a2069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2e41012a2060646f63735f6964603a206120766563746f72206f6620616c6c205b60446f63756d656e744964605d20746861742077696c6c2062652072656d6f7665642066726f6d2074686520746f6b656e2e003423205065726d697373696f6e731c2a204173736574447365745f66756e64696e675f726f756e6408012061737365745f6964a8011c4173736574494400014c666f756e64696e675f726f756e645f6e616d651102014046756e64696e67526f756e644e616d65000c24ac5365747320746865206e616d65206f66207468652063757272656e742066756e64696e6720726f756e642e002c2320417267756d656e747331012a20606f726967696e603a202061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2e41012a2060666f756e64696e675f726f756e645f6e616d65603a20746865205b60466f756e64696e67526f756e644e616d65605d206f66207468652063757272656e742066756e64696e6720726f756e642e003423205065726d697373696f6e731c2a204173736574487570646174655f6964656e7469666965727308012061737365745f6964a8011c4173736574494400014461737365745f6964656e74696669657273fd0101505665633c41737365744964656e7469666965723e000d24d85570646174657320746865206173736574206964656e74696669657273206173736f63696174656420746f2074686520746f6b656e2e002c2320417267756d656e74732d012a20606f726967696e603a2061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2e71012a206061737365745f6964656e74696669657273603a206120766563746f72206f66205b6041737365744964656e746966696572605d20746861742077696c6c206265206173736f63696174656420746f2074686520746f6b656e2e003423205065726d697373696f6e731c2a2041737365744c636f6e74726f6c6c65725f7472616e736665720c012061737365745f6964a8011c4173736574494400011476616c756518011c42616c616e636500013866726f6d5f706f7274666f6c696fe8012c506f7274666f6c696f4964000e2c4d01466f726365732061207472616e73666572206f6620746f6b656e2066726f6d206066726f6d5f706f7274666f6c696f6020746f207468652063616c6c657227732064656661756c7420706f7274666f6c696f2e002c2320417267756d656e74732d012a20606f726967696e603a2061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2efc2a206076616c7565603a2020746865205b6042616c616e6365605d206f6620746f6b656e7320746861742077696c6c206265207472616e736665727265642e2d012a206066726f6d5f706f7274666f6c696f603a20746865205b60506f7274666f6c696f4964605d20746861742077696c6c2068617665206974732062616c616e636520726564756365642e003423205065726d697373696f6e731c2a2041737365742c2a20506f7274666f6c696f6872656769737465725f637573746f6d5f61737365745f74797065040108747930011c5665633c75383e000f2478526567697374657273206120637573746f6d20617373657420747970652e00d05468652070726f766964656420607479602077696c6c20626520626f756e6420746f20616e20494420696e2073746f726167652ebc5468652049442063616e207468656e206265207573656420696e20604173736574547970653a3a437573746f6d602e250153686f756c6420746865206074796020616c726561647920657869737420696e2073746f726167652c206e6f207365636f6e642049442069732061737369676e656420746f2069742e002c2320417267756d656e7473942a20606f726967696e603a2077686f2063616c6c6564207468652065787472696e7369632ef42a20607479603a20636f6e7461696e732074686520737472696e6720726570726573656e746174696f6e206f662074686520617373657420747970652e746372656174655f61737365745f776974685f637573746f6d5f7479706514012861737365745f6e616d65f901012441737365744e616d65000124646976697369626c6539010110626f6f6c000144637573746f6d5f61737365745f7479706530011c5665633c75383e00014461737365745f6964656e74696669657273fd0101505665633c41737365744964656e7469666965723e00014866756e64696e675f726f756e645f6e616d650d0201604f7074696f6e3c46756e64696e67526f756e644e616d653e0010383501496e697469616c697a65732061206e6577205b60417373657444657461696c73605d2c20776974682074686520696e6974696174696e67206163636f756e7420617320697473206f776e65722e3d0154686520746f74616c20737570706c792077696c6c20696e697469616c6c79206265207a65726f2e20546f206d696e7420746f6b656e732c20757365205b604d6f64756c653a3a6973737565605d2e95014e6f74653a205574696c6974792065787472696e73696320746f206261746368205b604d6f64756c653a3a6372656174655f6173736574605d20616e64205b604d6f64756c653a3a72656769737465725f637573746f6d5f61737365745f74797065605d2e002c2320417267756d656e7473c1012a20606f726967696e603a20636f6e7461696e7320746865207365636f6e64617279206b6579206f66207468652063616c6c65722028692e652e2077686f207369676e656420746865207472616e73616374696f6e20746f206578656375746520746869732066756e6374696f6e292e0d012a206061737365745f6e616d65603a20746865205b6041737365744e616d65605d206173736f63696174656420746f2074686520736563757269747920746f6b656e2e6d012a2060646976697369626c65603a2073657473205b60417373657444657461696c733a3a646976697369626c65605d2c20776865726520607472756560206d65616e732074686520746f6b656e20697320646976697369626c652ee82a2060637573746f6d5f61737365745f74797065603a2074686520637573746f6d2061737365742074797065206f662074686520746f6b656e2edc2a206061737365745f6964656e74696669657273603a206120766563746f72206f66205b6041737365744964656e746966696572605d2e35012a206066756e64696e675f726f756e645f6e616d65603a20746865206e616d65206f66207468652066756e64696e6720726f756e6420285b6046756e64696e67526f756e644e616d65605d292e00382323205065726d697373696f6e732c2a20506f7274666f6c696f487365745f61737365745f6d6574616461746110012061737365745f6964a8011c4173736574494400010c6b65797902014041737365744d657461646174614b657900011476616c75654502014841737365744d6574616461746156616c756500011864657461696c490201ac4f7074696f6e3c41737365744d6574616461746156616c756544657461696c3c543a3a4d6f6d656e743e3e00113064536574206173736574206d657461646174612076616c75652e002c2320417267756d656e747339012a20606f726967696e603a2069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2ee82a20606b6579603a20746865205b6041737365744d657461646174614b6579605d206173736f63696174656420746f2074686520746f6b656e2e01012a206076616c7565603a20746865205b6041737365744d6574616461746156616c7565605d206f662074686520676976656e206d65746164617461206b65792e25012a206064657461696c73603a206f7074696f6e616c205b6041737365744d6574616461746156616c756544657461696c605d20286578706972652c206c6f636b20737461747573292e003423205065726d697373696f6e731c2a204167656e741c2a204173736574687365745f61737365745f6d657461646174615f64657461696c730c012061737365745f6964a8011c4173736574494400010c6b65797902014041737365744d657461646174614b657900011864657461696c4d02018c41737365744d6574616461746156616c756544657461696c3c543a3a4d6f6d656e743e00122cdc536574206173736574206d657461646174612076616c75652064657461696c7320286578706972652c206c6f636b20737461747573292e002c2320417267756d656e747339012a20606f726967696e603a2069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2ee82a20606b6579603a20746865205b6041737365744d657461646174614b6579605d206173736f63696174656420746f2074686520746f6b656e2ea5012a206064657461696c73603a20746865205b6041737365744d6574616461746156616c756544657461696c605d20286578706972652c206c6f636b207374617475732920746861742077696c6c206265206173736f63696174656420746f2074686520746f6b656e2e003423205065726d697373696f6e731c2a204167656e741c2a2041737365749472656769737465725f616e645f7365745f6c6f63616c5f61737365745f6d6574616461746114012061737365745f6964a8011c417373657449440001106e616d655502014441737365744d657461646174614e616d65000110737065635d02014441737365744d657461646174615370656300011476616c75654502014841737365744d6574616461746156616c756500011864657461696c490201ac4f7074696f6e3c41737365744d6574616461746156616c756544657461696c3c543a3a4d6f6d656e743e3e0013349c52656769737465727320616e6420736574206c6f63616c206173736574206d657461646174612e002c2320417267756d656e747339012a20606f726967696e603a2069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2e902a20606e616d65603a20746865205b6041737365744d657461646174614e616d65605d2e11012a206073706563603a20746865206173736574206d657461646174612073706563696669636174696f6e7320285b6041737365744d6574616461746153706563605d292e01012a206076616c7565603a20746865205b6041737365744d6574616461746156616c7565605d206f662074686520676976656e206d65746164617461206b65792e25012a206064657461696c73603a206f7074696f6e616c205b6041737365744d6574616461746156616c756544657461696c605d20286578706972652c206c6f636b20737461747573292e003423205065726d697373696f6e731c2a204167656e741c2a2041737365748872656769737465725f61737365745f6d657461646174615f6c6f63616c5f747970650c012061737365745f6964a8011c417373657449440001106e616d655502014441737365744d657461646174614e616d65000110737065635d02014441737365744d657461646174615370656300142c90526567697374657273206173736574206d65746164617461206c6f63616c20747970652e002c2320417267756d656e747339012a20606f726967696e603a2069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ed82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2e902a20606e616d65603a20746865205b6041737365744d657461646174614e616d65605d2e11012a206073706563603a20746865206173736574206d657461646174612073706563696669636174696f6e7320285b6041737365744d6574616461746153706563605d292e003423205065726d697373696f6e731c2a204167656e741c2a2041737365748c72656769737465725f61737365745f6d657461646174615f676c6f62616c5f747970650801106e616d655502014441737365744d657461646174614e616d65000110737065635d02014441737365744d657461646174615370656300151894526567697374657273206173736574206d6574616461746120676c6f62616c20747970652e002c2320417267756d656e747339012a20606f726967696e603a2069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602e902a20606e616d65603a20746865205b6041737365744d657461646174614e616d65605d2e11012a206073706563603a20746865206173736574206d657461646174612073706563696669636174696f6e7320285b6041737365744d6574616461746153706563605d292e447570646174655f61737365745f7479706508012061737365745f6964a8011c4173736574494400012861737365745f74797065ed0101244173736574547970650016247455706461746573207468652074797065206f6620616e2061737365742e002c2320417267756d656e7473dc2a20606f726967696e603a20697420636f6e7461696e7320746865207365636f6e64617279206b6579206f66207468652073656e646572d82a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f2074686520746f6b656e2ecc2a206061737365745f74797065603a20746865206e6577205b60417373657454797065605d206f662074686520746f6b656e2e003423205065726d697373696f6e731c2a2041737365746472656d6f76655f6c6f63616c5f6d657461646174615f6b657908012061737365745f6964a8011c417373657449440001246c6f63616c5f6b65795902015441737365744d657461646174614c6f63616c4b6579001724e052656d6f76657320746865206173736574206d65746164617461206b657920616e642076616c7565206f662061206c6f63616c206b65792e002c2320417267756d656e7473b02a20606f726967696e603a20746865207365636f6e64617279206b6579206f66207468652073656e6465722e0d012a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f20746865206c6f63616c206d65746164617461206b65792e09012a20606c6f63616c5f6b6579603a20746865205b6041737365744d657461646174614c6f63616c4b6579605d20746861742077696c6c2062652072656d6f7665642e003423205065726d697373696f6e731c2a2041737365745472656d6f76655f6d657461646174615f76616c756508012061737365745f6964a8011c417373657449440001306d657461646174615f6b65797902014041737365744d657461646174614b6579001824cc52656d6f76657320746865206173736574206d657461646174612076616c7565206f662061206d65746164617461206b65792e002c2320417267756d656e7473b02a20606f726967696e603a20746865207365636f6e64617279206b6579206f66207468652073656e6465722ef42a206061737365745f6964603a20746865205b6041737365744944605d206173736f63696174656420746f20746865206d65746164617461206b65792e31012a20606d657461646174615f6b6579603a20746865205b6041737365744d657461646174614b6579605d20746861742077696c6c2068617665206974732076616c75652064656c657465642e003423205065726d697373696f6e731c2a204173736574606578656d70745f61737365745f61666669726d6174696f6e04012061737365745f6964a8011c41737365744944001920f45072652d617070726f7665732074686520726563656976656d656e74206f662074686520617373657420666f7220616c6c206964656e7469746965732e002c2320417267756d656e7473b02a20606f726967696e603a20746865207365636f6e64617279206b6579206f66207468652073656e6465722e0d012a206061737365745f6964603a20746865205b6041737365744944605d20746861742077696c6c206265206578656d70742066726f6d2061666669726d6174696f6e2e003423205065726d697373696f6e73182a20526f6f748872656d6f76655f61737365745f61666669726d6174696f6e5f6578656d7074696f6e04012061737365745f6964a8011c41737365744944001a20e452656d6f76657320746865207072652d617070726f76616c206f662074686520617373657420666f7220616c6c206964656e7469746965732e002c2320417267756d656e7473b02a20606f726967696e603a20746865207365636f6e64617279206b6579206f66207468652073656e6465722e0d012a206061737365745f6964603a20746865205b6041737365744944605d20746861742077696c6c206861766520697473206578656d7074696f6e2072656d6f7665642e003423205065726d697373696f6e73182a20526f6f74447072655f617070726f76655f617373657404012061737365745f6964a8011c41737365744944001b20a45072652d617070726f7665732074686520726563656976656d656e74206f6620616e2061737365742e002c2320417267756d656e7473b02a20606f726967696e603a20746865207365636f6e64617279206b6579206f66207468652073656e6465722e0d012a206061737365745f6964603a20746865205b6041737365744944605d20746861742077696c6c206265206578656d70742066726f6d2061666669726d6174696f6e2e003423205065726d697373696f6e731c2a2041737365746472656d6f76655f61737365745f7072655f617070726f76616c04012061737365745f6964a8011c41737365744944001c209452656d6f766573207468652070726520617070726f76616c206f6620616e2061737365742e002c2320417267756d656e7473b42a20606f726967696e60202d20746865207365636f6e64617279206b6579206f66207468652073656e6465722e0d012a206061737365745f6964603a20746865205b6041737365744944605d20746861742077696c6c206861766520697473206578656d7074696f6e2072656d6f7665642e003423205065726d697373696f6e731c2a2041737365745c6164645f6d616e6461746f72795f6d65646961746f727308012061737365745f6964a8011c417373657449440001246d65646961746f7273b90601c4426f756e64656442547265655365743c4964656e7469747949642c20543a3a4d617841737365744d65646961746f72733e001d24b5015365747320616c6c206964656e74697469657320696e2074686520606d65646961746f72736020736574206173206d616e6461746f7279206d65646961746f727320666f7220616e7920696e737472756374696f6e207472616e73666572696e67206061737365745f6964602e002c2320417267756d656e7473b02a20606f726967696e603a20546865207365636f6e64617279206b6579206f66207468652073656e6465722e2d012a206061737365745f6964603a20746865205b6041737365744944605d206f662074686520617373657420746861742077696c6c207265717569726520746865206d65646961746f72732e6d012a20606d65646961746f7273603a204120736574206f66205b604964656e746974794964605d206f6620616c6c20746865206d616e6461746f7279206d65646961746f727320666f722074686520676976656e207469636b65722e003423205065726d697373696f6e731c2a2041737365746872656d6f76655f6d616e6461746f72795f6d65646961746f727308012061737365745f6964a8011c417373657449440001246d65646961746f7273b90601c4426f756e64656442547265655365743c4964656e7469747949642c20543a3a4d617841737365744d65646961746f72733e001e24a50152656d6f76657320616c6c206964656e74697469657320696e2074686520606d65646961746f727360207365742066726f6d20746865206d616e6461746f7279206d65646961746f7273206c69737420666f722074686520676976656e206061737365745f6964602e002c2320417267756d656e7473b02a20606f726967696e603a20746865207365636f6e64617279206b6579206f66207468652073656e6465722e31012a206061737365745f6964603a20746865205b6041737365744944605d206f662074686520617373657420746861742077696c6c2068617665206d65646961746f72732072656d6f7665642ecd012a20606d65646961746f7273603a204120736574206f66205b604964656e746974794964605d206f6620616c6c20746865206d65646961746f727320746861742077696c6c2062652072656d6f7665642066726f6d20746865206d616e6461746f7279206d65646961746f7273206c6973742e003423205065726d697373696f6e731c2a2041737365745c6c696e6b5f7469636b65725f746f5f61737365745f69640801187469636b6572210101185469636b657200012061737365745f6964a8011c41737365744944001f24e445737461626c6973686573206120636f6e6e656374696f6e206265747765656e2061207469636b657220616e6420616e20417373657449442e002c2320417267756d656e7473b02a20606f726967696e603a20746865207365636f6e64617279206b6579206f66207468652073656e6465722e1d012a20607469636b6572603a20746865205b605469636b6572605d20746861742077696c6c206265206c696e6b656420746f2074686520676976656e206061737365745f6964602e05012a206061737365745f6964603a20746865205b6041737365744944605d20746861742077696c6c20626520636f6e6e656374656420746f20607469636b6572602e003423205065726d697373696f6e731c2a2041737365740c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652eb506000002190200b9060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401800453000004008d02012c42547265655365743c543e0000bd060c6070616c6c65745f636f72706f726174655f616374696f6e7330646973747269627574696f6e1043616c6c04045400011428646973747269627574651c011463615f69649902011043414964000124706f7274666f6c696fc106015c4f7074696f6e3c506f7274666f6c696f4e756d6265723e00012063757272656e6379a8011c417373657449440001247065725f736861726518011c42616c616e6365000118616d6f756e7418011c42616c616e63650001287061796d656e745f61742801184d6f6d656e74000128657870697265735f6174050101384f7074696f6e3c4d6f6d656e743e0000ac2501537461727420616e64206174746163682061206361706974616c20646973747269627574696f6e2c20746f20746865204341206964656e746966696564206279206063615f6964602c6501776974682060616d6f756e74602066756e647320696e206063757272656e6379602077697468647261776e2066726f6d2060706f7274666f6c696f602062656c6f6e67696e6720746f20606f726967696e602773204449442e00290154686520646973747269627574696f6e2077696c6c20636f6d6d656e636520617420607061796d656e745f61746020616e64206578706972652061742060657870697265735f6174602cc869662070726f76696465642c206f7220696620604e6f6e65602c207468656e2074686572652773206e6f206578706972792e0025015468652066756e64732077696c6c206265206c6f636b656420696e2060706f7274666f6c696f602066726f6d207768656e206064697374726962757465602069732063616c6c65642e35015768656e2074686572652773206e6f206578706972792c20736f6d652066756e6473206d6179206265206c6f636b656420696e646566696e6974656c7920696e2060706f7274666f6c696f602c150164756520746f20636c61696d616e7473206e6f74207769746864726177696e67206f72206e6f2062656e6566697473206265696e672070757368656420746f207468656d2e2901466f7220696e646976697369626c652063757272656e636965732c20756e6c6f636b656420616d6f756e74732c206f66206c657373207468616e206f6e652077686f6c6520756e69742ca877696c6c206e6f74206265207472616e7366657261626c652066726f6d2060706f7274666f6c696f602e4d01486f77657665722c20696620776520696d6167696e6520746861742075736572732060416c6963656020616e642060426f626020626f74682061726520656e7469746c656420746f20312e3520756e6974732c5101616e64206f6e6c7920726563656976652060316020756e69747320656163682c207468656e2060302e35202b20302e35203d20316020756e69747320617265206c65667420696e2060706f7274666f6c696f602c6c7768696368206973206e6f77207472616e736665727261626c652e0030232320417267756d656e74734d012d20606f726967696e602069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206063615f69642e61737365745f6964602e01012d206063615f696460206964656e7469666965732074686520434120746f2073746172742061206361706974616c20646973747269627574696f6e20666f722e59012d2060706f7274666f6c696f60207370656369666965732074686520706f7274666f6c696f206e756d626572206f6620746865206167656e7420746f20646973747269627574652060616d6f756e74602066726f6d2ef42d206063757272656e63796020746f20776974686472617720616e6420646973747269627574652066726f6d207468652060706f7274666f6c696f602ef82d20607065725f73686172656020616d6f756e74206f66206063757272656e63796020746f20776974686472617720616e6420646973747269627574652e25012020205370656369666965642061732061207065722d6d696c6c696f6e2c20692e652e206031202f2031305e36607468206f66206f6e65206063757272656e63796020746f6b656e2ef02d2060616d6f756e7460206f66206063757272656e63796020746f20776974686472617720616e642064697374726962757465206174206d6f73742e19012d20607061796d656e745f61746020737065636966696573207768656e2062656e6566697473206d617920666972737420626520707573686564206f7220636c61696d65642e29012d2060657870697265735f617460207370656369666965732c2069662070726f76696465642c207768656e2072656d61696e696e672062656e65666974732061726520666f726665697490202020616e64206d6179206265207265636c61696d656420627920606f726967696e602e002023204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602efc2d20604578706972794265666f72655061796d656e74602069662060657870697265735f61742e756e777261702829203c3d207061796d656e745f6174602ee42d20604e6f53756368434160206966206063615f69646020646f6573206e6f74206964656e7469667920616e206578697374696e672043412ea82d20604e6f5265636f7264446174656020696620434120686173206e6f207265636f726420646174652ee82d20605265636f72644461746541667465725374617274602069662043412773207265636f72642064617465203e207061796d656e745f61742e31012d2060556e617574686f72697a6564437573746f6469616e60206966207468652063616c6c6572206973206e6f742074686520637573746f6469616e206f662060706f7274666f6c696f602e55012d2060496e73756666696369656e74506f7274666f6c696f42616c616e6365602069662060706f7274666f6c696f6020686173206c657373207468616e2060616d6f756e7460206f66206063757272656e6379602e01012d2060496e73756666696369656e7442616c616e636560206966207468652070726f746f636f6c2066656520636f756c646e277420626520636861726765642e45012d206043414e6f7442656e656669746020696620746865204341206973206e6f74206f66206b696e64205072656469637461626c6542656e656669742f556e7072656469637461626c6542656e65666974d42d2060446973747269627574696f6e416d6f756e7449735a65726f60206966207468652060616d6f756e7460206973207a65726f2ee82d2060446973747269627574696f6e506572536861726549735a65726f602069662074686520607065725f736861726560206973207a65726f2e003423205065726d697373696f6e731c2a2041737365742c2a20506f7274666f6c696f14636c61696d04011463615f6964990201104341496400015c0101436c61696d20612062656e65666974206f6620746865206361706974616c20646973747269627574696f6e20617474616368656420746f206063615f6964602e00a8546178657320617265207769746868656c6420617320737065636966696564206279207468652043412e5901506f73742d746178206561726e696e677320617265207468656e207472616e7366657272656420746f207468652064656661756c7420706f7274666f6c696f206f662074686520606f726967696e602773204449442e001101416c6c2062656e65666974732061726520726f756e646564206279207472756e636174696f6e2c20646f776e20746f20666972737420696e74656765722062656c6f772e39014d6f72656f7665722c206265666f726520706f73742d746178206561726e696e67732c20696e20696e646976697369626c652063757272656e6369657320617265207472616e736665727265642c98746865792061726520726f756e64656420646f776e20746f20612077686f6c6520756e69742e0030232320417267756d656e747345012d20606f726967696e60207768696368206d757374206265206120686f6c646572206f662074686520617373657420616e6420656c696769626c6520666f722074686520646973747269627574696f6e2e01012d206063615f696460206964656e7469666965732074686520434120746f2073746172742061206361706974616c20646973747269627574696f6e20666f722e002023204572726f727325012d2060486f6c646572416c7265616479506169646020696620606f726967696e602773204449442068617320616c7265616479207265636569766564206974732062656e656669742e19012d20604e6f53756368446973747269627574696f6e602069662074686572652773206e6f206361706974616c20646973747269627574696f6e20666f72206063615f6964602ec42d206043616e6e6f74436c61696d4265666f726553746172746020696620606e6f77203c207061796d656e745f6174602ee42d206043616e6e6f74436c61696d41667465724578706972796020696620606e6f77203e206578706972795f61742e756e777261702829602ee42d20604e6f53756368434160206966206063615f69646020646f6573206e6f74206964656e7469667920616e206578697374696e672043412ef42d20604e6f74546172676574656442794341602069662074686520434120646f6573206e6f742074617267657420606f726967696e602773204449442e35012d206042616c616e6365416d6f756e7450726f647563744f766572666c6f7765646020696620606261203d2062616c616e6365202a20616d6f756e746020776f756c64206f766572666c6f772e35012d206042616c616e6365416d6f756e7450726f64756374537570706c794469766973696f6e4661696c65646020696620606261202a20737570706c796020776f756c64206f766572666c6f772e21012d204f74686572206572726f72732063616e206f636375722069662074686520636f6d706c69616e6365206d616e616765722072656a6563747320746865207472616e736665722e30707573685f62656e6566697408011463615f69649902011043414964000118686f6c6465728001284964656e746974794964000260f8507573682062656e65666974206f6620616e206f6e676f696e6720646973747269627574696f6e20746f2074686520676976656e2060686f6c646572602e00a8546178657320617265207769746868656c6420617320737065636966696564206279207468652043412e5901506f73742d746178206561726e696e677320617265207468656e207472616e7366657272656420746f207468652064656661756c7420706f7274666f6c696f206f662074686520606f726967696e602773204449442e001101416c6c2062656e65666974732061726520726f756e646564206279207472756e636174696f6e2c20646f776e20746f20666972737420696e74656765722062656c6f772e39014d6f72656f7665722c206265666f726520706f73742d746178206561726e696e67732c20696e20696e646976697369626c652063757272656e6369657320617265207472616e736665727265642c98746865792061726520726f756e64656420646f776e20746f20612077686f6c6520756e69742e0030232320417267756d656e74734d012d20606f726967696e602069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206063615f69642e61737365745f6964602e39012d206063615f696460206964656e7469666965732074686520434120776974682061206361706974616c20646973747269627574696f6e7320746f20707573682062656e656669747320666f722e7c2d2060686f6c6465726020746f20707573682062656e656669747320746f2e002023204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602e19012d20604e6f53756368446973747269627574696f6e602069662074686572652773206e6f206361706974616c20646973747269627574696f6e20666f72206063615f6964602ec42d206043616e6e6f74436c61696d4265666f726553746172746020696620606e6f77203c207061796d656e745f6174602ee42d206043616e6e6f74436c61696d41667465724578706972796020696620606e6f77203e206578706972795f61742e756e777261702829602ee42d20604e6f53756368434160206966206063615f69646020646f6573206e6f74206964656e7469667920616e206578697374696e672043412edc2d20604e6f74546172676574656442794341602069662074686520434120646f6573206e6f74207461726765742060686f6c646572602e35012d206042616c616e6365416d6f756e7450726f647563744f766572666c6f7765646020696620606261203d2062616c616e6365202a20616d6f756e746020776f756c64206f766572666c6f772e35012d206042616c616e6365416d6f756e7450726f64756374537570706c794469766973696f6e4661696c65646020696620606261202a20737570706c796020776f756c64206f766572666c6f772e21012d204f74686572206572726f72732063616e206f636375722069662074686520636f6d706c69616e6365206d616e616765722072656a6563747320746865207472616e736665722e1c7265636c61696d04011463615f6964990201104341496400032c90417373756d696e67206120646973747269627574696f6e2068617320657870697265642ce4756e6c6f636b207468652072656d61696e696e6720616d6f756e7420696e20746865206469737472696275746f7220706f7274666f6c696f2e0030232320417267756d656e747345012d20606f726967696e60207768696368206d757374206265207468652063726561746f72206f6620746865206361706974616c20646973747269627574696f6e207469656420746f206063615f6964602e1d012d206063615f696460206964656e7469666965732074686520434120776974682061206361706974616c20646973747269627574696f6e20746f207265636c61696d20666f722e002023204572726f727319012d20604e6f53756368446973747269627574696f6e602069662074686572652773206e6f206361706974616c20646973747269627574696f6e20666f72206063615f6964602e2d012d2060416c72656164795265636c61696d65646020696620746869732066756e6374696f6e2068617320616c7265616479206265656e2063616c6c6564207375636365737366756c6c792e842d20604e6f74457870697265646020696620606e6f77203c20657870697279602e4c72656d6f76655f646973747269627574696f6e04011463615f6964990201104341496400042cbc52656d6f766573206120646973747269627574696f6e2074686174206861736e27742073746172746564207965742cdc756e6c6f636b696e67207468652066756c6c20616d6f756e7420696e20746865206469737472696275746f7220706f7274666f6c696f2e0030232320417267756d656e74734d012d20606f726967696e602069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206063615f69642e61737365745f6964602e49012d206063615f696460206964656e7469666965732074686520434120776974682061206e6f742d7965742d73746172746564206361706974616c20646973747269627574696f6e20746f2072656d6f76652e002023204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602e19012d20604e6f53756368446973747269627574696f6e602069662074686572652773206e6f206361706974616c20646973747269627574696f6e20666f72206063615f6964602ebc2d2060446973747269627574696f6e537461727465646020696620607061796d656e745f6174203c3d206e6f77602e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ec10604184f7074696f6e04045401f00108104e6f6e6500000010536f6d650400f00000010000c5060c3070616c6c65745f617373657428636865636b706f696e741043616c6c040454000110446372656174655f636865636b706f696e7404012061737365745f6964a8011c41737365744944000024c04372656174657320612073696e676c6520636865636b706f696e74206174207468652063757272656e742074696d652e002c2320417267756d656e747335012d20606f726967696e602069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ea82d206061737365745f69646020746f206372656174652074686520636865636b706f696e7420666f722e002023204572726f72735d012d2060556e617574686f72697a65644167656e74602069662074686520444944206f6620606f726967696e602069736e27742061207065726d697373696f6e6564206167656e7420666f72206061737365745f6964602e0d012d2060436f756e7465724f766572666c6f77602069662074686520746f74616c20636865636b706f696e7420636f756e74657220776f756c64206f766572666c6f772e707365745f7363686564756c65735f6d61785f636f6d706c65786974790401386d61785f636f6d706c657869747928010c75363400012461015365747320746865206d617820636f6d706c6578697479206f662061207363686564756c652073657420666f7220616e206172626974726172792061737365745f696420746f20606d61785f636f6d706c6578697479602eb8546865206e6577206d6178696d756d206973206e6f7420656e666f7263656420726574726f6163746976656c792cb4616e64206f6e6c79206170706c696573206f6e6365206e6577207363686564756c657320617265206d6164652e00a84d7573742062652063616c6c6564206173206120504950202872657175697265732022726f6f7422292e002c2320417267756d656e7473782d20606f726967696e602069732074686520726f6f74206f726967696e2e05012d20606d61785f636f6d706c65786974796020616c6c6f77656420666f7220616e206172626974726172792061737365742773207363686564756c65207365742e3c6372656174655f7363686564756c6508012061737365745f6964a8011c417373657449440001207363686564756c65b502014c5363686564756c65436865636b706f696e7473000244a4437265617465732061207363686564756c652067656e65726174696e6720636865636b706f696e7473d4696e20746865206675747572652061742065697468657220612066697865642074696d65206f7220617420696e74657276616c732e000901546865207363686564756c6520737461727473206f7574207769746820607374726f6e675f7265665f636f756e74287363686564756c655f696429203c2d2030602e002c2320417267756d656e747329012d20606f726967696e602069732061207369676e6572207468617420686173207065726d697373696f6e7320746f20616374206173206f776e6572206f66206061737365745f6964602ea02d206061737365745f69646020746f2063726561746520746865207363686564756c6520666f722eb02d20607363686564756c656020746861742077696c6c2067656e657261746520636865636b706f696e74732e002023204572726f72735d012d2060556e617574686f72697a65644167656e74602069662074686520444944206f6620606f726967696e602069736e27742061207065726d697373696f6e6564206167656e7420666f72206061737365745f6964602e21012d2060496e73756666696369656e744163636f756e7442616c616e636560206966207468652070726f746f636f6c2066656520636f756c64206e6f7420626520636861726765642e4d012d2060436f756e7465724f766572666c6f776020696620746865207363686564756c65204944206f7220746f74616c20636865636b706f696e7420636f756e7465727320776f756c64206f766572666c6f772e003423205065726d697373696f6e731c2a2041737365743c72656d6f76655f7363686564756c6508012061737365745f6964a8011c417373657449440001086964b10201285363686564756c654964000338fc52656d6f7665732074686520636865636b706f696e74207363686564756c65206f6620616e206173736574206964656e74696669656420627920606964602e002c2320417267756d656e747329012d20606f726967696e602069732061207369676e6572207468617420686173207065726d697373696f6e7320746f20616374206173206f776e6572206f66206061737365745f6964602ea42d206061737365745f69646020746f2072656d6f766520746865207363686564756c652066726f6d2e09012d2060696460206f6620746865207363686564756c652c207768656e2069742077617320637265617465642062792060637265617465645f7363686564756c65602e002023204572726f72735d012d2060556e617574686f72697a65644167656e74602069662074686520444944206f6620606f726967696e602069736e27742061207065726d697373696f6e6564206167656e7420666f72206061737365745f6964602e49012d20604e6f436865636b706f696e745363686564756c6560206966206069646020646f6573206e6f74206964656e746966792061207363686564756c6520666f722074686973206061737365745f6964602ef42d20605363686564756c654e6f7452656d6f7661626c656020696620606964602065786973747320627574206973206e6f742072656d6f7661626c652e003423205065726d697373696f6e731c2a2041737365740c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ec906086470616c6c65745f636f6d706c69616e63655f6d616e616765721043616c6c040454000124686164645f636f6d706c69616e63655f726571756972656d656e740c012061737365745f6964a8011c4173736574494400014473656e6465725f636f6e646974696f6e73c90201385665633c436f6e646974696f6e3e00014c72656365697665725f636f6e646974696f6e73c90201385665633c436f6e646974696f6e3e00002cf841646473206120636f6d706c69616e636520726571756972656d656e7420746f20616e20617373657420676976656e206279206061737365745f6964602e6901496620746865726520617265206475706c696361746520436c61696d547970657320666f72206120706172746963756c61722074727573746564206973737565722c206475706c696361746573206172652072656d6f7665642e002c2320417267756d656e747329012a206f726967696e202d205369676e6572206f662074686520646973706174636861626c652e2049742073686f756c6420626520746865206f776e6572206f6620746865206173736574802a2061737365745f6964202d2053796d626f6c206f6620746865206173736574c42a2073656e6465725f636f6e646974696f6e73202d2053656e646572207472616e7366657220636f6e646974696f6e732ed42a2072656365697665725f636f6e646974696f6e73202d205265636569766572207472616e7366657220636f6e646974696f6e732e003423205065726d697373696f6e731c2a2041737365747472656d6f76655f636f6d706c69616e63655f726571756972656d656e7408012061737365745f6964a8011c41737365744944000108696410010c753332000124f052656d6f766573206120636f6d706c69616e636520726571756972656d656e742066726f6d20616e206173736574277320636f6d706c69616e63652e002c2320417267756d656e747329012a206f726967696e202d205369676e6572206f662074686520646973706174636861626c652e2049742073686f756c6420626520746865206f776e6572206f6620746865206173736574802a2061737365745f6964202d2053796d626f6c206f6620746865206173736574f02a206964202d20436f6d706c69616e636520726571756972656d656e74206964207768696368206973206e65656420746f2062652072656d6f766564003423205065726d697373696f6e731c2a204173736574607265706c6163655f61737365745f636f6d706c69616e636508012061737365745f6964a8011c4173736574494400014061737365745f636f6d706c69616e6365f10201685665633c436f6d706c69616e6365526571756972656d656e743e00023cd45265706c6163657320616e206173736574277320636f6d706c69616e636520776974682061206e657720636f6d706c69616e63652e00fc436f6d706c69616e636520726571756972656d656e74732077696c6c20626520736f727465642028617363656e64696e6720627920696429206265666f72658c7265706c6163696e67207468652063757272656e7420726571756972656d656e74732e002c2320417267756d656e7473882a206061737365745f696460202d207468652061737365742061737365745f69642cbc2a206061737365745f636f6d706c69616e6365202d20746865206e657720617373657420636f6d706c69616e63652e002023204572726f7273f82a2060556e617574686f72697a65646020696620606f726967696e60206973206e6f7420746865206f776e6572206f66207468652061737365745f69642eb1012a20604475706c69636174654173736574436f6d706c69616e636560206966206061737365745f636f6d706c69616e63656020636f6e7461696e73206d756c7469706c6520656e74726965732077697468207468652073616d652060726571756972656d656e745f6964602e003423205065726d697373696f6e731c2a2041737365745872657365745f61737365745f636f6d706c69616e636504012061737365745f6964a8011c417373657449440003207452656d6f76657320616e206173736574277320636f6d706c69616e6365002c2320417267756d656e747329012a206f726967696e202d205369676e6572206f662074686520646973706174636861626c652e2049742073686f756c6420626520746865206f776e6572206f6620746865206173736574802a2061737365745f6964202d2053796d626f6c206f6620746865206173736574003423205065726d697373696f6e731c2a2041737365745870617573655f61737365745f636f6d706c69616e636504012061737365745f6964a8011c4173736574494400042019015061757365732074686520766572696669636174696f6e206f6620636f6e646974696f6e7320666f72206061737365745f69646020647572696e67207472616e73666572732e002c2320417267756d656e747329012a206f726967696e202d205369676e6572206f662074686520646973706174636861626c652e2049742073686f756c6420626520746865206f776e6572206f6620746865206173736574802a2061737365745f6964202d2053796d626f6c206f6620746865206173736574003423205065726d697373696f6e731c2a2041737365745c726573756d655f61737365745f636f6d706c69616e636504012061737365745f6964a8011c417373657449440005201d01526573756d65732074686520766572696669636174696f6e206f6620636f6e646974696f6e7320666f72206061737365745f69646020647572696e67207472616e73666572732e002c2320417267756d656e747329012a206f726967696e202d205369676e6572206f662074686520646973706174636861626c652e2049742073686f756c6420626520746865206f776e6572206f6620746865206173736574802a2061737365745f6964202d2053796d626f6c206f6620746865206173736574003423205065726d697373696f6e731c2a204173736574806164645f64656661756c745f747275737465645f636c61696d5f69737375657208012061737365745f6964a8011c41737365744944000118697373756572e102013454727573746564497373756572000624f44164647320616e6f746865722064656661756c74207472757374656420636c61696d2069737375657220617420746865206173736574206c6576656c2e002c2320417267756d656e74732d012a206f726967696e202d205369676e6572206f662074686520646973706174636861626c652e2049742073686f756c6420626520746865206f776e6572206f66207468652061737365742e842a2061737365745f6964202d2053796d626f6c206f66207468652061737365742ec82a20697373756572202d204964656e746974794964206f6620746865207472757374656420636c61696d206973737565722e003423205065726d697373696f6e731c2a2041737365748c72656d6f76655f64656661756c745f747275737465645f636c61696d5f69737375657208012061737365745f6964a8011c417373657449440001186973737565728001284964656e746974794964000724710152656d6f7665732074686520676976656e2060697373756572602066726f6d2074686520736574206f662064656661756c74207472757374656420636c61696d206973737565727320617420746865206173736574206c6576656c2e002c2320417267756d656e74732d012a206f726967696e202d205369676e6572206f662074686520646973706174636861626c652e2049742073686f756c6420626520746865206f776e6572206f66207468652061737365742e842a2061737365745f6964202d2053796d626f6c206f66207468652061737365742ec82a20697373756572202d204964656e746974794964206f6620746865207472757374656420636c61696d206973737565722e003423205065726d697373696f6e731c2a204173736574746368616e67655f636f6d706c69616e63655f726571756972656d656e7408012061737365745f6964a8011c4173736574494400011c6e65775f726571c5020154436f6d706c69616e6365526571756972656d656e74000824ec4d6f6469667920616e206578697374696e6720636f6d706c69616e636520726571756972656d656e74206f66206120676976656e2061737365742e002c2320417267756d656e74732d012a206f726967696e202d205369676e6572206f662074686520646973706174636861626c652e2049742073686f756c6420626520746865206f776e6572206f66207468652061737365742e842a2061737365745f6964202d2053796d626f6c206f66207468652061737365742e8c2a206e65775f726571202d20436f6d706c69616e636520726571756972656d656e742e003423205065726d697373696f6e731c2a2041737365740c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ecd06086070616c6c65745f636f72706f726174655f616374696f6e731043616c6c040454000124587365745f6d61785f64657461696c735f6c656e6774680401186c656e67746810010c753332000008d053657420746865206d617820606c656e67746860206f66206064657461696c736020696e207465726d73206f662062797465732e744d6179206f6e6c792062652063616c6c6564207669612061205049502e4c7365745f64656661756c745f7461726765747308012061737365745f6964a8011c4173736574494400011c74617267657473f90201405461726765744964656e746974696573000134cc536574207468652064656661756c7420434120605461726765744964656e7469746965736020746f206074617267657473602e0030232320417267756d656e74734d012d20606f726967696e60207768696368206d75737420626520616e2065787465726e616c206167656e74206f66206061737365745f69646020776974682072656c6576616e74207065726d697373696f6e732eec2d206061737365745f69646020666f72207768696368207468652064656661756c74206964656e74697469657320617265206368616e67696e672ecc2d20607461726765747360207468652064656661756c7420746172676574206964656e74697469657320666f7220612043412e00242323204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602e31012d2060546f6f4d616e79546172676574496473602069662060746172676574732e6964656e7469746965732e6c656e2829203e20543a3a4d61785461726765744964733a3a6765742829602e003423205065726d697373696f6e731c2a2041737365746c7365745f64656661756c745f77697468686f6c64696e675f74617808012061737365745f6964a8011c4173736574494400010c746178a502010c5461780002304501536574207468652064656661756c742077697468686f6c64696e672074617820666f7220616c6c204449447320616e64204341732072656c6576616e7420746f2074686973206061737365745f6964602e0030232320417267756d656e74734d012d20606f726967696e60207768696368206d75737420626520616e2065787465726e616c206167656e74206f66206061737365745f69646020776974682072656c6576616e74207065726d697373696f6e732ed02d206061737365745f6964602074686174207468652077697468686f6c64696e67207461782077696c6c206170706c7920746f2e05012d20607461786020746861742073686f756c64206265207769746868656c64207768656e20646973747269627574696e67206469766964656e64732c206574632e00242323204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602e003423205065726d697373696f6e731c2a2041737365745c7365745f6469645f77697468686f6c64696e675f7461780c012061737365745f6964a8011c4173736574494400012474617865645f6469648001284964656e74697479496400010c7461780103012c4f7074696f6e3c5461783e000340fc536574207468652077697468686f6c64696e6720746178206f66206061737365745f69646020666f72206074617865645f6469646020746f2060746178602e890149662060536f6d652874617829602c2074686973206f7665727269646573207468652064656661756c742077697468686f6c64696e6720746178206f66206061737365745f69646020746f20607461786020666f72206074617865645f646964602efc4f74686572776973652c20696620604e6f6e65602c207468652064656661756c742077697468686f6c64696e67207461782077696c6c20626520757365642e0030232320417267756d656e74734d012d20606f726967696e60207768696368206d75737420626520616e2065787465726e616c206167656e74206f66206061737365745f69646020776974682072656c6576616e74207065726d697373696f6e732ed02d206061737365745f6964602074686174207468652077697468686f6c64696e67207461782077696c6c206170706c7920746f2ee42d206074617865645f6469646020746861742077696c6c2068617665206974732077697468686f6c64696e672074617820757064617465642e05012d20607461786020746861742073686f756c64206265207769746868656c64207768656e20646973747269627574696e67206469766964656e64732c206574632e00242323204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602e81012d2060546f6f4d616e794469645461786573602069662060536f6d6528746178296020616e6420616464696e6720746865206f7665727269646520776f756c6420676f206f76657220746865206c696d697420604d617844696457687473602e003423205065726d697373696f6e731c2a20417373657464696e6974696174655f636f72706f726174655f616374696f6e20012061737365745f6964a8011c417373657449440001106b696e640903011843414b696e640001246465636c5f646174652801184d6f6d656e7400012c7265636f72645f64617465d10601584f7074696f6e3c5265636f726444617465537065633e00011c64657461696c7321030124434144657461696c7300011c74617267657473d90601604f7074696f6e3c5461726765744964656e7469746965733e00015c64656661756c745f77697468686f6c64696e675f7461780103012c4f7074696f6e3c5461783e00013c77697468686f6c64696e675f746178dd0601784f7074696f6e3c5665633c284964656e7469747949642c20546178293e3e0004785101496e69746961746573206120434120666f72206061737365745f696460206f6620606b696e64602077697468206064657461696c736020616e64206f746865722070726f766964656420617267756d656e74732e0030232320417267756d656e74734d012d20606f726967696e60207768696368206d75737420626520616e2065787465726e616c206167656e74206f66206061737365745f69646020776974682072656c6576616e74207065726d697373696f6e732e942d206061737365745f696460207468617420746865204341206973206d61646520666f722e7c2d20606b696e6460206f66204341206265696e6720696e697469617465642e982d20606465636c5f6461746560206f66204341206272696e6720696e697469616c697a65642ef02d20607265636f72645f64617465602c20696620616e792c20746f2063616c63756c6174652074686520696d70616374206f6620746869732043412e610120202049662070726f76696465642c207468697320726573756c747320696e2061207363686564756c65642062616c616e636520736e617073686f74202822636865636b706f696e7422292061742074686520646174652e4d012d206064657461696c7360206f662074686520434120696e20667265652d7465787420666f726d2c20757020746f2061206365727461696e206e756d626572206f6620627974657320696e206c656e6774682ef42d206074617267657473602c20696620616e792c20776869636820746869732043412069732072656c6576616e742f697272656c6576616e7420746f2e49012020204f76657272696465732c2069662070726f76696465642c207468652064656661756c7420617420746865206173736574206c6576656c2028607365745f64656661756c745f7461726765747360292e5d012d206064656661756c745f77697468686f6c64696e675f746178602c20696620616e792c206973207468652064656661756c742077697468686f6c64696e672074617820746f2075736520666f7220746869732043412e69012020204f76657272696465732c2069662070726f76696465642c207468652064656661756c7420617420746865206173736574206c6576656c2028607365745f64656661756c745f77697468686f6c64696e675f74617860292e21012d206077697468686f6c64696e675f746178602c20696620616e792c2070726f7669646573207065722d4449442077697468686f6c64696e6720746178206f76657272696465732e59012020204f76657272696465732c2069662070726f76696465642c207468652064656661756c7420617420746865206173736574206c6576656c2028607365745f6469645f77697468686f6c64696e675f74617860292e002023204572726f72731d012d206044657461696c73546f6f4c6f6e6760206966206064657461696c732e6c656e28296020676f6573206265796f6e6420606d61785f64657461696c735f6c656e677468602e2d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602e71012d2060436f756e7465724f766572666c6f776020696e2074686520756e6c696b656c79206576656e74207468617420736f206d616e79204341732077657265206372656174656420666f722074686973206061737365745f6964602cf820207468617420696e7465676572206f766572666c6f7720776f756c642068617665206f63637572656420696620696e737465616420616c6c6f7765642e75012d2060546f6f4d616e79446964546178657360206966206077697468686f6c64696e675f7461782e756e7772617028292e6c656e28296020776f756c6420676f206f76657220746865206c696d697420604d617844696457687473602e01012d20604475706c69636174654469645461786020696620612044494420697320696e636c75646564206d6f7265207468616e206f6e636520696e20607774602e55012d2060546f6f4d616e79546172676574496473602069662060746172676574732e756e7772617028292e6964656e7469746965732e6c656e2829203e20543a3a4d61785461726765744964733a3a6765742829602e01012d20604465636c44617465496e4675747572656020696620746865206465636c61726174696f6e2064617465206973206e6f7420696e2074686520706173742e51012d205768656e20607265636f72645f646174652e69735f736f6d652829602c206f74686572206572726f72732064756520746f20636865636b706f696e74207363686564756c696e67206d6179206f636375722e003423205065726d697373696f6e731c2a2041737365742c6c696e6b5f63615f646f6308010869649902011043414964000110646f63732503013c5665633c446f63756d656e7449643e000548ac4c696e6b2074686520676976656e204341206069646020746f2074686520676976656e2060646f6373602ef4416e792070726576696f7573206c696e6b7320666f7220746865204341206172652072656d6f76656420696e206661766f72206f662060646f6373602e00550154686520776f726b666c6f77206865726520697320746f206164642074686520646f63756d656e747320616e6420696e6974696174696e672074686520434120696e20616e79206f7264657220646573697265642ec44f6e636520626f74682065786973742c20746865792063616e206e6f77206265206c696e6b656420746f6765746865722e0030232320417267756d656e747359012d20606f726967696e60207768696368206d75737420626520616e2065787465726e616c206167656e74206f66206069642e61737365745f69646020776974682072656c6576616e74207065726d697373696f6e732ea82d2060696460206f662074686520434120746f206173736f636961746520776974682060646f6373602eb02d2060646f63736020746f206173736f6369617465207769746820746865204341207769746820606964602e002023204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602ed82d20604e6f53756368434160206966206069646020646f6573206e6f74206964656e7469667920616e206578697374696e672043412e19012d20604e6f53756368446f636020696620616e79206f662060646f63736020646f6573206e6f74206964656e7469667920616e206578697374696e6720646f63756d656e742e003423205065726d697373696f6e731c2a2041737365742472656d6f76655f636104011463615f696499020110434149640006489452656d6f76657320746865204341206964656e746966696564206279206063615f6964602e00c44173736f63696174656420646174612c207375636820617320646f63756d656e74206c696e6b732c2062616c6c6f74732cac616e64206361706974616c20646973747269627574696f6e732061726520616c736f2072656d6f7665642e00d4416e79207363686564756c65206173736f636961746564207769746820746865207265636f726420646174652077696c6c20736565b0607374726f6e675f7265665f636f756e74287363686564756c655f696429602064656372656d656e7465642e0030232320417267756d656e747365012d20606f726967696e60207768696368206d75737420626520616e2065787465726e616c206167656e74206f66206063615f69642e61737365745f69646020776974682072656c6576616e74207065726d697373696f6e732e782d206063615f696460206f662074686520434120746f2072656d6f76652e002023204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602ed82d20604e6f53756368434160206966206069646020646f6573206e6f74206964656e7469667920616e206578697374696e672043412e003423205065726d697373696f6e731c2a204173736574486368616e67655f7265636f72645f6461746508011463615f6964990201104341496400012c7265636f72645f64617465d10601584f7074696f6e3c5265636f726444617465537065633e00073ce04368616e67657320746865207265636f72642064617465206f6620746865204341206964656e746966696564206279206063615f6964602e0030232320417267756d656e747365012d20606f726967696e60207768696368206d75737420626520616e2065787465726e616c206167656e74206f66206063615f69642e61737365745f69646020776974682072656c6576616e74207065726d697373696f6e732e742d206063615f696460206f662074686520434120746f20616c7465722eec2d20607265636f72645f64617465602c20696620616e792c20746f2063616c63756c6174652074686520696d70616374206f66207468652043412e610120202049662070726f76696465642c207468697320726573756c747320696e2061207363686564756c65642062616c616e636520736e617073686f74202822636865636b706f696e7422292061742074686520646174652e002023204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602ed82d20604e6f53756368434160206966206069646020646f6573206e6f74206964656e7469667920616e206578697374696e672043412e51012d205768656e20607265636f72645f646174652e69735f736f6d652829602c206f74686572206572726f72732064756520746f20636865636b706f696e74207363686564756c696e67206d6179206f636375722e003423205065726d697373696f6e731c2a204173736574a0696e6974696174655f636f72706f726174655f616374696f6e5f616e645f646973747269627574651c011c63615f61726773e106016c496e697469617465436f72706f72617465416374696f6e41726773000124706f7274666f6c696fc106015c4f7074696f6e3c506f7274666f6c696f4e756d6265723e00012063757272656e6379a8011c417373657449440001247065725f736861726518011c42616c616e6365000118616d6f756e7418011c42616c616e63650001287061796d656e745f61742801184d6f6d656e74000128657870697265735f6174050101384f7074696f6e3c4d6f6d656e743e0008041d015574696c6974792065787472696e73696320746f2062617463682060696e6974696174655f636f72706f726174655f616374696f6e6020616e64206064697374726962757465600c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ed10604184f7074696f6e04045401d5060108104e6f6e6500000010536f6d650400d5060000010000d506086070616c6c65745f636f72706f726174655f616374696f6e73385265636f7264446174655370656300010c245363686564756c656404002801184d6f6d656e74000000404578697374696e675363686564756c650400b10201285363686564756c654964000100204578697374696e670400ad020130436865636b706f696e74496400020000d90604184f7074696f6e04045401f9020108104e6f6e6500000010536f6d650400f9020000010000dd0604184f7074696f6e0404540119030108104e6f6e6500000010536f6d65040019030000010000e106086070616c6c65745f636f72706f726174655f616374696f6e736c496e697469617465436f72706f72617465416374696f6e41726773000020012061737365745f6964a8011c417373657449440001106b696e640903011843414b696e640001246465636c5f646174652801184d6f6d656e7400012c7265636f72645f64617465d10601584f7074696f6e3c5265636f726444617465537065633e00011c64657461696c7321030124434144657461696c7300011c74617267657473d90601604f7074696f6e3c5461726765744964656e7469746965733e00015c64656661756c745f77697468686f6c64696e675f7461780103012c4f7074696f6e3c5461783e00013c77697468686f6c64696e675f746178dd0601784f7074696f6e3c5665633c284964656e7469747949642c20546178293e3e0000e5060c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f741043616c6c040454000118346174746163685f62616c6c6f7410011463615f6964990201104341496400011472616e67652d03013c42616c6c6f7454696d6552616e67650001106d6574613103012842616c6c6f744d65746100010c72637639010110626f6f6c000068e8417474616368206120636f72706f726174652062616c6c6f7420746f20746865204341206964656e746966696564206279206063615f6964602e00ac5468652062616c6c6f742077696c6c2061646d697420766f7465732077697468696e206072616e6765602eb05468652062616c6c6f742773206d657461646174612069732070726f766964656420627920606d657461602c0501776869636820696e636c75646573207468652062616c6c6f74207469746c652c20746865206d6f74696f6e732c2074686569722063686f696365732c206574632e7853656520746865206042616c6c6f744d6574616020666f72206d6f72652e0030232320417267756d656e74734d012d20606f726967696e602069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206063615f69642e61737365745f6964602ed02d206063615f696460206964656e7469666965732074686520434120746f20617474616368207468652062616c6c6f7420746f2ec02d206072616e67656020737065636966696573207768656e20766f74696e672073746172747320616e6420656e64732eec2d20606d6574616020737065636966696573207468652062616c6c6f742773206d657461646174612061732061666f72656d656e74696f6e65642ee42d2060726376602073706563696669657320776865746865722052435620697320656e61626c656420666f7220746869732062616c6c6f742e002023204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602ee42d20604e6f53756368434160206966206063615f69646020646f6573206e6f74206964656e7469667920616e206578697374696e672043412ef02d206043414e6f744e6f746963656020696620746865204341206973206e6f74206f662074686520604973737565724e6f7469636560206b696e642ebc2d206053746172744166746572456e6460206966206072616e67652e7374617274203e2072616e67652e656e64602e29012d20604e6f774166746572456e646020696620606e6f77203e2072616e67652e656e646020776865726520606e6f7760206973207468652063757272656e742074696d657374616d702ea82d20604e6f5265636f7264446174656020696620434120686173206e6f207265636f726420646174652e59012d20605265636f7264446174654166746572537461727460206966206064617465203e2072616e67652e73746172746020776865726520606461746560206973207468652043412773207265636f726420646174652eb82d2060416c726561647945786973747360206966207468657265277320612062616c6c6f7420616c72656164792e31012d20604e756d6265724f6643686f696365734f766572666c6f77602069662074686520746f74616c2063686f69636520696e20606d65746160206f766572666c6f777320607573697a65602e09012d2060546f6f4c6f6e676020696620616e79206f662074686520656d62656464656420737472696e677320696e20606d657461602061726520746f6f206c6f6e672e01012d2060496e73756666696369656e7442616c616e636560206966207468652070726f746f636f6c2066656520636f756c646e277420626520636861726765642e10766f746508011463615f69649902011043414964000114766f7465735103013c5665633c42616c6c6f74566f74653e0001441101436173742060766f7465736020696e207468652062616c6c6f7420617474616368656420746f20746865204341206964656e746966696564206279206063615f6964602e0030232320417267756d656e747309012d20606f726967696e60207768696368206d7573742062652061207065726d697373696f6e6564207369676e6572207461726765746564206279207468652043412eb82d206063615f696460206964656e746966696573207468652061747461636865642062616c6c6f7427732043412e21012d2060766f7465736020737065636966696573207468652062616c616e63657320746f2061737369676e20746f20656163682063686f69636520696e207468652062616c6c6f742e55012020205468652066756c6c20766f74696e6720706f776572206f6620606f726967696e60277320444944206d6179206265207573656420666f722065616368206d6f74696f6e20696e207468652062616c6c6f742e002023204572726f7273dc2d20604e6f5375636842616c6c6f7460206966206063615f69646020646f6573206e6f74206964656e7469667920612062616c6c6f742efc2d2060566f74696e674e6f7453746172746564602069662074686520766f74696e6720706572696f64206861736e277420636f6d6d656e636564207965742ed82d2060566f74696e67416c7265616479456e646564602069662074686520766f74696e6720706572696f642068617320656e6465642e5d012d206057726f6e67566f7465436f756e746020696620746865206e756d626572206f662063686f6963657320696e207468652062616c6c6f7420646f6573206e6f74206d617463682060766f7465732e6c656e2829602ee42d20604e6f53756368434160206966206063615f69646020646f6573206e6f74206964656e7469667920616e206578697374696e672043412ef42d20604e6f74546172676574656442794341602069662074686520434120646f6573206e6f742074617267657420606f726967696e602773204449442e21012d2060496e73756666696369656e74566f746573602069662074686520766f74696e6720706f776572207573656420666f7220616e79206d6f74696f6e20696e2060766f74657360a42020206578636565647320606f726967696e60277320444944277320766f74696e6720706f7765722e286368616e67655f656e6408011463615f6964990201104341496400010c656e642801184d6f6d656e740002300501416d656e642074686520656e642064617465206f66207468652062616c6c6f74206f6620746865204341206964656e746966696564206279206063615f6964602e0030232320417267756d656e74734d012d20606f726967696e602069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206063615f69642e61737365745f6964602eb82d206063615f696460206964656e746966696573207468652061747461636865642062616c6c6f7427732043412ec42d2060656e64602073706563696669657320746865206e657720656e642064617465206f66207468652062616c6c6f742e002023204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602edc2d20604e6f5375636842616c6c6f7460206966206063615f69646020646f6573206e6f74206964656e7469667920612062616c6c6f742e31012d2060566f74696e67416c7265616479537461727465646020696620607374617274203e3d206e6f77602c20776865726520606e6f7760206973207468652063757272656e742074696d652e8c2d206053746172744166746572456e646020696620607374617274203e20656e64602e2c6368616e67655f6d65746108011463615f696499020110434149640001106d6574613103012842616c6c6f744d6574610003346101416d656e6420746865206d6574616461746120287469746c652c206d6f74696f6e732c206574632e29206f66207468652062616c6c6f74206f6620746865204341206964656e746966696564206279206063615f6964602e0030232320417267756d656e74734d012d20606f726967696e602069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206063615f69642e61737365745f6964602eb82d206063615f696460206964656e746966696573207468652061747461636865642062616c6c6f7427732043412e902d20606d657461602073706563696669657320746865206e6577206d657461646174612e002023204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602edc2d20604e6f5375636842616c6c6f7460206966206063615f69646020646f6573206e6f74206964656e7469667920612062616c6c6f742e31012d2060566f74696e67416c7265616479537461727465646020696620607374617274203e3d206e6f77602c20776865726520606e6f7760206973207468652063757272656e742074696d652e31012d20604e756d6265724f6643686f696365734f766572666c6f77602069662074686520746f74616c2063686f69636520696e20606d65746160206f766572666c6f777320607573697a65602e09012d2060546f6f4c6f6e676020696620616e79206f662074686520656d62656464656420737472696e677320696e20606d657461602061726520746f6f206c6f6e672e286368616e67655f72637608011463615f6964990201104341496400010c72637639010110626f6f6c00042c0501416d656e642052435620737570706f727420666f72207468652062616c6c6f74206f6620746865204341206964656e746966696564206279206063615f6964602e0030232320417267756d656e74734d012d20606f726967696e602069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206063615f69642e61737365745f6964602eb82d206063615f696460206964656e746966696573207468652061747461636865642062616c6c6f7427732043412ecc2d206072637660207370656369666965732069662052435620697320746f20626520737570706f72746564206f72206e6f742e002023204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602edc2d20604e6f5375636842616c6c6f7460206966206063615f69646020646f6573206e6f74206964656e7469667920612062616c6c6f742e31012d2060566f74696e67416c7265616479537461727465646020696620607374617274203e3d206e6f77602c20776865726520606e6f7760206973207468652063757272656e742074696d652e3472656d6f76655f62616c6c6f7404011463615f69649902011043414964000528c852656d6f7665207468652062616c6c6f74206f6620746865204341206964656e746966696564206279206063615f6964602e0030232320417267756d656e74734d012d20606f726967696e602069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206063615f69642e61737365745f6964602eb82d206063615f696460206964656e746966696573207468652061747461636865642062616c6c6f7427732043412e002023204572726f72732d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602edc2d20604e6f5375636842616c6c6f7460206966206063615f69646020646f6573206e6f74206964656e7469667920612062616c6c6f742e31012d2060566f74696e67416c7265616479537461727465646020696620607374617274203e3d206e6f77602c20776865726520606e6f7760206973207468652063757272656e742074696d652e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ee906082c70616c6c65745f706970731043616c6c040454000144647365745f7072756e655f686973746f726963616c5f706970730401147072756e6539010110626f6f6c000014a44368616e6765207768657468657220636f6d706c65746564205049507320617265207072756e65642e6c43616e206f6e6c792062652063616c6c656420627920726f6f742e002c2320417267756d656e7473f02a20607072756e656020737065636966696573207768657468657220636f6d706c6574656420504950732073686f756c64206265207072756e65642e607365745f6d696e5f70726f706f73616c5f6465706f73697404011c6465706f73697418011c42616c616e636500011421014368616e676520746865206d696e696d756d2070726f706f73616c206465706f73697420616d6f756e7420726571756972656420746f20737461727420612070726f706f73616c2e6c43616e206f6e6c792062652063616c6c656420627920726f6f742e002c2320417267756d656e7473f02a20606465706f7369746020746865206e6577206d696e206465706f73697420726571756972656420746f20737461727420612070726f706f73616c707365745f64656661756c745f656e6163746d656e745f706572696f640401206475726174696f6e100138543a3a426c6f636b4e756d626572000214904368616e6765207468652064656661756c7420656e6163746d656e7420706572696f642e6c43616e206f6e6c792062652063616c6c656420627920726f6f742e002c2320417267756d656e747369012a20606475726174696f6e6020746865206e65772064656661756c7420656e6163746d656e7420706572696f642069742074616b657320666f722061207363686564756c65642050495020746f2062652065786563757465642e587365745f70656e64696e675f7069705f657870697279040118657870697279590101684d61796265426c6f636b3c543a3a426c6f636b4e756d6265723e00031805014368616e67652074686520616d6f756e74206f6620626c6f636b7320616674657220776869636820612070656e64696e672050495020697320657870697265642eb4496620606578706972796020697320604e6f6e6560207468656e2050495073206e65766572206578706972652e6c43616e206f6e6c792062652063616c6c656420627920726f6f742e002c2320417267756d656e74731d012a2060657870697279602074686520626c6f636b2d74696d652069742074616b657320666f722061207374696c6c2d6050656e64696e67602050495020746f206578706972652e587365745f6d61785f7069705f736b69705f636f756e7404010c6d6178080130536b6970706564436f756e74000414d44368616e676520746865206d6178696d756d20736b697020636f756e742028606d61785f7069705f736b69705f636f756e7460292e6c43616e206f6e6c792062652063616c6c656420627920726f6f742e002c2320417267756d656e7473ec2a20606d61786020736b697073206265666f72652061205049502063616e6e6f7420626520736b697070656420627920474320616e796d6f72652e507365745f6163746976655f7069705f6c696d69740401146c696d697410010c75333200051469014368616e676520746865206d6178696d756d206e756d626572206f66206163746976652050495073206265666f726520636f6d6d756e697479206d656d626572732063616e6e6f742070726f706f736520616e797468696e672e6c43616e206f6e6c792062652063616c6c656420627920726f6f742e002c2320417267756d656e7473902a20606c696d697460206f6620636f6e63757272656e742061637469766520504950732e1c70726f706f736510012070726f706f73616c0d060140426f783c543a3a50726f706f73616c3e00011c6465706f73697418011c42616c616e636500010c75726c6102012c4f7074696f6e3c55726c3e00012c6465736372697074696f6e710301584f7074696f6e3c5069704465736372697074696f6e3e000624050141206e6574776f726b206d656d6265722063726561746573206120504950206279207375626d697474696e67206120646973706174636861626c6520776869636855016368616e67657320746865206e6574776f726b20696e20736f6d657761792e2041206d696e696d756d206465706f73697420697320726571756972656420746f206f70656e2061206e65772070726f706f73616c2e002c2320417267756d656e7473c82a206070726f706f73657260206973206569746865722061207369676e696e67206b6579206f7220636f6d6d69747465652e65012020205573656420746f20756e6465727374616e6420776865746865722074686973206973206120636f6d6d69747465652070726f706f73616c20616e6420766572696669656420616761696e737420606f726967696e602e802a206070726f706f73616c60206120646973706174636861626c652063616c6c45012a20606465706f73697460206d696e696d756d206465706f7369742076616c75652c2077686963682069732069676e6f726564206966206070726f706f73657260206973206120636f6d6d69747465652ecc2a206075726c602061206c696e6b20746f2061207765627369746520666f722070726f706f73616c2064697363757373696f6e10766f74650c010869646d03011450697049640001286179655f6f725f6e617939010110626f6f6c00011c6465706f73697418011c42616c616e63650007481d01566f74652065697468657220696e206661766f722028606179655f6f725f6e617960203d3d207472756529206f7220616761696e7374206120504950207769746820606964602e4d015468652022636f6e76696e6374696f6e22206f7220737472656e677468206f662074686520766f746520697320676976656e20627920606465706f736974602c2077686963682069732072657365727665642e008c4e6f746520746861742060766f746560206973202a6e6f742a2061646469746976652ef8546861742069732c2060766f74652869642c20747275652c203530296020666f6c6c6f7765642062792060766f74652869642c20747275652c2034302960490177696c6c2066697273742072657365727665206035306020616e64207468656e20726566756e6420603530202d203130602c20656e64696e672075702077697468206034306020696e206465706f7369742e2501546f206164642061746f70206f66206578697374696e6720766f7465732c20796f75276c6c206e65656420606578697374696e675f6465706f736974202b206164646974696f6e602e002c2320417267756d656e74734c2a20606964602c2070726f706f73616c206964dc2a20606179655f6f725f6e6179602c206120626f6f6c20726570726573656e74696e6720666f72206f7220616761696e737420766f7465e82a20606465706f736974602c207468652022636f6e76696374696f6e2220776974682077686963682074686520766f7465206973206d6164652e002023204572726f7273e42a20604e6f5375636850726f706f73616c60206966206069646020646f65736e2774207265666572656e636520612076616c6964205049502ee42a20604e6f7446726f6d436f6d6d756e697479602069662070726f706f73616c20776173206d616465206279206120636f6d6d69747465652ec02a2060496e636f727265637450726f706f73616c537461746560206966205049502069736e27742070656e64696e672e2d012a2060496e73756666696369656e744465706f7369746020696620606f726967696e602063616e6e6f74207265736572766520606465706f736974202d206f6c645f6465706f736974602e68617070726f76655f636f6d6d69747465655f70726f706f73616c04010869646d030114506970496400081cd4417070726f766573207468652070656e64696e6720636f6d6d69747465652050495020676976656e2062792074686520606964602e002023204572726f727305012a20604261644f726967696e6020756e6c657373206120474320766f74696e67206d616a6f7269747920657865637574657320746869732066756e6374696f6e2ed82a20604e6f5375636850726f706f73616c6020696620746865205049502077697468206069646020646f65736e27742065786973742ee42a2060496e636f727265637450726f706f73616c537461746560206966207468652070726f706f73616c2069736e27742070656e64696e672ee02a20604e6f744279436f6d6d697474656560206966207468652070726f706f73616c2069736e2774206279206120636f6d6d69747465652e3c72656a6563745f70726f706f73616c04010869646d0301145069704964000920f852656a65637473207468652050495020676976656e2062792074686520606964602c20726566756e64696e6720616e7920626f6e6465642066756e64732cb8617373756d696e67206974206861736e2774206265656e2063616e63656c6c6564206f722065786563757465642e05014e6f746520746861742070726f706f73616c73207363686564756c65642d666f722d657865637574696f6e2063616e20616c736f2062652072656a65637465642e002023204572726f727305012a20604261644f726967696e6020756e6c657373206120474320766f74696e67206d616a6f7269747920657865637574657320746869732066756e6374696f6e2ed82a20604e6f5375636850726f706f73616c6020696620746865205049502077697468206069646020646f65736e27742065786973742e15012a2060496e636f727265637450726f706f73616c537461746560206966207468652070726f706f73616c207761732063616e63656c6c6564206f722065786563757465642e387072756e655f70726f706f73616c04010869646d0301145069704964000a2429015072756e65207468652050495020676976656e2062792074686520606964602c20726566756e64696e6720616e792066756e6473206e6f7420616c726561647920726566756e6465642e6454686520504950206d6179206e6f7420626520616374697665000901546869732066756e6374696f6e20697320696e74656e64656420666f722073746f72616765206761726261676520636f6c6c656374696f6e20707572706f7365732e002023204572726f727305012a20604261644f726967696e6020756e6c657373206120474320766f74696e67206d616a6f7269747920657865637574657320746869732066756e6374696f6e2ed82a20604e6f5375636850726f706f73616c6020696620746865205049502077697468206069646020646f65736e27742065786973742ed42a2060496e636f727265637450726f706f73616c537461746560206966207468652070726f706f73616c206973206163746976652e5072657363686564756c655f657865637574696f6e08010869646d0301145069704964000114756e74696c510601584f7074696f6e3c543a3a426c6f636b4e756d6265723e000b24e0557064617465732074686520657865637574696f6e207363686564756c65206f66207468652050495020676976656e20627920606964602e002c2320417267756d656e747331012a2060756e74696c6020646566696e6573207468652066757475726520626c6f636b2077686572652074686520656e6163746d656e7420706572696f642077696c6c2066696e69736865642e4501202020604e6f6e65602076616c7565206d65616e73207468617420656e6163746d656e7420706572696f6420697320676f696e6720746f2066696e69736820696e20746865206e65787420626c6f636b2e002023204572726f727339012a206052657363686564756c654e6f74427952656c65617365436f6f7264696e61746f726020756e6c657373207472696767657265642062792072656c6561736520636f6f7264696e61746f722e21012a2060496e636f727265637450726f706f73616c53746174656020756e6c657373207468652070726f706f73616c2077617320696e2061207363686564756c65642073746174652e38636c6561725f736e617073686f74000c10e8436c656172732074686520736e617073686f7420616e6420656d69747320746865206576656e742060536e617073686f74436c6561726564602e002023204572726f72733d012a20604e6f7441436f6d6d69747465654d656d62657260202d20747269676765726564207768656e2061206e6f6e2d47432d6d656d626572206578656375746573207468652066756e6374696f6e2e20736e617073686f74000d140d0154616b65732061206e657720736e617073686f74206f66207468652063757272656e74206c697374206f66206163746976652026262070656e64696e6720504950732e2901546865205049507320617265207468656e20736f7274656420696e746f2061207072696f72697479207175657565206261736564206f6e2065616368205049502773207765696768742e002023204572726f72733d012a20604e6f7441436f6d6d69747465654d656d62657260202d20747269676765726564207768656e2061206e6f6e2d47432d6d656d626572206578656375746573207468652066756e6374696f6e2e58656e6163745f736e617073686f745f726573756c747304011c726573756c7473ed0601705665633c2850697049642c20536e617073686f74526573756c74293e000e44d0456e616374732060726573756c74736020666f7220746865205049507320696e2074686520736e617073686f742071756575652e290154686520736e617073686f742077696c6c20626520617661696c61626c6520666f72206675727468657220656e6163746d656e747320756e74696c20697420697320636c65617265642e0055015468652060726573756c7473602061726520656e636f6465642061206c697374206f6620602869642c20726573756c7429602077686572652060726573756c7460206973206170706c69656420746f20606964602e49014e6f746520746861742074686520736e617073686f74207072696f7269747920717565756520697320656e636f646564207769746820746865202a6c6f77657374207072696f726974792066697273742a2e5501736f2060726573756c7473203d205b2869642c20417070726f7665295d602077696c6c20617070726f76652060536e617073686f7451756575655b536e617073686f7451756575652e6c656e2829202d20315d602e002023204572726f72730d012a20604261644f726967696e60202d20756e6c657373206120474320766f74696e67206d616a6f7269747920657865637574657320746869732066756e6374696f6e2e21012a206043616e6e6f74536b697050697060202d206120676976656e205049502068617320616c7265616479206265656e20736b697070656420746f6f206d616e792074696d65732e0d012a2060536e617073686f74526573756c74546f6f4c6172676560202d206f6e206c656e28726573756c747329203e206c656e28736e617073686f745f7175657565292e702a2060536e617073686f7449644d69736d6174636860202d2069663a2420206060607465787498202020e2888320286920e2888820302e2e536e617073686f7451756575652e6c656e2829292efc2020202020726573756c74735b695d2e3020e289a020536e617073686f7451756575655b536e617073686f7451756575652e6c656e2829202d20695d2e6964142020606060f8202020546869732069732070726f746563747320616761696e737420636c656172696e67207175657565207768696c6520474320697320766f74696e672e54657865637574655f7363686564756c65645f70697004010869646d0301145069704964000f04d8496e7465726e616c20646973706174636861626c6520746861742068616e646c657320657865637574696f6e206f662061205049502e506578706972655f7363686564756c65645f70697008010c6469648001284964656e74697479496400010869646d0301145069704964001004dc496e7465726e616c20646973706174636861626c6520746861742068616e646c65732065787069726174696f6e206f662061205049502e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652eed06000002f10600f106000004086d03f50600f506082c70616c6c65745f7069707338536e617073686f74526573756c7400010c1c417070726f76650000001852656a65637400010010536b697000020000f906084070616c6c65745f706f7274666f6c696f1043616c6c04045400012c406372656174655f706f7274666f6c696f0401106e616d65a5030134506f7274666f6c696f4e616d65000004a843726561746573206120706f7274666f6c696f20776974682074686520676976656e20606e616d65602e4064656c6574655f706f7274666f6c696f04010c6e756df0013c506f7274666f6c696f4e756d626572000120350144656c657465732061207573657220706f7274666f6c696f2e204120706f7274666f6c696f2063616e2062652064656c65746564206f6e6c7920696620697420686173206e6f2066756e64732e002023204572726f72731d012a2060506f7274666f6c696f446f65734e6f7445786973746020696620606e756d6020646f65736e2774207265666572656e636520612076616c696420706f7274666f6c696f2ef02a2060506f7274666f6c696f4e6f74456d707479602069662074686520706f7274666f6c696f207374696c6c20686f6c647320616e79206173736574003423205065726d697373696f6e732c2a20506f7274666f6c696f4072656e616d655f706f7274666f6c696f08010c6e756df0013c506f7274666f6c696f4e756d62657200011c746f5f6e616d65a5030134506f7274666f6c696f4e616d6500021c8052656e616d65732061206e6f6e2d64656661756c7420706f7274666f6c696f2e002023204572726f72731d012a2060506f7274666f6c696f446f65734e6f7445786973746020696620606e756d6020646f65736e2774207265666572656e636520612076616c696420706f7274666f6c696f2e003423205065726d697373696f6e732c2a20506f7274666f6c696f58717569745f706f7274666f6c696f5f637573746f647904010c706964e8012c506f7274666f6c696f4964000320bc5768656e2063616c6c65642062792074686520637573746f6469616e206f662060706f7274666f6c696f5f6964602c4901616c6c6f77732072657475726e696e672074686520637573746f6479206f662074686520706f7274666f6c696f20746f2074686520706f7274666f6c696f206f776e657220756e696c61746572616c6c792e002023204572726f72735d012a2060556e617574686f72697a6564437573746f6469616e60206966207468652063616c6c6572206973206e6f74207468652063757272656e7420637573746f6469616e206f662060706f7274666f6c696f5f6964602e003423205065726d697373696f6e732c2a20506f7274666f6c696f606163636570745f706f7274666f6c696f5f637573746f647904011c617574685f696428010c753634000400506d6f76655f706f7274666f6c696f5f66756e64730c011066726f6de8012c506f7274666f6c696f4964000108746fe8012c506f7274666f6c696f496400011466756e6473fd0601245665633c46756e643e000548a1014d6f7665732066756e6769676c6520616e206e6f6e2d66756e6769626c6520746f6b656e732066726f6d206f6e6520706f7274666f6c696f206f6620616e206964656e7469747920746f20616e6f7468657220706f7274666f6c696f206f66207468652073616d65e06964656e746974792e204d7573742062652063616c6c65642062792074686520637573746f6469616e206f66207468652073656e6465722e110146756e64732066726f6d2064656c6574656420706f7274666f6c696f732063616e20616c736f206265207265636f7665726564207669612074686973206d6574686f642e00e0412073686f7274206d656d6f2063616e20626520616464656420746f20746f206561636820746f6b656e20616d6f756e74206d6f7665642e002023204572726f727369012a2060506f7274666f6c696f446f65734e6f74457869737460206966206f6e65206f7220626f7468206f662074686520706f7274666f6c696f73207265666572656e636520616e20696e76616c696420706f7274666f6c696f2e51012a206064657374696e6174696f6e5f69735f73616d655f706f7274666f6c696f6020696620626f74682073656e64657220616e6420726563656976657220706f7274666f6c696f20617265207468652073616d6591012a2060446966666572656e744964656e74697479506f7274666f6c696f7360206966207468652073656e64657220616e6420726563656976657220706f7274666f6c696f732062656c6f6e6720746f20646966666572656e74206964656e74697469657349012a2060556e617574686f72697a6564437573746f6469616e60206966207468652063616c6c6572206973206e6f742074686520637573746f6469616e206f66207468652066726f6d20706f7274666f6c696f41012a2060496e73756666696369656e74506f7274666f6c696f42616c616e636560206966207468652073656e64657220646f6573206e6f74206861766520656e6f75676820667265652062616c616e636549012a20604e6f4475706c6963617465417373657473416c6c6f77656460207468652073616d652061737365742063616e277420626520726570656174656420696e20746865206974656d7320766563746f722e55012a2060496e76616c69645472616e736665724e46544e6f744f776e656460206966207468652063616c6c657220697320747279696e6720746f206d6f766520616e204e465420686520646f65736e2774206f776e2e31012a2060496e76616c69645472616e736665724e465449734c6f636b656460206966207468652063616c6c657220697320747279696e6720746f206d6f76652061206c6f636b6564204e46542e003423205065726d697373696f6e732c2a20506f7274666f6c696f547072655f617070726f76655f706f7274666f6c696f08012061737365745f6964a8011c41737365744944000130706f7274666f6c696f5f6964e8012c506f7274666f6c696f4964000624e05072652d617070726f7665732074686520726563656976656d656e74206f6620616e20617373657420746f206120706f7274666f6c696f2e002c2320417267756d656e7473b42a20606f726967696e60202d20746865207365636f6e64617279206b6579206f66207468652073656e6465722e11012a206061737365745f696460202d20746865205b6041737365744944605d20746861742077696c6c206265206578656d70742066726f6d2061666669726d6174696f6e2e5d012a2060706f7274666f6c696f5f696460202d20746865205b60506f7274666f6c696f4964605d20746861742063616e2072656365697665206061737365745f69646020776974686f75742061666669726d6174696f6e2e003423205065726d697373696f6e732c2a20506f7274666f6c696f7472656d6f76655f706f7274666f6c696f5f7072655f617070726f76616c08012061737365745f6964a8011c41737365744944000130706f7274666f6c696f5f6964e8012c506f7274666f6c696f4964000724d052656d6f766573207468652070726520617070726f76616c206f6620616e20617373657420746f206120706f7274666f6c696f2e002c2320417267756d656e7473b42a20606f726967696e60202d20746865207365636f6e64617279206b6579206f66207468652073656e6465722e11012a206061737365745f696460202d20746865205b6041737365744944605d20746861742077696c6c206265206578656d70742066726f6d2061666669726d6174696f6e2e5d012a2060706f7274666f6c696f5f696460202d20746865205b60506f7274666f6c696f4964605d20746861742063616e2072656365697665206061737365745f69646020776974686f75742061666669726d6174696f6e2e003423205065726d697373696f6e732c2a20506f7274666f6c696f8c616c6c6f775f6964656e746974795f746f5f6372656174655f706f7274666f6c696f73040140747275737465645f6964656e746974798001284964656e746974794964000814b1014164647320616e206964656e7469747920746861742077696c6c20626520616c6c6f77656420746f2063726561746520616e642074616b6520637573746f6479206f66206120706f7274666f6c696f20756e646572207468652063616c6c65722773206964656e746974792e002c2320417267756d656e747389012a2060747275737465645f6964656e7469747960202d20746865205b604964656e746974794964605d20746861742077696c6c20626520616c6c6f77656420746f2063616c6c20606372656174655f637573746f64795f706f7274666f6c696f602e008c7265766f6b655f6372656174655f706f7274666f6c696f735f7065726d697373696f6e0401206964656e746974798001284964656e746974794964000914a10152656d6f766573207065726d697373696f6e206f6620616e206964656e7469747920746f2063726561746520616e642074616b6520637573746f6479206f66206120706f7274666f6c696f20756e646572207468652063616c6c65722773206964656e746974792e002c2320417267756d656e7473b1012a20606964656e7469747960202d20746865205b604964656e746974794964605d20746861742077696c6c206861766520746865207065726d697373696f6e7320746f2063616c6c20606372656174655f637573746f64795f706f7274666f6c696f60207265766f6b65642e00606372656174655f637573746f64795f706f7274666f6c696f080148706f7274666f6c696f5f6f776e65725f69648001284964656e746974794964000138706f7274666f6c696f5f6e616d65a5030134506f7274666f6c696f4e616d65000a18bd0143726561746573206120706f7274666f6c696f20756e646572207468652060706f7274666f6c696f5f6f776e65725f696460206964656e7469747920616e64207472616e73666572732069747320637573746f647920746f207468652063616c6c65722773206964656e746974792e002c2320417267756d656e747331012a2060706f7274666f6c696f5f6f776e65725f696460202d20746865205b604964656e746974794964605d20746861742077696c6c206f776e20746865206e657720706f7274666f6c696f2e01012a2060706f7274666f6c696f5f6e616d6560202d20746865205b60506f7274666f6c696f4e616d65605d206f6620746865206e657720706f7274666f6c696f2e000c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652efd0600000201070001070c4c706f6c796d6573685f7072696d69746976657324706f7274666f6c696f1046756e64000008012c6465736372697074696f6eb103013c46756e644465736372697074696f6e0001106d656d6f8401304f7074696f6e3c4d656d6f3e00000507084c70616c6c65745f70726f746f636f6c5f6665651043616c6c040454000108486368616e67655f636f656666696369656e7404012c636f656666696369656e74c5030120506f73526174696f000010c04368616e676573207468652066656520636f656666696369656e7420666f722074686520726f6f74206f726967696e2e002023204572726f7273882a20604261644f726967696e60202d204f6e6c7920726f6f7420616c6c6f7765642e3c6368616e67655f626173655f6665650801086f700907012850726f746f636f6c4f70000120626173655f66656518011c42616c616e6365000110ac4368616e67657320746865206120626173652066656520666f722074686520726f6f74206f726967696e2e002023204572726f7273882a20604261644f726967696e60202d204f6e6c7920726f6f7420616c6c6f7765642e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e09070c64706f6c796d6573685f636f6d6d6f6e5f7574696c69746965733070726f746f636f6c5f6665652850726f746f636f6c4f700001404c417373657452656769737465725469636b65720000002841737365744973737565000100444173736574416464446f63756d656e7473000200404173736574437265617465417373657400030060436865636b706f696e744372656174655363686564756c65000400a4436f6d706c69616e63654d616e61676572416464436f6d706c69616e6365526571756972656d656e74000500584964656e746974794364645265676973746572446964000600404964656e74697479416464436c61696d000700a44964656e746974794164645365636f6e646172794b65797357697468417574686f72697a6174696f6e0008002c5069707350726f706f736500090040436f6e747261637473507574436f6465000a006c436f72706f7261746542616c6c6f7441747461636842616c6c6f74000b00744361706974616c446973747269627574696f6e44697374726962757465000c004c4e4654437265617465436f6c6c656374696f6e000d001c4e46544d696e74000e006c4964656e746974794372656174654368696c644964656e74697479000f00000d070c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963110701a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c0d06017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e64657810010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963110701a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c0d06017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963110701a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c0d06017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000404a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963110701a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c0d06017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000504905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e110704184f7074696f6e04045401cd030108104e6f6e6500000010536f6d650400cd0300000100001507084470616c6c65745f736574746c656d656e741043616c6c040454000160306372656174655f76656e75650c011c64657461696c73dd03013056656e756544657461696c7300011c7369676e657273fc01445665633c543a3a4163636f756e7449643e00010c747970e103012456656e756554797065000014585265676973746572732061206e65772076656e75652e00a42a206064657461696c7360202d2045787472612064657461696c732061626f757420612076656e75653d012a20607369676e65727360202d204172726179206f66207369676e65727320746861742061726520616c6c6f77656420746f207369676e20726563656970747320666f7220746869732076656e7565942a206074797060202d2054797065206f662076656e7565206265696e672063726561746564507570646174655f76656e75655f64657461696c730801086964d903011c56656e7565496400011c64657461696c73dd03013056656e756544657461696c730001105c4564697420612076656e756527732064657461696c732e00b42a20606964602073706563696669657320746865204944206f66207468652076656e756520746f20656469742ec02a206064657461696c7360207370656369666965732074686520757064617465642076656e75652064657461696c732e447570646174655f76656e75655f747970650801086964d903011c56656e7565496400010c747970e103012456656e756554797065000210504564697420612076656e7565277320747970652e00b42a20606964602073706563696669657320746865204944206f66207468652076656e756520746f20656469742eb42a206074797065602073706563696669657320746865206e65772074797065206f66207468652076656e75652e5061666669726d5f776974685f72656365697074730c0108696489020134496e737472756374696f6e496400013c726563656970745f64657461696c73190701dc5665633c5265636569707444657461696c733c543a3a4163636f756e7449642c20543a3a4f6666436861696e5369676e61747572653e3e000128706f7274666f6c696f73f801405665633c506f7274666f6c696f49643e000324f441666669726d7320616e20696e737472756374696f6e207573696e6720726563656970747320666f72206f6666636861696e207472616e73666572732e002c2320417267756d656e747305012a2060696460202d20746865205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e206265696e672061666669726d65642eb1012a2060726563656970745f64657461696c7360202d206120766563746f72206f66205b605265636569707444657461696c73605d2c20776869636820636f6e7461696e207468652064657461696c732061626f757420746865206f6666636861696e207472616e736665722e95012a2060706f7274666f6c696f7360202d206120766563746f72206f66205b60506f7274666f6c696f4964605d20756e646572207468652063616c6c6572277320636f6e74726f6c20616e6420696e74656e64656420666f722061666669726d6174696f6e2e003423205065726d697373696f6e732c2a20506f7274666f6c696f4c7365745f76656e75655f66696c746572696e6708012061737365745f6964a8011c4173736574494400011c656e61626c656439010110626f6f6c000420c0456e61626c6573206f722064697361626c65642076656e75652066696c746572696e6720666f72206120746f6b656e2e002c2320417267756d656e7473c02a206061737365745f696460202d2041737365744944206f662074686520746f6b656e20696e207175657374696f6e2e19012a2060656e61626c656460202d20426f6f6c65616e20746861742064656369646573206966207468652066696c746572696e672073686f756c6420626520656e61626c65642e003423205065726d697373696f6e731c2a20417373657430616c6c6f775f76656e75657308012061737365745f6964a8011c4173736574494400011876656e756573f10301305665633c56656e756549643e00051c0d01416c6c6f7773206164646974696f6e616c2076656e75657320746f2063726561746520696e737472756374696f6e7320696e766f6c76696e6720616e2061737365742e00c02a206061737365745f696460202d2041737365744944206f662074686520746f6b656e20696e207175657374696f6e2e7d012a206076656e75657360202d204172726179206f662076656e75657320746861742061726520616c6c6f77656420746f2063726561746520696e737472756374696f6e7320666f722074686520746f6b656e20696e207175657374696f6e2e003423205065726d697373696f6e731c2a2041737365743c646973616c6c6f775f76656e75657308012061737365745f6964a8011c4173736574494400011876656e756573f10301305665633c56656e756549643e00061c69015265766f6b6573207065726d697373696f6e20676976656e20746f2076656e75657320666f72206372656174696e6720696e737472756374696f6e7320696e766f6c76696e67206120706172746963756c61722061737365742e00c02a206061737365745f696460202d2041737365744944206f662074686520746f6b656e20696e207175657374696f6e2ea5012a206076656e75657360202d204172726179206f662076656e756573207468617420617265206e6f206c6f6e67657220616c6c6f77656420746f2063726561746520696e737472756374696f6e7320666f722074686520746f6b656e20696e207175657374696f6e2e003423205065726d697373696f6e731c2a204173736574507570646174655f76656e75655f7369676e6572730c01086964d903011c56656e7565496400011c7369676e657273fc01445665633c543a3a4163636f756e7449643e00012c6164645f7369676e65727339010110626f6f6c0007105c4564697420612076656e75652773207369676e6572732eb42a20606964602073706563696669657320746865204944206f66207468652076656e756520746f20656469742ec02a20607369676e657273602073706563696669657320746865207369676e65727320746f206164642f72656d6f76652e91012a20606164645f7369676e657273602073706563696669657320746865207570646174652074797065206164642f72656d6f7665206f662076656e756520776865726520616464206973207472756520616e642072656d6f76652069732066616c73652e68657865637574655f6d616e75616c5f696e737472756374696f6e180108696489020134496e737472756374696f6e4964000124706f7274666f6c696f7d02014c4f7074696f6e3c506f7274666f6c696f49643e00014866756e6769626c655f7472616e736665727310010c7533320001386e6674735f7472616e736665727310010c7533320001486f6666636861696e5f7472616e736665727310010c7533320001307765696768745f6c696d6974ed0401384f7074696f6e3c5765696768743e000834844d616e75616c6c7920657865637574657320616e20696e737472756374696f6e2e002c2320417267756d656e747301012a20606964603a20546865205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e20746f2062652065786563757465642e95012a2060706f7274666f6c696f603a20204f6e65206f66207468652063616c6c65722773205b60506f7274666f6c696f4964605d20776869636820697320616c736f206120636f756e74657220706174727920696e2074686520696e737472756374696f6e2e61014966204e6f6e652c207468652063616c6c6572206d757374206265207468652076656e75652063726561746f72206f72206120636f756e74657220706172747920696e2061205b604c65673a3a4f6666436861696e605d2e1d012a206066756e6769626c655f7472616e7366657273603a20546865206e756d626572206f662066756e6769626c65206c65677320696e2074686520696e737472756374696f6e2e31012a20606e6674735f7472616e7366657273603a20546865206e756d626572206f66206e667473206265696e67207472616e7366657272656420696e2074686520696e737472756374696f6e2e1d012a20606f6666636861696e5f7472616e7366657273603a20546865206e756d626572206f66206f6666636861696e206c65677320696e2074686520696e737472756374696f6e2e8d012a20607765696768745f6c696d6974603a20416e206f7074696f6e616c206d6178696d756d205b60576569676874605d2076616c756520746f206265206368617267656420666f7220657865637574696e672074686520696e737472756374696f6e2e710149662074686520607765696768745f6c696d697460206973206c657373207468616e2074686520726571756972656420616d6f756e742c2074686520696e737472756374696f6e2077696c6c206661696c20657865637574696f6e2e004d024e6f74653a2063616c6c696e672074686520727063206d6574686f6420606765745f657865637574655f696e737472756374696f6e5f696e666f602072657475726e7320616e20696e7374616e6365206f66205b6045786563757465496e737472756374696f6e496e666f605d2c20776869636820636f6e7461696e732074686520636f756e7420706172616d65746572732e3c6164645f696e737472756374696f6e18012076656e75655f6964f503013c4f7074696f6e3c56656e756549643e00013c736574746c656d656e745f74797065f9030178536574746c656d656e74547970653c543a3a426c6f636b4e756d6265723e00012874726164655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e00012876616c75655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e0001106c656773fd0301205665633c4c65673e000140696e737472756374696f6e5f6d656d6f8401304f7074696f6e3c4d656d6f3e0009245c416464732061206e657720696e737472756374696f6e2e002c2320417267756d656e747341012a206076656e75655f6964603a20546865206f7074696f6e616c205b6056656e75654964605d206f66207468652076656e7565207468697320696e737472756374696f6e2062656c6f6e677320746f2e79012a2060736574746c656d656e745f74797065603a20546865205b60536574746c656d656e7454797065605d2073706563696679696e67207768656e2074686520696e737472756374696f6e2073686f756c6420626520736574746c65642e4d012a206074726164655f64617465603a204f7074696f6e616c20646174652066726f6d2077686963682070656f706c652063616e20696e7465726163742077697468207468697320696e737472756374696f6e2e6d012a206076616c75655f64617465603a204f7074696f6e616c20646174652061667465722077686963682074686520696e737472756374696f6e2073686f756c6420626520736574746c656420286e6f7420656e666f72636564292efc2a20606c656773603a204120766563746f72206f6620616c6c205b604c6567605d20696e636c7564656420696e207468697320696e737472756374696f6e2ee82a20606d656d6f603a20416e206f7074696f6e616c205b604d656d6f605d206669656c6420666f72207468697320696e737472756374696f6e2e686164645f616e645f61666669726d5f696e737472756374696f6e1c012076656e75655f6964f503013c4f7074696f6e3c56656e756549643e00013c736574746c656d656e745f74797065f9030178536574746c656d656e74547970653c543a3a426c6f636b4e756d6265723e00012874726164655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e00012876616c75655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e0001106c656773fd0301205665633c4c65673e000128706f7274666f6c696f73f801405665633c506f7274666f6c696f49643e000140696e737472756374696f6e5f6d656d6f8401304f7074696f6e3c4d656d6f3e000a348c4164647320616e642061666669726d732061206e657720696e737472756374696f6e2e002c2320417267756d656e74731d012a206076656e75655f6964603a20546865205b6056656e75654964605d206f66207468652076656e7565207468697320696e737472756374696f6e2062656c6f6e677320746f2e79012a2060736574746c656d656e745f74797065603a20546865205b60536574746c656d656e7454797065605d2073706563696679696e67207768656e2074686520696e737472756374696f6e2073686f756c6420626520736574746c65642e4d012a206074726164655f64617465603a204f7074696f6e616c20646174652066726f6d2077686963682070656f706c652063616e20696e7465726163742077697468207468697320696e737472756374696f6e2e6d012a206076616c75655f64617465603a204f7074696f6e616c20646174652061667465722077686963682074686520696e737472756374696f6e2073686f756c6420626520736574746c656420286e6f7420656e666f72636564292efc2a20606c656773603a204120766563746f72206f6620616c6c205b604c6567605d20696e636c7564656420696e207468697320696e737472756374696f6e2e91012a2060706f7274666f6c696f73603a204120766563746f72206f66205b60506f7274666f6c696f4964605d20756e646572207468652063616c6c6572277320636f6e74726f6c20616e6420696e74656e64656420666f722061666669726d6174696f6e2ee82a20606d656d6f603a20416e206f7074696f6e616c205b604d656d6f605d206669656c6420666f72207468697320696e737472756374696f6e2e003423205065726d697373696f6e732c2a20506f7274666f6c696f4861666669726d5f696e737472756374696f6e080108696489020134496e737472756374696f6e4964000128706f7274666f6c696f73f801405665633c506f7274666f6c696f49643e000b20bc50726f766964652061666669726d6174696f6e20746f20616e206578697374696e6720696e737472756374696f6e2e002c2320417267756d656e747305012a2060696460202d20746865205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e206265696e672061666669726d65642e95012a2060706f7274666f6c696f7360202d206120766563746f72206f66205b60506f7274666f6c696f4964605d20756e646572207468652063616c6c6572277320636f6e74726f6c20616e6420696e74656e64656420666f722061666669726d6174696f6e2e003423205065726d697373696f6e732c2a20506f7274666f6c696f5077697468647261775f61666669726d6174696f6e080108696489020134496e737472756374696f6e4964000128706f7274666f6c696f73f801405665633c506f7274666f6c696f49643e000c20c0576974686472617720616e2061666669726d6174696f6e20666f72206120676976656e20696e737472756374696f6e2e002c2320417267756d656e74734d012a2060696460202d20746865205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e2067657474696e6720616e2061666669726d6174696f6e2077697468647261776e2ec1012a2060706f7274666f6c696f7360202d206120766563746f72206f66205b60506f7274666f6c696f4964605d20756e646572207468652063616c6c6572277320636f6e74726f6c20616e6420696e74656e64656420666f722061666669726d6174696f6e207769746864726177616c2e003423205065726d697373696f6e732c2a20506f7274666f6c696f4872656a6563745f696e737472756374696f6e080108696489020134496e737472756374696f6e4964000124706f7274666f6c696fe8012c506f7274666f6c696f4964000d208052656a6563747320616e206578697374696e6720696e737472756374696f6e2e002c2320417267756d656e747305012a2060696460202d20746865205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e206265696e672072656a65637465642e61012a2060706f7274666f6c696f60202d20746865205b60506f7274666f6c696f4964605d20746861742062656c6f6e677320746f2074686520696e737472756374696f6e20616e642069732072656a656374696e672069742e003423205065726d697373696f6e732c2a20506f7274666f6c696f74657865637574655f7363686564756c65645f696e737472756374696f6e080108696489020134496e737472756374696f6e49640001307765696768745f6c696d6974200118576569676874000e048101526f6f742063616c6c61626c652065787472696e7369632c207573656420617320616e20696e7465726e616c2063616c6c20746f20657865637574652061207363686564756c656420736574746c656d656e7420696e737472756374696f6e2e7c61666669726d5f776974685f72656365697074735f776974685f636f756e74100108696489020134496e737472756374696f6e496400013c726563656970745f64657461696c73190701dc5665633c5265636569707444657461696c733c543a3a4163636f756e7449642c20543a3a4f6666436861696e5369676e61747572653e3e000128706f7274666f6c696f73f801405665633c506f7274666f6c696f49643e0001406e756d6265725f6f665f6173736574732d0701604f7074696f6e3c41666669726d6174696f6e436f756e743e000f30f441666669726d7320616e20696e737472756374696f6e207573696e6720726563656970747320666f72206f6666636861696e207472616e73666572732e002c2320417267756d656e747305012a2060696460202d20746865205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e206265696e672061666669726d65642eb1012a2060726563656970745f64657461696c7360202d206120766563746f72206f66205b605265636569707444657461696c73605d2c20776869636820636f6e7461696e207468652064657461696c732061626f757420746865206f6666636861696e207472616e736665722e95012a2060706f7274666f6c696f7360202d206120766563746f72206f66205b60506f7274666f6c696f4964605d20756e646572207468652063616c6c6572277320636f6e74726f6c20616e6420696e74656e64656420666f722061666669726d6174696f6e2e19022a20606e756d6265725f6f665f61737365747360202d20616e206f7074696f6e616c205b6041666669726d6174696f6e436f756e74605d20746861742077696c6c206265207573656420666f72206120707265636973652066656520657374696d6174696f6e206265666f726520657865637574696e67207468652065787472696e7369632e0085014e6f74653a2063616c6c696e672074686520727063206d6574686f6420606765745f61666669726d6174696f6e5f636f756e74602072657475726e7320616e20696e7374616e6365206f66205b6041666669726d6174696f6e436f756e74605d2e003423205065726d697373696f6e732c2a20506f7274666f6c696f7461666669726d5f696e737472756374696f6e5f776974685f636f756e740c0108696489020134496e737472756374696f6e4964000128706f7274666f6c696f73f801405665633c506f7274666f6c696f49643e0001406e756d6265725f6f665f6173736574732d0701604f7074696f6e3c41666669726d6174696f6e436f756e743e00102cbc50726f766964652061666669726d6174696f6e20746f20616e206578697374696e6720696e737472756374696f6e2e002c2320417267756d656e747305012a2060696460202d20746865205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e206265696e672061666669726d65642e95012a2060706f7274666f6c696f7360202d206120766563746f72206f66205b60506f7274666f6c696f4964605d20756e646572207468652063616c6c6572277320636f6e74726f6c20616e6420696e74656e64656420666f722061666669726d6174696f6e2e19022a20606e756d6265725f6f665f61737365747360202d20616e206f7074696f6e616c205b6041666669726d6174696f6e436f756e74605d20746861742077696c6c206265207573656420666f72206120707265636973652066656520657374696d6174696f6e206265666f726520657865637574696e67207468652065787472696e7369632e0085014e6f74653a2063616c6c696e672074686520727063206d6574686f6420606765745f61666669726d6174696f6e5f636f756e74602072657475726e7320616e20696e7374616e6365206f66205b6041666669726d6174696f6e436f756e74605d2e003423205065726d697373696f6e732c2a20506f7274666f6c696f7472656a6563745f696e737472756374696f6e5f776974685f636f756e740c0108696489020134496e737472756374696f6e4964000124706f7274666f6c696fe8012c506f7274666f6c696f49640001406e756d6265725f6f665f617373657473390701484f7074696f6e3c4173736574436f756e743e00112c8052656a6563747320616e206578697374696e6720696e737472756374696f6e2e002c2320417267756d656e747305012a2060696460202d20746865205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e206265696e672072656a65637465642e61012a2060706f7274666f6c696f60202d20746865205b60506f7274666f6c696f4964605d20746861742062656c6f6e677320746f2074686520696e737472756374696f6e20616e642069732072656a656374696e672069742e01022a20606e756d6265725f6f665f61737365747360202d20616e206f7074696f6e616c205b604173736574436f756e74605d20746861742077696c6c206265207573656420666f72206120707265636973652066656520657374696d6174696f6e206265666f726520657865637574696e67207468652065787472696e7369632e0035024e6f74653a2063616c6c696e672074686520727063206d6574686f6420606765745f657865637574655f696e737472756374696f6e5f696e666f602072657475726e7320616e20696e7374616e6365206f66205b6045786563757465496e737472756374696f6e496e666f605d2c20776869636820636f6e7461696e2074686520617373657420636f756e742e003423205065726d697373696f6e732c2a20506f7274666f6c696f7c77697468647261775f61666669726d6174696f6e5f776974685f636f756e740c0108696489020134496e737472756374696f6e4964000128706f7274666f6c696f73f801405665633c506f7274666f6c696f49643e0001406e756d6265725f6f665f6173736574732d0701604f7074696f6e3c41666669726d6174696f6e436f756e743e00122cc0576974686472617720616e2061666669726d6174696f6e20666f72206120676976656e20696e737472756374696f6e2e002c2320417267756d656e74734d012a2060696460202d20746865205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e2067657474696e6720616e2061666669726d6174696f6e2077697468647261776e2ec1012a2060706f7274666f6c696f7360202d206120766563746f72206f66205b60506f7274666f6c696f4964605d20756e646572207468652063616c6c6572277320636f6e74726f6c20616e6420696e74656e64656420666f722061666669726d6174696f6e207769746864726177616c2e19022a20606e756d6265725f6f665f61737365747360202d20616e206f7074696f6e616c205b6041666669726d6174696f6e436f756e74605d20746861742077696c6c206265207573656420666f72206120707265636973652066656520657374696d6174696f6e206265666f726520657865637574696e67207468652065787472696e7369632e0085014e6f74653a2063616c6c696e672074686520727063206d6574686f6420606765745f61666669726d6174696f6e5f636f756e74602072657475726e7320616e20696e7374616e6365206f66205b6041666669726d6174696f6e436f756e74605d2e003423205065726d697373696f6e732c2a20506f7274666f6c696f786164645f696e737472756374696f6e5f776974685f6d65646961746f72731c012076656e75655f6964f503013c4f7074696f6e3c56656e756549643e00013c736574746c656d656e745f74797065f9030178536574746c656d656e74547970653c543a3a426c6f636b4e756d6265723e00012874726164655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e00012876616c75655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e0001106c656773fd0301205665633c4c65673e000140696e737472756374696f6e5f6d656d6f8401304f7074696f6e3c4d656d6f3e0001246d65646961746f72733d0701dc426f756e64656442547265655365743c4964656e7469747949642c20543a3a4d6178496e737472756374696f6e4d65646961746f72733e00132898416464732061206e657720696e737472756374696f6e2077697468206d65646961746f72732e002c2320417267756d656e74731d012a206076656e75655f6964603a20546865205b6056656e75654964605d206f66207468652076656e7565207468697320696e737472756374696f6e2062656c6f6e677320746f2e79012a2060736574746c656d656e745f74797065603a20546865205b60536574746c656d656e7454797065605d2073706563696679696e67207768656e2074686520696e737472756374696f6e2073686f756c6420626520736574746c65642e4d012a206074726164655f64617465603a204f7074696f6e616c20646174652066726f6d2077686963682070656f706c652063616e20696e7465726163742077697468207468697320696e737472756374696f6e2e6d012a206076616c75655f64617465603a204f7074696f6e616c20646174652061667465722077686963682074686520696e737472756374696f6e2073686f756c6420626520736574746c656420286e6f7420656e666f72636564292efc2a20606c656773603a204120766563746f72206f6620616c6c205b604c6567605d20696e636c7564656420696e207468697320696e737472756374696f6e2e19012a2060696e737472756374696f6e5f6d656d6f603a20416e206f7074696f6e616c205b604d656d6f605d206669656c6420666f72207468697320696e737472756374696f6e2e69012a20606d65646961746f7273603a204120736574206f66205b604964656e746974794964605d206f6620616c6c20746865206d616e6461746f7279206d65646961746f727320666f722074686520696e737472756374696f6e2e746164645f616e645f61666669726d5f776974685f6d65646961746f727320012076656e75655f6964f503013c4f7074696f6e3c56656e756549643e00013c736574746c656d656e745f74797065f9030178536574746c656d656e74547970653c543a3a426c6f636b4e756d6265723e00012874726164655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e00012876616c75655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e0001106c656773fd0301205665633c4c65673e000128706f7274666f6c696f73f801405665633c506f7274666f6c696f49643e000140696e737472756374696f6e5f6d656d6f8401304f7074696f6e3c4d656d6f3e0001246d65646961746f72733d0701dc426f756e64656442547265655365743c4964656e7469747949642c20543a3a4d6178496e737472756374696f6e4d65646961746f72733e001438c84164647320616e642061666669726d732061206e657720696e737472756374696f6e2077697468206d65646961746f72732e002c2320417267756d656e74731d012a206076656e75655f6964603a20546865205b6056656e75654964605d206f66207468652076656e7565207468697320696e737472756374696f6e2062656c6f6e677320746f2e79012a2060736574746c656d656e745f74797065603a20546865205b60536574746c656d656e7454797065605d2073706563696679696e67207768656e2074686520696e737472756374696f6e2073686f756c6420626520736574746c65642e4d012a206074726164655f64617465603a204f7074696f6e616c20646174652066726f6d2077686963682070656f706c652063616e20696e7465726163742077697468207468697320696e737472756374696f6e2e6d012a206076616c75655f64617465603a204f7074696f6e616c20646174652061667465722077686963682074686520696e737472756374696f6e2073686f756c6420626520736574746c656420286e6f7420656e666f72636564292efc2a20606c656773603a204120766563746f72206f6620616c6c205b604c6567605d20696e636c7564656420696e207468697320696e737472756374696f6e2e91012a2060706f7274666f6c696f73603a204120766563746f72206f66205b60506f7274666f6c696f4964605d20756e646572207468652063616c6c6572277320636f6e74726f6c20616e6420696e74656e64656420666f722061666669726d6174696f6e2e19012a2060696e737472756374696f6e5f6d656d6f603a20416e206f7074696f6e616c205b604d656d6f605d206669656c6420666f72207468697320696e737472756374696f6e2e69012a20606d65646961746f7273603a204120736574206f66205b604964656e746974794964605d206f6620616c6c20746865206d616e6461746f7279206d65646961746f727320666f722074686520696e737472756374696f6e2e003423205065726d697373696f6e732c2a20506f7274666f6c696f7861666669726d5f696e737472756374696f6e5f61735f6d65646961746f72080138696e737472756374696f6e5f696489020134496e737472756374696f6e4964000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e0015188d0141666669726d732074686520696e737472756374696f6e2061732061206d65646961746f72202d2073686f756c64206f6e6c792062652063616c6c6564206279206d65646961746f72732c206f74686572776973652069742077696c6c206661696c2e002c2320417267756d656e7473b02a20606f726967696e603a20546865207365636f6e64617279206b6579206f66207468652073656e6465722e41012a2060696e737472756374696f6e5f6964603a20546865205b60496e737472756374696f6e4964605d20746861742077696c6c2062652061666669726d656420627920746865206d65646961746f722ec5012a2060657870697279603a20416e204f7074696f6e616c2076616c756520666f7220646566696e696e67207768656e207468652061666669726d6174696f6e2077696c6c2065787069726520284e6f6e65206d65616e732069742077696c6c20616c776179732062652076616c6964292e8077697468647261775f61666669726d6174696f6e5f61735f6d65646961746f72040138696e737472756374696f6e5f696489020134496e737472756374696f6e4964001614d10152656d6f76657320746865206d65646961746f7227732061666669726d6174696f6e20666f722074686520696e737472756374696f6e202d2073686f756c64206f6e6c792062652063616c6c6564206279206d65646961746f72732c206f74686572776973652069742077696c6c206661696c2e002c2320417267756d656e7473b02a20606f726967696e603a20546865207365636f6e64617279206b6579206f66207468652073656e6465722e45012a2060696e737472756374696f6e5f6964603a20546865205b60496e737472756374696f6e4964605d20746861742077696c6c2068617665207468652061666669726d6174696f6e2072656d6f7665642e7872656a6563745f696e737472756374696f6e5f61735f6d65646961746f72080138696e737472756374696f6e5f696489020134496e737472756374696f6e49640001406e756d6265725f6f665f617373657473390701484f7074696f6e3c4173736574436f756e743e00171c750152656a6563747320616e206578697374696e6720696e737472756374696f6e202d2073686f756c64206f6e6c792062652063616c6c6564206279206d65646961746f72732c206f74686572776973652069742077696c6c206661696c2e002c2320417267756d656e747335012a2060696e737472756374696f6e5f696460202d20746865205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e206265696e672072656a65637465642e01022a20606e756d6265725f6f665f61737365747360202d20616e206f7074696f6e616c205b604173736574436f756e74605d20746861742077696c6c206265207573656420666f72206120707265636973652066656520657374696d6174696f6e206265666f726520657865637574696e67207468652065787472696e7369632e0035024e6f74653a2063616c6c696e672074686520727063206d6574686f6420606765745f657865637574655f696e737472756374696f6e5f696e666f602072657475726e7320616e20696e7374616e6365206f66205b6045786563757465496e737472756374696f6e496e666f605d2c20776869636820636f6e7461696e2074686520617373657420636f756e742e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e19070000021d07001d070c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e74385265636569707444657461696c7308244163636f756e7449640100444f6666436861696e5369676e61747572650121070018010c75696428010c753634000138696e737472756374696f6e5f696489020134496e737472756374696f6e49640001186c65675f6964e50301144c656749640001187369676e65720001244163636f756e7449640001247369676e6174757265210701444f6666436861696e5369676e61747572650001206d65746164617461e903015c4f7074696f6e3c526563656970744d657461646174613e00002107082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040079060148656432353531393a3a5369676e61747572650000001c537232353531390400a9060148737232353531393a3a5369676e617475726500010014456364736104002507014065636473613a3a5369676e61747572650002000025070c1c73705f636f7265146563647361245369676e617475726500000400290701205b75383b2036355d000029070000034100000008002d0704184f7074696f6e0404540131070108104e6f6e6500000010536f6d6504003107000001000031070c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e744041666669726d6174696f6e436f756e7400000c014873656e6465725f61737365745f636f756e74350701284173736574436f756e7400015072656365697665725f61737365745f636f756e74350701284173736574436f756e740001386f6666636861696e5f636f756e7410010c753332000035070c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e74284173736574436f756e7400000c012066756e6769626c6510010c7533320001306e6f6e5f66756e6769626c6510010c7533320001246f66665f636861696e10010c7533320000390704184f7074696f6e0404540135070108104e6f6e6500000010536f6d650400350700000100003d070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401800453000004008d02012c42547265655365743c543e00004107084470616c6c65745f737461746973746963731043616c6c040454000110587365745f6163746976655f61737365745f737461747308012061737365745f6964a8011c41737365744944000128737461745f74797065734507014842547265655365743c53746174547970653e00003c80536574207468652061637469766520617373657420737461745f74797065732e002c2320417267756d656e747331012d20606f726967696e60202d2061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ef42d206061737365745f696460202d20746865205b6041737365744944605d20746f206368616e67652074686520616374697665207374617473206f6e2e09012d2060737461745f747970657360202d20746865206e6577207374617420747970657320746f207265706c61636520616e79206578697374696e672074797065732e002023204572726f727329012d206053746174547970654c696d69745265616368656460202d20746f6f206d616e79207374617420747970657320656e61626c656420666f7220746865206061737365745f6964602e85012d206043616e6e6f7452656d6f76655374617454797065496e55736560202d2063616e206e6f742072656d6f7665206120737461742074797065207468617420697320696e20757365206279207472616e7366657220636f6e646974696f6e732e2d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602e003423205065726d697373696f6e731c2d204167656e741c2d2041737365746062617463685f7570646174655f61737365745f73746174730c012061737365745f6964a8011c41737365744944000124737461745f747970650d040120537461745479706500011876616c7565734907015042547265655365743c537461745570646174653e00013ce8416c6c6f77206120747275737465642069737375657220746f20696e69742f726573796e632061737365742f636f6d70616e792073746174732e002c2320417267756d656e747331012d20606f726967696e60202d2061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ef42d206061737365745f696460202d20746865205b6041737365744944605d20746f206368616e67652074686520616374697665207374617473206f6e2e902d2060737461745f7479706560202d2073746174207479706520746f207570646174652eb02d206076616c75657360202d20557064617465642076616c75657320666f722060737461745f74797065602e002023204572726f727311012d206053746174547970654d697373696e6760202d2060737461745f7479706560206973206e6f7420656e61626c656420666f7220746865206061737365745f6964602e2d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602e003423205065726d697373696f6e731c2d204167656e741c2d204173736574747365745f61737365745f7472616e736665725f636f6d706c69616e636508012061737365745f6964a8011c4173736574494400014c7472616e736665725f636f6e646974696f6e734d07016c42547265655365743c5472616e73666572436f6e646974696f6e3e00023c90536574206173736574207472616e7366657220636f6d706c69616e63652072756c65732e002c2320417267756d656e747331012d20606f726967696e60202d2061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ef42d206061737365745f696460202d20746865205b6041737365744944605d20746f206368616e67652074686520616374697665207374617473206f6e2e61012d20607472616e736665725f636f6e646974696f6e7360202d20746865206e6577207472616e7366657220636f6e646974696f6e20746f207265706c61636520616e79206578697374696e6720636f6e646974696f6e732e002023204572726f727361012d20605472616e73666572436f6e646974696f6e4c696d69745265616368656460202d20746f6f206d616e79207472616e7366657220636f6e64697469746f6e20656e61626c656420666f72206061737365745f6964602e9d012d206053746174547970654d697373696e6760202d2061207472616e7366657220636f6e646974696f6e2072657175697265732061207374617420747970652074686174206973206e6f7420656e61626c656420666f7220746865206061737365745f6964602e2d012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f72206061737365745f6964602e003423205065726d697373696f6e731c2d204167656e741c2d2041737365744c7365745f656e7469746965735f6578656d70740c012469735f6578656d707439010110626f6f6c0001286578656d70745f6b65793d0401685472616e73666572436f6e646974696f6e4578656d70744b6579000120656e7469746965738d02015042547265655365743c4964656e7469747949643e00033811015365742f756e73657420656e746974696573206578656d70742066726f6d20616e2061737365742773207472616e7366657220636f6d706c69616e63652072756c65732e002c2320417267756d656e747351012d20606f726967696e60202d2061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f6620606578656d70745f6b65792e6173736574602ee02d206069735f6578656d707460202d20656e61626c652f64697361626c65206578656d7074696f6e20666f722060656e746974696573602e1d012d20606578656d70745f6b657960202d2074686520617373657420616e642073746174207479706520746f206578656d7074207468652060656e746974696573602066726f6d2eec2d2060656e74697469657360202d2074686520656e74697469657320746f207365742f756e73657420746865206578656d7074696f6e20666f722e002023204572726f727321012d2060556e617574686f72697a65644167656e746020696620606f726967696e60206973206e6f74206167656e742d7065726d697373696f6e656420666f7220606173736574602e003423205065726d697373696f6e731c2d204167656e741c2d2041737365740c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e450704204254726565536574040454010d0400040009040000004907042042547265655365740404540121040004001d040000004d070420425472656553657404045401390400040035040000005107082870616c6c65745f73746f1043616c6c040454000118446372656174655f66756e647261697365722801486f66666572696e675f706f7274666f6c696fe8012c506f7274666f6c696f49640001386f66666572696e675f6173736574a8011c4173736574494400014472616973696e675f706f7274666f6c696fe8012c506f7274666f6c696f496400013472616973696e675f6173736574a8011c417373657449440001147469657273550701385665633c5072696365546965723e00012076656e75655f6964d903011c56656e756549640001147374617274050101444f7074696f6e3c543a3a4d6f6d656e743e00010c656e64050101444f7074696f6e3c543a3a4d6f6d656e743e0001486d696e696d756d5f696e766573746d656e7418011c42616c616e636500013c66756e647261697365725f6e616d654d04013846756e647261697365724e616d65000040604372656174652061206e65772066756e647261697365722e000d012a20606f66666572696e675f706f7274666f6c696f60202d20506f7274666f6c696f20636f6e7461696e696e672074686520606f66666572696e675f6173736574602ea42a20606f66666572696e675f617373657460202d204173736574206265696e67206f6666657265642e05012a206072616973696e675f706f7274666f6c696f60202d20506f7274666f6c696f20636f6e7461696e696e6720746865206072616973696e675f6173736574602e35012a206072616973696e675f617373657460202d204173736574206265696e672065786368616e67656420666f7220606f66666572696e675f617373657460206f6e20696e766573746d656e742ee82a2060746965727360202d20507269636520746965727320746f2063686172676520696e766573746f7273206f6e20696e766573746d656e742ea82a206076656e75655f696460202d2056656e756520746f2068616e646c6520736574746c656d656e742e4d012a2060737461727460202d2046756e647261697365722073746172742074696d652c20696620604e6f6e6560207468652066756e647261697365722077696c6c20737461727420696d6d6564696174656c792e29012a2060656e6460202d2046756e6472616973657220656e642074696d652c20696620604e6f6e6560207468652066756e647261697365722077696c6c206e65766572206578706972652ecd012a20606d696e696d756d5f696e766573746d656e7460202d204d696e696d756d20616d6f756e74206f66206072616973696e675f617373657460207468617420616e20696e766573746f72206e6565647320746f207370656e6420746f20696e7665737420696e20746869732072616973652ef02a206066756e647261697365725f6e616d6560202d2046756e64726169736572206e616d652c206f6e6c79207573656420696e20746865205549732e003423205065726d697373696f6e731c2a2041737365742c2a20506f7274666f6c696f18696e766573741c0150696e766573746d656e745f706f7274666f6c696fe8012c506f7274666f6c696f496400014466756e64696e675f706f7274666f6c696fe8012c506f7274666f6c696f49640001386f66666572696e675f6173736574a8011c4173736574494400010869644904013046756e64726169736572496400013c70757263686173655f616d6f756e7418011c42616c616e63650001246d61785f70726963653104013c4f7074696f6e3c42616c616e63653e00011c726563656970745d0701e84f7074696f6e3c5265636569707444657461696c733c543a3a4163636f756e7449642c20543a3a4f6666436861696e5369676e61747572653e3e0001305c496e7665737420696e20612066756e647261697365722e0041012a2060696e766573746d656e745f706f7274666f6c696f60202d20506f7274666f6c696f207468617420606f66666572696e675f6173736574602077696c6c206265206465706f736974656420696e2e01012a206066756e64696e675f706f7274666f6c696f60202d20506f7274666f6c696f20746861742077696c6c2066756e642074686520696e766573746d656e742ea02a20606f66666572696e675f617373657460202d20417373657420746f20696e7665737420696e2eac2a2060696460202d204944206f66207468652066756e6472616973657220746f20696e7665737420696e2ef42a206070757263686173655f616d6f756e7460202d20416d6f756e74206f6620606f66666572696e675f61737365746020746f2070757263686173652eb9012a20606d61785f707269636560202d204d6178696d756d20707269636520746f207061792070657220756e6974206f6620606f66666572696e675f6173736574602c20496620604e6f6e6560746865726520617265206e6f20636f6e73747261696e7473206f6e2070726963652e69012a20607265636569707460202d204f66662d636861696e207265636569707420746f2075736520696e7374656164206f66206f6e2d636861696e2062616c616e636520696e206066756e64696e675f706f7274666f6c696f602e003423205065726d697373696f6e732c2a20506f7274666f6c696f44667265657a655f66756e647261697365720801386f66666572696e675f6173736574a8011c4173736574494400010869644904013046756e64726169736572496400021c50467265657a6520612066756e647261697365722e00942a20606f66666572696e675f617373657460202d20417373657420746f20667265657a652ea02a2060696460202d204944206f66207468652066756e6472616973657220746f20667265657a652e003423205065726d697373696f6e731c2a2041737365744c756e667265657a655f66756e647261697365720801386f66666572696e675f6173736574a8011c4173736574494400010869644904013046756e64726169736572496400031c58556e667265657a6520612066756e647261697365722e009c2a20606f66666572696e675f617373657460202d20417373657420746f20756e667265657a652ea82a2060696460202d204944206f66207468652066756e6472616973657220746f20756e667265657a652e003423205065726d697373696f6e731c2a204173736574606d6f646966795f66756e647261697365725f77696e646f771001386f66666572696e675f6173736574a8011c4173736574494400010869644904013046756e6472616973657249640001147374617274280124543a3a4d6f6d656e7400010c656e64050101444f7074696f6e3c543a3a4d6f6d656e743e000424b44d6f64696679207468652074696d652077696e646f7720612066756e647261697365722069732061637469766500942a20606f66666572696e675f617373657460202d20417373657420746f206d6f646966792ea02a2060696460202d204944206f66207468652066756e6472616973657220746f206d6f646966792ea02a2060737461727460202d204e6577207374617274206f66207468652066756e647261697365722eb82a2060656e6460202d204e657720656e64206f66207468652066756e6472616973657220746f206d6f646966792e003423205065726d697373696f6e731c2a2041737365741073746f700801386f66666572696e675f6173736574a8011c4173736574494400010869644904013046756e64726169736572496400051c4853746f7020612066756e647261697365722e008c2a20606f66666572696e675f617373657460202d20417373657420746f2073746f702e982a2060696460202d204944206f66207468652066756e6472616973657220746f2073746f702e003423205065726d697373696f6e731c2a2041737365740c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e55070000025907005907082870616c6c65745f73746f245072696365546965720000080114746f74616c18011c42616c616e6365000114707269636518011c42616c616e636500005d0704184f7074696f6e040454011d070108104e6f6e6500000010536f6d6504001d0700000100006107083c70616c6c65745f74726561737572791043616c6c0404540001083064697362757273656d656e7404013462656e65666963696172696573650701785665633c42656e65666963696172793c42616c616e63654f663c543e3e3e00001c51014974207472616e73666572732062616c616e6365732066726f6d20747265617375727920746f2065616368206f662062656e6566696369617269657320616e642074686520737065636966696320616d6f756e7444666f722065616368206f66207468656d2e001c23204572726f72c42a20604261644f726967696e603a204f6e6c7920726f6f742063616e2065786563757465207472616e73616374696f6e2e5d012a2060496e73756666696369656e7442616c616e6365603a2049662074726561737572792062616c616e636573206973206e6f7420656e6f75676820746f20636f76657220616c6c2062656e656669636961726965732e25012a2060496e76616c69644964656e74697479603a204966206f6e65206f66207468652062656e656669636961726965732068617320616e20696e76616c6964206964656e746974792e347265696d62757273656d656e74040118616d6f756e7418013042616c616e63654f663c543e00010c1d014974207472616e7366657273207468652073706563696669632060616d6f756e74602066726f6d20606f726967696e60206163636f756e7420696e746f2074726561737572792e0049014f6e6c79206163636f756e747320776869636820617265206173736f63696174656420746f20616e206964656e746974792063616e206d616b65206120646f6e6174696f6e20746f2074726561737572792e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e65070000026907006907084c706f6c796d6573685f7072696d6974697665732c42656e6566696369617279041c42616c616e636501180008010869648001284964656e746974794964000118616d6f756e7418011c42616c616e636500006d070c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400012814626174636804011463616c6c737107017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e2072656c61795f74780c0118746172676574000130543a3a4163636f756e7449640001247369676e617475726521070150543a3a4f6666436861696e5369676e617475726500011063616c6c75070198556e6971756543616c6c3c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134a052656c617920612063616c6c20666f722061207461726765742066726f6d20616e206f726967696e00510152656c6179696e6720696e207468697320636f6e746578742072656665727320746f20746865206162696c697479206f66206f726967696e20746f206d616b6520612063616c6c206f6e20626568616c66206f661c7461726765742e00684665657320617265206368617267656420746f206f726967696e00302320506172616d6574657273842d2060746172676574603a204163636f756e7420746f2062652072656c61796564e82d20607369676e6174757265603a205369676e61747572652066726f6d2074617267657420617574686f72697a696e67207468652072656c6179c02d206063616c6c603a2043616c6c20746f2062652072656c61796564206f6e20626568616c66206f66207461726765740040504f4c594d4553483a2061646465642e2462617463685f616c6c04011463616c6c737107017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696e79070154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c0d06017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c737107017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6c0d06017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874200118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e2462617463685f6f6c6404011463616c6c737107017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000650c44469737061746368206d756c7469706c652063616c6c732066726f6d207468652073656e6465722773206f726967696e2e00e8546869732077696c6c206578656375746520756e74696c20746865206669727374206f6e65206661696c7320616e64207468656e2073746f702e00ac4d61792062652063616c6c65642066726f6d20726f6f74206f722061207369676e6564206f726967696e2e00302320506172616d6574657273ec2d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e00202320576569676874a02d205468652073756d206f66207468652077656967687473206f6620746865206063616c6c73602e302d204f6e65206576656e742e00bd01546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732065786365707420616e20756e7369676e6564206f726967696e2e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468656101604261746368496e7465727275707465644f6c6460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164655901616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c657465644f6c64604c6576656e74206973206465706f73697465642e00b8504f4c594d4553483a2052656e616d65642066726f6d206062617463686020616e6420646570726563617465642e3062617463685f61746f6d696304011463616c6c737107017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000754c44469737061746368206d756c7469706c652063616c6c732066726f6d207468652073656e6465722773206f726967696e2e001501546869732077696c6c206578656375746520616c6c2063616c6c732c20696e206f726465722c2073746f7070696e6720617420746865206669727374206661696c7572652cc0696e207768696368206361736520746865207374617465206368616e6765732061726520726f6c6c6564206261636b2e31014f6e206661696c7572652c20616e206576656e7420604261746368496e7465727275707465644f6c64286661696c7572655f6964782c206572726f722960206973206465706f73697465642e00ac4d61792062652063616c6c65642066726f6d20726f6f74206f722061207369676e6564206f726967696e2e00302320506172616d6574657273ec2d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e00202320576569676874a02d205468652073756d206f66207468652077656967687473206f6620746865206063616c6c73602e302d204f6e65206576656e742e001501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732065786365707420616e20756e7369676e6564206f726967696e2ef4546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e206576656e74206973206465706f73697465642ef0496620616e792063616c6c206661696c65642c207468656e20604261746368496e7465727275707465644f6c6460206973206465706f73697465642e2101496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c657465644f6c6460206576656e74206973206465706f73697465642e0054504f4c594d4553483a20646570726563617465642e4062617463685f6f7074696d697374696304011463616c6c737107017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00085cc44469737061746368206d756c7469706c652063616c6c732066726f6d207468652073656e6465722773206f726967696e2e000101546869732077696c6c206578656375746520616c6c2063616c6c732c20696e206f726465722c20697272657370656374697665206f66206661696c757265732e0901416e79206661696c757265732077696c6c20626520617661696c61626c6520696e2061206042617463684f7074696d69737469634661696c656460206576656e742e00ac4d61792062652063616c6c65642066726f6d20726f6f74206f722061207369676e6564206f726967696e2e00302320506172616d6574657273ec2d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e0000202320576569676874a02d205468652073756d206f66207468652077656967687473206f6620746865206063616c6c73602e302d204f6e65206576656e742e001501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732065786365707420616e20756e7369676e6564206f726967696e2ef4546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e206576656e74206973206465706f73697465642ef8496620616e792063616c6c206661696c65642c207468656e206042617463684f7074696d69737469634661696c656460206973206465706f73697465642cfc77697468206120766563746f72206f66206576656e7420636f756e747320666f7220656163682063616c6c2061732077656c6c206173206120766563746f72286f66206572726f72732e2101496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c657465644f6c6460206576656e74206973206465706f73697465642e0054504f4c594d4553483a20646570726563617465642e3461735f64657269766174697665080114696e6465785d03010c75313600011063616c6c0d06017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000918dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e71070000020d06007507083870616c6c65745f7574696c69747928556e6971756543616c6c040443010d06000801146e6f6e6365280148417574686f72697a6174696f6e4e6f6e636500011063616c6c0d060118426f783c433e000079070c60706f6c796d6573685f72756e74696d655f646576656c6f701c72756e74696d65304f726967696e43616c6c65720001141873797374656d04007d0701746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e00000044506f6c796d657368436f6d6d69747465650400810701f870616c6c65745f636f6d6d69747465653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6d6d69747465653a3a496e7374616e6365313e00090048546563686e6963616c436f6d6d69747465650400850701f870616c6c65745f636f6d6d69747465653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6d6d69747465653a3a496e7374616e6365333e000b004055706772616465436f6d6d69747465650400890701f870616c6c65745f636f6d6d69747465653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6d6d69747465653a3a496e7374616e6365343e000d0010566f696404008d0701110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f6964000400007d070c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200008107084070616c6c65745f636f6d6d6974746565245261774f726967696e08244163636f756e74496401000449014d01010420456e646f72736564000000008507084070616c6c65745f636f6d6d6974746565245261774f726967696e08244163636f756e74496401000449016901010420456e646f72736564000000008907084070616c6c65745f636f6d6d6974746565245261774f726967696e08244163636f756e74496401000449017901010420456e646f72736564000000008d07081c73705f636f726510566f6964000100009107082c70616c6c65745f626173651043616c6c0404540001000c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e9507085870616c6c65745f65787465726e616c5f6167656e74731043616c6c040454000120306372656174655f67726f757008012061737365745f6964a8011c417373657449440001147065726d73b8015045787472696e7369635065726d697373696f6e73000048ec43726561746573206120637573746f6d206167656e742067726f7570202841472920666f722074686520676976656e206061737365745f6964602e00d45468652041472077696c6c206861766520746865207065726d697373696f6e7320617320676976656e20627920607065726d73602e290154686973206e6577204147206973207468656e2061737369676e656420606964203d204147496453657175656e63653a3a6765742829202b20316020617320697473206041474964602c4101776869636820796f752063616e2075736520617320604167656e7447726f75703a3a437573746f6d2869642960207768656e20616464696e67206167656e747320666f72206061737365745f6964602e002c2320417267756d656e7473dc2d2060617373657449446020746865205b60417373657449445d20746f206164642074686520637573746f6d2067726f757020666f722e902d20607065726d7360207468617420746865206e65772041472077696c6c20686176652e002023204572726f727339012d2060556e617574686f72697a65644167656e746020696620606f726967696e6020776173206e6f7420617574686f72697a656420617320616e206167656e7420746f2063616c6c20746869732e21012d2060546f6f4c6f6e676020696620607065726d73602068616420736f6d6520737472696e67206f72206c697374206c656e67746820746861742077617320746f6f206c6f6e672e25012d2060436f756e7465724f766572666c6f776020696620604147496453657175656e63653a3a6765742829202b20316020776f756c642065786365656420607533323a3a4d4158602e003423205065726d697373696f6e731c2a2041737365741c2a204167656e74547365745f67726f75705f7065726d697373696f6e730c012061737365745f6964a8011c41737365744944000108696435010110414749640001147065726d73b8015045787472696e7369635065726d697373696f6e7300013c59015570646174657320746865207065726d697373696f6e73206f662074686520637573746f6d204147206964656e74696669656420627920606964602c20666f722074686520676976656e206061737365745f6964602e002c2320417267756d656e7473d02d2060617373657449446020746865205b60417373657449445d2074686520637573746f6d2041472062656c6f6e677320746f2eac2d206069646020666f722074686520637573746f6d2041472077697468696e206061737365745f6964602e942d20607065726d736020746f207570646174652074686520637573746f6d20414720746f2e002023204572726f727339012d2060556e617574686f72697a65644167656e746020696620606f726967696e6020776173206e6f7420617574686f72697a656420617320616e206167656e7420746f2063616c6c20746869732e21012d2060546f6f4c6f6e676020696620607065726d73602068616420736f6d6520737472696e67206f72206c697374206c656e67746820746861742077617320746f6f206c6f6e672ecc2d20604e6f53756368414760206966206069646020646f6573206e6f74206964656e74696679206120637573746f6d2041472e003423205065726d697373696f6e731c2a2041737365741c2a204167656e743072656d6f76655f6167656e7408012061737365745f6964a8011c417373657449440001146167656e748001284964656e746974794964000238a452656d6f76652074686520676976656e20606167656e74602066726f6d206061737365745f6964602e002c2320417267756d656e7473e82d2060617373657449446020746865205b60417373657449445d2074686174206861732074686520606167656e746020746f2072656d6f76652e882d20606167656e7460206f66206061737365745f69646020746f2072656d6f76652e002023204572726f727339012d2060556e617574686f72697a65644167656e746020696620606f726967696e6020776173206e6f7420617574686f72697a656420617320616e206167656e7420746f2063616c6c20746869732ee02d20604e6f74416e4167656e746020696620606167656e7460206973206e6f7420616e206167656e74206f66206061737365745f6964602ee82d206052656d6f76696e674c61737446756c6c4167656e746020696620606167656e746020697320746865206c6173742066756c6c206f6e652e003423205065726d697373696f6e731c2a2041737365741c2a204167656e7420616264696361746504012061737365745f6964a8011c4173736574494400032c884162646963617465206167656e747368697020666f72206061737365745f6964602e002c2320417267756d656e7473ec2d2060617373657449446020746865205b60417373657449445d206f66207768696368207468652063616c6c657220697320616e206167656e742e002023204572726f7273ec2d20604e6f74416e4167656e7460206966207468652063616c6c6572206973206e6f7420616e206167656e74206f66206061737365745f6964602efc2d206052656d6f76696e674c61737446756c6c4167656e7460206966207468652063616c6c657220697320746865206c6173742066756c6c206167656e742e003423205065726d697373696f6e731c2a204173736574306368616e67655f67726f75700c012061737365745f6964a8011c417373657449440001146167656e748001284964656e74697479496400011467726f7570310101284167656e7447726f7570000440f44368616e676520746865206167656e742067726f7570207468617420606167656e74602062656c6f6e677320746f20696e206061737365745f6964602e002c2320417267756d656e7473c02d2060617373657449446020746865205b60417373657449445d2074686174206861732074686520606167656e74602ec02d20606167656e7460206f66206061737365745f69646020746f206368616e6765207468652067726f757020666f722ed02d206067726f757060207468617420606167656e74602077696c6c2062656c6f6e6720746f20696e206061737365745f6964602e002023204572726f727339012d2060556e617574686f72697a65644167656e746020696620606f726967696e6020776173206e6f7420617574686f72697a656420617320616e206167656e7420746f2063616c6c20746869732ecc2d20604e6f53756368414760206966206069646020646f6573206e6f74206964656e74696679206120637573746f6d2041472ee02d20604e6f74416e4167656e746020696620606167656e7460206973206e6f7420616e206167656e74206f66206061737365745f6964602e2d012d206052656d6f76696e674c61737446756c6c4167656e746020696620606167656e7460207761732061206046756c6c60206f6e6520616e64206973206265696e672064656d6f7465642e003423205065726d697373696f6e731c2a2041737365741c2a204167656e744c6163636570745f6265636f6d655f6167656e7404011c617574685f696428010c753634000540010141636365707420616e20617574686f72697a6174696f6e20627920616e206167656e742022416c696365222077686f206973737565642060617574685f696460d4746f20616c736f206265636f6d6520616e206167656e74206f662074686520617373657420416c696365207370656369666965642e002c2320417267756d656e7473d02d2060617574685f696460206964656e74696679696e672074686520617574686f72697a6174696f6e20746f206163636570742e002023204572726f727345012d2060417574686f72697a6174696f6e4572726f723a3a496e76616c6964602069662060617574685f69646020646f6573206e6f7420657869737420666f722074686520676976656e2063616c6c65722e35012d2060417574686f72697a6174696f6e4572726f723a3a45787069726564602069662060617574685f69646020697320666f7220616e206175746820746861742068617320657870697265642e4d012d2060417574686f72697a6174696f6e4572726f723a3a42616454797065602069662060617574685f69646020776173206e6f7420666f72206120604265636f6d654167656e7460206175746820747970652e25012d2060556e617574686f72697a65644167656e74602069662022416c69636522206973206e6f74207065726d697373696f6e656420746f2070726f766964652074686520617574682e0d012d20604e6f53756368414760206966207468652067726f757020726566657272656420746f206120637573746f6d207468617420646f6573206e6f742065786973742e09012d2060416c7265616479416e4167656e7460206966207468652063616c6c657220697320616c726561647920616e206167656e74206f66207468652061737365742e003423205065726d697373696f6e731c2a204167656e74646372656174655f67726f75705f616e645f6164645f6175746810012061737365745f6964a8011c417373657449440001147065726d73b8015045787472696e7369635065726d697373696f6e730001187461726765748001284964656e746974794964000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e000614e85574696c6974792065787472696e73696320746f20626174636820606372656174655f67726f75706020616e642020606164645f61757468602e003423205065726d697373696f6e731c2a2041737365741c2a204167656e74786372656174655f616e645f6368616e67655f637573746f6d5f67726f75700c012061737365745f6964a8011c417373657449440001147065726d73b8015045787472696e7369635065726d697373696f6e730001146167656e748001284964656e74697479496400071455015574696c6974792065787472696e73696320746f20626174636820606372656174655f67726f75706020616e642020606368616e67655f67726f75706020666f7220637573746f6d2067726f757073206f6e6c792e003423205065726d697373696f6e731c2a2041737365741c2a204167656e740c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e9907083870616c6c65745f72656c617965721043616c6c040454000118387365745f706179696e675f6b6579080120757365725f6b6579000130543a3a4163636f756e74496400012c706f6c79785f6c696d697418011c42616c616e6365000020bd014372656174657320616e20617574686f72697a6174696f6e20746f20616c6c6f772060757365725f6b65796020746f20616363657074207468652063616c6c65722028606f726967696e203d3d20706179696e675f6b6579602920617320746865697220737562736964697365722e002c2320417267756d656e74739c2d2060757365725f6b657960207468652075736572206b657920746f207375627369646973652ee42d2060706f6c79785f6c696d6974602074686520696e697469616c20504f4c5958206c696d697420666f72207468697320737562736964792e002023204572726f727331012d2060556e617574686f72697a656443616c6c65726020696620606f726967696e60206973206e6f7420617574686f72697a656420746f2063616c6c20746869732065787472696e7369632e446163636570745f706179696e675f6b657904011c617574685f696428010c753634000138944163636570747320612060706179696e675f6b65796020617574686f72697a6174696f6e2e002c2320417267756d656e7473e82d2060617574685f6964602074686520617574686f72697a6174696f6e20696420746f2061636365707420612060706179696e675f6b6579602e002023204572726f727345012d2060417574686f72697a6174696f6e4572726f723a3a496e76616c6964602069662060617574685f69646020646f6573206e6f7420657869737420666f722074686520676976656e2063616c6c65722e2d012d2060417574686f72697a6174696f6e4572726f723a3a45787069726564602069662060617574685f6964602074686520617574686f72697a6174696f6e2068617320657870697265642e6d012d2060417574686f72697a6174696f6e4572726f723a3a42616454797065602069662060617574685f69646020776173206e6f742061206041646452656c61796572506179696e674b65796020617574686f72697a6174696f6e2ea5012d20604e6f74417574686f72697a6564466f72557365724b65796020696620606f726967696e60206973206e6f7420617574686f72697a656420746f206163636570742074686520617574686f72697a6174696f6e20666f72207468652060757365725f6b6579602ed9012d20604e6f74417574686f72697a6564466f72506179696e674b6579602069662074686520617574686f72697a6174696f6e20776173206372656174656420616e206964656e7469747920646966666572656e742066726f6d207468652060706179696e675f6b6579602773206964656e746974792e31012d2060557365724b65794364644d697373696e6760206966207468652060757365725f6b657960206973206e6f7420617474616368656420746f2061204344442764206964656e746974792e41012d2060506179696e674b65794364644d697373696e6760206966207468652060706179696e675f6b657960206973206e6f7420617474616368656420746f2061204344442764206964656e746974792e31012d2060556e617574686f72697a656443616c6c65726020696620606f726967696e60206973206e6f7420617574686f72697a656420746f2063616c6c20746869732065787472696e7369632e4472656d6f76655f706179696e675f6b6579080120757365725f6b6579000130543a3a4163636f756e744964000128706179696e675f6b6579000130543a3a4163636f756e74496400022cac52656d6f766573207468652060706179696e675f6b6579602066726f6d20612060757365725f6b6579602e002c2320417267756d656e7473d42d2060757365725f6b657960207468652075736572206b657920746f2072656d6f76652074686520737562736964792066726f6d2e09012d2060706179696e675f6b6579602074686520706179696e67206b6579207468617420776173207375627369646973696e67207468652060757365725f6b6579602e002023204572726f72738d012d20604e6f74417574686f72697a6564466f72557365724b65796020696620606f726967696e60206973206e6f7420617574686f72697a656420746f2072656d6f766520746865207375627369647920666f72207468652060757365725f6b6579602ef82d20604e6f506179696e674b657960206966207468652060757365725f6b65796020646f65736e2774206861766520612060706179696e675f6b6579602e31012d20604e6f74506179696e674b657960206966207468652060706179696e675f6b65796020646f65736e2774206d61746368207468652063757272656e742060706179696e675f6b6579602e31012d2060556e617574686f72697a656443616c6c65726020696620606f726967696e60206973206e6f7420617574686f72697a656420746f2063616c6c20746869732065787472696e7369632e487570646174655f706f6c79785f6c696d6974080120757365725f6b6579000130543a3a4163636f756e74496400012c706f6c79785f6c696d697418011c42616c616e6365000328b4557064617465732074686520617661696c61626c6520504f4c595820666f7220612060757365725f6b6579602e002c2320417267756d656e74731d012d2060757365725f6b657960207468652075736572206b6579206f6620746865207375627369647920746f207570646174652074686520617661696c61626c6520504f4c59582e35012d2060706f6c79785f6c696d6974602074686520616d6f756e74206f6620504f4c595820617661696c61626c6520666f72207375627369646973696e67207468652060757365725f6b6579602e002023204572726f7273f82d20604e6f506179696e674b657960206966207468652060757365725f6b65796020646f65736e2774206861766520612060706179696e675f6b6579602e11012d20604e6f74506179696e674b65796020696620606f726967696e6020646f65736e2774206d61746368207468652063757272656e742060706179696e675f6b6579602e31012d2060556e617574686f72697a656443616c6c65726020696620606f726967696e60206973206e6f7420617574686f72697a656420746f2063616c6c20746869732065787472696e7369632e50696e6372656173655f706f6c79785f6c696d6974080120757365725f6b6579000130543a3a4163636f756e744964000118616d6f756e7418011c42616c616e636500042cb8496e6372656173652074686520617661696c61626c6520504f4c595820666f7220612060757365725f6b6579602e002c2320417267756d656e74731d012d2060757365725f6b657960207468652075736572206b6579206f6620746865207375627369647920746f207570646174652074686520617661696c61626c6520504f4c59582e0d012d2060616d6f756e74602074686520616d6f756e74206f6620504f4c595820746f2061646420746f207468652073756273696479206f662060757365725f6b6579602e002023204572726f7273f82d20604e6f506179696e674b657960206966207468652060757365725f6b65796020646f65736e2774206861766520612060706179696e675f6b6579602e11012d20604e6f74506179696e674b65796020696620606f726967696e6020646f65736e2774206d61746368207468652063757272656e742060706179696e675f6b6579602e31012d2060556e617574686f72697a656443616c6c65726020696620606f726967696e60206973206e6f7420617574686f72697a656420746f2063616c6c20746869732065787472696e7369632e3d012d20604f7665726c6f776020696620746865207375627369647927732072656d61696e696e6720504f4c595820776f756c642068617665206f766572666c6f7765642060753132383a3a4d4158602e5064656372656173655f706f6c79785f6c696d6974080120757365725f6b6579000130543a3a4163636f756e744964000118616d6f756e7418011c42616c616e636500052cb844656372656173652074686520617661696c61626c6520504f4c595820666f7220612060757365725f6b6579602e002c2320417267756d656e74731d012d2060757365725f6b657960207468652075736572206b6579206f6620746865207375627369647920746f207570646174652074686520617661696c61626c6520504f4c59582e21012d2060616d6f756e74602074686520616d6f756e74206f6620504f4c595820746f2072656d6f76652066726f6d207468652073756273696479206f662060757365725f6b6579602e002023204572726f7273f82d20604e6f506179696e674b657960206966207468652060757365725f6b65796020646f65736e2774206861766520612060706179696e675f6b6579602e11012d20604e6f74506179696e674b65796020696620606f726967696e6020646f65736e2774206d61746368207468652063757272656e742060706179696e675f6b6579602e31012d2060556e617574686f72697a656443616c6c65726020696620606f726967696e60206973206e6f7420617574686f72697a656420746f2063616c6c20746869732065787472696e7369632e09012d20604f7665726c6f776020696620746865207375627369647920686173206c657373207468656e2060616d6f756e746020504f4c59582072656d61696e696e672e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e9d070c4070616c6c65745f636f6e7472616374731870616c6c65741043616c6c0404540001243c63616c6c5f6f6c645f77656967687414011064657374850501504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565d901013042616c616e63654f663c543e0001246761735f6c696d6974a10701244f6c6457656967687400015473746f726167655f6465706f7369745f6c696d6974a90701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e0001106461746130011c5665633c75383e0000041501446570726563617465642076657273696f6e206966205b6053656c663a3a63616c6c605d20666f722075736520696e20616e20696e2d73746f72616765206043616c6c602e80696e7374616e74696174655f776974685f636f64655f6f6c645f77656967687418011476616c7565d901013042616c616e63654f663c543e0001246761735f6c696d6974a10701244f6c6457656967687400015473746f726167655f6465706f7369745f6c696d6974a90701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e000110636f646530011c5665633c75383e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e0001045901446570726563617465642076657273696f6e206966205b6053656c663a3a696e7374616e74696174655f776974685f636f6465605d20666f722075736520696e20616e20696e2d73746f72616765206043616c6c602e58696e7374616e74696174655f6f6c645f77656967687418011476616c7565d901013042616c616e63654f663c543e0001246761735f6c696d6974a10701244f6c6457656967687400015473746f726167655f6465706f7369745f6c696d6974a90701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e000124636f64655f686173682c012c436f6465486173683c543e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e0002043101446570726563617465642076657273696f6e206966205b6053656c663a3a696e7374616e7469617465605d20666f722075736520696e20616e20696e2d73746f72616765206043616c6c602e2c75706c6f61645f636f64650c0110636f646530011c5665633c75383e00015473746f726167655f6465706f7369745f6c696d6974a90701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e00012c64657465726d696e69736dad07012c44657465726d696e69736d000350ec55706c6f6164206e65772060636f64656020776974686f757420696e7374616e74696174696e67206120636f6e74726163742066726f6d2069742e00210149662074686520636f646520646f6573206e6f7420616c72656164792065786973742061206465706f7369742069732072657365727665642066726f6d207468652063616c6c65724501616e6420756e7265736572766564206f6e6c79207768656e205b6053656c663a3a72656d6f76655f636f6465605d2069732063616c6c65642e205468652073697a65206f66207468652072657365727665f0646570656e6473206f6e2074686520696e737472756d656e7465642073697a65206f66207468652074686520737570706c6965642060636f6465602e00310149662074686520636f646520616c72656164792065786973747320696e2073746f726167652069742077696c6c207374696c6c2072657475726e20604f6b6020616e642075706772616465739474686520696e2073746f726167652076657273696f6e20746f207468652063757272656e74d05b60496e737472756374696f6e576569676874733a3a76657273696f6e605d28496e737472756374696f6e57656967687473292e0055012d206064657465726d696e69736d603a20496620746869732069732073657420746f20616e79206f746865722076616c756520627574205b6044657465726d696e69736d3a3a44657465726d696e6973746963605d450120207468656e20746865206f6e6c792077617920746f20757365207468697320636f646520697320746f2064656c65676174652063616c6c20696e746f2069742066726f6d20616e206f6666636861696efc2020657865637574696f6e2e2053657420746f205b6044657465726d696e69736d3a3a44657465726d696e6973746963605d20696620696e20646f7562742e001823204e6f7465005901416e796f6e652063616e20696e7374616e7469617465206120636f6e74726163742066726f6d20616e792075706c6f6164656420636f646520616e6420746875732070726576656e74206974732072656d6f76616c2e4101546f2061766f6964207468697320736974756174696f6e206120636f6e7374727563746f7220636f756c6420656d706c6f792061636365737320636f6e74726f6c20736f20746861742069742063616e39016f6e6c7920626520696e7374616e746961746564206279207065726d697373696f6e656420656e7469746965732e205468652073616d652069732074727565207768656e2075706c6f6164696e67a07468726f756768205b6053656c663a3a696e7374616e74696174655f776974685f636f6465605d2e2c72656d6f76655f636f6465040124636f64655f686173682c012c436f6465486173683c543e000410350152656d6f76652074686520636f64652073746f72656420756e6465722060636f64655f686173686020616e6420726566756e6420746865206465706f73697420746f20697473206f776e65722e0045014120636f64652063616e206f6e6c792062652072656d6f76656420627920697473206f726967696e616c2075706c6f616465722028697473206f776e65722920616e64206f6e6c79206966206974206973646e6f74207573656420627920616e7920636f6e74726163742e207365745f636f646508011064657374850501504163636f756e7449644c6f6f6b75704f663c543e000124636f64655f686173682c012c436f6465486173683c543e000528090150726976696c656765642066756e6374696f6e2074686174206368616e6765732074686520636f6465206f6620616e206578697374696e6720636f6e74726163742e004501546869732074616b65732063617265206f66207570646174696e6720726566636f756e747320616e6420616c6c206f74686572206e6563657373617279206f7065726174696f6e732e2052657475726e73e8616e206572726f7220696620656974686572207468652060636f64655f6861736860206f722060646573746020646f206e6f742065786973742e001823204e6f74650031015468697320646f6573202a2a6e6f742a2a206368616e6765207468652061646472657373206f662074686520636f6e747261637420696e207175657374696f6e2e2054686973206d65616e733d01746861742074686520636f6e74726163742061646472657373206973206e6f206c6f6e67657220646572697665642066726f6d2069747320636f646520686173682061667465722063616c6c696e67487468697320646973706174636861626c652e1063616c6c14011064657374850501504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565d901013042616c616e63654f663c543e0001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d6974a90701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e0001106461746130011c5665633c75383e00064005014d616b657320612063616c6c20746f20616e206163636f756e742c206f7074696f6e616c6c79207472616e7366657272696e6720736f6d652062616c616e63652e00302320506172616d657465727300a82a206064657374603a2041646472657373206f662074686520636f6e747261637420746f2063616c6c2efc2a206076616c7565603a205468652062616c616e636520746f207472616e736665722066726f6d2074686520606f726967696e6020746f206064657374602e15012a20606761735f6c696d6974603a2054686520676173206c696d697420656e666f72636564207768656e20657865637574696e672074686520636f6e7374727563746f722e55012a206073746f726167655f6465706f7369745f6c696d6974603a20546865206d6178696d756d20616d6f756e74206f662062616c616e636520746861742063616e20626520636861726765642066726f6d20746865a4202063616c6c657220746f2070617920666f72207468652073746f7261676520636f6e73756d65642ec42a206064617461603a2054686520696e707574206461746120746f207061737320746f2074686520636f6e74726163742e0025012a20496620746865206163636f756e74206973206120736d6172742d636f6e7472616374206163636f756e742c20746865206173736f63696174656420636f64652077696c6c206265ac657865637574656420616e6420616e792076616c75652077696c6c206265207472616e736665727265642e15012a20496620746865206163636f756e74206973206120726567756c6172206163636f756e742c20616e792076616c75652077696c6c206265207472616e736665727265642e45012a204966206e6f206163636f756e742065786973747320616e64207468652063616c6c2076616c7565206973206e6f74206c657373207468616e20606578697374656e7469616c5f6465706f736974602c11016120726567756c6172206163636f756e742077696c6c206265206372656174656420616e6420616e792076616c75652077696c6c206265207472616e736665727265642e54696e7374616e74696174655f776974685f636f646518011476616c7565d901013042616c616e63654f663c543e0001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d6974a90701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e000110636f646530011c5665633c75383e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e0007683101496e7374616e7469617465732061206e657720636f6e74726163742066726f6d2074686520737570706c6965642060636f646560206f7074696f6e616c6c79207472616e7366657272696e6734736f6d652062616c616e63652e0021015468697320646973706174636861626c6520686173207468652073616d65206566666563742061732063616c6c696e67205b6053656c663a3a75706c6f61645f636f6465605d202b3d015b6053656c663a3a696e7374616e7469617465605d2e2042756e646c696e67207468656d20746f6765746865722070726f766964657320656666696369656e6379206761696e732e20506c65617365d8616c736f20636865636b2074686520646f63756d656e746174696f6e206f66205b6053656c663a3a75706c6f61645f636f6465605d2e00302320506172616d6574657273004d012a206076616c7565603a205468652062616c616e636520746f207472616e736665722066726f6d2074686520606f726967696e6020746f20746865206e65776c79206372656174656420636f6e74726163742e15012a20606761735f6c696d6974603a2054686520676173206c696d697420656e666f72636564207768656e20657865637574696e672074686520636f6e7374727563746f722e55012a206073746f726167655f6465706f7369745f6c696d6974603a20546865206d6178696d756d20616d6f756e74206f662062616c616e636520746861742063616e20626520636861726765642f7265736572766564c8202066726f6d207468652063616c6c657220746f2070617920666f72207468652073746f7261676520636f6e73756d65642ecc2a2060636f6465603a2054686520636f6e747261637420636f646520746f206465706c6f7920696e207261772062797465732ef42a206064617461603a2054686520696e707574206461746120746f207061737320746f2074686520636f6e747261637420636f6e7374727563746f722e31012a206073616c74603a205573656420666f722074686520616464726573732064657269766174696f6e2e20536565205b6050616c6c65743a3a636f6e74726163745f61646472657373605d2e0094496e7374616e74696174696f6e20697320657865637574656420617320666f6c6c6f77733a0059012d2054686520737570706c6965642060636f64656020697320696e737472756d656e7465642c206465706c6f7965642c20616e6420612060636f64655f6861736860206973206372656174656420666f7220746861741c2020636f64652e59012d204966207468652060636f64655f686173686020616c726561647920657869737473206f6e2074686520636861696e2074686520756e6465726c79696e672060636f6465602077696c6c206265207368617265642e49012d205468652064657374696e6174696f6e206164647265737320697320636f6d7075746564206261736564206f6e207468652073656e6465722c20636f64655f6861736820616e64207468652073616c742e01012d2054686520736d6172742d636f6e7472616374206163636f756e7420697320637265617465642061742074686520636f6d707574656420616464726573732ec02d20546865206076616c756560206973207472616e7366657272656420746f20746865206e6577206163636f756e742e41012d2054686520606465706c6f79602066756e6374696f6e20697320657865637574656420696e2074686520636f6e74657874206f6620746865206e65776c792d63726561746564206163636f756e742e2c696e7374616e746961746518011476616c7565d901013042616c616e63654f663c543e0001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d6974a90701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e000124636f64655f686173682c012c436f6465486173683c543e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e000814fc496e7374616e746961746573206120636f6e74726163742066726f6d20612070726576696f75736c79206465706c6f796564207761736d2062696e6172792e003501546869732066756e6374696f6e206973206964656e746963616c20746f205b6053656c663a3a696e7374616e74696174655f776974685f636f6465605d2062757420776974686f7574207468654901636f6465206465706c6f796d656e7420737465702e20496e73746561642c207468652060636f64655f6861736860206f6620616e206f6e2d636861696e206465706c6f796564207761736d2062696e617279446d75737420626520737570706c6965642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea107000006a50700a507082873705f77656967687473244f6c645765696768740000040028010c7536340000a90704184f7074696f6e04045401d9010108104e6f6e6500000010536f6d650400d9010000010000ad070c4070616c6c65745f636f6e747261637473107761736d2c44657465726d696e69736d0001083444657465726d696e697374696300000048416c6c6f77496e64657465726d696e69736d00010000b1070848706f6c796d6573685f636f6e7472616374731043616c6c0404540001186c696e7374616e74696174655f776974685f636f64655f7065726d731c0124656e646f776d656e7418011c42616c616e63650001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d69743104013c4f7074696f6e3c42616c616e63653e000110636f646530011c5665633c75383e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e0001147065726d73a0012c5065726d697373696f6e730000602d01496e7374616e746961746573206120736d61727420636f6e747261637420646566696e696e6720697420776974682074686520676976656e2060636f64656020616e64206073616c74602e00c454686520636f6e74726163742077696c6c2062652061747461636865642061732061207365636f6e64617279206b65792ce07769746820607065726d736020617320697473207065726d697373696f6e732c20746f20606f726967696e602773206964656e746974792e00e054686520636f6e7472616374206973207472616e736665727265642060656e646f776d656e746020616d6f756e74206f6620504f4c59582e98546869732069732064697374696e63742066726f6d2074686520606761735f6c696d6974602c1101776869636820636f6e74726f6c7320686f77206d7563682067617320746865206465706c6f796d656e7420636f6465206d6179206174206d6f737420636f6e73756d652e002c2320417267756d656e7473e82d2060656e646f776d656e746020616d6f756e74206f6620504f4c595820746f207472616e7366657220746f2074686520636f6e74726163742e55012d20606761735f6c696d69746020666f7220686f77206d756368206761732074686520606465706c6f796020636f646520696e2074686520636f6e7472616374206d6179206174206d6f737420636f6e73756d652e51012d206073746f726167655f6465706f7369745f6c696d69746020546865206d6178696d756d20616d6f756e74206f662062616c616e636520746861742063616e20626520636861726765642f7265736572766564c8202066726f6d207468652063616c6c657220746f2070617920666f72207468652073746f7261676520636f6e73756d65642ee82d2060636f646560207769746820746865205741534d2062696e61727920646566696e696e672074686520736d61727420636f6e74726163742ef02d206064617461602054686520696e707574206461746120746f207061737320746f2074686520636f6e747261637420636f6e7374727563746f722eb82d206073616c7460207573656420666f7220636f6e747261637420616464726573732064657269766174696f6e2e210120202042792076617279696e6720746869732c207468652073616d652060636f6465602063616e206265207573656420756e646572207468652073616d65206964656e746974792ebc2d20607065726d7360207468617420746865206e6577207365636f6e64617279206b65792077696c6c20686176652e002023204572726f727365012d20416c6c20746865206572726f727320696e206070616c6c65745f636f6e7472616374733a3a43616c6c3a3a696e7374616e74696174655f776974685f636f6465602063616e20616c736f2068617070656e20686572652ef02d204344442f5065726d697373696f6e732061726520636865636b65642c20756e6c696b6520696e206070616c6c65745f636f6e747261637473602e21012d204572726f72732074686174206172697365207768656e20616464696e672061206e6577207365636f6e64617279206b65792063616e20616c736f206f6363757220686572652e6c696e7374616e74696174655f776974685f686173685f7065726d731c0124656e646f776d656e7418011c42616c616e63650001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d69743104013c4f7074696f6e3c42616c616e63653e000124636f64655f686173682c012c436f6465486173683c543e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e0001147065726d73a0012c5065726d697373696f6e7300016c3901496e7374616e746961746573206120736d61727420636f6e747261637420646566696e696e67207573696e672074686520676976656e2060636f64655f686173686020616e64206073616c74602e007c556e6c696b652060696e7374616e74696174655f776974685f636f6465602c69017468697320617373756d65732074686174206174206c65617374206f6e6520636f6e74726163742077697468207468652073616d65205741534d20636f64652068617320616c7265616479206265656e2075706c6f616465642e00c454686520636f6e74726163742077696c6c2062652061747461636865642061732061207365636f6e64617279206b65792ce07769746820607065726d736020617320697473207065726d697373696f6e732c20746f20606f726967696e602773206964656e746974792e00e054686520636f6e7472616374206973207472616e736665727265642060656e646f776d656e746020616d6f756e74206f6620504f4c59582e98546869732069732064697374696e63742066726f6d2074686520606761735f6c696d6974602c1101776869636820636f6e74726f6c7320686f77206d7563682067617320746865206465706c6f796d656e7420636f6465206d6179206174206d6f737420636f6e73756d652e002c2320417267756d656e7473e82d2060656e646f776d656e746020616d6f756e74206f6620504f4c595820746f207472616e7366657220746f2074686520636f6e74726163742e55012d20606761735f6c696d69746020666f7220686f77206d756368206761732074686520606465706c6f796020636f646520696e2074686520636f6e7472616374206d6179206174206d6f737420636f6e73756d652e51012d206073746f726167655f6465706f7369745f6c696d69746020546865206d6178696d756d20616d6f756e74206f662062616c616e636520746861742063616e20626520636861726765642f7265736572766564c8202066726f6d207468652063616c6c657220746f2070617920666f72207468652073746f7261676520636f6e73756d65642ec42d2060636f64655f6861736860206f6620616e20616c72656164792075706c6f61646564205741534d2062696e6172792ef02d206064617461602054686520696e707574206461746120746f207061737320746f2074686520636f6e747261637420636f6e7374727563746f722eb82d206073616c7460207573656420666f7220636f6e747261637420616464726573732064657269766174696f6e2e210120202042792076617279696e6720746869732c207468652073616d652060636f6465602063616e206265207573656420756e646572207468652073616d65206964656e746974792ebc2d20607065726d7360207468617420746865206e6577207365636f6e64617279206b65792077696c6c20686176652e002023204572726f72733d012d20416c6c20746865206572726f727320696e206070616c6c65745f636f6e7472616374733a3a43616c6c3a3a696e7374616e7469617465602063616e20616c736f2068617070656e20686572652ef02d204344442f5065726d697373696f6e732061726520636865636b65642c20756e6c696b6520696e206070616c6c65745f636f6e747261637473602e21012d204572726f72732074686174206172697365207768656e20616464696e672061206e6577207365636f6e64617279206b65792063616e20616c736f206f6363757220686572652e747570646174655f63616c6c5f72756e74696d655f77686974656c69737404011c75706461746573b50701605665633c2845787472696e73696349642c20626f6f6c293e000214745570646174652043616c6c52756e74696d652077686974656c6973742e002c2320417267756d656e7473002023204572726f727390696e7374616e74696174655f776974685f636f64655f61735f7072696d6172795f6b6579180124656e646f776d656e7418011c42616c616e63650001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d69743104013c4f7074696f6e3c42616c616e63653e000110636f646530011c5665633c75383e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e0003302d01496e7374616e746961746573206120736d61727420636f6e747261637420646566696e696e6720697420776974682074686520676976656e2060636f64656020616e64206073616c74602e007d0154686520636f6e74726163742077696c6c2062652061747461636865642061732061207072696d617279206b6579206f662061206e65776c792063726561746564206368696c64206964656e74697479206f66207468652063616c6c65722e002c2320417267756d656e7473ec2d2060656e646f776d656e74603a20416d6f756e74206f6620504f4c595820746f207472616e7366657220746f2074686520636f6e74726163742e59012d20606761735f6c696d6974603a20466f7220686f77206d756368206761732074686520606465706c6f796020636f646520696e2074686520636f6e7472616374206d6179206174206d6f737420636f6e73756d652e19022d206073746f726167655f6465706f7369745f6c696d6974603a20546865206d6178696d756d20616d6f756e74206f662062616c616e636520746861742063616e20626520636861726765642f72657365727665642066726f6d207468652063616c6c657220746f2070617920666f72207468652073746f7261676520636f6e73756d65642ed82d2060636f6465603a20546865205741534d2062696e61727920646566696e696e672074686520736d61727420636f6e74726163742ef42d206064617461603a2054686520696e707574206461746120746f207061737320746f2074686520636f6e747261637420636f6e7374727563746f722ed5012d206073616c74603a205573656420666f7220636f6e747261637420616464726573732064657269766174696f6e2e2042792076617279696e6720746869732c207468652073616d652060636f6465602063616e206265207573656420756e646572207468652073616d65206964656e746974792e0090696e7374616e74696174655f776974685f686173685f61735f7072696d6172795f6b6579180124656e646f776d656e7418011c42616c616e63650001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d69743104013c4f7074696f6e3c42616c616e63653e000124636f64655f686173682c012c436f6465486173683c543e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e0004383901496e7374616e746961746573206120736d61727420636f6e747261637420646566696e696e67207573696e672074686520676976656e2060636f64655f686173686020616e64206073616c74602e00e901556e6c696b652060696e7374616e74696174655f776974685f636f6465602c207468697320617373756d65732074686174206174206c65617374206f6e6520636f6e74726163742077697468207468652073616d65205741534d20636f64652068617320616c7265616479206265656e2075706c6f616465642e007d0154686520636f6e74726163742077696c6c2062652061747461636865642061732061207072696d617279206b6579206f662061206e65776c792063726561746564206368696c64206964656e74697479206f66207468652063616c6c65722e002c2320417267756d656e7473ec2d2060656e646f776d656e74603a20616d6f756e74206f6620504f4c595820746f207472616e7366657220746f2074686520636f6e74726163742e59012d20606761735f6c696d6974603a20666f7220686f77206d756368206761732074686520606465706c6f796020636f646520696e2074686520636f6e7472616374206d6179206174206d6f737420636f6e73756d652e19022d206073746f726167655f6465706f7369745f6c696d6974603a20546865206d6178696d756d20616d6f756e74206f662062616c616e636520746861742063616e20626520636861726765642f72657365727665642066726f6d207468652063616c6c657220746f2070617920666f72207468652073746f7261676520636f6e73756d65642ec82d2060636f64655f68617368603a206f6620616e20616c72656164792075706c6f61646564205741534d2062696e6172792ef42d206064617461603a2054686520696e707574206461746120746f207061737320746f2074686520636f6e747261637420636f6e7374727563746f722ed5012d206073616c74603a207573656420666f7220636f6e747261637420616464726573732064657269766174696f6e2e2042792076617279696e6720746869732c207468652073616d652060636f6465602063616e206265207573656420756e646572207468652073616d65206964656e746974792e002c757067726164655f61706908010c6170698d04010c4170690001306e6578745f75706772616465bd0701384e657874557067726164653c543e0005000c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652eb507000002b90700b907000004089504390100bd070848706f6c796d6573685f636f6e7472616374732c4e657874557067726164650404540000080134636861696e5f76657273696f6e91040130436861696e56657273696f6e0001206170695f68617368c1070138417069436f6465486173683c543e0000c1070848706f6c796d6573685f636f6e7472616374732c417069436f6465486173680404540000040110686173682c012c436f6465486173683c543e0000c5070c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657330011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d616765040110686173682c011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d616765040110686173682c011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d616765040110686173682c011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec907082870616c6c65745f6e66741043616c6c040454000110546372656174655f6e66745f636f6c6c656374696f6e0c012061737365745f6964cd07013c4f7074696f6e3c417373657449443e0001206e66745f74797065d107015c4f7074696f6e3c4e6f6e46756e6769626c65547970653e00013c636f6c6c656374696f6e5f6b657973d50701444e4654436f6c6c656374696f6e4b657973000044744372657465732061206e657720604e4654436f6c6c656374696f6e602e002c2320417267756d656e7473c5012a20606f726967696e60202d20636f6e7461696e7320746865207365636f6e64617279206b6579206f66207468652063616c6c65722028692e652e2077686f207369676e656420746865207472616e73616374696f6e20746f206578656375746520746869732066756e6374696f6e292e95012a206061737365745f696460202d206f7074696f6e616c205b6041737365744944605d206173736f63696174656420746f20746865206e657720636f6c6c656374696f6e2e20604e6f6e65602077696c6c206372656174652061206e65772061737365742e89012a20606e66745f7479706560202d20696e206361736520746865206173736574206861736e2774206265656e2063726561746564207965742c206f6e652077696c6c206265206372656174656420776974682074686520676976656e20747970652e79012a2060636f6c6c656374696f6e5f6b65797360202d20616c6c206d616e6461746f7279206d65746164617461206b65797320746861742074686520746f6b656e7320696e2074686520636f6c6c656374696f6e206d75737420686176652e00242323204572726f727371012d2060436f6c6c656374696f6e416c726564795265676973746572656460202d206966207468652061737365745f696420697320616c7265616479206173736f63696174656420746f20616e204e465420636f6c6c656374696f6e2e09012d2060496e76616c696441737365745479706560202d20696620746865206173736f636961746564206173736574206973206e6f74206f662074797065204e46542ed1012d20604d61784e756d6265724f664b657973457863656564656460202d20696620746865206e756d626572206f66206d65746164617461206b65797320666f722074686520636f6c6c656374696f6e2069732067726561746572207468616e20746865206d6178696d756d20616c6c6f7765642eb1012d2060556e726567697374657265644d657461646174614b657960202d20696620616e79206f6620746865206d65746164617461206b657973206e656564656420666f722074686520636f6c6c656374696f6e20686173206e6f74206265656e20726567697374657265642e45012d20604475706c69636174654d657461646174614b657960202d2069662061206475706c6963617465206d65746164617461206b65797320686173206265656e2070617373656420617320696e7075742e003423205065726d697373696f6e731c2a2041737365742469737375655f6e66740c012061737365745f6964a8011c4173736574494400015c6e66745f6d657461646174615f61747472696275746573dd0701645665633c4e46544d657461646174614174747269627574653e000138706f7274666f6c696f5f6b696e64ec0134506f7274666f6c696f4b696e640001447049737375657320616e204e465420746f207468652063616c6c65722e002c2320417267756d656e74733d012a20606f726967696e60202d2069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ed42a206061737365745f696460202d20746865205b6041737365744944605d206f6620746865204e465420636f6c6c656374696f6e2e45012a20606e66745f6d657461646174615f6174747269627574657360202d20616c6c206d616e6461746f7279206d65746164617461206b65797320616e642076616c75657320666f7220746865204e46542e11012d2060706f7274666f6c696f5f6b696e6460202d2074686520706f7274666f6c696f20746861742077696c6c207265636569766520746865206d696e746564206e66742e00242323204572726f727385012d2060436f6c6c656374696f6e4e6f74466f756e6460202d2069662074686520636f6c6c656374696f6e206173736f63696174656420746f2074686520676976656e2061737365745f696420686173206e6f74206265656e20637265617465642ec9022d2060496e76616c69644d6574616461746141747472696275746560202d20696620746865206e756d626572206f662061747472696275746573206973206e6f7420657175616c20746f20746865206e756d6265722073657420696e2074686520636f6c6c656374696f6e206f7220617474656d7074696e6720746f2073657420612076616c756520666f722061206b6579206e6f7420646566696e69656420696e2074686520636f6c6c656374696f6e2e45012d20604475706c69636174654d657461646174614b657960202d2069662061206475706c6963617465206d65746164617461206b65797320686173206265656e2070617373656420617320696e7075742e00003423205065726d697373696f6e731c2a2041737365742c2a20506f7274666f6c696f2872656465656d5f6e66740c012061737365745f6964a8011c417373657449440001186e66745f6964bd0301144e46544964000138706f7274666f6c696f5f6b696e64ec0134506f7274666f6c696f4b696e6400023cc852656465656d732074686520676976656e204e46542066726f6d207468652063616c6c6572277320706f7274666f6c696f2e002c2320417267756d656e74733d012a20606f726967696e60202d2069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ed42a206061737365745f696460202d20746865205b6041737365744944605d206f6620746865204e465420636f6c6c656374696f6e2eb02a20606e66745f696460202d20746865206964206f6620746865204e465420746f206265206275726e65642ee42a2060706f7274666f6c696f5f6b696e6460202d2074686520706f7274666f6c696f207468617420636f6e7461696e7320746865206e66742e00242323204572726f727385012d2060436f6c6c656374696f6e4e6f74466f756e6460202d2069662074686520636f6c6c656374696f6e206173736f63696174656420746f2074686520676976656e2061737365745f696420686173206e6f74206265656e20637265617465642e0d012d20604e46544e6f74466f756e6460202d2069662074686520676976656e204e465420646f6573206e6f7420657869737420696e2074686520706f7274666f6c696f2e003423205065726d697373696f6e731c2a2041737365742c2a20506f7274666f6c696f4c636f6e74726f6c6c65725f7472616e736665720c01106e667473b50301104e465473000140736f757263655f706f7274666f6c696fe8012c506f7274666f6c696f496400015863616c6c6572735f706f7274666f6c696f5f6b696e64ec0134506f7274666f6c696f4b696e6400032c3501466f7263657320746865207472616e73666572206f66204e4654732066726f6d206120676976656e20706f7274666f6c696f20746f207468652063616c6c6572277320706f7274666f6c696f2e002c2320417267756d656e74733d012a20606f726967696e60202d2069732061207369676e6572207468617420686173207065726d697373696f6e7320746f2061637420617320616e206167656e74206f66206061737365745f6964602ee02a20606e66745f696460202d20746865205b604e46544964605d206f6620746865204e465420746f206265207472616e736665727265642e21012a2060736f757263655f706f7274666f6c696f60202d20746865205b60506f7274666f6c696f4964605d20746861742063757272656e746c7920686f6c647320746865204e46542e35012a206063616c6c6572735f706f7274666f6c696f5f6b696e6460202d20746865205b60506f7274666f6c696f4b696e64605d206f66207468652063616c6c6572277320706f7274666f6c696f2e003423205065726d697373696f6e731c2a2041737365742c2a20506f7274666f6c696f0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ecd0704184f7074696f6e04045401a80108104e6f6e6500000010536f6d650400a80000010000d10704184f7074696f6e04045401f5010108104e6f6e6500000010536f6d650400f5010000010000d5070c4c706f6c796d6573685f7072696d6974697665730c6e6674444e4654436f6c6c656374696f6e4b65797300000400d90701545665633c41737365744d657461646174614b65793e0000d907000002790200dd07000002e10700e1070c4c706f6c796d6573685f7072696d6974697665730c6e6674504e46544d65746164617461417474726962757465000008010c6b65797902014041737365744d657461646174614b657900011476616c75654502014841737365744d6574616461746156616c75650000e5070c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c65741043616c6c0404540001143c7375626d69745f756e7369676e65640801307261775f736f6c7574696f6ee90701b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e00011c7769746e657373b9080158536f6c7574696f6e4f72536e617073686f7453697a65000038a45375626d6974206120736f6c7574696f6e20666f722074686520756e7369676e65642070686173652e00c8546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f6e6f6e655f5f2e003d0154686973207375626d697373696f6e20697320636865636b6564206f6e2074686520666c792e204d6f72656f7665722c207468697320756e7369676e656420736f6c7574696f6e206973206f6e6c79550176616c696461746564207768656e207375626d697474656420746f2074686520706f6f6c2066726f6d20746865202a2a6c6f63616c2a2a206e6f64652e204566666563746976656c792c2074686973206d65616e735d0174686174206f6e6c79206163746976652076616c696461746f72732063616e207375626d69742074686973207472616e73616374696f6e207768656e20617574686f72696e67206120626c6f636b202873696d696c617240746f20616e20696e686572656e74292e005901546f2070726576656e7420616e7920696e636f727265637420736f6c7574696f6e2028616e642074687573207761737465642074696d652f776569676874292c2074686973207472616e73616374696f6e2077696c6c4d0170616e69632069662074686520736f6c7574696f6e207375626d6974746564206279207468652076616c696461746f7220697320696e76616c696420696e20616e79207761792c206566666563746976656c799c70757474696e6720746865697220617574686f72696e6720726577617264206174207269736b2e00e04e6f206465706f736974206f7220726577617264206973206173736f63696174656420776974682074686973207375626d697373696f6e2e6c7365745f6d696e696d756d5f756e747275737465645f73636f72650401406d617962655f6e6578745f73636f7265bd0801544f7074696f6e3c456c656374696f6e53636f72653e000114b05365742061206e65772076616c756520666f7220604d696e696d756d556e7472757374656453636f7265602e00d84469737061746368206f726967696e206d75737420626520616c69676e656420776974682060543a3a466f7263654f726967696e602e00f05468697320636865636b2063616e206265207475726e6564206f66662062792073657474696e67207468652076616c756520746f20604e6f6e65602e747365745f656d657267656e63795f656c656374696f6e5f726573756c74040120737570706f727473c1080158537570706f7274733c543a3a4163636f756e7449643e0002205901536574206120736f6c7574696f6e20696e207468652071756575652c20746f2062652068616e646564206f757420746f2074686520636c69656e74206f6620746869732070616c6c657420696e20746865206e6578748863616c6c20746f2060456c656374696f6e50726f76696465723a3a656c656374602e004501546869732063616e206f6e6c79206265207365742062792060543a3a466f7263654f726967696e602c20616e64206f6e6c79207768656e207468652070686173652069732060456d657267656e6379602e00610154686520736f6c7574696f6e206973206e6f7420636865636b656420666f7220616e7920666561736962696c69747920616e6420697320617373756d656420746f206265207472757374776f727468792c20617320616e795101666561736962696c69747920636865636b20697473656c662063616e20696e207072696e6369706c652063617573652074686520656c656374696f6e2070726f6365737320746f206661696c202864756520746f686d656d6f72792f77656967687420636f6e73747261696e73292e187375626d69740401307261775f736f6c7574696f6ee90701b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e0003249c5375626d6974206120736f6c7574696f6e20666f7220746865207369676e65642070686173652e00d0546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f7369676e65645f5f2e005d0154686520736f6c7574696f6e20697320706f74656e7469616c6c79207175657565642c206261736564206f6e2074686520636c61696d65642073636f726520616e642070726f6365737365642061742074686520656e64506f6620746865207369676e65642070686173652e005d0141206465706f73697420697320726573657276656420616e64207265636f7264656420666f722074686520736f6c7574696f6e2e204261736564206f6e20746865206f7574636f6d652c2074686520736f6c7574696f6e15016d696768742062652072657761726465642c20736c61736865642c206f722067657420616c6c206f7220612070617274206f6620746865206465706f736974206261636b2e4c676f7665726e616e63655f66616c6c6261636b0801406d617962655f6d61785f766f746572735106012c4f7074696f6e3c7533323e0001446d617962655f6d61785f746172676574735106012c4f7074696f6e3c7533323e00041080547269676765722074686520676f7665726e616e63652066616c6c6261636b2e004901546869732063616e206f6e6c792062652063616c6c6564207768656e205b6050686173653a3a456d657267656e6379605d20697320656e61626c65642c20617320616e20616c7465726e617469766520746fc063616c6c696e67205b6043616c6c3a3a7365745f656d657267656e63795f656c656374696f6e5f726573756c74605d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee907089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173652c526177536f6c7574696f6e04045301ed07000c0120736f6c7574696f6eed0701045300011473636f7265ad040134456c656374696f6e53636f7265000114726f756e6410010c7533320000ed07085c706f6c796d6573685f72756e74696d655f636f6d6d6f6e384e706f73536f6c7574696f6e31360000400118766f74657331f10700000118766f74657332fd0700000118766f74657333110800000118766f746573341d0800000118766f74657335290800000118766f74657336350800000118766f74657337410800000118766f746573384d0800000118766f7465733959080000011c766f746573313065080000011c766f746573313171080000011c766f74657331327d080000011c766f746573313389080000011c766f746573313495080000011c766f7465733135a1080000011c766f7465733136ad08000000f107000002f50700f50700000408cd04f90700f9070000065d0300fd0700000201080001080000040ccd040508f90700050800000408f90709080009080000060d08000d080c3473705f61726974686d65746963287065725f7468696e677318506572553136000004005d03010c7531360000110800000215080015080000040ccd041908f907001908000003020000000508001d0800000221080021080000040ccd042508f9070025080000030300000005080029080000022d08002d080000040ccd043108f90700310800000304000000050800350800000239080039080000040ccd043d08f907003d0800000305000000050800410800000245080045080000040ccd044908f907004908000003060000000508004d0800000251080051080000040ccd045508f9070055080000030700000005080059080000025d08005d080000040ccd046108f90700610800000308000000050800650800000269080069080000040ccd046d08f907006d0800000309000000050800710800000275080075080000040ccd047908f9070079080000030a0000000508007d0800000281080081080000040ccd048508f9070085080000030b00000005080089080000028d08008d080000040ccd049108f9070091080000030c000000050800950800000299080099080000040ccd049d08f907009d080000030d000000050800a108000002a50800a5080000040ccd04a908f90700a9080000030e000000050800ad08000002b10800b1080000040ccd04b508f90700b5080000030f000000050800b908089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736558536f6c7574696f6e4f72536e617073686f7453697a650000080118766f74657273cd04010c75333200011c74617267657473cd04010c7533320000bd0804184f7074696f6e04045401ad040108104e6f6e6500000010536f6d650400ad040000010000c108000002c50800c5080000040800c90800c908084473705f6e706f735f656c656374696f6e731c537570706f727404244163636f756e744964010000080114746f74616c18013c457874656e64656442616c616e6365000118766f74657273cd0801845665633c284163636f756e7449642c20457874656e64656442616c616e6365293e0000cd08000002d10800d10800000408001800d508084470616c6c65745f746573745f7574696c731043616c6c0404540001103072656769737465725f6469640401387365636f6e646172795f6b65797398017c5665633c5365636f6e646172794b65793c543a3a4163636f756e7449643e3e0000284d0147656e6572617465732061206e657720604964656e7469747949446020666f72207468652063616c6c65722c20616e642069737375657320612073656c662d67656e6572617465642043444420636c61696d2e00f05468652063616c6c6572206163636f756e742077696c6c20626520746865207072696d617279206b6579206f662074686174206964656e746974792e5d01466f722065616368206163636f756e74206f6620607365636f6e646172795f6b657973602c2061206e657720604a6f696e4964656e746974796020617574686f72697a6174696f6e20697320637265617465642c20736f410165616368206f66207468656d2077696c6c206e65656420746f20616363657074206974206265666f7265206265636f6d652070617274206f662074686973206e657720604964656e746974794944602e002023204572726f7273d5012d2060416c72656164794c696e6b656460206966207468652063616c6c6572206163636f756e74206f7220696620616e79206f662074686520676976656e20607365636f6e646172795f6b657973602068617320616c7265616479206c696e6b656420746f20616e20604964656e746974794944604d012d20605365636f6e646172794b657973436f6e7461696e5072696d6172794b65796020696620607365636f6e646172795f6b6579736020636f6e7461696e73207468652063616c6c6572206163636f756e742ee82d2060446964416c726561647945786973747360206966206175746f2d67656e6572617465642044494420616c7265616479206578697374732e546d6f636b5f6364645f72656769737465725f6469640401387461726765745f6163636f756e74000130543a3a4163636f756e74496400011c3d015265676973746572732061206e6577204964656e7469747920666f722074686520607461726765745f6163636f756e746020616e642069737375657320612043444420636c61696d20746f2069742e002423204661696c75726549012d20606f726967696e602068617320746f20626520616e20616374697665204344442070726f76696465722e20496e616374697665204344442070726f7669646572732063616e6e6f7420616464206e65771c636c61696d732e5d012d20607461726765745f6163636f756e746020287072696d617279206b6579206f6620746865206e6577204964656e74697479292063616e206265206c696e6b656420746f206a757374206f6e6520616e64206f6e6c79346f6e65206964656e746974792e286765745f6d795f64696400020498456d69747320616e206576656e7420776974682063616c6c65722773206964656e746974792e286765745f6364645f6f660401086f66000130543a3a4163636f756e744964000304d4456d69747320616e206576656e7420776974682063616c6c65722773206964656e7469747920616e6420434444207374617475732e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ed908084070616c6c65745f636f6d6d697474656534506f6c796d657368566f746573042c426c6f636b4e756d626572011000100114696e64657810013450726f706f73616c496e646578000110617965734501013c5665633c4964656e7469747949643e0001106e6179734501013c5665633c4964656e7469747949643e0001186578706972795901015c4d61796265426c6f636b3c426c6f636b4e756d6265723e0000dd08084070616c6c65745f636f6d6d69747465651c56657273696f6e0000040008010875380000e108084070616c6c65745f636f6d6d6974746565144572726f72080454000449000124344475706c6963617465566f7465000004804475706c696361746520766f74657320617265206e6f7420616c6c6f7765642e284e6f74414d656d6265720001088841204449442069736e27742070617274206f662074686520636f6d6d69747465652ed454686520444944206d61792065697468657220626520612063616c6c6572206f7220736f6d65206f7468657220636f6e746578742e384e6f5375636850726f706f73616c000204444e6f20737563682070726f706f73616c2e3c50726f706f73616c457870697265640003049050726f706f73616c206578697374732c206275742069742068617320657870697265642e444475706c696361746550726f706f73616c0004044c4475706c69636174652070726f706f73616c2e544d69736d617463686564566f74696e67496e646578000504604d69736d61746368656420766f74696e6720696e6465782e44496e76616c696450726f706f7274696f6e0006049450726f706f7274696f6e206d757374206265206120726174696f6e616c206e756d6265722e3c4669727374566f746552656a65637400070cfc466972737420766f7465206f6e20612070726f706f73616c20637265617465732069742c20736f206974206d75737420626520616e20617070726f76616c2e0101416c6c2070726f706f73616c7320617265206d6f74696f6e7320746f206578656375746520736f6d657468696e6720617320224743206d616a6f72697479222efc546f2072656a65637420652e672e2c2061205049502c2061206d6f74696f6e20746f2072656a6563742073686f756c64206265202a617070726f7665642a2e5450726f706f73616c734c696d697452656163686564000804b44d6178696d756d206e756d626572206f662070726f706f73616c7320686173206265656e20726561636865642e00e508083070616c6c65745f67726f7570144572726f72080454000449000118544f6e6c795072696d6172794b6579416c6c6f776564000004b04f6e6c79207072696d617279206b6579206f6620746865206964656e7469747920697320616c6c6f7765642e3c4475706c69636174654d656d6265720001047c47726f7570206d656d6265722077617320616464656420616c72656164792e304e6f537563684d656d626572000204a443616e27742072656d6f76652061206d656d626572207468617420646f65736e27742065786973742e504c6173744d656d62657243616e6e6f7451756974000304a84c617374206d656d626572206f662074686520636f6d6d69747465652063616e206e6f7420717569742e684163746976654d656d626572734c696d697445786365656465640004045d01546865206c696d697420666f7220746865206e756d626572206f6620636f6e63757272656e7420616374697665206d656d6265727320666f7220746869732067726f757020686173206265656e2065786365656465642e684163746976654d656d626572734c696d69744f766572666c6f770005041501416374697665206d656d626572206c696d6974207761732067726561746572207468616e206d6178696d756d20636f6d6d6974746565206d656d62657273206c696d69742e00e908084070616c6c65745f636f6d6d6974746565144572726f72080454000449000124344475706c6963617465566f7465000004804475706c696361746520766f74657320617265206e6f7420616c6c6f7765642e284e6f74414d656d6265720001088841204449442069736e27742070617274206f662074686520636f6d6d69747465652ed454686520444944206d61792065697468657220626520612063616c6c6572206f7220736f6d65206f7468657220636f6e746578742e384e6f5375636850726f706f73616c000204444e6f20737563682070726f706f73616c2e3c50726f706f73616c457870697265640003049050726f706f73616c206578697374732c206275742069742068617320657870697265642e444475706c696361746550726f706f73616c0004044c4475706c69636174652070726f706f73616c2e544d69736d617463686564566f74696e67496e646578000504604d69736d61746368656420766f74696e6720696e6465782e44496e76616c696450726f706f7274696f6e0006049450726f706f7274696f6e206d757374206265206120726174696f6e616c206e756d6265722e3c4669727374566f746552656a65637400070cfc466972737420766f7465206f6e20612070726f706f73616c20637265617465732069742c20736f206974206d75737420626520616e20617070726f76616c2e0101416c6c2070726f706f73616c7320617265206d6f74696f6e7320746f206578656375746520736f6d657468696e6720617320224743206d616a6f72697479222efc546f2072656a65637420652e672e2c2061205049502c2061206d6f74696f6e20746f2072656a6563742073686f756c64206265202a617070726f7665642a2e5450726f706f73616c734c696d697452656163686564000804b44d6178696d756d206e756d626572206f662070726f706f73616c7320686173206265656e20726561636865642e00ed08083070616c6c65745f67726f7570144572726f72080454000449000118544f6e6c795072696d6172794b6579416c6c6f776564000004b04f6e6c79207072696d617279206b6579206f6620746865206964656e7469747920697320616c6c6f7765642e3c4475706c69636174654d656d6265720001047c47726f7570206d656d6265722077617320616464656420616c72656164792e304e6f537563684d656d626572000204a443616e27742072656d6f76652061206d656d626572207468617420646f65736e27742065786973742e504c6173744d656d62657243616e6e6f7451756974000304a84c617374206d656d626572206f662074686520636f6d6d69747465652063616e206e6f7420717569742e684163746976654d656d626572734c696d697445786365656465640004045d01546865206c696d697420666f7220746865206e756d626572206f6620636f6e63757272656e7420616374697665206d656d6265727320666f7220746869732067726f757020686173206265656e2065786365656465642e684163746976654d656d626572734c696d69744f766572666c6f770005041501416374697665206d656d626572206c696d6974207761732067726561746572207468616e206d6178696d756d20636f6d6d6974746565206d656d62657273206c696d69742e00f108084070616c6c65745f636f6d6d6974746565144572726f72080454000449000124344475706c6963617465566f7465000004804475706c696361746520766f74657320617265206e6f7420616c6c6f7765642e284e6f74414d656d6265720001088841204449442069736e27742070617274206f662074686520636f6d6d69747465652ed454686520444944206d61792065697468657220626520612063616c6c6572206f7220736f6d65206f7468657220636f6e746578742e384e6f5375636850726f706f73616c000204444e6f20737563682070726f706f73616c2e3c50726f706f73616c457870697265640003049050726f706f73616c206578697374732c206275742069742068617320657870697265642e444475706c696361746550726f706f73616c0004044c4475706c69636174652070726f706f73616c2e544d69736d617463686564566f74696e67496e646578000504604d69736d61746368656420766f74696e6720696e6465782e44496e76616c696450726f706f7274696f6e0006049450726f706f7274696f6e206d757374206265206120726174696f6e616c206e756d6265722e3c4669727374566f746552656a65637400070cfc466972737420766f7465206f6e20612070726f706f73616c20637265617465732069742c20736f206974206d75737420626520616e20617070726f76616c2e0101416c6c2070726f706f73616c7320617265206d6f74696f6e7320746f206578656375746520736f6d657468696e6720617320224743206d616a6f72697479222efc546f2072656a65637420652e672e2c2061205049502c2061206d6f74696f6e20746f2072656a6563742073686f756c64206265202a617070726f7665642a2e5450726f706f73616c734c696d697452656163686564000804b44d6178696d756d206e756d626572206f662070726f706f73616c7320686173206265656e20726561636865642e00f508083070616c6c65745f67726f7570144572726f72080454000449000118544f6e6c795072696d6172794b6579416c6c6f776564000004b04f6e6c79207072696d617279206b6579206f6620746865206964656e7469747920697320616c6c6f7765642e3c4475706c69636174654d656d6265720001047c47726f7570206d656d6265722077617320616464656420616c72656164792e304e6f537563684d656d626572000204a443616e27742072656d6f76652061206d656d626572207468617420646f65736e27742065786973742e504c6173744d656d62657243616e6e6f7451756974000304a84c617374206d656d626572206f662074686520636f6d6d69747465652063616e206e6f7420717569742e684163746976654d656d626572734c696d697445786365656465640004045d01546865206c696d697420666f7220746865206e756d626572206f6620636f6e63757272656e7420616374697665206d656d6265727320666f7220746869732067726f757020686173206265656e2065786365656465642e684163746976654d656d626572734c696d69744f766572666c6f770005041501416374697665206d656d626572206c696d6974207761732067726561746572207468616e206d6178696d756d20636f6d6d6974746565206d656d62657273206c696d69742e00f90800000408000000fd0800000408002800010900000408fd08000005090c4c706f6c796d6573685f7072696d697469766573206d756c74697369674450726f706f73616c566f7465436f756e740000080124617070726f76616c7328010c75363400012872656a656374696f6e7328010c753634000009090c4c706f6c796d6573685f7072696d697469766573206d756c74697369673450726f706f73616c537461746504184d6f6d656e740128011018416374697665040114756e74696c050101384f7074696f6e3c4d6f6d656e743e0000004c457865637574696f6e5375636365737366756c0001003c457865637574696f6e4661696c65640002002052656a6563746564000300000d09083c70616c6c65745f6d756c74697369671c56657273696f6e000004000801087538000011090c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f720404540001583c50726f706f73616c4d697373696e67000004705468652070726f706f73616c20646f6573206e6f742065786973742e344465636f64696e674572726f72000104444d756c746973696720616464726573732e5452657175697265645369676e65727349735a65726f000204d45265717569726564206e756d626572206f66207369676e657273206d7573742062652067726561746572207468656e207a65726f2e284e6f74415369676e6572000304344e6f742061207369676e65722e384e6f537563684d756c7469736967000404444e6f2073756368206d756c74697369672e404e6f74456e6f7567685369676e65727300050835014e6f7420656e6f756768207369676e6572732e2020546865206e756d626572206f66207369676e6572732068617320746f2062652067726561746572207468656e206f7220657175616c20746fd0746865207265717569726564206e756d626572206f66207369676e65727320746f20617070726f76652070726f706f73616c732e344e6f6e63654f766572666c6f770006044441206e6f6e6365206f766572666c6f772e30416c7265616479566f74656400070438416c726561647920766f7465642e38416c7265616479415369676e657200080444416c72656164792061207369676e65722e404964656e746974794e6f7441646d696e000904b84964656e746974792070726f7669646564206973206e6f7420746865206d756c746973696727732061646d696e2e404964656e746974794e6f745061796572000a04b84964656e746974792070726f7669646564206973206e6f7420746865206d756c746973696727732070617965722e404368616e67654e6f74416c6c6f776564000b0425014368616e67696e67206d756c746973696720706172616d6574657273206e6f7420616c6c6f7765642073696e6365206d756c74697369672069732061207072696d617279206b65792e745369676e6572416c72656164794c696e6b6564546f4d756c7469736967000c0411015369676e657220697320616e206163636f756e74206b6579207468617420697320616c7265616479206173736f63696174656420776974682061206d756c74697369672e745369676e6572416c72656164794c696e6b6564546f4964656e74697479000d0415015369676e657220697320616e206163636f756e74206b6579207468617420697320616c7265616479206173736f636961746564207769746820616e206964656e746974792e444e657374696e674e6f74416c6c6f776564000e04c441206d756c74697369672063616e27742062652061207369676e6572206f6620616e6f74686572206d756c74697369672e5c50726f706f73616c416c726561647952656a6563746564000f047450726f706f73616c207761732072656a6563746564206561726c6965723c50726f706f73616c457870697265640010045050726f706f73616c2068617320657870697265645c50726f706f73616c416c726561647945786563757465640011047450726f706f73616c20776173206578656375746564206561726c6965723c4d6178576569676874546f6f4c6f77001204a84d617820776569676874206e6f7420656e6f75676820746f20657865637574652070726f706f73616c2e5c4d756c74697369674d697373696e674964656e746974790013049c4d756c7469736967206973206e6f7420617474616368656420746f20616e206964656e7469747938546f6f4d616e795369676e65727300140494547269656420746f206164642f72656d6f766520746f6f206d616e79207369676e6572732e2c4e6f506179696e674469640015048c4d756c746973696720646f65736e27742068617665206120706179696e67204449442e045c4d756c7469736967206d6f64756c65206572726f72732e1509000004080010001909083470616c6c65745f62726964676538427269646765547844657461696c042c426c6f636b4e756d626572011000100118616d6f756e7418011c42616c616e63650001187374617475731d090138427269646765547853746174757300013c657865637574696f6e5f626c6f636b10012c426c6f636b4e756d62657200011c74785f686173682c01104832353600001d09083470616c6c65745f62726964676538427269646765547853746174757300011418416273656e740000001c50656e64696e67040008010875380001001846726f7a656e0002002854696d656c6f636b65640003001c48616e646c6564000400002109000004081810002509083470616c6c65745f6272696467651c56657273696f6e00000400080108753800002909083870616c6c65745f7374616b696e67345374616b696e674c656467657204045400001401147374617368000130543a3a4163636f756e744964000114746f74616cd901013042616c616e63654f663c543e000118616374697665d901013042616c616e63654f663c543e000124756e6c6f636b696e672d0901f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e00013c636c61696d65645f7265776172647339090194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e00002d090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013109045300000400350901185665633c543e00003109083870616c6c65745f7374616b696e672c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c7565d901011c42616c616e636500010c657261cd040120457261496e6465780000350900000231090039090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400690401185665633c543e00003d09083870616c6c65745f7374616b696e672c4e6f6d696e6174696f6e7304045400000c011c74617267657473410901ac426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61784e6f6d696e6174696f6e733e0001307375626d69747465645f696e100120457261496e6465780001287375707072657373656439010110626f6f6c000041090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400fc01185665633c543e00004509083870616c6c65745f7374616b696e6734416374697665457261496e666f0000080114696e646578100120457261496e64657800011473746172740501012c4f7074696f6e3c7536343e00004909000004081000004d09083870616c6c65745f7374616b696e673c457261526577617264506f696e747304244163636f756e744964010000080114746f74616c10012c526577617264506f696e74000128696e646976696475616c5109018042547265654d61703c4163636f756e7449642c20526577617264506f696e743e00005109042042547265654d617008044b0100045601100004005509000000550900000215090059090000025d09005d09083870616c6c65745f7374616b696e6738556e6170706c696564536c61736808244163636f756e74496401001c42616c616e636501180014012476616c696461746f720001244163636f756e74496400010c6f776e18011c42616c616e63650001186f7468657273cd0801645665633c284163636f756e7449642c2042616c616e6365293e0001247265706f7274657273fc01385665633c4163636f756e7449643e0001187061796f757418011c42616c616e636500006109000004089101180065090c3870616c6c65745f7374616b696e6720736c617368696e6734536c617368696e675370616e7300001001287370616e5f696e6465781001245370616e496e6465780001286c6173745f7374617274100120457261496e6465780001486c6173745f6e6f6e7a65726f5f736c617368100120457261496e6465780001147072696f72690401345665633c457261496e6465783e000069090c3870616c6c65745f7374616b696e6720736c617368696e67285370616e5265636f7264041c42616c616e636501180008011c736c617368656418011c42616c616e6365000120706169645f6f757418011c42616c616e636500006d090000027109007109000004081039010075090c3870616c6c65745f7374616b696e67147479706573645065726d697373696f6e65644964656e7469747950726566730000080138696e74656e6465645f636f756e7410010c75333200013472756e6e696e675f636f756e7410010c753332000079090c3870616c6c65745f7374616b696e671870616c6c65741c56657273696f6e00000400080108753800007d09103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144572726f7204045400018c344e6f74436f6e74726f6c6c6572000004644e6f74206120636f6e74726f6c6c6572206163636f756e742e204e6f745374617368000104504e6f742061207374617368206163636f756e742e34416c7265616479426f6e64656400020460537461736820697320616c726561647920626f6e6465642e34416c726561647950616972656400030474436f6e74726f6c6c657220697320616c7265616479207061697265642e30456d7074795461726765747300040460546172676574732063616e6e6f7420626520656d7074792e384475706c6963617465496e646578000504404475706c696361746520696e6465782e44496e76616c6964536c617368496e64657800060484536c617368207265636f726420696e646578206f7574206f6620626f756e64732e40496e73756666696369656e74426f6e6400070c590143616e6e6f74206861766520612076616c696461746f72206f72206e6f6d696e61746f7220726f6c652c20776974682076616c7565206c657373207468616e20746865206d696e696d756d20646566696e65642062793d01676f7665726e616e6365202873656520604d696e56616c696461746f72426f6e646020616e6420604d696e4e6f6d696e61746f72426f6e6460292e20496620756e626f6e64696e67206973207468651501696e74656e74696f6e2c20606368696c6c6020666972737420746f2072656d6f7665206f6e65277320726f6c652061732076616c696461746f722f6e6f6d696e61746f722e304e6f4d6f72654368756e6b730008049043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e344e6f556e6c6f636b4368756e6b000904a043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e3046756e646564546172676574000a04c8417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e48496e76616c6964457261546f526577617264000b0458496e76616c69642065726120746f207265776172642e68496e76616c69644e756d6265724f664e6f6d696e6174696f6e73000c0478496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e484e6f74536f72746564416e64556e69717565000d04804974656d7320617265206e6f7420736f7274656420616e6420756e697175652e38416c7265616479436c61696d6564000e0409015265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e54496e636f7272656374486973746f72794465707468000f04c0496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e58496e636f7272656374536c617368696e675370616e73001004b0496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e2042616453746174650011043901496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e38546f6f4d616e795461726765747300120494546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e244261645461726765740013043d0141206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e4043616e6e6f744368696c6c4f74686572001404550154686520757365722068617320656e6f75676820626f6e6420616e6420746875732063616e6e6f74206265206368696c6c656420666f72636566756c6c7920627920616e2065787465726e616c20706572736f6e2e44546f6f4d616e794e6f6d696e61746f72730015084d0154686572652061726520746f6f206d616e79206e6f6d696e61746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e44546f6f4d616e7956616c696461746f7273001604d854686572652061726520746f6f206d616e792076616c696461746f722063616e6469646174657320696e207468652073797374656d2e40436f6d6d697373696f6e546f6f4c6f77001704e0436f6d6d697373696f6e20697320746f6f206c6f772e204d757374206265206174206c6561737420604d696e436f6d6d697373696f6e602e2c426f756e644e6f744d657400180458536f6d6520626f756e64206973206e6f74206d65742e6453746173684964656e74697479446f65734e6f744578697374001904d456616c696461746f72206f72206e6f6d696e61746f72207374617368206964656e7469747920646f6573206e6f742065786973742e7053746173684964656e746974794e6f745065726d697373696f6e6564001a04bc56616c696461746f722773207374617368206964656e74697479206973206e6f74207065726d697373696f6e65642e5453746173684964656e746974794e6f744344446564001b04a44e6f6d696e61746f7220737461736820686173206e6f7420676f6e65207468726f756768204344442e744964656e746974794973416c72656164795065726d697373696f6e6564001c04985065726d697373696f6e65642076616c696461746f7220616c7265616479206578697374732e504964656e7469747949734d697373696e67434444001d048c4964656e7469747920686173206e6f7420676f6e65207468726f75676874204344442e98496e74656e646564436f756e744973457863656564696e67436f6e73656e7375734c696d6974001e0435015768656e2074686520696e74656e646564206e756d626572206f662076616c696461746f727320746f2072756e206973203e3d20322f33206f66206076616c696461746f725f636f756e74602e404964656e746974794e6f74466f756e64001f04e44964656e7469747920776173206e6f7420666f756e6420696e20746865207065726d697373696f6e6564206964656e7469747920706f6f6c2e4456616c696461746f724e6f74466f756e64002004a44e6f2076616c696461746f722077617320666f756e6420666f722074686520676976656e206b65792e44436f6d6d697373696f6e546f6f486967680021049c56616c696461746f7220636f6d6d69697373696f6e2069732061626f7665206d6178696d756d2e4c436f6d6d697373696f6e556e6368616e676564002204e84e657720636f6d6d697373696f6e206d75737420626520646966666572656e742066726f6d2070726576696f757320636f6d6d697373696f6e2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090981090c2873705f7374616b696e671c6f6666656e6365384f6666656e636544657461696c7308205265706f727465720100204f6666656e64657201d101000801206f6666656e646572d10101204f6666656e6465720001247265706f7274657273fc01345665633c5265706f727465723e0000850900000408ac300089090000028d09008d0900000408005906009109000004089509300095090c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d000099090c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e9d09083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e00030000a109083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f726974696573a509016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564510601244f7074696f6e3c4e3e0000a5090c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401b501045300000400b10101185665633c543e0000a9090c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909ad090c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401c501045300000400b10901185665633c543e0000b109000002c50100b50910346672616d655f737570706f727418747261697473106d69736334577261707065724f706171756504045401b909000800cd04000000b9090104540000b909084070616c6c65745f696d5f6f6e6c696e6564426f756e6465644f70617175654e6574776f726b53746174650c4c506565724964456e636f64696e674c696d697400584d756c746941646472456e636f64696e674c696d697400384164647265737365734c696d6974000008011c706565725f6964bd09019c5765616b426f756e6465645665633c75382c20506565724964456e636f64696e674c696d69743e00014865787465726e616c5f616464726573736573c109012d015765616b426f756e6465645665633c5765616b426f756e6465645665633c75382c204d756c746941646472456e636f64696e674c696d69743e2c204164647265737365734c696d69740a3e0000bd090c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e0000c1090c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401bd09045300000400c50901185665633c543e0000c509000002bd0900c9090c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144572726f7204045400010828496e76616c69644b6579000004604e6f6e206578697374656e74207075626c6963206b65792e4c4475706c696361746564486561727462656174000104544475706c696361746564206865617274626561742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909cd090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012c045300000400c10401185665633c543e0000d109082c70616c6c65745f7375646f144572726f720404540001042c526571756972655375646f0000047c53656e646572206d75737420626520746865205375646f206163636f756e7404644572726f7220666f7220746865205375646f206d6f64756c65d5090c3070616c6c65745f6173736574147479706573485469636b6572526567697374726174696f6e0404540128000801146f776e65728001284964656e746974794964000118657870697279050101244f7074696f6e3c543e0000d9090c3070616c6c65745f6173736574147479706573605469636b6572526567697374726174696f6e436f6e6669670404540128000801446d61785f7469636b65725f6c656e677468080108753800014c726567697374726174696f6e5f6c656e677468050101244f7074696f6e3c543e0000dd090c3070616c6c65745f617373657414747970657330417373657444657461696c730000100130746f74616c5f737570706c7918011c42616c616e63650001246f776e65725f6469648001284964656e746974794964000124646976697369626c6539010110626f6f6c00012861737365745f74797065ed0101244173736574547970650000e10900000408a88000e50900000408a8110200e90900000408a8150200ed0900000408a8790200f10900000408a8550200f50900000408a8590200f9090000040880a800fd090000040880210100010a083070616c6c65745f61737365741c56657273696f6e0000040008010875380000050a0c3070616c6c65745f6173736574146572726f72144572726f720404540001bc30556e617574686f72697a65640000046c5468652075736572206973206e6f7420617574686f72697a65642e4c4173736574416c7265616479437265617465640001048c54686520746f6b656e2068617320616c7265616479206265656e20637265617465642e345469636b6572546f6f4c6f6e6700020490546865207469636b6572206c656e677468206973206f76657220746865206c696d69742e545469636b65724e6f74416c7068616e756d6572696300030498546865207469636b657220686173206e6f6e2d616c7068616e756d657269632070617274732e5c5469636b6572416c726561647952656769737465726564000404c4546865207469636b657220697320616c7265616479207265676973746572656420746f20736f6d656f6e6520656c73652e54546f74616c537570706c7941626f76654c696d69740005049054686520746f74616c20737570706c792069732061626f766520746865206c696d69742e2c4e6f537563684173736574000604cc4e6f20736563757269747920746f6b656e206173736f63696174656420746f2074686520676976656e2061737365742049442e34416c726561647946726f7a656e0007047054686520746f6b656e20697320616c72656164792066726f7a656e2e284e6f74416e4f776e6572000804984e6f7420616e206f776e6572206f662074686520746f6b656e206f6e20457468657265756d2e3c42616c616e63654f766572666c6f77000904a8416e206f766572666c6f77207768696c652063616c63756c6174696e67207468652062616c616e63652e4c546f74616c537570706c794f766572666c6f77000a04bc416e206f766572666c6f77207768696c652063616c63756c6174696e672074686520746f74616c20737570706c792e48496e76616c69644772616e756c6172697479000b045c416e20696e76616c6964206772616e756c61726974792e244e6f7446726f7a656e000c0464546865206173736574206d7573742062652066726f7a656e2e3c496e76616c69645472616e73666572000d04845472616e736665722076616c69646174696f6e20636865636b206661696c65642e4c496e73756666696369656e7442616c616e6365000e04945468652073656e6465722062616c616e6365206973206e6f742073756666696369656e742e544173736574416c7265616479446976697369626c65000f047c54686520746f6b656e20697320616c726561647920646976697369626c652e60496e76616c6964457468657265756d5369676e617475726500100494416e20696e76616c696420457468657265756d206045636473615369676e6174757265602e645469636b6572526567697374726174696f6e457870697265640011048c526567697374726174696f6e206f66207469636b65722068617320657870697265642e5053656e64657253616d6541735265636569766572001204845472616e736665727320746f2073656c6620617265206e6f7420616c6c6f776564244e6f53756368446f630013048854686520676976656e20446f63756d656e7420646f6573206e6f742065786973742e704d61784c656e6774684f6641737365744e616d654578636565646564001404bc4d6178696d756d206c656e677468206f66206173736574206e616d6520686173206265656e2065786365656465642e8446756e64696e67526f756e644e616d654d61784c656e6774684578636565646564001504ec4d6178696d756d206c656e677468206f66207468652066756e64696e6720726f756e64206e616d6520686173206265656e2065786365656465642e58496e76616c696441737365744964656e7469666965720016048c536f6d65206041737365744964656e746966696572602077617320696e76616c69642e84496e766573746f72556e697175656e657373436c61696d4e6f74416c6c6f776564001704e8496e766573746f7220556e697175656e65737320636c61696d7320617265206e6f7420616c6c6f77656420666f7220746869732061737365742e60496e76616c6964437573746f6d417373657454797065496400180470496e76616c69642060437573746f6d4173736574547970654964602e8841737365744d657461646174614e616d654d61784c656e677468457863656564656400190405014d6178696d756d206c656e677468206f6620746865206173736574206d657461646174612074797065206e616d6520686173206265656e2065786365656465642e8c41737365744d6574616461746156616c75654d61784c656e6774684578636565646564001a04f44d6178696d756d206c656e677468206f6620746865206173736574206d657461646174612076616c756520686173206265656e2065786365656465642e9441737365744d65746164617461547970654465664d61784c656e6774684578636565646564001b041d014d6178696d756d206c656e677468206f6620746865206173736574206d65746164617461207479706520646566696e6974696f6e20686173206265656e2065786365656465642e6441737365744d657461646174614b657949734d697373696e67001c04784173736574204d65746164617461206b6579206973206d697373696e672e6841737365744d6574616461746156616c756549734c6f636b6564001d047c4173736574204d657461646174612076616c7565206973206c6f636b65642e8841737365744d657461646174614c6f63616c4b6579416c7265616479457869737473001e04cc4173736574204d65746164617461204c6f63616c207479706520616c72656164792065786973747320666f722061737365742e8c41737365744d65746164617461476c6f62616c4b6579416c7265616479457869737473001f04a84173736574204d6574616461746120476c6f62616c207479706520616c7265616479206578697374732e5c5469636b65724669727374427974654e6f7456616c6964002004c85469636b6572732073686f756c642073746172742077697468206174206c65617374206f6e652076616c696420627974652e68556e65787065637465644e6f6e46756e6769626c65546f6b656e0021042101417474656d707420746f2063616c6c20616e2065787472696e7369632074686174206973206f6e6c79207065726d697474656420666f722066756e6769626c6520746f6b656e732e6c496e636f6d70617469626c654173736574547970655570646174650022047d01417474656d707420746f20757064617465207468652074797065206f662061206e6f6e2066756e6769626c6520746f6b656e20746f20612066756e6769626c6520746f6b656e206f7220746865206f74686572207761792061726f756e642e9841737365744d657461646174614b657942656c6f6e6773546f4e4654436f6c6c656374696f6e002304f4417474656d707420746f2064656c6574652061206b65792074686174206973206e656564656420666f7220616e204e465420636f6c6c656374696f6e2e6441737365744d6574616461746156616c75654973456d707479002404bc417474656d707420746f206c6f636b2061206d657461646174612076616c7565207468617420697320656d7074792e784e756d6265724f6641737365744d65646961746f72734578636565646564002504ec4e756d626572206f66206173736574206d65646961746f727320776f756c642065786365656420746865206d6178696d756d20616c6c6f7765642e58496e76616c69645469636b65724368617261637465720026041d01496e76616c6964207469636b657220636861726163746572202d2076616c6964207365743a2041602e2e605a60206030602e2e60396020605f6020602d6020602e6020602f602e68496e76616c69645472616e7366657246726f7a656e4173736574002704bc4661696c656420746f207472616e7366657220746865206173736574202d2061737365742069732066726f7a656e2e80496e76616c69645472616e73666572436f6d706c69616e63654661696c757265002804b84661696c656420746f207472616e7366657220616e204e4654202d20636f6d706c69616e6365206661696c65642e84496e76616c69645472616e73666572496e76616c69645265636569766572434444002904e44661696c656420746f207472616e7366657220746865206173736574202d20726563656976657220636464206973206e6f742076616c69642e7c496e76616c69645472616e73666572496e76616c696453656e646572434444002a04dc4661696c656420746f207472616e7366657220746865206173736574202d2073656e64657220636464206973206e6f742076616c69642e685469636b6572526567697374726174696f6e4e6f74466f756e64002b04fc546865207469636b657220726567697374726174696f6e206173736f63696174656420746f20746865207469636b657220776173206e6f7420666f756e642e785469636b65724973416c72656164794c696e6b6564546f416e4173736574002c04bc54686520676976656e207469636b657220697320616c7265616479206c696e6b656420746f20616e2061737365742e584173736574494447656e65726174696f6e4572726f72002d04cc416e20756e6578706563746564206572726f72207768656e2067656e65726174696e672061206e65772061737365742049442e6c5469636b65724e6f7452656769737465726564546f43616c6c6572002e04a0546865207469636b657220646f65736e27742062656c6f6e6720746f207468652063616c6c65722e00090a00000408990280000d0a0c6070616c6c65745f636f72706f726174655f616374696f6e7330646973747269627574696f6e1c56657273696f6e0000040008010875380000110a0c6070616c6c65745f636f72706f726174655f616374696f6e7330646973747269627574696f6e144572726f7204045400013c3043414e6f7442656e65666974000004d441206361706974616c20646973747269627574696f6e20776173206d61646520666f722061206e6f6e2d62656e656669742043412e34416c7265616479457869737473000104a84120646973747269627574696f6e20616c72656164792065786973747320666f7220746869732043412e4c4578706972794265666f72655061796d656e7400020829014120646973747269627574696f6e732070726f766964656420657870697279206461746520776173207374726963746c79206265666f726520697473207061796d656e7420646174652e2101496e206f7468657220776f7264732c2065766572797468696e6720746f206469737472696275746520776f756c6420696d6d6564696174656c7920626520666f726665697465642e44486f6c646572416c726561647950616964000304d454686520746f6b656e20686f6c6465722068617320616c7265616479206265656e20706169642074686569722062656e656669742e484e6f53756368446973747269627574696f6e000404c441206361706974616c20646973747269627574696f6e20646f65736e277420657869737420666f7220746869732043412e5843616e6e6f74436c61696d4265666f726553746172740005046101446973747269627574696f6e20616c6c6f746d656e742063616e6e6f7420626520636c61696d6564206173207468652063757272656e742074696d65206973206265666f72652073746172742d6f662d7061796d656e742e5843616e6e6f74436c61696d41667465724578706972790006046901446973747269627574696f6e27732065787069727920686173207061737365642e204449442063616e6e6f7420636c61696d20616e796d6f726520616e642068617320666f72666569746564207468652062656e65666974732e8042616c616e6365506572536861726550726f647563744f766572666c6f77656400070429014d756c7469706c69636174696f6e206f66207468652062616c616e636520776974682074686520706572207368617265207061796f757420616d6f756e74206f766572666c6f7765642e584e6f74446973747269627574696f6e43726561746f72000804c0444944206973206e6f7420746865206f6e652077686f20637265617465642074686520646973747269627574696f6e2e40416c72656164795265636c61696d6564000904d44449442077686f20637265617465642074686520646973747269627574696f6e20616c726561647920646964207265636c61696d2e284e6f7445787069726564000a04f0446973747269627574696f6e20686164206e6f742065787069726564207965742c206f722074686572652773206e6f2065787069727920646174652e4c446973747269627574696f6e53746172746564000b0401014120646973747269627574696f6e20686173206265656e206163746976617465642c20617320607061796d656e745f6174203c3d206e6f776020686f6c64732e6c496e73756666696369656e7452656d61696e696e67416d6f756e74000c042d014120646973747269627574696f6e2068617320696e73756666696369656e742072656d61696e696e6720616d6f756e74206f662063757272656e637920746f20646973747269627574652e60446973747269627574696f6e416d6f756e7449735a65726f000d0494446973747269627574696f6e2060616d6f756e74602063616e6e6f74206265207a65726f2e68446973747269627574696f6e506572536861726549735a65726f000e04a0446973747269627574696f6e20607065725f7368617265602063616e6e6f74206265207a65726f2e00150a00000408a8ad0200190a00000408150a80001d0a000002ad0200210a1064706f6c796d6573685f636f6d6d6f6e5f7574696c69746965731874726169747328636865636b706f696e743c4e657874436865636b706f696e747300000c011c6e6578745f61742801184d6f6d656e74000134746f74616c5f70656e64696e6728010c7536340001247363686564756c6573250a017042547265654d61703c5363686564756c6549642c204d6f6d656e743e0000250a042042547265654d617008044b01b10204560128000400290a000000290a0000022d0a002d0a00000408b1022800310a00000408a8b10200350a0c3070616c6c65745f617373657428636865636b706f696e741c56657273696f6e0000040008010875380000390a0c3070616c6c65745f617373657428636865636b706f696e74144572726f72040454000118384e6f537563685363686564756c65000004cc4120636865636b706f696e74207363686564756c6520646f6573206e6f7420657869737420666f72207468652061737365742e505363686564756c654e6f7452656d6f7661626c650001041d014120636865636b706f696e74207363686564756c65206973206e6f742072656d6f7661626c6520617320607265665f636f756e74287363686564756c655f696429203e2030602e685363686564756c65734f7665724d6178436f6d706c65786974790002042501546865206e6577207363686564756c6520776f756c642070757420746865206173736574206f76657220746865206d6178696d756d20636f6d706c657869747920616c6c6f7765642e3c5363686564756c654973456d7074790003047c43616e27742063726561746520616e20656d707479207363686564756c652e405363686564756c6546696e697368656400040494546865207363686564756c6520686173206e6f206d6f726520636865636b706f696e74732e745363686564756c6548617345787069726564436865636b706f696e747300050494546865207363686564756c6520686173206578706972656420636865636b706f696e74732e003d0a0c4c706f6c796d6573685f7072696d69746976657348636f6d706c69616e63655f6d616e616765723c4173736574436f6d706c69616e6365000008011870617573656439010110626f6f6c000130726571756972656d656e7473f10201685665633c436f6d706c69616e6365526571756972656d656e743e0000410a086470616c6c65745f636f6d706c69616e63655f6d616e616765721c56657273696f6e0000040008010875380000450a086470616c6c65745f636f6d706c69616e63655f6d616e61676572144572726f7204045400011c30556e617574686f72697a65640000045c55736572206973206e6f7420617574686f72697a65642e2c4469644e6f74457869737400010438446964206e6f742065786973742e78496e76616c6964436f6d706c69616e6365526571756972656d656e744964000204a0436f6d706c69616e636520726571756972656d656e7420696420646f65736e27742065786973742e84496e636f72726563744f7065726174696f6e4f6e54727573746564497373756572000304a04973737565722065786973742062757420747279696e6720746f2061646420697420616761696e2e7c4475706c6963617465436f6d706c69616e6365526571756972656d656e7473000404b0546865726520617265206475706c696361746520636f6d706c69616e636520726571756972656d656e74732e7c436f6d706c69616e6365526571756972656d656e74546f6f436f6d706c6578000504150154686520776f7273742063617365207363656e6172696f206f662074686520636f6d706c69616e636520726571756972656d656e7420697320746f6f20636f6d706c65782e4c5765696768744c696d697445786365656465640006040501546865206d6178696d756d20776569676874206c696d697420666f7220657865637574696e67207468652066756e6374696f6e207761732065786365656465642e00490a00000408a89d02004d0a086070616c6c65745f636f72706f726174655f616374696f6e731c56657273696f6e0000040008010875380000510a086070616c6c65745f636f72706f726174655f616374696f6e73144572726f7204045400012c3844657461696c73546f6f4c6f6e67000004d8546865206064657461696c7360206f66206120434120657863656564656420746865206d617820616c6c6f776564206c656e6774682e3c4475706c69636174654469645461780001082101412077697468686f6c64696e6720746178206f7665727269646520666f72206120676976656e204449442077617320737065636966696564206d6f7265207468616e206f6e63652e050154686520636861696e207265667573656420746f206d616b6520612063686f6963652c20616e642068656e63652074686572652077617320616e206572726f722e3c546f6f4d616e794469645461786573000204c8546f6f206d616e792077697468686f6c64696e6720746178206f76657272696465732077657265207370656369666965642e40546f6f4d616e79546172676574496473000304e4546f6f206d616e79206964656e74697469657320696e20605461726765744964656e746974696573602077657265207370656369666965642e484e6f53756368436865636b706f696e74496400040405014f6e204341206372656174696f6e2c206120636865636b706f696e74204944207761732070726f766964656420776869636820646f65736e27742065786973742e204e6f537563684341000504a44120434120776974682074686520676976656e2060434149646020646964206e6f742065786973742e304e6f5265636f7264446174650006048854686520434120646964206e6f7420686176652061207265636f726420646174652e505265636f7264446174654166746572537461727400070cdc412043412773207265636f7264206461746520776173207374726963746c792061667465722074686520227374617274222074696d652c8c7768657265202273746172742220697320636f6e7465787420646570656e64656e742e8101466f72206578616d706c652c20697420636f756c6420626520746865207374617274206f6620612062616c6c6f742c206f72207468652073746172742d6f662d7061796d656e7420696e206361706974616c20646973747269627574696f6e2e5c4465636c4461746541667465725265636f726444617465000804ec412043412773206465636c61726174696f6e206461746520776173207374726963746c7920616674657220697473207265636f726420646174652e404465636c44617465496e467574757265000904b4412043412773206465636c61726174696f6e2064617465206f636375727320696e20746865206675747572652e3c4e6f74546172676574656442794341000a046c434120646f6573206e6f742074617267657420746865204449442e00550a0000025d0300590a00000218005d0a0c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f741c56657273696f6e0000040008010875380000610a0c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f74144572726f720404540001382c43414e6f744e6f74696365000004e04120636f72706f726174652062616c6c6f7420776173206d61646520666f722061206e6f6e20604973737565724e6f74696365602043412e34416c7265616479457869737473000104b84120636f72706f726174652062616c6c6f7420616c72656164792065786973747320666f7220746869732043412e304e6f5375636842616c6c6f74000204b44120636f72706f726174652062616c6c6f7420646f65736e277420657869737420666f7220746869732043412e3453746172744166746572456e6400030411014120636f72706f726174652062616c6c6f7427732073746172742074696d6520776173207374726963746c79206166746572207468652062616c6c6f74277320656e642e2c4e6f774166746572456e640004040d014120636f72706f726174652062616c6c6f74277320656e642074696d6520776173207374726963746c79206265666f7265207468652063757272656e742074696d652e5c4e756d6265724f6643686f696365734f766572666c6f770005043901496620736f6d65206d6f74696f6e20696e206120636f72706f726174652062616c6c6f7420686173206d6f72652063686f69636573207468616e20776f756c642066697420696e2060753136602e50566f74696e67416c7265616479537461727465640006040101566f74696e67207374617274656420616c72656164792e20416d656e64696e6720612062616c6c6f74206973206e6f206c6f6e67657220706f737369626c652e40566f74696e674e6f745374617274656400070468566f74696e67206861736e27742073746172746564207965742e48566f74696e67416c7265616479456e64656400080454566f74696e6720656e64656420616c72656164792e3857726f6e67566f7465436f756e74000904150150726f7669646564206c697374206f662062616c616e63657320646f6573206e6f74206d617463682074686520746f74616c206e756d626572206f662063686f696365732e44496e73756666696369656e74566f746573000a043d01566f74696e6720706f7765722075736564206279206120444944206f6e2061206d6f74696f6e2065786365656473207468617420776869636820697320617661696c61626c6520746f207468656d2e444e6f5375636852435646616c6c6261636b000b04bc546865205243562066616c6c6261636b206f6620736f6d652063686f69636520646f6573206e6f742065786973742e3052435653656c664379636c65000c04b4546865205243562066616c6c6261636b20706f696e747320746f20746865206f726967696e2063686f6963652e345243564e6f74416c6c6f776564000d048c524356206973206e6f7420616c6c6f77656420666f7220746869732062616c6c6f742e00650a084870616c6c65745f7065726d697373696f6e73144572726f7204045400010448556e617574686f72697a656443616c6c6572000004ec5468652063616c6c6572206973206e6f7420617574686f72697a656420746f2063616c6c207468652063757272656e742065787472696e7369632e00690a082c70616c6c65745f7069707330506970734d65746164617461042c426c6f636b4e756d62657201100018010869646d030114506970496400010c75726c6102012c4f7074696f6e3c55726c3e00012c6465736372697074696f6e710301584f7074696f6e3c5069704465736372697074696f6e3e000128637265617465645f617410012c426c6f636b4e756d62657200014c7472616e73616374696f6e5f76657273696f6e10010c7533320001186578706972795901015c4d61796265426c6f636b3c426c6f636b4e756d6265723e00006d0a000004086d030000710a082c70616c6c65745f706970732c4465706f736974496e666f04244163636f756e7449640100000801146f776e65720001244163636f756e744964000118616d6f756e7418011c42616c616e63650000750a082c70616c6c65745f706970730c506970082050726f706f73616c010d06244163636f756e7449640100000c010869646d030114506970496400012070726f706f73616c0d06012050726f706f73616c00012070726f706f7365726503014c50726f706f7365723c4163636f756e7449643e0000790a082c70616c6c65745f7069707330566f74696e67526573756c740000100128617965735f636f756e7410010c753332000128617965735f7374616b6518011c42616c616e63650001286e6179735f636f756e7410010c7533320001286e6179735f7374616b6518011c42616c616e636500007d0a082c70616c6c65745f7069707310566f74650000080039010110626f6f6c000018011c42616c616e63650000810a082c70616c6c65745f7069707340536e617073686f744d65746164617461082c426c6f636b4e756d6265720110244163636f756e7449640100000c0128637265617465645f617410012c426c6f636b4e756d62657200011c6d6164655f62790001244163636f756e744964000108696481030128536e617073686f7449640000850a082c70616c6c65745f706970731c56657273696f6e0000040008010875380000890a082c70616c6c65745f70697073144572726f720404540001488452657363686564756c654e6f74427952656c65617365436f6f7264696e61746f7200000431014f6e6c79207468652047432072656c6561736520636f6f7264696e61746f7220697320616c6c6f77656420746f2072657363686564756c652070726f706f73616c20657865637574696f6e2e404e6f7446726f6d436f6d6d756e697479000108ec54686520676976656e20646973706174636861626c652063616c6c206973206e6f742076616c696420666f7220746869732070726f706f73616c2ecc5468652070726f706f73616c206d7573742062652066726f6d2074686520636f6d6d756e6974792c206275742069736e27742e384e6f744279436f6d6d6974746565000208ec54686520676976656e20646973706174636861626c652063616c6c206973206e6f742076616c696420666f7220746869732070726f706f73616c2eb45468652070726f706f73616c206d75737420626520627920636f6d6d756e6974792c206275742069736e27742e44546f6f4d616e794163746976655069707300030829015468652063757272656e74206e756d626572206f6620616374697665202870656e64696e67207c207363686564756c65642920504950732065786365656420746865206d6178696d756d9c616e64207468652070726f706f73616c206973206e6f74206279206120636f6d6d69747465652e40496e636f72726563744465706f7369740004049c50726f706f7365722073706563696669657320616e20696e636f7272656374206465706f7369744c496e73756666696369656e744465706f736974000504b450726f706f7365722063616e2774206166666f726420746f206c6f636b206d696e696d756d206465706f736974384e6f5375636850726f706f73616c000604705468652070726f706f73616c20646f6573206e6f742065786973742e4c4e6f7441436f6d6d69747465654d656d626572000704844e6f742070617274206f6620676f7665726e616e636520636f6d6d69747465652e60496e76616c6964467574757265426c6f636b4e756d626572000804d85768656e206120626c6f636b206e756d626572206973206c657373207468616e2063757272656e7420626c6f636b206e756d6265722e544e756d6265724f66566f74657345786365656465640009047c5768656e206e756d626572206f6620766f746573206f766572666c6f77732e685374616b65416d6f756e744f66566f7465734578636565646564000a04985768656e207374616b6520616d6f756e74206f66206120766f7465206f766572666c6f77732e584d697373696e6743757272656e744964656e74697479000b044c4d697373696e672063757272656e742044494458496e636f727265637450726f706f73616c5374617465000c049050726f706f73616c206973206e6f7420696e2074686520636f72726563742073746174653443616e6e6f74536b6970506970000d04fc5768656e20656e616374696e6720736e617073686f7420726573756c74732c20616e20756e736b69707061626c65205049502077617320736b69707065642e58536e617073686f74526573756c74546f6f4c61726765000e041501547269656420746f20656e61637420726573756c747320666f722074686520736e617073686f74207175657565206f766572666c6f77696e6720697473206c656e6774682e48536e617073686f7449644d69736d61746368000f045d01547269656420746f20656e61637420726573756c7420666f7220504950207769746820696420646966666572656e742066726f6d20746861742061742074686520706f736974696f6e20696e207468652071756575652e705363686564756c656450726f706f73616c446f65736e744578697374001004fc457865637574696f6e206f662061207363686564756c65642070726f706f73616c206661696c65642062656361757365206974206973206d697373696e672e6c50726f706f73616c4e6f74496e5363686564756c65645374617465001104fc412070726f706f73616c2074686174206973206e6f7420696e2061207363686564756c65642073746174652063616e6e6f742062652065786563757465642e008d0a0000040880f000910a0000040880a50300950a00000408e8a800990a0000040880e8009d0a00000408e8a10a00a10a00000408a8bd0300a50a084070616c6c65745f706f7274666f6c696f1c56657273696f6e0000040008010875380000a90a084070616c6c65745f706f7274666f6c696f144572726f7204045400014854506f7274666f6c696f446f65734e6f7445786973740000047054686520706f7274666f6c696f20646f65736e27742065786973742e70496e73756666696369656e74506f7274666f6c696f42616c616e63650001049c496e73756666696369656e742062616c616e636520666f722061207472616e73616374696f6e2e6844657374696e6174696f6e497353616d65506f7274666f6c696f000204e854686520736f7572636520616e642064657374696e6174696f6e20706f7274666f6c696f732073686f756c6420626520646966666572656e742e64506f7274666f6c696f4e616d65416c7265616479496e557365000304310154686520706f7274666f6c696f20636f756c646e27742062652072656e616d65642062656361757365207468652063686f73656e206e616d6520697320616c726561647920696e207573652e945365636f6e646172794b65794e6f74417574686f72697a6564466f72506f7274666f6c696f000404fc546865207365636f6e64617279206b6579206973206e6f7420617574686f72697a656420746f206163636573732074686520706f7274666f6c696f2873292e54556e617574686f72697a6564437573746f6469616e000504f454686520706f72666f6c696f277320637573746f6479206973207769746820736f6d656f6e65206f74686572207468616e207468652063616c6c65722e60496e73756666696369656e74546f6b656e734c6f636b6564000604bc43616e206e6f7420756e6c6f636b206d6f726520746f6b656e73207468616e207768617420617265206c6f636b656444506f7274666f6c696f4e6f74456d707479000704bc54686520706f7274666f6c696f207374696c6c2068617320736f6d652061737365742062616c616e6365206c6566746c446966666572656e744964656e74697479506f7274666f6c696f73000804b454686520706f7274666f6c696f732062656c6f6e6720746f20646966666572656e74206964656e746974696573604e6f4475706c6963617465417373657473416c6c6f776564000904804475706c696361746520617373657420616d6f6e6720746865206974656d732e584e46544e6f74466f756e64496e506f7274666f6c696f000a04a0546865204e465420646f6573206e6f7420657869737420696e2074686520706f7274666f6c696f2e404e4654416c72656164794c6f636b6564000b0468546865204e465420697320616c7265616479206c6f636b65642e304e46544e6f744c6f636b6564000c0478546865204e465420686173206e65766572206265656e206c6f636b65642e68496e76616c69645472616e736665724e46544e6f744f776e6564000d04c04f6e6c79206f776e6564204e4654732063616e206265206d6f766564206265747765656e20706f7274666f6c696f732e68496e76616c69645472616e736665724e465449734c6f636b6564000e04c04c6f636b6564204e4654732063616e206e6f74206265206d6f766564206265747765656e20706f7274666f6c696f732e34456d7074795472616e73666572000f04a0547279696e6720746f206d6f766520616e20616d6f756e74206f66207a65726f206173736574732e5c4d697373696e674f776e6572735065726d697373696f6e00100439015468652063616c6c657220646f65736e27742068617665207065726d697373696f6e20746f2063726561746520706f7274666f6c696f73206f6e20746865206f776e6572277320626568616c662ea0496e76616c69645472616e7366657253656e64657249644d61746368657352656365697665724964001104fc5468652073656e646572206964656e746974792063616e2774206265207468652073616d6520617320746865207265636569766572206964656e746974792e00ad0a084c70616c6c65745f70726f746f636f6c5f666565144572726f7204045400010c68496e73756666696369656e744163636f756e7442616c616e6365000004b0496e73756666696369656e74206163636f756e742062616c616e636520746f2070617920746865206665652e4c556e48616e646c6564496d62616c616e636573000104884e6f742061626c6520746f2068616e646c65642074686520696d62616c616e63657368496e73756666696369656e745375627369647942616c616e6365000204b0496e73756666696369656e7420737562736964792062616c616e636520746f2070617920746865206665652e00b10a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b50a045300000400c50a01185665633c543e0000b50a04184f7074696f6e04045401b90a0108104e6f6e6500000010536f6d650400b90a0000010000b90a084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01bd0a2c426c6f636b4e756d62657201103450616c6c6574734f726967696e017907244163636f756e7449640100001401206d617962655f6964d10301304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cbd0a011043616c6c0001386d617962655f706572696f646963110701944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e7907013450616c6c6574734f726967696e0000bd0a10346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564040454010d06010c184c6567616379040110686173682c01104861736800000018496e6c696e650400c10a0134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173682c01104861736800010c6c656e10010c75333200020000c10a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000c50a000002b50a00c90a0c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909cd0a0c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e741456656e7565000008011c63726561746f728001284964656e74697479496400012876656e75655f74797065e103012456656e7565547970650000d10a00000408d903890200d50a00000408d9030000d90a0000040880d90300dd0a0c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e742c496e737472756374696f6e08184d6f6d656e7401282c426c6f636b4e756d626572011000180138696e737472756374696f6e5f696489020134496e737472756374696f6e496400012076656e75655f6964f503013c4f7074696f6e3c56656e756549643e00013c736574746c656d656e745f74797065f903016c536574746c656d656e74547970653c426c6f636b4e756d6265723e000128637265617465645f6174050101384f7074696f6e3c4d6f6d656e743e00012874726164655f64617465050101384f7074696f6e3c4d6f6d656e743e00012876616c75655f64617465050101384f7074696f6e3c4d6f6d656e743e0000e10a000004088902e50300e50a0c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e74244c656753746174757304244163636f756e7449640100010c4050656e64696e67546f6b656e4c6f636b00000040457865637574696f6e50656e64696e6700010050457865637574696f6e546f4265536b697070656408000001244163636f756e744964000028010c75363400020000e90a000004088902e800ed0a0c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e744441666669726d6174696f6e53746174757300010c1c556e6b6e6f776e0000001c50656e64696e670001002041666669726d656400020000f10a00000408e8890200f50a00000408a8d90300f90a0c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e7444496e737472756374696f6e537461747573042c426c6f636b4e756d626572011001141c556e6b6e6f776e0000001c50656e64696e67000100184661696c65640002001c53756363657373040010012c426c6f636b4e756d6265720003002052656a6563746564040010012c426c6f636b4e756d62657200040000fd0a0000040889028000010b0c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e74644d65646961746f7241666669726d6174696f6e5374617475730404540128010c1c556e6b6e6f776e0000001c50656e64696e670001002041666669726d6564040118657870697279050101244f7074696f6e3c543e00020000050b084470616c6c65745f736574746c656d656e741c56657273696f6e0000040008010875380000090b084470616c6c65745f736574746c656d656e74144572726f720404540001ac30496e76616c696456656e75650000045456656e756520646f6573206e6f742065786973742e30556e617574686f72697a6564000104a853656e64657220646f6573206e6f742068617665207265717569726564207065726d697373696f6e732e58496e737472756374696f6e4e6f7441666669726d656400020488496e737472756374696f6e20686173206e6f74206265656e2061666669726d65642e48556e617574686f72697a65645369676e6572000304985369676e6572206973206e6f7420617574686f72697a6564206279207468652076656e75652e5452656365697074416c7265616479436c61696d6564000404545265636569707420616c726561647920757365642e44556e617574686f72697a656456656e7565000504a456656e756520646f6573206e6f742068617665207265717569726564207065726d697373696f6e732e5c496e737472756374696f6e4461746573496e76616c696400060474496e737472756374696f6e2068617320696e76616c696420646174657370496e737472756374696f6e536574746c65426c6f636b506173736564000704a8496e737472756374696f6e27732074617267657420736574746c6520626c6f636b20726561636865642e40496e76616c69645369676e6174757265000804784f6666636861696e207369676e617475726520697320696e76616c69642e4853616d6553656e64657252656365697665720009048453656e64657220616e6420726563656976657220617265207468652073616d652e44536574746c654f6e50617374426c6f636b000a0461015468652070726f766964656420736574746c656d656e7420626c6f636b206e756d62657220697320696e20746865207061737420616e642063616e6e6f74206265207573656420627920746865207363686564756c65722e6c556e657870656374656441666669726d6174696f6e537461747573000b0445015468652063757272656e7420696e737472756374696f6e2061666669726d6174696f6e2073746174757320646f6573206e6f7420737570706f7274207468652072657175657374656420616374696f6e2e404661696c6564546f5363686564756c65000c048c5363686564756c696e67206f6620616e20696e737472756374696f6e206661696c732e48556e6b6e6f776e496e737472756374696f6e000d0474496e737472756374696f6e2073746174757320697320756e6b6e6f776e4c5369676e6572416c7265616479457869737473000e04845369676e657220697320616c726561647920616464656420746f2076656e75652e485369676e6572446f65734e6f744578697374000f04745369676e6572206973206e6f7420616464656420746f2076656e75652e285a65726f416d6f756e7400100494496e737472756374696f6e206c656720616d6f756e742063616e2774206265207a65726f2e80496e737472756374696f6e536574746c65426c6f636b4e6f7452656163686564001104d8496e737472756374696f6e20736574746c656d656e7420626c6f636b20686173206e6f7420796574206265656e20726561636865642e4443616c6c657249734e6f74415061727479001204b85468652063616c6c6572206973206e6f742061207061727479206f66207468697320696e737472756374696f6e2e5c4d61784e756d6265724f664e46547345786365656465640013041501546865206e756d626572206f66206e667473206265696e67207472616e7366657272656420696e2074686520696e737472756374696f6e207761732065786365656465642e944e756d6265724f665472616e736665727265644e465473556e646572657374696d61746564001404f854686520676976656e206e756d626572206f66206e667473206265696e67207472616e736665727265642077617320756e646572657374696d617465642e6052656365697074466f72496e76616c69644c656754797065001504ec4f66662d636861696e2072656365697074732063616e206f6e6c79206265207573656420666f72206f66662d636861696e206c656720747970652e4c5765696768744c696d697445786365656465640016040501546865206d6178696d756d20776569676874206c696d697420666f7220657865637574696e67207468652066756e6374696f6e207761732065786365656465642e844d61784e756d6265724f6646756e6769626c654173736574734578636565646564001704cc546865206d6178696d756d206e756d626572206f662066756e6769626c6520617373657473207761732065786365656465642e844d61784e756d6265724f664f6666436861696e4173736574734578636565646564001804d0546865206d6178696d756d206e756d626572206f66206f66662d636861696e20617373657473207761732065786365656465642e9c4e756d6265724f6646756e6769626c655472616e7366657273556e646572657374696d61746564001904e854686520676976656e206e756d626572206f662066756e6769626c65207472616e73666572732077617320756e646572657374696d617465642e5c556e65787065637465644f4646436861696e4173736574001a04904173736574494420636f756c64206e6f7420626520666f756e64206f6e20636861696e2e644f6666436861696e417373657443616e7442654c6f636b6564001b04884f66662d436861696e206173736574732063616e6e6f74206265206c6f636b65642e9c4e756d6265724f664f6666436861696e5472616e7366657273556e646572657374696d61746564001c04ec54686520676976656e206e756d626572206f66206f66662d636861696e207472616e73666572732077617320756e646572657374696d617465642e2c4c65674e6f74466f756e64001d04884e6f206c656720776974682074686520676976656e2069642077617320666f756e6470496e70757457656967687449734c6573735468616e4d696e696d756d001e04cc54686520696e70757420776569676874206973206c657373207468616e20746865206d696e696d756d2072657175697265642e6c4d61784e756d6265724f6652656365697074734578636565646564001f04b0546865206d6178696d756d206e756d626572206f66207265636569707473207761732065786365656465642e884e6f74416c6c41666669726d6174696f6e73486176654265656e5265636569766564002004e054686572652061726520706172746965732077686f2068617665206e6f742061666669726d65642074686520696e737472756374696f6e2e90496e76616c6964496e737472756374696f6e537461747573466f72457865637574696f6e00210489014f6e6c79205b60496e737472756374696f6e5374617475733a3a50656e64696e67605d206f72205b60496e737472756374696f6e5374617475733a3a4661696c6564605d20696e737472756374696f6e732063616e2062652065786563757465642e8c4661696c6564546f52656c656173654c6f636b4f725472616e73666572417373657473002204150154686520696e737472756374696f6e206661696c656420746f2072656c65617365206173736574206c6f636b73206f72207472616e7366657220746865206173736574732e4c4475706c696361746552656365697074556964002304d04e6f206475706c6963617465207569642061726520616c6c6f77656420666f7220646966666572656e742072656365697074732e7452656365697074496e737472756374696f6e49644d6973736d61746368002404190154686520696e737472756374696f6e20696420696e20616c6c207265636569707473206d757374206d61746368207468652065787472696e73696320706172616d657465722e644d756c7469706c655265636569707473466f724f6e654c6567002504cc4d756c7469706c6520726563656970747320666f72207468652073616d65206c656720617265206e6f7420616c6c6f7765642e4c556e65787065637465644c656753746174757300260470416e20696e76616c696420686173206265656e20726561636865642e704e756d6265724f6656656e75655369676e6572734578636565646564002704c4546865206d6178696d756d206e756d626572206f662076656e7565207369676e657273207761732065786365656465642e5043616c6c657249734e6f74414d65646961746f72002804c05468652063616c6c6572206973206e6f742061206d65646961746f7220696e2074686520696e737472756374696f6e2e44496e76616c696445787069727944617465002904c4546865206d65646961746f722773206578706972792064617465206d75737420626520696e20746865206675747572652e684d65646961746f7241666669726d6174696f6e45787069726564002a04e854686520657870697279206461746520666f7220746865206d65646961746f7227732061666669726d6174696f6e20686173207061737365642e04844572726f727320666f722074686520536574746c656d656e74206d6f64756c652e0d0b0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454010d040453000004004507012c42547265655365743c543e0000110b00000408150b250400150b0c4c706f6c796d6573685f7072696d697469766573287374617469737469637328537461743173744b6579000008012061737365745f6964a8011c41737365744944000124737461745f747970650d04012053746174547970650000190b0c4c706f6c796d6573685f7072696d6974697665734c7472616e736665725f636f6d706c69616e63655c41737365745472616e73666572436f6d706c69616e6365040453000008011870617573656439010110626f6f6c000130726571756972656d656e74731d0b0194426f756e64656442547265655365743c5472616e73666572436f6e646974696f6e2c20533e00001d0b0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540139040453000004004d07012c42547265655365743c543e0000210b000004083d048000250b084470616c6c65745f737461746973746963731c56657273696f6e0000040008010875380000290b084470616c6c65745f73746174697374696373144572726f7204045400011c3c496e76616c69645472616e73666572000004545472616e73666572206e6f7420616c6c6f7765642e3c53746174547970654d697373696e67000104605374617454797065206973206e6f7420656e61626c65642e8453746174547970654e656564656442795472616e73666572436f6e646974696f6e000204a05374617454797065206973206e6565646564206279205472616e73666572436f6e646974696f6e2e6443616e6e6f7452656d6f76655374617454797065496e557365000304a84120537461747479706520697320696e2075736520616e642063616e27742062652072656d6f7665642e5053746174547970654c696d697452656163686564000404f4546865206c696d6974206f662053746174547970657320616c6c6f77656420666f7220616e20617373657420686173206265656e20726561636865642e745472616e73666572436f6e646974696f6e4c696d6974526561636865640005041901546865206c696d6974206f66205472616e73666572436f6e646974696f6e7320616c6c6f77656420666f7220616e20617373657420686173206265656e20726561636865642e4c5765696768744c696d697445786365656465640006040501546865206d6178696d756d20776569676874206c696d697420666f7220657865637574696e67207468652066756e6374696f6e207761732065786365656465642e046453746174697374696373206d6f64756c65206572726f72732e2d0b00000408a8490400310b082870616c6c65745f73746f1c56657273696f6e0000040008010875380000350b082870616c6c65745f73746f144572726f7204045400013030556e617574686f72697a6564000004a853656e64657220646f6573206e6f742068617665207265717569726564207065726d697373696f6e732e204f766572666c6f770001048c416e2061726974686d65746963206f7065726174696f6e206f766572666c6f7765642e6c496e73756666696369656e74546f6b656e7352656d61696e696e67000204804e6f7420656e6f75676820746f6b656e73206c65667420666f722073616c652e4846756e647261697365724e6f74466f756e640003045446756e64726169736572206e6f7420666f756e642e4446756e647261697365724e6f744c6976650004049c46756e64726169736572206973206569746865722066726f7a656e206f722073746f707065642e4046756e64726169736572436c6f736564000504ac46756e6472616973657220686173206265656e20636c6f7365642f73746f7070656420616c72656164792e4446756e6472616973657245787069726564000604d0496e746572616374696e67207769746820612066756e6472616973657220706173742074686520656e6420604d6f6d656e74602e30496e76616c696456656e756500070468416e20696e76616c69642076656e75652070726f76696465642e44496e76616c6964507269636554696572730008042501416e20696e646976696475616c20707269636520746965722077617320696e76616c6964206f72206120736574206f662070726963652074696572732077617320696e76616c69642e54496e76616c69644f66666572696e6757696e646f770009045d0157696e646f77202873746172742074696d652c20656e642074696d65292068617320696e76616c696420706172616d65746572732c20652e672073746172742074696d6520697320616674657220656e642074696d652e404d617850726963654578636565646564000a04bc5072696365206f662074686520696e766573746d656e7420657863656564656420746865206d61782070726963652e58496e766573746d656e74416d6f756e74546f6f4c6f77000b04e8496e766573746d656e7420616d6f756e74206973206c6f776572207468616e206d696e696d756d20696e766573746d656e7420616d6f756e742e04844572726f727320666f722074686520536574746c656d656e74206d6f64756c652e390b083c70616c6c65745f7472656173757279144572726f720404540001084c496e73756666696369656e7442616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e3c496e76616c69644964656e7469747900010488496e76616c6964206964656e7469747920666f722064697362757273656d656e742e04784572726f7220666f7220746865207472656173757279206d6f64756c652e3d0b0c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400011430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e40496e76616c69645369676e6174757265000108744f6666636861696e207369676e617475726520697320696e76616c696438504f4c594d455348206572726f72405461726765744364644d697373696e670002088054617267657420646f6573206e6f74206861766520612076616c69642043444438504f4c594d455348206572726f7230496e76616c69644e6f6e63650003106850726f7669646564206e6f6e63652077617320696e76616c696411014966207468652070726f7669646564206e6f6e6365203c2063757272656e74206e6f6e63652c207468652063616c6c2077617320616c72656164792065786563757465645d014966207468652070726f7669646564206e6f6e6365203e2063757272656e74206e6f6e63652c207468652063616c6c287329206265666f7265207468652063757272656e74206661696c656420746f206578656375746538504f4c594d455348206572726f725c556e61626c65546f4465726976654163636f756e744964000404984465636f64696e672064657269766174697665206163636f756e74204964206661696c65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909410b082c70616c6c65745f62617365144572726f720404540001081c546f6f4c6f6e6700000880457863656564656420612067656e65726963206c656e677468206c696d69742e1d01546865206c696d697420636f756c6420626520666f7220616e7920736f7274206f66206c69737473206f66207468696e67732c20696e636c7564696e67206120737472696e672e3c436f756e7465724f766572666c6f77000118b85468652073657175656e636520636f756e74657220666f7220736f6d657468696e67206f766572666c6f7765642e001d015768656e20746869732068617070656e7320646570656e6473206f6e20652e672e2c20746865206361706163697479206f6620746865206964656e74696669657220747970652e3901466f72206578616d706c652c207765206d69676874206861766520607075622073747275637420506970496428753332293b602c207769746820607533323a3a4d4158602063617061636974792e5901496e2070726163746963652c207468657365206572726f72732077696c6c206e657665722068617070656e20627574206e6f20636f646520706174682073686f756c6420726573756c7420696e20612070616e69632cfc736f20746865736520636f726e6572206361736573206e65656420746f20626520636f7665726564207769746820616e206572726f722076617269616e742e00450b00000408a8350100490b085870616c6c65745f65787465726e616c5f6167656e74731c56657273696f6e00000400080108753800004d0b085870616c6c65745f65787465726e616c5f6167656e7473144572726f72040454000118204e6f537563684147000004f0416e20414720776974682074686520676976656e2060414749646020646964206e6f7420657869737420666f7220746865206041737365744944602e44556e617574686f72697a65644167656e74000104e8546865206167656e74206973206e6f7420617574686f72697a656420746f2063616c6c207468652063757272656e742065787472696e7369632e38416c7265616479416e4167656e74000204ec5468652070726f766964656420606167656e746020697320616c726561647920616e206167656e7420666f7220746865206041737365744944602e284e6f74416e4167656e74000304dc5468652070726f766964656420606167656e7460206973206e6f7420616e206167656e7420666f7220746865206041737365744944602e5452656d6f76696e674c61737446756c6c4167656e74000408e054686973206167656e7420697320746865206c6173742066756c6c206f6e652c20616e642069742773206265696e672072656d6f7665642c686d616b696e6720746865206173736574206f727068616e65642e845365636f6e646172794b65794e6f74417574686f72697a6564466f7241737365740005041d015468652063616c6c65722773207365636f6e64617279206b657920646f6573206e6f74206861766520746865207265717569726564206173736574207065726d697373696f6e2e00510b083870616c6c65745f72656c617965721c53756273696479040c416363010000080128706179696e675f6b657900010c41636300012472656d61696e696e6718011c42616c616e63650000550b083870616c6c65745f72656c61796572144572726f7204045400011c44557365724b65794364644d697373696e67000004cc5468652060757365725f6b657960206973206e6f7420617474616368656420746f2061204344442764206964656e746974792e4c506179696e674b65794364644d697373696e67000104cc5468652060757365725f6b657960206973206e6f7420617474616368656420746f2061204344442764206964656e746974792e2c4e6f506179696e674b6579000204ac5468652060757365725f6b65796020646f65736e2774206861766520612060706179696e675f6b6579602e304e6f74506179696e674b6579000304b05468652060757365725f6b65796020686173206120646966666572656e742060706179696e675f6b6579602e644e6f74417574686f72697a6564466f72506179696e674b6579000404b8546865207369676e6572206973206e6f7420617574686f72697a656420666f722060706179696e675f6b6579602e5c4e6f74417574686f72697a6564466f72557365724b6579000504b0546865207369676e6572206973206e6f7420617574686f72697a656420666f722060757365725f6b6579602e204f766572666c6f77000604b85468652072656d61696e696e6720504f4c595820666f722060757365725f6b657960206f766572666c6f7765642e00590b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00005d0b0c4070616c6c65745f636f6e747261637473107761736d405072656661625761736d4d6f64756c65040454000014016c696e737472756374696f6e5f776569676874735f76657273696f6ecd04010c75333200011c696e697469616ccd04010c75333200011c6d6178696d756dcd04010c753332000110636f6465610b014452656c61786564436f64655665633c543e00012c64657465726d696e69736dad07012c44657465726d696e69736d0000610b0c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e0000650b0c4070616c6c65745f636f6e747261637473107761736d244f776e6572496e666f04045400000c01146f776e65720001384163636f756e7449644f663c543e00011c6465706f736974d901013042616c616e63654f663c543e000120726566636f756e7424010c7536340000690b0c4070616c6c65745f636f6e7472616374731c73746f7261676530436f6e7472616374496e666f040454000020011c747269655f6964c10a011854726965496400013c6465706f7369745f6163636f756e746d0b01444465706f7369744163636f756e743c543e000124636f64655f686173682c012c436f6465486173683c543e00013473746f726167655f627974657310010c75333200013473746f726167655f6974656d7310010c75333200015073746f726167655f627974655f6465706f73697418013042616c616e63654f663c543e00015073746f726167655f6974656d5f6465706f73697418013042616c616e63654f663c543e00015073746f726167655f626173655f6465706f73697418013042616c616e63654f663c543e00006d0b0c4070616c6c65745f636f6e7472616374731c73746f72616765384465706f7369744163636f756e74040454000004000001384163636f756e7449644f663c543e0000710b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401750b045300000400790b01185665633c543e0000750b0c4070616c6c65745f636f6e7472616374731c73746f726167653c44656c65746564436f6e7472616374000004011c747269655f6964c10a01185472696549640000790b000002750b007d0b0c4070616c6c65745f636f6e747261637473207363686564756c65205363686564756c6504045400000c01186c696d697473810b01184c696d69747300014c696e737472756374696f6e5f77656967687473850b0154496e737472756374696f6e576569676874733c543e00013c686f73745f666e5f77656967687473890b0140486f7374466e576569676874733c543e0000810b0c4070616c6c65745f636f6e747261637473207363686564756c65184c696d69747300002401306576656e745f746f7069637310010c75333200011c676c6f62616c7310010c7533320001186c6f63616c7310010c753332000128706172616d657465727310010c7533320001306d656d6f72795f706167657310010c7533320001287461626c655f73697a6510010c75333200013462725f7461626c655f73697a6510010c75333200012c7375626a6563745f6c656e10010c75333200012c7061796c6f61645f6c656e10010c7533320000850b0c4070616c6c65745f636f6e747261637473207363686564756c6548496e737472756374696f6e576569676874730404540000d8011c76657273696f6e10010c75333200012066616c6c6261636b10010c753332000120693634636f6e737410010c75333200011c6936346c6f616410010c75333200012069363473746f726510010c75333200011873656c65637410010c7533320001107223696610010c753332000108627210010c75333200011462725f696610010c75333200012062725f7461626c6510010c75333200014862725f7461626c655f7065725f656e74727910010c75333200011063616c6c10010c75333200013463616c6c5f696e64697265637410010c75333200015c63616c6c5f696e6469726563745f7065725f706172616d10010c75333200013863616c6c5f7065725f6c6f63616c10010c7533320001246c6f63616c5f67657410010c7533320001246c6f63616c5f73657410010c7533320001246c6f63616c5f74656510010c753332000128676c6f62616c5f67657410010c753332000128676c6f62616c5f73657410010c7533320001386d656d6f72795f63757272656e7410010c75333200012c6d656d6f72795f67726f7710010c753332000118693634636c7a10010c75333200011869363463747a10010c753332000124693634706f70636e7410010c75333200011869363465717a10010c753332000134693634657874656e647369333210010c753332000134693634657874656e647569333210010c7533320001286933327772617069363410010c753332000114693634657110010c7533320001146936346e6510010c7533320001186936346c747310010c7533320001186936346c747510010c75333200011869363467747310010c75333200011869363467747510010c7533320001186936346c657310010c7533320001186936346c657510010c75333200011869363467657310010c75333200011869363467657510010c75333200011869363461646410010c75333200011869363473756210010c7533320001186936346d756c10010c75333200011c6936346469767310010c75333200011c6936346469767510010c75333200011c69363472656d7310010c75333200011c69363472656d7510010c753332000118693634616e6410010c7533320001146936346f7210010c753332000118693634786f7210010c75333200011869363473686c10010c75333200011c6936347368727310010c75333200011c6936347368727510010c75333200011c693634726f746c10010c75333200011c693634726f747210010c7533320000890b0c4070616c6c65745f636f6e747261637473207363686564756c6534486f7374466e576569676874730404540000ec011863616c6c657220011857656967687400012c69735f636f6e7472616374200118576569676874000124636f64655f686173682001185765696768740001346f776e5f636f64655f6861736820011857656967687400014063616c6c65725f69735f6f726967696e20011857656967687400011c616464726573732001185765696768740001206761735f6c65667420011857656967687400011c62616c616e636520011857656967687400014476616c75655f7472616e7366657272656420011857656967687400013c6d696e696d756d5f62616c616e6365200118576569676874000130626c6f636b5f6e756d62657220011857656967687400010c6e6f772001185765696768740001347765696768745f746f5f66656520011857656967687400010c676173200118576569676874000114696e707574200118576569676874000138696e7075745f7065725f62797465200118576569676874000120722372657475726e20011857656967687400013c72657475726e5f7065725f627974652001185765696768740001247465726d696e61746520011857656967687400011872616e646f6d2001185765696768740001346465706f7369745f6576656e7420011857656967687400015c6465706f7369745f6576656e745f7065725f746f7069632001185765696768740001586465706f7369745f6576656e745f7065725f6279746520011857656967687400013464656275675f6d65737361676520011857656967687400015864656275675f6d6573736167655f7065725f6279746520011857656967687400012c7365745f73746f726167652001185765696768740001607365745f73746f726167655f7065725f6e65775f627974652001185765696768740001607365745f73746f726167655f7065725f6f6c645f627974652001185765696768740001347365745f636f64655f68617368200118576569676874000134636c6561725f73746f72616765200118576569676874000158636c6561725f73746f726167655f7065725f62797465200118576569676874000140636f6e7461696e735f73746f72616765200118576569676874000164636f6e7461696e735f73746f726167655f7065725f6279746520011857656967687400012c6765745f73746f726167652001185765696768740001506765745f73746f726167655f7065725f6279746520011857656967687400013074616b655f73746f7261676520011857656967687400015474616b655f73746f726167655f7065725f627974652001185765696768740001207472616e7366657220011857656967687400011063616c6c20011857656967687400013464656c65676174655f63616c6c20011857656967687400015c63616c6c5f7472616e736665725f73757263686172676520011857656967687400015063616c6c5f7065725f636c6f6e65645f6279746520011857656967687400012c696e7374616e7469617465200118576569676874000178696e7374616e74696174655f7472616e736665725f737572636861726765200118576569676874000168696e7374616e74696174655f7065725f696e7075745f62797465200118576569676874000164696e7374616e74696174655f7065725f73616c745f62797465200118576569676874000134686173685f736861325f323536200118576569676874000158686173685f736861325f3235365f7065725f6279746520011857656967687400013c686173685f6b656363616b5f323536200118576569676874000160686173685f6b656363616b5f3235365f7065725f6279746520011857656967687400013c686173685f626c616b65325f323536200118576569676874000160686173685f626c616b65325f3235365f7065725f6279746520011857656967687400013c686173685f626c616b65325f313238200118576569676874000160686173685f626c616b65325f3132385f7065725f6279746520011857656967687400013465636473615f7265636f76657220011857656967687400015065636473615f746f5f6574685f616464726573732001185765696768740001407265656e7472616e63655f636f756e742001185765696768740001606163636f756e745f7265656e7472616e63655f636f756e7420011857656967687400014c696e7374616e74696174696f6e5f6e6f6e636520011857656967687400008d0b0c4070616c6c65745f636f6e7472616374731870616c6c6574144572726f7204045400017058496e76616c69645363686564756c6556657273696f6e000004010141206e6577207363686564756c65206d7573742068617665206120677265617465722076657273696f6e207468616e207468652063757272656e74206f6e652e40496e76616c696443616c6c466c6167730001043501496e76616c696420636f6d62696e6174696f6e206f6620666c61677320737570706c69656420746f20607365616c5f63616c6c60206f7220607365616c5f64656c65676174655f63616c6c602e204f75744f66476173000204b854686520657865637574656420636f6e7472616374206578686175737465642069747320676173206c696d69742e504f7574707574427566666572546f6f536d616c6c0003040101546865206f75747075742062756666657220737570706c69656420746f206120636f6e7472616374204150492063616c6c2077617320746f6f20736d616c6c2e385472616e736665724661696c65640004083501506572666f726d696e672074686520726571756573746564207472616e73666572206661696c65642e2050726f6261626c7920626563617573652074686572652069736e277420656e6f75676894667265652062616c616e636520696e207468652073656e6465722773206163636f756e742e4c4d617843616c6c4465707468526561636865640005082101506572666f726d696e6720612063616c6c207761732064656e6965642062656361757365207468652063616c6c696e67206465707468207265616368656420746865206c696d6974946f6620776861742069732073706563696669656420696e20746865207363686564756c652e40436f6e74726163744e6f74466f756e64000604bc4e6f20636f6e74726163742077617320666f756e64206174207468652073706563696669656420616464726573732e30436f6465546f6f4c617267650007083d0154686520636f646520737570706c69656420746f2060696e7374616e74696174655f776974685f636f646560206578636565647320746865206c696d69742073706563696669656420696e207468654463757272656e74207363686564756c652e30436f64654e6f74466f756e64000804c44e6f20636f646520636f756c6420626520666f756e642061742074686520737570706c69656420636f646520686173682e2c4f75744f66426f756e647300090425014120627566666572206f757473696465206f662073616e64626f78206d656d6f7279207761732070617373656420746f206120636f6e7472616374204150492066756e6374696f6e2e384465636f64696e674661696c6564000a042901496e7075742070617373656420746f206120636f6e7472616374204150492066756e6374696f6e206661696c656420746f206465636f646520617320657870656374656420747970652e3c436f6e747261637454726170706564000b0488436f6e7472616374207472617070656420647572696e6720657865637574696f6e2e3456616c7565546f6f4c61726765000c04cc5468652073697a6520646566696e656420696e2060543a3a4d617856616c756553697a6560207761732065786365656465642e605465726d696e617465645768696c655265656e7472616e74000d0819015465726d696e6174696f6e206f66206120636f6e7472616374206973206e6f7420616c6c6f776564207768696c652074686520636f6e747261637420697320616c7265616479e06f6e207468652063616c6c20737461636b2e2043616e2062652074726967676572656420627920607365616c5f7465726d696e617465602e38496e707574466f72776172646564000e044101607365616c5f63616c6c6020666f72776172646564207468697320636f6e74726163747320696e7075742e204974207468657265666f7265206973206e6f206c6f6e67657220617661696c61626c652e5052616e646f6d5375626a656374546f6f4c6f6e67000f04d8546865207375626a6563742070617373656420746f20607365616c5f72616e646f6d60206578636565647320746865206c696d69742e34546f6f4d616e79546f706963730010041d0154686520616d6f756e74206f6620746f706963732070617373656420746f20607365616c5f6465706f7369745f6576656e747360206578636565647320746865206c696d69742e404e6f436861696e457874656e73696f6e00110c450154686520636861696e20646f6573206e6f742070726f76696465206120636861696e20657874656e73696f6e2e2043616c6c696e672074686520636861696e20657874656e73696f6e20726573756c74734d01696e2074686973206572726f722e204e6f74652074686174207468697320757375616c6c79202073686f756c646e27742068617070656e206173206465706c6f79696e67207375636820636f6e7472616374733069732072656a65637465642e4444656c6574696f6e517565756546756c6c001214010152656d6f76616c206f66206120636f6e7472616374206661696c65642062656361757365207468652064656c6574696f6e2071756575652069732066756c6c2e00b8546869732063616e2068617070656e207768656e2063616c6c696e6720607365616c5f7465726d696e617465602e4d015468652071756575652069732066696c6c65642062792064656c6574696e6720636f6e74726163747320616e6420656d7074696564206279206120666978656420616d6f756e74206561636820626c6f636b2e2101547279696e6720616761696e20647572696e6720616e6f7468657220626c6f636b20697320746865206f6e6c792077617920746f207265736f6c766520746869732069737375652e444475706c6963617465436f6e7472616374001304c84120636f6e74726163742077697468207468652073616d65204163636f756e74496420616c7265616479206578697374732e5c5465726d696e61746564496e436f6e7374727563746f7200140cb84120636f6e74726163742073656c66206465737472756374656420696e2069747320636f6e7374727563746f722e00d0546869732063616e2062652074726967676572656420627920612063616c6c20746f20607365616c5f7465726d696e617465602e405265656e7472616e636544656e6965640015040d01412063616c6c20747269656420746f20696e766f6b65206120636f6e7472616374207468617420697320666c6167676564206173206e6f6e2d7265656e7472616e742e7053746f726167654465706f7369744e6f74456e6f75676846756e647300160421014f726967696e20646f65736e2774206861766520656e6f7567682062616c616e636520746f20706179207468652072657175697265642073746f72616765206465706f736974732e7053746f726167654465706f7369744c696d69744578686175737465640017040d014d6f72652073746f72616765207761732063726561746564207468616e20616c6c6f776564206279207468652073746f72616765206465706f736974206c696d69742e24436f6465496e5573650018044901436f64652072656d6f76616c207761732064656e69656420626563617573652074686520636f6465206973207374696c6c20696e20757365206279206174206c65617374206f6e6520636f6e74726163742e40436f6e74726163745265766572746564001910250154686520636f6e74726163742072616e20746f20636f6d706c6574696f6e20627574206465636964656420746f20726576657274206974732073746f72616765206368616e6765732e4901506c65617365206e6f746520746861742074686973206572726f72206973206f6e6c792072657475726e65642066726f6d2065787472696e736963732e205768656e2063616c6c6564206469726563746c795d016f72207669612052504320616e20604f6b602077696c6c2062652072657475726e65642e20496e20746869732063617365207468652063616c6c6572206e6565647320746f20696e73706563742074686520666c616773c4746f2064657465726d696e652077686574686572206120726576657273696f6e206861732074616b656e20706c6163652e30436f646552656a6563746564001a20450154686520636f6e7472616374277320636f64652077617320666f756e6420746f20626520696e76616c696420647572696e672076616c69646174696f6e206f7220696e737472756d656e746174696f6e2e004d01546865206d6f7374206c696b656c79206361757365206f662074686973206973207468617420616e20415049207761732075736564207768696368206973206e6f7420737570706f72746564206279207468654d016e6f64652e205468697320686170656e7320696620616e206f6c646572206e6f6465206973207573656420776974682061206e65772076657273696f6e206f6620696e6b212e20547279207570646174696e67a8796f7572206e6f646520746f20746865206e657765737420617661696c61626c652076657273696f6e2e00510141206d6f72652064657461696c6564206572726f722063616e20626520666f756e64206f6e20746865206e6f646520636f6e736f6c65206966206465627567206d657373616765732061726520656e61626c6564a8627920737570706c79696e6720602d6c72756e74696d653a3a636f6e7472616374733d6465627567602e3c496e64657465726d696e6973746963001b042101416e20696e64657465726d697374696320636f646520776173207573656420696e206120636f6e746578742077686572652074686973206973206e6f74207065726d69747465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909910b0848706f6c796d6573685f636f6e7472616374731c56657273696f6e0000040008010875380000950b0848706f6c796d6573685f636f6e747261637473144572726f7204045400013034496e76616c696446756e634964000004a4496e76616c6964206066756e635f6964602070726f76696465642066726f6d20636f6e74726163742e48496e76616c696452756e74696d6543616c6c0001049c4661696c656420746f206465636f646520612076616c6964206052756e74696d6543616c6c602e445265616453746f726167654661696c6564000204fc605265616453746f7261676560206661696c656420746f2077726974652076616c756520696e746f2074686520636f6e74726163742773206275666665722e54446174614c65667441667465724465636f64696e67000304d444617461206c65667420696e20696e707574207768656e206465636f64696e6720617267756d656e7473206f6620612063616c6c2e34496e4c656e546f6f4c617267650004043901496e70757420646174612074686174206120636f6e747261637420706173736564207768656e207573696e672074686520436861696e457874656e73696f6e2077617320746f6f206c617267652e384f75744c656e546f6f4c61726765000504ec4f757470757420646174612072657475726e65642066726f6d2074686520436861696e457874656e73696f6e2077617320746f6f206c617267652e68496e7374616e746961746f72576974684e6f4964656e74697479000608b04120636f6e74726163742077617320617474656d7074656420746f20626520696e7374616e7469617465642c0d01627574206e6f206964656e746974792077617320676976656e20746f206173736f636961746520746865206e657720636f6e74726163742773206b657920776974682e4452756e74696d6543616c6c44656e696564000704cc45787472696e736963206973206e6f7420616c6c6f77656420746f2062652063616c6c656420627920636f6e7472616374732e5043616c6c65724e6f74415072696d6172794b6579000804805468652063616c6c6572206973206e6f742061207072696d617279206b65792e544d697373696e674b65795065726d697373696f6e73000904985365636f6e64617279206b6579207065726d697373696f6e7320617265206d697373696e672e4c496e76616c6964436861696e56657273696f6e000a049c4f6e6c792066757475726520636861696e2076657273696f6e732061726520616c6c6f7765642e4c4e6f5570677261646573537570706f72746564000b04d4546865726520617265206e6f2061706920757067726164657320737570706f7274656420666f722074686520636f6e74726163742e00990b083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f736974d1080150284163636f756e7449642c2042616c616e63652900010c6c656e10010c753332000000245265717565737465640c011c6465706f7369749d0b01704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7410010c75333200010c6c656e5106012c4f7074696f6e3c7533323e000100009d0b04184f7074696f6e04045401d1080108104e6f6e6500000010536f6d650400d1080000010000a10b000004082c1000a50b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000a90b0c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909ad0b0c4c706f6c796d6573685f7072696d6974697665730c6e6674344e4654436f6c6c656374696f6e00000801086964a104013c4e4654436f6c6c656374696f6e496400012061737365745f6964a8011c417373657449440000b10b04204254726565536574040454017902000400d907000000b50b00000408b90b790200b90b00000408a104bd0300bd0b082870616c6c65745f6e66741c56657273696f6e0000040008010875380000c10b082870616c6c65745f6e6674144572726f7204045400016c3c42616c616e63654f766572666c6f77000004a8416e206f766572666c6f77207768696c652063616c63756c6174696e67207468652062616c616e63652e4042616c616e6365556e646572666c6f77000104ac416e20756e646572666c6f77207768696c652063616c63756c6174696e67207468652062616c616e63652e68436f6c6c656374696f6e416c7265647952656769737465726564000204e05468652061737365745f696420697320616c7265616479206173736f63696174656420746f20616e204e465420636f6c6c656374696f6e2e48436f6c6c656374696f6e4e6f74466f756e6400030488546865204e465420636f6c6c656374696f6e20646f6573206e6f742065786973742e504475706c69636174654d657461646174614b6579000404d841206475706c6963617465206d65746164617461206b657920686173206265656e2070617373656420617320706172616d657465722e3c4475706c6963617465644e46544964000504784475706c69636174652069647320617265206e6f7420616c6c6f7765642e40496e76616c69644173736574547970650006049c546865206173736574206d757374206265206f662074797065206e6f6e2d66756e6769626c652e60496e76616c69644d657461646174614174747269627574650007048d0145697468657220746865206e756d626572206f66206b657973206f7220746865206b6579206964656e74696669657220646f6573206e6f74206d6174636820746865206b65797320646566696e656420666f722074686520636f6c6c656374696f6e2e90496e76616c69644e46545472616e73666572436f6c6c656374696f6e4e6f74466f756e64000804d44661696c656420746f207472616e7366657220616e204e4654202d204e465420636f6c6c656374696f6e206e6f7420666f756e642e7c496e76616c69644e46545472616e7366657253616d65506f7274666f6c696f00090409014661696c656420746f207472616e7366657220616e204e4654202d20617474656d707420746f206d6f766520746f207468652073616d6520706f7274666f6c696f2e74496e76616c69644e46545472616e736665724e46544e6f744f776e6564000a04dc4661696c656420746f207472616e7366657220616e204e4654202d204e4654206e6f7420666f756e6420696e20706f7274666f6c696f2e7c496e76616c69644e46545472616e73666572436f756e744f766572666c6f77000b04e84661696c656420746f207472616e7366657220616e204e4654202d206964656e7469747920636f756e7420776f756c64206f766572666c6f772e8c496e76616c69644e46545472616e73666572436f6d706c69616e63654661696c757265000c04b84661696c656420746f207472616e7366657220616e204e4654202d20636f6d706c69616e6365206661696c65642e74496e76616c69644e46545472616e7366657246726f7a656e4173736574000d04b04661696c656420746f207472616e7366657220616e204e4654202d2061737365742069732066726f7a656e2e8c496e76616c69644e46545472616e73666572496e73756666696369656e74436f756e74000e043d014661696c656420746f207472616e7366657220616e204e4654202d20746865206e756d626572206f66206e66747320696e20746865206964656e7469747920697320696e73756666696369656e742e5c4d61784e756d6265724f664b6579734578636565646564000f04c4546865206d6178696d756d206e756d626572206f66206d65746164617461206b657973207761732065786365656465642e744d61784e756d6265724f664e4654735065724c656745786365656465640010041501546865206d6178696d756d206e756d626572206f66206e667473206265696e67207472616e7366657272656420696e206f6e65206c6567207761732065786365656465642e2c4e46544e6f74466f756e640011045c546865204e465420646f6573206e6f742065786973742e5c556e726567697374657265644d657461646174614b6579001204e84174206c65617374206f6e65206f6620746865206d65746164617461206b65797320686173206e6f74206265656e20726567697374657265642e245a65726f436f756e74001304a44974206973206e6f7420706f737369626c6520746f207472616e7366657272207a65726f206e66742e38537570706c794f766572666c6f77001404c4416e206f766572666c6f77207768696c652063616c63756c6174696e6720746865207570646174656420737570706c792e3c537570706c79556e646572666c6f77001504c8416e20756e646572666c6f77207768696c652063616c63756c6174696e6720746865207570646174656420737570706c792e74496e76616c69644e46545472616e736665724e465449734c6f636b6564001604a84661696c656420746f207472616e7366657220616e204e4654202d206e6674206973206c6f636b65642eac496e76616c69644e46545472616e7366657253656e64657249644d61746368657352656365697665724964001704fc5468652073656e646572206964656e746974792063616e2774206265207468652073616d6520617320746865207265636569766572206964656e746974792e90496e76616c69644e46545472616e73666572496e76616c69645265636569766572434444001804805468652072656365697665722068617320616e20696e76616c6964204344442e88496e76616c69644e46545472616e73666572496e76616c696453656e646572434444001904785468652073656e6465722068617320616e20696e76616c6964204344442e38496e76616c696441737365744944001a04c854686572652773206e6f206173736574206173736f63696174656420746f2074686520676976656e2061737365745f69642e00c50b089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365345265616479536f6c7574696f6e04045400000c0120737570706f727473c90b01b0426f756e646564537570706f7274733c543a3a4163636f756e7449642c20543a3a4d617857696e6e6572733e00011473636f7265ad040134456c656374696f6e53636f726500011c636f6d70757465a904013c456c656374696f6e436f6d707574650000c90b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c508045300000400c10801185665633c543e0000cd0b089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736534526f756e64536e617073686f740404540000080118766f74657273d10b013c5665633c566f7465724f663c543e3e00011c74617267657473fc01445665633c543a3a4163636f756e7449643e0000d10b000002d50b00d50b0000040c0028410900d90b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401dd0b045300000400e10b01185665633c543e0000dd0b0000040cad04101000e10b000002dd0b00e50b0c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365187369676e6564405369676e65645375626d697373696f6e0c244163636f756e74496401001c42616c616e6365011820536f6c7574696f6e01ed070010010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650001307261775f736f6c7574696f6ee9070154526177536f6c7574696f6e3c536f6c7574696f6e3e00012063616c6c5f66656518011c42616c616e63650000e90b0c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144572726f720404540001386850726544697370617463684561726c795375626d697373696f6e000004645375626d697373696f6e2077617320746f6f206561726c792e6c507265446973706174636857726f6e6757696e6e6572436f756e740001048857726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e6450726544697370617463685765616b5375626d697373696f6e000204905375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e3c5369676e6564517565756546756c6c0003044901546865207175657565207761732066756c6c2c20616e642074686520736f6c7574696f6e20776173206e6f7420626574746572207468616e20616e79206f6620746865206578697374696e67206f6e65732e585369676e656443616e6e6f745061794465706f73697400040494546865206f726967696e206661696c656420746f2070617920746865206465706f7369742e505369676e6564496e76616c69645769746e657373000504a05769746e657373206461746120746f20646973706174636861626c6520697320696e76616c69642e4c5369676e6564546f6f4d756368576569676874000604b8546865207369676e6564207375626d697373696f6e20636f6e73756d657320746f6f206d756368207765696768743c4f637743616c6c57726f6e67457261000704984f4357207375626d697474656420736f6c7574696f6e20666f722077726f6e6720726f756e645c4d697373696e67536e617073686f744d65746164617461000804a8536e617073686f74206d657461646174612073686f756c6420657869737420627574206469646e27742e58496e76616c69645375626d697373696f6e496e646578000904d06053656c663a3a696e736572745f7375626d697373696f6e602072657475726e656420616e20696e76616c696420696e6465782e3843616c6c4e6f74416c6c6f776564000a04985468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742e3846616c6c6261636b4661696c6564000b044c5468652066616c6c6261636b206661696c65642c426f756e644e6f744d6574000c0448536f6d6520626f756e64206e6f74206d657438546f6f4d616e7957696e6e657273000d049c5375626d697474656420736f6c7574696f6e2068617320746f6f206d616e792077696e6e657273040d014572726f72206f66207468652070616c6c657420746861742063616e2062652072657475726e656420696e20726573706f6e736520746f20646973706174636865732eed0b084470616c6c65745f746573745f7574696c73144572726f7204045400010000f10b102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730185051043616c6c010d06245369676e617475726501210714457874726101f50b00040030000000f50b00000420f90bfd0b010c050c0d0c110c190c1d0c00f90b10306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000fd0b10306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000010c10306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000050c10306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400090c010c4572610000090c102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff00000d0c10306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400cd040120543a3a496e6465780000110c0c4c706f6c796d6573685f657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000400150c011443573c543e0000150c10306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000190c086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400d901013042616c616e63654f663c543e00001d0c084870616c6c65745f7065726d697373696f6e734453746f726543616c6c4d6574616461746104045400000000210c0c60706f6c796d6573685f72756e74696d655f646576656c6f701c72756e74696d651c52756e74696d6500000000cc1853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b57656967687401001c180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022cc5040400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000c90404000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e74010039010400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e74010039010400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000bd04040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01d10401501830426c6f636b57656967687473e10401020700c817a804000b00204aa9d10113ffffffffffffffff02daf89a00010b80914b872e011366666666666666a6010b0098f73e5d0113ffffffffffffffbf01000002daf89a00010b80199ef1a2011366666666666666e6010b00204aa9d10113ffffffffffffffff01070088526a7413000000000000004002daf89a0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468f10430000078000000a0000000a00004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101000100000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874f9044080f0fa020000000000c2eb0b000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6efd04d10430706f6c796d6573685f64657630706f6c796d6573685f64657601000000c0cf6a000000000058df6acb689907609b0400000037e397fc7c91f5e40100000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ed99c5acb25eedf503000000cbca25e39f14238702000000687ad44ad37f03c201000000bc9d89904f5b923f0100000068b66ba122c93fa70200000037c8bb1350a9a2a802000000f3ff14d5ab52705902000000ab3c0572291feb8b0100000018ef58a3b67ba77001000000329342994773047f01000000001a0b29f17d01f401000000f28e8080b6e2dfd004000000bb6ba9053c5c9d7804000000595ac34c5ea1f5fe010000009ea061a615cee2fe0200000053df5001418f3b460200000098cf18c375950e1f0200000007000000010484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669785d03082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e011105001042616265011042616265442845706f6368496e64657801002820000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f726974696573010015050400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f740100250520000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f740100250520000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e65737301000480000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e6050656e64696e6745706f6368436f6e6669674368616e67650000290504000461012050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e384e65787452616e646f6d6e657373010004800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e3c4e657874417574686f7269746965730100150504000460204e6578742065706f636820617574686f7269746965732e305365676d656e74496e6465780100101000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f8205765206d616b6520612074726164652d6f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e0101040510350504000415012054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2c496e697469616c697a656400003d0504000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e4c417574686f7256726652616e646f6d6e6573730100d10304001015012054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c6573731901207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e0049012049742069732073657420696e20606f6e5f66696e616c697a65602c206265666f72652069742077696c6c20636f6e7461696e207468652076616c75652066726f6d20746865206c61737420626c6f636b2e2845706f636853746172740100cd03200000000000000000145d012054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e641420604e602e4901204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f66590120656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e590120736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e204c6174656e657373010010100000000014d820486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e001501205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e65642075701101206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636bb020657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2c45706f6368436f6e6669670000510504000861012054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e242067656e657369732e3c4e65787445706f6368436f6e666967000051050400082d012054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e6765e82028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e34536b697070656445706f6368730100550504002029012041206c697374206f6620746865206c6173742031303020736b69707065642065706f63687320616e642074686520636f72726573706f6e64696e672073657373696f6e20696e64657870207768656e207468652065706f63682077617320736b69707065642e0031012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f663501206d75737420636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e656564206139012077617920746f2074696520746f6765746865722073657373696f6e7320616e642065706f636820696e64696365732c20692e652e207765206e65656420746f2076616c69646174652074686174290120612076616c696461746f722077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e64207768617420746865b0206163746976652065706f636820696e6465782077617320647572696e6720746861742073657373696f6e2e016105000c3445706f63684475726174696f6e28202c010000000000000cec2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e1901204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e20616674657221012074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e444578706563746564426c6f636b54696d652820701700000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e384d6178417574686f7269746965731010a08601000488204d6178206e756d626572206f6620617574686f72697469657320616c6c6f776564017505012454696d657374616d70012454696d657374616d70080c4e6f7701002820000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e2444696455706461746501003901040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0179050004344d696e696d756d506572696f642820b80b000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e747300010402107d050400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e0181050174041c4465706f736974184040420f0000000000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e0189050328417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000042042616c616e636573012042616c616e6365730834546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e144c6f636b7301010402008d05040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e019905017804484578697374656e7469616c4465706f73697418400000000000000000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e019d0505485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100a10540000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100a50504000000019008485472616e73616374696f6e42797465466565184064000000000000000000000000000000040d01205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e2c576569676874546f466565a9055c040000000000000000000000000000000049b400000001040d012054686520706f6c796e6f6d69616c2074686174206973206170706c69656420696e206f7264657220746f20646572697665206665652066726f6d207765696768742e0006204964656e7469747901204964656e7469747960284469645265636f7264730001040680b1050400045420444944202d3e206964656e7469747920696e666f2c497344696446726f7a656e01010406803901040004e420444944202d3e20626f6f6c207468617420696e64696361746573206966207365636f6e64617279206b657973206172652066726f7a656e2e3043757272656e74506179657200000004000401012049742073746f726573207468652063757272656e74206761732066656520706179657220666f72207468652063757272656e74207472616e73616374696f6e18436c61696d730001080502b5050101040004f020285461726765742049442c20636c61696d20747970652920286973737565722c73636f706529202d3e204173736f63696174656420636c61696d7330437573746f6d436c61696d73000104051901300400049420437573746f6d436c61696d547970654964202d3e20537472696e6720636f6e7374616e744c437573746f6d436c61696d73496e7665727365000104023019010400049420537472696e6720636f6e7374616e74202d3e20437573746f6d436c61696d54797065496454437573746f6d436c61696d496453657175656e6365010019011000000000047820546865206e6578742060437573746f6d436c61696d547970654964602e284b65795265636f7264730001040500c1050400042901204d61702066726f6d204163636f756e74496420746f20604b65795265636f726460207468617420686f6c647320746865206b65792773207479706520616e64206964656e746974792e5c4b657945787472696e7369635065726d697373696f6e730001040500b8040004a42041207365636f6e64617279206b657927732065787472696e736963207065726d697373696f6e732e4c4b657941737365745065726d697373696f6e730001040500a4040004942041207365636f6e64617279206b65792773206173736574207065726d697373696f6e732e5c4b6579506f7274666f6c696f5065726d697373696f6e730001040500e4040004a42041207365636f6e64617279206b6579277320706f7274666f6c696f207065726d697373696f6e732e1c4469644b6579730101080605c505390104000401012041207265766572736520646f75626c65206d617020746f20616c6c6f772066696e64696e6720616c6c206b65797320666f7220616e206964656e746974792e444d756c7469507572706f73654e6f6e636501002820000000000000000004bc204e6f6e636520746f20656e7375726520756e6971756520616374696f6e732e207374617274732066726f6d20312e684f6666436861696e417574686f72697a6174696f6e4e6f6e636501010406802820000000000000000004c820417574686f72697a6174696f6e206e6f6e636520706572204964656e746974792e20496e697469616c6c7920697320302e38417574686f72697a6174696f6e730001080205c905d105040004b020416c6c20617574686f72697a6174696f6e73207468617420616e206964656e746974792f6b6579206861734c417574686f72697a6174696f6e73476976656e0101080605d505cd0584000000000000000000000000000000000000000000000000000000000000000000044d0120416c6c20617574686f72697a6174696f6e73207468617420616e206964656e746974792068617320676976656e2e2028417574686f72697a65722c20617574685f6964202d3e20617574686f72697a6564297043646441757468466f725072696d6172794b6579526f746174696f6e010039010400085d01204120636f6e66696720666c616720746861742c206966207365742c20696e7374727563747320616e20617574686f72697a6174696f6e2066726f6d2061204344442070726f766964657220696e206f7264657220746f9c206368616e676520746865207072696d617279206b6579206f6620616e206964656e746974792e3853746f7261676556657273696f6e0100d905040004442053746f726167652076657273696f6e2e484163636f756e744b6579526566436f756e740101040200282000000000000000001cc420486f77206d616e7920227374726f6e6722207265666572656e63657320746f20746865206163636f756e74206b65792e00fc205374726f6e67207265666572656e6365732077696c6c20626c6f636b2061206b65792066726f6d206c656176696e672069742773206964656e746974792e00cc2050616c6c657473207573696e6720227374726f6e6722207265666572656e63657320746f206163636f756e74206b6579733aac202a2052656c617965723a20466f722060757365725f6b65796020616e642060706179696e675f6b6579600024506172656e74446964000104068080040004c020506172656e74206964656e7469747920696620746865204449442069732061206368696c64204964656e746974792e204368696c644469640101080606dd053901040004050120416c6c206368696c64206964656e746974696573206f66206120706172656e742028692e6520506172656e744449442c204368696c644449442c207472756529484e756d6265724f66476976656e4175746873010104068010100000000004ec20547261636b20746865206e756d626572206f6620617574686f72697a6174696f6e7320676976656e2062792065616368206964656e746974792e584f75746461746564417574686f72697a6174696f6e7300010402cd0528040004bc20547261636b7320616c6c20617574686f72697a6174696f6e732074686174206d7573742062652064656c657465643443757272656e74417574684964010028200000000000000000047c20436f6e74726f6c732074686520617574686f72697a6174696f6e2069642e01e105019408344d6178476976656e41757468731010000400000030496e697469616c504f4c59581840000000000000000000000000000000000001f905074c4364645365727669636550726f7669646572730138496e7374616e63653247726f75700c344163746976654d656d6265727301004501040004ec205468652063757272656e74202261637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e3c496e6163746976654d656d626572730100fd05040004f4205468652063757272656e742022696e61637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e484163746976654d656d626572734c696d6974010010100000000004c4204c696d6974206f6620686f77206d616e79202261637469766522206d656d626572732074686572652063616e2062652e010506013d01000109060844506f6c796d657368436f6d6d69747465650148496e7374616e636531436f6d6d6974746565242450726f706f73616c730100c104040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062c0d06040004882041637475616c2070726f706f73616c20666f72206120676976656e20686173682e18566f74696e67000104062cd908040004d420506f6c796d657368566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100450104000498205468652063757272656e74206d656d62657273206f662074686520636f6d6d69747465652e34566f74655468726573686f6c640100cd03200000000000000000048020566f7465207468726573686f6c6420666f7220616e20617070726f76616c2e4852656c65617365436f6f7264696e61746f72000080040004542052656c6561736520636f6f7264696e61746f722e3045787069726573416674657201005901040104a42054696d6520616674657220776869636820612070726f706f73616c2077696c6c206578706972652e3853746f7261676556657273696f6e0100dd08040004442053746f726167652076657273696f6e2e0111060149010001e108094c436f6d6d69747465654d656d626572736869700138496e7374616e63653147726f75700c344163746976654d656d6265727301004501040004ec205468652063757272656e74202261637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e3c496e6163746976654d656d626572730100fd05040004f4205468652063757272656e742022696e61637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e484163746976654d656d626572734c696d6974010010100000000004c4204c696d6974206f6620686f77206d616e79202261637469766522206d656d626572732074686572652063616e2062652e011506015d010001e5080a48546563686e6963616c436f6d6d69747465650148496e7374616e636533436f6d6d6974746565242450726f706f73616c730100c104040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062c0d06040004882041637475616c2070726f706f73616c20666f72206120676976656e20686173682e18566f74696e67000104062cd908040004d420506f6c796d657368566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100450104000498205468652063757272656e74206d656d62657273206f662074686520636f6d6d69747465652e34566f74655468726573686f6c640100cd03200000000000000000048020566f7465207468726573686f6c6420666f7220616e20617070726f76616c2e4852656c65617365436f6f7264696e61746f72000080040004542052656c6561736520636f6f7264696e61746f722e3045787069726573416674657201005901040104a42054696d6520616674657220776869636820612070726f706f73616c2077696c6c206578706972652e3853746f7261676556657273696f6e0100dd08040004442053746f726167652076657273696f6e2e0119060165010001e9080b70546563686e6963616c436f6d6d69747465654d656d626572736869700138496e7374616e63653347726f75700c344163746976654d656d6265727301004501040004ec205468652063757272656e74202261637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e3c496e6163746976654d656d626572730100fd05040004f4205468652063757272656e742022696e61637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e484163746976654d656d626572734c696d6974010010100000000004c4204c696d6974206f6620686f77206d616e79202261637469766522206d656d626572732074686572652063616e2062652e011d06016d010001ed080c4055706772616465436f6d6d69747465650148496e7374616e636534436f6d6d6974746565242450726f706f73616c730100c104040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062c0d06040004882041637475616c2070726f706f73616c20666f72206120676976656e20686173682e18566f74696e67000104062cd908040004d420506f6c796d657368566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100450104000498205468652063757272656e74206d656d62657273206f662074686520636f6d6d69747465652e34566f74655468726573686f6c640100cd03200000000000000000048020566f7465207468726573686f6c6420666f7220616e20617070726f76616c2e4852656c65617365436f6f7264696e61746f72000080040004542052656c6561736520636f6f7264696e61746f722e3045787069726573416674657201005901040104a42054696d6520616674657220776869636820612070726f706f73616c2077696c6c206578706972652e3853746f7261676556657273696f6e0100dd08040004442053746f726167652076657273696f6e2e0121060175010001f1080d6855706772616465436f6d6d69747465654d656d626572736869700138496e7374616e63653447726f75700c344163746976654d656d6265727301004501040004ec205468652063757272656e74202261637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e3c496e6163746976654d656d626572730100fd05040004f4205468652063757272656e742022696e61637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e484163746976654d656d626572734c696d6974010010100000000004c4204c696d6974206f6620686f77206d616e79202261637469766522206d656d626572732074686572652063616e2062652e012506017d010001f5080e204d756c746953696701204d756c74695369673c344d756c74695369674e6f6e6365010028200000000000000000042101204e6f6e636520746f20656e7375726520756e69717565204d756c746953696720616464726573736573206172652067656e6572617465643b207374617274732066726f6d20312e3c4d756c74695369675369676e6572730101080605f9083901040004cc205369676e657273206f662061206d756c74697369672e20286d756c74697369672c207369676e657229203d3e20626f6f6c2e3c4e756d6265724f665369676e65727301010406002820000000000000000004cc204e756d626572206f6620617070726f7665642f6163636570746564207369676e657273206f662061206d756c74697369672e544d756c74695369675369676e73526571756972656401010406002820000000000000000004e020436f6e6669726d6174696f6e73207265717569726564206265666f72652070726f63657373696e672061206d756c74697369672074782e384e65787450726f706f73616c49640101040600282000000000000000000cc4204e6578742070726f706f73616c20696420666f722061206d756c74697369672e20205374617274732066726f6d20302e0074206d756c7469736967203d3e206e6578742070726f706f73616c2069642450726f706f73616c730001080505fd080d0604000cb82050726f706f73616c732070726573656e74656420666f7220766f74696e6720746f2061206d756c74697369672e00b4206d756c7469736967202d3e2070726f706f73616c206964203d3e204f7074696f6e3c50726f706f73616c3e2e14566f74657301010805050109390104000c8820496e646976696475616c206d756c7469736967207369676e657220766f7465732e00ac20286d756c74697369672c2070726f706f73616c5f696429202d3e207369676e6572203d3e20766f74652e24506179696e67446964000104060080040010090120546865206d756c7469736967277320706179696e67206964656e746974792e2020546865207072696d617279206b6579206f662074686973206964656e74697479f8207061797320746865207472616e73616374696f6e2f70726f746f63616c2066656573206f6620746865206d756c74697369672070726f706f73616c732e0080206d756c7469736967202d3e204f7074696f6e3c4964656e7469747949643e2e2041646d696e446964000104060080040010050120546865206d756c746973696727732061646d696e206964656e746974792e2020546865207072696d617279206b6579206f662074686973206964656e7469747994206861732061646d696e20636f6e74726f6c206f76657220746865206d756c74697369672e0080206d756c7469736967202d3e204f7074696f6e3c4964656e7469747949643e2e4850726f706f73616c566f7465436f756e74730001080505fd08050904000ce82054686520636f756e74206f6620617070726f76616c732f72656a656374696f6e73206f662061206d756c74697369672070726f706f73616c2e00d8206d756c7469736967202d3e2070726f706f73616c206964203d3e204f7074696f6e3c50726f706f73616c566f7465436f756e743e2e3850726f706f73616c5374617465730001080505fd08090904000c8420546865207374617465206f662061206d756c74697369672070726f706f73616c00c8206d756c7469736967202d3e2070726f706f73616c206964203d3e204f7074696f6e3c50726f706f73616c53746174653e2e40457865637574696f6e5265656e74727901003901040004882050726f706f73616c20657865637574696f6e207265656e7472792067756172642e4041757468546f50726f706f73616c49640001080505fd082804000cbc2050656e64696e67206a6f696e206964656e7469747920617574686f72697a6174696f6e2070726f706f73616c732e00b0206d756c7469736967202d3e2061757468206964203d3e204f7074696f6e3c70726f706f73616c2069643e2e485472616e73616374696f6e56657273696f6e010010100000000004f420546865206c617374207472616e73616374696f6e2076657273696f6e2c207573656420666f7220606f6e5f72756e74696d655f75706772616465602e3853746f7261676556657273696f6e01000d09040004442053746f726167652076657273696f6e2e01290601850104284d61785369676e657273101032000000040501204d6178696d756d206e756d626572206f66207369676e65727320746861742063616e2062652061646465642f72656d6f76656420696e206f6e652063616c6c2e0111090f1842726964676501184272696467652828436f6e74726f6c6c657200000004000c410120546865206d756c7469736967206163636f756e74206f66207468652062726964676520636f6e74726f6c6c65722e205468652067656e65736973207369676e65727320616363657074207468656972450120617574686f72697a6174696f6e7320616e64206172652061626c6520746f206765742074686569722070726f706f73616c732064656c6976657265642e20546865206272696467652063726561746f729c207472616e736665727320736f6d6520504f4c5920746f207468656972206964656e746974792e3c427269646765547844657461696c73010108020215091909d400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000859012044657461696c73206f6620627269646765207472616e73616374696f6e73206964656e7469666965642077697468207061697273206f662074686520726563697069656e74206163636f756e7420616e64207468656820627269646765207472616e73616374696f6e206e6f6e63652e1441646d696e0000000400043c205468652061646d696e206b65792e1846726f7a656e01003901040004bc2057686574686572206f72206e6f742074686520627269646765206f7065726174696f6e2069732066726f7a656e2e30467265657a6541646d696e7301010402003901040004090120467265657a65206272696467652061646d696e732e20205468657365206163636f756e74732063616e206f6e6c7920667265657a6520746865206272696467652e2054696d656c6f636b0100101000000000083d012054686520627269646765207472616e73616374696f6e2074696d656c6f636b20706572696f642c20696e20626c6f636b732c2073696e63652074686520616363657074616e6365206f66207468653101207472616e73616374696f6e2070726f706f73616c20647572696e67207768696368207468652061646d696e206b65792063616e20667265657a6520746865207472616e73616374696f6e2e2c4272696467654c696d69740100210950000000000000000000000000000000000000000008290120546865206d6178696d756d206e756d626572206f66206272696467656420504f4c595820706572206964656e746974792077697468696e20612073657420696e74657276616c206f66f820626c6f636b732e204669656c64733a20504f4c595820616d6f756e7420616e642074686520626c6f636b20696e74657276616c206475726174696f6e2e30506f6c7978427269646765640101040680210950000000000000000000000000000000000000000008510120416d6f756e74206f6620504f4c5958206272696467656420627920746865206964656e7469747920696e206c61737420626c6f636b20696e74657276616c2e204669656c64733a2074686520627269646765649420616d6f756e7420616e6420746865206c61737420696e74657276616c206e756d6265722e4c4272696467654c696d69744578656d7074656401010405803901040004c0204964656e746974696573206e6f7420636f6e73747261696e65642062792074686520627269646765206c696d69742e3853746f7261676556657273696f6e01002509040004442053746f726167652076657273696f6e2e00000000101c5374616b696e67011c5374616b696e67a43856616c696461746f72436f756e740100101000000000049c2054686520696465616c206e756d626572206f66206163746976652076616c696461746f72732e544d696e696d756d56616c696461746f72436f756e740100101000000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100fc04000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010405000004000c0101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e404d696e4e6f6d696e61746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f662061206e6f6d696e61746f722e404d696e56616c696461746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f6620612076616c696461746f722e484d696e696d756d4163746976655374616b65010018400000000000000000000000000000000004110120546865206d696e696d756d20616374697665206e6f6d696e61746f72207374616b65206f6620746865206c617374207375636365737366756c20656c656374696f6e2e344d696e436f6d6d697373696f6e0100910110000000000ce820546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e20746861742076616c696461746f72732063616e207365742e00802049662073657420746f206030602c206e6f206c696d6974206578697374732e184c6564676572000104020029090400044501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e1450617965650101040500350604000ce42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e2856616c696461746f7273010104050095010800000c450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f7256616c696461746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d617856616c696461746f7273436f756e7400001004000c310120546865206d6178696d756d2076616c696461746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e284e6f6d696e61746f727300010405003d09040048750120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f207468656972206e6f6d696e6174696f6e20707265666572656e6365732c206e616d656c79207468652076616c696461746f72732074686174582074686579207769736820746f20737570706f72742e003901204e6f7465207468617420746865206b657973206f6620746869732073746f72616765206d6170206d69676874206265636f6d65206e6f6e2d6465636f6461626c6520696e2063617365207468656d01205b60436f6e6669673a3a4d61784e6f6d696e6174696f6e73605d20636f6e66696775726174696f6e206973206465637265617365642e20496e2074686973207261726520636173652c207468657365206e6f6d696e61746f7273650120617265207374696c6c206578697374656e7420696e2073746f726167652c207468656972206b657920697320636f727265637420616e64207265747269657661626c652028692e652e2060636f6e7461696e735f6b657960710120696e6469636174657320746861742074686579206578697374292c206275742074686569722076616c75652063616e6e6f74206265206465636f6465642e205468657265666f72652c20746865206e6f6e2d6465636f6461626c656d01206e6f6d696e61746f72732077696c6c206566666563746976656c79206e6f742d65786973742c20756e74696c20746865792072652d7375626d697420746865697220707265666572656e6365732073756368207468617420697401012069732077697468696e2074686520626f756e6473206f6620746865206e65776c79207365742060436f6e6669673a3a4d61784e6f6d696e6174696f6e73602e006101205468697320696d706c696573207468617420603a3a697465725f6b65797328292e636f756e7428296020616e6420603a3a6974657228292e636f756e74282960206d696768742072657475726e20646966666572656e746d012076616c75657320666f722074686973206d61702e204d6f72656f7665722c20746865206d61696e20603a3a636f756e7428296020697320616c69676e656420776974682074686520666f726d65722c206e616d656c79207468656c206e756d626572206f66206b65797320746861742065786973742e006d01204c6173746c792c20696620616e79206f6620746865206e6f6d696e61746f7273206265636f6d65206e6f6e2d6465636f6461626c652c20746865792063616e206265206368696c6c656420696d6d6564696174656c7920766961b8205b6043616c6c3a3a6368696c6c5f6f74686572605d20646973706174636861626c6520627920616e796f6e652e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f724e6f6d696e61746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d61784e6f6d696e61746f7273436f756e7400001004000c310120546865206d6178696d756d206e6f6d696e61746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e2843757272656e744572610000100400105c205468652063757272656e742065726120696e6465782e006501205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f7280207365742c206974206d6967687420626520616374697665206f72206e6f742e2441637469766545726100004509040010d820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e0059012054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d757374206265ac20657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e5445726173537461727453657373696f6e496e6465780001040510100400103101205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e006101204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e672061637469766529f020666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e2c457261735374616b65727301010805054909d5010c0000001878204578706f73757265206f662076616c696461746f72206174206572612e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e48457261735374616b657273436c697070656401010805054909d5010c0000002c9820436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e00590120546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f20746865dc2060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e1d0120284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292ef42054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e005d012054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e484572617356616c696461746f7250726566730101080505490995010800001411012053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4c4572617356616c696461746f7252657761726400010405101804000c09012054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e0021012045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e4045726173526577617264506f696e747301010405104d0914000000000008ac205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e3845726173546f74616c5374616b65010104051018400000000000000000000000000000000008ec2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e1d0120496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e20466f72636545726101009d0104000454204d6f6465206f662065726120666f7263696e672e4c536c6173685265776172644672616374696f6e0100910110000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e4c43616e63656c6564536c6173685061796f757401001840000000000000000000000000000000000815012054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e7420776869636820776173ec2063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e40556e6170706c696564536c617368657301010405105909040004c420416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e28426f6e646564457261730100c50404001025012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e00c8204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653abc20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d604c56616c696461746f72536c617368496e457261000108050549096109040008450120416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e7020616e6420736c6173682076616c7565206f6620746865206572612e4c4e6f6d696e61746f72536c617368496e4572610001080505490918040004610120416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e34536c617368696e675370616e73000104050065090400048c20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e245370616e536c6173680101040515096909800000000000000000000000000000000000000000000000000000000000000000083d01205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2cb82061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e5443757272656e74506c616e6e656453657373696f6e01001010000000000ce820546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e0071012054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6070616c6c65745f73657373696f6e3a3a53657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e4c4f6666656e64696e6756616c696461746f727301006d09040024690120496e6469636573206f662076616c696461746f727320746861742068617665206f6666656e64656420696e20746865206163746976652065726120616e6420776865746865722074686579206172652063757272656e746c79282064697361626c65642e00690120546869732076616c75652073686f756c642062652061207375706572736574206f662064697361626c65642076616c696461746f72732073696e6365206e6f7420616c6c206f6666656e636573206c65616420746f2074686571012076616c696461746f72206265696e672064697361626c65642028696620746865726520776173206e6f20736c617368292e2054686973206973206e656564656420746f20747261636b207468652070657263656e74616765206f6649012076616c696461746f727320746861742068617665206f6666656e64656420696e207468652063757272656e74206572612c20656e737572696e672061206e65772065726120697320666f72636564206966750120604f6666656e64696e6756616c696461746f72735468726573686f6c646020697320726561636865642e205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e6471012077686574686572206120676976656e2076616c696461746f72206861732070726576696f75736c79206f6666656e646564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e38207468652065726120656e64732e384368696c6c5468726573686f6c6400003d0604000c510120546865207468726573686f6c6420666f72207768656e2075736572732063616e2073746172742063616c6c696e6720606368696c6c5f6f746865726020666f72206f746865722076616c696461746f7273202f5901206e6f6d696e61746f72732e20546865207468726573686f6c6420697320636f6d706172656420746f207468652061637475616c206e756d626572206f662076616c696461746f7273202f206e6f6d696e61746f72732901202860436f756e74466f722a602920696e207468652073797374656d20636f6d706172656420746f2074686520636f6e66696775726564206d61782028604d61782a436f756e7460292e505065726d697373696f6e65644964656e7469747900010405807509040004ec20456e74697469657320746861742061726520616c6c6f77656420746f2072756e206f70657261746f722f76616c696461746f72206e6f6465732e48536c617368696e67416c6c6f776564466f720100a101040204b420536c617368696e672073776974636820666f722076616c696461746f72732026204e6f6d696e61746f72732e5856616c696461746f72436f6d6d697373696f6e436170010091011000000000049d0120416c6c6f777320666c65786962696c69747920696e20636f6d6d697373696f6e2e2045766572792076616c696461746f722068617320636f6d6d697373696f6e20746861742073686f756c6420626520696e207468652072616e6765205b302c204361705d2e58506f6c796d65736853746f7261676556657273696f6e01007909040000013106018d0128384d61784e6f6d696e6174696f6e7310101000000004b4204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e7320706572206e6f6d696e61746f722e30486973746f72794465707468101054000000508c204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e00e820466f6c6c6f77696e6720696e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d090120486973746f727944657074682c2063757272656e745f6572615d603a2060457261735374616b657273602c2060457261735374616b657273436c6970706564602c050120604572617356616c696461746f725072656673602c20604572617356616c696461746f72526577617264602c206045726173526577617264506f696e7473602cac206045726173546f74616c5374616b65602c206045726173537461727453657373696f6e496e646578602c8420605374616b696e674c65646765722e636c61696d65645f72657761726473602e00e4204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e2ef820492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203ec42063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e001101204966206d6967726174696e6720616e206578697374696e672070616c6c65742066726f6d2073746f726167652076616c756520746f20636f6e6669672076616c75652cec20746869732073686f756c642062652073657420746f2073616d652076616c7565206f72206772656174657220617320696e2073746f726167652e001501204e6f74653a2060486973746f727944657074686020697320757365642061732074686520757070657220626f756e6420666f72207468652060426f756e646564566563601101206974656d20605374616b696e674c65646765722e636c61696d65645f72657761726473602e2053657474696e6720746869732076616c7565206c6f776572207468616ed820746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865150120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e2061206d6967726174696f6e2ef020546865207465737420607265647563696e675f686973746f72795f64657074685f616272757074602073686f77732074686973206566666563742e3853657373696f6e735065724572611010030000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e10100700000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e48536c61736844656665724475726174696f6e101004000000100101204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e000d0120546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c617368657315012073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e804d61784e6f6d696e61746f72526577617264656450657256616c696461746f7210100004000010f820546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320726577617264656420666f7220656163682076616c696461746f722e00510120466f7220656163682076616c696461746f72206f6e6c79207468652060244d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732063616e390120636c61696d207468656972207265776172642e2054686973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e484d6178556e6c6f636b696e674368756e6b7310102000000028050120546865206d6178696d756d206e756d626572206f662060756e6c6f636b696e6760206368756e6b732061205b605374616b696e674c6564676572605d2063616e090120686176652e204566666563746976656c792064657465726d696e657320686f77206d616e7920756e6971756520657261732061207374616b6572206d61792062653820756e626f6e64696e6720696e2e00f8204e6f74653a20604d6178556e6c6f636b696e674368756e6b736020697320757365642061732074686520757070657220626f756e6420666f722074686501012060426f756e64656456656360206974656d20605374616b696e674c65646765722e756e6c6f636b696e67602e2053657474696e6720746869732076616c75650501206c6f776572207468616e20746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865090120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e20612072756e74696d650501206d6967726174696f6e2e20546865207465737420607265647563696e675f6d61785f756e6c6f636b696e675f6368756e6b735f616272757074602073686f7773342074686973206566666563742e5c4d617856616c696461746f725065724964656e74697479a502101009050008e8204d6178696d756d20616d6f756e74206f662076616c696461746f727320746861742063616e2072756e20627920616e206964656e746974792ef82049742077696c6c206265204d617856616c696461746f725065724964656e74697479202a2053656c663a3a76616c696461746f725f636f756e7428292e844d61785661726961626c65496e666c6174696f6e546f74616c49737375616e636518400080c6a47e8d03000000000000000000041501204d6178696d756d20616d6f756e74206f6620746f74616c2069737375616e63652061667465722077686963682066697865642072657761726473206b69636b7320696e2e444669786564596561726c79526577617264184000c0444a547f0000000000000000000004390120596561726c7920746f74616c2072657761726420616d6f756e7420746861742067657473206469737472696275746564207768656e2066697865642072657761726473206b69636b7320696e2e017d0911204f6666656e63657301204f6666656e6365730c1c5265706f727473000104052c8109040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e64657801010805058509c1040400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e485265706f72747342794b696e64496e64657801010405ac30040018110120456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e00bc20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e004901204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f66690120646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e0001a5010000121c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100fc0400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e67656401003901040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010089090400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010069040400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050059060400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405910900040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e01550601a901000199091348417574686f72697479446973636f766572790000000000141c4772616e647061011c4772616e6470611814537461746501009d0904000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e67650000a109040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c65640000cd030400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010028200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405281004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e01610601ad0108384d6178417574686f7269746965731010a0860100045c204d617820417574686f72697469657320696e20757365584d6178536574496453657373696f6e456e74726965732820150000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e01a9091528486973746f726963616c00000000001620496d4f6e6c696e650120496d4f6e6c696e651038486561727462656174416674657201001010000000002c1d012054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e74242073657373696f6e2e0025012041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c350120726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f721901207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f207468617420746865a820686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e00390120546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2d012070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c642062650101206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e104b6579730100ad09040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e485265636569766564486561727462656174730001080505cd03b5090400083d0120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206053657373696f6e496e6465786020616e64206041757468496e6465786020746fb02060577261707065724f70617175653c426f756e6465644f70617175654e6574776f726b53746174653e602e38417574686f726564426c6f636b730101080505490910100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e018d0601c1010440556e7369676e65645072696f726974792820ffffffffffffffff10f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e01c909176052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100cd0904000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e0000000018105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01ad0601e5010001d10919144173736574011441737365748460556e697175655469636b6572526567697374726174696f6e000104022101d5090400042d01204d6170732065616368205b605469636b6572605d20746f2069747320726567697374726174696f6e2064657461696c7320285b605469636b6572526567697374726174696f6e605d292e305469636b6572436f6e6669670100d9090800000425012052657475726e73205b605469636b6572526567697374726174696f6e436f6e666967605d20666f7220617373657373696e672069662061207469636b65722069732076616c69642e1841737365747300010402a8dd09040004e4204d6170732065616368205b6041737365744944605d20746f2069747320756e6465726c696e67205b60417373657444657461696c73605d2e2841737365744e616d657300010402a8f901040004d8204d6170732065616368205b6041737365744944605d20746f2069747320756e6465726c696e67205b6041737365744e616d65605d2e2442616c616e63654f660101080206e10918400000000000000000000000000000000004190120547261636b732074686520746f74616c205b6042616c616e6365605d20666f722065616368205b6041737365744944605d20706572205b604964656e746974794964605d2e4041737365744964656e7469666965727301010402a8fd010400041901204d6170732065616368205b6041737365744944605d20746f20697473206173736574206964656e7469666965727320285b6041737365744964656e746966696572605d292e50437573746f6d54797065496453657175656e63650100f10110000000000cc420546865206e65787420604173736574547970653a3a437573746f6d6020494420696e207468652073657175656e63652e00d0204e756d6265727320696e207468652073657175656e63652073746172742066726f6d203120726174686572207468616e20302e2c437573746f6d547970657301010405f10130040004f8204d61707320637573746f6d20617373657420747970652069647320746f20746865207265676973746572656420737472696e6720636f6e74656e74732e48437573746f6d5479706573496e76657273650001040230f101040004610120496e7665727365206d6170206f662060437573746f6d5479706573602c2066726f6d207265676973746572656420737472696e6720636f6e74656e747320746f20637573746f6d2061737365742074797065206964732e3046756e64696e67526f756e6401010402a811020400044101204d6170732065616368205b6041737365744944605d20746f20746865206e616d65206f662069747320666f756e64696e6720726f756e6420285b6046756e64696e67526f756e644e616d65605d292e50497373756564496e46756e64696e67526f756e6401010402e5091840000000000000000000000000000000000479012054686520746f74616c205b6042616c616e6365605d206f6620746f6b656e732069737375656420696e20616c6c207265636f726465642066756e64696e6720726f756e647320285b6046756e64696e67526f756e644e616d65605d292e1846726f7a656e01010402a83901040004b1012052657475726e7320607472756560206966207472616e736665727320666f722074686520746f6b656e206173736f63696174656420746f205b6041737365744944605d206172652066726f7a656e2e204f74686572776973652c2072657475726e73206066616c7365602e384173736574446f63756d656e74730001080205e90919020400049c20416c6c205b60446f63756d656e74605d20617474616368656420746f20616e2061737365742e604173736574446f63756d656e7473496453657175656e636501010402a81502100000000004a0205b60446f63756d656e744964605d20636f756e74657220706572205b6041737365744944605d2e4c41737365744d6574616461746156616c7565730001080205ed0945020400047c204d65746174646174612076616c75657320666f7220616e2061737365742e6441737365744d6574616461746156616c756544657461696c730001080205ed094d02040004a02044657461696c7320666f7220616e2061737365742773204d657461646174612076616c7565732e6c41737365744d657461646174614c6f63616c4e616d65546f4b65790001080202f109590204000488204173736574204d65746164617461204c6f63616c204e616d65202d3e204b65792e7041737365744d65746164617461476c6f62616c4e616d65546f4b657900010402550275020400048c204173736574204d6574616461746120476c6f62616c204e616d65202d3e204b65792e6c41737365744d657461646174614c6f63616c4b6579546f4e616d650001080205f509550204000488204173736574204d65746164617461204c6f63616c204b6579202d3e204e616d652e7041737365744d65746164617461476c6f62616c4b6579546f4e616d6500010405750255020400048c204173736574204d6574616461746120476c6f62616c204b6579202d3e204e616d652e5c41737365744d657461646174614c6f63616c53706563730001080205f5095d0204000480204173736574204d65746164617461204c6f63616c204b65792073706563732e6041737365744d65746164617461476c6f62616c53706563730001040575025d0204000484204173736574204d6574616461746120476c6f62616c204b65792073706563732e6c4173736574734578656d707446726f6d41666669726d6174696f6e01010402a839010400041d012041206c697374206f66206173736574732074686174206578656d707420616c6c2075736572732066726f6d2061666669726d696e672069747320726563656976656d656e742e40507265417070726f76656441737365740101080602f9093901040004250120416c6c20617373657473207468617420646f6e2774206e65656420616e2061666669726d6174696f6e20746f20626520726563656976656420627920616e206964656e746974792e484d616e6461746f72794d65646961746f727301010402a8b906040004c820546865206c697374206f66206d616e6461746f7279206d65646961746f727320666f72206576657279207469636b65722e7043757272656e7441737365744d657461646174614c6f63616c4b657900010402a85902040004e420546865206c617374205b6041737365744d657461646174614c6f63616c4b6579605d207573656420666f72205b6041737365744944605d2e7443757272656e7441737365744d65746164617461476c6f62616c4b657900007502040004ec20546865206c617374205b6041737365744d65746164617461476c6f62616c4b6579605d207573656420666f72206120676c6f62616c206b65792e485469636b6572734f776e65644279557365720101080602fd0939010400047420416c6c207469636b657273206f776e6564206279206120757365722e645365637572697479546f6b656e734f776e65644279557365720101080602f90939010400049420416c6c20736563757269747920746f6b656e73206f776e6564206279206120757365722e34417373657449445469636b657200010402a82101040004d8204d61707320616c6c205b6041737365744944605d207468617420617265206d617070656420746f2061205b605469636b6572605d2e345469636b657241737365744944000104022101a8040004dc204d61707320616c6c205b605469636b6572605d207468617420617265206c696e6b656420746f20616e205b6041737365744944605d2e2841737365744e6f6e6365010104060028200000000000000000040101204120706572206163636f756e74206e6f6e63652074686174206973207573656420666f722067656e65726174696e6720616e205b6041737365744944605d2e3853746f7261676556657273696f6e0100010a040004442053746f726167652076657273696f6e2e01b10601e901184841737365744e616d654d61784c656e677468101080000000006446756e64696e67526f756e644e616d654d61784c656e677468101080000000006841737365744d657461646174614e616d654d61784c656e677468101000010000006c41737365744d6574616461746156616c75654d61784c656e677468101000200000007441737365744d65746164617461547970654465664d61784c656e67746810100020000000444d617841737365744d65646961746f72731010040000000001050a1a4c4361706974616c446973747269627574696f6e014c4361706974616c446973747269627574696f6e0c34446973747269627574696f6e73000104029902a10204000c350120416c6c206361706974616c20646973747269627574696f6e732c207469656420746f207468656972207265737065637469766520636f72706f7261746520616374696f6e732028434173292e005c20284341496429203d3e20446973747269627574696f6e28486f6c6465725061696401010402090a390104000c8c2048617320616e20617373657420686f6c646572206265656e2070616964207965743f00a42028434149642c2044494429202d3e2057617320444944207061696420696e2074686520434149643f3853746f7261676556657273696f6e01000d0a040004442053746f726167652076657273696f6e2e01bd060191020001110a1b28436865636b706f696e740128436865636b706f696e74302c546f74616c537570706c790101080205150a1840000000000000000000000000000000000cb420546f74616c20737570706c79206f662074686520746f6b656e2061742074686520636865636b706f696e742e00010120285b6041737365744944605d2c20636865636b706f696e74496429202d3e20746f74616c20737570706c7920617420676976656e20636865636b706f696e741c42616c616e63650101080205190a1840000000000000000000000000000000000c882042616c616e6365206f66206120444944206174206120636865636b706f696e742e00190120285b6041737365744944605d2c206469642c20636865636b706f696e7420494429202d3e2042616c616e6365206f66206120444944206174206120636865636b706f696e7450436865636b706f696e74496453657175656e636501010402a8ad02200000000000000000108c20436865636b706f696e74732049442067656e657261746f722073657175656e63652ea8204944206f6620666972737420636865636b706f696e74206973203120696e7374656164206f6620302e009020285b6041737365744944605d29202d3e206e6f2e206f6620636865636b706f696e74733842616c616e6365557064617465730101080205e1091d0a040008bc20436865636b706f696e747320776865726520612044494427732062616c616e63652077617320757064617465642e050120285b6041737365744944605d2c2064696429202d3e205b636865636b706f696e7420494420776865726520757365722062616c616e6365206368616e6765645d2854696d657374616d70730101080205150a28200000000000000000185c20436865636b706f696e742074696d657374616d70732e000901204576657279207363686564756c652d6f726967696e6174656420636865636b706f696e74206d6170732069747320494420746f20697473206475652074696d652e210120457665727920636865636b706f696e74206d616e75616c6c792063726561746564206d6170732069747320494420746f207468652074696d65206f66207265636f7264696e672e00e420285b6041737365744944605d29202d3e2028636865636b706f696e7420494429202d3e20636865636b706f696e742074696d657374616d70585363686564756c65734d6178436f6d706c657869747901002820000000000000000004e420546865206d6178696d756d20636f6d706c657869747920616c6c6f77656420666f7220616e2061737365742773207363686564756c65732e485363686564756c65496453657175656e636501010402a8b1022000000000000000000cb020436865636b706f696e74207363686564756c652049442073657175656e636520666f72206173736574732e007420285b6041737365744944605d29202d3e207363686564756c65204944544361636865644e657874436865636b706f696e747300010402a8210a040014a820436163686564206e65787420636865636b706f696e7420666f722065616368207363686564756c652e002d012054686973206973207573656420746f20717569636b6c792066696e6420746865206e65787420636865636b706f696e742066726f6d20612061737365742773207363686564756c65732e008820285b6041737365744944605d29202d3e206e65787420636865636b706f696e7473505363686564756c6564436865636b706f696e74730001080205310ab50204000c5c205363686564756c656420636865636b706f696e74732e00cc20285b6041737365744944605d2c207363686564756c6520494429202d3e207363686564756c6520636865636b706f696e7473405363686564756c65526566436f756e740101080205310a10100000000020010120486f77206d616e7920227374726f6e6722207265666572656e6365732061726520746865726520746f206120676976656e20605363686564756c654964603f00fc205468652070726573656e6365206f66206120227374726f6e6722207265666572656e63652c20696e207468652073656e7365206f66206052633c543e602ce020656e7461696c73207468617420746865207265666572656e636564207363686564756c652063616e6e6f742062652072656d6f7665642ed820546875732c206173206c6f6e6720617320607374726f6e675f7265665f636f756e74287363686564756c655f696429203e2030602cac206072656d6f76655f7363686564756c65287363686564756c655f696429602077696c6c206572726f722e00bc20285b6041737365744944605d2c207363686564756c6520494429202d3e207374726f6e672072656620636f756e74385363686564756c65506f696e74730101080205310a1d0a04000cc420416c6c2074686520636865636b706f696e7473206120676976656e207363686564756c65206f726967696e617465642e00b820285b6041737365744944605d2c207363686564756c6520494429202d3e205b636865636b706f696e742049445d3853746f7261676556657273696f6e0100350a040004442053746f726167652076657273696f6e2e01c50601a9020001390a1c44436f6d706c69616e63654d616e616765720144436f6d706c69616e63654d616e616765720c404173736574436f6d706c69616e63657301010402a83d0a08000004f420436f6d706c69616e636520666f7220616e20617373657420285b6041737365744944605d202d3e205b604173736574436f6d706c69616e6365605d294854727573746564436c61696d49737375657201010402a8dd02040004f0204c697374206f66207472757374656420636c61696d20697373756572205b6041737365744944605d202d3e20497373756572204964656e746974793853746f7261676556657273696f6e0100410a040004442053746f726167652076657273696f6e2e01c90601c10204584d6178436f6e646974696f6e436f6d706c65786974791010320000000001450a1d3c436f72706f72617465416374696f6e013c436f72706f72617465416374696f6e24404d617844657461696c734c656e67746801001010000000001c5d012044657465726d696e657320746865206d6178696d756d206e756d626572206f6620627974657320746861742074686520667265652d666f726d206064657461696c7360206f6620612043412063616e2073746f72652e002901204e6f746520746861742074686973206973206e6f7420746865206e756d626572206f662060636861726073206f7220746865206e756d626572206f66205b6772617068656d65735d2e4101205768696c652074686973206d617920626520756e6e61747572616c20696e207465726d73206f662068756d616e20756e6465727374616e64696e67206f66206120746578742773206c656e6774682c6501206974206d6f726520636c6f73656c79207265666c656374732061637475616c2073746f7261676520636f73747320286027612760206973206368656170657220746f2073746f7265207468616e20616e20656d6f6a69292e00d0205b6772617068656d65735d3a2068747470733a2f2f656e2e77696b6970656469612e6f72672f77696b692f4772617068656d655c44656661756c745461726765744964656e74697469657301010402a8f90208000110ec20546865206964656e7469746965732074617267657465642062792064656661756c7420666f722043417320666f7220746869732061737365742c8c2065697468657220746f206265206578636c75646564206f7220696e636c756465642e007c202841737365744944203d3e20746172676574206964656e746974696573295444656661756c7457697468686f6c64696e6754617801010402a8a502100000000020a901205468652064656661756c7420616d6f756e74206f662074617820746f2077697468686f6c6420282277697468686f6c64696e6720746178222c2057542920666f722074686973206173736574207768656e20646973747269627574696e67206469766964656e64732e00350120546f20756e6465727374616e642077697468686f6c64696e67207461782c20652e672e2c206c6574277320617373756d65207468617420796f7520686f6c642041434d45207368617265732ec42041434d45206e6f77206465636964657320746f2064697374726962757465203130302053454b20746f20416c6963652e590120416c696365206c6976657320696e2053776564656e2c20736f20536b617474657665726b6574202874686520537765646973682074617820617574686f72697479292077616e747320333025206f6620746861742e5d01205468656e2074686f736520313030202a2033302520617265207769746868656c642066726f6d20416c6963652c20616e642041434d452077696c6c2073656e64207468656d20746f20536b617474657665726b65742e006c202841737365744944203d3e202520746f2077697468686f6c64294444696457697468686f6c64696e6754617801010402a819030400104d012054686520616d6f756e74206f662074617820746f2077697468686f6c6420282277697468686f6c64696e6720746178222c2057542920666f722061206365727461696e20417373657449442078204449442e6d0120496620616e20656e7472792065786973747320666f722061206365727461696e204449442c206974206f7665727269646573207468652064656661756c7420696e206044656661756c7457697468686f6c64696e67546178602e008c202841737365744944203d3e205b286469642c202520746f2077697468686f6c64295d304341496453657175656e636501010402a89d02100000000008b820546865206e657874207065722d60417373657449446020434120494420696e207468652073657175656e63652e5101205468652066756c6c20494420697320646566696e6564206173206120636f6d62696e6174696f6e206f662060417373657449446020616e642061206e756d62657220696e20746869732073657175656e63652e40436f72706f72617465416374696f6e730001080205490a05030400146c20416c6c207265636f72646564204341732074687573206661722ea4204f6e6c792067656e6572696320696e666f726d6174696f6e2069732073746f72656420686572652e7d01205370656369666963206043414b696e6460732c20652e672e2c2062656e656669747320616e6420636f72706f726174652062616c6c6f74732c206d617920757365206164646974696f6e616c206f6e2d636861696e2073746f726167652e00b8202841737365744944203d3e206c6f63616c204944203d3e2074686520636f72706f7261746520616374696f6e29244341446f634c696e6b0101040299022503040014d0204173736f63696174696f6e732066726f6d2043417320746f2060446f63756d656e74607320766961207468656972204944732e5c202843414964203d3e205b446f63756d656e7449645d29000901205468652060436f72706f72617465416374696f6e7360206d61702073746f726573206041737365744944203d3e204c6f63616c4964203d3e20546865204341602c290120736f2077652063616e20696e666572206041737365744944203d3e2043414964602e205468657265666f72652c20776520646f6e2774206e656564206120646f75626c65206d61702e1c44657461696c730101040299022103040008e8204173736f6369617465732064657461696c7320696e20667265652d666f726d207465787420776974682061204341206279206974732049442e50202843414964203d3e20434144657461696c73293853746f7261676556657273696f6e01004d0a040004442053746f726167652076657273696f6e2e01cd0601f50208304d61785461726765744964731010e803000000284d6178446964576874731010e80300000001510a1e3c436f72706f7261746542616c6c6f74013c436f72706f7261746542616c6c6f741c144d65746173000104029902310304000c80204d65746164617461206f66206120636f72706f726174652062616c6c6f742e005420284341496429203d3e2042616c6c6f744d6574612854696d6552616e6765730001040299022d03040010e42054696d652064657461696c73206f66206120636f72706f726174652062616c6c6f74206173736f636961746564207769746820612043412ed0205468652074696d657374616d70732064656e6f7465207768656e20766f74696e672073746172747320616e642073746f70732e006820284341496429203d3e2042616c6c6f7454696d6552616e6765404d6f74696f6e4e756d43686f69636573010104029902550a040024c82053746f72657320686f77206d616e792063686f696365732074686572652061726520696e2065616368206d6f74696f6e2e00250120417420616c6c2074696d65732c2074686520696e76617269616e7420686f6c6473207468617420606d6f74696f6e5f63686f696365735b6964785d6020697320657175616c20746f310120606d657461732e756e7772617028292e6d6f74696f6e735b6964785d2e63686f696365732e6c656e2829602e20546861742069732c2074686973206973206a75737420612063616368652c1101207573656420746f2061766f6964206665746368696e6720616c6c20746865206d6f74696f6e732077697468207468656972206173736f6369617465642074657874732e0001012060753136602063686f696365732073686f756c64206265206d6f7265207468616e20656e6f75676820746f20666974207265616c207573652063617365732e00b020284341496429203d3e204e756d626572206f662063686f6963657320696e2065616368206d6f74696f6e2e0c5243560101040299023901040010dc2049732072616e6b65642063686f69636520766f74696e6720285243562920656e61626c656420666f7220746869732062616c6c6f743f650120466f7220616e20756e6465727374616e64696e67206f6620686f77205243562069732068616e646c65642c20736565206e6f7465206f6e206042616c6c6f74566f7465602773206066616c6c6261636b60206669656c642e003c20284341496429203d3e20626f6f6c1c526573756c7473010104029902590a04001cb02053746f7265732074686520746f74616c20766f74652074616c6c79206f6e20656163682063686f6963652e006820524356206973206e6f74206163636f756e74656420666f722cd02061732074686572652061726520746f6f206d616e792077616e747320746f20696e74657270726574207468652067726170682c9c20616e64206265636175736520697420776f756c64206e6f7420626520656666696369656e742e008420284341496429203d3e205b63757272656e7420766f746520776569676874735d14566f7465730101080206090a5103040018ac2053746f726573206561636820444944277320766f74657320696e206120676976656e2062616c6c6f742ef8205365652074686520646f63756d656e746174696f6e206f66206042616c6c6f74566f74656020666f72206e6f746573206f6e2073656d616e746963732e008420284341496429203d3e202844494429203d3e205b766f7465207765696768745d001d012055736572206d75737420656e746572203020766f746520776569676874206966207468657920646f6e27742077616e7420746f20766f746520666f7220612063686f6963652e3853746f7261676556657273696f6e01005d0a040004442053746f726167652076657273696f6e2e01e5060129030001610a1f2c5065726d697373696f6e730000000001650a201050697073011050697073584c5072756e65486973746f726963616c5069707301003901040004fc2044657465726d696e6573207768657468657220686973746f726963616c20504950206461746120697320706572736973746564206f722072656d6f766564584d696e696d756d50726f706f73616c4465706f7369740100184000000000000000000000000000000000041d0120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f7220636f6d6d756e69747920504950206372656174696f6e2e5844656661756c74456e6163746d656e74506572696f6401001010000000000439012044656661756c7420656e6163746d656e7420706572696f6420746861742077696c6c2062652075736520616674657220612070726f706f73616c2069732061636365707465642062792047432e4050656e64696e6750697045787069727901005901040108f420486f77206d616e7920626c6f636b732077696c6c2069742074616b652c2061667465722061206050656e64696e67602050495020657870697265732cf420617373756d696e6720697420686173206e6f74207472616e736974696f6e656420746f20616e6f74686572206050726f706f73616c5374617465603f3c4d6178506970536b6970436f756e740100080400048901204d6178696d756d2074696d65732061205049502063616e20626520736b6970706564206265666f72652074726967676572696e67206043616e6e6f74536b69705069706020696e2060656e6163745f736e617073686f745f726573756c7473602e384163746976655069704c696d6974010010100000000008c420546865206d6178696d756d20616c6c6f776564206e756d62657220666f722060416374697665506970436f756e74602e0101204f6e636520726561636865642c206e657720504950732063616e6e6f742062652070726f706f73656420627920636f6d6d756e697479206d656d626572732e34506970496453657175656e636501006d0310000000000409012050726f706f73616c7320736f206661722e2069642063616e206265207573656420746f206b65657020747261636b206f662050495073206f66662d636861696e2e48536e617073686f74496453657175656e6365010081031000000000041d0120536e617073686f747320736f206661722e2069642063616e206265207573656420746f206b65657020747261636b206f6620736e617073686f7473206f66662d636861696e2e38416374697665506970436f756e74010010100000000004c820546f74616c20636f756e74206f662063757272656e742070656e64696e67206f72207363686564756c656420504950732e4050726f706f73616c4d65746164617461000104056d03690a0400049820546865206d65746164617461206f6620746865206163746976652070726f706f73616c732e204465706f7369747300010805056d0a710a040008842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e8c2070726f706f73616c202869642c2070726f706f73657229202d3e206465706f7369742450726f706f73616c73000104056d03750a040008c42041637475616c2070726f706f73616c20666f72206120676976656e2069642c20696620697427732063757272656e742e602070726f706f73616c206964202d3e2070726f706f73616c3850726f706f73616c526573756c74010104056d03790aa00000000000000000000000000000000000000000000000000000000000000000000000000000000008d420506f6c796d657368566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e682070726f706f73616c206964202d3e20766f746520636f756e743450726f706f73616c566f74657300010805056d0a7d0a040008050120566f746573207065722050726f706f73616c20616e64206163636f756e742e205573656420746f2061766f696420646f75626c6520766f74652069737375652e7c202870726f706f73616c2069642c206163636f756e7429202d3e20566f746534506970546f5363686564756c65000104056d0310040004fc204d617073205049507320746f2074686520626c6f636b20617420776869636820746865792077696c6c2062652065786563757465642c20696620616e792e244c697665517565756501008503040018cc2041206c697665207072696f7269747920717565756520286c6f77657374207072696f7269747920617420696e646578203029a0206f662070656e64696e67205049507320757020746f2074686520616374697665206c696d69742ef4205072696f7269747920697320646566696e65642062792074686520607765696768746020696e207468652060536e617073686f74746564506970602e00450120556e6c696b652060536e617073686f745175657565602c2074686973207175657565206973206c6976652c2067657474696e6720757064617465642077697468206561636820766f746520636173742e2d012054686520736e617073686f74206973207468657265666f726520657373656e7469616c6c79206120706f696e742d696e2d74696d6520636c6f6e65206f6620746869732071756575652e34536e617073686f74517565756501008503040014590120546865207072696f7269747920717565756520286c6f77657374207072696f7269747920617420696e646578203029206f6620504950732061742074686520706f696e74206f6620736e617073686f7474696e672ef4205072696f7269747920697320646566696e65642062792074686520607765696768746020696e207468652060536e617073686f74746564506970602e000901204120717565756564205049502063616e20626520736b69707065642e20446f696e6720736f2062756d70732074686520607069705f736b69705f636f756e74602e3501204f6e636520612028636f6e666967757261626c652920746872657368686f6c642069732065786365656465642c2061205049502063616e6e6f7420626520736b697070656420616761696e2e30536e617073686f744d6574610000810a040004bc20546865206d65746164617461206f662074686520736e617073686f742c206966207468657265206973206f6e652e30506970536b6970436f756e74010104056d0308040008d020546865206e756d626572206f662074696d65732061206365727461696e2050495020686173206265656e20736b69707065642e3501204f6e636520612028636f6e666967757261626c652920746872657368686f6c642069732065786365656465642c2061205049502063616e6e6f7420626520736b697070656420616761696e2e34436f6d6d69747465655069707301009d03040008d420416c6c206578697374696e672050495073207768657265207468652070726f706f736572206973206120636f6d6d69747465652e39012054686973206c6973742069732061206361636865206f6620616c6c2069647320696e206050726f706f73616c73602077697468206050726f706f7365723a3a436f6d6d6974746565285f29602e3850726f706f73616c537461746573000104056d037d030400087c2050726f706f73616c20737461746520666f72206120676976656e2069642e742070726f706f73616c206964202d3e2070726f706f73616c53746174653853746f7261676556657273696f6e0100850a04000001e9060161030001890a2124506f7274666f6c696f0124506f7274666f6c696f344c4e657874506f7274666f6c696f4e756d6265720101040680f020010000000000000004cc20546865206e65787420706f7274666f6c696f2073657175656e6365206e756d626572206f6620616e206964656e746974792e28506f7274666f6c696f7300010806058d0aa50304000c41012054686520736574206f66206578697374696e6720706f7274666f6c696f732077697468207468656972206e616d65732e2049662061206365727461696e2070616972206f6620612044494420616e64590120706f7274666f6c696f206e756d626572206d61707320746f20604e6f6e6560207468656e2073756368206120706f7274666f6c696f20646f65736e27742065786973742e20436f6e76657273656c792c206966206135012070616972206d61707320746f2060536f6d65286e616d652960207468656e2073756368206120706f7274666f6c696f2065786973747320616e642069732063616c6c656420606e616d65602e304e616d65546f4e756d6265720001080602910af0040008e420496e7665727365206d6170206f662060506f7274666f6c696f7360207573656420746f20656e737572652062696a6563746976697469792ca420616e6420756e697175656e657373206f66206e616d657320696e2060506f7274666f6c696f73602e4c506f7274666f6c696f4173736574436f756e7401010405e82820000000000000000004fc20486f77206d616e79206173736574732077697468206e6f6e2d7a65726f2062616c616e6365207468697320706f7274666f6c696f20636f6e7461696e732e58506f7274666f6c696f417373657442616c616e6365730101080502950a1840000000000000000000000000000000000488205468652061737365742062616c616e636573206f6620706f7274666f6c696f732e54506f7274666f6c696f4c6f636b65644173736574730101080502950a18400000000000000000000000000000000008a020416d6f756e74206f6620617373657473206c6f636b656420696e206120706f7274666f6c696f2e2d01205468657365206173736574732073686f7720757020696e20706f7274666f6c696f2062616c616e6365206275742063616e206e6f74206265207472616e7366657272656420617761792e48506f7274666f6c696f437573746f6469616e00010405e88004000481012054686520637573746f6469616e206f66206120706172746963756c617220706f7274666f6c696f2e204e6f6e6520696d706c696573207468617420746865206964656e74697479206f776e65722069732074686520637573746f6469616e2e4c506f7274666f6c696f73496e437573746f64790101080605990a390104000c550120547261636b7320616c6c2074686520706f7274666f6c696f7320696e20637573746f6479206f66206120706172746963756c6172206964656e746974792e204f6e6c79207573656420627920746865205549732ea501205768656e206074727565602069732073746f726564206173207468652076616c756520666f72206120676976656e2060286469642c2070696429602c206974206d65616e73207468617420607069646020697320696e20637573746f6479206f662060646964602ea501206066616c7365602076616c75657320617265206e65766572206578706c696369746c792073746f72656420696e20746865206d61702c20616e642061726520696e737465616420696e6665727265642062792074686520616273656e6365206f662061206b65792e30506f7274666f6c696f4e465401010805029d0a39010400049420546865206e6674206173736f63696174656420746f2074686520706f7274666f6c696f2e48506f7274666f6c696f4c6f636b65644e465401010805029d0a39010400049820416c6c206c6f636b6564206e667420666f72206120676976656e20706f7274666f6c696f2e54507265417070726f766564506f7274666f6c696f730101080502950a3901040004450120416c6c20706f7274666f6c696f73207468617420646f6e2774206e65656420746f2061666669726d2074686520726563656976656d656e74206f66206120676976656e205b6041737365744944605d2e44416c6c6f776564437573746f6469616e730101080606dd0539010400043d0120437573746f6469616e7320616c6c6f77656420746f2063726561746520616e642074616b6520637573746f6479206f6620706f7274666f6c696f73206f6e20616e206964277320626568616c662e3853746f7261676556657273696f6e0100a50a040004442053746f726167652076657273696f6e2e01f90601a1030001a90a222c50726f746f636f6c466565012c50726f746f636f6c4665650820426173654665657301010405090718400000000000000000000000000000000004150120546865206d617070696e67206f66206f7065726174696f6e206e616d657320746f2074686520626173652066656573206f662074686f7365206f7065726174696f6e732e2c436f656666696369656e740100c503200100000001000000041501205468652066656520636f656666696369656e74206173206120706f73697469766520726174696f6e616c20286e756d657261746f722c2064656e6f6d696e61746f72292e01050701c1030001ad0a23245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e64610101040510b10a0400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504cd03040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e010d0701c90308344d6178696d756d57656967687420400b00806e87740113cccccccccccccccc04290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101032000000041d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e01c90a2428536574746c656d656e740128536574746c656d656e74582456656e7565496e666f00010405d903cd0a0400049820496e666f2061626f757420612076656e75652e2076656e75655f6964202d3e2076656e75651c44657461696c7301010405d903dd03040008e420467265652d666f726d20746578742061626f757420612076656e75652e2076656e75655f6964202d3e206056656e756544657461696c736060204f6e6c79206e656564656420666f72207468652055492e4456656e7565496e737472756374696f6e730101080505d10a550100107020496e737472756374696f6e7320756e64657220612076656e75652e60204f6e6c79206e656564656420666f72207468652055492e00842076656e75655f6964202d3e20696e737472756374696f6e5f6964202d3e2028293056656e75655369676e6572730101080505d50a3901040004e4205369676e65727320616c6c6f776564206279207468652076656e75652e202876656e75655f69642c207369676e657229202d3e20626f6f6c285573657256656e7565730101080505d90a550100147101204172726179206f662076656e756573206372656174656420627920616e206964656e746974792e204f6e6c79206e656564656420666f72207468652055492e204964656e746974794964202d3e205665633c76656e75655f69643e782056656e7565732063726561746520627920616e206964656e746974792e60204f6e6c79206e656564656420666f72207468652055492e0060206964656e74697479202d3e2076656e75655f696420282948496e737472756374696f6e44657461696c73010104058902dd0a34000000000000000000000000000411012044657461696c732061626f757420616e20696e737472756374696f6e2e20696e737472756374696f6e5f6964202d3e20696e737472756374696f6e5f64657461696c7350496e737472756374696f6e4c65675374617475730101080505e10ae50a040004310120537461747573206f662061206c656720756e64657220616e20696e737472756374696f6e2e2028696e737472756374696f6e5f69642c206c65675f696429202d3e204c656753746174757364496e737472756374696f6e41666669726d7350656e64696e6701010405890228200000000000000000048101204e756d626572206f662061666669726d6174696f6e732070656e64696e67206265666f726520696e737472756374696f6e2069732065786563757465642e20696e737472756374696f6e5f6964202d3e2061666669726d5f70656e64696e673c41666669726d7352656365697665640101080505e90aed0a040004990120547261636b732061666669726d6174696f6e7320726563656976656420666f7220616e20696e737472756374696f6e2e2028696e737472756374696f6e5f69642c20636f756e7465725f706172747929202d3e2041666669726d6174696f6e537461747573405573657241666669726d6174696f6e730101080505f10aed0a04000855012048656c70732061207573657220747261636b2074686569722070656e64696e6720696e737472756374696f6e7320616e642061666669726d6174696f6e7320286f6e6c79206e656564656420666f72205549292ed42028636f756e7465725f70617274792c20696e737472756374696f6e5f696429202d3e2041666669726d6174696f6e537461747573305265636569707473557365640101080502fd083901040004150120547261636b7320726564656d7074696f6e206f662072656365697074732e20287369676e65722c20726563656970745f75696429202d3e20726563656970745f757365643856656e756546696c746572696e6701010402a83901040004010220547261636b73206966206120746f6b656e2068617320656e61626c65642066696c746572696e672076656e75657320746861742063616e2063726561746520696e737472756374696f6e7320696e766f6c76696e6720746865697220746f6b656e2e2041737365744944202d3e2066696c746572696e675f656e61626c65643856656e7565416c6c6f774c6973740101080205f50a3901040008c1012056656e75657320746861742061726520616c6c6f77656420746f2063726561746520696e737472756374696f6e7320696e766f6c76696e67206120706172746963756c61722061737365742e204f6e6c7920757365642069662066696c746572696e6720697320656e61626c65642e8c20285b6041737365744944605d2c2076656e75655f696429202d3e20616c6c6f7765643056656e7565436f756e7465720100d903200000000000000000041901204e756d626572206f662076656e75657320696e207468652073797374656d202849742773206f6e65206d6f7265207468616e207468652061637475616c206e756d6265722948496e737472756374696f6e436f756e74657201008902200000000000000000043101204e756d626572206f6620696e737472756374696f6e7320696e207468652073797374656d202849742773206f6e65206d6f7265207468616e207468652061637475616c206e756d6265722940496e737472756374696f6e4d656d6f73000104058902880400044420496e737472756374696f6e206d656d6f4c496e737472756374696f6e5374617475736573010104058902f90a040004e820496e737472756374696f6e2073746174757365732e20696e737472756374696f6e5f6964202d3e20496e737472756374696f6e5374617475733c496e737472756374696f6e4c6567730001080505e10a0104040004ec204c65677320756e64657220616e20696e737472756374696f6e2e2028696e737472756374696f6e5f69642c206c65675f696429202d3e204c6567504f6666436861696e41666669726d6174696f6e730101080505e10aed0a040004d90120547261636b73207468652061666669726d6174696f6e2073746174757320666f72206f6666636861696e206c65677320696e206120696e737472756374696f6e2e205b6028496e737472756374696f6e49642c204c6567496429605d202d3e205b6041666669726d6174696f6e537461747573605d504e756d6265724f6656656e75655369676e65727301010405d90310100000000004b420547261636b7320746865206e756d626572206f66207369676e65727320656163682076656e7565206861732e80496e737472756374696f6e4d65646961746f727341666669726d6174696f6e730101080506fd0a010b040004a8205468652073746174757320666f7220746865206d65646961746f72732061666669726d6174696f6e2e3853746f7261676556657273696f6e0100050b040004442053746f726167652076657273696f6e2e01150701d50314644d61784e756d6265724f664f6666436861696e41737365747310100a00000000644d61784e756d6265724f6646756e6769626c6541737365747310100a00000000544d61784e756d6265724f664e4654735065724c656710100a000000003c4d61784e756d6265724f664e465473101064000000005c4d61784e756d6265724f6656656e75655369676e6572731010320000000001090b25285374617469737469637301285374617469737469637314404163746976654173736574537461747301010402a80d0b040004c4204d617073206120736574206f66205b605374617454797065605d20666f722065616368205b6041737365744944605d2e28417373657453746174730101080202110b18400000000000000000000000000000000004342041737365742073746174732e6041737365745472616e73666572436f6d706c69616e63657301010402a8190b08000004d820546865205b6041737365745472616e73666572436f6d706c69616e6365605d20666f722065616368205b6041737365744944605d2e7c5472616e73666572436f6e646974696f6e4578656d7074456e7469746965730101080202210b3901040004c420456e746974696573206578656d70742066726f6d2061205472616e7366657220436f6d706c69616e63652072756c652e3853746f7261676556657273696f6e0100250b0400046c2053746f72616765206d6967726174696f6e2076657273696f6e2e01410701050408404d61785374617473506572417373657410100a00000000744d61785472616e73666572436f6e646974696f6e7350657241737365741010040000000001290b260c53746f010c53746f102c46756e647261697365727300010802052d0b5104040008b020416c6c2066756e64726169736572732074686174206172652063757272656e746c792072756e6e696e672e9c2028417373657449442c2066756e647261697365725f696429202d3e2046756e647261697365723c46756e64726169736572436f756e7401010402a84904200000000000000000049c20546f74616c2066756e6472616973657273206372656174656420666f72206120746f6b656e2e3c46756e647261697365724e616d657300010802052d0b4d04040008b4204e616d6520666f72207468652046756e647261697365722e204f6e6c792075736564206f6666636861696e2eb02028417373657449442c2066756e647261697365725f696429202d3e2046756e64726169736572206e616d653853746f7261676556657273696f6e0100310b0400046c2053746f72616765206d6967726174696f6e2076657273696f6e2e0151070145040001350b27205472656173757279000161070161040001390b281c5574696c697479011c5574696c69747904184e6f6e6365730101040500282000000000000000000858204e6f6e636520666f72206072656c61795f7478602e4420504f4c594d4553483a2061646465642e016d07016504044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e013d0b2910426173650001910701750404184d61784c656e1010000800000001410b2a3845787465726e616c4167656e7473013845787465726e616c4167656e747318304147496453657175656e636501010402a83501100000000010a820546865206e657874207065722d617373657420414720494420696e207468652073657175656e63652e005101205468652066756c6c20494420697320646566696e6564206173206120636f6d62696e6174696f6e206f662060417373657449446020616e642061206e756d62657220696e20746869732073657175656e63652c90207768696368207374617274732066726f6d20312c20726174686572207468616e20302e1c4167656e744f660101080202f909550100040d01204d61707320616e206167656e742028604964656e746974794964602920746f20616c6c2061737365747320746865792062656c6f6e6720746f2c20696620616e792e3047726f75704f664167656e740001080205e10931010400043d01204d617073206167656e74732028604964656e746974794964602920666f7220616e2060417373657449446020746f207768617420414720746865792062656c6f6e6720746f2c20696620616e792e344e756d46756c6c4167656e747301010402a810100000000004e4204d61707320616e2060417373657449446020746f20746865206e756d626572206f66206046756c6c60206167656e747320666f722069742e4047726f75705065726d697373696f6e730001080205450bb8040004650120466f7220637573746f6d20414773206f6620616e206041737365744944602c206d61707320746f2077686174207065726d697373696f6e7320616e206167656e7420696e207468617420414720776f756c6420686176652e3853746f7261676556657273696f6e0100490b040000019507017d0400014d0b2b1c52656c61796572011c52656c6179657204245375627369646965730001040200510b040018ec20546865207375627369647920666f7220612060757365725f6b657960206966207468657920617265206265696e6720737562736964697365642c882061732061206d61702060757365725f6b657960203d3e206053756273696479602e0009012041206b65792063616e206f6e6c792068617665206f6e65207375627369647920617420612074696d652e2020546f206368616e67652073756273696469736572731d012061206b6579206e6565647320746f2063616c6c206072656d6f76655f706179696e675f6b65796020746f2072656d6f7665207468652063757272656e7420737562736964792ca4206265666f726520746865792063616e206163636570742061206e657720737562736964697365722e0199070181040001550b2c24436f6e7472616374730124436f6e74726163747318305072697374696e65436f6465000104062c590b04000465012041206d617070696e672066726f6d20616e206f726967696e616c20636f6465206861736820746f20746865206f726967696e616c20636f64652c20756e746f756368656420627920696e737472756d656e746174696f6e2e2c436f646553746f72616765000104062c5d0b04000465012041206d617070696e67206265747765656e20616e206f726967696e616c20636f6465206861736820616e6420696e737472756d656e746564207761736d20636f64652c20726561647920666f7220657865637574696f6e2e2c4f776e6572496e666f4f66000104062c650b0400040d012041206d617070696e67206265747765656e20616e206f726967696e616c20636f6465206861736820616e6420697473206f776e657220696e666f726d6174696f6e2e144e6f6e6365010028200000000000000000581d0120546869732069732061202a2a6d6f6e6f746f6e69632a2a20636f756e74657220696e6372656d656e746564206f6e20636f6e747261637420696e7374616e74696174696f6e2e0005012054686973206973207573656420696e206f7264657220746f2067656e657261746520756e6971756520747269652069647320666f7220636f6e7472616374732e2901205468652074726965206964206f662061206e657720636f6e74726163742069732063616c63756c617465642066726f6d2068617368286163636f756e745f69642c206e6f6e6365292e350120546865206e6f6e63652069732072657175697265642062656361757365206f74686572776973652074686520666f6c6c6f77696e672073657175656e636520776f756c64206c65616420746f84206120706f737369626c6520636f6c6c6973696f6e206f662073746f726167653a006820312e204372656174652061206e657720636f6e74726163742e6c20322e205465726d696e6174652074686520636f6e74726163742efc20332e20496d6d6564696174656c792072656372656174652074686520636f6e74726163742077697468207468652073616d65206163636f756e745f69642e00450120546869732069732062616420626563617573652074686520636f6e74656e7473206f6620612074726965206172652064656c65746564206c617a696c7920616e64207468657265206d6967687420626559012073746f72616765206f6620746865206f6c6420696e7374616e74696174696f6e207374696c6c20696e206974207768656e20746865206e657720636f6e747261637420697320637265617465642e20506c656173655901206e6f746520746861742077652063616e2774207265706c6163652074686520636f756e7465722062792074686520626c6f636b206e756d6265722062656361757365207468652073657175656e63652061626f766551012063616e2068617070656e20696e207468652073616d6520626c6f636b2e20576520616c736f2063616e2774206b65657020746865206163636f756e7420636f756e74657220696e206d656d6f7279206f6e6c79490120626563617573652073746f7261676520697320746865206f6e6c792077617920746f20636f6d6d756e6963617465206163726f737320646966666572656e742065787472696e7369637320696e20746865302073616d6520626c6f636b2e001c2023204e6f7465003d0120446f206e6f742075736520697420746f2064657465726d696e6520746865206e756d626572206f6620636f6e7472616374732e20497420776f6e27742062652064656372656d656e74656420696664206120636f6e74726163742069732064657374726f7965642e38436f6e7472616374496e666f4f660001040500690b04000ca82054686520636f6465206173736f6369617465642077697468206120676976656e206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e3444656c6574696f6e51756575650100710b040010c8204576696374656420636f6e7472616374732074686174206177616974206368696c6420747269652064656c6574696f6e2e004901204368696c6420747269652064656c6574696f6e2069732061206865617679206f7065726174696f6e20646570656e64696e67206f6e2074686520616d6f756e74206f662073746f72616765206974656d7359012073746f72656420696e207361696420747269652e205468657265666f72652074686973206f7065726174696f6e20697320706572666f726d6564206c617a696c7920696e20606f6e5f696e697469616c697a65602e019d0701850424205363686564756c657d0b2d080400000000010000000400008000000010000000001000000001000020000000004000000400000000000000ae0800007a1300005a140000d8040000fa1a0000f1080000cd0a0000b312000025000000198e0000dcad0000e208000032020000e807000033090000b60700005c180000021f00007510000061abc700660d0000200c0000f40b0000e60c0000fb0c0000270c0000070c0000c1070000a408000052080000fe070000b2080000660800000a07000049070000140800001f080000900800005508000012080000230e0000290f0000e30e0000980e0000ac0700004208000052070000960800001807000077080000830700005b0700003e541900008ee2e00c00e2e6260d00561d230000966f080000be9a1900008e2619000012608d0000467b19000056d01900009e03190000dedb1a0000be235d00009a7906000096521200008901000e619406004902000384906c79002e7a980000e6420d0100e6c5673c00410800862c0d00008d0a00ee12223d007a5d010000a257010000a29a408100c6cd193d00b25801000076ed1f0d00d94c0082042f0d00255a00a2e8253d002a67010000b69d106c001689e1ff00f2cb179300e2707200009901000360ec12b0006a674e0700d91300e11300f6ea160000c90b00fece2f0000052a003a64290000a910002eac200000ad1000462ced0a00fa668f0200aa3b080000e2581200006ede060000046820436f7374207363686564756c6520616e64206c696d6974732e4844656c6574696f6e517565756544657074681010000400003c090120546865206d6178696d756d206e756d626572206f6620636f6e74726163747320746861742063616e2062652070656e64696e6720666f722064656c6574696f6e2e003d01205768656e206120636f6e74726163742069732064656c657465642062792063616c6c696e6720607365616c5f7465726d696e61746560206974206265636f6d657320696e61636365737369626c654d0120696d6d6564696174656c792c20627574207468652064656c6574696f6e206f66207468652073746f72616765206974656d732069742068617320616363756d756c6174656420697320706572666f726d65642901206c617465722e2054686520636f6e74726163742069732070757420696e746f207468652064656c6574696f6e2071756575652e205468697320646566696e657320686f77206d616e795d0120636f6e7472616374732063616e20626520717565756564207570206174207468652073616d652074696d652e2049662074686174206c696d6974206973207265616368656420607365616c5f7465726d696e6174656015012077696c6c206661696c2e2054686520616374696f6e206d757374206265207265747269656420696e2061206c6174657220626c6f636b20696e207468617420636173652e00b82054686520726561736f6e7320666f72206c696d6974696e6720746865207175657565206465707468206172653a00590120312e2054686520717565756520697320696e2073746f7261676520696e206f7264657220746f2062652070657273697374656e74206265747765656e20626c6f636b732e2057652077616e7420746f206c696d6974b4200974686520616d6f756e74206f662073746f7261676520746861742063616e20626520636f6e73756d65642e4d0120322e205468652071756575652069732073746f72656420696e206120766563746f7220616e64206e6565647320746f206265206465636f64656420617320612077686f6c65207768656e2072656164696e674501090969742061742074686520656e64206f66206561636820626c6f636b2e204c6f6e676572207175657565732074616b65206d6f72652077656967687420746f206465636f646520616e642068656e6365e809096c696d69742074686520616d6f756e74206f66206974656d7320746861742063616e2062652064656c657465642070657220626c6f636b2e4c44656c6574696f6e5765696768744c696d6974201c070088526a7400184d0120546865206d6178696d756d20616d6f756e74206f662077656967687420746861742063616e20626520636f6e73756d65642070657220626c6f636b20666f72206c617a7920747269652072656d6f76616c2e005d012054686520616d6f756e74206f66207765696768742074686174206973206465646963617465642070657220626c6f636b20746f20776f726b206f6e207468652064656c6574696f6e2071756575652e204c617267657245012076616c75657320616c6c6f77206d6f72652074726965206b65797320746f2062652064656c6574656420696e206561636820626c6f636b20627574207265647563652074686520616d6f756e74206f664101207765696768742074686174206973206c65667420666f72207472616e73616374696f6e732e20536565205b6053656c663a3a44656c6574696f6e51756575654465707468605d20666f72206d6f72659820696e666f726d6174696f6e2061626f7574207468652064656c6574696f6e2071756575652e384465706f73697450657242797465184060ea00000000000000000000000000001411012054686520616d6f756e74206f662062616c616e636520612063616c6c65722068617320746f2070617920666f7220656163682062797465206f662073746f726167652e001c2023204e6f7465002901204368616e67696e6720746869732076616c756520666f7220616e206578697374696e6720636861696e206d69676874206e65656420612073746f72616765206d6967726174696f6e2e384465706f7369745065724974656d1840f04902000000000000000000000000001405012054686520616d6f756e74206f662062616c616e636520612063616c6c65722068617320746f2070617920666f7220656163682073746f72616765206974656d2e001c2023204e6f7465002901204368616e67696e6720746869732076616c756520666f7220616e206578697374696e6720636861696e206d69676874206e65656420612073746f72616765206d6967726174696f6e2e284d6178436f64654c656e101000ec01001c5d0120546865206d6178696d756d206c656e677468206f66206120636f6e747261637420636f646520696e2062797465732e2054686973206c696d6974206170706c69657320746f2074686520696e737472756d656e74656451012076657273696f6e206f662074686520636f64652e205468657265666f72652060696e7374616e74696174655f776974685f636f6465602063616e206661696c206576656e207768656e20737570706c79696e679c2061207761736d2062696e6172792062656c6f772074686973206d6178696d756d2073697a652e005901205468652076616c75652073686f756c642062652063686f73656e206361726566756c6c792074616b696e6720696e746f20746865206163636f756e7420746865206f766572616c6c206d656d6f7279206c696d6974f020796f75722072756e74696d65206861732c2061732077656c6c20617320746865205b6d6178696d756d20616c6c6f7765642063616c6c737461636b5d012064657074685d28236173736f636961746564747970652e43616c6c537461636b292e204c6f6f6b20696e746f207468652060696e746567726974795f7465737428296020666f7220736f6d6520696e7369676874732e404d617853746f726167654b65794c656e10108000000004e020546865206d6178696d756d20616c6c6f7761626c65206c656e67746820696e20627974657320666f722073746f72616765206b6579732e5c556e73616665556e737461626c65496e7465726661636539010400241101204d616b6520636f6e74726163742063616c6c61626c652066756e6374696f6e73206d61726b65642061732060235b756e737461626c655d6020617661696c61626c652e003d0120436f6e7472616374732074686174207573652060235b756e737461626c655d602066756e6374696f6e7320776f6e27742062652061626c6520746f2062652075706c6f6164656420756e6c657373450120746869732069732073657420746f206074727565602e2054686973206973206f6e6c79206d65616e7420666f7220746573746e65747320616e6420646576206e6f64657320696e206f7264657220746f78206578706572696d656e742077697468206e65772066656174757265732e00282023205761726e696e6700c020446f202a2a6e6f742a2a2073657420746f20607472756560206f6e2070726f64756374696f6e7320636861696e732e444d617844656275674275666665724c656e10100000200004c420546865206d6178696d756d206c656e677468206f66207468652064656275672062756666657220696e2062797465732e018d0b2e44506f6c796d657368436f6e7472616374730144506f6c796d657368436f6e747261637473105043616c6c52756e74696d6557686974656c6973740101040695043901040004f42057686974656c697374206f662065787472696e7369637320616c6c6f77656420746f2062652063616c6c65642066726f6d20636f6e7472616374732e3853746f7261676556657273696f6e0100910b040004442053746f726167652076657273696f6e2e384170694e65787455706772616465000104058d04bd070400040d012053746f7265732074686520636861696e2076657273696f6e20616e6420636f6465206861736820666f7220746865206e65787420636861696e20757067726164652e3843757272656e7441706948617368000104058d04c107040004a82053746f7265732074686520636f6465206861736820666f72207468652063757272656e74206170692e01b1070189040001950b2f20507265696d6167650120507265696d6167650824537461747573466f72000104062c990b0400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f7200010406a10ba50b04000001c5070199040001a90b300c4e6674010c4e465428304e756d6265724f664e4654730101080206e10928200000000000000000049c2054686520746f74616c206e756d626572206f66204e46547320706572206964656e746974792e3c436f6c6c656374696f6e417373657401010402a8a10420000000000000000004bc2054686520636f6c6c656374696f6e20696420636f72726573706f6e64696e6720746f20656163682061737365742e28436f6c6c656374696f6e01010402a104ad0b6000000000000000000000000000000000000000000000000004c820416c6c20636f6c6c656374696f6e2064657461696c7320666f72206120676976656e20636f6c6c656374696f6e2069642e38436f6c6c656374696f6e4b65797301010402a104b10b040004d020416c6c206d616e6461746f7279206d65746164617461206b65797320666f72206120676976656e20636f6c6c656374696f6e2e344d6574616461746156616c75650101080202b50b4502040004450120546865206d657461646174612076616c7565206f6620616e206e667420676976656e2069747320636f6c6c656374696f6e2069642c20746f6b656e20696420616e64206d65746164617461206b65792e404e465473496e436f6c6c656374696f6e01010402a82820000000000000000004a42054686520746f74616c206e756d626572206f66204e46547320696e206120636f6c6c656374696f6e204e46544f776e65720001080202a10ae80400046c20547261636b7320746865206f776e6572206f6620616e204e46543043757272656e744e4654496400010402a104bd030400048820546865206c61737420604e4654496460207573656420666f7220616e204e46542e4c43757272656e74436f6c6c656374696f6e49640000a104040004c820546865206c61737420604e4654436f6c6c656374696f6e496460207573656420666f72206120636f6c6c656374696f6e2e3853746f7261676556657273696f6e0100bd0b040004442053746f726167652076657273696f6e2e01c907019d0408644d61784e756d6265724f66436f6c6c656374696f6e4b6579730804ff00504d61784e756d6265724f664e465473436f756e7410100a0000000001c10b3168456c656374696f6e50726f76696465724d756c746950686173650168456c656374696f6e50726f76696465724d756c746950686173652814526f756e64010010100100000018ac20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e00550120546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c6c20646961676e6f7374696373206f66207468652070616c6c65742e004d012054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e3043757272656e7450686173650100b1040400043c2043757272656e742070686173652e38517565756564536f6c7574696f6e0000c50b0400043d012043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e20536e617073686f740000cd0b04000c7020536e617073686f742064617461206f662074686520726f756e642e005d01205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e38446573697265645461726765747300001004000ccc2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e40536e617073686f744d657461646174610000b90804000c9820546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e645369676e65645375626d697373696f6e4e657874496e646578010010100000000024010120546865206e65787420696e64657820746f2062652061737369676e656420746f20616e20696e636f6d696e67207369676e6564207375626d697373696f6e2e007501204576657279206163636570746564207375626d697373696f6e2069732061737369676e6564206120756e6971756520696e6465783b207468617420696e64657820697320626f756e6420746f207468617420706172746963756c61726501207375626d697373696f6e20666f7220746865206475726174696f6e206f662074686520656c656374696f6e2e204f6e20656c656374696f6e2066696e616c697a6174696f6e2c20746865206e65787420696e6465782069733020726573657420746f20302e0069012057652063616e2774206a7573742075736520605369676e65645375626d697373696f6e496e64696365732e6c656e2829602c206265636175736520746861742773206120626f756e646564207365743b20706173742069747359012063617061636974792c2069742077696c6c2073696d706c792073617475726174652e2057652063616e2774206a7573742069746572617465206f76657220605369676e65645375626d697373696f6e734d6170602cf4206265636175736520697465726174696f6e20697320736c6f772e20496e73746561642c2077652073746f7265207468652076616c756520686572652e5c5369676e65645375626d697373696f6e496e64696365730100d90b0400186d01204120736f727465642c20626f756e64656420766563746f72206f6620602873636f72652c20626c6f636b5f6e756d6265722c20696e64657829602c20776865726520656163682060696e6465786020706f696e747320746f2061782076616c756520696e20605369676e65645375626d697373696f6e73602e007101205765206e65766572206e65656420746f2070726f63657373206d6f7265207468616e20612073696e676c65207369676e6564207375626d697373696f6e20617420612074696d652e205369676e6564207375626d697373696f6e7375012063616e206265207175697465206c617267652c20736f2077652772652077696c6c696e6720746f207061792074686520636f7374206f66206d756c7469706c6520646174616261736520616363657373657320746f206163636573732101207468656d206f6e6520617420612074696d6520696e7374656164206f662072656164696e6720616e64206465636f64696e6720616c6c206f66207468656d206174206f6e63652e505369676e65645375626d697373696f6e734d61700001040510e50b04001c7420556e636865636b65642c207369676e656420736f6c7574696f6e732e00690120546f676574686572207769746820605375626d697373696f6e496e6469636573602c20746869732073746f726573206120626f756e64656420736574206f6620605369676e65645375626d697373696f6e7360207768696c65ec20616c6c6f77696e6720757320746f206b656570206f6e6c7920612073696e676c65206f6e6520696e206d656d6f727920617420612074696d652e0069012054776f78206e6f74653a20746865206b6579206f6620746865206d617020697320616e206175746f2d696e6372656d656e74696e6720696e6465782077686963682075736572732063616e6e6f7420696e7370656374206f72f4206166666563743b2077652073686f756c646e2774206e65656420612063727970746f67726170686963616c6c7920736563757265206861736865722e544d696e696d756d556e7472757374656453636f72650000ad040400105d0120546865206d696e696d756d2073636f7265207468617420656163682027756e747275737465642720736f6c7574696f6e206d7573742061747461696e20696e206f7264657220746f20626520636f6e7369646572656428206665617369626c652e00b82043616e206265207365742076696120607365745f6d696e696d756d5f756e747275737465645f73636f7265602e01e50701a5044c34556e7369676e6564506861736510104b0000000480204475726174696f6e206f662074686520756e7369676e65642070686173652e2c5369676e656450686173651010000000000478204475726174696f6e206f6620746865207369676e65642070686173652e544265747465725369676e65645468726573686f6c6491011000000000084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061737820226265747465722220696e20746865205369676e65642070686173652e5c426574746572556e7369676e65645468726573686f6c64910110a0860100084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061738020226265747465722220696e2074686520556e7369676e65642070686173652e384f6666636861696e52657065617410100500000010b42054686520726570656174207468726573686f6c64206f6620746865206f6666636861696e20776f726b65722e00610120466f72206578616d706c652c20696620697420697320352c2074686174206d65616e732074686174206174206c65617374203520626c6f636b732077696c6c20656c61707365206265747765656e20617474656d7074738420746f207375626d69742074686520776f726b6572277320736f6c7574696f6e2e3c4d696e657254785072696f726974792820feffffffffffff7f04250120546865207072696f72697479206f662074686520756e7369676e6564207472616e73616374696f6e207375626d697474656420696e2074686520756e7369676e65642d7068617365505369676e65644d61785375626d697373696f6e731010000000001ce4204d6178696d756d206e756d626572206f66207369676e6564207375626d697373696f6e7320746861742063616e206265207175657565642e005501204974206973206265737420746f2061766f69642061646a757374696e67207468697320647572696e6720616e20656c656374696f6e2c20617320697420696d706163747320646f776e73747265616d2064617461650120737472756374757265732e20496e20706172746963756c61722c20605369676e65645375626d697373696f6e496e64696365733c543e6020697320626f756e646564206f6e20746869732076616c75652e20496620796f75f42075706461746520746869732076616c756520647572696e6720616e20656c656374696f6e2c20796f75205f6d7573745f20656e7375726520746861744d0120605369676e65645375626d697373696f6e496e64696365732e6c656e282960206973206c657373207468616e206f7220657175616c20746f20746865206e65772076616c75652e204f74686572776973652cf020617474656d70747320746f207375626d6974206e657720736f6c7574696f6e73206d617920636175736520612072756e74696d652070616e69632e3c5369676e65644d6178576569676874200800001494204d6178696d756d20776569676874206f662061207369676e656420736f6c7574696f6e2e005d01204966205b60436f6e6669673a3a4d696e6572436f6e666967605d206973206265696e6720696d706c656d656e74656420746f207375626d6974207369676e656420736f6c7574696f6e7320286f757473696465206f663d0120746869732070616c6c6574292c207468656e205b604d696e6572436f6e6669673a3a736f6c7574696f6e5f776569676874605d206973207573656420746f20636f6d7061726520616761696e73743020746869732076616c75652e405369676e65644d6178526566756e647310100000000004190120546865206d6178696d756d20616d6f756e74206f6620756e636865636b656420736f6c7574696f6e7320746f20726566756e64207468652063616c6c2066656520666f722e405369676e656452657761726442617365184000000000000000000000000000000000048820426173652072657761726420666f722061207369676e656420736f6c7574696f6e445369676e65644465706f7369744261736518400000000000000000000000000000000004902042617365206465706f73697420666f722061207369676e656420736f6c7574696f6e2e445369676e65644465706f7369744279746518400000000000000000000000000000000004a0205065722d62797465206465706f73697420666f722061207369676e656420736f6c7574696f6e2e4c5369676e65644465706f73697457656967687418400000000000000000000000000000000004a8205065722d776569676874206465706f73697420666f722061207369676e656420736f6c7574696f6e2e444d6178456c656374696e67566f746572731010409c00000c5d0120546865206d6178696d756d206e756d626572206f6620656c656374696e6720766f7465727320746f2070757420696e2074686520736e617073686f742e20417420746865206d6f6d656e742c20736e617073686f7473590120617265206f6e6c79206f76657220612073696e676c6520626c6f636b2c20627574206f6e6365206d756c74692d626c6f636b20656c656374696f6e732061726520696e74726f647563656420746865792077696c6c842074616b6520706c616365206f766572206d756c7469706c6520626c6f636b732e4c4d6178456c65637461626c65546172676574735d0308102704010120546865206d6178696d756d206e756d626572206f6620656c65637461626c65207461726765747320746f2070757420696e2074686520736e617073686f742e284d617857696e6e6572731010e803000010350120546865206d6178696d756d206e756d626572206f662077696e6e65727320746861742063616e20626520656c656374656420627920746869732060456c656374696f6e50726f7669646572604020696d706c656d656e746174696f6e2e005101204e6f74653a2054686973206d75737420616c776179732062652067726561746572206f7220657175616c20746f2060543a3a4461746150726f76696465723a3a646573697265645f746172676574732829602e384d696e65724d61784c656e677468101000006c0000384d696e65724d617857656967687420400b80c933df29011366666666666666a600544d696e65724d6178566f746573506572566f7465721010100000000001e90b3224546573745574696c730124546573745574696c730001d50801b9040001ed0bc8f10b042040436865636b5370656356657273696f6ef90b1038436865636b547856657273696f6efd0b1030436865636b47656e65736973010c2c38436865636b4d6f7274616c697479050c2c28436865636b4e6f6e63650d0c55012c436865636b576569676874110c5501604368617267655472616e73616374696f6e5061796d656e74190c55014453746f726543616c6c4d657461646174611d0c5501210c","id":"1"} \ No newline at end of file +{"jsonrpc":"2.0","result":"0x6d6574610ed10b000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e7444617461000010000005050014083c70616c6c65745f62616c616e6365732c4163636f756e744461746100001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000200c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6524010c75363400012870726f6f665f73697a6524010c75363400002400000628002800000506002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c01147068617365a104011450686173650001146576656e744c010445000118746f70696373a50401185665633c543e00004c0c60706f6c796d6573685f72756e74696d655f646576656c6f701c72756e74696d653052756e74696d654576656e740001ac1853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e6469636573040074017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0003002042616c616e636573040078017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404009001a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e000600204964656e74697479040094017c70616c6c65745f6964656e746974793a3a4576656e743c52756e74696d653e0007004c4364645365727669636550726f76696465727304003d0101d470616c6c65745f67726f75703a3a4576656e743c52756e74696d652c2070616c6c65745f67726f75703a3a496e7374616e6365323e00080044506f6c796d657368436f6d6d69747465650400450101f470616c6c65745f636f6d6d69747465653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6d6d69747465653a3a496e7374616e6365313e0009004c436f6d6d69747465654d656d626572736869700400550101d470616c6c65745f67726f75703a3a4576656e743c52756e74696d652c2070616c6c65745f67726f75703a3a496e7374616e6365313e000a0048546563686e6963616c436f6d6d69747465650400590101f470616c6c65745f636f6d6d69747465653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6d6d69747465653a3a496e7374616e6365333e000b0070546563686e6963616c436f6d6d69747465654d656d6265727368697004005d0101d470616c6c65745f67726f75703a3a4576656e743c52756e74696d652c2070616c6c65745f67726f75703a3a496e7374616e6365333e000c004055706772616465436f6d6d69747465650400610101f470616c6c65745f636f6d6d69747465653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6d6d69747465653a3a496e7374616e6365343e000d006855706772616465436f6d6d69747465654d656d626572736869700400650101d470616c6c65745f67726f75703a3a4576656e743c52756e74696d652c2070616c6c65745f67726f75703a3a496e7374616e6365343e000e00204d756c746953696704006901017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e000f002856616c696461746f727304007101018470616c6c65745f76616c696461746f72733a3a4576656e743c52756e74696d653e0010001c5374616b696e6704007d01017870616c6c65745f7374616b696e673a3a4576656e743c52756e74696d653e001100204f6666656e63657304008d01015870616c6c65745f6f6666656e6365733a3a4576656e740012001c53657373696f6e04009101015470616c6c65745f73657373696f6e3a3a4576656e740013001c4772616e64706104009501015470616c6c65745f6772616e6470613a3a4576656e7400150020496d4f6e6c696e650400a901018070616c6c65745f696d5f6f6e6c696e653a3a4576656e743c52756e74696d653e001700105375646f0400cd01016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e0019001441737365740400d101017070616c6c65745f61737365743a3a4576656e743c52756e74696d653e001a004c4361706974616c446973747269627574696f6e0400790201ac70616c6c65745f6361706974616c5f646973747269627574696f6e3a3a4576656e743c52756e74696d653e001b0028436865636b706f696e7404009102018470616c6c65745f636865636b706f696e743a3a4576656e743c52756e74696d653e001c0044436f6d706c69616e63654d616e616765720400a90201a470616c6c65745f636f6d706c69616e63655f6d616e616765723a3a4576656e743c52756e74696d653e001d003c436f72706f72617465416374696f6e0400dd0201a070616c6c65745f636f72706f726174655f616374696f6e733a3a4576656e743c52756e74696d653e001e003c436f72706f7261746542616c6c6f7404001103019c70616c6c65745f636f72706f726174655f62616c6c6f743a3a4576656e743c52756e74696d653e001f00105069707304004903016c70616c6c65745f706970733a3a4576656e743c52756e74696d653e00210024506f7274666f6c696f04008903018070616c6c65745f706f7274666f6c696f3a3a4576656e743c52756e74696d653e0022002c50726f746f636f6c4665650400a903018c70616c6c65745f70726f746f636f6c5f6665653a3a4576656e743c52756e74696d653e002300245363686564756c65720400b103018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e00240028536574746c656d656e740400bd03018470616c6c65745f736574746c656d656e743a3a4576656e743c52756e74696d653e00250028537461746973746963730400ed03018470616c6c65745f737461746973746963733a3a4576656e743c52756e74696d653e0026000c53746f04002d04016870616c6c65745f73746f3a3a4576656e743c52756e74696d653e00270020547265617375727904004d04017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0028001c5574696c69747904005104017870616c6c65745f7574696c6974793a3a4576656e743c52756e74696d653e002900104261736504005504014870616c6c65745f626173653a3a4576656e74002a003845787465726e616c4167656e747304005d04019870616c6c65745f65787465726e616c5f6167656e74733a3a4576656e743c52756e74696d653e002b001c52656c6179657204006104017870616c6c65745f72656c617965723a3a4576656e743c52756e74696d653e002c0024436f6e74726163747304006504018070616c6c65745f636f6e7472616374733a3a4576656e743c52756e74696d653e002e0044506f6c796d657368436f6e747261637473040071040188706f6c796d6573685f636f6e7472616374733a3a4576656e743c52756e74696d653e002f0020507265696d61676504008104017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e0030000c4e667404008504016870616c6c65745f6e66743a3a4576656e743c52756e74696d653e00310068456c656374696f6e50726f76696465724d756c7469506861736504008d0401d070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a4576656e743c52756e74696d653e00320000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874200118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b6564000900006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574780c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e7404045400011c1c456e646f7765640c007c01484f7074696f6e3c4964656e7469747949643e0000000130543a3a4163636f756e744964000018011c42616c616e63650000043101416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e205c5b6469642c206163636f756e742c20667265655f62616c616e63655d205472616e7366657218007c01484f7074696f6e3c4964656e7469747949643e0000000130543a3a4163636f756e74496400007c01484f7074696f6e3c4964656e7469747949643e0000000130543a3a4163636f756e744964000018011c42616c616e636500008401304f7074696f6e3c4d656d6f3e000104f45472616e7366657220737563636565646564202866726f6d5f6469642c2066726f6d2c20746f5f6469642c20746f2c2076616c75652c206d656d6f292e2842616c616e636553657410008001284964656e7469747949640000000130543a3a4163636f756e744964000018011c42616c616e6365000018011c42616c616e6365000204d4412062616c616e6365207761732073657420627920726f6f7420286469642c2077686f2c20667265652c207265736572766564292e504163636f756e7442616c616e63654275726e65640c008001284964656e7469747949640000000130543a3a4163636f756e744964000018011c42616c616e63650003083d01546865206163636f756e7420616e642074686520616d6f756e74206f6620756e6c6f636b65642062616c616e6365206f662074686174206163636f756e74207468617420776173206275726e65642e8c2863616c6c65722049642c2063616c6c6572206163636f756e742c20616d6f756e74292052657365727665640800000130543a3a4163636f756e744964000018011c42616c616e63650004041901536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e205c5b77686f2c2076616c75655d28556e72657365727665640800000130543a3a4163636f756e744964000018011c42616c616e63650005042101536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e205c5b77686f2c2076616c75655d485265736572766552657061747269617465641000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018011c42616c616e636500008c011853746174757300060c4d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652ea05c5b66726f6d2c20746f2c2062616c616e63652c2064657374696e6174696f6e5f7374617475735d047c54686520604576656e746020656e756d206f6620746869732070616c6c65747c04184f7074696f6e04045401800108104e6f6e6500000010536f6d650400800000010000800c4c706f6c796d6573685f7072696d6974697665732c6964656e746974795f6964284964656e746974794964000004000401385b75383b20555549445f4c454e5d00008404184f7074696f6e04045401880108104e6f6e6500000010536f6d65040088000001000088084c706f6c796d6573685f7072696d697469766573104d656d6f000004000401205b75383b2033325d00008c14346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000900c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574940c3c70616c6c65745f6964656e746974791870616c6c6574144576656e7404045400015428446964437265617465640c008001284964656e7469747949640000000130543a3a4163636f756e744964000098017c5665633c5365636f6e646172794b65793c543a3a4163636f756e7449643e3e00000c444964656e7469747920637265617465642e0088284449442c207072696d617279206b65792c207365636f6e64617279206b65797329485365636f6e646172794b657973416464656408008001284964656e746974794964000098017c5665633c5365636f6e646172794b65793c543a3a4163636f756e7449643e3e00010c845365636f6e64617279206b65797320616464656420746f206964656e746974792e003c284449442c206e6577206b65797329505365636f6e646172794b65797352656d6f76656408008001284964656e7469747949640000fc01445665633c543a3a4163636f756e7449643e00020c945365636f6e64617279206b6579732072656d6f7665642066726f6d206964656e746974792e0080284449442c20746865206b657973207468617420676f742072656d6f76656429605365636f6e646172794b65794c6566744964656e7469747908008001284964656e7469747949640000000130543a3a4163636f756e74496400030c9041207365636f6e64617279206b6579206c656674207468656972206964656e746974792e0050284449442c207365636f6e64617279206b657929785365636f6e646172794b65795065726d697373696f6e735570646174656410008001284964656e7469747949640000000130543a3a4163636f756e7449640000a0012c5065726d697373696f6e730000a0012c5065726d697373696f6e7300040c885365636f6e64617279206b6579207065726d697373696f6e7320757064617465642e000d01284449442c2075706461746564207365636f6e64617279206b65792c2070726576696f7573207065726d697373696f6e732c206e6577207065726d697373696f6e7329445072696d6172794b6579557064617465640c008001284964656e7469747949640000000130543a3a4163636f756e7449640000000130543a3a4163636f756e74496400050c805072696d617279206b6579206f66206964656e74697479206368616e6765642e00a4284449442c206f6c64207072696d617279206b6579206163636f756e742049442c206e65772049442928436c61696d416464656408008001284964656e7469747949640000010101344964656e74697479436c61696d00060c60436c61696d20616464656420746f206964656e746974792e0030284449442c20636c61696d2930436c61696d5265766f6b656408008001284964656e7469747949640000010101344964656e74697479436c61696d00070c70436c61696d207265766f6b65642066726f6d206964656e746974792e0030284449442c20636c61696d294841737365744469645265676973746572656408008001284964656e7469747949640000210101185469636b657200080c7041737365742773206964656e7469747920726567697374657265642e004c284173736574204449442c207469636b65722948417574686f72697a6174696f6e416464656418008001284964656e74697479496400007c01484f7074696f6e3c4964656e7469747949643e0000290101504f7074696f6e3c543a3a4163636f756e7449643e000028010c75363400002d01017c417574686f72697a6174696f6e446174613c543a3a4163636f756e7449643e0000050101444f7074696f6e3c543a3a4d6f6d656e743e00090c604e657720617574686f72697a6174696f6e2061646465642e00310128617574686f72697365645f62792c207461726765745f6469642c207461726765745f6b65792c20617574685f69642c20617574686f72697a6174696f6e5f646174612c206578706972792950417574686f72697a6174696f6e5265766f6b65640c007c01484f7074696f6e3c4964656e7469747949643e0000290101504f7074696f6e3c543a3a4163636f756e7449643e000028010c753634000a0ca0417574686f72697a6174696f6e207265766f6b65642062792074686520617574686f72697a65722e00b828617574686f72697a65645f6964656e746974792c20617574686f72697a65645f6b65792c20617574685f69642954417574686f72697a6174696f6e52656a65637465640c007c01484f7074696f6e3c4964656e7469747949643e0000290101504f7074696f6e3c543a3a4163636f756e7449643e000028010c753634000b0cd8417574686f72697a6174696f6e2072656a65637465642062792074686520757365722077686f2077617320617574686f72697a65642e00b828617574686f72697a65645f6964656e746974792c20617574686f72697a65645f6b65792c20617574685f69642954417574686f72697a6174696f6e436f6e73756d65640c007c01484f7074696f6e3c4964656e7469747949643e0000290101504f7074696f6e3c543a3a4163636f756e7449643e000028010c753634000c0c5c417574686f72697a6174696f6e20636f6e73756d65642e00b828617574686f72697a65645f6964656e746974792c20617574686f72697a65645f6b65792c20617574685f69642978417574686f72697a6174696f6e52657472794c696d6974526561636865640c007c01484f7074696f6e3c4964656e7469747949643e0000290101504f7074696f6e3c543a3a4163636f756e7449643e000028010c753634000d0cb0416363657074696e6720417574686f72697a6174696f6e207265747279206c696d697420726561636865642e00b828617574686f72697a65645f6964656e746974792c20617574686f72697a65645f6b65792c20617574685f69642988436464526571756972656d656e74466f725072696d6172794b657955706461746564040039010110626f6f6c000e0cc443444420726571756972656d656e7420666f72207570646174696e67207072696d617279206b6579206368616e6765642e0044286e65775f726571756972656d656e742950436464436c61696d73496e76616c69646174656408008001284964656e7469747949640000280124543a3a4d6f6d656e74000f10410143444420636c61696d732067656e65726174656420627920604964656e74697479496460202861204344442050726f7669646572292068617665206265656e20696e76616c6964617465642066726f6d24604d6f6d656e74602e0094284344442070726f7669646572204449442c2064697361626c652066726f6d2064617465294c5365636f6e646172794b65797346726f7a656e04008001284964656e74697479496400100cc4416c6c205365636f6e64617279206b657973206f6620746865206964656e74697479204944206172652066726f7a656e2e00142844494429545365636f6e646172794b657973556e66726f7a656e04008001284964656e74697479496400110ccc416c6c205365636f6e64617279206b657973206f6620746865206964656e746974792049442061726520756e66726f7a656e2e0014284449442950437573746f6d436c61696d5479706541646465640c008001284964656e746974794964000019010144437573746f6d436c61696d547970654964000030011c5665633c75383e00120c8041206e657720437573746f6d436c61696d54797065207761732061646465642e003c284449442c2069642c2054797065293c4368696c64446964437265617465640c008001284964656e74697479496400008001284964656e7469747949640000000130543a3a4163636f756e74496400130c5c4368696c64206964656e7469747920637265617465642e009028506172656e74204449442c204368696c64204449442c207072696d617279206b657929404368696c64446964556e6c696e6b65640c008001284964656e74697479496400008001284964656e74697479496400008001284964656e74697479496400140cb44368696c64206964656e7469747920756e6c696e6b65642066726f6d20706172656e74206964656e746974792e008c2843616c6c6572204449442c20506172656e74204449442c204368696c642044494429047c54686520604576656e746020656e756d206f6620746869732070616c6c6574980000029c009c0c4c706f6c796d6573685f7072696d697469766573347365636f6e646172795f6b6579305365636f6e646172794b657904244163636f756e74496401000008010c6b65790001244163636f756e74496400012c7065726d697373696f6e73a0012c5065726d697373696f6e730000a00c4c706f6c796d6573685f7072696d697469766573347365636f6e646172795f6b65792c5065726d697373696f6e7300000c01146173736574a4014041737365745065726d697373696f6e7300012465787472696e736963b8015045787472696e7369635065726d697373696f6e73000124706f7274666f6c696fe40150506f7274666f6c696f5065726d697373696f6e730000a40c4c706f6c796d6573685f7072696d69746976657318737562736574445375627365745265737472696374696f6e04044101a8010c1457686f6c650000001454686573650400b0012c42547265655365743c413e000100184578636570740400b0012c42547265655365743c413e00020000a80c4c706f6c796d6573685f7072696d6974697665731461737365741c4173736574496400000400ac01205b75383b2031365d0000ac000003100000000800b00420425472656553657404045401a8000400b4000000b4000002a800b80c4c706f6c796d6573685f7072696d697469766573347365636f6e646172795f6b65795045787472696e7369635065726d697373696f6e7300010c1457686f6c650000001454686573650400bc019c42547265654d61703c50616c6c65744e616d652c2050616c6c65745065726d697373696f6e733e000100184578636570740400bc019c42547265654d61703c50616c6c65744e616d652c2050616c6c65745065726d697373696f6e733e00020000bc042042547265654d617008044b01c0045601c8000400dc000000c0084c706f6c796d6573685f7072696d6974697665732850616c6c65744e616d6500000400c40118537472696e670000c40000050200c80c4c706f6c796d6573685f7072696d697469766573347365636f6e646172795f6b65794450616c6c65745065726d697373696f6e73000004012865787472696e73696373cc013845787472696e7369634e616d65730000cc0c4c706f6c796d6573685f7072696d69746976657318737562736574445375627365745265737472696374696f6e04044101d0010c1457686f6c650000001454686573650400d4012c42547265655365743c413e000100184578636570740400d4012c42547265655365743c413e00020000d0084c706f6c796d6573685f7072696d6974697665733445787472696e7369634e616d6500000400c40118537472696e670000d40420425472656553657404045401d0000400d8000000d8000002d000dc000002e000e000000408c0c800e40c4c706f6c796d6573685f7072696d69746976657318737562736574445375627365745265737472696374696f6e04044101e8010c1457686f6c650000001454686573650400f4012c42547265655365743c413e000100184578636570740400f4012c42547265655365743c413e00020000e80c4c706f6c796d6573685f7072696d6974697665732c6964656e746974795f69642c506f7274666f6c696f4964000008010c6469648001284964656e7469747949640001106b696e64ec0134506f7274666f6c696f4b696e640000ec0c4c706f6c796d6573685f7072696d6974697665732c6964656e746974795f696434506f7274666f6c696f4b696e640001081c44656661756c7400000010557365720400f0013c506f7274666f6c696f4e756d62657200010000f00c4c706f6c796d6573685f7072696d6974697665732c6964656e746974795f69643c506f7274666f6c696f4e756d6265720000040028010c7536340000f40420425472656553657404045401e8000400f8000000f8000002e800fc000002000001010c4c706f6c796d6573685f7072696d697469766573386964656e746974795f636c61696d344964656e74697479436c61696d0000140130636c61696d5f6973737565728001284964656e74697479496400013469737375616e63655f646174652801184d6f6d656e740001406c6173745f7570646174655f646174652801184d6f6d656e74000118657870697279050101384f7074696f6e3c4d6f6d656e743e000114636c61696d09010114436c61696d0000050104184f7074696f6e04045401280108104e6f6e6500000010536f6d65040028000001000009010c4c706f6c796d6573685f7072696d697469766573386964656e746974795f636c61696d14436c61696d000128284163637265646974656404000d01011453636f706500000024416666696c6961746504000d01011453636f7065000100244275794c6f636b757004000d01011453636f70650002002853656c6c4c6f636b757004000d01011453636f706500030050437573746f6d657244756544696c6967656e63650400110101144364644964000400404b6e6f77596f7572437573746f6d657204000d01011453636f7065000500304a7572697364696374696f6e08001501012c436f756e747279436f646500000d01011453636f7065000600204578656d7074656404000d01011453636f70650007001c426c6f636b656404000d01011453636f706500080018437573746f6d080019010144437573746f6d436c61696d54797065496400001d0101344f7074696f6e3c53636f70653e000900000d010c4c706f6c796d6573685f7072696d697469766573386964656e746974795f636c61696d1453636f706500010c204964656e7469747904008001284964656e7469747949640000001441737365740400a8011c4173736574496400010018437573746f6d040030011c5665633c75383e0002000011010c4c706f6c796d6573685f7072696d697469766573186364645f6964144364644964000004000401205b75383b2033325d000015010c4c706f6c796d6573685f7072696d697469766573306a7572697364696374696f6e2c436f756e747279436f64650001e90308414600000008415800010008414c00020008445a00030008415300040008414400050008414f000600084149000700084151000800084147000900084152000a0008414d000b00084157000c00084155000d00084154000e0008415a000f0008425300100008424800110008424400120008424200130008425900140008424500150008425a00160008424a00170008424d00180008425400190008424f001a00084241001b00084257001c00084256001d00084252001e00085647001f0008494f00200008424e002100084247002200084246002300084249002400084b4800250008434d002600084341002700084356002800084b59002900084346002a00085444002b0008434c002c0008434e002d0008484b002e00084d4f002f0008435800300008434300310008434f003200084b4d00330008434700340008434400350008434b003600084352003700084349003800084852003900084355003a00084359003b0008435a003c0008444b003d0008444a003e0008444d003f0008444f00400008454300410008454700420008535600430008475100440008455200450008454500460008455400470008464b00480008464f00490008464a004a00084649004b00084652004c00084746004d00085046004e00085446004f0008474100500008474d00510008474500520008444500530008474800540008474900550008475200560008474c005700084744005800084750005900084755005a00084754005b00084747005c0008474e005d00084757005e00084759005f0008485400600008484d00610008564100620008484e00630008485500640008495300650008494e006600084944006700084952006800084951006900084945006a0008494d006b0008494c006c00084954006d00084a4d006e00084a50006f00084a45007000084a4f007100084b5a007200084b45007300084b49007400084b50007500084b52007600084b57007700084b47007800084c41007900084c56007a00084c42007b00084c53007c00084c52007d00084c59007e00084c49007f00084c54008000084c55008100084d4b008200084d47008300084d57008400084d59008500084d56008600084d4c008700084d54008800084d48008900084d51008a00084d52008b00084d55008c00085954008d00084d58008e0008464d008f00084d44009000084d43009100084d4e009200084d45009300084d53009400084d41009500084d5a009600084d4d009700084e41009800084e52009900084e50009a00084e4c009b0008414e009c00084e43009d00084e5a009e00084e49009f00084e4500a000084e4700a100084e5500a200084e4600a300084d5000a400084e4f00a500084f4d00a60008504b00a70008505700a80008505300a90008504100aa0008504700ab0008505900ac0008504500ad0008504800ae0008504e00af0008504c00b00008505400b10008505200b20008514100b30008524500b40008524f00b50008525500b60008525700b70008424c00b80008534800b900084b4e00ba00084c4300bb00084d4600bc0008504d00bd0008564300be0008575300bf0008534d00c00008535400c10008534100c20008534e00c30008525300c40008534300c50008534c00c60008534700c70008534b00c80008534900c90008534200ca0008534f00cb00085a4100cc0008475300cd0008535300ce0008455300cf00084c4b00d00008534400d10008535200d20008534a00d30008535a00d40008534500d50008434800d60008535900d70008545700d80008544a00d90008545a00da0008544800db0008544c00dc0008544700dd0008544b00de0008544f00df0008545400e00008544e00e10008545200e20008544d00e30008544300e40008545600e50008554700e60008554100e70008414500e80008474200e90008555300ea0008554d00eb0008555900ec0008555a00ed0008565500ee0008564500ef0008564e00f00008564900f10008574600f20008454800f30008594500f400085a4d00f500085a5700f60008425100f70008435700f80008535800f9000019010c4c706f6c796d6573685f7072696d697469766573386964656e746974795f636c61696d44437573746f6d436c61696d5479706549640000040010010c75333200001d0104184f7074696f6e040454010d010108104e6f6e6500000010536f6d6504000d01000001000021010c4c706f6c796d6573685f7072696d697469766573187469636b6572185469636b657200000400250101405b75383b205449434b45525f4c454e5d000025010000030c0000000800290104184f7074696f6e04045401000108104e6f6e6500000010536f6d6504000000000100002d010c4c706f6c796d6573685f7072696d69746976657334617574686f72697a6174696f6e44417574686f72697a6174696f6e4461746104244163636f756e74496401000128604174746573745072696d6172794b6579526f746174696f6e04008001284964656e74697479496400000040526f746174655072696d6172794b6579000100385472616e736665725469636b65720400210101185469636b6572000200444164644d756c74695369675369676e657204000001244163636f756e744964000300585472616e7366657241737365744f776e6572736869700400a8011c41737365744964000400304a6f696e4964656e746974790400a0012c5065726d697373696f6e7300050040506f7274666f6c696f437573746f64790400e8012c506f7274666f6c696f49640006002c4265636f6d654167656e740800a8011c417373657449640000310101284167656e7447726f75700007004c41646452656c61796572506179696e674b65790c000001244163636f756e74496400000001244163636f756e744964000018011c42616c616e63650008006c526f746174655072696d6172794b6579546f5365636f6e646172790400a0012c5065726d697373696f6e730009000031010c4c706f6c796d6573685f7072696d697469766573146167656e74284167656e7447726f75700001141046756c6c00000018437573746f6d04003501011041474964000100284578636570744d65746100020034506f6c796d657368563143414100030034506f6c796d65736856315049410004000035010c4c706f6c796d6573685f7072696d697469766573146167656e7410414749640000040010010c7533320000390100000500003d010c3070616c6c65745f67726f75701870616c6c6574144576656e7408045400044900011c2c4d656d626572416464656408008001284964656e74697479496400008001284964656e746974794964000008e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e6c63616c6c6572204449442c204e6577206d656d626572204449442e344d656d62657252656d6f76656408008001284964656e74697479496400008001284964656e746974794964000108e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2ea063616c6c6572204449442c206d656d626572204449442074686174206765742072656d6f7665642e344d656d6265725265766f6b656408008001284964656e74697479496400008001284964656e746974794964000208e454686520676976656e206d656d62657220686173206265656e207265766f6b65642061742073706563696669632074696d652d7374616d702ea063616c6c6572204449442c206d656d62657220444944207468617420676574207265766f6b65642e384d656d62657273537761707065640c008001284964656e74697479496400008001284964656e74697479496400008001284964656e746974794964000308d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e9463616c6c6572204449442c2052656d6f766564204449442c204e657720616464204449442e304d656d62657273526573657408008001284964656e74697479496400004101013c5665633c4964656e7469747949643e0004081501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e8063616c6c6572204449442c204c697374206f66206e6577206d656d626572732e484163746976654c696d69744368616e6765640c008001284964656e746974794964000010012c4d656d626572436f756e74000010012c4d656d626572436f756e740005042d01546865206c696d6974206f6620686f77206d616e7920616374697665206d656d626572732074686572652063616e20626520636f6e63757272656e746c7920776173206368616e6765642e1444756d6d7900060855015068616e746f6d206d656d6265722c206e6576657220757365642e2020546869732063616e2062652072656d6f766564206e6f772e20204652414d4520763220646f65736e2774207265717569726520746869732e34544f444f3a2072656d6f76652e047c54686520604576656e746020656e756d206f6620746869732070616c6c65744101000002800045010c4070616c6c65745f636f6d6d69747465651870616c6c6574144576656e740804540004490001282050726f706f7365640c008001284964656e746974794964000010013450726f706f73616c496e64657800002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000008890141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e20604d656d626572436f756e7460292ed8506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20696e6465782c2070726f706f73616c20686173682e14566f7465641c008001284964656e746974794964000010013450726f706f73616c496e64657800002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000039010110626f6f6c000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400010c050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e674901612074616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e950163616c6c6572204449442c2050726f706f73616c20696e6465782c2050726f706f73616c20686173682c2063757272656e7420766f74652c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e34566f746552657472616374656410008001284964656e746974794964000010013450726f706f73616c496e64657800002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000039010110626f6f6c000208cc4120766f7465206f6e2061206d6f74696f6e2028676976656e20686173682920686173206265656e207265747261637465642e050163616c6c6572204449442c2050726f706f73616c496e6465782c2050726f706f73616c20686173682c20766f7465207468617420776173207265747261637465642846696e616c566f74657314007c01484f7074696f6e3c4964656e7469747949643e000010013450726f706f73616c496e64657800002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4861736800004101013c5665633c4964656e7469747949643e00004101013c5665633c4964656e7469747949643e0003089046696e616c20766f746573206f6e2061206d6f74696f6e2028676976656e206861736829f863616c6c6572204449442c2050726f706f73616c496e6465782c2050726f706f73616c20686173682c2079657320766f746572732c206e6f20766f74657220417070726f76656414007c01484f7074696f6e3c4964656e7469747949643e00002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400040c090141206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c6420776974682074686520666f6c6c6f77696e67410174616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e4d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e2052656a656374656414007c01484f7074696f6e3c4964656e7469747949643e00002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400050c090141206d6f74696f6e207761732072656a656374656420627920746865207265717569726564207468726573686f6c6420776974682074686520666f6c6c6f77696e67410174616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e4d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e2045786563757465640c007c01484f7074696f6e3c4964656e7469747949643e00002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a486173680000490101384469737061746368526573756c74000608390141206d6f74696f6e207761732065786563757465643b20604469737061746368526573756c746020697320604f6b28282929602069662072657475726e656420776974686f7574206572726f722e0d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c20726573756c74206f662070726f706f73616c2064697370617463682e6452656c65617365436f6f7264696e61746f725570646174656404007c01484f7074696f6e3c4964656e7469747949643e0007089452656c6561736520636f6f7264696e61746f7220686173206265656e20757064617465642eac506172616d65746572733a20444944206f66207468652072656c6561736520636f6f7264696e61746f722e4c4578706972657341667465725570646174656408008001284964656e7469747949640000510101744d61796265426c6f636b3c426c6f636b4e756d626572466f723c543e3e0008089850726f706f73616c206578706972792074696d6520686173206265656e20757064617465642ec4506172616d65746572733a2063616c6c6572204449442c206e6577206578706972792074696d652028696620616e79292e50566f74655468726573686f6c64557064617465640c008001284964656e746974794964000010010c753332000010010c75333200090884566f74696e67207468726573686f6c6420686173206265656e2075706461746564b8506172616d65746572733a2063616c6c6572204449442c206e756d657261746f722c2064656e6f6d696e61746f72047c54686520604576656e746020656e756d206f6620746869732070616c6c657449010418526573756c74080454014d01044501600108084f6b04004d01000000000c45727204006000000100004d0100000400005101084c706f6c796d6573685f7072696d697469766573284d61796265426c6f636b042c426c6f636b4e756d6265720110010810536f6d65040010012c426c6f636b4e756d626572000000104e6f6e650001000055010c3070616c6c65745f67726f75701870616c6c6574144576656e7408045400044900011c2c4d656d626572416464656408008001284964656e74697479496400008001284964656e746974794964000008e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e6c63616c6c6572204449442c204e6577206d656d626572204449442e344d656d62657252656d6f76656408008001284964656e74697479496400008001284964656e746974794964000108e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2ea063616c6c6572204449442c206d656d626572204449442074686174206765742072656d6f7665642e344d656d6265725265766f6b656408008001284964656e74697479496400008001284964656e746974794964000208e454686520676976656e206d656d62657220686173206265656e207265766f6b65642061742073706563696669632074696d652d7374616d702ea063616c6c6572204449442c206d656d62657220444944207468617420676574207265766f6b65642e384d656d62657273537761707065640c008001284964656e74697479496400008001284964656e74697479496400008001284964656e746974794964000308d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e9463616c6c6572204449442c2052656d6f766564204449442c204e657720616464204449442e304d656d62657273526573657408008001284964656e74697479496400004101013c5665633c4964656e7469747949643e0004081501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e8063616c6c6572204449442c204c697374206f66206e6577206d656d626572732e484163746976654c696d69744368616e6765640c008001284964656e746974794964000010012c4d656d626572436f756e74000010012c4d656d626572436f756e740005042d01546865206c696d6974206f6620686f77206d616e7920616374697665206d656d626572732074686572652063616e20626520636f6e63757272656e746c7920776173206368616e6765642e1444756d6d7900060855015068616e746f6d206d656d6265722c206e6576657220757365642e2020546869732063616e2062652072656d6f766564206e6f772e20204652414d4520763220646f65736e2774207265717569726520746869732e34544f444f3a2072656d6f76652e047c54686520604576656e746020656e756d206f6620746869732070616c6c657459010c4070616c6c65745f636f6d6d69747465651870616c6c6574144576656e740804540004490001282050726f706f7365640c008001284964656e746974794964000010013450726f706f73616c496e64657800002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000008890141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e20604d656d626572436f756e7460292ed8506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20696e6465782c2070726f706f73616c20686173682e14566f7465641c008001284964656e746974794964000010013450726f706f73616c496e64657800002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000039010110626f6f6c000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400010c050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e674901612074616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e950163616c6c6572204449442c2050726f706f73616c20696e6465782c2050726f706f73616c20686173682c2063757272656e7420766f74652c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e34566f746552657472616374656410008001284964656e746974794964000010013450726f706f73616c496e64657800002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000039010110626f6f6c000208cc4120766f7465206f6e2061206d6f74696f6e2028676976656e20686173682920686173206265656e207265747261637465642e050163616c6c6572204449442c2050726f706f73616c496e6465782c2050726f706f73616c20686173682c20766f7465207468617420776173207265747261637465642846696e616c566f74657314007c01484f7074696f6e3c4964656e7469747949643e000010013450726f706f73616c496e64657800002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4861736800004101013c5665633c4964656e7469747949643e00004101013c5665633c4964656e7469747949643e0003089046696e616c20766f746573206f6e2061206d6f74696f6e2028676976656e206861736829f863616c6c6572204449442c2050726f706f73616c496e6465782c2050726f706f73616c20686173682c2079657320766f746572732c206e6f20766f74657220417070726f76656414007c01484f7074696f6e3c4964656e7469747949643e00002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400040c090141206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c6420776974682074686520666f6c6c6f77696e67410174616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e4d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e2052656a656374656414007c01484f7074696f6e3c4964656e7469747949643e00002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400050c090141206d6f74696f6e207761732072656a656374656420627920746865207265717569726564207468726573686f6c6420776974682074686520666f6c6c6f77696e67410174616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e4d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e2045786563757465640c007c01484f7074696f6e3c4964656e7469747949643e00002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a486173680000490101384469737061746368526573756c74000608390141206d6f74696f6e207761732065786563757465643b20604469737061746368526573756c746020697320604f6b28282929602069662072657475726e656420776974686f7574206572726f722e0d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c20726573756c74206f662070726f706f73616c2064697370617463682e6452656c65617365436f6f7264696e61746f725570646174656404007c01484f7074696f6e3c4964656e7469747949643e0007089452656c6561736520636f6f7264696e61746f7220686173206265656e20757064617465642eac506172616d65746572733a20444944206f66207468652072656c6561736520636f6f7264696e61746f722e4c4578706972657341667465725570646174656408008001284964656e7469747949640000510101744d61796265426c6f636b3c426c6f636b4e756d626572466f723c543e3e0008089850726f706f73616c206578706972792074696d6520686173206265656e20757064617465642ec4506172616d65746572733a2063616c6c6572204449442c206e6577206578706972792074696d652028696620616e79292e50566f74655468726573686f6c64557064617465640c008001284964656e746974794964000010010c753332000010010c75333200090884566f74696e67207468726573686f6c6420686173206265656e2075706461746564b8506172616d65746572733a2063616c6c6572204449442c206e756d657261746f722c2064656e6f6d696e61746f72047c54686520604576656e746020656e756d206f6620746869732070616c6c65745d010c3070616c6c65745f67726f75701870616c6c6574144576656e7408045400044900011c2c4d656d626572416464656408008001284964656e74697479496400008001284964656e746974794964000008e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e6c63616c6c6572204449442c204e6577206d656d626572204449442e344d656d62657252656d6f76656408008001284964656e74697479496400008001284964656e746974794964000108e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2ea063616c6c6572204449442c206d656d626572204449442074686174206765742072656d6f7665642e344d656d6265725265766f6b656408008001284964656e74697479496400008001284964656e746974794964000208e454686520676976656e206d656d62657220686173206265656e207265766f6b65642061742073706563696669632074696d652d7374616d702ea063616c6c6572204449442c206d656d62657220444944207468617420676574207265766f6b65642e384d656d62657273537761707065640c008001284964656e74697479496400008001284964656e74697479496400008001284964656e746974794964000308d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e9463616c6c6572204449442c2052656d6f766564204449442c204e657720616464204449442e304d656d62657273526573657408008001284964656e74697479496400004101013c5665633c4964656e7469747949643e0004081501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e8063616c6c6572204449442c204c697374206f66206e6577206d656d626572732e484163746976654c696d69744368616e6765640c008001284964656e746974794964000010012c4d656d626572436f756e74000010012c4d656d626572436f756e740005042d01546865206c696d6974206f6620686f77206d616e7920616374697665206d656d626572732074686572652063616e20626520636f6e63757272656e746c7920776173206368616e6765642e1444756d6d7900060855015068616e746f6d206d656d6265722c206e6576657220757365642e2020546869732063616e2062652072656d6f766564206e6f772e20204652414d4520763220646f65736e2774207265717569726520746869732e34544f444f3a2072656d6f76652e047c54686520604576656e746020656e756d206f6620746869732070616c6c657461010c4070616c6c65745f636f6d6d69747465651870616c6c6574144576656e740804540004490001282050726f706f7365640c008001284964656e746974794964000010013450726f706f73616c496e64657800002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000008890141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e20604d656d626572436f756e7460292ed8506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20696e6465782c2070726f706f73616c20686173682e14566f7465641c008001284964656e746974794964000010013450726f706f73616c496e64657800002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000039010110626f6f6c000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400010c050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e674901612074616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e950163616c6c6572204449442c2050726f706f73616c20696e6465782c2050726f706f73616c20686173682c2063757272656e7420766f74652c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e34566f746552657472616374656410008001284964656e746974794964000010013450726f706f73616c496e64657800002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000039010110626f6f6c000208cc4120766f7465206f6e2061206d6f74696f6e2028676976656e20686173682920686173206265656e207265747261637465642e050163616c6c6572204449442c2050726f706f73616c496e6465782c2050726f706f73616c20686173682c20766f7465207468617420776173207265747261637465642846696e616c566f74657314007c01484f7074696f6e3c4964656e7469747949643e000010013450726f706f73616c496e64657800002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4861736800004101013c5665633c4964656e7469747949643e00004101013c5665633c4964656e7469747949643e0003089046696e616c20766f746573206f6e2061206d6f74696f6e2028676976656e206861736829f863616c6c6572204449442c2050726f706f73616c496e6465782c2050726f706f73616c20686173682c2079657320766f746572732c206e6f20766f74657220417070726f76656414007c01484f7074696f6e3c4964656e7469747949643e00002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400040c090141206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c6420776974682074686520666f6c6c6f77696e67410174616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e4d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e2052656a656374656414007c01484f7074696f6e3c4964656e7469747949643e00002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a48617368000010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000010012c4d656d626572436f756e7400050c090141206d6f74696f6e207761732072656a656374656420627920746865207265717569726564207468726573686f6c6420776974682074686520666f6c6c6f77696e67410174616c6c79202879657320766f7465732c206e6f20766f74657320616e6420746f74616c20736561747320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e4d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c2079617920766f746520636f756e742c206e617920766f746520636f756e742c20746f74616c2073656174732e2045786563757465640c007c01484f7074696f6e3c4964656e7469747949643e00002c01843c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a486173680000490101384469737061746368526573756c74000608390141206d6f74696f6e207761732065786563757465643b20604469737061746368526573756c746020697320604f6b28282929602069662072657475726e656420776974686f7574206572726f722e0d01506172616d65746572733a2063616c6c6572204449442c2070726f706f73616c20686173682c20726573756c74206f662070726f706f73616c2064697370617463682e6452656c65617365436f6f7264696e61746f725570646174656404007c01484f7074696f6e3c4964656e7469747949643e0007089452656c6561736520636f6f7264696e61746f7220686173206265656e20757064617465642eac506172616d65746572733a20444944206f66207468652072656c6561736520636f6f7264696e61746f722e4c4578706972657341667465725570646174656408008001284964656e7469747949640000510101744d61796265426c6f636b3c426c6f636b4e756d626572466f723c543e3e0008089850726f706f73616c206578706972792074696d6520686173206265656e20757064617465642ec4506172616d65746572733a2063616c6c6572204449442c206e6577206578706972792074696d652028696620616e79292e50566f74655468726573686f6c64557064617465640c008001284964656e746974794964000010010c753332000010010c75333200090884566f74696e67207468726573686f6c6420686173206265656e2075706461746564b8506172616d65746572733a2063616c6c6572204449442c206e756d657261746f722c2064656e6f6d696e61746f72047c54686520604576656e746020656e756d206f6620746869732070616c6c657465010c3070616c6c65745f67726f75701870616c6c6574144576656e7408045400044900011c2c4d656d626572416464656408008001284964656e74697479496400008001284964656e746974794964000008e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e6c63616c6c6572204449442c204e6577206d656d626572204449442e344d656d62657252656d6f76656408008001284964656e74697479496400008001284964656e746974794964000108e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2ea063616c6c6572204449442c206d656d626572204449442074686174206765742072656d6f7665642e344d656d6265725265766f6b656408008001284964656e74697479496400008001284964656e746974794964000208e454686520676976656e206d656d62657220686173206265656e207265766f6b65642061742073706563696669632074696d652d7374616d702ea063616c6c6572204449442c206d656d62657220444944207468617420676574207265766f6b65642e384d656d62657273537761707065640c008001284964656e74697479496400008001284964656e74697479496400008001284964656e746974794964000308d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e9463616c6c6572204449442c2052656d6f766564204449442c204e657720616464204449442e304d656d62657273526573657408008001284964656e74697479496400004101013c5665633c4964656e7469747949643e0004081501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e8063616c6c6572204449442c204c697374206f66206e6577206d656d626572732e484163746976654c696d69744368616e6765640c008001284964656e746974794964000010012c4d656d626572436f756e74000010012c4d656d626572436f756e740005042d01546865206c696d6974206f6620686f77206d616e7920616374697665206d656d626572732074686572652063616e20626520636f6e63757272656e746c7920776173206368616e6765642e1444756d6d7900060855015068616e746f6d206d656d6265722c206e6576657220757365642e2020546869732063616e2062652072656d6f766564206e6f772e20204652414d4520763220646f65736e2774207265717569726520746869732e34544f444f3a2072656d6f76652e047c54686520604576656e746020656e756d206f6620746869732070616c6c657469010c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001383c4d756c74695369674372656174656414012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e74496400011863616c6c6572000130543a3a4163636f756e74496400011c7369676e6572736d01019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e000134736967735f726571756972656428010c7536340000047041204d756c746973696720686173206265656e20637265617465642e3450726f706f73616c41646465640c012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c7536340001049441204d756c74697369672070726f706f73616c20686173206265656e20637265617465642e4050726f706f73616c457865637574656410012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c753634000118726573756c74490101384469737061746368526573756c740002049841204d756c74697369672070726f706f73616c20686173206265656e2065786563757465642e4c4d756c74695369675369676e657241646465640c012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e7449640001187369676e6572000130543a3a4163636f756e744964000304a841206e6577207369676e657220686173206265656e20616464656420746f2061204d756c74697369672e644d756c74695369675369676e657273417574686f72697a65640c012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e74496400011c7369676e6572736d01019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e000404e84e6577206b6579732068617665206265656e20617574686f72697a656420746f206265207369676e657273206f6e2061204d756c74697369672e584d756c74695369675369676e65727352656d6f7665640c012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e74496400011c7369676e6572736d01019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e000504a85369676e6572732068617665206265656e2072656d6f7665642066726f6d2061204d756c74697369672e784d756c74695369675369676e65727352657175697265644368616e6765640c012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e744964000134736967735f726571756972656428010c753634000604e041204d756c746973696720686173206368616e67656420697473207265717569726564206e756d626572206f6620617070726f76616c732e5050726f706f73616c417070726f76616c566f746510012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e7449640001187369676e6572000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c753634000704c841207369676e65722068617320766f74656420746f20617070726f76652061204d756c74697369672070726f706f73616c2e5450726f706f73616c52656a656374696f6e566f746510012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e7449640001187369676e6572000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c753634000804c441207369676e65722068617320766f74656420746f2072656a6563742061204d756c74697369672070726f706f73616c2e4050726f706f73616c417070726f7665640c012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c7536340009049841204d756c74697369672070726f706f73616c20686173206265656e20617070726f7665642e4050726f706f73616c52656a65637465640c012863616c6c65725f6469647c01484f7074696f6e3c4964656e7469747949643e0001206d756c7469736967000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c753634000a049841204d756c74697369672070726f706f73616c20686173206265656e2072656a65637465642e484d756c7469536967416464656441646d696e0c012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e74496400012461646d696e5f6469648001284964656e746974794964000b048841204d756c74697369672068617320616464656420616e2061646d696e204449442e504d756c746953696752656d6f76656441646d696e0c012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e74496400012461646d696e5f6469648001284964656e746974794964000c049841204d756c7469736967206861732072656d6f76656420697427732061646d696e204449442e604d756c746953696752656d6f766564506179696e674469640c012863616c6c65725f6469648001284964656e7469747949640001206d756c7469736967000130543a3a4163636f756e744964000128706179696e675f6469648001284964656e746974794964000d049c41204d756c7469736967206861732072656d6f766564206974277320706179696e67204449442e047c54686520604576656e746020656e756d206f6620746869732070616c6c65746d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400fc01185665633c543e000071010c4470616c6c65745f76616c696461746f72731870616c6c6574144576656e7404045400011c244e6f6d696e617465640c01486e6f6d696e61746f725f6964656e746974798001284964656e7469747949640001147374617368000130543a3a4163636f756e74496400011c74617267657473fc01445665633c543a3a4163636f756e7449643e0000048c55736572206861732075706461746564207468656972206e6f6d696e6174696f6e732e645065726d697373696f6e65644964656e74697479416464656408015c676f7665726e616e63655f636f756e63696c6c5f6469648001284964656e74697479496400014c76616c696461746f72735f6964656e746974798001284964656e746974794964000104f0416e206964656e74697479206861732069737375656420612063616e64696461637920666f72206265636f6d696e6720612076616c696461746f722e6c5065726d697373696f6e65644964656e7469747952656d6f76656408015c676f7665726e616e63655f636f756e63696c6c5f6469648001284964656e74697479496400014c76616c696461746f72735f6964656e746974798001284964656e7469747949640002040d01416e206964656e7469747920686173206265656e2072656d6f7665642066726f6d20746865207065726d697373696f6e6564206964656e74697469657320706f6f6c2e54496e76616c6964617465644e6f6d696e61746f72730c015c676f7665726e616e63655f636f756e63696c6c5f6469648001284964656e74697479496400016c676f7665726e616e63655f636f756e63696c6c5f6163636f756e748001284964656e746974794964000148657870697265645f6e6f6d696e61746f7273fc01445665633c543a3a4163636f756e7449643e0003041d0152656d6f766520746865206e6f6d696e61746f72732066726f6d207468652076616c6964206e6f6d696e61746f7273207768656e2074686572652043444420657870697265642e64536c617368696e67416c6c6f776564466f724368616e67656404013c736c617368696e675f73776974636875010138536c617368696e6753776974636800040488536c617368696e6720616c6c6f77656420686173206265656e20757064617465642e885265776172645061796d656e745363686564756c696e67496e7465727275707465640c01286163636f756e745f6964000130543a3a4163636f756e74496400010c657261100120457261496e6465780001146572726f7260013444697370617463684572726f7200050478526577617264207363686564756c696e6720696e7465727275707465642e50436f6d6d697373696f6e436170557064617465640c015c676f7665726e616e63655f636f756e63696c6c5f6469648001284964656e7469747949640001486f6c645f636f6d6d697373696f6e5f6361707901011c50657262696c6c0001486e65775f636f6d6d697373696f6e5f6361707901011c50657262696c6c00060480436f6d6d697373696f6e2063617020686173206265656e20757064617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657475010c4470616c6c65745f76616c696461746f727314747970657338536c617368696e6753776974636800010c2456616c696461746f720000005456616c696461746f72416e644e6f6d696e61746f72000100104e6f6e650002000079010c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c75333200007d01103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144576656e7404045400013c1c457261506169640c01246572615f696e646578100120457261496e64657800014076616c696461746f725f7061796f757418013042616c616e63654f663c543e00012472656d61696e64657218013042616c616e63654f663c543e000008550154686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973c07468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e2052657761726465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000104bc546865206e6f6d696e61746f7220686173206265656e207265776172646564206279207468697320616d6f756e742e1c536c61736865640801187374616b6572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0002041d0141207374616b6572202876616c696461746f72206f72206e6f6d696e61746f722920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e34536c6173685265706f727465640c012476616c696461746f72000130543a3a4163636f756e7449640001206672616374696f6e7901011c50657262696c6c000124736c6173685f657261100120457261496e64657800030859014120736c61736820666f722074686520676976656e2076616c696461746f722c20666f722074686520676976656e2070657263656e74616765206f66207468656972207374616b652c2061742074686520676976656e54657261206173206265656e207265706f727465642e684f6c64536c617368696e675265706f727444697363617264656404013473657373696f6e5f696e64657810013053657373696f6e496e6465780004081901416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64446e6f742062652070726f6365737365642e385374616b657273456c65637465640005048441206e657720736574206f66207374616b6572732077617320656c65637465642e18426f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000610d0416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d004d014e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c210169742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e20556e626f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00070490416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e2457697468647261776e0801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0008085901416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365606466726f6d2074686520756e6c6f636b696e672071756575652e184b69636b65640801246e6f6d696e61746f72000130543a3a4163636f756e7449640001147374617368000130543a3a4163636f756e744964000904b441206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e545374616b696e67456c656374696f6e4661696c6564000a04ac54686520656c656374696f6e206661696c65642e204e6f206e65772065726120697320706c616e6e65642e1c4368696c6c65640401147374617368000130543a3a4163636f756e744964000b042101416e206163636f756e74206861732073746f707065642070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000c0498546865207374616b657273272072657761726473206172652067657474696e6720706169642e4456616c696461746f7250726566735365740801147374617368000130543a3a4163636f756e74496400011470726566738101013856616c696461746f725072656673000d0498412076616c696461746f72206861732073657420746865697220707265666572656e6365732e20466f7263654572610401106d6f64658901011c466f7263696e67000e047441206e657720666f72636520657261206d6f646520776173207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748101083870616c6c65745f7374616b696e673856616c696461746f7250726566730000080128636f6d6d697373696f6e8501011c50657262696c6c00011c626c6f636b656439010110626f6f6c000085010000067901008901083870616c6c65745f7374616b696e671c466f7263696e67000110284e6f74466f7263696e6700000020466f7263654e657700010024466f7263654e6f6e650002002c466f726365416c77617973000300008d010c3c70616c6c65745f6f6666656e6365731870616c6c6574144576656e740001041c4f6666656e63650801106b696e64ac01104b696e6400012074696d65736c6f743001384f706171756554696d65536c6f7400000c5101546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e643501286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4c5c5b6b696e642c2074696d65736c6f745c5d2e04304576656e747320747970652e91010c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c657495010c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f73657499010134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657499010000029d01009d0100000408a1012800a1010c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c696300000400a501013c656432353531393a3a5075626c69630000a5010c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000a9010c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144576656e7404045400010c444865617274626561745265636569766564040130617574686f726974795f6964ad010138543a3a417574686f726974794964000004c041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964602e1c416c6c476f6f64000104d041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504011c6f66666c696e65b501016c5665633c4964656e74696669636174696f6e5475706c653c543e3e000204290141742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ad01104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139185075626c696300000400b101013c737232353531393a3a5075626c69630000b1010c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000b501000002b90100b9010000040800bd0100bd01083870616c6c65745f7374616b696e67204578706f7375726508244163636f756e74496401001c42616c616e63650118000c0114746f74616cc101011c42616c616e636500010c6f776ec101011c42616c616e63650001186f7468657273c50101ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e0000c1010000061800c501000002c90100c901083870616c6c65745f7374616b696e6748496e646976696475616c4578706f7375726508244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011476616c7565c101011c42616c616e63650000cd010c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400010c14537564696404012c7375646f5f726573756c74490101384469737061746368526573756c740000048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d284b65794368616e6765640401286f6c645f7375646f6572290101504f7074696f6e3c543a3a4163636f756e7449643e0001043901546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c696564206966206f6e6520657869737465642e285375646f4173446f6e6504012c7375646f5f726573756c74490101384469737061746368526573756c740002048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d1010c3070616c6c65745f61737365741870616c6c6574144576656e740404540001803041737365744372656174656420008001284964656e7469747949640000a8011c41737365744964000039010110626f6f6c0000d501012441737365745479706500008001284964656e7469747949640000e101012441737365744e616d650000e50101505665633c41737365744964656e7469666965723e0000f50101604f7074696f6e3c46756e64696e67526f756e644e616d653e000008804576656e7420666f72206372656174696f6e206f66207468652061737365742ec50163616c6c6572204449442f206f776e6572204449442c20417373657449642c2064697669736962696c6974792c20617373657420747970652c2062656e6566696369617279204449442c206173736574206e616d652c206964656e746966696572732c2066756e64696e6720726f756e64484964656e74696669657273557064617465640c008001284964656e7469747949640000a8011c417373657449640000e50101505665633c41737365744964656e7469666965723e000108d44576656e7420656d6974746564207768656e20616e7920746f6b656e206964656e746966696572732061726520757064617465642e110163616c6c6572204449442c20417373657449642c206120766563746f72206f6620286964656e74696669657220747970652c206964656e7469666965722076616c7565294c44697669736962696c6974794368616e6765640c008001284964656e7469747949640000a8011c41737365744964000039010110626f6f6c000208844576656e7420666f72206368616e676520696e2064697669736962696c6974792e8463616c6c6572204449442c20417373657449642c2064697669736962696c697479405469636b6572526567697374657265640c008001284964656e7469747949640000210101185469636b65720000050101444f7074696f6e3c543a3a4d6f6d656e743e0003087c456d6974207768656e207469636b657220697320726567697374657265642eec63616c6c657220444944202f207469636b6572206f776e6572206469642c207469636b65722c207469636b6572206f776e65722c20657870697279445469636b65725472616e736665727265640c008001284964656e7469747949640000210101185469636b657200008001284964656e74697479496400040880456d6974207768656e207469636b6572206973207472616e736665727265642ed063616c6c657220444944202f207469636b6572207472616e7366657272656420746f204449442c207469636b65722c2066726f6d6441737365744f776e6572736869705472616e736665727265640c008001284964656e7469747949640000a8011c4173736574496400008001284964656e746974794964000508a4456d6974207768656e20746f6b656e206f776e657273686970206973207472616e736665727265642ef863616c6c657220444944202f20746f6b656e206f776e657273686970207472616e7366657272656420746f204449442c20417373657449642c2066726f6d2c417373657446726f7a656e08008001284964656e7469747949640000a8011c41737365744964000608a4416e206576656e7420656d6974746564207768656e20616e2061737365742069732066726f7a656e2e7c506172616d657465723a2063616c6c6572204449442c20417373657449642e344173736574556e66726f7a656e08008001284964656e7469747949640000a8011c41737365744964000708ac416e206576656e7420656d6974746564207768656e20616e20617373657420697320756e66726f7a656e2e7c506172616d657465723a2063616c6c6572204449442c20417373657449642e30417373657452656e616d65640c008001284964656e7469747949640000a8011c417373657449640000e101012441737365744e616d65000808a4416e206576656e7420656d6974746564207768656e206120746f6b656e2069732072656e616d65642ec0506172616d65746572733a2063616c6c6572204449442c20417373657449642c206e657720746f6b656e206e616d652e3c46756e64696e67526f756e645365740c008001284964656e7469747949640000a8011c417373657449640000f901014046756e64696e67526f756e644e616d650009081101416e206576656e74206361727279696e6720746865206e616d65206f66207468652063757272656e742066756e64696e6720726f756e64206f6620616e2061737365742ed0506172616d65746572733a2063616c6c6572204449442c20417373657449642c2066756e64696e6720726f756e64206e616d652e34446f63756d656e74416464656410008001284964656e7469747949640000a8011c417373657449640000fd010128446f63756d656e744964000001020120446f63756d656e74000a048c41206e657720646f63756d656e7420617474616368656420746f20616e2061737365743c446f63756d656e7452656d6f7665640c008001284964656e7469747949640000a8011c417373657449640000fd010128446f63756d656e744964000b04804120646f63756d656e742072656d6f7665642066726f6d20616e20617373657448436f6e74726f6c6c65725472616e7366657210008001284964656e7469747949640000a8011c417373657449640000e8012c506f7274666f6c696f4964000018011c42616c616e6365000c08b44576656e7420666f72207768656e206120666f72636564207472616e736665722074616b657320706c6163652e3d0163616c6c6572204449442f20636f6e74726f6c6c6572204449442c20457874656e73696f6e52656d6f7665642c20506f7274666f6c696f206f6620746f6b656e20686f6c6465722c2076616c75652e54437573746f6d4173736574547970654578697374730c008001284964656e7469747949640000d9010144437573746f6d4173736574547970654964000030011c5665633c75383e000d08b04120637573746f6d206173736574207479706520616c726561647920657869737473206f6e2d636861696e2e310163616c6c6572204449442c20746865204944206f662074686520637573746f6d20617373657420747970652c2074686520737472696e6720636f6e74656e747320726567697374657265642e64437573746f6d417373657454797065526567697374657265640c008001284964656e7469747949640000d9010144437573746f6d4173736574547970654964000030011c5665633c75383e000e08b04120637573746f6d2061737365742074797065207761732072656769737465726564206f6e2d636861696e2e310163616c6c6572204449442c20746865204944206f662074686520637573746f6d20617373657420747970652c2074686520737472696e6720636f6e74656e747320726567697374657265642e5453657441737365744d6574616461746156616c756510008001284964656e7469747949640000a8011c4173736574496400002d02014841737365744d6574616461746156616c75650000310201ac4f7074696f6e3c41737365744d6574616461746156616c756544657461696c3c543a3a4d6f6d656e743e3e000f0864536574206173736574206d657461646174612076616c75652ef42843616c6c6572204449442c20417373657449642c206d657461646174612076616c75652c206f7074696f6e616c2076616c75652064657461696c73297053657441737365744d6574616461746156616c756544657461696c730c008001284964656e7469747949640000a8011c4173736574496400003502018c41737365744d6574616461746156616c756544657461696c3c543a3a4d6f6d656e743e001008dc536574206173736574206d657461646174612076616c75652064657461696c7320286578706972652c206c6f636b20737461747573292e902843616c6c6572204449442c20417373657449642c2076616c75652064657461696c732978526567697374657241737365744d657461646174614c6f63616c5479706514008001284964656e7469747949640000a8011c4173736574496400003d02014441737365744d657461646174614e616d6500004102015441737365744d657461646174614c6f63616c4b657900004502014441737365744d65746164617461537065630011088c5265676973746572206173736574206d65746164617461206c6f63616c20747970652e09012843616c6c6572204449442c20417373657449642c204c6f63616c2074797065206e616d652c204c6f63616c2074797065206b65792c2074797065207370656373297c526567697374657241737365744d65746164617461476c6f62616c547970650c003d02014441737365744d657461646174614e616d6500005d02015841737365744d65746164617461476c6f62616c4b657900004502014441737365744d6574616461746153706563001208905265676973746572206173736574206d6574616461746120676c6f62616c20747970652ebc28476c6f62616c2074797065206e616d652c20476c6f62616c2074797065206b65792c207479706520737065637329404173736574547970654368616e6765640c008001284964656e7469747949640000a8011c417373657449640000d5010124417373657454797065001308cc416e206576656e7420656d6974746564207768656e207468652074797065206f6620616e206173736574206368616e6765642ec0506172616d65746572733a2063616c6c6572204449442c20417373657449642c206e657720746f6b656e20747970652e5c4c6f63616c4d657461646174614b657944656c657465640c008001284964656e7469747949640000a8011c4173736574496400004102015441737365744d657461646174614c6f63616c4b6579001408f0416e206576656e7420656d6974746564207768656e2061206c6f63616c206d65746164617461206b657920686173206265656e2072656d6f7665642eac506172616d65746572733a2063616c6c657220417373657449642c204c6f63616c2074797065206e616d65504d6574616461746156616c756544656c657465640c008001284964656e7469747949640000a8011c4173736574496400006102014041737365744d657461646174614b6579001508f8416e206576656e7420656d6974746564207768656e2061206c6f63616c206d657461646174612076616c756520686173206265656e2072656d6f7665642eac506172616d65746572733a2063616c6c657220417373657449642c204c6f63616c2074797065206e616d654c417373657442616c616e63655570646174656418008001284964656e7469747949640000a8011c41737365744964000018011c42616c616e636500006502014c4f7074696f6e3c506f7274666f6c696f49643e00006502014c4f7074696f6e3c506f7274666f6c696f49643e000069020154506f7274666f6c696f557064617465526561736f6e00160ce4456d6974746564207768656e20546f6b656e732077657265206973737565642c2072656465656d6564206f72207472616e736665727265642e3502436f6e7461696e7320746865205b604964656e746974794964605d206f66207468652072656365697665722f6973737565722f72656465656d65722c20746865205b6041737365744964605d20666f722074686520746f6b656e2c207468652062616c616e6365207468617420776173206973737565642f7472616e736665727265642f72656465656d65642cb101746865205b60506f7274666f6c696f4964605d206f662074686520736f757263652c20746865205b60506f7274666f6c696f4964605d206f66207468652064657374696e6174696f6e20616e6420746865205b60506f7274666f6c696f557064617465526561736f6e605d2e64417373657441666669726d6174696f6e4578656d7074696f6e0400a8011c417373657449640017086d01416e20617373657420686173206265656e20616464656420746f20746865206c697374206f662070726520617072726f76656420726563656976656d656e74202876616c696420666f7220616c6c206964656e746974696573292ec8506172616d65746572733a205b6041737365744964605d206f66207468652070726520617070726f7665642061737365742e7c52656d6f7665417373657441666669726d6174696f6e4578656d7074696f6e0400a8011c417373657449640018087d01416e20617373657420686173206265656e2072656d6f7665642066726f6d20746865206c697374206f662070726520617072726f76656420726563656976656d656e74202876616c696420666f7220616c6c206964656e746974696573292e94506172616d65746572733a205b6041737365744964605d206f66207468652061737365742e40507265417070726f766564417373657408008001284964656e7469747949640000a8011c417373657449640019081d01416e206964656e746974792068617320616464656420616e20617373657420746f20746865206c697374206f662070726520617072726f76656420726563656976656d656e742e3101506172616d65746572733a205b604964656e746974794964605d206f662063616c6c65722c205b6041737365744964605d206f66207468652070726520617070726f7665642061737365742e5852656d6f7665507265417070726f766564417373657408008001284964656e7469747949640000a8011c41737365744964001a082501416e206964656e74697479206861732072656d6f76656420616e20617373657420746f20746865206c697374206f662070726520617072726f76656420726563656976656d656e742efc506172616d65746572733a205b604964656e746974794964605d206f662063616c6c65722c205b6041737365744964605d206f66207468652061737365742e4c41737365744d65646961746f727341646465640c008001284964656e7469747949640000a8011c4173736574496400007502015042547265655365743c4964656e7469747949643e001b08d8416e206964656e7469747920686173206164646564206d616e6461746f7279206d65646961746f727320746f20616e2061737365742e9101506172616d65746572733a205b604964656e746974794964605d206f662063616c6c65722c205b6041737365744964605d206f66207468652061737365742c20746865206964656e74697479206f6620616c6c206d65646961746f72732061646465642e5441737365744d65646961746f727352656d6f7665640c008001284964656e7469747949640000a8011c4173736574496400007502015042547265655365743c4964656e7469747949643e001c08c0416e206964656e74697479206861732072656d6f766564206d65646961746f72732066726f6d20616e2061737365742e9901506172616d65746572733a205b604964656e746974794964605d206f662063616c6c65722c205b6041737365744964605d206f66207468652061737365742c20746865206964656e74697479206f6620616c6c206d65646961746f72732072656d6f7665642e4c5469636b65724c696e6b6564546f41737365740c008001284964656e7469747949640000210101185469636b65720000a8011c41737365744964001d08b0416e206964656e7469747920686173206c696e6b65642061207469636b657220746f20616e2061737365742e8101506172616d65746572733a205b604964656e746974794964605d206f662063616c6c65722c205b605469636b6572605d206f66207468652061737365742c20746865206173736574206964656e746966696572205b6041737365744964605d2e5c5469636b6572556e6c696e6b656446726f6d41737365740c008001284964656e7469747949640000210101185469636b65720000a8011c41737365744964001e08c0416e206964656e746974792068617320756e6c696e6b65642061207469636b65722066726f6d20616e2061737365742e7101506172616d65746572733a205b604964656e746974794964605d206f662063616c6c65722c20756e6c696e6b6564205b605469636b6572605d2c20746865206173736574206964656e746966696572205b6041737365744964605d2e64476c6f62616c4d65746164617461537065635570646174656408003d02014441737365744d657461646174614e616d6500004502014441737365744d6574616461746153706563001f08b0417373657420476c6f62616c204d65746164617461205370656320686173206265656e20557064617465642e6501506172616d65746572733a205b6041737365744d657461646174614e616d65605d206f6620746865206d657461646174612c205b6041737365744d6574616461746153706563605d206f6620746865206d657461646174612e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d5010c4c706f6c796d6573685f7072696d6974697665731461737365742441737365745479706500013030457175697479436f6d6d6f6e0000003c45717569747950726566657272656400010024436f6d6d6f646974790002002c4669786564496e636f6d6500030010524549540004001046756e6400050054526576656e7565536861726541677265656d656e74000600445374727563747572656450726f64756374000700284465726976617469766500080018437573746f6d0400d9010144437573746f6d417373657454797065496400090028537461626c65436f696e000a002c4e6f6e46756e6769626c650400dd01013c4e6f6e46756e6769626c6554797065000b0000d9010c4c706f6c796d6573685f7072696d69746976657314617373657444437573746f6d41737365745479706549640000040010010c7533320000dd010c4c706f6c796d6573685f7072696d6974697665731461737365743c4e6f6e46756e6769626c655479706500011028446572697661746976650000002c4669786564496e636f6d650001001c496e766f69636500020018437573746f6d0400d9010144437573746f6d417373657454797065496400030000e1010c4c706f6c796d6573685f7072696d6974697665731461737365742441737365744e616d650000040030011c5665633c75383e0000e501000002e90100e9010c4c706f6c796d6573685f7072696d6974697665734061737365745f6964656e7469666965723c41737365744964656e7469666965720001141443555349500400ed01011c5b75383b20395d0000001043494e530400ed01011c5b75383b20395d000100104953494e0400250101205b75383b2031325d0002000c4c45490400f10101205b75383b2032305d00030010464947490400250101205b75383b2031325d00040000ed01000003090000000800f101000003140000000800f50104184f7074696f6e04045401f9010108104e6f6e6500000010536f6d650400f9010000010000f9010c4c706f6c796d6573685f7072696d6974697665731461737365744046756e64696e67526f756e644e616d650000040030011c5665633c75383e0000fd010c4c706f6c796d6573685f7072696d69746976657320646f63756d656e7428446f63756d656e7449640000040010010c753332000001020c4c706f6c796d6573685f7072696d69746976657320646f63756d656e7420446f63756d656e74000014010c7572690502012c446f63756d656e74557269000130636f6e74656e745f6861736809020130446f63756d656e74486173680001106e616d6521020130446f63756d656e744e616d65000120646f635f74797065250201504f7074696f6e3c446f63756d656e74547970653e00012c66696c696e675f64617465050101384f7074696f6e3c4d6f6d656e743e000005020c4c706f6c796d6573685f7072696d69746976657320646f63756d656e742c446f63756d656e745572690000040030011c5665633c75383e000009020c4c706f6c796d6573685f7072696d69746976657334646f63756d656e745f6861736830446f63756d656e7448617368000124104e6f6e65000000104835313204000d0201205b75383b2036345d00010010483338340400110201205b75383b2034385d00020010483332300400150201205b75383b2034305d000300104832353604000401205b75383b2033325d00040010483232340400190201205b75383b2032385d000500104831393204001d0201205b75383b2032345d00060010483136300400f10101205b75383b2032305d00070010483132380400ac01205b75383b2031365d000800000d020000034000000008001102000003300000000800150200000328000000080019020000031c00000008001d0200000318000000080021020c4c706f6c796d6573685f7072696d69746976657320646f63756d656e7430446f63756d656e744e616d650000040030011c5665633c75383e0000250204184f7074696f6e0404540129020108104e6f6e6500000010536f6d6504002902000001000029020c4c706f6c796d6573685f7072696d69746976657320646f63756d656e7430446f63756d656e74547970650000040030011c5665633c75383e00002d020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174614841737365744d6574616461746156616c75650000040030011c5665633c75383e0000310204184f7074696f6e0404540135020108104e6f6e6500000010536f6d6504003502000001000035020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174616041737365744d6574616461746156616c756544657461696c04184d6f6d656e74012800080118657870697265050101384f7074696f6e3c4d6f6d656e743e00012c6c6f636b5f7374617475733902017c41737365744d657461646174614c6f636b5374617475733c4d6f6d656e743e000039020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174615c41737365744d657461646174614c6f636b53746174757304184d6f6d656e740128010c20556e6c6f636b6564000000184c6f636b65640001002c4c6f636b6564556e74696c04002801184d6f6d656e74000200003d020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174614441737365744d657461646174614e616d650000040030011c5665633c75383e000041020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174615441737365744d657461646174614c6f63616c4b65790000040028010c753634000045020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174614441737365744d657461646174615370656300000c010c75726c4902012c4f7074696f6e3c55726c3e00012c6465736372697074696f6e510201804f7074696f6e3c41737365744d657461646174614465736372697074696f6e3e000120747970655f6465665902013c4f7074696f6e3c5665633c75383e3e0000490204184f7074696f6e040454014d020108104e6f6e6500000010536f6d6504004d0200000100004d02084c706f6c796d6573685f7072696d6974697665730c55726c0000040030011c5665633c75383e0000510204184f7074696f6e0404540155020108104e6f6e6500000010536f6d6504005502000001000055020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174616041737365744d657461646174614465736372697074696f6e0000040030011c5665633c75383e0000590204184f7074696f6e04045401300108104e6f6e6500000010536f6d6504003000000100005d020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174615841737365744d65746164617461476c6f62616c4b65790000040028010c753634000061020c4c706f6c796d6573685f7072696d6974697665733861737365745f6d657461646174614041737365744d657461646174614b657900010818476c6f62616c04005d02015841737365744d65746164617461476c6f62616c4b6579000000144c6f63616c04004102015441737365744d657461646174614c6f63616c4b657900010000650204184f7074696f6e04045401e80108104e6f6e6500000010536f6d650400e8000001000069020c4c706f6c796d6573685f7072696d69746976657324706f7274666f6c696f54506f7274666f6c696f557064617465526561736f6e0001101849737375656404014866756e64696e675f726f756e645f6e616d65f50101604f7074696f6e3c46756e64696e67526f756e644e616d653e0000002052656465656d65640001002c5472616e73666572726564080138696e737472756374696f6e5f69646d0201544f7074696f6e3c496e737472756374696f6e49643e000140696e737472756374696f6e5f6d656d6f8401304f7074696f6e3c4d656d6f3e00020048436f6e74726f6c6c65725472616e73666572000300006d0204184f7074696f6e0404540171020108104e6f6e6500000010536f6d6504007102000001000071020c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e7434496e737472756374696f6e49640000040028010c7536340000750204204254726565536574040454018000040041010000007902106070616c6c65745f636f72706f726174655f616374696f6e7330646973747269627574696f6e1870616c6c6574144576656e740404540001101c437265617465640c007d0201204576656e7444696400008102011043414964000089020130446973747269627574696f6e000010b841206361706974616c20646973747269627574696f6e2c20776974682064657461696c7320696e636c756465642c31017761732063726561746564206279207468652044494420287065726d697373696f6e6564206167656e742920666f7220746865204341206964656e746966696564206279206043414964602e00a8284167656e74204449442c20434127732049442c20646973747269627574696f6e2064657461696c73293842656e65666974436c61696d656418007d0201204576656e7444696400007d0201204576656e7444696400008102011043414964000089020130446973747269627574696f6e000018011c42616c616e636500008d02010c54617800010c51014120746f6b656e20686f6c64657227732062656e65666974206f662061206361706974616c20646973747269627574696f6e20666f722074686520676976656e206043414964602077617320636c61696d65642e0091012843616c6c6572204449442c20486f6c6465722f436c61696d616e74204449442c20434127732049442c207570646174656420646973747269627574696f6e2064657461696c732c2044494427732062656e656669742c20444944277320746178202529245265636c61696d65640c007d0201204576656e7444696400008102011043414964000018011c42616c616e636500020c9853746174732066726f6d2060707573685f62656e65666974602077617320656d69747465642e001501284167656e74204449442c20434127732049442c206d61782072657175657374656420444944732c2070726f63657373656420444944732c206661696c65642044494473291c52656d6f76656408007d0201204576656e744469640000810201104341496400030c8c41206361706974616c20646973747269627574696f6e207761732072656d6f7665642e0050284167656e74204449442c204341277320494429047c54686520604576656e746020656e756d206f6620746869732070616c6c65747d020c4c706f6c796d6573685f7072696d697469766573286576656e745f6f6e6c79244576656e744f6e6c7904045401800004008001045400008102086070616c6c65745f636f72706f726174655f616374696f6e731043414964000008012061737365745f6964a8011c417373657449640001206c6f63616c5f6964850201244c6f63616c4341496400008502086070616c6c65745f636f72706f726174655f616374696f6e73244c6f63616c434149640000040010010c753332000089020c6070616c6c65745f636f72706f726174655f616374696f6e7330646973747269627574696f6e30446973747269627574696f6e000020011066726f6de8012c506f7274666f6c696f496400012063757272656e6379a8011c417373657449640001247065725f736861726518011c42616c616e6365000118616d6f756e7418011c42616c616e636500012472656d61696e696e6718011c42616c616e63650001247265636c61696d656439010110626f6f6c0001287061796d656e745f61742801184d6f6d656e74000128657870697265735f6174050101384f7074696f6e3c4d6f6d656e743e00008d020c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c75333200009102103070616c6c65745f617373657428636865636b706f696e741870616c6c6574144576656e7404045400011044436865636b706f696e744372656174656414007c01484f7074696f6e3c4964656e7469747949643e0000a8011c41737365744964000095020130436865636b706f696e7449640000180170706f6c796d6573685f7072696d6974697665733a3a42616c616e636500002801184d6f6d656e7400000c644120636865636b706f696e742077617320637265617465642e0021012863616c6c6572204449442c20417373657449642c20636865636b706f696e742049442c20746f74616c20737570706c792c20636865636b706f696e742074696d657374616d7029844d6178696d756d5363686564756c6573436f6d706c65786974794368616e67656408008001284964656e746974794964000028010c75363400010c2501546865206d6178696d756d20636f6d706c657869747920666f7220616e206172626974726172792061737365742773207363686564756c652073657420776173206368616e6765642e0064284743204449442c20746865206e6577206d6178696d756d293c5363686564756c654372656174656410008001284964656e7469747949640000a8011c417373657449640000990201285363686564756c65496400009d02014c5363686564756c65436865636b706f696e747300020c884120636865636b706f696e74207363686564756c652077617320637265617465642e00b02863616c6c6572204449442c20417373657449642c207363686564756c652069642c207363686564756c65293c5363686564756c6552656d6f76656410008001284964656e7469747949640000a8011c417373657449640000990201285363686564756c65496400009d02014c5363686564756c65436865636b706f696e747300030c884120636865636b706f696e74207363686564756c65207761732072656d6f7665642e00b02863616c6c6572204449442c20417373657449642c207363686564756c652069642c207363686564756c6529047c54686520604576656e746020656e756d206f6620746869732070616c6c657495020c4c706f6c796d6573685f7072696d69746976657314617373657430436865636b706f696e7449640000040028010c753634000099021064706f6c796d6573685f636f6d6d6f6e5f7574696c69746965731874726169747328636865636b706f696e74285363686564756c6549640000040028010c75363400009d021064706f6c796d6573685f636f6d6d6f6e5f7574696c69746965731874726169747328636865636b706f696e744c5363686564756c65436865636b706f696e7473000004011c70656e64696e67a102014042547265655365743c4d6f6d656e743e0000a102042042547265655365740404540128000400a502000000a5020000022800a9020c6470616c6c65745f636f6d706c69616e63655f6d616e616765721870616c6c6574144576656e7404045400012470436f6d706c69616e6365526571756972656d656e74437265617465640c008001284964656e7469747949640000a8011c417373657449640000ad020154436f6d706c69616e6365526571756972656d656e74000008cc456d6974746564207768656e206e657720636f6d706c69616e636520726571756972656d656e7420697320637265617465642eb42863616c6c6572204449442c20417373657449642c20436f6d706c69616e6365526571756972656d656e74292e70436f6d706c69616e6365526571756972656d656e7452656d6f7665640c008001284964656e7469747949640000a8011c41737365744964000010010c753332000108c4456d6974746564207768656e206120636f6d706c69616e636520726571756972656d656e742069732072656d6f7665642e982863616c6c6572204449442c20417373657449642c20726571756972656d656e745f6964292e5c4173736574436f6d706c69616e63655265706c616365640c008001284964656e7469747949640000a8011c417373657449640000d90201685665633c436f6d706c69616e6365526571756972656d656e743e000208b4456d6974746564207768656e20616e20617373657420636f6d706c69616e6365206973207265706c616365642ed8506172616d65746572733a2063616c6c6572204449442c20417373657449642c206e657720617373657420636f6d706c69616e63652e504173736574436f6d706c69616e6365526573657408008001284964656e7469747949640000a8011c41737365744964000308e0456d6974746564207768656e20616e20617373657420636f6d706c69616e6365206f6620612061737365745f69642069732072657365742e582863616c6c6572204449442c2041737365744964292e584173736574436f6d706c69616e6365526573756d656408008001284964656e7469747949640000a8011c417373657449640004080901456d6974746564207768656e20616e20617373657420636f6d706c69616e636520666f72206120676976656e2061737365745f6964206765747320726573756d652e582863616c6c6572204449442c2041737365744964292e544173736574436f6d706c69616e636550617573656408008001284964656e7469747949640000a8011c417373657449640005080901456d6974746564207768656e20616e20617373657420636f6d706c69616e636520666f72206120676976656e2061737365745f69642067657473207061757365642e582863616c6c6572204449442c2041737365744964292e70436f6d706c69616e6365526571756972656d656e744368616e6765640c008001284964656e7469747949640000a8011c417373657449640000ad020154436f6d706c69616e6365526571756972656d656e74000608e0456d6974746564207768656e20636f6d706c69616e636520726571756972656d656e7420676574206d6f6469666965642f6368616e67652eb42863616c6c6572204449442c20417373657449642c20436f6d706c69616e6365526571756972656d656e74292e785472757374656444656661756c74436c61696d49737375657241646465640c008001284964656e7469747949640000a8011c417373657449640000c9020134547275737465644973737565720007081d01456d6974746564207768656e2064656661756c7420636c61696d20697373756572206c69737420666f72206120676976656e2061737365745f696420676574732061646465642eac2863616c6c6572204449442c20417373657449642c2041646465642054727573746564497373756572292e805472757374656444656661756c74436c61696d49737375657252656d6f7665640c008001284964656e7469747949640000a8011c4173736574496400008001284964656e7469747949640008082101456d6974746564207768656e2064656661756c7420636c61696d20697373756572206c69737420666f72206120676976656e2061737365745f6964206765742072656d6f7665642eb42863616c6c6572204449442c20417373657449642c2052656d6f7665642054727573746564497373756572292e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ad020c4c706f6c796d6573685f7072696d69746976657348636f6d706c69616e63655f6d616e6167657254436f6d706c69616e6365526571756972656d656e7400000c014473656e6465725f636f6e646974696f6e73b10201385665633c436f6e646974696f6e3e00014c72656365697665725f636f6e646974696f6e73b10201385665633c436f6e646974696f6e3e000108696410010c7533320000b102000002b50200b5020c4c706f6c796d6573685f7072696d69746976657324636f6e646974696f6e24436f6e646974696f6e0000080138636f6e646974696f6e5f74797065b9020134436f6e646974696f6e5479706500011c69737375657273c50201485665633c547275737465644973737565723e0000b9020c4c706f6c796d6573685f7072696d69746976657324636f6e646974696f6e34436f6e646974696f6e5479706500011424497350726573656e74040009010114436c61696d000000204973416273656e74040009010114436c61696d0001001c4973416e794f660400bd0201285665633c436c61696d3e0002002049734e6f6e654f660400bd0201285665633c436c61696d3e0003002849734964656e746974790400c10201385461726765744964656e7469747900040000bd02000002090100c1020c4c706f6c796d6573685f7072696d69746976657324636f6e646974696f6e385461726765744964656e746974790001083445787465726e616c4167656e7400000020537065636966696304008001284964656e74697479496400010000c502000002c90200c9020c4c706f6c796d6573685f7072696d69746976657324636f6e646974696f6e345472757374656449737375657200000801186973737565728001284964656e74697479496400012c747275737465645f666f72cd02012854727573746564466f720000cd020c4c706f6c796d6573685f7072696d69746976657324636f6e646974696f6e2854727573746564466f720001080c416e790000002053706563696669630400d10201385665633c436c61696d547970653e00010000d102000002d50200d5020c4c706f6c796d6573685f7072696d697469766573386964656e746974795f636c61696d24436c61696d54797065000128284163637265646974656400000024416666696c69617465000100244275794c6f636b75700002002853656c6c4c6f636b757000030050437573746f6d657244756544696c6967656e6365000400404b6e6f77596f7572437573746f6d6572000500304a7572697364696374696f6e000600204578656d707465640007001c426c6f636b656400080018437573746f6d040019010144437573746f6d436c61696d54797065496400090000d902000002ad0200dd020c6070616c6c65745f636f72706f726174655f616374696f6e731870616c6c6574144576656e740404540001205c4d617844657461696c734c656e6774684368616e67656408008001284964656e746974794964000010010c753332000008d4546865206d6178696d756d206c656e677468206f66206064657461696c736020696e20627974657320776173206368616e6765642e50284743204449442c206e6577206c656e677468297844656661756c745461726765744964656e7469746965734368616e6765640c008001284964656e7469747949640000a8011c417373657449640000e10201405461726765744964656e746974696573000108f054686520736574206f662064656661756c7420605461726765744964656e7469746965736020666f7220746865206173736574206368616e6765642ea8284167656e74204449442c20417373657449642c204e6577205461726765744964656e746974696573297044656661756c7457697468686f6c64696e675461784368616e6765640c008001284964656e7469747949640000a8011c4173736574496400008d02010c546178000208c85468652064656661756c742077697468686f6c64696e672074617820666f7220746865206173736574206368616e6765642e78284167656e74204449442c20417373657449642c204e657720546178292e6044696457697468686f6c64696e675461784368616e67656410008001284964656e7469747949640000a8011c4173736574496400008001284964656e7469747949640000e902012c4f7074696f6e3c5461783e000308f05468652077697468686f6c64696e672074617820737065636966696320746f20612044494420666f7220746865206173736574206368616e6765642ea4284167656e74204449442c20417373657449642c205461786564204449442c204e657720546178292e2c4341496e6974696174656410007d0201204576656e74446964000081020110434149640000ed02013c436f72706f72617465416374696f6e000009030124434144657461696c730004084c412043412077617320696e697469617465642ea8284167656e74204449442c2043412069642c207468652043412c207468652043412064657461696c73293443414c696e6b6564546f446f630c008001284964656e7469747949640000810201104341496400000d03013c5665633c446f63756d656e7449643e000508844120434120776173206c696e6b656420746f206120736574206f6620646f63732eac284167656e74204449442c2043412049642c204c697374206f6620646f63206964656e746966696572732924434152656d6f76656408007d0201204576656e74446964000081020110434149640006084441204341207761732072656d6f7665642e48284167656e74204449442c20434120496429445265636f7264446174654368616e6765640c007d0201204576656e74446964000081020110434149640000ed02013c436f72706f72617465416374696f6e0007046c412043412773207265636f72642064617465206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e102086070616c6c65745f636f72706f726174655f616374696f6e73405461726765744964656e74697469657300000801286964656e7469746965734101013c5665633c4964656e7469747949643e00012474726561746d656e74e502013c54617267657454726561746d656e740000e502086070616c6c65745f636f72706f726174655f616374696f6e733c54617267657454726561746d656e740001081c496e636c7564650000001c4578636c75646500010000e90204184f7074696f6e040454018d020108104e6f6e6500000010536f6d6504008d020000010000ed02086070616c6c65745f636f72706f726174655f616374696f6e733c436f72706f72617465416374696f6e00001801106b696e64f102011843414b696e640001246465636c5f646174652801184d6f6d656e7400012c7265636f72645f64617465f50201484f7074696f6e3c5265636f7264446174653e00011c74617267657473e10201405461726765744964656e74697469657300015c64656661756c745f77697468686f6c64696e675f7461788d02010c54617800013c77697468686f6c64696e675f746178010301585665633c284964656e7469747949642c20546178293e0000f102086070616c6c65745f636f72706f726174655f616374696f6e731843414b696e64000114485072656469637461626c6542656e6566697400000050556e7072656469637461626c6542656e65666974000100304973737565724e6f746963650002003852656f7267616e697a6174696f6e000300144f7468657200040000f50204184f7074696f6e04045401f9020108104e6f6e6500000010536f6d650400f9020000010000f902086070616c6c65745f636f72706f726174655f616374696f6e73285265636f7264446174650000080110646174652801184d6f6d656e74000128636865636b706f696e74fd0201304341436865636b706f696e740000fd02086070616c6c65745f636f72706f726174655f616374696f6e73304341436865636b706f696e74000108245363686564756c65640800990201285363686564756c654964000028010c753634000000204578697374696e67040095020130436865636b706f696e744964000100000103000002050300050300000408808d02000903086070616c6c65745f636f72706f726174655f616374696f6e7324434144657461696c730000040030011c5665633c75383e00000d03000002fd01001103106070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f741870616c6c6574144576656e740404540001181c4372656174656414008001284964656e7469747949640000810201104341496400001503013c42616c6c6f7454696d6552616e676500001903012842616c6c6f744d657461000039010110626f6f6c00000c7c4120636f72706f726174652062616c6c6f742077617320637265617465642e001501284167656e74204449442c20434127732049442c20566f74696e672073746172742f656e642c2042616c6c6f74206d657461646174612c2052435620656e61626c65643f2920566f7465436173740c008001284964656e7469747949640000810201104341496400003903013c5665633c42616c6c6f74566f74653e00010c984120766f746520776173206361737420696e206120636f72706f726174652062616c6c6f742e006028766f746572204449442c20434149642c20566f746573293052616e67654368616e6765640c008001284964656e7469747949640000810201104341496400001503013c42616c6c6f7454696d6552616e676500020cd04120636f72706f726174652062616c6c6f74206368616e676564206974732073746172742f656e6420646174652072616e67652e0098284167656e74204449442c20434127732049442c20566f74696e672073746172742f656e64292c4d6574614368616e6765640c008001284964656e7469747949640000810201104341496400001903012842616c6c6f744d65746100030ca04120636f72706f726174652062616c6c6f74206368616e67656420697473206d657461646174612e0088284167656e74204449442c20434127732049442c204e6577206d6574616461746129285243564368616e6765640c008001284964656e74697479496400008102011043414964000039010110626f6f6c00040cac4120636f72706f726174652062616c6c6f74206368616e676564206974732052435620737570706f72742e0084284167656e74204449442c20434127732049442c204e657720737570706f7274291c52656d6f76656408007d0201204576656e744469640000810201104341496400050c7c4120636f72706f726174652062616c6c6f74207761732072656d6f7665642e0050284167656e74204449442c204341277320494429047c54686520604576656e746020656e756d206f6620746869732070616c6c657415030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f743c42616c6c6f7454696d6552616e6765000008011473746172742801184d6f6d656e7400010c656e642801184d6f6d656e74000019030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f742842616c6c6f744d65746100000801147469746c651d03012c42616c6c6f745469746c6500011c6d6f74696f6e732103012c5665633c4d6f74696f6e3e00001d030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f742c42616c6c6f745469746c650000040030011c5665633c75383e0000210300000225030025030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f74184d6f74696f6e00000c01147469746c652903012c4d6f74696f6e5469746c65000124696e666f5f6c696e6b2d0301384d6f74696f6e496e666f4c696e6b00011c63686f69636573310301405665633c43686f6963655469746c653e000029030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f742c4d6f74696f6e5469746c650000040030011c5665633c75383e00002d030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f74384d6f74696f6e496e666f4c696e6b0000040030011c5665633c75383e0000310300000235030035030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f742c43686f6963655469746c650000040030011c5665633c75383e000039030000023d03003d030c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f742842616c6c6f74566f74650000080114706f77657218011c42616c616e636500012066616c6c6261636b4103012c4f7074696f6e3c7531363e0000410304184f7074696f6e0404540145030108104e6f6e6500000010536f6d650400450300000100004503000005040049030c2c70616c6c65745f706970731870616c6c6574144576656e7404045400015050486973746f726963616c506970735072756e65640c008001284964656e746974794964000039010110626f6f6c000039010110626f6f6c00001894486973746f726963616c2050495073205072756e696e6720686173206265656e207365742e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722ebc2d2060626f6f6c603a20546865206f6c642076616c7565206f6620746865207072756e696e672073657474696e672ebc2d2060626f6f6c603a20546865206e65772076616c7565206f6620746865207072756e696e672073657474696e672e3c50726f706f73616c4372656174656420008001284964656e74697479496400004d03015850726f706f7365723c543a3a4163636f756e7449643e0000550301145069704964000018011c42616c616e636500004902012c4f7074696f6e3c55726c3e0000590301584f7074696f6e3c5069704465736372697074696f6e3e0000510101744d61796265426c6f636b3c426c6f636b4e756d626572466f723c543e3e00006103013050726f706f73616c4461746100012ccc41205049502077617320637265617465642077697468206120737065636966696564206042616c616e636560207374616b652e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722ed02d206050726f706f7365723c543a3a4163636f756e7449643e603a205468652070726f706f736572206f6620746865205049502e742d20605069704964603a20546865204944206f6620746865205049502e802d206042616c616e6365603a20546865206465706f73697420616d6f756e742ec42d20604f7074696f6e3c55726c3e603a205468652055524c20666f722070726f706f73616c2064697363757373696f6e2ef02d20604f7074696f6e3c5069704465736372697074696f6e3e603a20546865206465736372697074696f6e206f66207468652070726f706f73616c2e01012d20604d61796265426c6f636b3c543a3a426c6f636b4e756d6265723e603a20546865206578706972792074696d65206f66207468652070726f706f73616c2eac2d206050726f706f73616c44617461603a205468652064617461206f66207468652070726f706f73616c2e5050726f706f73616c5374617465557064617465640c008001284964656e746974794964000055030114506970496400006503013450726f706f73616c537461746500021890546865207374617465206f6620612070726f706f73616c2077617320757064617465642e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e742d20605069704964603a20546865204944206f6620746865205049502ec42d206050726f706f73616c5374617465603a20546865206e6577207374617465206f66207468652070726f706f73616c2e14566f74656414008001284964656e7469747949640000000130543a3a4163636f756e7449640000550301145069704964000039010110626f6f6c000018011c42616c616e63650003207c416e206163636f756e7420766f746564206f6e20612070726f706f73616c2e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722ea42d2060543a3a4163636f756e744964603a20546865206163636f756e74207468617420766f7465642e742d20605069704964603a20546865204944206f6620746865205049502ec42d2060626f6f6c603a2054686520766f746520287472756520666f72206179652c2066616c736520666f72206e6179292eb02d206042616c616e6365603a20546865206465706f73697420616d6f756e74206f662074686520766f74652e24506970436c6f7365640c008001284964656e7469747949640000550301145069704964000039010110626f6f6c0004184441205049502077617320636c6f7365642e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e742d20605069704964603a20546865204944206f6620746865205049502ec02d2060626f6f6c603a20496e64696361746573207768657468657220746865206461746120776173207072756e65642e48457865637574696f6e5363686564756c65640c008001284964656e74697479496400005503011450697049640000100144426c6f636b4e756d626572466f723c543e0005189454686520657865637574696f6e206f6620612050495020776173207363686564756c65642e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e742d20605069704964603a20546865204944206f6620746865205049502e39012d2060426c6f636b4e756d626572603a2054686520626c6f636b206e756d6265722061742077686963682074686520504950206973207363686564756c656420666f7220657865637574696f6e2e7444656661756c74456e6163746d656e74506572696f644368616e6765640c008001284964656e7469747949640000100144426c6f636b4e756d626572466f723c543e0000100144426c6f636b4e756d626572466f723c543e000618a45468652064656661756c7420656e6163746d656e7420706572696f6420776173206368616e6765642e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722ea82d2060426c6f636b4e756d626572603a20546865206f6c6420656e6163746d656e7420706572696f642ea82d2060426c6f636b4e756d626572603a20546865206e657720656e6163746d656e7420706572696f642e744d696e696d756d50726f706f73616c4465706f7369744368616e6765640c008001284964656e746974794964000018011c42616c616e6365000018011c42616c616e6365000718d4546865206d696e696d756d206465706f73697420616d6f756e7420666f722070726f706f73616c7320776173206368616e6765642e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e902d206042616c616e6365603a20546865206f6c64206465706f73697420616d6f756e742e902d206042616c616e6365603a20546865206e6577206465706f73697420616d6f756e742e5c50656e64696e675069704578706972794368616e6765640c008001284964656e7469747949640000510101744d61796265426c6f636b3c426c6f636b4e756d626572466f723c543e3e0000510101744d61796265426c6f636b3c426c6f636b4e756d626572466f723c543e3e000818b4546865206578706972792074696d6520666f722070656e64696e67205049507320776173206368616e6765642e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722ed02d20604d61796265426c6f636b3c543a3a426c6f636b4e756d6265723e603a20546865206f6c64206578706972792074696d652ed02d20604d61796265426c6f636b3c543a3a426c6f636b4e756d6265723e603a20546865206e6577206578706972792074696d652e584d6178506970536b6970436f756e744368616e6765640c008001284964656e7469747949640000080130536b6970706564436f756e740000080130536b6970706564436f756e74000918f4546865206d6178696d756d206e756d626572206f662074696d65732061205049502063616e20626520736b697070656420776173206368616e6765642e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e942d2060536b6970706564436f756e74603a20546865206f6c6420736b697020636f756e742e942d2060536b6970706564436f756e74603a20546865206e657720736b697020636f756e742e544163746976655069704c696d69744368616e6765640c008001284964656e746974794964000010010c753332000010010c753332000a18b8546865206d6178696d756d206e756d626572206f6620616374697665205049507320776173206368616e6765642e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e882d2060753332603a20546865206f6c642061637469766520504950206c696d69742e882d2060753332603a20546865206e65772061637469766520504950206c696d69742e3850726f706f73616c526566756e640c008001284964656e7469747949640000550301145069704964000018011c42616c616e6365000b1860412070726f706f73616c2077617320726566756e6465642e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e742d20605069704964603a20546865204944206f6620746865205049502e9c2d206042616c616e6365603a2054686520746f74616c20616d6f756e7420726566756e6465642e3c536e617073686f74436c656172656408008001284964656e746974794964000069030128536e617073686f744964000c146454686520736e617073686f742077617320636c65617265642e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e9c2d2060536e617073686f744964603a20546865204944206f662074686520736e617073686f742e34536e617073686f7454616b656e0c008001284964656e746974794964000069030128536e617073686f74496400006d03014c5665633c536e617073686f747465645069703e000d186441206e657720736e617073686f74207761732074616b656e2e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e9c2d2060536e617073686f744964603a20546865204944206f662074686520736e617073686f742ee82d20605665633c536e617073686f747465645069703e603a20546865206c697374206f66205049507320696e2074686520736e617073686f742e28506970536b69707065640c008001284964656e74697479496400005503011450697049640000080130536b6970706564436f756e74000e18a0412050495020696e2074686520736e617073686f742071756575652077617320736b69707065642e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e742d20605069704964603a20546865204944206f6620746865205049502e942d2060536b6970706564436f756e74603a20546865206e657720736b697020636f756e742e58536e617073686f74526573756c7473456e616374656414008001284964656e7469747949640000790301484f7074696f6e3c536e617073686f7449643e00007d0301685665633c2850697049642c20536b6970706564436f756e74293e0000850301285665633c50697049643e0000850301285665633c50697049643e000f20e4526573756c7473207765726520656e616374656420666f7220736f6d65205049507320696e2074686520736e617073686f742071756575652e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722edc2d20604f7074696f6e3c536e617073686f7449643e603a20546865204944206f662074686520736e617073686f742c20696620616e792e51012d20605665633c2850697049642c20536b6970706564436f756e74293e603a20546865206c697374206f6620736b697070656420504950732077697468207468656972206e657720736b697020636f756e74732ea82d20605665633c50697049643e603a20546865206c697374206f662072656a656374656420504950732ea82d20605665633c50697049643e603a20546865206c697374206f6620617070726f76656420504950732e64457865637574696f6e5363686564756c696e674661696c65640c008001284964656e74697479496400005503011450697049640000100144426c6f636b4e756d626572466f723c543e0010180d015363686564756c696e67206f66207468652050495020666f7220657865637574696f6e206661696c656420696e20746865207363686564756c65722070616c6c65742e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e742d20605069704964603a20546865204944206f6620746865205049502e3d012d2060426c6f636b4e756d626572603a2054686520626c6f636b206e756d626572206174207768696368207468652050495020776173207363686564756c656420666f7220657865637574696f6e2e3c4578706972795363686564756c65640c008001284964656e74697479496400005503011450697049640000100144426c6f636b4e756d626572466f723c543e001118985468652050495020686173206265656e207363686564756c656420666f72206578706972792e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e742d20605069704964603a20546865204944206f6620746865205049502e2d012d2060426c6f636b4e756d626572603a2054686520626c6f636b206e756d6265722061742077686963682074686520504950206973207363686564756c656420666f72206578706972792e584578706972795363686564756c696e674661696c65640c008001284964656e74697479496400005503011450697049640000100144426c6f636b4e756d626572466f723c543e00121801015363686564756c696e67206f66207468652050495020666f7220657870697279206661696c656420696e20746865207363686564756c65722070616c6c65742e002c506172616d65746572733a982d20604964656e746974794964603a2054686520444944206f66207468652063616c6c65722e742d20605069704964603a20546865204944206f6620746865205049502e31012d2060426c6f636b4e756d626572603a2054686520626c6f636b206e756d626572206174207768696368207468652050495020776173207363686564756c656420666f72206578706972792e64457865637574696f6e43616e63656c6c696e674661696c65640400550301145069704964001310f043616e63656c6c696e67207468652050495020657865637574696f6e206661696c656420696e20746865207363686564756c65722070616c6c65742e002c506172616d65746572733a742d20605069704964603a20546865204944206f6620746865205049502e047c54686520604576656e746020656e756d206f6620746869732070616c6c65744d030c2c70616c6c65745f706970731474797065732050726f706f73657204244163636f756e7449640100010824436f6d6d756e69747904000001244163636f756e74496400000024436f6d6d6974746565040051030124436f6d6d69747465650001000051030c2c70616c6c65745f7069707314747970657324436f6d6d697474656500010824546563686e6963616c0000001c557067726164650001000055030c2c70616c6c65745f706970731474797065731450697049640000040010010c7533320000590304184f7074696f6e040454015d030108104e6f6e6500000010536f6d6504005d0300000100005d030c2c70616c6c65745f70697073147479706573385069704465736372697074696f6e0000040030011c5665633c75383e000061030c2c70616c6c65745f706970731474797065733050726f706f73616c44617461000108104861736804002c0110483235360000002050726f706f73616c040030011c5665633c75383e0001000065030c2c70616c6c65745f706970731474797065733450726f706f73616c53746174650001181c50656e64696e670000002052656a6563746564000100245363686564756c6564000200184661696c65640003002045786563757465640004001c457870697265640005000069030c2c70616c6c65745f7069707314747970657328536e617073686f7449640000040010010c75333200006d0300000271030071030c2c70616c6c65745f7069707314747970657338536e617073686f74746564506970000008010869645503011450697049640001187765696768747503013c28626f6f6c2c2042616c616e636529000075030000040839011800790304184f7074696f6e0404540169030108104e6f6e6500000010536f6d650400690300000100007d0300000281030081030000040855030800850300000255030089030c4070616c6c65745f706f7274666f6c696f1870616c6c6574144576656e7404045400012840506f7274666f6c696f437265617465640c008001284964656e7469747949640000f0013c506f7274666f6c696f4e756d62657200008d030134506f7274666f6c696f4e616d65000018b054686520706f7274666f6c696f20686173206265656e207375636365737366756c6c7920637265617465642e00302320506172616d6574657273302a206f726967696e20444944482a20706f7274666f6c696f206e756d626572402a20706f7274666f6c696f206e616d6540506f7274666f6c696f44656c6574656408008001284964656e7469747949640000f0013c506f7274666f6c696f4e756d626572000114b054686520706f7274666f6c696f20686173206265656e207375636365737366756c6c792072656d6f7665642e00302320506172616d6574657273302a206f726967696e20444944482a20706f7274666f6c696f206e756d62657240506f7274666f6c696f52656e616d65640c008001284964656e7469747949640000f0013c506f7274666f6c696f4e756d62657200008d030134506f7274666f6c696f4e616d65000218fc54686520706f7274666f6c696f206964656e746966696564207769746820606e756d6020686173206265656e2072656e616d656420746f20606e616d65602e00302320506172616d6574657273302a206f726967696e20444944482a20706f7274666f6c696f206e756d626572402a20706f7274666f6c696f206e616d653855736572506f7274666f6c696f7308008001284964656e7469747949640000910301945665633c28506f7274666f6c696f4e756d6265722c20506f7274666f6c696f4e616d65293e000314d4416c6c206e6f6e2d64656661756c7420706f7274666f6c696f206e756d6265727320616e64206e616d6573206f662061204449442e00302320506172616d6574657273302a206f726967696e20444944742a20766563746f72206f66206e756d6265722d6e616d6520706169727364506f7274666f6c696f437573746f6469616e4368616e6765640c008001284964656e7469747949640000e8012c506f7274666f6c696f496400008001284964656e746974794964000418f4437573746f6479206f66206120706f7274666f6c696f20686173206265656e20676976656e20746f206120646966666572656e74206964656e7469747900302320506172616d6574657273302a206f726967696e20444944382a20706f7274666f6c696f206964642a20706f7274666f6c696f20637573746f6469616e206469646c46756e64734d6f7665644265747765656e506f7274666f6c696f7314008001284964656e7469747949640000e8012c506f7274666f6c696f49640000e8012c506f7274666f6c696f496400009903013c46756e644465736372697074696f6e00008401304f7074696f6e3c4d656d6f3e0005208c46756e64732068617665206d6f766564206265747765656e20706f7274666f6c696f7300302320506172616d6574657273342a204f726967696e204449442e4c2a20536f7572636520706f7274666f6c696f2e602a2044657374696e6174696f6e20706f7274666f6c696f2e882a205468652074797065206f662066756e64207468617420776173206d6f7665642e742a204f7074696f6e616c206d656d6f20666f7220746865206d6f76652e50507265417070726f766564506f7274666f6c696f0c008001284964656e7469747949640000e8012c506f7274666f6c696f49640000a8011c41737365744964000618e44120706f7274666f6c696f206861732070726520617070726f7665642074686520726563656976656d656e74206f6620616e2061737365742e00302320506172616d65746572737c2a205b604964656e746974794964605d206f66207468652063616c6c65722e21012a205b60506f7274666f6c696f4964605d20746861742077696c6c20726563656976652061737365747320776974686f7574206578706c696369742061666669726d6174696f6e2e29012a205b6041737365744964605d206f6620746865206173736574207468617420686173206265656e206578656d70742066726f6d206578706c696369742061666669726d6174696f6e2e685265766f6b65507265417070726f766564506f7274666f6c696f0c008001284964656e7469747949640000e8012c506f7274666f6c696f49640000a8011c41737365744964000718c44120706f7274666f6c696f206861732072656d6f7665642074686520617070726f76616c206f6620616e2061737365742e00302320506172616d65746572737c2a205b604964656e746974794964605d206f66207468652063616c6c65722ed02a205b60506f7274666f6c696f4964605d207468617420686164206974732070726520617070726f76616c207265766f6b65642ef42a205b6041737365744964605d206f6620746865206173736574207468617420686164206974732070726520617070726f76616c207265766f6b65642e7c416c6c6f774964656e74697479546f437265617465506f7274666f6c696f7308008001284964656e74697479496400008001284964656e746974794964000814b0416c6c6f7720616e6f74686572206964656e7469747920746f2063726561746520706f7274666f6c696f732e00302320506172616d65746572737c2a205b604964656e746974794964605d206f66207468652063616c6c65722eb82a205b604964656e746974794964605d20616c6c6f77656420746f2063726561746520706f7274666f6c696f732e805265766f6b65437265617465506f7274666f6c696f735065726d697373696f6e08008001284964656e74697479496400008001284964656e746974794964000914e85265766f6b6520616e6f74686572206964656e746974696573207065726d697373696f6e20746f2063726561746520706f7274666f6c696f732e00302320506172616d65746572737c2a205b604964656e746974794964605d206f66207468652063616c6c65722ef42a205b604964656e746974794964605d207065726d697373696f6e7320746f2063726561746520706f7274666f6c696f73206973207265766f6b65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748d030c4c706f6c796d6573685f7072696d6974697665732c6964656e746974795f696434506f7274666f6c696f4e616d650000040030011c5665633c75383e00009103000002950300950300000408f08d030099030c4c706f6c796d6573685f7072696d69746976657324706f7274666f6c696f3c46756e644465736372697074696f6e0001082046756e6769626c6508012061737365745f6964a8011c41737365744964000118616d6f756e7418011c42616c616e63650000002c4e6f6e46756e6769626c6504009d0301104e465473000100009d030c4c706f6c796d6573685f7072696d6974697665730c6e6674104e465473000008012061737365745f6964a8011c4173736574496400010c696473a10301285665633c4e465449643e0000a103000002a50300a5030c4c706f6c796d6573685f7072696d6974697665730c6e6674144e465449640000040028010c7536340000a9030c4c70616c6c65745f70726f746f636f6c5f6665651870616c6c6574144576656e7404045400010c1846656553657408008001284964656e746974794964000018011c42616c616e6365000004845468652070726f746f636f6c20666565206f6620616e206f7065726174696f6e2e38436f656666696369656e7453657408008001284964656e7469747949640000ad030120506f73526174696f000104505468652066656520636f656666696369656e742e28466565436861726765640800000130543a3a4163636f756e744964000018011c42616c616e63650002043046656520636861726765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ad03084c706f6c796d6573685f7072696d69746976657320506f73526174696f0000080010010c753332000010010c7533320000b1030c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bb50301785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964b90301404f7074696f6e3c5461736b4e616d653e000118726573756c74490101384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bb50301785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964b90301404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bb50301785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964b90301404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bb50301785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964b90301404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652eb50300000408101000b90304184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000bd030c4470616c6c65745f736574746c656d656e741870616c6c6574144576656e740404540001603056656e75654372656174656410008001284964656e7469747949640000c103011c56656e756549640000c503013056656e756544657461696c730000c903012456656e756554797065000004ec41206e65772076656e756520686173206265656e206372656174656420286469642c2076656e75655f69642c2064657461696c732c2074797065294c56656e756544657461696c73557064617465640c008001284964656e7469747949640000c103011c56656e756549640000c503013056656e756544657461696c730001041501416e206578697374696e672076656e756527732064657461696c7320686173206265656e207570646174656420286469642c2076656e75655f69642c2064657461696c73294056656e756554797065557064617465640c008001284964656e7469747949640000c103011c56656e756549640000c903012456656e756554797065000204fc416e206578697374696e672076656e75652773207479706520686173206265656e207570646174656420286469642c2076656e75655f69642c2074797065294c496e737472756374696f6e41666669726d65640c008001284964656e7469747949640000e8012c506f7274666f6c696f4964000071020134496e737472756374696f6e49640003040501416e20696e737472756374696f6e20686173206265656e2061666669726d656420286469642c20706f7274666f6c696f2c20696e737472756374696f6e5f6964295041666669726d6174696f6e57697468647261776e0c008001284964656e7469747949640000e8012c506f7274666f6c696f4964000071020134496e737472756374696f6e49640004040901416e2061666669726d6174696f6e20686173206265656e2077697468647261776e20286469642c20706f7274666f6c696f2c20696e737472756374696f6e5f6964294c496e737472756374696f6e52656a656374656408008001284964656e746974794964000071020134496e737472756374696f6e4964000504d8416e20696e737472756374696f6e20686173206265656e2072656a656374656420286469642c20696e737472756374696f6e5f6964293852656365697074436c61696d656418008001284964656e746974794964000071020134496e737472756374696f6e49640000cd0301144c65674964000028010c7536340000000130543a3a4163636f756e7449640000d103015c4f7074696f6e3c526563656970744d657461646174613e0006047d0141207265636569707420686173206265656e20636c61696d656420286469642c20696e737472756374696f6e5f69642c206c65675f69642c20726563656970745f7569642c207369676e65722c2072656365697074206d65746164617461293856656e756546696c746572696e670c008001284964656e7469747949640000a8011c41737365744964000039010110626f6f6c0007046d0156656e75652066696c746572696e6720686173206265656e20656e61626c6564206f722064697361626c656420666f7220616e20617373657420286469642c20417373657449642c2066696c746572696e675f656e61626c6564293456656e756573416c6c6f7765640c008001284964656e7469747949640000a8011c417373657449640000d90301305665633c56656e756549643e000804e056656e75657320616464656420746f20616c6c6f77206c69737420286469642c20417373657449642c207665633c76656e75655f69643e293456656e756573426c6f636b65640c008001284964656e7469747949640000a8011c417373657449640000d90301305665633c56656e756549643e000904e056656e75657320616464656420746f20626c6f636b206c69737420286469642c20417373657449642c207665633c76656e75655f69643e29484c65674661696c6564457865637574696f6e0c008001284964656e746974794964000071020134496e737472756374696f6e49640000cd0301144c65674964000a04dc457865637574696f6e206f662061206c6567206661696c656420286469642c20696e737472756374696f6e5f69642c206c65675f6964294c496e737472756374696f6e457865637574656408008001284964656e746974794964000071020134496e737472756374696f6e4964000b04d8496e737472756374696f6e206578656375746564207375636365737366756c6c79286469642c20696e737472756374696f6e5f6964294456656e7565556e617574686f72697a65640c008001284964656e7469747949640000a8011c417373657449640000c103011c56656e75654964000c04050156656e7565206e6f742070617274206f662074686520746f6b656e277320616c6c6f77206c69737420286469642c20417373657449642c2076656e75655f696429405363686564756c696e674661696c6564080071020134496e737472756374696f6e4964000060013444697370617463684572726f72000d04805363686564756c696e67206f6620696e737472756374696f6e206661696c732e58496e737472756374696f6e52657363686564756c656408008001284964656e746974794964000071020134496e737472756374696f6e4964000e086c496e737472756374696f6e2069732072657363686564756c65642e702863616c6c6572204449442c20696e737472756374696f6e5f6964294c56656e75655369676e6572735570646174656410008001284964656e7469747949640000c103011c56656e756549640000fc01445665633c543a3a4163636f756e7449643e000039010110626f6f6c000f044901416e206578697374696e672076656e75652773207369676e65727320686173206265656e207570646174656420286469642c2076656e75655f69642c207369676e6572732c207570646174655f747970652968536574746c656d656e744d616e75616c6c79457865637574656408008001284964656e746974794964000071020134496e737472756374696f6e496400100498536574746c656d656e74206d616e75616c6c7920657865637574656420286469642c2069642948496e737472756374696f6e4372656174656420008001284964656e7469747949640000dd03013c4f7074696f6e3c56656e756549643e000071020134496e737472756374696f6e49640000e1030184536574746c656d656e74547970653c426c6f636b4e756d626572466f723c543e3e0000050101444f7074696f6e3c543a3a4d6f6d656e743e0000050101444f7074696f6e3c543a3a4d6f6d656e743e0000e50301205665633c4c65673e00008401304f7074696f6e3c4d656d6f3e0011088841206e657720696e737472756374696f6e20686173206265656e20637265617465645101286469642c2076656e75655f69642c20696e737472756374696f6e5f69642c20736574746c656d656e745f747970652c2074726164655f646174652c2076616c75655f646174652c206c6567732c206d656d6f29684661696c6564546f45786563757465496e737472756374696f6e080071020134496e737472756374696f6e4964000060013444697370617463684572726f72001204784661696c656420746f206578656375746520696e737472756374696f6e2e80496e737472756374696f6e4175746f6d61746963616c6c7941666669726d65640c008001284964656e7469747949640000e8012c506f7274666f6c696f4964000071020134496e737472756374696f6e4964001308bc416e20696e737472756374696f6e20686173206265656e206175746f6d61746963616c6c792061666669726d65642ed101506172616d65746572733a205b604964656e746974794964605d206f66207468652063616c6c65722c205b60506f7274666f6c696f4964605d206f66207468652072656365697665722c20616e64205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e2e6c4d65646961746f7241666669726d6174696f6e52656365697665640c008001284964656e746974794964000071020134496e737472756374696f6e49640000050101444f7074696f6e3c543a3a4d6f6d656e743e001408a8416e20696e737472756374696f6e206861732061666669726d65642062792061206d65646961746f722e5101506172616d65746572733a205b604964656e746974794964605d206f6620746865206d65646961746f7220616e64205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e2e704d65646961746f7241666669726d6174696f6e57697468647261776e08008001284964656e746974794964000071020134496e737472756374696f6e4964001508f0416e20696e737472756374696f6e2061666669726d6174696f6e20686173206265656e2077697468647261776e2062792061206d65646961746f722e5101506172616d65746572733a205b604964656e746974794964605d206f6620746865206d65646961746f7220616e64205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e2e50496e737472756374696f6e4d65646961746f7273080071020134496e737472756374696f6e496400007502015042547265655365743c4964656e7469747949643e001608bc416e20696e737472756374696f6e2077697468206d65646961746f727320686173206265656e20637265617465642e6501506172616d65746572733a205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e20616e6420746865205b604964656e746974794964605d206f6620616c6c206d65646961746f72732e44496e737472756374696f6e4c6f636b656408008001284964656e746974794964000071020134496e737472756374696f6e4964001714e0416e20696e737472756374696f6e20686173206265656e2073756365737366756c6c79206c6f636b656420666f7220657865637574696f6e002c506172616d65746572733ac42d20604964656e746974794964603a20546865205b604964656e746974794964605d206f66207468652063616c6c65722ef02d2060496e737472756374696f6e4964603a20546865205b60496e737472756374696f6e4964605d206f662074686520696e737472756374696f6e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c1030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e741c56656e756549640000040028010c7536340000c5030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e743056656e756544657461696c730000040030011c5665633c75383e0000c9030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e742456656e756554797065000110144f7468657200000030446973747269627574696f6e0001000c53746f0002002045786368616e676500030000cd030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e74144c656749640000040028010c7536340000d10304184f7074696f6e04045401d5030108104e6f6e6500000010536f6d650400d5030000010000d5030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e743c526563656970744d65746164617461000004000401205b75383b2033325d0000d903000002c10300dd0304184f7074696f6e04045401c1030108104e6f6e6500000010536f6d650400c1030000010000e1030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e7438536574746c656d656e7454797065042c426c6f636b4e756d626572011001104c536574746c654f6e41666669726d6174696f6e00000034536574746c654f6e426c6f636b040010012c426c6f636b4e756d62657200010030536574746c654d616e75616c040010012c426c6f636b4e756d6265720002003c536574746c6541667465724c6f636b00030000e503000002e90300e9030c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e740c4c656700010c2046756e6769626c6510011873656e646572e8012c506f7274666f6c696f49640001207265636569766572e8012c506f7274666f6c696f496400012061737365745f6964a8011c41737365744964000118616d6f756e7418011c42616c616e63650000002c4e6f6e46756e6769626c650c011873656e646572e8012c506f7274666f6c696f49640001207265636569766572e8012c506f7274666f6c696f49640001106e6674739d0301104e465473000100204f6666436861696e10013c73656e6465725f6964656e746974798001284964656e74697479496400014472656365697665725f6964656e746974798001284964656e7469747949640001187469636b6572210101185469636b6572000118616d6f756e7418011c42616c616e636500020000ed030c4470616c6c65745f737461746973746963731870616c6c6574144576656e740404540001183853746174547970657341646465640c008001284964656e7469747949640000a8011c417373657449640000f10301345665633c53746174547970653e00000c685374617420747970657320616464656420746f2061737365742e00842843616c6c6572204449442c20417373657449642c2053746174207479706573294053746174547970657352656d6f7665640c008001284964656e7469747949640000a8011c417373657449640000f10301345665633c53746174547970653e00010c78537461742074797065732072656d6f7665642066726f6d2061737365742e00842843616c6c6572204449442c20417373657449642c20537461742074797065732944417373657453746174735570646174656410008001284964656e7469747949640000a8011c417373657449640000f5030120537461745479706500000504013c5665633c537461745570646174653e00020c50417373657420737461747320757064617465642e00a42843616c6c6572204449442c20417373657449642c205374617420747970652c2055706461746573296853657441737365745472616e73666572436f6d706c69616e63650c008001284964656e7469747949640000a8011c4173736574496400001d0401585665633c5472616e73666572436f6e646974696f6e3e00030ca0536574205472616e7366657220636f6d706c69616e63652072756c657320666f722061737365742e00a82843616c6c6572204449442c20417373657449642c205472616e7366657220636f6e646974696f6e7329805472616e73666572436f6e646974696f6e4578656d7074696f6e7341646465640c008001284964656e7469747949640000250401685472616e73666572436f6e646974696f6e4578656d70744b657900004101013c5665633c4964656e7469747949643e00040c150141646420604964656e7469747949646073206578656d707420666f72207472616e7366657220636f6e646974696f6e73206d61746368696e67206578656d7074206b65792e00882843616c6c6572204449442c204578656d7074206b65792c20456e74697469657329885472616e73666572436f6e646974696f6e4578656d7074696f6e7352656d6f7665640c008001284964656e7469747949640000250401685472616e73666572436f6e646974696f6e4578656d70744b657900004101013c5665633c4964656e7469747949643e00050c210152656d6f766520604964656e7469747949646073206578656d707420666f72207472616e7366657220636f6e646974696f6e73206d61746368696e67206578656d7074206b65792e00882843616c6c6572204449442c204578656d7074206b65792c20456e74697469657329047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f103000002f50300f5030c4c706f6c796d6573685f7072696d697469766573287374617469737469637320537461745479706500000801386f7065726174696f6e5f74797065f9030128537461744f7054797065000130636c61696d5f697373756572fd03017c4f7074696f6e3c28436c61696d547970652c204964656e746974794964293e0000f9030c4c706f6c796d6573685f7072696d697469766573287374617469737469637328537461744f705479706500010814436f756e740000001c42616c616e636500010000fd0304184f7074696f6e0404540101040108104e6f6e6500000010536f6d65040001040000010000010400000408d5028000050400000209040009040c4c706f6c796d6573685f7072696d6974697665732873746174697374696373285374617455706461746500000801106b6579320d04012853746174326e644b657900011476616c7565190401304f7074696f6e3c753132383e00000d040c4c706f6c796d6573685f7072696d69746976657328737461746973746963732853746174326e644b65790001082c4e6f436c61696d5374617400000014436c61696d04001104012453746174436c61696d0001000011040c4c706f6c796d6573685f7072696d69746976657328737461746973746963732453746174436c61696d00010c2841636372656469746564040039010110626f6f6c00000024416666696c69617465040039010110626f6f6c000100304a7572697364696374696f6e04001504014c4f7074696f6e3c436f756e747279436f64653e00020000150404184f7074696f6e0404540115010108104e6f6e6500000010536f6d65040015010000010000190404184f7074696f6e04045401180108104e6f6e6500000010536f6d6504001800000100001d0400000221040021040c4c706f6c796d6573685f7072696d6974697665734c7472616e736665725f636f6d706c69616e6365445472616e73666572436f6e646974696f6e000110404d6178496e766573746f72436f756e74040028010c753634000000504d6178496e766573746f724f776e65727368697004008d02012850657263656e7461676500010028436c61696d436f756e7410001104012453746174436c61696d00008001284964656e746974794964000028010c75363400000501012c4f7074696f6e3c7536343e00020038436c61696d4f776e65727368697010001104012453746174436c61696d00008001284964656e74697479496400008d02012850657263656e7461676500008d02012850657263656e746167650003000025040c4c706f6c796d6573685f7072696d6974697665734c7472616e736665725f636f6d706c69616e6365685472616e73666572436f6e646974696f6e4578656d70744b657900000c012061737365745f6964a8011c417373657449640001086f70f9030128537461744f7054797065000128636c61696d5f74797065290401444f7074696f6e3c436c61696d547970653e0000290404184f7074696f6e04045401d5020108104e6f6e6500000010536f6d650400d50200000100002d040c2870616c6c65745f73746f1870616c6c6574144576656e7404045400011c4446756e64726169736572437265617465641801246167656e745f6469648001284964656e74697479496404e84964656e74697479206f66207468652065787465726e616c206167656e742077686f2063726561746564207468652066756e647261697365722e01386f66666572696e675f6173736574a8011c4173736574496404bc4173736574206265696e67206f66666572656420666f722073616c6520696e207468652066756e647261697365722e013472616973696e675f6173736574a8011c4173736574496404c84173736574206265696e67206163636570746564206173207061796d656e7420696e207468652066756e647261697365722e013466756e647261697365725f69643104013046756e6472616973657249640494556e69717565206964656e74696669657220666f72207468652066756e647261697365722e013c66756e647261697365725f6e616d653504013846756e647261697365724e616d65049848756d616e2d7265616461626c65206e616d65206f66207468652066756e647261697365722e012866756e647261697365723904015446756e647261697365723c543a3a4d6f6d656e743e0488436f6d706c6574652066756e6472616973657220636f6e66696775726174696f6e2e000c8841206e65772066756e6472616973657220686173206265656e20637265617465642e0059015b6167656e745f6469642c206f66666572696e675f61737365742c2072616973696e675f61737365742c2066756e647261697365725f69642c2066756e647261697365725f6e616d652c2066756e647261697365725d20496e766573746564180130696e766573746f725f6469648001284964656e74697479496404644964656e74697479206f662074686520696e766573746f722e01386f66666572696e675f6173736574a8011c4173736574496404584173736574206265696e67207075726368617365642e013466756e647261697365725f69643104013046756e647261697365724964048046756e6472616973657220746861742077617320696e76657374656420696e2e013466756e64696e675f61737365744904013046756e64696e67417373657404b454797065206f662066756e64696e67207573656420286f6e2d636861696e206f72206f66662d636861696e292e013c6f66666572696e675f616d6f756e7418011c42616c616e6365048c416d6f756e74206f66206f66666572696e67206173736574207075726368617365642e013072616973655f616d6f756e7418011c42616c616e63650478416d6f756e74206f662072616973696e67206173736574207370656e742e010cd0416e20696e766573746f72207375636365737366756c6c7920696e76657374656420696e207468652066756e647261697365722e006d015b696e766573746f725f6469642c206f66666572696e675f61737365742c2066756e647261697365725f69642c2066756e64696e675f61737365742c206f66666572696e675f616d6f756e742c2072616973655f616d6f756e745d4046756e6472616973657246726f7a656e0c01246167656e745f6469648001284964656e74697479496404e04964656e74697479206f66207468652065787465726e616c206167656e742077686f2066726f7a65207468652066756e647261697365722e01386f66666572696e675f6173736574a8011c4173736574496404944173736574206173736f6369617465642077697468207468652066756e647261697365722e013466756e647261697365725f69643104013046756e647261697365724964046c46756e647261697365722074686174207761732066726f7a656e2e020ce4412066756e6472616973657220686173206265656e2066726f7a656e2c2070726576656e74696e67206e657720696e766573746d656e74732e00a85b6167656e745f6469642c206f66666572696e675f61737365742c2066756e647261697365725f69645d4846756e64726169736572556e66726f7a656e0c01246167656e745f6469648001284964656e74697479496404e84964656e74697479206f66207468652065787465726e616c206167656e742077686f20756e66726f7a65207468652066756e647261697365722e01386f66666572696e675f6173736574a8011c4173736574496404944173736574206173736f6369617465642077697468207468652066756e647261697365722e013466756e647261697365725f69643104013046756e647261697365724964047446756e6472616973657220746861742077617320756e66726f7a656e2e030ce4412066756e6472616973657220686173206265656e20756e66726f7a656e2c20616c6c6f77696e67206e657720696e766573746d656e74732e00a85b6167656e745f6469642c206f66666572696e675f61737365742c2066756e647261697365725f69645d6046756e6472616973657257696e646f774d6f6469666965641c01246167656e745f6469647d0201204576656e7444696404dc4964656e74697479206f66207468652065787465726e616c206167656e742077686f206d6f646966696564207468652077696e646f772e01386f66666572696e675f6173736574a8011c4173736574496404944173736574206173736f6369617465642077697468207468652066756e647261697365722e013466756e647261697365725f69643104013046756e647261697365724964049446756e647261697365722077686f73652077696e646f7720776173206d6f6469666965642e01246f6c645f7374617274280124543a3a4d6f6d656e74045050726576696f75732073746172742074696d652e011c6f6c645f656e64050101444f7074696f6e3c543a3a4d6f6d656e743e046c50726576696f757320656e642074696d652028696620616e79292e01246e65775f7374617274280124543a3a4d6f6d656e74043c4e65772073746172742074696d652e011c6e65775f656e64050101444f7074696f6e3c543a3a4d6f6d656e743e04584e657720656e642074696d652028696620616e79292e040cb4412066756e6472616973657227732074696d652077696e646f7720686173206265656e206d6f6469666965642e0049015b6167656e745f6469642c206f66666572696e675f61737365742c2066756e647261697365725f69642c206f6c645f73746172742c206f6c645f656e642c206e65775f73746172742c206e65775f656e645d4046756e64726169736572436c6f7365640c01246167656e745f6469648001284964656e74697479496404e44964656e74697479206f66207468652065787465726e616c206167656e742077686f20636c6f736564207468652066756e647261697365722e01386f66666572696e675f6173736574a8011c4173736574496404944173736574206173736f6369617465642077697468207468652066756e647261697365722e013466756e647261697365725f69643104013046756e647261697365724964046c46756e6472616973657220746861742077617320636c6f7365642e050ca4412066756e6472616973657220686173206265656e207065726d616e656e746c7920636c6f7365642e00a85b6167656e745f6469642c206f66666572696e675f61737365742c2066756e647261697365725f69645d8046756e647261697365724f6666636861696e46756e64696e67456e61626c65641001246167656e745f6469648001284964656e74697479496404f44964656e74697479206f66207468652065787465726e616c206167656e742077686f20656e61626c6564206f66662d636861696e2066756e64696e672e01386f66666572696e675f6173736574a8011c4173736574496404944173736574206173736f6369617465642077697468207468652066756e647261697365722e013466756e647261697365725f69643104013046756e64726169736572496404cc46756e6472616973657220666f72207768696368206f66662d636861696e2066756e64696e672077617320656e61626c65642e01187469636b6572210101185469636b657204945469636b65722073796d626f6c206f6620746865206f66662d636861696e2061737365742e060cd04f66662d636861696e2066756e64696e6720686173206265656e20656e61626c656420666f7220612066756e647261697365722e00c85b6167656e745f6469642c206f66666572696e675f61737365742c2066756e647261697365725f69642c207469636b65725d047c54686520604576656e746020656e756d206f6620746869732070616c6c657431040c4c706f6c796d6573685f7072696d6974697665730c73746f3046756e6472616973657249640000040028010c75363400003504082870616c6c65745f73746f3846756e647261697365724e616d650000040030011c5665633c75383e00003904082870616c6c65745f73746f2846756e6472616973657204184d6f6d656e740128002c011c63726561746f728001284964656e7469747949640001486f66666572696e675f706f7274666f6c696fe8012c506f7274666f6c696f49640001386f66666572696e675f6173736574a8011c4173736574496400014472616973696e675f706f7274666f6c696fe8012c506f7274666f6c696f496400013472616973696e675f6173736574a8011c4173736574496400011474696572733d04014c5665633c46756e64726169736572546965723e00012076656e75655f6964c103011c56656e7565496400011473746172742801184d6f6d656e7400010c656e64050101384f7074696f6e3c4d6f6d656e743e0001187374617475734504014046756e647261697365725374617475730001486d696e696d756d5f696e766573746d656e7418011c42616c616e636500003d040000024104004104082870616c6c65745f73746f3846756e647261697365725469657200000c0114746f74616c18011c42616c616e6365000114707269636518011c42616c616e636500012472656d61696e696e6718011c42616c616e636500004504082870616c6c65745f73746f4046756e64726169736572537461747573000110104c6976650000001846726f7a656e00010018436c6f7365640002002c436c6f7365644561726c79000300004904082870616c6c65745f73746f3046756e64696e6741737365740001081c4f6e436861696e0400a8011c41737365744964000000204f6666436861696e0400210101185469636b6572000100004d040c3c70616c6c65745f74726561737572791870616c6c6574144576656e7404045400010c50547265617375727944697362757273656d656e7410008001284964656e74697479496400008001284964656e7469747949640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e00000c8844697362757273656d656e7420746f206120746172676574204964656e746974792e000101287472656173757279206964656e746974792c20746172676574206964656e746974792c20746172676574207072696d617279206b65792c20616d6f756e742968547265617375727944697362757273656d656e744661696c656410008001284964656e74697479496400008001284964656e7469747949640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e00010ca444697362757273656d656e7420746f206120746172676574204964656e74697479206661696c65642e000101287472656173757279206964656e746974792c20746172676574206964656e746974792c20746172676574207072696d617279206b65792c20616d6f756e74295454726561737572795265696d62757273656d656e7408008001284964656e746974794964000018013042616c616e63654f663c543e00020c5c5472656173757279207265696d62757273656d656e742e006428736f75726365206964656e746974792c20616d6f756e7429047c54686520604576656e746020656e756d206f6620746869732070616c6c657451040c3870616c6c65745f7574696c6974791870616c6c6574144576656e7404045400011c404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74490101384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e2452656c6179656454780c012863616c6c65725f6469648001284964656e746974794964000118746172676574000130543a3a4163636f756e744964000118726573756c74490101384469737061746368526573756c740006085052656c61796564207472616e73616374696f6e2e40504f4c594d4553483a206576656e742e047c54686520604576656e746020656e756d206f6620746869732070616c6c657455040c2c70616c6c65745f626173651870616c6c6574144576656e740001043c556e65787065637465644572726f720400590401544f7074696f6e3c44697370617463684572726f723e000008e4416e20756e6578706563746564206572726f722068617070656e656420746861742073686f756c6420626520696e766573746967617465642e60544f444f3a20556e757365642c2072656d6f76652069742e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574590404184f7074696f6e04045401600108104e6f6e6500000010536f6d6504006000000100005d040c5870616c6c65745f65787465726e616c5f6167656e74731870616c6c6574144576656e740404540001143047726f75704372656174656410007d0201204576656e744469640000a8011c41737365744964000035010110414749640000b8015045787472696e7369635065726d697373696f6e7300000c6c416e204167656e742047726f75702077617320637265617465642e00d42843616c6c6572204449442c204147277320417373657449642c20414727732049442c2041472773207065726d697373696f6e73295c47726f75705065726d697373696f6e735570646174656410007d0201204576656e744469640000a8011c41737365744964000035010110414749640000b8015045787472696e7369635065726d697373696f6e7300010ca4416e204167656e742047726f75702773207065726d697373696f6e732077617320757064617465642e00e42843616c6c6572204449442c204147277320417373657449642c20414727732049442c2041472773206e6577207065726d697373696f6e7329284167656e7441646465640c007d0201204576656e744469640000a8011c417373657449640000310101284167656e7447726f757000020c4c416e206167656e74207761732061646465642e00c82843616c6c65722f4167656e74204449442c204167656e74277320417373657449642c204167656e7427732067726f757029304167656e7452656d6f7665640c007d0201204576656e744469640000a8011c4173736574496400008001284964656e74697479496400030c54416e206167656e74207761732072656d6f7665642e00a82843616c6c6572204449442c204167656e74277320417373657449642c204167656e74277320444944293047726f75704368616e67656410007d0201204576656e744469640000a8011c4173736574496400008001284964656e7469747949640000310101284167656e7447726f757000040c74416e206167656e7427732067726f757020776173206368616e6765642e0019012843616c6c6572204449442c204167656e74277320417373657449642c204167656e742773204449442c20546865206e65772067726f7570206f6620746865206167656e7429047c54686520604576656e746020656e756d206f6620746869732070616c6c657461040c3870616c6c65745f72656c617965721870616c6c6574144576656e740404540001104c417574686f72697a6564506179696e674b657914007d0201204576656e744469640000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018011c42616c616e6365000028010c75363400000ccc417574686f72697a6174696f6e20676976656e20666f722060706179696e675f6b65796020746f2060757365725f6b6579602e0001012843616c6c6572204449442c2055736572204b65792c20506179696e67204b65792c20496e697469616c20504f4c5958206c696d69742c204175746820494429444163636570746564506179696e674b65790c007d0201204576656e744469640000000130543a3a4163636f756e7449640000000130543a3a4163636f756e74496400010c50416363657074656420706179696e67206b65792e00882843616c6c6572204449442c2055736572204b65792c20506179696e67204b6579294052656d6f766564506179696e674b65790c007d0201204576656e744469640000000130543a3a4163636f756e7449640000000130543a3a4163636f756e74496400020c4c52656d6f76656420706179696e67206b65792e00882843616c6c6572204449442c2055736572204b65792c20506179696e67204b6579294455706461746564506f6c79784c696d697414007d0201204576656e744469640000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018011c42616c616e6365000018011c42616c616e636500030c505570646174656420706f6c7978206c696d69742e0011012843616c6c6572204449442c2055736572204b65792c20506179696e67204b65792c20504f4c5958206c696d69742c206f6c642072656d61696e696e6720504f4c595829047c54686520604576656e746020656e756d206f6620746869732070616c6c657465040c4070616c6c65745f636f6e7472616374731870616c6c6574144576656e7404045400012030496e7374616e7469617465640801206465706c6f796572000130543a3a4163636f756e744964000120636f6e7472616374000130543a3a4163636f756e744964000004d8436f6e7472616374206465706c6f7965642062792061646472657373206174207468652073706563696669656420616464726573732e285465726d696e61746564080120636f6e7472616374000130543a3a4163636f756e744964048454686520636f6e7472616374207468617420776173207465726d696e617465642e012c62656e6566696369617279000130543a3a4163636f756e74496404e4546865206163636f756e7420746861742072656365697665642074686520636f6e7472616374732072656d61696e696e672062616c616e6365011868436f6e747261637420686173206265656e2072656d6f7665642e001823204e6f7465003d01546865206f6e6c792077617920666f72206120636f6e747261637420746f2062652072656d6f76656420616e6420656d697474696e672074686973206576656e742069732062792063616c6c696e6744607365616c5f7465726d696e617465602e28436f646553746f726564040124636f64655f686173682c011c543a3a48617368000204b4436f646520776974682074686520737065636966696564206861736820686173206265656e2073746f7265642e3c436f6e7472616374456d6974746564080120636f6e7472616374000130543a3a4163636f756e744964049054686520636f6e7472616374207468617420656d697474656420746865206576656e742e01106461746130011c5665633c75383e0835014461746120737570706c6965642062792074686520636f6e74726163742e204d657461646174612067656e65726174656420647572696e6720636f6e747261637420636f6d70696c6174696f6e5c6973206e656564656420746f206465636f64652069742e03049c4120637573746f6d206576656e7420656d69747465642062792074686520636f6e74726163742e2c436f646552656d6f766564040124636f64655f686173682c011c543a3a48617368000404ac4120636f6465207769746820746865207370656369666965642068617368207761732072656d6f7665642e4c436f6e7472616374436f6465557064617465640c0120636f6e7472616374000130543a3a4163636f756e744964048c54686520636f6e7472616374207468617420686173206265656e20757064617465642e01346e65775f636f64655f686173682c011c543a3a4861736804b04e657720636f646520686173682074686174207761732073657420666f722074686520636f6e74726163742e01346f6c645f636f64655f686173682c011c543a3a48617368048c50726576696f757320636f64652068617368206f662074686520636f6e74726163742e0504784120636f6e7472616374277320636f64652077617320757064617465642e1843616c6c656408011863616c6c6572690401244f726967696e3c543e04745468652063616c6c6572206f66207468652060636f6e7472616374602e0120636f6e7472616374000130543a3a4163636f756e744964047454686520636f6e74726163742074686174207761732063616c6c65642e061c11014120636f6e7472616374207761732063616c6c656420656974686572206279206120706c61696e206163636f756e74206f7220616e6f7468657220636f6e74726163742e001823204e6f7465003101506c65617365206b65657020696e206d696e642074686174206c696b6520616c6c206576656e74732074686973206973206f6e6c7920656d697474656420666f72207375636365737366756c290163616c6c732e20546869732069732062656361757365206f6e206661696c75726520616c6c2073746f72616765206368616e67657320696e636c7564696e67206576656e74732061726530726f6c6c6564206261636b2e3844656c656761746543616c6c6564080120636f6e7472616374000130543a3a4163636f756e74496408210154686520636f6e7472616374207468617420706572666f726d6564207468652064656c65676174652063616c6c20616e642068656e636520696e2077686f736520636f6e74657874707468652060636f64655f68617368602069732065786563757465642e0124636f64655f686173682c012c436f6465486173683c543e049c54686520636f646520686173682074686174207761732064656c65676174652063616c6c65642e071c9c4120636f6e74726163742064656c65676174652063616c6c6564206120636f646520686173682e001823204e6f7465003101506c65617365206b65657020696e206d696e642074686174206c696b6520616c6c206576656e74732074686973206973206f6e6c7920656d697474656420666f72207375636365737366756c290163616c6c732e20546869732069732062656361757365206f6e206661696c75726520616c6c2073746f72616765206368616e67657320696e636c7564696e67206576656e74732061726530726f6c6c6564206261636b2e047c54686520604576656e746020656e756d206f6620746869732070616c6c65746904084070616c6c65745f636f6e747261637473184f726967696e040454016d04010810526f6f74000000185369676e65640400000130543a3a4163636f756e744964000100006d040c60706f6c796d6573685f72756e74696d655f646576656c6f701c72756e74696d651c52756e74696d650000000071040c48706f6c796d6573685f636f6e7472616374731870616c6c6574144576656e740404540001083841706948617368557064617465640c007504010c417069000079040130436861696e56657273696f6e00002c012c436f6465486173683c543e000008f0456d6974746564207768656e206120636f6e74726163742073746172747320737570706f7274696e672061206e65772041504920757067726164652e2101436f6e7461696e7320746865205b60417069605d2c205b60436861696e56657273696f6e605d2c20616e642074686520627974657320666f722074686520636f646520686173682e34534352756e74696d6543616c6c0800000130543a3a4163636f756e74496400007d04012c45787472696e7369634964000108bc456d6974746564207768656e206120636f6e74726163742063616c6c7320696e746f207468652072756e74696d652e2901436f6e7461696e7320746865206163636f756e74206964207365742062792074686520636f6e7472616374206f776e657220616e6420746865205b6045787472696e7369634964605d2e047c54686520604576656e746020656e756d206f6620746869732070616c6c657475040848706f6c796d6573685f636f6e7472616374730c41706900000801106465736340011c5b75383b20345d0001146d616a6f7210010c753332000079040848706f6c796d6573685f636f6e74726163747330436861696e56657273696f6e0000080130737065635f76657273696f6e10010c75333200012874785f76657273696f6e10010c75333200007d040c48706f6c796d6573685f636f6e7472616374733c636861696e5f657874656e73696f6e2c45787472696e736963496400000800080108753800000801087538000081040c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f746564040110686173682c011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e24526571756573746564040110686173682c011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c6561726564040110686173682c011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657485040c2870616c6c65745f6e66741870616c6c6574144576656e74040454000108504e6674436f6c6c656374696f6e437265617465640c008001284964656e7469747949640000a8011c4173736574496400008904013c4e4654436f6c6c656374696f6e4964000004b4456d6974746564207768656e2061206e6577206e667420636f6c6c656374696f6e20697320637265617465642e4c4e4654506f7274666f6c696f5570646174656414008001284964656e74697479496400009d0301104e46547300006502014c4f7074696f6e3c506f7274666f6c696f49643e00006502014c4f7074696f6e3c506f7274666f6c696f49643e000069020154506f7274666f6c696f557064617465526561736f6e00010cdc456d6974746564207768656e204e4654732077657265206973737565642c2072656465656d6564206f72207472616e736665727265642e0502436f6e7461696e7320746865205b604964656e746974794964605d206f66207468652072656365697665722f6973737565722f72656465656d65722c20746865205b604e465473605d2c20746865205b60506f7274666f6c696f4964605d206f662074686520736f757263652c20746865205b60506f7274666f6c696f4964605dd46f66207468652064657374696e6174696f6e20616e6420746865205b60506f7274666f6c696f557064617465526561736f6e605d2e047c54686520604576656e746020656e756d206f6620746869732070616c6c657489040c4c706f6c796d6573685f7072696d6974697665730c6e66743c4e4654436f6c6c656374696f6e49640000040028010c75363400008d040c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144576656e7404045400011838536f6c7574696f6e53746f7265640c011c636f6d707574659104013c456c656374696f6e436f6d707574650001186f726967696e290101504f7074696f6e3c543a3a4163636f756e7449643e000130707265765f656a656374656439010110626f6f6c00001cb44120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e00510154686520606f726967696e6020696e6469636174657320746865206f726967696e206f662074686520736f6c7574696f6e2e20496620606f726967696e602069732060536f6d65284163636f756e74496429602c55017468652073746f72656420736f6c7574696f6e20776173207375626d6974656420696e20746865207369676e65642070686173652062792061206d696e657220776974682074686520604163636f756e744964602e25014f74686572776973652c2074686520736f6c7574696f6e207761732073746f7265642065697468657220647572696e672074686520756e7369676e6564207068617365206f722062794d0160543a3a466f7263654f726967696e602e205468652060626f6f6c6020697320607472756560207768656e20612070726576696f757320736f6c7574696f6e2077617320656a656374656420746f206d616b6548726f6f6d20666f722074686973206f6e652e44456c656374696f6e46696e616c697a656408011c636f6d707574659104013c456c656374696f6e436f6d7075746500011473636f726595040134456c656374696f6e53636f7265000104190154686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682074686520676976656e20636f6d7075746174696f6e20616e642073636f72652e38456c656374696f6e4661696c656400020c4c416e20656c656374696f6e206661696c65642e0001014e6f74206d7563682063616e20626520736169642061626f757420776869636820636f6d7075746573206661696c656420696e207468652070726f636573732e20526577617264656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0003042501416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e1c536c617368656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0004042101416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e4450686173655472616e736974696f6e65640c011066726f6d9904016050686173653c426c6f636b4e756d626572466f723c543e3e000108746f9904016050686173653c426c6f636b4e756d626572466f723c543e3e000114726f756e6410010c753332000504b85468657265207761732061207068617365207472616e736974696f6e20696e206120676976656e20726f756e642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749104089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653c456c656374696f6e436f6d707574650001141c4f6e436861696e000000185369676e656400010020556e7369676e65640002002046616c6c6261636b00030024456d657267656e6379000400009504084473705f6e706f735f656c656374696f6e7334456c656374696f6e53636f726500000c01346d696e696d616c5f7374616b6518013c457874656e64656442616c616e636500012473756d5f7374616b6518013c457874656e64656442616c616e636500014473756d5f7374616b655f7371756172656418013c457874656e64656442616c616e636500009904089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651450686173650408426e011001100c4f6666000000185369676e656400010020556e7369676e656404009d04012828626f6f6c2c20426e2900020024456d657267656e6379000300009d040000040839011000a10408306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000a5040000022c00a904000002b50300ad0408306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6eb104014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65c4016473705f72756e74696d653a3a52756e74696d65537472696e670000b1040000061000b5040c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e0000045c536565205b6050616c6c65743a3a72656d61726b605d2e387365745f686561705f7061676573040114706167657328010c7536340001047c536565205b6050616c6c65743a3a7365745f686561705f7061676573605d2e207365745f636f6465040110636f646530011c5665633c75383e00020464536565205b6050616c6c65743a3a7365745f636f6465605d2e5c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000304a0536565205b6050616c6c65743a3a7365745f636f64655f776974686f75745f636865636b73605d2e2c7365745f73746f726167650401146974656d73b90401345665633c4b657956616c75653e00040470536565205b6050616c6c65743a3a7365745f73746f72616765605d2e306b696c6c5f73746f726167650401106b657973c10401205665633c4b65793e00050474536565205b6050616c6c65743a3a6b696c6c5f73746f72616765605d2e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b65797310010c75333200060470536565205b6050616c6c65743a3a6b696c6c5f707265666978605d2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e00070488536565205b6050616c6c65743a3a72656d61726b5f776974685f6576656e74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb904000002bd0400bd0400000408303000c1040000023000c5040c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2001185765696768740001246d61785f626c6f636b2001185765696768740001247065725f636c617373c90401845065724469737061746368436c6173733c57656967687473506572436c6173733e0000c9040c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401cd04000c01186e6f726d616ccd0401045400012c6f7065726174696f6e616ccd040104540001246d616e6461746f7279cd040104540000cd040c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632001185765696768740001346d61785f65787472696e736963d10401384f7074696f6e3c5765696768743e0001246d61785f746f74616cd10401384f7074696f6e3c5765696768743e0001207265736572766564d10401384f7074696f6e3c5765696768743e0000d10404184f7074696f6e04045401200108104e6f6e6500000010536f6d650400200000010000d5040c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178d90401545065724469737061746368436c6173733c7533323e0000d9040c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f7279100104540000dd04082873705f776569676874733c52756e74696d65446257656967687400000801107265616428010c753634000114777269746528010c7536340000e104082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65c4013452756e74696d65537472696e67000124696d706c5f6e616d65c4013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c75333200011061706973e504011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e08010875380000e504040c436f7704045401e904000400e904000000e904000002ed0400ed0400000408f1041000f104000003080000000800f5040c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c6574f9040c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401fd04045300000400050501185665633c543e0000fd04000004080105280001050c4473705f636f6e73656e7375735f626162650c617070185075626c696300000400b101013c737232353531393a3a5075626c696300000505000002fd04000905084873705f636f6e73656e7375735f736c6f747310536c6f740000040028010c75363400000d050c4473705f636f6e73656e7375735f626162651c64696765737473504e657874436f6e66696744657363726970746f720001040856310801046311050128287536342c2075363429000134616c6c6f7765645f736c6f747315050130416c6c6f776564536c6f7473000100001105000004082828001505084473705f636f6e73656e7375735f6261626530416c6c6f776564536c6f747300010c305072696d617279536c6f7473000000745072696d617279416e645365636f6e64617279506c61696e536c6f74730001006c5072696d617279416e645365636f6e64617279565246536c6f74730002000019050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401040453000004001d0501185665633c543e00001d050000020400210504184f7074696f6e0404540125050108104e6f6e6500000010536f6d6504002505000001000025050c4473705f636f6e73656e7375735f626162651c646967657374732450726544696765737400010c1c5072696d6172790400290501405072696d617279507265446967657374000100385365636f6e64617279506c61696e04003105015c5365636f6e64617279506c61696e507265446967657374000200305365636f6e646172795652460400350501545365636f6e646172795652465072654469676573740003000029050c4473705f636f6e73656e7375735f626162651c64696765737473405072696d61727950726544696765737400000c013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7409050110536c6f740001347672665f7369676e61747572652d0501305672665369676e617475726500002d05101c73705f636f72651c737232353531390c767266305672665369676e617475726500000801186f75747075740401245672664f757470757400011470726f6f660d02012056726650726f6f66000031050c4473705f636f6e73656e7375735f626162651c646967657374735c5365636f6e64617279506c61696e507265446967657374000008013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7409050110536c6f74000035050c4473705f636f6e73656e7375735f626162651c64696765737473545365636f6e6461727956524650726544696765737400000c013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7409050110536c6f740001347672665f7369676e61747572652d0501305672665369676e617475726500003905084473705f636f6e73656e7375735f62616265584261626545706f6368436f6e66696775726174696f6e00000801046311050128287536342c2075363429000134616c6c6f7765645f736c6f747315050130416c6c6f776564536c6f747300003d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014105045300000400450501185665633c543e0000410500000408281000450500000241050049050c2c70616c6c65745f626162651870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f664d050190426f783c45717569766f636174696f6e50726f6f663c486561646572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f6655050140543a3a4b65794f776e657250726f6f6600000490536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e605d2e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f664d050190426f783c45717569766f636174696f6e50726f6f663c486561646572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f6655050140543a3a4b65794f776e657250726f6f66000104b4536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e5f756e7369676e6564605d2e48706c616e5f636f6e6669675f6368616e6765040118636f6e6669670d0501504e657874436f6e66696744657363726970746f720002048c536565205b6050616c6c65743a3a706c616e5f636f6e6669675f6368616e6765605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d05084873705f636f6e73656e7375735f736c6f74734445717569766f636174696f6e50726f6f660818486561646572015105084964010105001001206f6666656e646572010501084964000110736c6f7409050110536c6f7400013066697273745f686561646572510501184865616465720001347365636f6e645f6865616465725105011848656164657200005105102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d62657201101048617368000014012c706172656e745f686173682c0130486173683a3a4f75747075740001186e756d626572b10401184e756d62657200012873746174655f726f6f742c0130486173683a3a4f757470757400013c65787472696e736963735f726f6f742c0130486173683a3a4f757470757400011864696765737434011844696765737400005505082873705f73657373696f6e3c4d656d6265727368697050726f6f6600000c011c73657373696f6e10013053657373696f6e496e646578000128747269655f6e6f646573c10401305665633c5665633c75383e3e00013c76616c696461746f725f636f756e7410013856616c696461746f72436f756e74000059050c2c70616c6c65745f626162651870616c6c6574144572726f7204045400011060496e76616c696445717569766f636174696f6e50726f6f660000043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c69644b65794f776e65727368697050726f6f66000104310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400020415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e50496e76616c6964436f6e66696775726174696f6e0003048c5375626d697474656420636f6e66696775726174696f6e20697320696e76616c69642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e5d050c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77240124543a3a4d6f6d656e7400000450536565205b6050616c6c65743a3a736574605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e61050000040c001839010065050c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e64657800000458536565205b6050616c6c65743a3a636c61696d605d2e207472616e7366657208010c6e6577690501504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e64657800010464536565205b6050616c6c65743a3a7472616e73666572605d2e1066726565040114696e64657810013c543a3a4163636f756e74496e64657800020454536565205b6050616c6c65743a3a66726565605d2e38666f7263655f7472616e736665720c010c6e6577690501504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a6539010110626f6f6c0003047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004045c536565205b6050616c6c65743a3a667265657a65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e69050c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e6465780110011408496404000001244163636f756e74496400000014496e6465780400b10401304163636f756e74496e6465780001000c526177040030011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400f10101205b75383b2032305d000400006d050c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e710500000275050075050c3c70616c6c65745f62616c616e6365731870616c6c65742c42616c616e63654c6f636b041c42616c616e63650118000c01086964f10401384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e737905011c526561736f6e7300007905083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c000200007d050c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c040454000118207472616e73666572080110646573746905018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565c101011c42616c616e636500000464536565205b6050616c6c65743a3a7472616e73666572605d2e487472616e736665725f776974685f6d656d6f0c0110646573746905018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565c101011c42616c616e63650001106d656d6f8401304f7074696f6e3c4d656d6f3e0001048c536565205b6050616c6c65743a3a7472616e736665725f776974685f6d656d6f605d2e906465706f7369745f626c6f636b5f7265776172645f726573657276655f62616c616e636504011476616c7565c101011c42616c616e6365000204d4536565205b6050616c6c65743a3a6465706f7369745f626c6f636b5f7265776172645f726573657276655f62616c616e6365605d2e2c7365745f62616c616e63650c010c77686f6905018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001206e65775f66726565c101011c42616c616e63650001306e65775f7265736572766564c101011c42616c616e636500030470536565205b6050616c6c65743a3a7365745f62616c616e6365605d2e38666f7263655f7472616e736665720c0118736f757263656905018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000110646573746905018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565c101011c42616c616e63650004047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e506275726e5f6163636f756e745f62616c616e6365040118616d6f756e7418011c42616c616e636500050494536565205b6050616c6c65743a3a6275726e5f6163636f756e745f62616c616e6365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e81050c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f72040454000114544c69717569646974795265737472696374696f6e73000004c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c204f766572666c6f7700010470476f7420616e206f766572666c6f7720616674657220616464696e674c496e73756666696369656e7442616c616e63650002047442616c616e636520746f6f206c6f7720746f2073656e642076616c7565484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369744852656365697665724364644d697373696e6700040488526563656976657220646f6573206e6f74206861766520612076616c696420434444048054686520604572726f726020656e756d206f6620746869732070616c6c65742e85050c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800008905086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100008d050c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c65741043616c6c040454000104407365745f64697361626c655f6665657304011476616c756539010110626f6f6c00000484536565205b6050616c6c65743a3a7365745f64697361626c655f66656573605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e91050000029505009505082873705f7765696768747358576569676874546f466565436f656666696369656e74041c42616c616e6365011800100134636f6566665f696e746567657218011c42616c616e6365000128636f6566665f667261637901011c50657262696c6c0001206e6567617469766539010110626f6f6c0001186465677265650801087538000099050c4c706f6c796d6573685f7072696d697469766573206964656e74697479244469645265636f726404244163636f756e74496401000004012c7072696d6172795f6b6579290101444f7074696f6e3c4163636f756e7449643e00009d0500000408a105a50500a1050c3c70616c6c65745f6964656e746974791474797065732c436c61696d3173744b657900000801187461726765748001284964656e746974794964000128636c61696d5f74797065d5020124436c61696d547970650000a5050c3c70616c6c65745f6964656e746974791474797065732c436c61696d326e644b657900000801186973737565728001284964656e74697479496400011473636f70651d0101344f7074696f6e3c53636f70653e0000a9050c4c706f6c796d6573685f7072696d697469766573347365636f6e646172795f6b6579244b65795265636f726404244163636f756e7449640100010c285072696d6172794b657904008001284964656e746974794964000000305365636f6e646172794b657904008001284964656e746974794964000100444d756c74695369675369676e65724b657904000001244163636f756e74496400020000ad0500000408800000b10500000408b5052800b5050c4c706f6c796d6573685f7072696d697469766573347365636f6e646172795f6b6579245369676e61746f727904244163636f756e74496401000108204964656e7469747904008001284964656e7469747949640000001c4163636f756e7404000001244163636f756e74496400010000b9050c4c706f6c796d6573685f7072696d69746976657334617574686f72697a6174696f6e34417574686f72697a6174696f6e08244163636f756e7449640100184d6f6d656e74012800140148617574686f72697a6174696f6e5f646174612d010170417574686f72697a6174696f6e446174613c4163636f756e7449643e000134617574686f72697a65645f62798001284964656e746974794964000118657870697279050101384f7074696f6e3c4d6f6d656e743e00011c617574685f696428010c753634000114636f756e7410010c7533320000bd0500000408802800c105083c70616c6c65745f6964656e746974791c56657273696f6e0000040008010875380000c50500000408808000c9050c3c70616c6c65745f6964656e746974791870616c6c65741043616c6c040454000160406364645f72656769737465725f6469640801387461726765745f6163636f756e74000130543a3a4163636f756e7449640001387365636f6e646172795f6b65797398017c5665633c5365636f6e646172794b65793c543a3a4163636f756e7449643e3e00000484536565205b6050616c6c65743a3a6364645f72656769737465725f646964605d2e54696e76616c69646174655f6364645f636c61696d730c010c6364648001284964656e74697479496400013064697361626c655f66726f6d280124543a3a4d6f6d656e74000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e00010498536565205b6050616c6c65743a3a696e76616c69646174655f6364645f636c61696d73605d2e486163636570745f7072696d6172795f6b6579080140726f746174696f6e5f617574685f696428010c7536340001506f7074696f6e616c5f6364645f617574685f69640501012c4f7074696f6e3c7536343e0002048c536565205b6050616c6c65743a3a6163636570745f7072696d6172795f6b6579605d2e986368616e67655f6364645f726571756972656d656e745f666f725f6d6b5f726f746174696f6e040134617574685f726571756972656439010110626f6f6c000304dc536565205b6050616c6c65743a3a6368616e67655f6364645f726571756972656d656e745f666f725f6d6b5f726f746174696f6e605d2e506a6f696e5f6964656e746974795f61735f6b657904011c617574685f696428010c75363400040494536565205b6050616c6c65743a3a6a6f696e5f6964656e746974795f61735f6b6579605d2e546c656176655f6964656e746974795f61735f6b657900050498536565205b6050616c6c65743a3a6c656176655f6964656e746974795f61735f6b6579605d2e246164645f636c61696d0c01187461726765748001284964656e746974794964000114636c61696d09010114436c61696d000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e00060468536565205b6050616c6c65743a3a6164645f636c61696d605d2e307265766f6b655f636c61696d0801187461726765748001284964656e746974794964000114636c61696d09010114436c61696d00070474536565205b6050616c6c65743a3a7265766f6b655f636c61696d605d2e54667265657a655f7365636f6e646172795f6b65797300080498536565205b6050616c6c65743a3a667265657a655f7365636f6e646172795f6b657973605d2e5c756e667265657a655f7365636f6e646172795f6b657973000904a0536565205b6050616c6c65743a3a756e667265657a655f7365636f6e646172795f6b657973605d2e446164645f617574686f72697a6174696f6e0c0118746172676574b505015c5369676e61746f72793c543a3a4163636f756e7449643e000110646174612d01017c417574686f72697a6174696f6e446174613c543a3a4163636f756e7449643e000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e000a0488536565205b6050616c6c65743a3a6164645f617574686f72697a6174696f6e605d2e5072656d6f76655f617574686f72697a6174696f6e0c0118746172676574b505015c5369676e61746f72793c543a3a4163636f756e7449643e00011c617574685f696428010c753634000140617574685f6973737565725f7061797339010110626f6f6c000b0494536565205b6050616c6c65743a3a72656d6f76655f617574686f72697a6174696f6e605d2e4067635f6164645f6364645f636c61696d0401187461726765748001284964656e746974794964000c0484536565205b6050616c6c65743a3a67635f6164645f6364645f636c61696d605d2e4c67635f7265766f6b655f6364645f636c61696d0401187461726765748001284964656e746974794964000d0490536565205b6050616c6c65743a3a67635f7265766f6b655f6364645f636c61696d605d2e547265766f6b655f636c61696d5f62795f696e6465780c01187461726765748001284964656e746974794964000128636c61696d5f74797065d5020124436c61696d5479706500011473636f70651d0101344f7074696f6e3c53636f70653e000e0498536565205b6050616c6c65743a3a7265766f6b655f636c61696d5f62795f696e646578605d2e7c726f746174655f7072696d6172795f6b65795f746f5f7365636f6e6461727908011c617574685f696428010c7536340001506f7074696f6e616c5f6364645f617574685f69640501012c4f7074696f6e3c7536343e000f04c0536565205b6050616c6c65743a3a726f746174655f7072696d6172795f6b65795f746f5f7365636f6e64617279605d2e946164645f7365636f6e646172795f6b6579735f776974685f617574686f72697a6174696f6e08013c6164646974696f6e616c5f6b657973cd05019c5665633c5365636f6e646172794b657957697468417574683c543a3a4163636f756e7449643e3e000128657870697265735f6174280124543a3a4d6f6d656e74001004d8536565205b6050616c6c65743a3a6164645f7365636f6e646172795f6b6579735f776974685f617574686f72697a6174696f6e605d2e747365745f7365636f6e646172795f6b65795f7065726d697373696f6e7308010c6b6579000130543a3a4163636f756e7449640001147065726d73a0012c5065726d697373696f6e73001104b8536565205b6050616c6c65743a3a7365745f7365636f6e646172795f6b65795f7065726d697373696f6e73605d2e5472656d6f76655f7365636f6e646172795f6b6579730401386b6579735f746f5f72656d6f7665fc01445665633c543a3a4163636f756e7449643e00120498536565205b6050616c6c65743a3a72656d6f76655f7365636f6e646172795f6b657973605d2e6872656769737465725f637573746f6d5f636c61696d5f74797065040108747930011c5665633c75383e001304ac536565205b6050616c6c65743a3a72656769737465725f637573746f6d5f636c61696d5f74797065605d2e646364645f72656769737465725f6469645f776974685f6364640c01387461726765745f6163636f756e74000130543a3a4163636f756e7449640001387365636f6e646172795f6b65797398017c5665633c5365636f6e646172794b65793c543a3a4163636f756e7449643e3e000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e001404a8536565205b6050616c6c65743a3a6364645f72656769737465725f6469645f776974685f636464605d2e546372656174655f6368696c645f6964656e746974790401347365636f6e646172795f6b6579000130543a3a4163636f756e74496400150498536565205b6050616c6c65743a3a6372656174655f6368696c645f6964656e74697479605d2e5c6372656174655f6368696c645f6964656e7469746965730801286368696c645f6b657973d90501b85665633c4372656174654368696c644964656e7469747957697468417574683c543a3a4163636f756e7449643e3e000128657870697265735f6174280124543a3a4d6f6d656e74001604a0536565205b6050616c6c65743a3a6372656174655f6368696c645f6964656e746974696573605d2e54756e6c696e6b5f6368696c645f6964656e746974790401246368696c645f6469648001284964656e74697479496400170498536565205b6050616c6c65743a3a756e6c696e6b5f6368696c645f6964656e74697479605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd05000002d10500d1051064706f6c796d6573685f636f6d6d6f6e5f7574696c697469657318747261697473206964656e74697479505365636f6e646172794b6579576974684175746804244163636f756e7449640100000801347365636f6e646172795f6b65799c015c5365636f6e646172794b65793c4163636f756e7449643e000138617574685f7369676e6174757265d5050110483531320000d505083c7072696d69746976655f74797065731048353132000004000d0201205b75383b2036345d0000d905000002dd0500dd051064706f6c796d6573685f636f6d6d6f6e5f7574696c697469657318747261697473206964656e746974796c4372656174654368696c644964656e74697479576974684175746804244163636f756e74496401000008010c6b65790001244163636f756e744964000138617574685f7369676e6174757265d5050110483531320000e1050c3c70616c6c65745f6964656e746974791870616c6c6574144572726f7204045400019834416c72656164794c696e6b6564000004dc4f6e65207365636f6e64617279206f72207072696d617279206b65792063616e206f6e6c792062656c6f6e6720746f206f6e65204449443c4d697373696e674964656e746974790001047843616c6c6572206973206d697373696e6720616e206964656e746974792e30556e617574686f72697a6564000204bc5369676e61746f7279206973206e6f742070726520617574686f72697a656420627920746865206964656e7469747944496e76616c69644163636f756e744b6579000304a84163636f756e742049642063616e6e6f74206265206578747261637465642066726f6d207369676e65725c556e417574686f72697a656443646450726f76696465720004049c4f6e6c792043444420736572766963652070726f7669646572732061726520616c6c6f7765642e74496e76616c6964417574686f72697a6174696f6e46726f6d4f776e6572000504a0416e20696e76616c696420617574686f72697a6174696f6e2066726f6d20746865206f776e65722e8c496e76616c6964417574686f72697a6174696f6e46726f6d43646450726f7669646572000604bc416e20696e76616c696420617574686f72697a6174696f6e2066726f6d20746865204344442070726f76696465722e644e6f7443646450726f76696465724174746573746174696f6e000704b84174746573746174696f6e20776173206e6f7420627920612043444420736572766963652070726f76696465722e70417574686f72697a6174696f6e734e6f74466f7253616d6544696473000804a0417574686f72697a6174696f6e7320617265206e6f7420666f72207468652073616d65204449442e4c4469644d757374416c726561647945786973740009046c54686520444944206d75737420616c72656164792065786973742e50417574686f72697a6174696f6e45787069726564000a049c546865206f6666636861696e20617574686f72697a6174696f6e2068617320657870697265642e385461726765744861734e6f436464000b0480546865207461726765742044494420686173206e6f2076616c6964204344442e6c417574686f72697a6174696f6e4861734265656e5265766f6b6564000c04a8417574686f72697a6174696f6e20686173206265656e206578706c696369746c79207265766f6b65642e74496e76616c6964417574686f72697a6174696f6e5369676e6174757265000d048c416e20696e76616c696420617574686f72697a6174696f6e207369676e61747572652e344b65794e6f74416c6c6f776564000e04d454686973206b6579206973206e6f7420616c6c6f77656420746f2065786563757465206120676976656e206f7065726174696f6e2e344e6f745072696d6172794b6579000f0461014f6e6c7920746865207072696d617279206b657920697320616c6c6f77656420746f207265766f6b6520616e204964656e74697479205369676e61746f7279206f66662d636861696e20617574686f72697a6174696f6e2e3c446964446f65734e6f7445786973740010045c5468652044494420646f6573206e6f742065786973742e40446964416c72656164794578697374730011045c5468652044494420616c7265616479206578697374732e785365636f6e646172794b657973436f6e7461696e5072696d6172794b6579001204ac546865207365636f6e64617279206b65797320636f6e7461696e20746865207072696d617279206b65792e444661696c6564546f436861726765466565001304a0436f756c646e2774206368617267652066656520666f7220746865207472616e73616374696f6e2e284e6f74415369676e6572001404d85369676e6572206973206e6f742061207365636f6e64617279206b6579206f66207468652070726f7669646564206964656e746974796c43616e6e6f744465636f64655369676e65724163636f756e744964001504150143616e6e6f7420636f6e7665727420612060543a3a4163636f756e7449646020746f2060416e795369676e61747572653a3a5369676e65723a3a4163636f756e744964602e544163636f756e744b657949734265696e6755736564001604d0546865206163636f756e74206b6579206973206265696e6720757365642c2069742063616e277420626520756e6c696e6b65642e48437573746f6d53636f7065546f6f4c6f6e670017086c4120637573746f6d2073636f706520697320746f6f206c6f6e672e9c49742063616e206174206d6f737420626520603332602063686172616374657273206c6f6e672e70437573746f6d436c61696d54797065416c7265616479457869737473001804f454686520637573746f6d20636c61696d207479706520747279696e6720746f206265207265676973746572656420616c7265616479206578697374732e6c437573746f6d436c61696d54797065446f65734e6f7445786973740019049454686520637573746f6d20636c61696d207479706520646f6573206e6f742065786973742e44436c61696d446f65734e6f744578697374001a0454436c61696d20646f6573206e6f742065786973742e3c49734368696c644964656e74697479001b0451014964656e7469747920697320616c72656164792061206368696c64206f6620616e206f74686572206964656e746974792c2063616e277420637265617465206772616e642d6368696c64206964656e746974792e404e6f506172656e744964656e74697479001c04b0546865204964656e7469747920646f65736e27742068617665206120706172656e74206964656e746974792e604e6f74506172656e744f724368696c644964656e74697479001d04bc5468652063616c6c6572206973206e6f742074686520706172656e74206f72206368696c64206964656e746974792e304475706c69636174654b6579001e04a45468652073616d65206b65792077617320696e636c75646564206d756c7469706c652074696d65732e744578636570744e6f74416c6c6f776564466f7245787472696e73696373001f04e043616e6e6f742075736520457863657074207768656e2073706563696679696e672065787472696e736963207065726d697373696f6e732e6845786365656465644e756d6265724f66476976656e4175746873002004d04d6178696d756d206e756d626572206f6620676976656e20617574686f72697a6174696f6e73207761732065786365656465642e50426164417574686f72697a6174696f6e547970650021046d015468652065787472696e736963206578706563746564206120646966666572656e742060417574686f72697a6174696f6e5479706560207468616e2077686174207468652060646174612e617574685f747970652829602069732e50496e76616c6964417574686f72697a6174696f6e002208110141757468206964656e74696669656420627920616e2060617574685f69646020666f72206120676976656e20607461726765746020646f6573206e6f742065786973742e1901546865206074617267657460206d696768742062652077726f6e67206f72207468652060617574685f69646020776173206e65766572206372656174656420617420616c6c2e6c556e617574686f72697a656443616c6c657246726f7a656e4469640023045446726f7a656e207365636f6e64617279206b65792e7c556e617574686f72697a656443616c6c65724469644d697373696e674364640024047c54686520444944206973206d697373696e6720612043444420636c61696d2e90556e617574686f72697a656443616c6c65724d697373696e675065726d697373696f6e73002504ec546865206b657920646f6573206e6f742068617665207065726d697373696f6e7320746f2065786563757465207468652065787472696e7369632e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee505000002e90500e905104c706f6c796d6573685f7072696d697469766573187472616974731467726f757038496e6163746976654d656d62657204184d6f6d656e740128000c010869648001284964656e74697479496400013864656163746976617465645f61742801184d6f6d656e74000118657870697279050101384f7074696f6e3c4d6f6d656e743e0000ed050c3070616c6c65745f67726f75701870616c6c65741043616c6c08045400044900011c607365745f6163746976655f6d656d626572735f6c696d69740401146c696d697410012c4d656d626572436f756e74000004a4536565205b6050616c6c65743a3a7365745f6163746976655f6d656d626572735f6c696d6974605d2e3864697361626c655f6d656d6265720c010c77686f8001284964656e746974794964000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e0001086174050101444f7074696f6e3c543a3a4d6f6d656e743e0001047c536565205b6050616c6c65743a3a64697361626c655f6d656d626572605d2e286164645f6d656d62657204010c77686f8001284964656e7469747949640002046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3472656d6f76655f6d656d62657204010c77686f8001284964656e74697479496400030478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e2c737761705f6d656d62657208011872656d6f76658001284964656e74697479496400010c6164648001284964656e74697479496400040470536565205b6050616c6c65743a3a737761705f6d656d626572605d2e3472657365745f6d656d6265727304011c6d656d626572734101013c5665633c4964656e7469747949643e00050478536565205b6050616c6c65743a3a72657365745f6d656d62657273605d2e4c61626469636174655f6d656d6265727368697000060490536565205b6050616c6c65743a3a61626469636174655f6d656d62657273686970605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef1050c3070616c6c65745f67726f75701870616c6c6574144572726f72080454000449000118544f6e6c795072696d6172794b6579416c6c6f776564000004b04f6e6c79207072696d617279206b6579206f6620746865206964656e7469747920697320616c6c6f7765642e3c4475706c69636174654d656d6265720001047c47726f7570206d656d6265722077617320616464656420616c72656164792e304e6f537563684d656d626572000204a443616e27742072656d6f76652061206d656d626572207468617420646f65736e27742065786973742e504c6173744d656d62657243616e6e6f7451756974000304a84c617374206d656d626572206f662074686520636f6d6d69747465652063616e206e6f7420717569742e684163746976654d656d626572734c696d697445786365656465640004045d01546865206c696d697420666f7220746865206e756d626572206f6620636f6e63757272656e7420616374697665206d656d6265727320666f7220746869732067726f757020686173206265656e2065786365656465642e684163746976654d656d626572734c696d69744f766572666c6f770005041501416374697665206d656d626572206c696d6974207761732067726561746572207468616e206d6178696d756d20636f6d6d6974746565206d656d62657273206c696d69742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef5050c60706f6c796d6573685f72756e74696d655f646576656c6f701c72756e74696d652c52756e74696d6543616c6c0001b01853797374656d0400b50401ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e00000010426162650400490501a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426162652c2052756e74696d653e0001002454696d657374616d7004005d0501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e64696365730400650501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0003002042616c616e63657304007d0501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e000500485472616e73616374696f6e5061796d656e7404008d0501dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5472616e73616374696f6e5061796d656e742c2052756e74696d653e000600204964656e746974790400c90501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4964656e746974792c2052756e74696d653e0007004c4364645365727669636550726f7669646572730400ed0501e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4364645365727669636550726f7669646572732c2052756e74696d653e00080044506f6c796d657368436f6d6d69747465650400f90501d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c796d657368436f6d6d69747465652c2052756e74696d653e0009004c436f6d6d69747465654d656d626572736869700400fd0501e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6d6d69747465654d656d626572736869702c2052756e74696d653e000a0048546563686e6963616c436f6d6d69747465650400010601dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e000b0070546563686e6963616c436f6d6d69747465654d656d626572736869700400050601050273656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465654d656d626572736869702c2052756e74696d653e000c004055706772616465436f6d6d69747465650400090601d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c55706772616465436f6d6d69747465652c2052756e74696d653e000d006855706772616465436f6d6d69747465654d656d6265727368697004000d0601fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c55706772616465436f6d6d69747465654d656d626572736869702c2052756e74696d653e000e00204d756c74695369670400110601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74695369672c2052756e74696d653e000f002856616c696461746f72730400190601bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56616c696461746f72732c2052756e74696d653e0010001c5374616b696e670400210601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e0011001c53657373696f6e0400450601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0013001c4772616e6470610400510601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e00150020496d4f6e6c696e6504007d0601b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496d4f6e6c696e652c2052756e74696d653e001700105375646f04008d0601a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e0019001441737365740400910601a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c41737365742c2052756e74696d653e001a004c4361706974616c446973747269627574696f6e04009d0601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4361706974616c446973747269627574696f6e2c2052756e74696d653e001b0028436865636b706f696e740400a50601bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436865636b706f696e742c2052756e74696d653e001c0044436f6d706c69616e63654d616e616765720400a90601d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6d706c69616e63654d616e616765722c2052756e74696d653e001d003c436f72706f72617465416374696f6e0400ad0601d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f72706f72617465416374696f6e2c2052756e74696d653e001e003c436f72706f7261746542616c6c6f740400c50601d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f72706f7261746542616c6c6f742c2052756e74696d653e001f0010506970730400c90601a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506970732c2052756e74696d653e00210024506f7274666f6c696f0400d90601b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f7274666f6c696f2c2052756e74696d653e0022002c50726f746f636f6c4665650400e50601c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f746f636f6c4665652c2052756e74696d653e002300245363686564756c65720400ed0601b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e00240028536574746c656d656e740400f50601bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c536574746c656d656e742c2052756e74696d653e00250028537461746973746963730400250701bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c537461746973746963732c2052756e74696d653e0026000c53746f0400350701a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53746f2c2052756e74696d653e0027002054726561737572790400490701b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0028001c5574696c6974790400550701b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e00290010426173650400790701a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426173652c2052756e74696d653e002a003845787465726e616c4167656e747304007d0701cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45787465726e616c4167656e74732c2052756e74696d653e002b001c52656c617965720400810701b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c52656c617965722c2052756e74696d653e002c0024436f6e7472616374730400850701b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e7472616374732c2052756e74696d653e002e0044506f6c796d657368436f6e7472616374730400910701d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c796d657368436f6e7472616374732c2052756e74696d653e002f0020507265696d6167650400a50701b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e0030000c4e66740400a90701a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4e66742c2052756e74696d653e00310068456c656374696f6e50726f76696465724d756c746950686173650400c90701fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e50726f76696465724d756c746950686173652c2052756e74696d653e00320000f9050c4070616c6c65745f636f6d6d69747465651870616c6c65741043616c6c080454000449000114487365745f766f74655f7468726573686f6c640801046e10010c7533320001046410010c7533320000048c536565205b6050616c6c65743a3a7365745f766f74655f7468726573686f6c64605d2e5c7365745f72656c656173655f636f6f7264696e61746f7204010869648001284964656e746974794964000104a0536565205b6050616c6c65743a3a7365745f72656c656173655f636f6f7264696e61746f72605d2e447365745f657870697265735f6166746572040118657870697279510101744d61796265426c6f636b3c426c6f636b4e756d626572466f723c543e3e00020488536565205b6050616c6c65743a3a7365745f657870697265735f6166746572605d2e3c766f74655f6f725f70726f706f736508011c617070726f766539010110626f6f6c00011063616c6cf505017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e00030480536565205b6050616c6c65743a3a766f74655f6f725f70726f706f7365605d2e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e64657810013450726f706f73616c496e64657800011c617070726f766539010110626f6f6c00040454536565205b6050616c6c65743a3a766f7465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732efd050c3070616c6c65745f67726f75701870616c6c65741043616c6c08045400044900011c607365745f6163746976655f6d656d626572735f6c696d69740401146c696d697410012c4d656d626572436f756e74000004a4536565205b6050616c6c65743a3a7365745f6163746976655f6d656d626572735f6c696d6974605d2e3864697361626c655f6d656d6265720c010c77686f8001284964656e746974794964000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e0001086174050101444f7074696f6e3c543a3a4d6f6d656e743e0001047c536565205b6050616c6c65743a3a64697361626c655f6d656d626572605d2e286164645f6d656d62657204010c77686f8001284964656e7469747949640002046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3472656d6f76655f6d656d62657204010c77686f8001284964656e74697479496400030478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e2c737761705f6d656d62657208011872656d6f76658001284964656e74697479496400010c6164648001284964656e74697479496400040470536565205b6050616c6c65743a3a737761705f6d656d626572605d2e3472657365745f6d656d6265727304011c6d656d626572734101013c5665633c4964656e7469747949643e00050478536565205b6050616c6c65743a3a72657365745f6d656d62657273605d2e4c61626469636174655f6d656d6265727368697000060490536565205b6050616c6c65743a3a61626469636174655f6d656d62657273686970605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e01060c4070616c6c65745f636f6d6d69747465651870616c6c65741043616c6c080454000449000114487365745f766f74655f7468726573686f6c640801046e10010c7533320001046410010c7533320000048c536565205b6050616c6c65743a3a7365745f766f74655f7468726573686f6c64605d2e5c7365745f72656c656173655f636f6f7264696e61746f7204010869648001284964656e746974794964000104a0536565205b6050616c6c65743a3a7365745f72656c656173655f636f6f7264696e61746f72605d2e447365745f657870697265735f6166746572040118657870697279510101744d61796265426c6f636b3c426c6f636b4e756d626572466f723c543e3e00020488536565205b6050616c6c65743a3a7365745f657870697265735f6166746572605d2e3c766f74655f6f725f70726f706f736508011c617070726f766539010110626f6f6c00011063616c6cf505017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e00030480536565205b6050616c6c65743a3a766f74655f6f725f70726f706f7365605d2e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e64657810013450726f706f73616c496e64657800011c617070726f766539010110626f6f6c00040454536565205b6050616c6c65743a3a766f7465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e05060c3070616c6c65745f67726f75701870616c6c65741043616c6c08045400044900011c607365745f6163746976655f6d656d626572735f6c696d69740401146c696d697410012c4d656d626572436f756e74000004a4536565205b6050616c6c65743a3a7365745f6163746976655f6d656d626572735f6c696d6974605d2e3864697361626c655f6d656d6265720c010c77686f8001284964656e746974794964000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e0001086174050101444f7074696f6e3c543a3a4d6f6d656e743e0001047c536565205b6050616c6c65743a3a64697361626c655f6d656d626572605d2e286164645f6d656d62657204010c77686f8001284964656e7469747949640002046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3472656d6f76655f6d656d62657204010c77686f8001284964656e74697479496400030478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e2c737761705f6d656d62657208011872656d6f76658001284964656e74697479496400010c6164648001284964656e74697479496400040470536565205b6050616c6c65743a3a737761705f6d656d626572605d2e3472657365745f6d656d6265727304011c6d656d626572734101013c5665633c4964656e7469747949643e00050478536565205b6050616c6c65743a3a72657365745f6d656d62657273605d2e4c61626469636174655f6d656d6265727368697000060490536565205b6050616c6c65743a3a61626469636174655f6d656d62657273686970605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e09060c4070616c6c65745f636f6d6d69747465651870616c6c65741043616c6c080454000449000114487365745f766f74655f7468726573686f6c640801046e10010c7533320001046410010c7533320000048c536565205b6050616c6c65743a3a7365745f766f74655f7468726573686f6c64605d2e5c7365745f72656c656173655f636f6f7264696e61746f7204010869648001284964656e746974794964000104a0536565205b6050616c6c65743a3a7365745f72656c656173655f636f6f7264696e61746f72605d2e447365745f657870697265735f6166746572040118657870697279510101744d61796265426c6f636b3c426c6f636b4e756d626572466f723c543e3e00020488536565205b6050616c6c65743a3a7365745f657870697265735f6166746572605d2e3c766f74655f6f725f70726f706f736508011c617070726f766539010110626f6f6c00011063616c6cf505017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e00030480536565205b6050616c6c65743a3a766f74655f6f725f70726f706f7365605d2e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e64657810013450726f706f73616c496e64657800011c617070726f766539010110626f6f6c00040454536565205b6050616c6c65743a3a766f7465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e0d060c3070616c6c65745f67726f75701870616c6c65741043616c6c08045400044900011c607365745f6163746976655f6d656d626572735f6c696d69740401146c696d697410012c4d656d626572436f756e74000004a4536565205b6050616c6c65743a3a7365745f6163746976655f6d656d626572735f6c696d6974605d2e3864697361626c655f6d656d6265720c010c77686f8001284964656e746974794964000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e0001086174050101444f7074696f6e3c543a3a4d6f6d656e743e0001047c536565205b6050616c6c65743a3a64697361626c655f6d656d626572605d2e286164645f6d656d62657204010c77686f8001284964656e7469747949640002046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3472656d6f76655f6d656d62657204010c77686f8001284964656e74697479496400030478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e2c737761705f6d656d62657208011872656d6f76658001284964656e74697479496400010c6164648001284964656e74697479496400040470536565205b6050616c6c65743a3a737761705f6d656d626572605d2e3472657365745f6d656d6265727304011c6d656d626572734101013c5665633c4964656e7469747949643e00050478536565205b6050616c6c65743a3a72657365745f6d656d62657273605d2e4c61626469636174655f6d656d6265727368697000060490536565205b6050616c6c65743a3a61626469636174655f6d656d62657273686970605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e11060c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001483c6372656174655f6d756c74697369670c011c7369676e6572736d01019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e000134736967735f726571756972656428010c75363400012c7065726d697373696f6e731506014c4f7074696f6e3c5065726d697373696f6e733e00000480536565205b6050616c6c65743a3a6372656174655f6d756c7469736967605d2e3c6372656174655f70726f706f73616c0c01206d756c7469736967000130543a3a4163636f756e74496400012070726f706f73616cf5050170426f783c3c5420617320436f6e6669673e3a3a50726f706f73616c3e000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e00010480536565205b6050616c6c65743a3a6372656174655f70726f706f73616c605d2e1c617070726f76650c01206d756c7469736967000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c7536340001286d61785f776569676874d10401384f7074696f6e3c5765696768743e00020460536565205b6050616c6c65743a3a617070726f7665605d2e1872656a6563740801206d756c7469736967000130543a3a4163636f756e74496400012c70726f706f73616c5f696428010c7536340003045c536565205b6050616c6c65743a3a72656a656374605d2e586163636570745f6d756c74697369675f7369676e657204011c617574685f696428010c7536340004049c536565205b6050616c6c65743a3a6163636570745f6d756c74697369675f7369676e6572605d2e506164645f6d756c74697369675f7369676e65727304011c7369676e6572736d01019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e00050494536565205b6050616c6c65743a3a6164645f6d756c74697369675f7369676e657273605d2e5c72656d6f76655f6d756c74697369675f7369676e65727304011c7369676e6572736d01019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e000604a0536565205b6050616c6c65743a3a72656d6f76655f6d756c74697369675f7369676e657273605d2e786164645f6d756c74697369675f7369676e6572735f7669615f61646d696e0801206d756c7469736967000130543a3a4163636f756e74496400011c7369676e6572736d01019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e000704bc536565205b6050616c6c65743a3a6164645f6d756c74697369675f7369676e6572735f7669615f61646d696e605d2e8472656d6f76655f6d756c74697369675f7369676e6572735f7669615f61646d696e0801206d756c7469736967000130543a3a4163636f756e74496400011c7369676e6572736d01019c426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61785369676e6572733e000804c8536565205b6050616c6c65743a3a72656d6f76655f6d756c74697369675f7369676e6572735f7669615f61646d696e605d2e506368616e67655f736967735f7265717569726564040134736967735f726571756972656428010c75363400090494536565205b6050616c6c65743a3a6368616e67655f736967735f7265717569726564605d2e786368616e67655f736967735f72657175697265645f7669615f61646d696e0801206d756c7469736967000130543a3a4163636f756e74496400014c7369676e6174757265735f726571756972656428010c753634000a04bc536565205b6050616c6c65743a3a6368616e67655f736967735f72657175697265645f7669615f61646d696e605d2e246164645f61646d696e04012461646d696e5f6469648001284964656e746974794964000b0468536565205b6050616c6c65743a3a6164645f61646d696e605d2e5872656d6f76655f61646d696e5f7669615f61646d696e0401206d756c7469736967000130543a3a4163636f756e744964000c049c536565205b6050616c6c65743a3a72656d6f76655f61646d696e5f7669615f61646d696e605d2e3072656d6f76655f7061796572000d0474536565205b6050616c6c65743a3a72656d6f76655f7061796572605d2e5872656d6f76655f70617965725f7669615f70617965720401206d756c7469736967000130543a3a4163636f756e744964000e049c536565205b6050616c6c65743a3a72656d6f76655f70617965725f7669615f7061796572605d2e54617070726f76655f6a6f696e5f6964656e746974790801206d756c7469736967000130543a3a4163636f756e74496400011c617574685f696428010c753634000f0498536565205b6050616c6c65743a3a617070726f76655f6a6f696e5f6964656e74697479605d2e346a6f696e5f6964656e7469747904011c617574685f696428010c75363400100478536565205b6050616c6c65743a3a6a6f696e5f6964656e74697479605d2e3072656d6f76655f61646d696e00110474536565205b6050616c6c65743a3a72656d6f76655f61646d696e605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e150604184f7074696f6e04045401a00108104e6f6e6500000010536f6d650400a0000001000019060c4470616c6c65745f76616c696461746f72731870616c6c65741043616c6c04045400011c686164645f7065726d697373696f6e65645f76616c696461746f720801206964656e746974798001284964656e746974794964000138696e74656e6465645f636f756e741d06012c4f7074696f6e3c7533323e000004ac536565205b6050616c6c65743a3a6164645f7065726d697373696f6e65645f76616c696461746f72605d2e7472656d6f76655f7065726d697373696f6e65645f76616c696461746f720401206964656e746974798001284964656e746974794964000104b8536565205b6050616c6c65743a3a72656d6f76655f7065726d697373696f6e65645f76616c696461746f72605d2e607061796f75745f7374616b6572735f62795f73797374656d08013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e646578000204a4536565205b6050616c6c65743a3a7061796f75745f7374616b6572735f62795f73797374656d605d2e6c6368616e67655f736c617368696e675f616c6c6f7765645f666f7204013c736c617368696e675f73776974636875010138536c617368696e67537769746368000304b0536565205b6050616c6c65743a3a6368616e67655f736c617368696e675f616c6c6f7765645f666f72605d2eb07570646174655f7065726d697373696f6e65645f76616c696461746f725f696e74656e6465645f636f756e740801206964656e746974798001284964656e7469747949640001486e65775f696e74656e6465645f636f756e7410010c753332000404f4536565205b6050616c6c65743a3a7570646174655f7065726d697373696f6e65645f76616c696461746f725f696e74656e6465645f636f756e74605d2e546368696c6c5f66726f6d5f676f7665726e616e63650801206964656e746974798001284964656e74697479496400012873746173685f6b657973fc01445665633c543a3a4163636f756e7449643e00050498536565205b6050616c6c65743a3a6368696c6c5f66726f6d5f676f7665726e616e6365605d2e487365745f636f6d6d697373696f6e5f63617004011c6e65775f6361707901011c50657262696c6c0006048c536565205b6050616c6c65743a3a7365745f636f6d6d697373696f6e5f636170605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e1d0604184f7074696f6e04045401100108104e6f6e6500000010536f6d6504001000000100002106103870616c6c65745f7374616b696e671870616c6c65741870616c6c65741043616c6c04045400016810626f6e6408011476616c7565c101013042616c616e63654f663c543e00011470617965652506017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00000454536565205b6050616c6c65743a3a626f6e64605d2e28626f6e645f65787472610401386d61785f6164646974696f6e616cc101013042616c616e63654f663c543e0001046c536565205b6050616c6c65743a3a626f6e645f6578747261605d2e18756e626f6e6404011476616c7565c101013042616c616e63654f663c543e0002045c536565205b6050616c6c65743a3a756e626f6e64605d2e4477697468647261775f756e626f6e6465640401486e756d5f736c617368696e675f7370616e7310010c75333200030488536565205b6050616c6c65743a3a77697468647261775f756e626f6e646564605d2e2076616c696461746504011470726566738101013856616c696461746f72507265667300040464536565205b6050616c6c65743a3a76616c6964617465605d2e206e6f6d696e61746504011c74617267657473290601645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00050464536565205b6050616c6c65743a3a6e6f6d696e617465605d2e146368696c6c00060458536565205b6050616c6c65743a3a6368696c6c605d2e247365745f706179656504011470617965652506017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00070468536565205b6050616c6c65743a3a7365745f7061796565605d2e387365745f636f6e74726f6c6c65720008047c536565205b6050616c6c65743a3a7365745f636f6e74726f6c6c6572605d2e4c7365745f76616c696461746f725f636f756e7404010c6e6577b104010c75333200090490536565205b6050616c6c65743a3a7365745f76616c696461746f725f636f756e74605d2e60696e6372656173655f76616c696461746f725f636f756e740401286164646974696f6e616cb104010c753332000a04a4536565205b6050616c6c65743a3a696e6372656173655f76616c696461746f725f636f756e74605d2e547363616c655f76616c696461746f725f636f756e74040118666163746f722d06011c50657263656e74000b0498536565205b6050616c6c65743a3a7363616c655f76616c696461746f725f636f756e74605d2e34666f7263655f6e6f5f65726173000c0478536565205b6050616c6c65743a3a666f7263655f6e6f5f65726173605d2e34666f7263655f6e65775f657261000d0478536565205b6050616c6c65743a3a666f7263655f6e65775f657261605d2e447365745f696e76756c6e657261626c6573040134696e76756c6e657261626c6573fc01445665633c543a3a4163636f756e7449643e000e0488536565205b6050616c6c65743a3a7365745f696e76756c6e657261626c6573605d2e34666f7263655f756e7374616b650801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c753332000f0478536565205b6050616c6c65743a3a666f7263655f756e7374616b65605d2e50666f7263655f6e65775f6572615f616c7761797300100494536565205b6050616c6c65743a3a666f7263655f6e65775f6572615f616c77617973605d2e5463616e63656c5f64656665727265645f736c61736808010c657261100120457261496e646578000134736c6173685f696e6469636573310601205665633c7533323e00110498536565205b6050616c6c65743a3a63616e63656c5f64656665727265645f736c617368605d2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780012047c536565205b6050616c6c65743a3a7061796f75745f7374616b657273605d2e187265626f6e6404011476616c7565c101013042616c616e63654f663c543e0013045c536565205b6050616c6c65743a3a7265626f6e64605d2e28726561705f73746173680801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c7533320014046c536565205b6050616c6c65743a3a726561705f7374617368605d2e106b69636b04010c77686f290601645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00150454536565205b6050616c6c65743a3a6b69636b605d2e4c7365745f7374616b696e675f636f6e666967731801486d696e5f6e6f6d696e61746f725f626f6e6435060158436f6e6669674f703c42616c616e63654f663c543e3e0001486d696e5f76616c696461746f725f626f6e6435060158436f6e6669674f703c42616c616e63654f663c543e3e00014c6d61785f6e6f6d696e61746f725f636f756e7439060134436f6e6669674f703c7533323e00014c6d61785f76616c696461746f725f636f756e7439060134436f6e6669674f703c7533323e00013c6368696c6c5f7468726573686f6c643d060144436f6e6669674f703c50657263656e743e0001386d696e5f636f6d6d697373696f6e41060144436f6e6669674f703c50657262696c6c3e00160490536565205b6050616c6c65743a3a7365745f7374616b696e675f636f6e66696773605d2e2c6368696c6c5f6f74686572040128636f6e74726f6c6c6572000130543a3a4163636f756e74496400170470536565205b6050616c6c65743a3a6368696c6c5f6f74686572605d2e68666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e04013c76616c696461746f725f7374617368000130543a3a4163636f756e744964001804ac536565205b6050616c6c65743a3a666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e605d2e487365745f6d696e5f636f6d6d697373696f6e04010c6e65777901011c50657262696c6c0019048c536565205b6050616c6c65743a3a7365745f6d696e5f636f6d6d697373696f6e605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2506083870616c6c65745f7374616b696e674452657761726444657374696e6174696f6e04244163636f756e74496401000114185374616b656400000014537461736800010028436f6e74726f6c6c65720002001c4163636f756e7404000001244163636f756e744964000300104e6f6e650004000029060000026905002d060c3473705f61726974686d65746963287065725f7468696e67731c50657263656e740000040008010875380000310600000210003506103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200003906103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200003d06103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454012d06010c104e6f6f700000000c53657404002d060104540001001852656d6f7665000200004106103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454017901010c104e6f6f700000000c536574040079010104540001001852656d6f76650002000045060c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579734906011c543a3a4b65797300011470726f6f6630011c5665633c75383e00000464536565205b6050616c6c65743a3a7365745f6b657973605d2e2870757267655f6b6579730001046c536565205b6050616c6c65743a3a70757267655f6b657973605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e49060c60706f6c796d6573685f72756e74696d655f646576656c6f701c72756e74696d652c53657373696f6e4b657973000010011c6772616e647061a10101d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300011062616265010501c43c42616265206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000124696d5f6f6e6c696e65ad0101d43c496d4f6e6c696e65206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300014c617574686f726974795f646973636f766572794d0601fc3c417574686f72697479446973636f76657279206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300004d060c5873705f617574686f726974795f646973636f766572790c617070185075626c696300000400b101013c737232353531393a3a5075626c6963000051060c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66550601c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f6655050140543a3a4b65794f776e657250726f6f6600000490536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e605d2e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66550601c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f6655050140543a3a4b65794f776e657250726f6f66000104b4536565205b6050616c6c65743a3a7265706f72745f65717569766f636174696f6e5f756e7369676e6564605d2e306e6f74655f7374616c6c656408011464656c6179100144426c6f636b4e756d626572466f723c543e00016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00020474536565205b6050616c6c65743a3a6e6f74655f7374616c6c6564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5506085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f66080448012c044e0110000801187365745f6964280114536574496400013065717569766f636174696f6e5906014845717569766f636174696f6e3c482c204e3e00005906085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e080448012c044e011001081c507265766f746504005d060139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d6974040071060141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100005d06084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401a1010456016106045301650600100130726f756e645f6e756d62657228010c7536340001206964656e74697479a1010108496400011466697273746d06011828562c2053290001187365636f6e646d06011828562c20532900006106084066696e616c6974795f6772616e6470611c507265766f7465080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e000065060c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e61747572650000040069060148656432353531393a3a5369676e6174757265000069060c1c73705f636f72651c65643235353139245369676e6174757265000004000d0201205b75383b2036345d00006d060000040861066506007106084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401a1010456017506045301650600100130726f756e645f6e756d62657228010c7536340001206964656e74697479a1010108496400011466697273747906011828562c2053290001187365636f6e647906011828562c20532900007506084066696e616c6974795f6772616e64706124507265636f6d6d6974080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e000079060000040875066506007d060c4070616c6c65745f696d5f6f6e6c696e651870616c6c65741043616c6c04045400010424686561727462656174080124686561727462656174810601704865617274626561743c426c6f636b4e756d626572466f723c543e3e0001247369676e6174757265850601bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500000468536565205b6050616c6c65743a3a686561727462656174605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e8106084070616c6c65745f696d5f6f6e6c696e6524486561727462656174042c426c6f636b4e756d626572011000100130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200013473657373696f6e5f696e64657810013053657373696f6e496e64657800013c617574686f726974795f696e64657810012441757468496e64657800013876616c696461746f72735f6c656e10010c75333200008506104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139245369676e61747572650000040089060148737232353531393a3a5369676e6174757265000089060c1c73705f636f72651c73723235353139245369676e6174757265000004000d0201205b75383b2036345d00008d060c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000110107375646f04011063616c6cf505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000454536565205b6050616c6c65743a3a7375646f605d2e547375646f5f756e636865636b65645f77656967687408011063616c6cf505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687420011857656967687400010498536565205b6050616c6c65743a3a7375646f5f756e636865636b65645f776569676874605d2e1c7365745f6b657904010c6e6577690501504163636f756e7449644c6f6f6b75704f663c543e00020460536565205b6050616c6c65743a3a7365745f6b6579605d2e1c7375646f5f617308010c77686f690501504163636f756e7449644c6f6f6b75704f663c543e00011063616c6cf505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030460536565205b6050616c6c65743a3a7375646f5f6173605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e91060c3070616c6c65745f61737365741870616c6c65741043616c6c0404540001885872656769737465725f756e697175655f7469636b65720401187469636b6572210101185469636b65720000049c536565205b6050616c6c65743a3a72656769737465725f756e697175655f7469636b6572605d2e586163636570745f7469636b65725f7472616e7366657204011c617574685f696428010c7536340001049c536565205b6050616c6c65743a3a6163636570745f7469636b65725f7472616e73666572605d2e7c6163636570745f61737365745f6f776e6572736869705f7472616e7366657204011c617574685f696428010c753634000204c0536565205b6050616c6c65743a3a6163636570745f61737365745f6f776e6572736869705f7472616e73666572605d2e306372656174655f617373657414012861737365745f6e616d65e101012441737365744e616d65000124646976697369626c6539010110626f6f6c00012861737365745f74797065d501012441737365745479706500014461737365745f6964656e74696669657273e50101505665633c41737365744964656e7469666965723e00014866756e64696e675f726f756e645f6e616d65f50101604f7074696f6e3c46756e64696e67526f756e644e616d653e00030474536565205b6050616c6c65743a3a6372656174655f6173736574605d2e18667265657a6504012061737365745f6964a8011c417373657449640004045c536565205b6050616c6c65743a3a667265657a65605d2e20756e667265657a6504012061737365745f6964a8011c4173736574496400050464536565205b6050616c6c65743a3a756e667265657a65605d2e3072656e616d655f617373657408012061737365745f6964a8011c4173736574496400012861737365745f6e616d65e101012441737365744e616d6500060474536565205b6050616c6c65743a3a72656e616d655f6173736574605d2e1469737375650c012061737365745f6964a8011c41737365744964000118616d6f756e7418011c42616c616e6365000138706f7274666f6c696f5f6b696e64ec0134506f7274666f6c696f4b696e6400070458536565205b6050616c6c65743a3a6973737565605d2e1872656465656d0c012061737365745f6964a8011c4173736574496400011476616c756518011c42616c616e6365000138706f7274666f6c696f5f6b696e64ec0134506f7274666f6c696f4b696e640008045c536565205b6050616c6c65743a3a72656465656d605d2e386d616b655f646976697369626c6504012061737365745f6964a8011c417373657449640009047c536565205b6050616c6c65743a3a6d616b655f646976697369626c65605d2e346164645f646f63756d656e7473080110646f6373950601345665633c446f63756d656e743e00012061737365745f6964a8011c41737365744964000a0478536565205b6050616c6c65743a3a6164645f646f63756d656e7473605d2e4072656d6f76655f646f63756d656e747308011c646f63735f69640d03013c5665633c446f63756d656e7449643e00012061737365745f6964a8011c41737365744964000b0484536565205b6050616c6c65743a3a72656d6f76655f646f63756d656e7473605d2e447365745f66756e64696e675f726f756e6408012061737365745f6964a8011c4173736574496400014866756e64696e675f726f756e645f6e616d65f901014046756e64696e67526f756e644e616d65000c0488536565205b6050616c6c65743a3a7365745f66756e64696e675f726f756e64605d2e487570646174655f6964656e7469666965727308012061737365745f6964a8011c4173736574496400014461737365745f6964656e74696669657273e50101505665633c41737365744964656e7469666965723e000d048c536565205b6050616c6c65743a3a7570646174655f6964656e74696669657273605d2e4c636f6e74726f6c6c65725f7472616e736665720c012061737365745f6964a8011c4173736574496400011476616c756518011c42616c616e636500013866726f6d5f706f7274666f6c696fe8012c506f7274666f6c696f4964000e0490536565205b6050616c6c65743a3a636f6e74726f6c6c65725f7472616e73666572605d2e6872656769737465725f637573746f6d5f61737365745f74797065040108747930011c5665633c75383e000f04ac536565205b6050616c6c65743a3a72656769737465725f637573746f6d5f61737365745f74797065605d2e746372656174655f61737365745f776974685f637573746f6d5f7479706514012861737365745f6e616d65e101012441737365744e616d65000124646976697369626c6539010110626f6f6c000144637573746f6d5f61737365745f7479706530011c5665633c75383e00014461737365745f6964656e74696669657273e50101505665633c41737365744964656e7469666965723e00014866756e64696e675f726f756e645f6e616d65f50101604f7074696f6e3c46756e64696e67526f756e644e616d653e001004b8536565205b6050616c6c65743a3a6372656174655f61737365745f776974685f637573746f6d5f74797065605d2e487365745f61737365745f6d6574616461746110012061737365745f6964a8011c4173736574496400010c6b65796102014041737365744d657461646174614b657900011476616c75652d02014841737365744d6574616461746156616c756500011864657461696c310201ac4f7074696f6e3c41737365744d6574616461746156616c756544657461696c3c543a3a4d6f6d656e743e3e0011048c536565205b6050616c6c65743a3a7365745f61737365745f6d65746164617461605d2e687365745f61737365745f6d657461646174615f64657461696c730c012061737365745f6964a8011c4173736574496400010c6b65796102014041737365744d657461646174614b657900011864657461696c3502018c41737365744d6574616461746156616c756544657461696c3c543a3a4d6f6d656e743e001204ac536565205b6050616c6c65743a3a7365745f61737365745f6d657461646174615f64657461696c73605d2e9472656769737465725f616e645f7365745f6c6f63616c5f61737365745f6d6574616461746114012061737365745f6964a8011c417373657449640001106e616d653d02014441737365744d657461646174614e616d65000110737065634502014441737365744d657461646174615370656300011476616c75652d02014841737365744d6574616461746156616c756500011864657461696c310201ac4f7074696f6e3c41737365744d6574616461746156616c756544657461696c3c543a3a4d6f6d656e743e3e001304d8536565205b6050616c6c65743a3a72656769737465725f616e645f7365745f6c6f63616c5f61737365745f6d65746164617461605d2e8872656769737465725f61737365745f6d657461646174615f6c6f63616c5f747970650c012061737365745f6964a8011c417373657449640001106e616d653d02014441737365744d657461646174614e616d65000110737065634502014441737365744d6574616461746153706563001404cc536565205b6050616c6c65743a3a72656769737465725f61737365745f6d657461646174615f6c6f63616c5f74797065605d2e8c72656769737465725f61737365745f6d657461646174615f676c6f62616c5f747970650801106e616d653d02014441737365744d657461646174614e616d65000110737065634502014441737365744d6574616461746153706563001504d0536565205b6050616c6c65743a3a72656769737465725f61737365745f6d657461646174615f676c6f62616c5f74797065605d2e447570646174655f61737365745f7479706508012061737365745f6964a8011c4173736574496400012861737365745f74797065d501012441737365745479706500160488536565205b6050616c6c65743a3a7570646174655f61737365745f74797065605d2e6472656d6f76655f6c6f63616c5f6d657461646174615f6b657908012061737365745f6964a8011c417373657449640001246c6f63616c5f6b65794102015441737365744d657461646174614c6f63616c4b6579001704a8536565205b6050616c6c65743a3a72656d6f76655f6c6f63616c5f6d657461646174615f6b6579605d2e5472656d6f76655f6d657461646174615f76616c756508012061737365745f6964a8011c417373657449640001306d657461646174615f6b65796102014041737365744d657461646174614b657900180498536565205b6050616c6c65743a3a72656d6f76655f6d657461646174615f76616c7565605d2e606578656d70745f61737365745f61666669726d6174696f6e04012061737365745f6964a8011c41737365744964001904a4536565205b6050616c6c65743a3a6578656d70745f61737365745f61666669726d6174696f6e605d2e8872656d6f76655f61737365745f61666669726d6174696f6e5f6578656d7074696f6e04012061737365745f6964a8011c41737365744964001a04cc536565205b6050616c6c65743a3a72656d6f76655f61737365745f61666669726d6174696f6e5f6578656d7074696f6e605d2e447072655f617070726f76655f617373657404012061737365745f6964a8011c41737365744964001b0488536565205b6050616c6c65743a3a7072655f617070726f76655f6173736574605d2e6472656d6f76655f61737365745f7072655f617070726f76616c04012061737365745f6964a8011c41737365744964001c04a8536565205b6050616c6c65743a3a72656d6f76655f61737365745f7072655f617070726f76616c605d2e5c6164645f6d616e6461746f72795f6d65646961746f727308012061737365745f6964a8011c417373657449640001246d65646961746f7273990601c4426f756e64656442547265655365743c4964656e7469747949642c20543a3a4d617841737365744d65646961746f72733e001d04a0536565205b6050616c6c65743a3a6164645f6d616e6461746f72795f6d65646961746f7273605d2e6872656d6f76655f6d616e6461746f72795f6d65646961746f727308012061737365745f6964a8011c417373657449640001246d65646961746f7273990601c4426f756e64656442547265655365743c4964656e7469747949642c20543a3a4d617841737365744d65646961746f72733e001e04ac536565205b6050616c6c65743a3a72656d6f76655f6d616e6461746f72795f6d65646961746f7273605d2e5c6c696e6b5f7469636b65725f746f5f61737365745f69640801187469636b6572210101185469636b657200012061737365745f6964a8011c41737365744964001f04a0536565205b6050616c6c65743a3a6c696e6b5f7469636b65725f746f5f61737365745f6964605d2e6c756e6c696e6b5f7469636b65725f66726f6d5f61737365745f69640801187469636b6572210101185469636b657200012061737365745f6964a8011c41737365744964002004b0536565205b6050616c6c65743a3a756e6c696e6b5f7469636b65725f66726f6d5f61737365745f6964605d2e6c7570646174655f676c6f62616c5f6d657461646174615f7370656308014c61737365745f6d657461646174615f6e616d653d02014441737365744d657461646174614e616d6500014c61737365745f6d657461646174615f737065634502014441737365744d6574616461746153706563002104b0536565205b6050616c6c65743a3a7570646174655f676c6f62616c5f6d657461646174615f73706563605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e950600000201020099060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401800453000004007502012c42547265655365743c543e00009d06106070616c6c65745f636f72706f726174655f616374696f6e7330646973747269627574696f6e1870616c6c65741043616c6c04045400011428646973747269627574651c011463615f69648102011043414964000124706f7274666f6c696fa106015c4f7074696f6e3c506f7274666f6c696f4e756d6265723e00012063757272656e6379a8011c417373657449640001247065725f736861726518011c42616c616e6365000118616d6f756e7418011c42616c616e63650001287061796d656e745f61742801184d6f6d656e74000128657870697265735f6174050101384f7074696f6e3c4d6f6d656e743e0000046c536565205b6050616c6c65743a3a64697374726962757465605d2e14636c61696d04011463615f6964810201104341496400010458536565205b6050616c6c65743a3a636c61696d605d2e30707573685f62656e6566697408011463615f69648102011043414964000118686f6c6465728001284964656e74697479496400020474536565205b6050616c6c65743a3a707573685f62656e65666974605d2e1c7265636c61696d04011463615f6964810201104341496400030460536565205b6050616c6c65743a3a7265636c61696d605d2e4c72656d6f76655f646973747269627574696f6e04011463615f6964810201104341496400040490536565205b6050616c6c65743a3a72656d6f76655f646973747269627574696f6e605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea10604184f7074696f6e04045401f00108104e6f6e6500000010536f6d650400f00000010000a506103070616c6c65745f617373657428636865636b706f696e741870616c6c65741043616c6c040454000110446372656174655f636865636b706f696e7404012061737365745f6964a8011c4173736574496400000488536565205b6050616c6c65743a3a6372656174655f636865636b706f696e74605d2e707365745f7363686564756c65735f6d61785f636f6d706c65786974790401386d61785f636f6d706c657869747928010c753634000104b4536565205b6050616c6c65743a3a7365745f7363686564756c65735f6d61785f636f6d706c6578697479605d2e3c6372656174655f7363686564756c6508012061737365745f6964a8011c417373657449640001207363686564756c659d02014c5363686564756c65436865636b706f696e747300020480536565205b6050616c6c65743a3a6372656174655f7363686564756c65605d2e3c72656d6f76655f7363686564756c6508012061737365745f6964a8011c417373657449640001086964990201285363686564756c65496400030480536565205b6050616c6c65743a3a72656d6f76655f7363686564756c65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea9060c6470616c6c65745f636f6d706c69616e63655f6d616e616765721870616c6c65741043616c6c040454000124686164645f636f6d706c69616e63655f726571756972656d656e740c012061737365745f6964a8011c4173736574496400014473656e6465725f636f6e646974696f6e73b10201385665633c436f6e646974696f6e3e00014c72656365697665725f636f6e646974696f6e73b10201385665633c436f6e646974696f6e3e000004ac536565205b6050616c6c65743a3a6164645f636f6d706c69616e63655f726571756972656d656e74605d2e7472656d6f76655f636f6d706c69616e63655f726571756972656d656e7408012061737365745f6964a8011c41737365744964000108696410010c753332000104b8536565205b6050616c6c65743a3a72656d6f76655f636f6d706c69616e63655f726571756972656d656e74605d2e607265706c6163655f61737365745f636f6d706c69616e636508012061737365745f6964a8011c4173736574496400014061737365745f636f6d706c69616e6365d90201685665633c436f6d706c69616e6365526571756972656d656e743e000204a4536565205b6050616c6c65743a3a7265706c6163655f61737365745f636f6d706c69616e6365605d2e5872657365745f61737365745f636f6d706c69616e636504012061737365745f6964a8011c417373657449640003049c536565205b6050616c6c65743a3a72657365745f61737365745f636f6d706c69616e6365605d2e5870617573655f61737365745f636f6d706c69616e636504012061737365745f6964a8011c417373657449640004049c536565205b6050616c6c65743a3a70617573655f61737365745f636f6d706c69616e6365605d2e5c726573756d655f61737365745f636f6d706c69616e636504012061737365745f6964a8011c41737365744964000504a0536565205b6050616c6c65743a3a726573756d655f61737365745f636f6d706c69616e6365605d2e806164645f64656661756c745f747275737465645f636c61696d5f69737375657208012061737365745f6964a8011c41737365744964000118697373756572c902013454727573746564497373756572000604c4536565205b6050616c6c65743a3a6164645f64656661756c745f747275737465645f636c61696d5f697373756572605d2e8c72656d6f76655f64656661756c745f747275737465645f636c61696d5f69737375657208012061737365745f6964a8011c417373657449640001186973737565728001284964656e746974794964000704d0536565205b6050616c6c65743a3a72656d6f76655f64656661756c745f747275737465645f636c61696d5f697373756572605d2e746368616e67655f636f6d706c69616e63655f726571756972656d656e7408012061737365745f6964a8011c4173736574496400011c6e65775f726571ad020154436f6d706c69616e6365526571756972656d656e74000804b8536565205b6050616c6c65743a3a6368616e67655f636f6d706c69616e63655f726571756972656d656e74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ead060c6070616c6c65745f636f72706f726174655f616374696f6e731870616c6c65741043616c6c040454000128587365745f6d61785f64657461696c735f6c656e6774680401186c656e67746810010c7533320000049c536565205b6050616c6c65743a3a7365745f6d61785f64657461696c735f6c656e677468605d2e4c7365745f64656661756c745f7461726765747308012061737365745f6964a8011c4173736574496400011c74617267657473e10201405461726765744964656e74697469657300010490536565205b6050616c6c65743a3a7365745f64656661756c745f74617267657473605d2e6c7365745f64656661756c745f77697468686f6c64696e675f74617808012061737365745f6964a8011c4173736574496400010c7461788d02010c546178000204b0536565205b6050616c6c65743a3a7365745f64656661756c745f77697468686f6c64696e675f746178605d2e5c7365745f6469645f77697468686f6c64696e675f7461780c012061737365745f6964a8011c4173736574496400012474617865645f6469648001284964656e74697479496400010c746178e902012c4f7074696f6e3c5461783e000304a0536565205b6050616c6c65743a3a7365745f6469645f77697468686f6c64696e675f746178605d2e64696e6974696174655f636f72706f726174655f616374696f6e20012061737365745f6964a8011c417373657449640001106b696e64f102011843414b696e640001246465636c5f646174652801184d6f6d656e7400012c7265636f72645f64617465b10601584f7074696f6e3c5265636f726444617465537065633e00011c64657461696c7309030124434144657461696c7300011c74617267657473b90601604f7074696f6e3c5461726765744964656e7469746965733e00015c64656661756c745f77697468686f6c64696e675f746178e902012c4f7074696f6e3c5461783e00013c77697468686f6c64696e675f746178bd0601784f7074696f6e3c5665633c284964656e7469747949642c20546178293e3e000404a8536565205b6050616c6c65743a3a696e6974696174655f636f72706f726174655f616374696f6e605d2e2c6c696e6b5f63615f646f6308010869648102011043414964000110646f63730d03013c5665633c446f63756d656e7449643e00050470536565205b6050616c6c65743a3a6c696e6b5f63615f646f63605d2e2472656d6f76655f636104011463615f6964810201104341496400060468536565205b6050616c6c65743a3a72656d6f76655f6361605d2e486368616e67655f7265636f72645f6461746508011463615f6964810201104341496400012c7265636f72645f64617465b10601584f7074696f6e3c5265636f726444617465537065633e0007048c536565205b6050616c6c65743a3a6368616e67655f7265636f72645f64617465605d2ea0696e6974696174655f636f72706f726174655f616374696f6e5f616e645f646973747269627574651c011c63615f61726773c106016c496e697469617465436f72706f72617465416374696f6e41726773000124706f7274666f6c696fa106015c4f7074696f6e3c506f7274666f6c696f4e756d6265723e00012063757272656e6379a8011c417373657449640001247065725f736861726518011c42616c616e6365000118616d6f756e7418011c42616c616e63650001287061796d656e745f61742801184d6f6d656e74000128657870697265735f6174050101384f7074696f6e3c4d6f6d656e743e000804e4536565205b6050616c6c65743a3a696e6974696174655f636f72706f726174655f616374696f6e5f616e645f64697374726962757465605d2e90696e6974696174655f636f72706f726174655f616374696f6e5f616e645f62616c6c6f7410011c63615f61726773c106016c496e697469617465436f72706f72617465416374696f6e4172677300014462616c6c6f745f74696d655f72616e67651503013c42616c6c6f7454696d6552616e676500012c62616c6c6f745f6d6574611903012842616c6c6f744d65746100010c72637639010110626f6f6c000904d4536565205b6050616c6c65743a3a696e6974696174655f636f72706f726174655f616374696f6e5f616e645f62616c6c6f74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb10604184f7074696f6e04045401b5060108104e6f6e6500000010536f6d650400b5060000010000b506086070616c6c65745f636f72706f726174655f616374696f6e73385265636f7264446174655370656300010c245363686564756c656404002801184d6f6d656e74000000404578697374696e675363686564756c650400990201285363686564756c654964000100204578697374696e67040095020130436865636b706f696e74496400020000b90604184f7074696f6e04045401e1020108104e6f6e6500000010536f6d650400e1020000010000bd0604184f7074696f6e0404540101030108104e6f6e6500000010536f6d65040001030000010000c106086070616c6c65745f636f72706f726174655f616374696f6e736c496e697469617465436f72706f72617465416374696f6e41726773000020012061737365745f6964a8011c417373657449640001106b696e64f102011843414b696e640001246465636c5f646174652801184d6f6d656e7400012c7265636f72645f64617465b10601584f7074696f6e3c5265636f726444617465537065633e00011c64657461696c7309030124434144657461696c7300011c74617267657473b90601604f7074696f6e3c5461726765744964656e7469746965733e00015c64656661756c745f77697468686f6c64696e675f746178e902012c4f7074696f6e3c5461783e00013c77697468686f6c64696e675f746178bd0601784f7074696f6e3c5665633c284964656e7469747949642c20546178293e3e0000c506106070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f741870616c6c65741043616c6c040454000118346174746163685f62616c6c6f7410011463615f6964810201104341496400011472616e67651503013c42616c6c6f7454696d6552616e67650001106d6574611903012842616c6c6f744d65746100010c72637639010110626f6f6c00000478536565205b6050616c6c65743a3a6174746163685f62616c6c6f74605d2e10766f746508011463615f69648102011043414964000114766f7465733903013c5665633c42616c6c6f74566f74653e00010454536565205b6050616c6c65743a3a766f7465605d2e286368616e67655f656e6408011463615f6964810201104341496400010c656e642801184d6f6d656e740002046c536565205b6050616c6c65743a3a6368616e67655f656e64605d2e2c6368616e67655f6d65746108011463615f696481020110434149640001106d6574611903012842616c6c6f744d65746100030470536565205b6050616c6c65743a3a6368616e67655f6d657461605d2e286368616e67655f72637608011463615f6964810201104341496400010c72637639010110626f6f6c0004046c536565205b6050616c6c65743a3a6368616e67655f726376605d2e3472656d6f76655f62616c6c6f7404011463615f6964810201104341496400050478536565205b6050616c6c65743a3a72656d6f76655f62616c6c6f74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec9060c2c70616c6c65745f706970731870616c6c65741043616c6c040454000144647365745f7072756e655f686973746f726963616c5f706970730401147072756e6539010110626f6f6c000004a8536565205b6050616c6c65743a3a7365745f7072756e655f686973746f726963616c5f70697073605d2e607365745f6d696e5f70726f706f73616c5f6465706f73697404011c6465706f73697418011c42616c616e6365000104a4536565205b6050616c6c65743a3a7365745f6d696e5f70726f706f73616c5f6465706f736974605d2e707365745f64656661756c745f656e6163746d656e745f706572696f640401206475726174696f6e100144426c6f636b4e756d626572466f723c543e000204b4536565205b6050616c6c65743a3a7365745f64656661756c745f656e6163746d656e745f706572696f64605d2e587365745f70656e64696e675f7069705f657870697279040118657870697279510101744d61796265426c6f636b3c426c6f636b4e756d626572466f723c543e3e0003049c536565205b6050616c6c65743a3a7365745f70656e64696e675f7069705f657870697279605d2e587365745f6d61785f7069705f736b69705f636f756e7404010c6d6178080130536b6970706564436f756e740004049c536565205b6050616c6c65743a3a7365745f6d61785f7069705f736b69705f636f756e74605d2e507365745f6163746976655f7069705f6c696d69740401146c696d697410010c75333200050494536565205b6050616c6c65743a3a7365745f6163746976655f7069705f6c696d6974605d2e1c70726f706f736510012070726f706f73616cf5050140426f783c543a3a50726f706f73616c3e00011c6465706f73697418011c42616c616e636500010c75726c4902012c4f7074696f6e3c55726c3e00012c6465736372697074696f6e590301584f7074696f6e3c5069704465736372697074696f6e3e00060460536565205b6050616c6c65743a3a70726f706f7365605d2e10766f74650c010869645503011450697049640001286179655f6f725f6e617939010110626f6f6c00011c6465706f73697418011c42616c616e636500070454536565205b6050616c6c65743a3a766f7465605d2e68617070726f76655f636f6d6d69747465655f70726f706f73616c0401086964550301145069704964000804ac536565205b6050616c6c65743a3a617070726f76655f636f6d6d69747465655f70726f706f73616c605d2e3c72656a6563745f70726f706f73616c040108696455030114506970496400090480536565205b6050616c6c65743a3a72656a6563745f70726f706f73616c605d2e387072756e655f70726f706f73616c0401086964550301145069704964000a047c536565205b6050616c6c65743a3a7072756e655f70726f706f73616c605d2e5072657363686564756c655f657865637574696f6e0801086964550301145069704964000114756e74696c1d0601644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e000b0494536565205b6050616c6c65743a3a72657363686564756c655f657865637574696f6e605d2e38636c6561725f736e617073686f74000c047c536565205b6050616c6c65743a3a636c6561725f736e617073686f74605d2e20736e617073686f74000d0464536565205b6050616c6c65743a3a736e617073686f74605d2e58656e6163745f736e617073686f745f726573756c747304011c726573756c7473cd0601705665633c2850697049642c20536e617073686f74526573756c74293e000e049c536565205b6050616c6c65743a3a656e6163745f736e617073686f745f726573756c7473605d2e54657865637574655f7363686564756c65645f7069700401086964550301145069704964000f0498536565205b6050616c6c65743a3a657865637574655f7363686564756c65645f706970605d2e506578706972655f7363686564756c65645f70697008010c6469648001284964656e746974794964000108696455030114506970496400100494536565205b6050616c6c65743a3a6578706972655f7363686564756c65645f706970605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd06000002d10600d106000004085503d50600d5060c2c70616c6c65745f7069707314747970657338536e617073686f74526573756c7400010c1c417070726f76650000001852656a65637400010010536b697000020000d9060c4070616c6c65745f706f7274666f6c696f1870616c6c65741043616c6c04045400012c406372656174655f706f7274666f6c696f0401106e616d658d030134506f7274666f6c696f4e616d6500000484536565205b6050616c6c65743a3a6372656174655f706f7274666f6c696f605d2e4064656c6574655f706f7274666f6c696f04010c6e756df0013c506f7274666f6c696f4e756d62657200010484536565205b6050616c6c65743a3a64656c6574655f706f7274666f6c696f605d2e4072656e616d655f706f7274666f6c696f08010c6e756df0013c506f7274666f6c696f4e756d62657200011c746f5f6e616d658d030134506f7274666f6c696f4e616d6500020484536565205b6050616c6c65743a3a72656e616d655f706f7274666f6c696f605d2e58717569745f706f7274666f6c696f5f637573746f647904010c706964e8012c506f7274666f6c696f49640003049c536565205b6050616c6c65743a3a717569745f706f7274666f6c696f5f637573746f6479605d2e606163636570745f706f7274666f6c696f5f637573746f647904011c617574685f696428010c753634000404a4536565205b6050616c6c65743a3a6163636570745f706f7274666f6c696f5f637573746f6479605d2e506d6f76655f706f7274666f6c696f5f66756e64730c011066726f6de8012c506f7274666f6c696f4964000108746fe8012c506f7274666f6c696f496400011466756e6473dd0601245665633c46756e643e00050494536565205b6050616c6c65743a3a6d6f76655f706f7274666f6c696f5f66756e6473605d2e547072655f617070726f76655f706f7274666f6c696f08012061737365745f6964a8011c41737365744964000130706f7274666f6c696f5f6964e8012c506f7274666f6c696f496400060498536565205b6050616c6c65743a3a7072655f617070726f76655f706f7274666f6c696f605d2e7472656d6f76655f706f7274666f6c696f5f7072655f617070726f76616c08012061737365745f6964a8011c41737365744964000130706f7274666f6c696f5f6964e8012c506f7274666f6c696f4964000704b8536565205b6050616c6c65743a3a72656d6f76655f706f7274666f6c696f5f7072655f617070726f76616c605d2e8c616c6c6f775f6964656e746974795f746f5f6372656174655f706f7274666f6c696f73040140747275737465645f6964656e746974798001284964656e746974794964000804d0536565205b6050616c6c65743a3a616c6c6f775f6964656e746974795f746f5f6372656174655f706f7274666f6c696f73605d2e8c7265766f6b655f6372656174655f706f7274666f6c696f735f7065726d697373696f6e0401206964656e746974798001284964656e746974794964000904d0536565205b6050616c6c65743a3a7265766f6b655f6372656174655f706f7274666f6c696f735f7065726d697373696f6e605d2e606372656174655f637573746f64795f706f7274666f6c696f080148706f7274666f6c696f5f6f776e65725f69648001284964656e746974794964000138706f7274666f6c696f5f6e616d658d030134506f7274666f6c696f4e616d65000a04a4536565205b6050616c6c65743a3a6372656174655f637573746f64795f706f7274666f6c696f605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732edd06000002e10600e1060c4c706f6c796d6573685f7072696d69746976657324706f7274666f6c696f1046756e64000008012c6465736372697074696f6e9903013c46756e644465736372697074696f6e0001106d656d6f8401304f7074696f6e3c4d656d6f3e0000e5060c4c70616c6c65745f70726f746f636f6c5f6665651870616c6c65741043616c6c040454000108486368616e67655f636f656666696369656e7404012c636f656666696369656e74ad030120506f73526174696f0000048c536565205b6050616c6c65743a3a6368616e67655f636f656666696369656e74605d2e3c6368616e67655f626173655f6665650801086f70e906012850726f746f636f6c4f70000120626173655f66656518011c42616c616e636500010480536565205b6050616c6c65743a3a6368616e67655f626173655f666565605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee9060c64706f6c796d6573685f636f6d6d6f6e5f7574696c69746965733070726f746f636f6c5f6665652850726f746f636f6c4f700001404c417373657452656769737465725469636b65720000002841737365744973737565000100444173736574416464446f63756d656e7473000200404173736574437265617465417373657400030060436865636b706f696e744372656174655363686564756c65000400a4436f6d706c69616e63654d616e61676572416464436f6d706c69616e6365526571756972656d656e74000500584964656e746974794364645265676973746572446964000600404964656e74697479416464436c61696d000700a44964656e746974794164645365636f6e646172794b65797357697468417574686f72697a6174696f6e0008002c5069707350726f706f736500090040436f6e747261637473507574436f6465000a006c436f72706f7261746542616c6c6f7441747461636842616c6c6f74000b00744361706974616c446973747269627574696f6e44697374726962757465000c004c4e4654437265617465436f6c6c656374696f6e000d001c4e46544d696e74000e006c4964656e746974794372656174654368696c644964656e74697479000f0000ed060c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963f10601ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000464536565205b6050616c6c65743a3a7363686564756c65605d2e1863616e63656c0801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001045c536565205b6050616c6c65743a3a63616e63656c605d2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963f10601ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0002047c536565205b6050616c6c65743a3a7363686564756c655f6e616d6564605d2e3063616e63656c5f6e616d656404010869640401205461736b4e616d6500030474536565205b6050616c6c65743a3a63616e63656c5f6e616d6564605d2e387363686564756c655f61667465721001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963f10601ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004047c536565205b6050616c6c65743a3a7363686564756c655f6166746572605d2e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963f10601ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00050494536565205b6050616c6c65743a3a7363686564756c655f6e616d65645f6166746572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef10604184f7074696f6e04045401b5030108104e6f6e6500000010536f6d650400b5030000010000f5060c4470616c6c65745f736574746c656d656e741870616c6c65741043616c6c040454000164306372656174655f76656e75650c011c64657461696c73c503013056656e756544657461696c7300011c7369676e657273fc01445665633c543a3a4163636f756e7449643e00010c747970c903012456656e75655479706500000474536565205b6050616c6c65743a3a6372656174655f76656e7565605d2e507570646174655f76656e75655f64657461696c730801086964c103011c56656e7565496400011c64657461696c73c503013056656e756544657461696c7300010494536565205b6050616c6c65743a3a7570646174655f76656e75655f64657461696c73605d2e447570646174655f76656e75655f747970650801086964c103011c56656e7565496400010c747970c903012456656e75655479706500020488536565205b6050616c6c65743a3a7570646174655f76656e75655f74797065605d2e5061666669726d5f776974685f72656365697074730c0108696471020134496e737472756374696f6e496400013c726563656970745f64657461696c73f90601dc5665633c5265636569707444657461696c733c543a3a4163636f756e7449642c20543a3a4f6666436861696e5369676e61747572653e3e000128706f7274666f6c696f730d0701d8426f756e64656442547265655365743c506f7274666f6c696f49642c20543a3a4d61784e756d6265724f66506f7274666f6c696f733e00030494536565205b6050616c6c65743a3a61666669726d5f776974685f7265636569707473605d2e4c7365745f76656e75655f66696c746572696e6708012061737365745f6964a8011c4173736574496400011c656e61626c656439010110626f6f6c00040490536565205b6050616c6c65743a3a7365745f76656e75655f66696c746572696e67605d2e30616c6c6f775f76656e75657308012061737365745f6964a8011c4173736574496400011876656e756573d90301305665633c56656e756549643e00050474536565205b6050616c6c65743a3a616c6c6f775f76656e756573605d2e3c646973616c6c6f775f76656e75657308012061737365745f6964a8011c4173736574496400011876656e756573d90301305665633c56656e756549643e00060480536565205b6050616c6c65743a3a646973616c6c6f775f76656e756573605d2e507570646174655f76656e75655f7369676e6572730c01086964c103011c56656e7565496400011c7369676e657273fc01445665633c543a3a4163636f756e7449643e00012c6164645f7369676e65727339010110626f6f6c00070494536565205b6050616c6c65743a3a7570646174655f76656e75655f7369676e657273605d2e68657865637574655f6d616e75616c5f696e737472756374696f6e180108696471020134496e737472756374696f6e4964000124706f7274666f6c696f6502014c4f7074696f6e3c506f7274666f6c696f49643e00014866756e6769626c655f7472616e736665727310010c7533320001386e6674735f7472616e736665727310010c7533320001486f6666636861696e5f7472616e736665727310010c7533320001307765696768745f6c696d6974d10401384f7074696f6e3c5765696768743e000804ac536565205b6050616c6c65743a3a657865637574655f6d616e75616c5f696e737472756374696f6e605d2e3c6164645f696e737472756374696f6e18012076656e75655f6964dd03013c4f7074696f6e3c56656e756549643e00013c736574746c656d656e745f74797065e1030184536574746c656d656e74547970653c426c6f636b4e756d626572466f723c543e3e00012874726164655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e00012876616c75655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e0001106c656773e50301205665633c4c65673e000140696e737472756374696f6e5f6d656d6f8401304f7074696f6e3c4d656d6f3e00090480536565205b6050616c6c65743a3a6164645f696e737472756374696f6e605d2e686164645f616e645f61666669726d5f696e737472756374696f6e1c012076656e75655f6964dd03013c4f7074696f6e3c56656e756549643e00013c736574746c656d656e745f74797065e1030184536574746c656d656e74547970653c426c6f636b4e756d626572466f723c543e3e00012874726164655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e00012876616c75655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e0001106c656773e50301205665633c4c65673e000128706f7274666f6c696f730d0701d8426f756e64656442547265655365743c506f7274666f6c696f49642c20543a3a4d61784e756d6265724f66506f7274666f6c696f733e000140696e737472756374696f6e5f6d656d6f8401304f7074696f6e3c4d656d6f3e000a04ac536565205b6050616c6c65743a3a6164645f616e645f61666669726d5f696e737472756374696f6e605d2e4861666669726d5f696e737472756374696f6e080108696471020134496e737472756374696f6e4964000128706f7274666f6c696f730d0701d8426f756e64656442547265655365743c506f7274666f6c696f49642c20543a3a4d61784e756d6265724f66506f7274666f6c696f733e000b048c536565205b6050616c6c65743a3a61666669726d5f696e737472756374696f6e605d2e5077697468647261775f61666669726d6174696f6e080108696471020134496e737472756374696f6e4964000128706f7274666f6c696f730d0701d8426f756e64656442547265655365743c506f7274666f6c696f49642c20543a3a4d61784e756d6265724f66506f7274666f6c696f733e000c0494536565205b6050616c6c65743a3a77697468647261775f61666669726d6174696f6e605d2e4872656a6563745f696e737472756374696f6e080108696471020134496e737472756374696f6e4964000124706f7274666f6c696fe8012c506f7274666f6c696f4964000d048c536565205b6050616c6c65743a3a72656a6563745f696e737472756374696f6e605d2e74657865637574655f7363686564756c65645f696e737472756374696f6e080108696471020134496e737472756374696f6e49640001307765696768745f6c696d6974200118576569676874000e04b8536565205b6050616c6c65743a3a657865637574655f7363686564756c65645f696e737472756374696f6e605d2e7c61666669726d5f776974685f72656365697074735f776974685f636f756e74100108696471020134496e737472756374696f6e496400013c726563656970745f64657461696c73f90601dc5665633c5265636569707444657461696c733c543a3a4163636f756e7449642c20543a3a4f6666436861696e5369676e61747572653e3e000128706f7274666f6c696f730d0701d8426f756e64656442547265655365743c506f7274666f6c696f49642c20543a3a4d61784e756d6265724f66506f7274666f6c696f733e0001406e756d6265725f6f665f617373657473110701604f7074696f6e3c41666669726d6174696f6e436f756e743e000f04c0536565205b6050616c6c65743a3a61666669726d5f776974685f72656365697074735f776974685f636f756e74605d2e7461666669726d5f696e737472756374696f6e5f776974685f636f756e740c0108696471020134496e737472756374696f6e4964000128706f7274666f6c696f730d0701d8426f756e64656442547265655365743c506f7274666f6c696f49642c20543a3a4d61784e756d6265724f66506f7274666f6c696f733e0001406e756d6265725f6f665f617373657473110701604f7074696f6e3c41666669726d6174696f6e436f756e743e001004b8536565205b6050616c6c65743a3a61666669726d5f696e737472756374696f6e5f776974685f636f756e74605d2e7472656a6563745f696e737472756374696f6e5f776974685f636f756e740c0108696471020134496e737472756374696f6e4964000124706f7274666f6c696fe8012c506f7274666f6c696f49640001406e756d6265725f6f665f6173736574731d0701484f7074696f6e3c4173736574436f756e743e001104b8536565205b6050616c6c65743a3a72656a6563745f696e737472756374696f6e5f776974685f636f756e74605d2e7c77697468647261775f61666669726d6174696f6e5f776974685f636f756e740c0108696471020134496e737472756374696f6e4964000128706f7274666f6c696f730d0701d8426f756e64656442547265655365743c506f7274666f6c696f49642c20543a3a4d61784e756d6265724f66506f7274666f6c696f733e0001406e756d6265725f6f665f617373657473110701604f7074696f6e3c41666669726d6174696f6e436f756e743e001204c0536565205b6050616c6c65743a3a77697468647261775f61666669726d6174696f6e5f776974685f636f756e74605d2e786164645f696e737472756374696f6e5f776974685f6d65646961746f72731c012076656e75655f6964dd03013c4f7074696f6e3c56656e756549643e00013c736574746c656d656e745f74797065e1030184536574746c656d656e74547970653c426c6f636b4e756d626572466f723c543e3e00012874726164655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e00012876616c75655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e0001106c656773e50301205665633c4c65673e000140696e737472756374696f6e5f6d656d6f8401304f7074696f6e3c4d656d6f3e0001246d65646961746f7273210701dc426f756e64656442547265655365743c4964656e7469747949642c20543a3a4d6178496e737472756374696f6e4d65646961746f72733e001304bc536565205b6050616c6c65743a3a6164645f696e737472756374696f6e5f776974685f6d65646961746f7273605d2e746164645f616e645f61666669726d5f776974685f6d65646961746f727320012076656e75655f6964dd03013c4f7074696f6e3c56656e756549643e00013c736574746c656d656e745f74797065e1030184536574746c656d656e74547970653c426c6f636b4e756d626572466f723c543e3e00012874726164655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e00012876616c75655f64617465050101444f7074696f6e3c543a3a4d6f6d656e743e0001106c656773e50301205665633c4c65673e000128706f7274666f6c696f730d0701d8426f756e64656442547265655365743c506f7274666f6c696f49642c20543a3a4d61784e756d6265724f66506f7274666f6c696f733e000140696e737472756374696f6e5f6d656d6f8401304f7074696f6e3c4d656d6f3e0001246d65646961746f7273210701dc426f756e64656442547265655365743c4964656e7469747949642c20543a3a4d6178496e737472756374696f6e4d65646961746f72733e001404b8536565205b6050616c6c65743a3a6164645f616e645f61666669726d5f776974685f6d65646961746f7273605d2e7861666669726d5f696e737472756374696f6e5f61735f6d65646961746f72080138696e737472756374696f6e5f696471020134496e737472756374696f6e4964000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e001504bc536565205b6050616c6c65743a3a61666669726d5f696e737472756374696f6e5f61735f6d65646961746f72605d2e8077697468647261775f61666669726d6174696f6e5f61735f6d65646961746f72040138696e737472756374696f6e5f696471020134496e737472756374696f6e4964001604c4536565205b6050616c6c65743a3a77697468647261775f61666669726d6174696f6e5f61735f6d65646961746f72605d2e7872656a6563745f696e737472756374696f6e5f61735f6d65646961746f72080138696e737472756374696f6e5f696471020134496e737472756374696f6e49640001406e756d6265725f6f665f6173736574731d0701484f7074696f6e3c4173736574436f756e743e001704bc536565205b6050616c6c65743a3a72656a6563745f696e737472756374696f6e5f61735f6d65646961746f72605d2e406c6f636b5f696e737472756374696f6e08011c696e73745f696471020134496e737472756374696f6e49640001307765696768745f6c696d697420011857656967687400180484536565205b6050616c6c65743a3a6c6f636b5f696e737472756374696f6e605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef906000002fd0600fd060c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e74385265636569707444657461696c7308244163636f756e7449640100444f6666436861696e5369676e61747572650101070018010c75696428010c753634000138696e737472756374696f6e5f696471020134496e737472756374696f6e49640001186c65675f6964cd0301144c656749640001187369676e65720001244163636f756e7449640001247369676e6174757265010701444f6666436861696e5369676e61747572650001206d65746164617461d103015c4f7074696f6e3c526563656970744d657461646174613e00000107082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040069060148656432353531393a3a5369676e61747572650000001c53723235353139040089060148737232353531393a3a5369676e617475726500010014456364736104000507014065636473613a3a5369676e61747572650002000005070c1c73705f636f7265146563647361245369676e617475726500000400090701205b75383b2036355d000009070000034100000008000d070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401e8045300000400f4012c42547265655365743c543e0000110704184f7074696f6e0404540115070108104e6f6e6500000010536f6d6504001507000001000015070c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e744041666669726d6174696f6e436f756e7400000c014873656e6465725f61737365745f636f756e74190701284173736574436f756e7400015072656365697665725f61737365745f636f756e74190701284173736574436f756e740001386f6666636861696e5f636f756e7410010c753332000019070c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e74284173736574436f756e7400000c012066756e6769626c6510010c7533320001306e6f6e5f66756e6769626c6510010c7533320001246f66665f636861696e10010c75333200001d0704184f7074696f6e0404540119070108104e6f6e6500000010536f6d6504001907000001000021070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401800453000004007502012c42547265655365743c543e000025070c4470616c6c65745f737461746973746963731870616c6c65741043616c6c040454000110587365745f6163746976655f61737365745f737461747308012061737365745f6964a8011c41737365744964000128737461745f74797065732907014842547265655365743c53746174547970653e0000049c536565205b6050616c6c65743a3a7365745f6163746976655f61737365745f7374617473605d2e6062617463685f7570646174655f61737365745f73746174730c012061737365745f6964a8011c41737365744964000124737461745f74797065f5030120537461745479706500011876616c7565732d07015042547265655365743c537461745570646174653e000104a4536565205b6050616c6c65743a3a62617463685f7570646174655f61737365745f7374617473605d2e747365745f61737365745f7472616e736665725f636f6d706c69616e636508012061737365745f6964a8011c4173736574496400014c7472616e736665725f636f6e646974696f6e733107016c42547265655365743c5472616e73666572436f6e646974696f6e3e000204b8536565205b6050616c6c65743a3a7365745f61737365745f7472616e736665725f636f6d706c69616e6365605d2e4c7365745f656e7469746965735f6578656d70740c012469735f6578656d707439010110626f6f6c0001286578656d70745f6b6579250401685472616e73666572436f6e646974696f6e4578656d70744b6579000120656e7469746965737502015042547265655365743c4964656e7469747949643e00030490536565205b6050616c6c65743a3a7365745f656e7469746965735f6578656d7074605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e29070420425472656553657404045401f503000400f1030000002d070420425472656553657404045401090400040005040000003107042042547265655365740404540121040004001d0400000035070c2870616c6c65745f73746f1870616c6c65741043616c6c04045400011c446372656174655f66756e647261697365722801486f66666572696e675f706f7274666f6c696fe8012c506f7274666f6c696f49640001386f66666572696e675f6173736574a8011c4173736574496400014472616973696e675f706f7274666f6c696fe8012c506f7274666f6c696f496400013472616973696e675f6173736574a8011c417373657449640001147469657273390701385665633c5072696365546965723e00012076656e75655f6964c103011c56656e756549640001147374617274050101444f7074696f6e3c543a3a4d6f6d656e743e00010c656e64050101444f7074696f6e3c543a3a4d6f6d656e743e0001486d696e696d756d5f696e766573746d656e7418011c42616c616e636500013c66756e647261697365725f6e616d653504013846756e647261697365724e616d6500000488536565205b6050616c6c65743a3a6372656174655f66756e64726169736572605d2e18696e766573741801386f66666572696e675f6173736574a8011c4173736574496400013466756e647261697365725f69643104013046756e647261697365724964000150696e766573746d656e745f706f7274666f6c696fe8012c506f7274666f6c696f496400011c66756e64696e67410701c446756e64696e674d6574686f643c543a3a4163636f756e7449642c20543a3a4f6666436861696e5369676e61747572653e00013c70757263686173655f616d6f756e7418011c42616c616e63650001246d61785f70726963651904013c4f7074696f6e3c42616c616e63653e0001045c536565205b6050616c6c65743a3a696e76657374605d2e44667265657a655f66756e647261697365720801386f66666572696e675f6173736574a8011c4173736574496400013466756e647261697365725f69643104013046756e64726169736572496400020488536565205b6050616c6c65743a3a667265657a655f66756e64726169736572605d2e4c756e667265657a655f66756e647261697365720801386f66666572696e675f6173736574a8011c4173736574496400013466756e647261697365725f69643104013046756e64726169736572496400030490536565205b6050616c6c65743a3a756e667265657a655f66756e64726169736572605d2e606d6f646966795f66756e647261697365725f77696e646f771001386f66666572696e675f6173736574a8011c4173736574496400013466756e647261697365725f69643104013046756e6472616973657249640001147374617274280124543a3a4d6f6d656e7400010c656e64050101444f7074696f6e3c543a3a4d6f6d656e743e000404a4536565205b6050616c6c65743a3a6d6f646966795f66756e647261697365725f77696e646f77605d2e1073746f700801386f66666572696e675f6173736574a8011c4173736574496400013466756e647261697365725f69643104013046756e64726169736572496400050454536565205b6050616c6c65743a3a73746f70605d2e5c656e61626c655f6f6666636861696e5f66756e64696e670c01386f66666572696e675f6173736574a8011c4173736574496400013466756e647261697365725f69643104013046756e6472616973657249640001187469636b6572210101185469636b6572000604a0536565205b6050616c6c65743a3a656e61626c655f6f6666636861696e5f66756e64696e67605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e39070000023d07003d07082870616c6c65745f73746f245072696365546965720000080114746f74616c18011c42616c616e6365000114707269636518011c42616c616e636500004107082870616c6c65745f73746f3446756e64696e674d6574686f6408244163636f756e7449640100444f6666436861696e5369676e617475726501010701081c4f6e436861696e0400e8012c506f7274666f6c696f4964000000204f6666436861696e0400450701d846756e647261697365725265636569707444657461696c733c4163636f756e7449642c204f6666436861696e5369676e61747572653e0001000045070c4c706f6c796d6573685f7072696d6974697665730c73746f6046756e647261697365725265636569707444657461696c7308244163636f756e7449640100444f6666436861696e5369676e61747572650101070010010c75696428010c7536340001187369676e65720001244163636f756e7449640001247369676e6174757265010701444f6666436861696e5369676e61747572650001206d65746164617461d103015c4f7074696f6e3c526563656970744d657461646174613e000049070c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0404540001083064697362757273656d656e7404013462656e656669636961726965734d0701785665633c42656e65666963696172793c42616c616e63654f663c543e3e3e00000474536565205b6050616c6c65743a3a64697362757273656d656e74605d2e347265696d62757273656d656e74040118616d6f756e7418013042616c616e63654f663c543e00010478536565205b6050616c6c65743a3a7265696d62757273656d656e74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d070000025107005107084c706f6c796d6573685f7072696d6974697665732c42656e6566696369617279041c42616c616e636501180008010869648001284964656e746974794964000118616d6f756e7418011c42616c616e6365000055070c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011c14626174636804011463616c6c735907017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a6261746368605d2e2072656c61795f74780c0118746172676574000130543a3a4163636f756e7449640001247369676e617475726501070150543a3a4f6666436861696e5369676e617475726500011063616c6c5d070198556e6971756543616c6c3c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00010464536565205b6050616c6c65743a3a72656c61795f7478605d2e2462617463685f616c6c04011463616c6c735907017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00020468536565205b6050616c6c65743a3a62617463685f616c6c605d2e2c64697370617463685f617308012461735f6f726967696e61070154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6cf505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030470536565205b6050616c6c65743a3a64697370617463685f6173605d2e2c666f7263655f626174636804011463616c6c735907017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00040470536565205b6050616c6c65743a3a666f7263655f6261746368605d2e2c776974685f77656967687408011063616c6cf505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687420011857656967687400050470536565205b6050616c6c65743a3a776974685f776569676874605d2e3461735f64657269766174697665080114696e6465784503010c75313600011063616c6cf505017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00090478536565205b6050616c6c65743a3a61735f64657269766174697665605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5907000002f505005d07083870616c6c65745f7574696c69747928556e6971756543616c6c04044301f505000801146e6f6e6365280148417574686f72697a6174696f6e4e6f6e636500011063616c6cf5050118426f783c433e000061070c60706f6c796d6573685f72756e74696d655f646576656c6f701c72756e74696d65304f726967696e43616c6c65720001141873797374656d0400650701746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e00000044506f6c796d657368436f6d6d69747465650400690701f870616c6c65745f636f6d6d69747465653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6d6d69747465653a3a496e7374616e6365313e00090048546563686e6963616c436f6d6d697474656504006d0701f870616c6c65745f636f6d6d69747465653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6d6d69747465653a3a496e7374616e6365333e000b004055706772616465436f6d6d69747465650400710701f870616c6c65745f636f6d6d69747465653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6d6d69747465653a3a496e7374616e6365343e000d0010566f69640400750701110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f69640004000065070c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e650002000069070c4070616c6c65745f636f6d6d69747465651870616c6c6574245261774f726967696e08244163636f756e7449640100044900010420456e646f72736564000000006d070c4070616c6c65745f636f6d6d69747465651870616c6c6574245261774f726967696e08244163636f756e7449640100044900010420456e646f727365640000000071070c4070616c6c65745f636f6d6d69747465651870616c6c6574245261774f726967696e08244163636f756e7449640100044900010420456e646f72736564000000007507081c73705f636f726510566f69640001000079070c2c70616c6c65745f626173651870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e7d070c5870616c6c65745f65787465726e616c5f6167656e74731870616c6c65741043616c6c040454000120306372656174655f67726f757008012061737365745f6964a8011c417373657449640001147065726d73b8015045787472696e7369635065726d697373696f6e7300000474536565205b6050616c6c65743a3a6372656174655f67726f7570605d2e547365745f67726f75705f7065726d697373696f6e730c012061737365745f6964a8011c41737365744964000108696435010110414749640001147065726d73b8015045787472696e7369635065726d697373696f6e7300010498536565205b6050616c6c65743a3a7365745f67726f75705f7065726d697373696f6e73605d2e3072656d6f76655f6167656e7408012061737365745f6964a8011c417373657449640001146167656e748001284964656e74697479496400020474536565205b6050616c6c65743a3a72656d6f76655f6167656e74605d2e20616264696361746504012061737365745f6964a8011c4173736574496400030464536565205b6050616c6c65743a3a6162646963617465605d2e306368616e67655f67726f75700c012061737365745f6964a8011c417373657449640001146167656e748001284964656e74697479496400011467726f7570310101284167656e7447726f757000040474536565205b6050616c6c65743a3a6368616e67655f67726f7570605d2e4c6163636570745f6265636f6d655f6167656e7404011c617574685f696428010c75363400050490536565205b6050616c6c65743a3a6163636570745f6265636f6d655f6167656e74605d2e646372656174655f67726f75705f616e645f6164645f6175746810012061737365745f6964a8011c417373657449640001147065726d73b8015045787472696e7369635065726d697373696f6e730001187461726765748001284964656e746974794964000118657870697279050101444f7074696f6e3c543a3a4d6f6d656e743e000604a8536565205b6050616c6c65743a3a6372656174655f67726f75705f616e645f6164645f61757468605d2e786372656174655f616e645f6368616e67655f637573746f6d5f67726f75700c012061737365745f6964a8011c417373657449640001147065726d73b8015045787472696e7369635065726d697373696f6e730001146167656e748001284964656e746974794964000704bc536565205b6050616c6c65743a3a6372656174655f616e645f6368616e67655f637573746f6d5f67726f7570605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e81070c3870616c6c65745f72656c617965721870616c6c65741043616c6c040454000118387365745f706179696e675f6b6579080120757365725f6b6579000130543a3a4163636f756e74496400012c706f6c79785f6c696d697418011c42616c616e63650000047c536565205b6050616c6c65743a3a7365745f706179696e675f6b6579605d2e446163636570745f706179696e675f6b657904011c617574685f696428010c75363400010488536565205b6050616c6c65743a3a6163636570745f706179696e675f6b6579605d2e4472656d6f76655f706179696e675f6b6579080120757365725f6b6579000130543a3a4163636f756e744964000128706179696e675f6b6579000130543a3a4163636f756e74496400020488536565205b6050616c6c65743a3a72656d6f76655f706179696e675f6b6579605d2e487570646174655f706f6c79785f6c696d6974080120757365725f6b6579000130543a3a4163636f756e74496400012c706f6c79785f6c696d697418011c42616c616e63650003048c536565205b6050616c6c65743a3a7570646174655f706f6c79785f6c696d6974605d2e50696e6372656173655f706f6c79785f6c696d6974080120757365725f6b6579000130543a3a4163636f756e744964000118616d6f756e7418011c42616c616e636500040494536565205b6050616c6c65743a3a696e6372656173655f706f6c79785f6c696d6974605d2e5064656372656173655f706f6c79785f6c696d6974080120757365725f6b6579000130543a3a4163636f756e744964000118616d6f756e7418011c42616c616e636500050494536565205b6050616c6c65743a3a64656372656173655f706f6c79785f6c696d6974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e85070c4070616c6c65745f636f6e7472616374731870616c6c65741043616c6c0404540001283c63616c6c5f6f6c645f77656967687414011064657374690501504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c101013042616c616e63654f663c543e0001246761735f6c696d69742401244f6c6457656967687400015473746f726167655f6465706f7369745f6c696d6974890701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e0001106461746130011c5665633c75383e00000480536565205b6050616c6c65743a3a63616c6c5f6f6c645f776569676874605d2e80696e7374616e74696174655f776974685f636f64655f6f6c645f77656967687418011476616c7565c101013042616c616e63654f663c543e0001246761735f6c696d69742401244f6c6457656967687400015473746f726167655f6465706f7369745f6c696d6974890701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e000110636f646530011c5665633c75383e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e000104c4536565205b6050616c6c65743a3a696e7374616e74696174655f776974685f636f64655f6f6c645f776569676874605d2e58696e7374616e74696174655f6f6c645f77656967687418011476616c7565c101013042616c616e63654f663c543e0001246761735f6c696d69742401244f6c6457656967687400015473746f726167655f6465706f7369745f6c696d6974890701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e000124636f64655f686173682c012c436f6465486173683c543e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e0002049c536565205b6050616c6c65743a3a696e7374616e74696174655f6f6c645f776569676874605d2e2c75706c6f61645f636f64650c0110636f646530011c5665633c75383e00015473746f726167655f6465706f7369745f6c696d6974890701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e00012c64657465726d696e69736d8d07012c44657465726d696e69736d00030470536565205b6050616c6c65743a3a75706c6f61645f636f6465605d2e2c72656d6f76655f636f6465040124636f64655f686173682c012c436f6465486173683c543e00040470536565205b6050616c6c65743a3a72656d6f76655f636f6465605d2e207365745f636f646508011064657374690501504163636f756e7449644c6f6f6b75704f663c543e000124636f64655f686173682c012c436f6465486173683c543e00050464536565205b6050616c6c65743a3a7365745f636f6465605d2e1063616c6c14011064657374690501504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c101013042616c616e63654f663c543e0001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d6974890701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e0001106461746130011c5665633c75383e00060454536565205b6050616c6c65743a3a63616c6c605d2e54696e7374616e74696174655f776974685f636f646518011476616c7565c101013042616c616e63654f663c543e0001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d6974890701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e000110636f646530011c5665633c75383e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e00070498536565205b6050616c6c65743a3a696e7374616e74696174655f776974685f636f6465605d2e2c696e7374616e746961746518011476616c7565c101013042616c616e63654f663c543e0001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d6974890701c44f7074696f6e3c3c42616c616e63654f663c543e20617320636f6465633a3a486173436f6d706163743e3a3a547970653e000124636f64655f686173682c012c436f6465486173683c543e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e00080470536565205b6050616c6c65743a3a696e7374616e7469617465605d2e1c6d6967726174650401307765696768745f6c696d697420011857656967687400090460536565205b6050616c6c65743a3a6d696772617465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e890704184f7074696f6e04045401c1010108104e6f6e6500000010536f6d650400c10100000100008d070c4070616c6c65745f636f6e747261637473107761736d2c44657465726d696e69736d00010820456e666f726365640000001c52656c617865640001000091070c48706f6c796d6573685f636f6e7472616374731870616c6c65741043616c6c0404540001186c696e7374616e74696174655f776974685f636f64655f7065726d731c0124656e646f776d656e7418011c42616c616e63650001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d69741904013c4f7074696f6e3c42616c616e63653e000110636f646530011c5665633c75383e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e0001147065726d73a0012c5065726d697373696f6e73000004b0536565205b6050616c6c65743a3a696e7374616e74696174655f776974685f636f64655f7065726d73605d2e6c696e7374616e74696174655f776974685f686173685f7065726d731c0124656e646f776d656e7418011c42616c616e63650001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d69741904013c4f7074696f6e3c42616c616e63653e000124636f64655f686173682c012c436f6465486173683c543e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e0001147065726d73a0012c5065726d697373696f6e73000104b0536565205b6050616c6c65743a3a696e7374616e74696174655f776974685f686173685f7065726d73605d2e747570646174655f63616c6c5f72756e74696d655f77686974656c69737404011c75706461746573950701605665633c2845787472696e73696349642c20626f6f6c293e000204b8536565205b6050616c6c65743a3a7570646174655f63616c6c5f72756e74696d655f77686974656c697374605d2e90696e7374616e74696174655f776974685f636f64655f61735f7072696d6172795f6b6579180124656e646f776d656e7418011c42616c616e63650001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d69741904013c4f7074696f6e3c42616c616e63653e000110636f646530011c5665633c75383e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e000304d4536565205b6050616c6c65743a3a696e7374616e74696174655f776974685f636f64655f61735f7072696d6172795f6b6579605d2e90696e7374616e74696174655f776974685f686173685f61735f7072696d6172795f6b6579180124656e646f776d656e7418011c42616c616e63650001246761735f6c696d697420011857656967687400015473746f726167655f6465706f7369745f6c696d69741904013c4f7074696f6e3c42616c616e63653e000124636f64655f686173682c012c436f6465486173683c543e0001106461746130011c5665633c75383e00011073616c7430011c5665633c75383e000404d4536565205b6050616c6c65743a3a696e7374616e74696174655f776974685f686173685f61735f7072696d6172795f6b6579605d2e2c757067726164655f61706908010c6170697504010c4170690001306e6578745f757067726164659d0701384e657874557067726164653c543e00050470536565205b6050616c6c65743a3a757067726164655f617069605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e95070000029907009907000004087d043901009d070848706f6c796d6573685f636f6e7472616374732c4e657874557067726164650404540000080134636861696e5f76657273696f6e79040130436861696e56657273696f6e0001206170695f68617368a1070138417069436f6465486173683c543e0000a1070848706f6c796d6573685f636f6e7472616374732c417069436f6465486173680404540000040110686173682c012c436f6465486173683c543e0000a5070c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657330011c5665633c75383e00000478536565205b6050616c6c65743a3a6e6f74655f707265696d616765605d2e3c756e6e6f74655f707265696d616765040110686173682c011c543a3a4861736800010480536565205b6050616c6c65743a3a756e6e6f74655f707265696d616765605d2e40726571756573745f707265696d616765040110686173682c011c543a3a4861736800020484536565205b6050616c6c65743a3a726571756573745f707265696d616765605d2e48756e726571756573745f707265696d616765040110686173682c011c543a3a486173680003048c536565205b6050616c6c65743a3a756e726571756573745f707265696d616765605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea9070c2870616c6c65745f6e66741870616c6c65741043616c6c040454000110546372656174655f6e66745f636f6c6c656374696f6e0c012061737365745f6964ad07013c4f7074696f6e3c417373657449643e0001206e66745f74797065b107015c4f7074696f6e3c4e6f6e46756e6769626c65547970653e00013c636f6c6c656374696f6e5f6b657973b50701444e4654436f6c6c656374696f6e4b65797300000498536565205b6050616c6c65743a3a6372656174655f6e66745f636f6c6c656374696f6e605d2e2469737375655f6e66740c012061737365745f6964a8011c4173736574496400015c6e66745f6d657461646174615f61747472696275746573bd0701645665633c4e46544d657461646174614174747269627574653e000138706f7274666f6c696f5f6b696e64ec0134506f7274666f6c696f4b696e6400010468536565205b6050616c6c65743a3a69737375655f6e6674605d2e2872656465656d5f6e667410012061737365745f6964a8011c417373657449640001186e66745f6964a50301144e46544964000138706f7274666f6c696f5f6b696e64ec0134506f7274666f6c696f4b696e640001386e756d6265725f6f665f6b657973c50701284f7074696f6e3c75383e0002046c536565205b6050616c6c65743a3a72656465656d5f6e6674605d2e4c636f6e74726f6c6c65725f7472616e736665720c01106e6674739d0301104e465473000140736f757263655f706f7274666f6c696fe8012c506f7274666f6c696f496400015863616c6c6572735f706f7274666f6c696f5f6b696e64ec0134506f7274666f6c696f4b696e6400030490536565205b6050616c6c65743a3a636f6e74726f6c6c65725f7472616e73666572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ead0704184f7074696f6e04045401a80108104e6f6e6500000010536f6d650400a80000010000b10704184f7074696f6e04045401dd010108104e6f6e6500000010536f6d650400dd010000010000b5070c4c706f6c796d6573685f7072696d6974697665730c6e6674444e4654436f6c6c656374696f6e4b65797300000400b90701545665633c41737365744d657461646174614b65793e0000b907000002610200bd07000002c10700c1070c4c706f6c796d6573685f7072696d6974697665730c6e6674504e46544d65746164617461417474726962757465000008010c6b65796102014041737365744d657461646174614b657900011476616c75652d02014841737365744d6574616461746156616c75650000c50704184f7074696f6e04045401080108104e6f6e6500000010536f6d650400080000010000c9070c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c65741043616c6c0404540001143c7375626d69745f756e7369676e65640801307261775f736f6c7574696f6ecd0701b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e00011c7769746e6573739d080158536f6c7574696f6e4f72536e617073686f7453697a6500000480536565205b6050616c6c65743a3a7375626d69745f756e7369676e6564605d2e6c7365745f6d696e696d756d5f756e747275737465645f73636f72650401406d617962655f6e6578745f73636f7265a10801544f7074696f6e3c456c656374696f6e53636f72653e000104b0536565205b6050616c6c65743a3a7365745f6d696e696d756d5f756e747275737465645f73636f7265605d2e747365745f656d657267656e63795f656c656374696f6e5f726573756c74040120737570706f727473a5080158537570706f7274733c543a3a4163636f756e7449643e000204b8536565205b6050616c6c65743a3a7365745f656d657267656e63795f656c656374696f6e5f726573756c74605d2e187375626d69740401307261775f736f6c7574696f6ecd0701b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e0003045c536565205b6050616c6c65743a3a7375626d6974605d2e4c676f7665726e616e63655f66616c6c6261636b0801406d617962655f6d61785f766f746572731d06012c4f7074696f6e3c7533323e0001446d617962655f6d61785f746172676574731d06012c4f7074696f6e3c7533323e00040490536565205b6050616c6c65743a3a676f7665726e616e63655f66616c6c6261636b605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd07089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173652c526177536f6c7574696f6e04045301d107000c0120736f6c7574696f6ed10701045300011473636f726595040134456c656374696f6e53636f7265000114726f756e6410010c7533320000d107085c706f6c796d6573685f72756e74696d655f636f6d6d6f6e384e706f73536f6c7574696f6e31360000400118766f74657331d50700000118766f74657332e10700000118766f74657333f50700000118766f74657334010800000118766f746573350d0800000118766f74657336190800000118766f74657337250800000118766f74657338310800000118766f746573393d080000011c766f746573313049080000011c766f746573313155080000011c766f746573313261080000011c766f74657331336d080000011c766f746573313479080000011c766f746573313585080000011c766f74657331369108000000d507000002d90700d90700000408b104dd0700dd07000006450300e107000002e50700e5070000040cb104e907dd0700e90700000408dd07ed0700ed07000006f10700f1070c3473705f61726974686d65746963287065725f7468696e677318506572553136000004004503010c7531360000f507000002f90700f9070000040cb104fd07dd0700fd0700000302000000e90700010800000205080005080000040cb1040908dd0700090800000303000000e907000d0800000211080011080000040cb1041508dd0700150800000304000000e9070019080000021d08001d080000040cb1042108dd0700210800000305000000e90700250800000229080029080000040cb1042d08dd07002d0800000306000000e90700310800000235080035080000040cb1043908dd0700390800000307000000e907003d0800000241080041080000040cb1044508dd0700450800000308000000e9070049080000024d08004d080000040cb1045108dd0700510800000309000000e90700550800000259080059080000040cb1045d08dd07005d080000030a000000e90700610800000265080065080000040cb1046908dd070069080000030b000000e907006d0800000271080071080000040cb1047508dd070075080000030c000000e9070079080000027d08007d080000040cb1048108dd070081080000030d000000e90700850800000289080089080000040cb1048d08dd07008d080000030e000000e90700910800000295080095080000040cb1049908dd070099080000030f000000e907009d08089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736558536f6c7574696f6e4f72536e617073686f7453697a650000080118766f74657273b104010c75333200011c74617267657473b104010c7533320000a10804184f7074696f6e0404540195040108104e6f6e6500000010536f6d65040095040000010000a508000002a90800a9080000040800ad0800ad08084473705f6e706f735f656c656374696f6e731c537570706f727404244163636f756e744964010000080114746f74616c18013c457874656e64656442616c616e6365000118766f74657273b10801845665633c284163636f756e7449642c20457874656e64656442616c616e6365293e0000b108000002b50800b50800000408001800b9080c4070616c6c65745f636f6d6d69747465651870616c6c657434506f6c796d657368566f746573042c426c6f636b4e756d626572011000100114696e64657810013450726f706f73616c496e646578000110617965734101013c5665633c4964656e7469747949643e0001106e6179734101013c5665633c4964656e7469747949643e0001186578706972795101015c4d61796265426c6f636b3c426c6f636b4e756d6265723e0000bd080c4070616c6c65745f636f6d6d69747465651870616c6c6574144572726f72080454000449000124344475706c6963617465566f7465000004804475706c696361746520766f74657320617265206e6f7420616c6c6f7765642e284e6f74414d656d6265720001088841204449442069736e27742070617274206f662074686520636f6d6d69747465652ed454686520444944206d61792065697468657220626520612063616c6c6572206f7220736f6d65206f7468657220636f6e746578742e384e6f5375636850726f706f73616c000204444e6f20737563682070726f706f73616c2e3c50726f706f73616c457870697265640003049050726f706f73616c206578697374732c206275742069742068617320657870697265642e444475706c696361746550726f706f73616c0004044c4475706c69636174652070726f706f73616c2e544d69736d617463686564566f74696e67496e646578000504604d69736d61746368656420766f74696e6720696e6465782e44496e76616c696450726f706f7274696f6e0006049450726f706f7274696f6e206d757374206265206120726174696f6e616c206e756d6265722e3c4669727374566f746552656a65637400070cfc466972737420766f7465206f6e20612070726f706f73616c20637265617465732069742c20736f206974206d75737420626520616e20617070726f76616c2e0101416c6c2070726f706f73616c7320617265206d6f74696f6e7320746f206578656375746520736f6d657468696e6720617320224743206d616a6f72697479222efc546f2072656a65637420652e672e2c2061205049502c2061206d6f74696f6e20746f2072656a6563742073686f756c64206265202a617070726f7665642a2e5450726f706f73616c734c696d697452656163686564000804b44d6178696d756d206e756d626572206f662070726f706f73616c7320686173206265656e20726561636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec1080c3070616c6c65745f67726f75701870616c6c6574144572726f72080454000449000118544f6e6c795072696d6172794b6579416c6c6f776564000004b04f6e6c79207072696d617279206b6579206f6620746865206964656e7469747920697320616c6c6f7765642e3c4475706c69636174654d656d6265720001047c47726f7570206d656d6265722077617320616464656420616c72656164792e304e6f537563684d656d626572000204a443616e27742072656d6f76652061206d656d626572207468617420646f65736e27742065786973742e504c6173744d656d62657243616e6e6f7451756974000304a84c617374206d656d626572206f662074686520636f6d6d69747465652063616e206e6f7420717569742e684163746976654d656d626572734c696d697445786365656465640004045d01546865206c696d697420666f7220746865206e756d626572206f6620636f6e63757272656e7420616374697665206d656d6265727320666f7220746869732067726f757020686173206265656e2065786365656465642e684163746976654d656d626572734c696d69744f766572666c6f770005041501416374697665206d656d626572206c696d6974207761732067726561746572207468616e206d6178696d756d20636f6d6d6974746565206d656d62657273206c696d69742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec5080c4070616c6c65745f636f6d6d69747465651870616c6c6574144572726f72080454000449000124344475706c6963617465566f7465000004804475706c696361746520766f74657320617265206e6f7420616c6c6f7765642e284e6f74414d656d6265720001088841204449442069736e27742070617274206f662074686520636f6d6d69747465652ed454686520444944206d61792065697468657220626520612063616c6c6572206f7220736f6d65206f7468657220636f6e746578742e384e6f5375636850726f706f73616c000204444e6f20737563682070726f706f73616c2e3c50726f706f73616c457870697265640003049050726f706f73616c206578697374732c206275742069742068617320657870697265642e444475706c696361746550726f706f73616c0004044c4475706c69636174652070726f706f73616c2e544d69736d617463686564566f74696e67496e646578000504604d69736d61746368656420766f74696e6720696e6465782e44496e76616c696450726f706f7274696f6e0006049450726f706f7274696f6e206d757374206265206120726174696f6e616c206e756d6265722e3c4669727374566f746552656a65637400070cfc466972737420766f7465206f6e20612070726f706f73616c20637265617465732069742c20736f206974206d75737420626520616e20617070726f76616c2e0101416c6c2070726f706f73616c7320617265206d6f74696f6e7320746f206578656375746520736f6d657468696e6720617320224743206d616a6f72697479222efc546f2072656a65637420652e672e2c2061205049502c2061206d6f74696f6e20746f2072656a6563742073686f756c64206265202a617070726f7665642a2e5450726f706f73616c734c696d697452656163686564000804b44d6178696d756d206e756d626572206f662070726f706f73616c7320686173206265656e20726561636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec9080c3070616c6c65745f67726f75701870616c6c6574144572726f72080454000449000118544f6e6c795072696d6172794b6579416c6c6f776564000004b04f6e6c79207072696d617279206b6579206f6620746865206964656e7469747920697320616c6c6f7765642e3c4475706c69636174654d656d6265720001047c47726f7570206d656d6265722077617320616464656420616c72656164792e304e6f537563684d656d626572000204a443616e27742072656d6f76652061206d656d626572207468617420646f65736e27742065786973742e504c6173744d656d62657243616e6e6f7451756974000304a84c617374206d656d626572206f662074686520636f6d6d69747465652063616e206e6f7420717569742e684163746976654d656d626572734c696d697445786365656465640004045d01546865206c696d697420666f7220746865206e756d626572206f6620636f6e63757272656e7420616374697665206d656d6265727320666f7220746869732067726f757020686173206265656e2065786365656465642e684163746976654d656d626572734c696d69744f766572666c6f770005041501416374697665206d656d626572206c696d6974207761732067726561746572207468616e206d6178696d756d20636f6d6d6974746565206d656d62657273206c696d69742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ecd080c4070616c6c65745f636f6d6d69747465651870616c6c6574144572726f72080454000449000124344475706c6963617465566f7465000004804475706c696361746520766f74657320617265206e6f7420616c6c6f7765642e284e6f74414d656d6265720001088841204449442069736e27742070617274206f662074686520636f6d6d69747465652ed454686520444944206d61792065697468657220626520612063616c6c6572206f7220736f6d65206f7468657220636f6e746578742e384e6f5375636850726f706f73616c000204444e6f20737563682070726f706f73616c2e3c50726f706f73616c457870697265640003049050726f706f73616c206578697374732c206275742069742068617320657870697265642e444475706c696361746550726f706f73616c0004044c4475706c69636174652070726f706f73616c2e544d69736d617463686564566f74696e67496e646578000504604d69736d61746368656420766f74696e6720696e6465782e44496e76616c696450726f706f7274696f6e0006049450726f706f7274696f6e206d757374206265206120726174696f6e616c206e756d6265722e3c4669727374566f746552656a65637400070cfc466972737420766f7465206f6e20612070726f706f73616c20637265617465732069742c20736f206974206d75737420626520616e20617070726f76616c2e0101416c6c2070726f706f73616c7320617265206d6f74696f6e7320746f206578656375746520736f6d657468696e6720617320224743206d616a6f72697479222efc546f2072656a65637420652e672e2c2061205049502c2061206d6f74696f6e20746f2072656a6563742073686f756c64206265202a617070726f7665642a2e5450726f706f73616c734c696d697452656163686564000804b44d6178696d756d206e756d626572206f662070726f706f73616c7320686173206265656e20726561636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed1080c3070616c6c65745f67726f75701870616c6c6574144572726f72080454000449000118544f6e6c795072696d6172794b6579416c6c6f776564000004b04f6e6c79207072696d617279206b6579206f6620746865206964656e7469747920697320616c6c6f7765642e3c4475706c69636174654d656d6265720001047c47726f7570206d656d6265722077617320616464656420616c72656164792e304e6f537563684d656d626572000204a443616e27742072656d6f76652061206d656d626572207468617420646f65736e27742065786973742e504c6173744d656d62657243616e6e6f7451756974000304a84c617374206d656d626572206f662074686520636f6d6d69747465652063616e206e6f7420717569742e684163746976654d656d626572734c696d697445786365656465640004045d01546865206c696d697420666f7220746865206e756d626572206f6620636f6e63757272656e7420616374697665206d656d6265727320666f7220746869732067726f757020686173206265656e2065786365656465642e684163746976654d656d626572734c696d69744f766572666c6f770005041501416374697665206d656d626572206c696d6974207761732067726561746572207468616e206d6178696d756d20636f6d6d6974746565206d656d62657273206c696d69742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed50800000408000000d90800000408002800dd0800000408d9080000e1080c4c706f6c796d6573685f7072696d697469766573206d756c74697369674450726f706f73616c566f7465436f756e740000080124617070726f76616c7328010c75363400012872656a656374696f6e7328010c7536340000e5080c4c706f6c796d6573685f7072696d697469766573206d756c74697369673450726f706f73616c537461746504184d6f6d656e740128011018416374697665040114756e74696c050101384f7074696f6e3c4d6f6d656e743e0000004c457865637574696f6e5375636365737366756c0001003c457865637574696f6e4661696c65640002002052656a656374656400030000e908083c70616c6c65745f6d756c74697369671c56657273696f6e0000040008010875380000ed080c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f720404540001683c50726f706f73616c4d697373696e67000004705468652070726f706f73616c20646f6573206e6f742065786973742e344465636f64696e674572726f72000104444d756c746973696720616464726573732e5452657175697265645369676e65727349735a65726f000204d45265717569726564206e756d626572206f66207369676e657273206d7573742062652067726561746572207468656e207a65726f2e284e6f74415369676e6572000304344e6f742061207369676e65722e384e6f537563684d756c7469736967000404444e6f2073756368206d756c74697369672e404e6f74456e6f7567685369676e65727300050835014e6f7420656e6f756768207369676e6572732e2020546865206e756d626572206f66207369676e6572732068617320746f2062652067726561746572207468656e206f7220657175616c20746fd0746865207265717569726564206e756d626572206f66207369676e65727320746f20617070726f76652070726f706f73616c732e344e6f6e63654f766572666c6f770006044441206e6f6e6365206f766572666c6f772e30416c7265616479566f74656400070438416c726561647920766f7465642e38416c7265616479415369676e657200080444416c72656164792061207369676e65722e404964656e746974794e6f7441646d696e000904b84964656e746974792070726f7669646564206973206e6f7420746865206d756c746973696727732061646d696e2e404964656e746974794e6f745061796572000a04b84964656e746974792070726f7669646564206973206e6f7420746865206d756c746973696727732070617965722e404368616e67654e6f74416c6c6f776564000b0425014368616e67696e67206d756c746973696720706172616d6574657273206e6f7420616c6c6f7765642073696e6365206d756c74697369672069732061207072696d617279206b65792e745369676e6572416c72656164794c696e6b6564546f4d756c7469736967000c0411015369676e657220697320616e206163636f756e74206b6579207468617420697320616c7265616479206173736f63696174656420776974682061206d756c74697369672e745369676e6572416c72656164794c696e6b6564546f4964656e74697479000d0415015369676e657220697320616e206163636f756e74206b6579207468617420697320616c7265616479206173736f636961746564207769746820616e206964656e746974792e444e657374696e674e6f74416c6c6f776564000e04c441206d756c74697369672063616e27742062652061207369676e6572206f6620616e6f74686572206d756c74697369672e5c50726f706f73616c416c726561647952656a6563746564000f047450726f706f73616c207761732072656a6563746564206561726c6965723c50726f706f73616c457870697265640010045050726f706f73616c2068617320657870697265645c50726f706f73616c416c726561647945786563757465640011047450726f706f73616c20776173206578656375746564206561726c6965723c4d6178576569676874546f6f4c6f77001204a84d617820776569676874206e6f7420656e6f75676820746f20657865637574652070726f706f73616c2e5c4d756c74697369674d697373696e674964656e746974790013049c4d756c7469736967206973206e6f7420617474616368656420746f20616e206964656e7469747938546f6f4d616e795369676e65727300140494547269656420746f206164642f72656d6f766520746f6f206d616e79207369676e6572732e2c4e6f506179696e674469640015048c4d756c746973696720646f65736e27742068617665206120706179696e67204449442e44496e76616c69644578706972794461746500160474457870697279206d75737420626520696e20746865206675747572652e4c496e76616c69646174656450726f706f73616c001704e45468652070726f706f73616c20686173206265656e20696e76616c6964617465642061667465722061206d756c74697367207570646174652e3441646d696e4e6f74466f756e64001804584d756c746973696720686173206e6f2061646d696e2e50426164417574686f72697a6174696f6e547970650019046d015468652065787472696e736963206578706563746564206120646966666572656e742060417574686f72697a6174696f6e5479706560207468616e2077686174207468652060646174612e617574685f747970652829602069732e045c4d756c7469736967206d6f64756c65206572726f72732ef1080c4470616c6c65745f76616c696461746f7273147479706573645065726d697373696f6e65644964656e7469747950726566730000080138696e74656e6465645f636f756e7410010c75333200013472756e6e696e675f636f756e7410010c7533320000f5080c4470616c6c65745f76616c696461746f72731870616c6c6574144572726f720404540001246453746173684964656e74697479446f65734e6f744578697374000004d456616c696461746f72206f72206e6f6d696e61746f72207374617368206964656e7469747920646f6573206e6f742065786973742e7053746173684964656e746974794e6f745065726d697373696f6e6564000104bc56616c696461746f722773207374617368206964656e74697479206973206e6f74207065726d697373696f6e65642e744964656e746974794973416c72656164795065726d697373696f6e6564000204985065726d697373696f6e65642076616c696461746f7220616c7265616479206578697374732e504964656e7469747949734d697373696e674344440003048c4964656e7469747920686173206e6f7420676f6e65207468726f75676874204344442e98496e74656e646564436f756e744973457863656564696e67436f6e73656e7375734c696d697400040435015768656e2074686520696e74656e646564206e756d626572206f662076616c696461746f727320746f2072756e206973203e3d20322f33206f66206076616c696461746f725f636f756e74602e404964656e746974794e6f74466f756e64000504e44964656e7469747920776173206e6f7420666f756e6420696e20746865207065726d697373696f6e6564206964656e7469747920706f6f6c2e4456616c696461746f724e6f74466f756e64000604a44e6f2076616c696461746f722077617320666f756e6420666f722074686520676976656e206b65792e44436f6d6d697373696f6e546f6f486967680007049c56616c696461746f7220636f6d6d69697373696f6e2069732061626f7665206d6178696d756d2e4c436f6d6d697373696f6e556e6368616e676564000804e84e657720636f6d6d697373696f6e206d75737420626520646966666572656e742066726f6d2070726576696f757320636f6d6d697373696f6e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef908083870616c6c65745f7374616b696e67345374616b696e674c656467657204045400001401147374617368000130543a3a4163636f756e744964000114746f74616cc101013042616c616e63654f663c543e000118616374697665c101013042616c616e63654f663c543e000124756e6c6f636b696e67fd0801f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e00013c636c61696d65645f7265776172647309090194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e0000fd080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010109045300000400050901185665633c543e00000109083870616c6c65745f7374616b696e672c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c7565c101011c42616c616e636500010c657261b1040120457261496e6465780000050900000201090009090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400310601185665633c543e00000d09083870616c6c65745f7374616b696e672c4e6f6d696e6174696f6e7304045400000c011c74617267657473110901ac426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61784e6f6d696e6174696f6e733e0001307375626d69747465645f696e100120457261496e6465780001287375707072657373656439010110626f6f6c000011090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400fc01185665633c543e00001509083870616c6c65745f7374616b696e6734416374697665457261496e666f0000080114696e646578100120457261496e64657800011473746172740501012c4f7074696f6e3c7536343e00001909000004081000001d09083870616c6c65745f7374616b696e673c457261526577617264506f696e747304244163636f756e744964010000080114746f74616c10012c526577617264506f696e74000128696e646976696475616c2109018042547265654d61703c4163636f756e7449642c20526577617264506f696e743e00002109042042547265654d617008044b010004560110000400250900000025090000022909002909000004080010002d090000023109003109083870616c6c65745f7374616b696e6738556e6170706c696564536c61736808244163636f756e74496401001c42616c616e636501180014012476616c696461746f720001244163636f756e74496400010c6f776e18011c42616c616e63650001186f7468657273b10801645665633c284163636f756e7449642c2042616c616e6365293e0001247265706f7274657273fc01385665633c4163636f756e7449643e0001187061796f757418011c42616c616e636500003509000004087901180039090c3870616c6c65745f7374616b696e6720736c617368696e6734536c617368696e675370616e7300001001287370616e5f696e6465781001245370616e496e6465780001286c6173745f7374617274100120457261496e6465780001486c6173745f6e6f6e7a65726f5f736c617368100120457261496e6465780001147072696f72310601345665633c457261496e6465783e00003d090c3870616c6c65745f7374616b696e6720736c617368696e67285370616e5265636f7264041c42616c616e636501180008011c736c617368656418011c42616c616e6365000120706169645f6f757418011c42616c616e636500004109000002450900450900000408103901004909103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144572726f72040454000164344e6f74436f6e74726f6c6c6572000004644e6f74206120636f6e74726f6c6c6572206163636f756e742e204e6f745374617368000104504e6f742061207374617368206163636f756e742e34416c7265616479426f6e64656400020460537461736820697320616c726561647920626f6e6465642e34416c726561647950616972656400030474436f6e74726f6c6c657220697320616c7265616479207061697265642e30456d7074795461726765747300040460546172676574732063616e6e6f7420626520656d7074792e384475706c6963617465496e646578000504404475706c696361746520696e6465782e44496e76616c6964536c617368496e64657800060484536c617368207265636f726420696e646578206f7574206f6620626f756e64732e40496e73756666696369656e74426f6e6400070c590143616e6e6f74206861766520612076616c696461746f72206f72206e6f6d696e61746f7220726f6c652c20776974682076616c7565206c657373207468616e20746865206d696e696d756d20646566696e65642062793d01676f7665726e616e6365202873656520604d696e56616c696461746f72426f6e646020616e6420604d696e4e6f6d696e61746f72426f6e6460292e20496620756e626f6e64696e67206973207468651501696e74656e74696f6e2c20606368696c6c6020666972737420746f2072656d6f7665206f6e65277320726f6c652061732076616c696461746f722f6e6f6d696e61746f722e304e6f4d6f72654368756e6b730008049043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e344e6f556e6c6f636b4368756e6b000904a043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e3046756e646564546172676574000a04c8417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e48496e76616c6964457261546f526577617264000b0458496e76616c69642065726120746f207265776172642e68496e76616c69644e756d6265724f664e6f6d696e6174696f6e73000c0478496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e484e6f74536f72746564416e64556e69717565000d04804974656d7320617265206e6f7420736f7274656420616e6420756e697175652e38416c7265616479436c61696d6564000e0409015265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e54496e636f7272656374486973746f72794465707468000f04c0496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e58496e636f7272656374536c617368696e675370616e73001004b0496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e2042616453746174650011043901496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e38546f6f4d616e795461726765747300120494546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e244261645461726765740013043d0141206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e4043616e6e6f744368696c6c4f74686572001404550154686520757365722068617320656e6f75676820626f6e6420616e6420746875732063616e6e6f74206265206368696c6c656420666f72636566756c6c7920627920616e2065787465726e616c20706572736f6e2e44546f6f4d616e794e6f6d696e61746f72730015084d0154686572652061726520746f6f206d616e79206e6f6d696e61746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e44546f6f4d616e7956616c696461746f7273001608550154686572652061726520746f6f206d616e792076616c696461746f722063616e6469646174657320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865d47374616b696e672073657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e40436f6d6d697373696f6e546f6f4c6f77001704e0436f6d6d697373696f6e20697320746f6f206c6f772e204d757374206265206174206c6561737420604d696e436f6d6d697373696f6e602e2c426f756e644e6f744d657400180458536f6d6520626f756e64206973206e6f74206d65742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4d090c2873705f7374616b696e671c6f6666656e6365384f6666656e636544657461696c7308205265706f727465720100204f6666656e64657201b901000801206f6666656e646572b90101204f6666656e6465720001247265706f7274657273fc01345665633c5265706f727465723e0000510900000408ac30005509000002590900590900000408004906005d09000004086109300061090c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d000065090c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e6909083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e000300006d09083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f7269746965737109016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f726365641d0601244f7074696f6e3c4e3e000071090c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454019d01045300000400990101185665633c543e000075090c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e79090c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401ad010453000004007d0901185665633c543e00007d09000002ad010081090c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144572726f7204045400010828496e76616c69644b6579000004604e6f6e206578697374656e74207075626c6963206b65792e4c4475706c696361746564486561727462656174000104544475706c696361746564206865617274626561742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e85090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012c045300000400a50401185665633c543e000089090c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000047c53656e646572206d75737420626520746865205375646f206163636f756e7404644572726f7220666f7220746865205375646f2070616c6c65748d090c3070616c6c65745f6173736574147479706573485469636b6572526567697374726174696f6e0404540128000801146f776e65728001284964656e746974794964000118657870697279050101244f7074696f6e3c543e000091090c3070616c6c65745f6173736574147479706573605469636b6572526567697374726174696f6e436f6e6669670404540128000801446d61785f7469636b65725f6c656e677468080108753800014c726567697374726174696f6e5f6c656e677468050101244f7074696f6e3c543e000095090c3070616c6c65745f617373657414747970657330417373657444657461696c730000100130746f74616c5f737570706c7918011c42616c616e63650001246f776e65725f6469648001284964656e746974794964000124646976697369626c6539010110626f6f6c00012861737365745f74797065d50101244173736574547970650000990900000408a880009d0900000408a8f90100a10900000408a8fd0100a50900000408a8610200a90900000408a83d0200ad0900000408a8410200b1090000040880a800b5090000040880210100b909083070616c6c65745f61737365741c56657273696f6e0000040008010875380000bd090c3070616c6c65745f61737365741870616c6c6574144572726f720404540001c830556e617574686f72697a65640000046c5468652075736572206973206e6f7420617574686f72697a65642e4c4173736574416c7265616479437265617465640001048c54686520746f6b656e2068617320616c7265616479206265656e20637265617465642e345469636b6572546f6f4c6f6e6700020490546865207469636b6572206c656e677468206973206f76657220746865206c696d69742e545469636b65724e6f74416c7068616e756d6572696300030498546865207469636b657220686173206e6f6e2d616c7068616e756d657269632070617274732e5c5469636b6572416c726561647952656769737465726564000404c4546865207469636b657220697320616c7265616479207265676973746572656420746f20736f6d656f6e6520656c73652e54546f74616c537570706c7941626f76654c696d69740005049054686520746f74616c20737570706c792069732061626f766520746865206c696d69742e2c4e6f537563684173736574000604a84e6f20746f6b656e206173736f63696174656420746f2074686520676976656e2061737365742049442e34416c726561647946726f7a656e0007047054686520746f6b656e20697320616c72656164792066726f7a656e2e284e6f74416e4f776e6572000804984e6f7420616e206f776e6572206f662074686520746f6b656e206f6e20457468657265756d2e3c42616c616e63654f766572666c6f77000904a8416e206f766572666c6f77207768696c652063616c63756c6174696e67207468652062616c616e63652e4c546f74616c537570706c794f766572666c6f77000a04bc416e206f766572666c6f77207768696c652063616c63756c6174696e672074686520746f74616c20737570706c792e48496e76616c69644772616e756c6172697479000b045c416e20696e76616c6964206772616e756c61726974792e244e6f7446726f7a656e000c0464546865206173736574206d7573742062652066726f7a656e2e3c496e76616c69645472616e73666572000d04845472616e736665722076616c69646174696f6e20636865636b206661696c65642e4c496e73756666696369656e7442616c616e6365000e04945468652073656e6465722062616c616e6365206973206e6f742073756666696369656e742e544173736574416c7265616479446976697369626c65000f047c54686520746f6b656e20697320616c726561647920646976697369626c652e60496e76616c6964457468657265756d5369676e617475726500100494416e20696e76616c696420457468657265756d206045636473615369676e6174757265602e645469636b6572526567697374726174696f6e457870697265640011048c526567697374726174696f6e206f66207469636b65722068617320657870697265642e5053656e64657253616d6541735265636569766572001204845472616e736665727320746f2073656c6620617265206e6f7420616c6c6f776564244e6f53756368446f630013048854686520676976656e20446f63756d656e7420646f6573206e6f742065786973742e704d61784c656e6774684f6641737365744e616d654578636565646564001404bc4d6178696d756d206c656e677468206f66206173736574206e616d6520686173206265656e2065786365656465642e8446756e64696e67526f756e644e616d654d61784c656e6774684578636565646564001504ec4d6178696d756d206c656e677468206f66207468652066756e64696e6720726f756e64206e616d6520686173206265656e2065786365656465642e58496e76616c696441737365744964656e7469666965720016048c536f6d65206041737365744964656e746966696572602077617320696e76616c69642e84496e766573746f72556e697175656e657373436c61696d4e6f74416c6c6f776564001704e8496e766573746f7220556e697175656e65737320636c61696d7320617265206e6f7420616c6c6f77656420666f7220746869732061737365742e60496e76616c6964437573746f6d417373657454797065496400180470496e76616c69642060437573746f6d4173736574547970654964602e8841737365744d657461646174614e616d654d61784c656e677468457863656564656400190405014d6178696d756d206c656e677468206f6620746865206173736574206d657461646174612074797065206e616d6520686173206265656e2065786365656465642e8c41737365744d6574616461746156616c75654d61784c656e6774684578636565646564001a04f44d6178696d756d206c656e677468206f6620746865206173736574206d657461646174612076616c756520686173206265656e2065786365656465642e9441737365744d65746164617461547970654465664d61784c656e6774684578636565646564001b041d014d6178696d756d206c656e677468206f6620746865206173736574206d65746164617461207479706520646566696e6974696f6e20686173206265656e2065786365656465642e6441737365744d657461646174614b657949734d697373696e67001c04784173736574204d65746164617461206b6579206973206d697373696e672e6841737365744d6574616461746156616c756549734c6f636b6564001d047c4173736574204d657461646174612076616c7565206973206c6f636b65642e8841737365744d657461646174614c6f63616c4b6579416c7265616479457869737473001e04cc4173736574204d65746164617461204c6f63616c207479706520616c72656164792065786973747320666f722061737365742e8c41737365744d65746164617461476c6f62616c4b6579416c7265616479457869737473001f04a84173736574204d6574616461746120476c6f62616c207479706520616c7265616479206578697374732e5c5469636b65724669727374427974654e6f7456616c6964002004c85469636b6572732073686f756c642073746172742077697468206174206c65617374206f6e652076616c696420627974652e68556e65787065637465644e6f6e46756e6769626c65546f6b656e0021042101417474656d707420746f2063616c6c20616e2065787472696e7369632074686174206973206f6e6c79207065726d697474656420666f722066756e6769626c6520746f6b656e732e6c496e636f6d70617469626c654173736574547970655570646174650022047d01417474656d707420746f20757064617465207468652074797065206f662061206e6f6e2066756e6769626c6520746f6b656e20746f20612066756e6769626c6520746f6b656e206f7220746865206f74686572207761792061726f756e642e9841737365744d657461646174614b657942656c6f6e6773546f4e4654436f6c6c656374696f6e002304f4417474656d707420746f2064656c6574652061206b65792074686174206973206e656564656420666f7220616e204e465420636f6c6c656374696f6e2e6441737365744d6574616461746156616c75654973456d707479002404bc417474656d707420746f206c6f636b2061206d657461646174612076616c7565207468617420697320656d7074792e784e756d6265724f6641737365744d65646961746f72734578636565646564002504ec4e756d626572206f66206173736574206d65646961746f727320776f756c642065786365656420746865206d6178696d756d20616c6c6f7765642e58496e76616c69645469636b65724368617261637465720026041d01496e76616c6964207469636b657220636861726163746572202d2076616c6964207365743a2041602e2e605a60206030602e2e60396020605f6020602d6020602e6020602f602e68496e76616c69645472616e7366657246726f7a656e4173736574002704bc4661696c656420746f207472616e7366657220746865206173736574202d2061737365742069732066726f7a656e2e80496e76616c69645472616e73666572436f6d706c69616e63654661696c757265002804b84661696c656420746f207472616e7366657220616e204e4654202d20636f6d706c69616e6365206661696c65642e84496e76616c69645472616e73666572496e76616c69645265636569766572434444002904e44661696c656420746f207472616e7366657220746865206173736574202d20726563656976657220636464206973206e6f742076616c69642e7c496e76616c69645472616e73666572496e76616c696453656e646572434444002a04dc4661696c656420746f207472616e7366657220746865206173736574202d2073656e64657220636464206973206e6f742076616c69642e685469636b6572526567697374726174696f6e4e6f74466f756e64002b04fc546865207469636b657220726567697374726174696f6e206173736f63696174656420746f20746865207469636b657220776173206e6f7420666f756e642e785469636b65724973416c72656164794c696e6b6564546f416e4173736574002c04bc54686520676976656e207469636b657220697320616c7265616479206c696e6b656420746f20616e2061737365742e584173736574496447656e65726174696f6e4572726f72002d04cc416e20756e6578706563746564206572726f72207768656e2067656e65726174696e672061206e65772061737365742049442e6c5469636b65724e6f7452656769737465726564546f43616c6c6572002e04a0546865207469636b657220646f65736e27742062656c6f6e6720746f207468652063616c6c65722e7441737365744973416c72656164794c696e6b6564546f415469636b6572002f04b854686520676976656e20617373657420697320616c7265616479206c696e6b656420746f2061207469636b65722e6c5469636b657249734e6f744c696e6b6564546f5468654173736574003004c854686520676976656e207469636b6572206973206e6f74206c696e6b656420746f2074686520676976656e2061737365742e50426164417574686f72697a6174696f6e547970650031046d015468652065787472696e736963206578706563746564206120646966666572656e742060417574686f72697a6174696f6e5479706560207468616e2077686174207468652060646174612e617574685f747970652829602069732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec1090000040881028000c5090c6070616c6c65745f636f72706f726174655f616374696f6e7330646973747269627574696f6e1c56657273696f6e0000040008010875380000c909106070616c6c65745f636f72706f726174655f616374696f6e7330646973747269627574696f6e1870616c6c6574144572726f7204045400013c3043414e6f7442656e65666974000004d441206361706974616c20646973747269627574696f6e20776173206d61646520666f722061206e6f6e2d62656e656669742043412e34416c7265616479457869737473000104a84120646973747269627574696f6e20616c72656164792065786973747320666f7220746869732043412e4c4578706972794265666f72655061796d656e7400020829014120646973747269627574696f6e732070726f766964656420657870697279206461746520776173207374726963746c79206265666f726520697473207061796d656e7420646174652e2101496e206f7468657220776f7264732c2065766572797468696e6720746f206469737472696275746520776f756c6420696d6d6564696174656c7920626520666f726665697465642e44486f6c646572416c726561647950616964000304d454686520746f6b656e20686f6c6465722068617320616c7265616479206265656e20706169642074686569722062656e656669742e484e6f53756368446973747269627574696f6e000404c441206361706974616c20646973747269627574696f6e20646f65736e277420657869737420666f7220746869732043412e5843616e6e6f74436c61696d4265666f726553746172740005046101446973747269627574696f6e20616c6c6f746d656e742063616e6e6f7420626520636c61696d6564206173207468652063757272656e742074696d65206973206265666f72652073746172742d6f662d7061796d656e742e5843616e6e6f74436c61696d41667465724578706972790006046901446973747269627574696f6e27732065787069727920686173207061737365642e204449442063616e6e6f7420636c61696d20616e796d6f726520616e642068617320666f72666569746564207468652062656e65666974732e8042616c616e6365506572536861726550726f647563744f766572666c6f77656400070429014d756c7469706c69636174696f6e206f66207468652062616c616e636520776974682074686520706572207368617265207061796f757420616d6f756e74206f766572666c6f7765642e584e6f74446973747269627574696f6e43726561746f72000804c0444944206973206e6f7420746865206f6e652077686f20637265617465642074686520646973747269627574696f6e2e40416c72656164795265636c61696d6564000904d44449442077686f20637265617465642074686520646973747269627574696f6e20616c726561647920646964207265636c61696d2e284e6f7445787069726564000a04f0446973747269627574696f6e20686164206e6f742065787069726564207965742c206f722074686572652773206e6f2065787069727920646174652e4c446973747269627574696f6e53746172746564000b0401014120646973747269627574696f6e20686173206265656e206163746976617465642c20617320607061796d656e745f6174203c3d206e6f776020686f6c64732e6c496e73756666696369656e7452656d61696e696e67416d6f756e74000c042d014120646973747269627574696f6e2068617320696e73756666696369656e742072656d61696e696e6720616d6f756e74206f662063757272656e637920746f20646973747269627574652e60446973747269627574696f6e416d6f756e7449735a65726f000d0494446973747269627574696f6e2060616d6f756e74602063616e6e6f74206265207a65726f2e68446973747269627574696f6e506572536861726549735a65726f000e04a0446973747269627574696f6e20607065725f7368617265602063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ecd0900000408a8950200d10900000408cd098000d509000002950200d9091064706f6c796d6573685f636f6d6d6f6e5f7574696c69746965731874726169747328636865636b706f696e743c4e657874436865636b706f696e747300000c011c6e6578745f61742801184d6f6d656e74000134746f74616c5f70656e64696e6728010c7536340001247363686564756c6573dd09017042547265654d61703c5363686564756c6549642c204d6f6d656e743e0000dd09042042547265654d617008044b01990204560128000400e109000000e109000002e50900e5090000040899022800e90900000408a8990200ed090c3070616c6c65745f617373657428636865636b706f696e741c56657273696f6e0000040008010875380000f109103070616c6c65745f617373657428636865636b706f696e741870616c6c6574144572726f72040454000118384e6f537563685363686564756c65000004cc4120636865636b706f696e74207363686564756c6520646f6573206e6f7420657869737420666f72207468652061737365742e505363686564756c654e6f7452656d6f7661626c650001041d014120636865636b706f696e74207363686564756c65206973206e6f742072656d6f7661626c6520617320607265665f636f756e74287363686564756c655f696429203e2030602e685363686564756c65734f7665724d6178436f6d706c65786974790002042501546865206e6577207363686564756c6520776f756c642070757420746865206173736574206f76657220746865206d6178696d756d20636f6d706c657869747920616c6c6f7765642e3c5363686564756c654973456d7074790003047c43616e27742063726561746520616e20656d707479207363686564756c652e405363686564756c6546696e697368656400040494546865207363686564756c6520686173206e6f206d6f726520636865636b706f696e74732e745363686564756c6548617345787069726564436865636b706f696e747300050494546865207363686564756c6520686173206578706972656420636865636b706f696e74732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef5090c4c706f6c796d6573685f7072696d69746976657348636f6d706c69616e63655f6d616e616765723c4173736574436f6d706c69616e6365000008011870617573656439010110626f6f6c000130726571756972656d656e7473d90201685665633c436f6d706c69616e6365526571756972656d656e743e0000f909086470616c6c65745f636f6d706c69616e63655f6d616e616765721c56657273696f6e0000040008010875380000fd090c6470616c6c65745f636f6d706c69616e63655f6d616e616765721870616c6c6574144572726f7204045400011c30556e617574686f72697a65640000045c55736572206973206e6f7420617574686f72697a65642e2c4469644e6f74457869737400010438446964206e6f742065786973742e78496e76616c6964436f6d706c69616e6365526571756972656d656e744964000204a0436f6d706c69616e636520726571756972656d656e7420696420646f65736e27742065786973742e84496e636f72726563744f7065726174696f6e4f6e54727573746564497373756572000304a04973737565722065786973742062757420747279696e6720746f2061646420697420616761696e2e7c4475706c6963617465436f6d706c69616e6365526571756972656d656e7473000404b0546865726520617265206475706c696361746520636f6d706c69616e636520726571756972656d656e74732e7c436f6d706c69616e6365526571756972656d656e74546f6f436f6d706c6578000504150154686520776f7273742063617365207363656e6172696f206f662074686520636f6d706c69616e636520726571756972656d656e7420697320746f6f20636f6d706c65782e4c5765696768744c696d697445786365656465640006040501546865206d6178696d756d20776569676874206c696d697420666f7220657865637574696e67207468652066756e6374696f6e207761732065786365656465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e010a00000408a8850200050a086070616c6c65745f636f72706f726174655f616374696f6e731c56657273696f6e0000040008010875380000090a0c6070616c6c65745f636f72706f726174655f616374696f6e731870616c6c6574144572726f7204045400012c3844657461696c73546f6f4c6f6e67000004d8546865206064657461696c7360206f66206120434120657863656564656420746865206d617820616c6c6f776564206c656e6774682e3c4475706c69636174654469645461780001082101412077697468686f6c64696e6720746178206f7665727269646520666f72206120676976656e204449442077617320737065636966696564206d6f7265207468616e206f6e63652e050154686520636861696e207265667573656420746f206d616b6520612063686f6963652c20616e642068656e63652074686572652077617320616e206572726f722e3c546f6f4d616e794469645461786573000204c8546f6f206d616e792077697468686f6c64696e6720746178206f76657272696465732077657265207370656369666965642e40546f6f4d616e79546172676574496473000304e4546f6f206d616e79206964656e74697469657320696e20605461726765744964656e746974696573602077657265207370656369666965642e484e6f53756368436865636b706f696e74496400040405014f6e204341206372656174696f6e2c206120636865636b706f696e74204944207761732070726f766964656420776869636820646f65736e27742065786973742e204e6f537563684341000504a44120434120776974682074686520676976656e2060434149646020646964206e6f742065786973742e304e6f5265636f7264446174650006048854686520434120646964206e6f7420686176652061207265636f726420646174652e505265636f7264446174654166746572537461727400070cdc412043412773207265636f7264206461746520776173207374726963746c792061667465722074686520227374617274222074696d652c8c7768657265202273746172742220697320636f6e7465787420646570656e64656e742e8101466f72206578616d706c652c20697420636f756c6420626520746865207374617274206f6620612062616c6c6f742c206f72207468652073746172742d6f662d7061796d656e7420696e206361706974616c20646973747269627574696f6e2e5c4465636c4461746541667465725265636f726444617465000804ec412043412773206465636c61726174696f6e206461746520776173207374726963746c7920616674657220697473207265636f726420646174652e404465636c44617465496e467574757265000904b4412043412773206465636c61726174696f6e2064617465206f636375727320696e20746865206675747572652e3c4e6f74546172676574656442794341000a046c434120646f6573206e6f742074617267657420746865204449442e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e0d0a000002450300110a0000021800150a0c6070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f741c56657273696f6e0000040008010875380000190a106070616c6c65745f636f72706f726174655f616374696f6e731862616c6c6f741870616c6c6574144572726f720404540001382c43414e6f744e6f74696365000004e04120636f72706f726174652062616c6c6f7420776173206d61646520666f722061206e6f6e20604973737565724e6f74696365602043412e34416c7265616479457869737473000104b84120636f72706f726174652062616c6c6f7420616c72656164792065786973747320666f7220746869732043412e304e6f5375636842616c6c6f74000204b44120636f72706f726174652062616c6c6f7420646f65736e277420657869737420666f7220746869732043412e3453746172744166746572456e6400030411014120636f72706f726174652062616c6c6f7427732073746172742074696d6520776173207374726963746c79206166746572207468652062616c6c6f74277320656e642e2c4e6f774166746572456e640004040d014120636f72706f726174652062616c6c6f74277320656e642074696d6520776173207374726963746c79206265666f7265207468652063757272656e742074696d652e5c4e756d6265724f6643686f696365734f766572666c6f770005043901496620736f6d65206d6f74696f6e20696e206120636f72706f726174652062616c6c6f7420686173206d6f72652063686f69636573207468616e20776f756c642066697420696e2060753136602e50566f74696e67416c7265616479537461727465640006040101566f74696e67207374617274656420616c72656164792e20416d656e64696e6720612062616c6c6f74206973206e6f206c6f6e67657220706f737369626c652e40566f74696e674e6f745374617274656400070468566f74696e67206861736e27742073746172746564207965742e48566f74696e67416c7265616479456e64656400080454566f74696e6720656e64656420616c72656164792e3857726f6e67566f7465436f756e74000904150150726f7669646564206c697374206f662062616c616e63657320646f6573206e6f74206d617463682074686520746f74616c206e756d626572206f662063686f696365732e44496e73756666696369656e74566f746573000a043d01566f74696e6720706f7765722075736564206279206120444944206f6e2061206d6f74696f6e2065786365656473207468617420776869636820697320617661696c61626c6520746f207468656d2e444e6f5375636852435646616c6c6261636b000b04bc546865205243562066616c6c6261636b206f6620736f6d652063686f69636520646f6573206e6f742065786973742e3052435653656c664379636c65000c04b4546865205243562066616c6c6261636b20706f696e747320746f20746865206f726967696e2063686f6963652e345243564e6f74416c6c6f776564000d048c524356206973206e6f7420616c6c6f77656420666f7220746869732062616c6c6f742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1d0a0c4870616c6c65745f7065726d697373696f6e731870616c6c6574144572726f7204045400010448556e617574686f72697a656443616c6c6572000004ec5468652063616c6c6572206973206e6f7420617574686f72697a656420746f2063616c6c207468652063757272656e742065787472696e7369632e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e210a0c2c70616c6c65745f7069707314747970657330506970734d65746164617461042c426c6f636b4e756d626572011000180108696455030114506970496400010c75726c4902012c4f7074696f6e3c55726c3e00012c6465736372697074696f6e590301584f7074696f6e3c5069704465736372697074696f6e3e000128637265617465645f617410012c426c6f636b4e756d62657200014c7472616e73616374696f6e5f76657273696f6e10010c7533320001186578706972795101015c4d61796265426c6f636b3c426c6f636b4e756d6265723e0000250a0000040855030000290a0c2c70616c6c65745f706970731474797065732c4465706f736974496e666f04244163636f756e7449640100000801146f776e65720001244163636f756e744964000118616d6f756e7418011c42616c616e636500002d0a0c2c70616c6c65745f706970731474797065730c506970082050726f706f73616c01f505244163636f756e7449640100000c0108696455030114506970496400012070726f706f73616cf505012050726f706f73616c00012070726f706f7365724d03014c50726f706f7365723c4163636f756e7449643e0000310a0c2c70616c6c65745f7069707314747970657330566f74696e67526573756c740000100128617965735f636f756e7410010c753332000128617965735f7374616b6518011c42616c616e63650001286e6179735f636f756e7410010c7533320001286e6179735f7374616b6518011c42616c616e63650000350a0c2c70616c6c65745f7069707314747970657310566f74650000080039010110626f6f6c000018011c42616c616e63650000390a0c2c70616c6c65745f7069707314747970657340536e617073686f744d65746164617461082c426c6f636b4e756d6265720110244163636f756e7449640100000c0128637265617465645f617410012c426c6f636b4e756d62657200011c6d6164655f62790001244163636f756e744964000108696469030128536e617073686f74496400003d0a082c70616c6c65745f706970731c56657273696f6e0000040008010875380000410a0c2c70616c6c65745f706970731870616c6c6574144572726f7204045400014c8452657363686564756c654e6f74427952656c65617365436f6f7264696e61746f7200000431014f6e6c79207468652047432072656c6561736520636f6f7264696e61746f7220697320616c6c6f77656420746f2072657363686564756c652070726f706f73616c20657865637574696f6e2e404e6f7446726f6d436f6d6d756e697479000108ec54686520676976656e20646973706174636861626c652063616c6c206973206e6f742076616c696420666f7220746869732070726f706f73616c2ecc5468652070726f706f73616c206d7573742062652066726f6d2074686520636f6d6d756e6974792c206275742069736e27742e384e6f744279436f6d6d6974746565000208ec54686520676976656e20646973706174636861626c652063616c6c206973206e6f742076616c696420666f7220746869732070726f706f73616c2ec45468652070726f706f73616c206d7573742062652066726f6d206120636f6d6d69747465652c206275742069736e27742e44546f6f4d616e794163746976655069707300030831015468652063757272656e74206e756d626572206f6620616374697665202870656e64696e67206f72207363686564756c6564292050495073206578636565647320746865206d6178696d756d9c616e64207468652070726f706f73616c206973206e6f74206279206120636f6d6d69747465652e40496e636f72726563744465706f736974000404bc50726f706f7365722073706563696669657320616e20696e636f7272656374206465706f73697420616d6f756e742e4c496e73756666696369656e744465706f736974000504cc50726f706f7365722063616e6e6f74206166666f726420746f206c6f636b20746865206d696e696d756d206465706f7369742e384e6f5375636850726f706f73616c000604705468652070726f706f73616c20646f6573206e6f742065786973742e4c4e6f7441436f6d6d69747465654d656d626572000704dc5468652063616c6c6572206973206e6f742061206d656d626572206f662074686520676f7665726e616e636520636f6d6d69747465652e60496e76616c6964467574757265426c6f636b4e756d62657200080405015468652073706563696669656420626c6f636b206e756d626572206973206c657373207468616e207468652063757272656e7420626c6f636b206e756d6265722e544e756d6265724f66566f7465734578636565646564000904b8546865206e756d626572206f6620766f74657320657863656564732074686520616c6c6f776564206c696d69742e685374616b65416d6f756e744f66566f7465734578636565646564000a04d4546865207374616b6520616d6f756e74206f66206120766f746520657863656564732074686520616c6c6f776564206c696d69742e584d697373696e6743757272656e744964656e74697479000b046c5468652063757272656e7420444944206973206d697373696e672e58496e636f727265637450726f706f73616c5374617465000c0415015468652070726f706f73616c206973206e6f7420696e2074686520636f727265637420737461746520666f722074686520726571756573746564206f7065726174696f6e2e3443616e6e6f74536b6970506970000d04fc5768656e20656e616374696e6720736e617073686f7420726573756c74732c20616e20756e736b69707061626c65205049502077617320736b69707065642e58536e617073686f74526573756c74546f6f4c61726765000e041501547269656420746f20656e61637420726573756c747320666f722074686520736e617073686f74207175657565206f766572666c6f77696e6720697473206c656e6774682e48536e617073686f7449644d69736d61746368000f046901547269656420746f20656e61637420726573756c7420666f7220504950207769746820616e20494420646966666572656e742066726f6d20746861742061742074686520706f736974696f6e20696e207468652071756575652e705363686564756c656450726f706f73616c446f65736e744578697374001004fc457865637574696f6e206f662061207363686564756c65642070726f706f73616c206661696c65642062656361757365206974206973206d697373696e672e6c50726f706f73616c4e6f74496e5363686564756c65645374617465001104fc412070726f706f73616c2074686174206973206e6f7420696e2061207363686564756c65642073746174652063616e6e6f742062652065786563757465642e30496e76616c696450697049640012040101496e76616c6964205049502049442e2050697020696420776173206e6f7420657870656374656420746f20626520696e20746865206c6976652071756575652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e450a0000040880f000490a00000408808d03004d0a00000408e8a800510a0000040880e800550a00000408e8590a00590a00000408a8a503005d0a0c4070616c6c65745f706f7274666f6c696f1870616c6c65741c56657273696f6e0000040008010875380000610a0c4070616c6c65745f706f7274666f6c696f1870616c6c6574144572726f7204045400015454506f7274666f6c696f446f65734e6f7445786973740000047054686520706f7274666f6c696f20646f65736e27742065786973742e70496e73756666696369656e74506f7274666f6c696f42616c616e63650001049c496e73756666696369656e742062616c616e636520666f722061207472616e73616374696f6e2e6844657374696e6174696f6e497353616d65506f7274666f6c696f000204e854686520736f7572636520616e642064657374696e6174696f6e20706f7274666f6c696f732073686f756c6420626520646966666572656e742e64506f7274666f6c696f4e616d65416c7265616479496e557365000304310154686520706f7274666f6c696f20636f756c646e27742062652072656e616d65642062656361757365207468652063686f73656e206e616d6520697320616c726561647920696e207573652e945365636f6e646172794b65794e6f74417574686f72697a6564466f72506f7274666f6c696f000404fc546865207365636f6e64617279206b6579206973206e6f7420617574686f72697a656420746f206163636573732074686520706f7274666f6c696f2873292e54556e617574686f72697a6564437573746f6469616e000504f454686520706f72666f6c696f277320637573746f6479206973207769746820736f6d656f6e65206f74686572207468616e207468652063616c6c65722e60496e73756666696369656e74546f6b656e734c6f636b6564000604bc43616e206e6f7420756e6c6f636b206d6f726520746f6b656e73207468616e207768617420617265206c6f636b656444506f7274666f6c696f4e6f74456d707479000704bc54686520706f7274666f6c696f207374696c6c2068617320736f6d652061737365742062616c616e6365206c6566746c446966666572656e744964656e74697479506f7274666f6c696f73000804b454686520706f7274666f6c696f732062656c6f6e6720746f20646966666572656e74206964656e746974696573604e6f4475706c6963617465417373657473416c6c6f776564000904804475706c696361746520617373657420616d6f6e6720746865206974656d732e584e46544e6f74466f756e64496e506f7274666f6c696f000a04a0546865204e465420646f6573206e6f7420657869737420696e2074686520706f7274666f6c696f2e404e4654416c72656164794c6f636b6564000b0468546865204e465420697320616c7265616479206c6f636b65642e304e46544e6f744c6f636b6564000c0478546865204e465420686173206e65766572206265656e206c6f636b65642e68496e76616c69645472616e736665724e46544e6f744f776e6564000d04c04f6e6c79206f776e6564204e4654732063616e206265206d6f766564206265747765656e20706f7274666f6c696f732e68496e76616c69645472616e736665724e465449734c6f636b6564000e04c04c6f636b6564204e4654732063616e206e6f74206265206d6f766564206265747765656e20706f7274666f6c696f732e34456d7074795472616e73666572000f04a0547279696e6720746f206d6f766520616e20616d6f756e74206f66207a65726f206173736574732e5c4d697373696e674f776e6572735065726d697373696f6e00100439015468652063616c6c657220646f65736e27742068617665207065726d697373696f6e20746f2063726561746520706f7274666f6c696f73206f6e20746865206f776e6572277320626568616c662ea0496e76616c69645472616e7366657253656e64657249644d61746368657352656365697665724964001104fc5468652073656e646572206964656e746974792063616e2774206265207468652073616d6520617320746865207265636569766572206964656e746974792e5853656c664164646974696f6e4e6f74416c6c6f776564001204d8416464696e6720697473656c6620617320616e20416c6c6f776564437573746f6469616e206973206e6f74207065726d69747465642e50426164417574686f72697a6174696f6e547970650013046d015468652065787472696e736963206578706563746564206120646966666572656e742060417574686f72697a6174696f6e5479706560207468616e2077686174207468652060646174612e617574685f747970652829602069732e9444656661756c74506f7274666f6c696f7343616e6e6f7448617665437573746f6469616e73001404a844656661756c7420706f7274666f6c696f732063616e6e6f74206861766520637573746f6469616e732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e650a0c4c70616c6c65745f70726f746f636f6c5f6665651870616c6c6574144572726f7204045400010c68496e73756666696369656e744163636f756e7442616c616e6365000004b0496e73756666696369656e74206163636f756e742062616c616e636520746f2070617920746865206665652e4c556e48616e646c6564496d62616c616e636573000104884e6f742061626c6520746f2068616e646c65642074686520696d62616c616e63657368496e73756666696369656e745375627369647942616c616e6365000204b0496e73756666696369656e7420737562736964792062616c616e636520746f2070617920746865206665652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e690a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016d0a0453000004007d0a01185665633c543e00006d0a04184f7074696f6e04045401710a0108104e6f6e6500000010536f6d650400710a0000010000710a084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01750a2c426c6f636b4e756d62657201103450616c6c6574734f726967696e016107244163636f756e7449640100001401206d617962655f6964b90301304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c750a011043616c6c0001386d617962655f706572696f646963f10601944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e6107013450616c6c6574734f726967696e0000750a10346672616d655f737570706f72741874726169747324707265696d616765731c426f756e64656404045401f505010c184c6567616379040110686173682c01104861736800000018496e6c696e650400790a0134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173682c01104861736800010c6c656e10010c75333200020000790a0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00007d0a0000026d0a00810a0c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e850a0c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e741456656e7565000008011c63726561746f728001284964656e74697479496400012876656e75655f74797065c903012456656e7565547970650000890a00000408c1037102008d0a00000408c1030000910a0000040880c10300950a0c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e742c496e737472756374696f6e08184d6f6d656e7401282c426c6f636b4e756d626572011000180138696e737472756374696f6e5f696471020134496e737472756374696f6e496400012076656e75655f6964dd03013c4f7074696f6e3c56656e756549643e00013c736574746c656d656e745f74797065e103016c536574746c656d656e74547970653c426c6f636b4e756d6265723e000128637265617465645f6174050101384f7074696f6e3c4d6f6d656e743e00012874726164655f64617465050101384f7074696f6e3c4d6f6d656e743e00012876616c75655f64617465050101384f7074696f6e3c4d6f6d656e743e0000990a000004087102cd03009d0a0c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e74244c656753746174757304244163636f756e7449640100010c4050656e64696e67546f6b656e4c6f636b00000040457865637574696f6e50656e64696e6700010050457865637574696f6e546f4265536b697070656408000001244163636f756e744964000028010c75363400020000a10a000004087102e800a50a0c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e744441666669726d6174696f6e53746174757300010c1c556e6b6e6f776e0000001c50656e64696e670001002041666669726d656400020000a90a00000408e8710200ad0a00000408a8c10300b10a0c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e7444496e737472756374696f6e537461747573042c426c6f636b4e756d626572011001181c556e6b6e6f776e0000001c50656e64696e67000100184661696c65640002001c53756363657373040010012c426c6f636b4e756d6265720003002052656a6563746564040010012c426c6f636b4e756d626572000400484c6f636b6564466f72457865637574696f6e00050000b50a0000040871028000b90a0c4c706f6c796d6573685f7072696d69746976657328736574746c656d656e74644d65646961746f7241666669726d6174696f6e5374617475730404540128010c1c556e6b6e6f776e0000001c50656e64696e670001002041666669726d6564040118657870697279050101244f7074696f6e3c543e00020000bd0a0c4470616c6c65745f736574746c656d656e741870616c6c65741c56657273696f6e0000040008010875380000c10a0c4470616c6c65745f736574746c656d656e741870616c6c6574144572726f720404540001c430496e76616c696456656e75650000045456656e756520646f6573206e6f742065786973742e30556e617574686f72697a6564000104a853656e64657220646f6573206e6f742068617665207265717569726564207065726d697373696f6e732e58496e737472756374696f6e4e6f7441666669726d656400020488496e737472756374696f6e20686173206e6f74206265656e2061666669726d65642e48556e617574686f72697a65645369676e6572000304985369676e6572206973206e6f7420617574686f72697a6564206279207468652076656e75652e5452656365697074416c7265616479436c61696d6564000404545265636569707420616c726561647920757365642e44556e617574686f72697a656456656e7565000504a456656e756520646f6573206e6f742068617665207265717569726564207065726d697373696f6e732e5c496e737472756374696f6e4461746573496e76616c696400060474496e737472756374696f6e2068617320696e76616c696420646174657370496e737472756374696f6e536574746c65426c6f636b506173736564000704a8496e737472756374696f6e27732074617267657420736574746c6520626c6f636b20726561636865642e40496e76616c69645369676e6174757265000804784f6666636861696e207369676e617475726520697320696e76616c69642e4853616d6553656e64657252656365697665720009048453656e64657220616e6420726563656976657220617265207468652073616d652e44536574746c654f6e50617374426c6f636b000a0461015468652070726f766964656420736574746c656d656e7420626c6f636b206e756d62657220697320696e20746865207061737420616e642063616e6e6f74206265207573656420627920746865207363686564756c65722e6c556e657870656374656441666669726d6174696f6e537461747573000b0445015468652063757272656e7420696e737472756374696f6e2061666669726d6174696f6e2073746174757320646f6573206e6f7420737570706f7274207468652072657175657374656420616374696f6e2e404661696c6564546f5363686564756c65000c048c5363686564756c696e67206f6620616e20696e737472756374696f6e206661696c732e48556e6b6e6f776e496e737472756374696f6e000d0474496e737472756374696f6e2073746174757320697320756e6b6e6f776e4c5369676e6572416c7265616479457869737473000e04845369676e657220697320616c726561647920616464656420746f2076656e75652e485369676e6572446f65734e6f744578697374000f04745369676e6572206973206e6f7420616464656420746f2076656e75652e285a65726f416d6f756e7400100494496e737472756374696f6e206c656720616d6f756e742063616e2774206265207a65726f2e80496e737472756374696f6e536574746c65426c6f636b4e6f7452656163686564001104d8496e737472756374696f6e20736574746c656d656e7420626c6f636b20686173206e6f7420796574206265656e20726561636865642e4443616c6c657249734e6f74415061727479001204b85468652063616c6c6572206973206e6f742061207061727479206f66207468697320696e737472756374696f6e2e5c4d61784e756d6265724f664e46547345786365656465640013041501546865206e756d626572206f66206e667473206265696e67207472616e7366657272656420696e2074686520696e737472756374696f6e207761732065786365656465642e944e756d6265724f665472616e736665727265644e465473556e646572657374696d61746564001404f854686520676976656e206e756d626572206f66206e667473206265696e67207472616e736665727265642077617320756e646572657374696d617465642e6052656365697074466f72496e76616c69644c656754797065001504ec4f66662d636861696e2072656365697074732063616e206f6e6c79206265207573656420666f72206f66662d636861696e206c656720747970652e4c5765696768744c696d697445786365656465640016040501546865206d6178696d756d20776569676874206c696d697420666f7220657865637574696e67207468652066756e6374696f6e207761732065786365656465642e844d61784e756d6265724f6646756e6769626c654173736574734578636565646564001704cc546865206d6178696d756d206e756d626572206f662066756e6769626c6520617373657473207761732065786365656465642e844d61784e756d6265724f664f6666436861696e4173736574734578636565646564001804d0546865206d6178696d756d206e756d626572206f66206f66662d636861696e20617373657473207761732065786365656465642e9c4e756d6265724f6646756e6769626c655472616e7366657273556e646572657374696d61746564001904e854686520676976656e206e756d626572206f662066756e6769626c65207472616e73666572732077617320756e646572657374696d617465642e5c556e65787065637465644f4646436861696e4173736574001a04904173736574496420636f756c64206e6f7420626520666f756e64206f6e20636861696e2e644f6666436861696e417373657443616e7442654c6f636b6564001b04884f66662d436861696e206173736574732063616e6e6f74206265206c6f636b65642e9c4e756d6265724f664f6666436861696e5472616e7366657273556e646572657374696d61746564001c04ec54686520676976656e206e756d626572206f66206f66662d636861696e207472616e73666572732077617320756e646572657374696d617465642e2c4c65674e6f74466f756e64001d04884e6f206c656720776974682074686520676976656e2069642077617320666f756e6470496e70757457656967687449734c6573735468616e4d696e696d756d001e04cc54686520696e70757420776569676874206973206c657373207468616e20746865206d696e696d756d2072657175697265642e6c4d61784e756d6265724f6652656365697074734578636565646564001f04b0546865206d6178696d756d206e756d626572206f66207265636569707473207761732065786365656465642e884e6f74416c6c41666669726d6174696f6e73486176654265656e5265636569766564002004e054686572652061726520706172746965732077686f2068617665206e6f742061666669726d65642074686520696e737472756374696f6e2e90496e76616c6964496e737472756374696f6e537461747573466f72457865637574696f6e00210489014f6e6c79205b60496e737472756374696f6e5374617475733a3a50656e64696e67605d206f72205b60496e737472756374696f6e5374617475733a3a4661696c6564605d20696e737472756374696f6e732063616e2062652065786563757465642e8c4661696c6564546f52656c656173654c6f636b4f725472616e73666572417373657473002204150154686520696e737472756374696f6e206661696c656420746f2072656c65617365206173736574206c6f636b73206f72207472616e7366657220746865206173736574732e4c4475706c696361746552656365697074556964002304d04e6f206475706c6963617465207569642061726520616c6c6f77656420666f7220646966666572656e742072656365697074732e7452656365697074496e737472756374696f6e49644d6973736d61746368002404190154686520696e737472756374696f6e20696420696e20616c6c207265636569707473206d757374206d61746368207468652065787472696e73696320706172616d657465722e644d756c7469706c655265636569707473466f724f6e654c6567002504cc4d756c7469706c6520726563656970747320666f72207468652073616d65206c656720617265206e6f7420616c6c6f7765642e4c556e65787065637465644c656753746174757300260470416e20696e76616c696420686173206265656e20726561636865642e704e756d6265724f6656656e75655369676e6572734578636565646564002704c4546865206d6178696d756d206e756d626572206f662076656e7565207369676e657273207761732065786365656465642e5043616c6c657249734e6f74414d65646961746f72002804c05468652063616c6c6572206973206e6f742061206d65646961746f7220696e2074686520696e737472756374696f6e2e44496e76616c696445787069727944617465002904c4546865206d65646961746f722773206578706972792064617465206d75737420626520696e20746865206675747572652e684d65646961746f7241666669726d6174696f6e45787069726564002a04e854686520657870697279206461746520666f7220746865206d65646961746f7227732061666669726d6174696f6e20686173207061737365642e704f6666436861696e4173736574734d757374486176654156656e7565002b04884f6666636861696e20617373657473206d757374206861766520612076656e75652e60556e6578706563746564536574746c656d656e7454797065002c046c556e657870656374656420736574746c656d656e7420747970652e90496e76616c6964496e737472756374696f6e537461747573466f7252656a656374696f6e002d04c05b60496e737472756374696f6e5374617475733a3a556e6b6e6f77605d2063616e27742062652072656a65637465642e544c6f636b54696d657374616d704e6f74466f756e64002e04dc416c6c206c6f636b656420696e737472756374696f6e73206d7573742072656769737465722061206c6f636b2074696d657374616d702e7045786365656465644d6178696d756d4c6f636b696e67506572696f64002f04c854686520696e737472756374696f6e20686173206265656e206c6f636b656420666f7220746f6f206d7563682074696d652e844661696c656441737365745472616e7366657272696e67436f6e646974696f6e73003004f04e6f7420616c6c20636f6e646974696f6e7320666f72207472616e7366657272696e67207468652061737365742068617665206265656e206d65742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec50a0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401f5030453000004002907012c42547265655365743c543e0000c90a00000408cd0a0d0400cd0a0c4c706f6c796d6573685f7072696d697469766573287374617469737469637328537461743173744b6579000008012061737365745f6964a8011c41737365744964000124737461745f74797065f503012053746174547970650000d10a0c4c706f6c796d6573685f7072696d6974697665734c7472616e736665725f636f6d706c69616e63655c41737365745472616e73666572436f6d706c69616e6365040453000008011870617573656439010110626f6f6c000130726571756972656d656e7473d50a0194426f756e64656442547265655365743c5472616e73666572436f6e646974696f6e2c20533e0000d50a0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540121040453000004003107012c42547265655365743c543e0000d90a0000040825048000dd0a084470616c6c65745f737461746973746963731c56657273696f6e0000040008010875380000e10a0c4470616c6c65745f737461746973746963731870616c6c6574144572726f7204045400011c80496e76616c69645472616e73666572537461746973746963734661696c757265000004d4496e76616c6964207472616e73666572205b605472616e73666572436f6e646974696f6e605d206e6f74207265737065637465642e3c53746174547970654d697373696e67000104605374617454797065206973206e6f7420656e61626c65642e8453746174547970654e656564656442795472616e73666572436f6e646974696f6e000204a05374617454797065206973206e6565646564206279205472616e73666572436f6e646974696f6e2e6443616e6e6f7452656d6f76655374617454797065496e557365000304a84120537461747479706520697320696e2075736520616e642063616e27742062652072656d6f7665642e5053746174547970654c696d697452656163686564000404f4546865206c696d6974206f662053746174547970657320616c6c6f77656420666f7220616e20617373657420686173206265656e20726561636865642e745472616e73666572436f6e646974696f6e4c696d6974526561636865640005041901546865206c696d6974206f66205472616e73666572436f6e646974696f6e7320616c6c6f77656420666f7220616e20617373657420686173206265656e20726561636865642e4c5765696768744c696d697445786365656465640006040501546865206d6178696d756d20776569676874206c696d697420666f7220657865637574696e67207468652066756e6374696f6e207761732065786365656465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee50a00000408a8310400e90a082870616c6c65745f73746f1c56657273696f6e0000040008010875380000ed0a0c2870616c6c65745f73746f1870616c6c6574144572726f7204045400013830556e617574686f72697a6564000004190153656e64657220646f6573206e6f742068617665207265717569726564207065726d697373696f6e7320666f722074686520726571756573746564206f7065726174696f6e2e204f766572666c6f77000104e8416e2061726974686d65746963206f7065726174696f6e20726573756c74656420696e206f766572666c6f77206f7220756e646572666c6f772e6c496e73756666696369656e74546f6b656e7352656d61696e696e6700020439015468652066756e6472616973657220646f6573206e6f74206861766520656e6f75676820746f6b656e732072656d61696e696e6720746f2066756c66696c2074686520696e766573746d656e742e4846756e647261697365724e6f74466f756e64000304f0546865207370656369666965642066756e6472616973657220646f6573206e6f7420657869737420666f722074686520676976656e2061737365742e4446756e647261697365724e6f744c69766500040405015468652066756e64726169736572206973206e6f7420696e2061206c69766520737461746520286569746865722066726f7a656e206f722073746f70706564292e4046756e64726169736572436c6f736564000504d85468652066756e6472616973657220686173206265656e207065726d616e656e746c7920636c6f736564206f722073746f707065642e4446756e64726169736572457870697265640006041d01417474656d7074696e6720746f20696e746572616374207769746820612066756e647261697365722061667465722069747320656e642074696d6520686173207061737365642e30496e76616c696456656e756500070435015468652070726f76696465642076656e756520697320696e76616c69642028646f6573206e6f742065786973742c2077726f6e6720747970652c206f722077726f6e672063726561746f72292e44496e76616c6964507269636554696572730008044d014f6e65206f72206d6f7265207072696365207469657273206861766520696e76616c696420706172616d657465727320287a65726f20746f74616c2c20746f6f206d616e792074696572732c206574632e292e54496e76616c69644f66666572696e6757696e646f7700090439015468652066756e647261697365722074696d652077696e646f772068617320696e76616c696420706172616d6574657273202873746172742074696d6520616674657220656e642074696d65292e404d617850726963654578636565646564000a044d015468652063616c63756c617465642070726963652070657220746f6b656e206578636565647320746865206d6178696d756d207072696365207370656369666965642062792074686520696e766573746f722e58496e766573746d656e74416d6f756e74546f6f4c6f77000b04510154686520696e766573746d656e7420616d6f756e742069732062656c6f7720746865206d696e696d756d20696e766573746d656e74207468726573686f6c6420666f7220746869732066756e647261697365722e40496e76616c69645369676e6174757265000c041101546865206f66662d636861696e2072656365697074207369676e617475726520697320696e76616c6964206f7220636f756c64206e6f742062652076657269666965642e644f6666636861696e46756e64696e674e6f74416c6c6f776564000d04ec4f66662d636861696e2066756e64696e6720686173206e6f74206265656e20656e61626c656420666f7220746869732066756e647261697365722e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef10a0c3c70616c6c65745f74726561737572791870616c6c6574144572726f720404540001084c496e73756666696369656e7442616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e3c496e76616c69644964656e7469747900010488496e76616c6964206964656e7469747920666f722064697362757273656d656e742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef50a0c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400011430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e40496e76616c69645369676e6174757265000108744f6666636861696e207369676e617475726520697320696e76616c696438504f4c594d455348206572726f72405461726765744364644d697373696e670002088054617267657420646f6573206e6f74206861766520612076616c69642043444438504f4c594d455348206572726f7230496e76616c69644e6f6e63650003106850726f7669646564206e6f6e63652077617320696e76616c696411014966207468652070726f7669646564206e6f6e6365203c2063757272656e74206e6f6e63652c207468652063616c6c2077617320616c72656164792065786563757465645d014966207468652070726f7669646564206e6f6e6365203e2063757272656e74206e6f6e63652c207468652063616c6c287329206265666f7265207468652063757272656e74206661696c656420746f206578656375746538504f4c594d455348206572726f725c556e61626c65546f4465726976654163636f756e744964000404984465636f64696e672064657269766174697665206163636f756e74204964206661696c65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef90a0c2c70616c6c65745f626173651870616c6c6574144572726f720404540001081c546f6f4c6f6e6700000880457863656564656420612067656e65726963206c656e677468206c696d69742e1d01546865206c696d697420636f756c6420626520666f7220616e7920736f7274206f66206c69737473206f66207468696e67732c20696e636c7564696e67206120737472696e672e3c436f756e7465724f766572666c6f77000118b85468652073657175656e636520636f756e74657220666f7220736f6d657468696e67206f766572666c6f7765642e001d015768656e20746869732068617070656e7320646570656e6473206f6e20652e672e2c20746865206361706163697479206f6620746865206964656e74696669657220747970652e3901466f72206578616d706c652c207765206d69676874206861766520607075622073747275637420506970496428753332293b602c207769746820607533323a3a4d4158602063617061636974792e5901496e2070726163746963652c207468657365206572726f72732077696c6c206e657665722068617070656e20627574206e6f20636f646520706174682073686f756c6420726573756c7420696e20612070616e69632cfc736f20746865736520636f726e6572206361736573206e65656420746f20626520636f7665726564207769746820616e206572726f722076617269616e742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd0a00000408a8350100010b0c5870616c6c65745f65787465726e616c5f6167656e74731870616c6c65741c56657273696f6e0000040008010875380000050b0c5870616c6c65745f65787465726e616c5f6167656e74731870616c6c6574144572726f7204045400011c204e6f537563684147000004f0416e20414720776974682074686520676976656e2060414749646020646964206e6f7420657869737420666f7220746865206041737365744964602e44556e617574686f72697a65644167656e74000104e8546865206167656e74206973206e6f7420617574686f72697a656420746f2063616c6c207468652063757272656e742065787472696e7369632e38416c7265616479416e4167656e74000204ec5468652070726f766964656420606167656e746020697320616c726561647920616e206167656e7420666f7220746865206041737365744964602e284e6f74416e4167656e74000304dc5468652070726f766964656420606167656e7460206973206e6f7420616e206167656e7420666f7220746865206041737365744964602e5452656d6f76696e674c61737446756c6c4167656e74000408e054686973206167656e7420697320746865206c6173742066756c6c206f6e652c20616e642069742773206265696e672072656d6f7665642c686d616b696e6720746865206173736574206f727068616e65642e845365636f6e646172794b65794e6f74417574686f72697a6564466f7241737365740005041d015468652063616c6c65722773207365636f6e64617279206b657920646f6573206e6f74206861766520746865207265717569726564206173736574207065726d697373696f6e2e50426164417574686f72697a6174696f6e547970650006046d015468652065787472696e736963206578706563746564206120646966666572656e742060417574686f72697a6174696f6e5479706560207468616e2077686174207468652060646174612e617574685f747970652829602069732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e090b0c3870616c6c65745f72656c617965721870616c6c65741c53756273696479040c416363010000080128706179696e675f6b657900010c41636300012472656d61696e696e6718011c42616c616e636500000d0b0c3870616c6c65745f72656c617965721870616c6c6574144572726f7204045400012044557365724b65794364644d697373696e67000004cc5468652060757365725f6b657960206973206e6f7420617474616368656420746f2061204344442764206964656e746974792e4c506179696e674b65794364644d697373696e67000104cc5468652060757365725f6b657960206973206e6f7420617474616368656420746f2061204344442764206964656e746974792e2c4e6f506179696e674b6579000204ac5468652060757365725f6b65796020646f65736e2774206861766520612060706179696e675f6b6579602e304e6f74506179696e674b6579000304b05468652060757365725f6b65796020686173206120646966666572656e742060706179696e675f6b6579602e644e6f74417574686f72697a6564466f72506179696e674b6579000404b8546865207369676e6572206973206e6f7420617574686f72697a656420666f722060706179696e675f6b6579602e5c4e6f74417574686f72697a6564466f72557365724b6579000504b0546865207369676e6572206973206e6f7420617574686f72697a656420666f722060757365725f6b6579602e204f766572666c6f77000604b85468652072656d61696e696e6720504f4c595820666f722060757365725f6b657960206f766572666c6f7765642e50426164417574686f72697a6174696f6e547970650007046d015468652065787472696e736963206578706563746564206120646966666572656e742060417574686f72697a6174696f6e5479706560207468616e2077686174207468652060646174612e617574685f747970652829602069732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e110b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000150b0c4070616c6c65745f636f6e747261637473107761736d20436f6465496e666f04045400001401146f776e65720001384163636f756e7449644f663c543e00011c6465706f736974c101013042616c616e63654f663c543e000120726566636f756e7424010c75363400012c64657465726d696e69736d8d07012c44657465726d696e69736d000120636f64655f6c656e10010c7533320000190b0c4070616c6c65745f636f6e7472616374731c73746f7261676530436f6e7472616374496e666f040454000024011c747269655f6964790a011854726965496400013c6465706f7369745f6163636f756e741d0b01444465706f7369744163636f756e743c543e000124636f64655f686173682c012c436f6465486173683c543e00013473746f726167655f627974657310010c75333200013473746f726167655f6974656d7310010c75333200015073746f726167655f627974655f6465706f73697418013042616c616e63654f663c543e00015073746f726167655f6974656d5f6465706f73697418013042616c616e63654f663c543e00015073746f726167655f626173655f6465706f73697418013042616c616e63654f663c543e00015464656c65676174655f646570656e64656e63696573210b011d01426f756e64656442547265654d61703c436f6465486173683c543e2c2042616c616e63654f663c543e2c20543a3a0a4d617844656c6567617465446570656e64656e636965733e00001d0b0c4070616c6c65745f636f6e7472616374731c73746f72616765384465706f7369744163636f756e74040454000004000001384163636f756e7449644f663c543e0000210b0c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b012c04560118045300000400250b013842547265654d61703c4b2c20563e0000250b042042547265654d617008044b012c04560118000400290b000000290b0000022d0b002d0b000004082c1800310b0c4070616c6c65745f636f6e7472616374731c73746f726167655044656c6574696f6e51756575654d616e616765720404540000080138696e736572745f636f756e74657210010c75333200013864656c6574655f636f756e74657210010c7533320000350b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000390b0c4070616c6c65745f636f6e747261637473207363686564756c65205363686564756c6504045400000c01186c696d6974733d0b01184c696d69747300014c696e737472756374696f6e5f77656967687473410b0154496e737472756374696f6e576569676874733c543e00013c686f73745f666e5f77656967687473450b0140486f7374466e576569676874733c543e00003d0b0c4070616c6c65745f636f6e747261637473207363686564756c65184c696d69747300002801306576656e745f746f7069637310010c75333200011c676c6f62616c7310010c7533320001186c6f63616c7310010c753332000128706172616d657465727310010c7533320001306d656d6f72795f706167657310010c7533320001287461626c655f73697a6510010c75333200013462725f7461626c655f73697a6510010c75333200012c7375626a6563745f6c656e10010c75333200012c7061796c6f61645f6c656e10010c75333200013872756e74696d655f6d656d6f727910010c7533320000410b0c4070616c6c65745f636f6e747261637473207363686564756c6548496e737472756374696f6e5765696768747304045400000401106261736510010c7533320000450b0c4070616c6c65745f636f6e747261637473207363686564756c6534486f7374466e576569676874730404540000fc011863616c6c657220011857656967687400012c69735f636f6e7472616374200118576569676874000124636f64655f686173682001185765696768740001346f776e5f636f64655f6861736820011857656967687400014063616c6c65725f69735f6f726967696e20011857656967687400013863616c6c65725f69735f726f6f7420011857656967687400011c616464726573732001185765696768740001206761735f6c65667420011857656967687400011c62616c616e636520011857656967687400014476616c75655f7472616e7366657272656420011857656967687400013c6d696e696d756d5f62616c616e6365200118576569676874000130626c6f636b5f6e756d62657220011857656967687400010c6e6f772001185765696768740001347765696768745f746f5f666565200118576569676874000114696e707574200118576569676874000138696e7075745f7065725f62797465200118576569676874000120722372657475726e20011857656967687400013c72657475726e5f7065725f627974652001185765696768740001247465726d696e61746520011857656967687400011872616e646f6d2001185765696768740001346465706f7369745f6576656e7420011857656967687400015c6465706f7369745f6576656e745f7065725f746f7069632001185765696768740001586465706f7369745f6576656e745f7065725f6279746520011857656967687400013464656275675f6d65737361676520011857656967687400015864656275675f6d6573736167655f7065725f6279746520011857656967687400012c7365745f73746f726167652001185765696768740001607365745f73746f726167655f7065725f6e65775f627974652001185765696768740001607365745f73746f726167655f7065725f6f6c645f627974652001185765696768740001347365745f636f64655f68617368200118576569676874000134636c6561725f73746f72616765200118576569676874000158636c6561725f73746f726167655f7065725f62797465200118576569676874000140636f6e7461696e735f73746f72616765200118576569676874000164636f6e7461696e735f73746f726167655f7065725f6279746520011857656967687400012c6765745f73746f726167652001185765696768740001506765745f73746f726167655f7065725f6279746520011857656967687400013074616b655f73746f7261676520011857656967687400015474616b655f73746f726167655f7065725f627974652001185765696768740001207472616e7366657220011857656967687400011063616c6c20011857656967687400013464656c65676174655f63616c6c20011857656967687400015c63616c6c5f7472616e736665725f73757263686172676520011857656967687400015063616c6c5f7065725f636c6f6e65645f6279746520011857656967687400012c696e7374616e7469617465200118576569676874000178696e7374616e74696174655f7472616e736665725f737572636861726765200118576569676874000168696e7374616e74696174655f7065725f696e7075745f62797465200118576569676874000164696e7374616e74696174655f7065725f73616c745f62797465200118576569676874000134686173685f736861325f323536200118576569676874000158686173685f736861325f3235365f7065725f6279746520011857656967687400013c686173685f6b656363616b5f323536200118576569676874000160686173685f6b656363616b5f3235365f7065725f6279746520011857656967687400013c686173685f626c616b65325f323536200118576569676874000160686173685f626c616b65325f3235365f7065725f6279746520011857656967687400013c686173685f626c616b65325f313238200118576569676874000160686173685f626c616b65325f3132385f7065725f6279746520011857656967687400013465636473615f7265636f76657220011857656967687400015065636473615f746f5f6574685f61646472657373200118576569676874000138737232353531395f76657269667920011857656967687400015c737232353531395f7665726966795f7065725f627974652001185765696768740001407265656e7472616e63655f636f756e742001185765696768740001606163636f756e745f7265656e7472616e63655f636f756e7420011857656967687400014c696e7374616e74696174696f6e5f6e6f6e636520011857656967687400015c6164645f64656c65676174655f646570656e64656e637920011857656967687400016872656d6f76655f64656c65676174655f646570656e64656e63792001185765696768740000490b0c4070616c6c65745f636f6e7472616374731870616c6c6574144572726f720404540001883c496e76616c69645363686564756c650000041901496e76616c6964207363686564756c6520737570706c6965642c20652e672e2077697468207a65726f20776569676874206f662061206261736963206f7065726174696f6e2e40496e76616c696443616c6c466c6167730001043501496e76616c696420636f6d62696e6174696f6e206f6620666c61677320737570706c69656420746f20607365616c5f63616c6c60206f7220607365616c5f64656c65676174655f63616c6c602e204f75744f66476173000204b854686520657865637574656420636f6e7472616374206578686175737465642069747320676173206c696d69742e504f7574707574427566666572546f6f536d616c6c0003040101546865206f75747075742062756666657220737570706c69656420746f206120636f6e7472616374204150492063616c6c2077617320746f6f20736d616c6c2e385472616e736665724661696c65640004083501506572666f726d696e672074686520726571756573746564207472616e73666572206661696c65642e2050726f6261626c7920626563617573652074686572652069736e277420656e6f75676894667265652062616c616e636520696e207468652073656e6465722773206163636f756e742e4c4d617843616c6c4465707468526561636865640005082101506572666f726d696e6720612063616c6c207761732064656e6965642062656361757365207468652063616c6c696e67206465707468207265616368656420746865206c696d6974946f6620776861742069732073706563696669656420696e20746865207363686564756c652e40436f6e74726163744e6f74466f756e64000604bc4e6f20636f6e74726163742077617320666f756e64206174207468652073706563696669656420616464726573732e30436f6465546f6f4c617267650007083d0154686520636f646520737570706c69656420746f2060696e7374616e74696174655f776974685f636f646560206578636565647320746865206c696d69742073706563696669656420696e207468654463757272656e74207363686564756c652e30436f64654e6f74466f756e64000804c44e6f20636f646520636f756c6420626520666f756e642061742074686520737570706c69656420636f646520686173682e40436f6465496e666f4e6f74466f756e64000904d84e6f20636f646520696e666f20636f756c6420626520666f756e642061742074686520737570706c69656420636f646520686173682e2c4f75744f66426f756e6473000a0425014120627566666572206f757473696465206f662073616e64626f78206d656d6f7279207761732070617373656420746f206120636f6e7472616374204150492066756e6374696f6e2e384465636f64696e674661696c6564000b042901496e7075742070617373656420746f206120636f6e7472616374204150492066756e6374696f6e206661696c656420746f206465636f646520617320657870656374656420747970652e3c436f6e747261637454726170706564000c0488436f6e7472616374207472617070656420647572696e6720657865637574696f6e2e3456616c7565546f6f4c61726765000d04cc5468652073697a6520646566696e656420696e2060543a3a4d617856616c756553697a6560207761732065786365656465642e605465726d696e617465645768696c655265656e7472616e74000e0819015465726d696e6174696f6e206f66206120636f6e7472616374206973206e6f7420616c6c6f776564207768696c652074686520636f6e747261637420697320616c7265616479e06f6e207468652063616c6c20737461636b2e2043616e2062652074726967676572656420627920607365616c5f7465726d696e617465602e38496e707574466f72776172646564000f044101607365616c5f63616c6c6020666f72776172646564207468697320636f6e74726163747320696e7075742e204974207468657265666f7265206973206e6f206c6f6e67657220617661696c61626c652e5052616e646f6d5375626a656374546f6f4c6f6e67001004d8546865207375626a6563742070617373656420746f20607365616c5f72616e646f6d60206578636565647320746865206c696d69742e34546f6f4d616e79546f706963730011041d0154686520616d6f756e74206f6620746f706963732070617373656420746f20607365616c5f6465706f7369745f6576656e747360206578636565647320746865206c696d69742e404e6f436861696e457874656e73696f6e00120c450154686520636861696e20646f6573206e6f742070726f76696465206120636861696e20657874656e73696f6e2e2043616c6c696e672074686520636861696e20657874656e73696f6e20726573756c74734d01696e2074686973206572726f722e204e6f74652074686174207468697320757375616c6c79202073686f756c646e27742068617070656e206173206465706c6f79696e67207375636820636f6e7472616374733069732072656a65637465642e444475706c6963617465436f6e7472616374001304c84120636f6e74726163742077697468207468652073616d65204163636f756e74496420616c7265616479206578697374732e5c5465726d696e61746564496e436f6e7374727563746f7200140cb84120636f6e74726163742073656c66206465737472756374656420696e2069747320636f6e7374727563746f722e00d0546869732063616e2062652074726967676572656420627920612063616c6c20746f20607365616c5f7465726d696e617465602e405265656e7472616e636544656e6965640015100d01412063616c6c20747269656420746f20696e766f6b65206120636f6e7472616374207468617420697320666c6167676564206173206e6f6e2d7265656e7472616e742e5d01546865206f6e6c79206f74686572206361757365206973207468617420612063616c6c2066726f6d206120636f6e747261637420696e746f207468652072756e74696d6520747269656420746f2063616c6c206261636b4901696e746f206070616c6c65742d636f6e747261637473602e205468697320776f756c64206d616b65207468652077686f6c652070616c6c6574207265656e7472616e7420776974682072656761726420746fbc636f6e747261637420636f646520657865637574696f6e207768696368206973206e6f7420737570706f727465642e7053746f726167654465706f7369744e6f74456e6f75676846756e647300160421014f726967696e20646f65736e2774206861766520656e6f7567682062616c616e636520746f20706179207468652072657175697265642073746f72616765206465706f736974732e7053746f726167654465706f7369744c696d69744578686175737465640017040d014d6f72652073746f72616765207761732063726561746564207468616e20616c6c6f776564206279207468652073746f72616765206465706f736974206c696d69742e24436f6465496e5573650018044901436f64652072656d6f76616c207761732064656e69656420626563617573652074686520636f6465206973207374696c6c20696e20757365206279206174206c65617374206f6e6520636f6e74726163742e40436f6e74726163745265766572746564001910250154686520636f6e74726163742072616e20746f20636f6d706c6574696f6e20627574206465636964656420746f20726576657274206974732073746f72616765206368616e6765732e4901506c65617365206e6f746520746861742074686973206572726f72206973206f6e6c792072657475726e65642066726f6d2065787472696e736963732e205768656e2063616c6c6564206469726563746c795d016f72207669612052504320616e20604f6b602077696c6c2062652072657475726e65642e20496e20746869732063617365207468652063616c6c6572206e6565647320746f20696e73706563742074686520666c616773c4746f2064657465726d696e652077686574686572206120726576657273696f6e206861732074616b656e20706c6163652e30436f646552656a6563746564001a20f854686520636f6e7472616374277320636f64652077617320666f756e6420746f20626520696e76616c696420647572696e672076616c69646174696f6e2e004d01546865206d6f7374206c696b656c79206361757365206f662074686973206973207468617420616e20415049207761732075736564207768696368206973206e6f7420737570706f727465642062792074686551016e6f64652e20546869732068617070656e7320696620616e206f6c646572206e6f6465206973207573656420776974682061206e65772076657273696f6e206f6620696e6b212e20547279207570646174696e67a8796f7572206e6f646520746f20746865206e657765737420617661696c61626c652076657273696f6e2e00510141206d6f72652064657461696c6564206572726f722063616e20626520666f756e64206f6e20746865206e6f646520636f6e736f6c65206966206465627567206d657373616765732061726520656e61626c6564a8627920737570706c79696e6720602d6c72756e74696d653a3a636f6e7472616374733d6465627567602e3c496e64657465726d696e6973746963001b042101416e20696e64657465726d697374696320636f646520776173207573656420696e206120636f6e746578742077686572652074686973206973206e6f74207065726d69747465642e4c4d6967726174696f6e496e50726f6772657373001c042501412070656e64696e67206d6967726174696f6e206e6565647320746f20636f6d706c657465206265666f7265207468652065787472696e7369632063616e2062652063616c6c65642e504e6f4d6967726174696f6e506572666f726d6564001d040d014d6967726174652064697370617463682063616c6c2077617320617474656d7074656420627574206e6f206d6967726174696f6e2077617320706572666f726d65642e784d617844656c6567617465446570656e64656e6369657352656163686564001e04150154686520636f6e747261637420686173207265616368656420697473206d6178696d756d206e756d626572206f662064656c656761746520646570656e64656e636965732e6844656c6567617465446570656e64656e63794e6f74466f756e64001f04150154686520646570656e64656e637920776173206e6f7420666f756e6420696e2074686520636f6e747261637427732064656c656761746520646570656e64656e636965732e7c44656c6567617465446570656e64656e6379416c7265616479457869737473002004f854686520636f6e747261637420616c726561647920646570656e6473206f6e2074686520676976656e2064656c656761746520646570656e64656e63792e8443616e6e6f7441646453656c66417344656c6567617465446570656e64656e6379002104290143616e206e6f742061646420612064656c656761746520646570656e64656e637920746f2074686520636f64652068617368206f662074686520636f6e747261637420697473656c662e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4d0b0c48706f6c796d6573685f636f6e7472616374731870616c6c65741c56657273696f6e0000040008010875380000510b0c48706f6c796d6573685f636f6e7472616374731870616c6c6574144572726f7204045400013034496e76616c696446756e634964000004a4496e76616c6964206066756e635f6964602070726f76696465642066726f6d20636f6e74726163742e48496e76616c696452756e74696d6543616c6c0001049c4661696c656420746f206465636f646520612076616c6964206052756e74696d6543616c6c602e445265616453746f726167654661696c6564000204fc605265616453746f7261676560206661696c656420746f2077726974652076616c756520696e746f2074686520636f6e74726163742773206275666665722e54446174614c65667441667465724465636f64696e67000304d444617461206c65667420696e20696e707574207768656e206465636f64696e6720617267756d656e7473206f6620612063616c6c2e34496e4c656e546f6f4c617267650004043901496e70757420646174612074686174206120636f6e747261637420706173736564207768656e207573696e672074686520436861696e457874656e73696f6e2077617320746f6f206c617267652e384f75744c656e546f6f4c61726765000504ec4f757470757420646174612072657475726e65642066726f6d2074686520436861696e457874656e73696f6e2077617320746f6f206c617267652e68496e7374616e746961746f72576974684e6f4964656e74697479000608b04120636f6e74726163742077617320617474656d7074656420746f20626520696e7374616e7469617465642c0d01627574206e6f206964656e746974792077617320676976656e20746f206173736f636961746520746865206e657720636f6e74726163742773206b657920776974682e4452756e74696d6543616c6c44656e696564000704cc45787472696e736963206973206e6f7420616c6c6f77656420746f2062652063616c6c656420627920636f6e7472616374732e5043616c6c65724e6f74415072696d6172794b6579000804805468652063616c6c6572206973206e6f742061207072696d617279206b65792e544d697373696e674b65795065726d697373696f6e73000904985365636f6e64617279206b6579207065726d697373696f6e7320617265206d697373696e672e4c496e76616c6964436861696e56657273696f6e000a049c4f6e6c792066757475726520636861696e2076657273696f6e732061726520616c6c6f7765642e4c4e6f5570677261646573537570706f72746564000b04d4546865726520617265206e6f2061706920757067726164657320737570706f7274656420666f722074686520636f6e74726163742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e550b083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f736974b5080150284163636f756e7449642c2042616c616e63652900010c6c656e10010c753332000000245265717565737465640c011c6465706f736974590b01704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7410010c75333200010c6c656e1d06012c4f7074696f6e3c7533323e00010000590b04184f7074696f6e04045401b5080108104e6f6e6500000010536f6d650400b50800000100005d0b000004082c1000610b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000650b0c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e690b0c4c706f6c796d6573685f7072696d6974697665730c6e6674344e4654436f6c6c656374696f6e000008010869648904013c4e4654436f6c6c656374696f6e496400012061737365745f6964a8011c4173736574496400006d0b04204254726565536574040454016102000400b907000000710b00000408750b610200750b000004088904a50300790b0c2870616c6c65745f6e66741870616c6c6574144572726f720404540001743c42616c616e63654f766572666c6f77000004a8416e206f766572666c6f77207768696c652063616c63756c6174696e67207468652062616c616e63652e4042616c616e6365556e646572666c6f77000104ac416e20756e646572666c6f77207768696c652063616c63756c6174696e67207468652062616c616e63652e68436f6c6c656374696f6e416c7265647952656769737465726564000204e05468652061737365745f696420697320616c7265616479206173736f63696174656420746f20616e204e465420636f6c6c656374696f6e2e48436f6c6c656374696f6e4e6f74466f756e6400030488546865204e465420636f6c6c656374696f6e20646f6573206e6f742065786973742e504475706c69636174654d657461646174614b6579000404d841206475706c6963617465206d65746164617461206b657920686173206265656e2070617373656420617320706172616d657465722e3c4475706c6963617465644e46544964000504784475706c69636174652069647320617265206e6f7420616c6c6f7765642e40496e76616c69644173736574547970650006049c546865206173736574206d757374206265206f662074797065206e6f6e2d66756e6769626c652e60496e76616c69644d657461646174614174747269627574650007048d0145697468657220746865206e756d626572206f66206b657973206f7220746865206b6579206964656e74696669657220646f6573206e6f74206d6174636820746865206b65797320646566696e656420666f722074686520636f6c6c656374696f6e2e90496e76616c69644e46545472616e73666572436f6c6c656374696f6e4e6f74466f756e64000804d44661696c656420746f207472616e7366657220616e204e4654202d204e465420636f6c6c656374696f6e206e6f7420666f756e642e7c496e76616c69644e46545472616e7366657253616d65506f7274666f6c696f00090409014661696c656420746f207472616e7366657220616e204e4654202d20617474656d707420746f206d6f766520746f207468652073616d6520706f7274666f6c696f2e74496e76616c69644e46545472616e736665724e46544e6f744f776e6564000a04dc4661696c656420746f207472616e7366657220616e204e4654202d204e4654206e6f7420666f756e6420696e20706f7274666f6c696f2e7c496e76616c69644e46545472616e73666572436f756e744f766572666c6f77000b04e84661696c656420746f207472616e7366657220616e204e4654202d206964656e7469747920636f756e7420776f756c64206f766572666c6f772e8c496e76616c69644e46545472616e73666572436f6d706c69616e63654661696c757265000c04b84661696c656420746f207472616e7366657220616e204e4654202d20636f6d706c69616e6365206661696c65642e74496e76616c69644e46545472616e7366657246726f7a656e4173736574000d04b04661696c656420746f207472616e7366657220616e204e4654202d2061737365742069732066726f7a656e2e8c496e76616c69644e46545472616e73666572496e73756666696369656e74436f756e74000e043d014661696c656420746f207472616e7366657220616e204e4654202d20746865206e756d626572206f66206e66747320696e20746865206964656e7469747920697320696e73756666696369656e742e5c4d61784e756d6265724f664b6579734578636565646564000f04c4546865206d6178696d756d206e756d626572206f66206d65746164617461206b657973207761732065786365656465642e744d61784e756d6265724f664e4654735065724c656745786365656465640010041501546865206d6178696d756d206e756d626572206f66206e667473206265696e67207472616e7366657272656420696e206f6e65206c6567207761732065786365656465642e2c4e46544e6f74466f756e640011045c546865204e465420646f6573206e6f742065786973742e5c556e726567697374657265644d657461646174614b6579001204e84174206c65617374206f6e65206f6620746865206d65746164617461206b65797320686173206e6f74206265656e20726567697374657265642e245a65726f436f756e74001304a44974206973206e6f7420706f737369626c6520746f207472616e7366657272207a65726f206e66742e38537570706c794f766572666c6f77001404c4416e206f766572666c6f77207768696c652063616c63756c6174696e6720746865207570646174656420737570706c792e3c537570706c79556e646572666c6f77001504c8416e20756e646572666c6f77207768696c652063616c63756c6174696e6720746865207570646174656420737570706c792e74496e76616c69644e46545472616e736665724e465449734c6f636b6564001604a84661696c656420746f207472616e7366657220616e204e4654202d206e6674206973206c6f636b65642eac496e76616c69644e46545472616e7366657253656e64657249644d61746368657352656365697665724964001704fc5468652073656e646572206964656e746974792063616e2774206265207468652073616d6520617320746865207265636569766572206964656e746974792e90496e76616c69644e46545472616e73666572496e76616c69645265636569766572434444001804805468652072656365697665722068617320616e20696e76616c6964204344442e88496e76616c69644e46545472616e73666572496e76616c696453656e646572434444001904785468652073656e6465722068617320616e20696e76616c6964204344442e38496e76616c696441737365744964001a04c854686572652773206e6f206173736574206173736f63696174656420746f2074686520676976656e2061737365745f69642e2c4e465449734c6f636b6564001b0448546865204e4654206973206c6f636b65642e784e756d6265724f664b65797349734c6573735468616e4578706563746564001c04fc546865206e756d626572206f66206b65797320696e2074686520636f6c6c656374696f6e2069732067726561746572207468616e2074686520696e7075742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d0b089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365345265616479536f6c7574696f6e08244163636f756e74496400284d617857696e6e65727300000c0120737570706f727473810b0198426f756e646564537570706f7274733c4163636f756e7449642c204d617857696e6e6572733e00011473636f726595040134456c656374696f6e53636f726500011c636f6d707574659104013c456c656374696f6e436f6d707574650000810b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a908045300000400a50801185665633c543e0000850b089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736534526f756e64536e617073686f7408244163636f756e7449640100304461746150726f766964657201890b00080118766f746572738d0b01445665633c4461746150726f76696465723e00011c74617267657473fc01385665633c4163636f756e7449643e0000890b0000040c00281109008d0b000002890b00910b0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401950b045300000400990b01185665633c543e0000950b0000040c9504101000990b000002950b009d0b0c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365187369676e6564405369676e65645375626d697373696f6e0c244163636f756e74496401001c42616c616e6365011820536f6c7574696f6e01d1070010010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650001307261775f736f6c7574696f6ecd070154526177536f6c7574696f6e3c536f6c7574696f6e3e00012063616c6c5f66656518011c42616c616e63650000a10b0c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144572726f720404540001386850726544697370617463684561726c795375626d697373696f6e000004645375626d697373696f6e2077617320746f6f206561726c792e6c507265446973706174636857726f6e6757696e6e6572436f756e740001048857726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e6450726544697370617463685765616b5375626d697373696f6e000204905375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e3c5369676e6564517565756546756c6c0003044901546865207175657565207761732066756c6c2c20616e642074686520736f6c7574696f6e20776173206e6f7420626574746572207468616e20616e79206f6620746865206578697374696e67206f6e65732e585369676e656443616e6e6f745061794465706f73697400040494546865206f726967696e206661696c656420746f2070617920746865206465706f7369742e505369676e6564496e76616c69645769746e657373000504a05769746e657373206461746120746f20646973706174636861626c6520697320696e76616c69642e4c5369676e6564546f6f4d756368576569676874000604b8546865207369676e6564207375626d697373696f6e20636f6e73756d657320746f6f206d756368207765696768743c4f637743616c6c57726f6e67457261000704984f4357207375626d697474656420736f6c7574696f6e20666f722077726f6e6720726f756e645c4d697373696e67536e617073686f744d65746164617461000804a8536e617073686f74206d657461646174612073686f756c6420657869737420627574206469646e27742e58496e76616c69645375626d697373696f6e496e646578000904d06053656c663a3a696e736572745f7375626d697373696f6e602072657475726e656420616e20696e76616c696420696e6465782e3843616c6c4e6f74416c6c6f776564000a04985468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742e3846616c6c6261636b4661696c6564000b044c5468652066616c6c6261636b206661696c65642c426f756e644e6f744d6574000c0448536f6d6520626f756e64206e6f74206d657438546f6f4d616e7957696e6e657273000d049c5375626d697474656420736f6c7574696f6e2068617320746f6f206d616e792077696e6e657273040d014572726f72206f66207468652070616c6c657420746861742063616e2062652072657475726e656420696e20726573706f6e736520746f20646973706174636865732ea50b102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730169051043616c6c01f505245369676e617475726501010714457874726101a90b00040030000000a90b00000420ad0bb10bb50bb90bc10bc50bc90bcd0b00ad0b10306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000b10b10306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000b50b10306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000b90b10306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400bd0b010c4572610000bd0b102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000c10b10306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400b1040120543a3a4e6f6e63650000c50b10306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000c90b086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400c101013042616c616e63654f663c543e0000cd0b084870616c6c65745f7065726d697373696f6e734453746f726543616c6c4d6574616461746104045400000000c81853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b57656967687401001c180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022ca9040400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000ad0404000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e74010039010400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e74010039010400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000a104040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01b50401501830426c6f636b57656967687473c50401020700c817a804000b00204aa9d10113ffffffffffffffff02daf89a00010b80914b872e011366666666666666a6010b0098f73e5d0113ffffffffffffffbf01000002daf89a00010b80199ef1a2011366666666666666e6010b00204aa9d10113ffffffffffffffff01070088526a7413000000000000004002daf89a0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468d50430000078000000a0000000a00004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101000100000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874dd044080f0fa020000000000c2eb0b000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ee104010530706f6c796d6573685f64657630706f6c796d6573685f6465760100000078db6a00000000005cdf6acb689907609b0400000037e397fc7c91f5e40200000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ed99c5acb25eedf503000000cbca25e39f14238702000000687ad44ad37f03c201000000bc9d89904f5b923f0100000068b66ba122c93fa70200000037c8bb1350a9a2a802000000f3ff14d5ab52705902000000ab3c0572291feb8b0100000018ef58a3b67ba77001000000329342994773047f01000000001a0b29f17d01f401000000f28e8080b6e2dfd004000000bb6ba9053c5c9d7804000000595ac34c5ea1f5fe010000009ea061a615cee2fe0200000053df5001418f3b460200000098cf18c375950e1f02000000608339ce0e76adf30000000007000000010484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669784503082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01f504001042616265011042616265442845706f6368496e64657801002820000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f7269746965730100f9040400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f740100090520000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f740100090520000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e65737301000480000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e6050656e64696e6745706f6368436f6e6669674368616e676500000d0504000461012050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e384e65787452616e646f6d6e657373010004800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e3c4e657874417574686f7269746965730100f90404000460204e6578742065706f636820617574686f7269746965732e305365676d656e74496e6465780100101000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f8205765206d616b6520612074726164652d6f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e0101040510190504000415012054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2c496e697469616c697a65640000210504000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e4c417574686f7256726652616e646f6d6e6573730100b90304001015012054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c6573731901207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e0049012049742069732073657420696e20606f6e5f66696e616c697a65602c206265666f72652069742077696c6c20636f6e7461696e207468652076616c75652066726f6d20746865206c61737420626c6f636b2e2845706f636853746172740100b503200000000000000000145d012054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e641420604e602e4901204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f66590120656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e590120736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e204c6174656e657373010010100000000014d820486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e001501205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e65642075701101206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636bb020657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2c45706f6368436f6e6669670000390504000861012054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e242067656e657369732e3c4e65787445706f6368436f6e666967000039050400082d012054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e6765e82028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e34536b697070656445706f63687301003d0504002029012041206c697374206f6620746865206c6173742031303020736b69707065642065706f63687320616e642074686520636f72726573706f6e64696e672073657373696f6e20696e64657870207768656e207468652065706f63682077617320736b69707065642e0031012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f663501206d75737420636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e656564206139012077617920746f2074696520746f6765746865722073657373696f6e7320616e642065706f636820696e64696365732c20692e652e207765206e65656420746f2076616c69646174652074686174290120612076616c696461746f722077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e64207768617420746865b0206163746976652065706f636820696e6465782077617320647572696e6720746861742073657373696f6e2e01490500103445706f63684475726174696f6e28202c010000000000000cec2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e1901204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e20616674657221012074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e444578706563746564426c6f636b54696d652820701700000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e384d6178417574686f7269746965731010a08601000488204d6178206e756d626572206f6620617574686f72697469657320616c6c6f776564344d61784e6f6d696e61746f727310100004000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e015905012454696d657374616d70012454696d657374616d70080c4e6f7701002820000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e2444696455706461746501003901040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f015d050004344d696e696d756d506572696f642820b80b000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e7473000104021061050400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e0165050174041c4465706f736974184040420f0000000000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e016d050328417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000042042616c616e636573012042616c616e6365730834546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e144c6f636b7301010402007105040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e017d05017804484578697374656e7469616c4465706f73697418400000000000000000000000000000000008090120546869732074797065206973206e6f206c6f6e676572206e656564656420627574206b65707420666f7220636f6d7061746962696c69747920726561736f6e732ed420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e01810505485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100850540000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e01008905040000018d05019008485472616e73616374696f6e42797465466565184064000000000000000000000000000000040d01205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e40576569676874546f466565436f6e737491055c040000000000000000000000000000000049b400000001040d012054686520706f6c796e6f6d69616c2074686174206973206170706c69656420696e206f7264657220746f20646572697665206665652066726f6d207765696768742e0006204964656e7469747901204964656e7469747960284469645265636f726473000104068099050400045420444944202d3e206964656e7469747920696e666f2c497344696446726f7a656e01010406803901040004e420444944202d3e20626f6f6c207468617420696e64696361746573206966207365636f6e64617279206b657973206172652066726f7a656e2e3043757272656e74506179657200000004000405012049742073746f726573207468652063757272656e74206761732066656520706179657220666f72207468652063757272656e74207472616e73616374696f6e2e18436c61696d7300010805029d050101040004f020285461726765742049442c20636c61696d20747970652920286973737565722c73636f706529202d3e204173736f63696174656420636c61696d7330437573746f6d436c61696d730001040519013004000494204375736f746d436c61696d547970654964202d3e20537472696e6720636f6e7374616e744c437573746f6d436c61696d73496e7665727365000104023019010400049420537472696e6720636f6e7374616e74202d3e20437573746f6d436c61696d54797065496454437573746f6d436c61696d496453657175656e6365010019011000000000047820546865206e6578742060437573746f6d436c61696d547970654964602e284b65795265636f7264730001040500a9050400042901204d61702066726f6d204163636f756e74496420746f20604b65795265636f726460207468617420686f6c647320746865206b65792773207479706520616e64206964656e746974792e5c4b657945787472696e7369635065726d697373696f6e730001040500b8040004a42041207365636f6e64617279206b657927732065787472696e736963207065726d697373696f6e732e4c4b657941737365745065726d697373696f6e730001040500a4040004942041207365636f6e64617279206b65792773206173736574207065726d697373696f6e732e5c4b6579506f7274666f6c696f5065726d697373696f6e730001040500e4040004a42041207365636f6e64617279206b6579277320706f7274666f6c696f207065726d697373696f6e732e1c4469644b6579730101080605ad05390104000401012041207265766572736520646f75626c65206d617020746f20616c6c6f772066696e64696e6720616c6c206b65797320666f7220616e206964656e746974792e444d756c7469507572706f73654e6f6e636501002820000000000000000004bc204e6f6e636520746f20656e7375726520756e6971756520616374696f6e732e207374617274732066726f6d20312e684f6666436861696e417574686f72697a6174696f6e4e6f6e636501010406802820000000000000000004c820417574686f72697a6174696f6e206e6f6e636520706572204964656e746974792e20496e697469616c6c7920697320302e38417574686f72697a6174696f6e730001080205b105b905040004b020416c6c20617574686f72697a6174696f6e73207468617420616e206964656e746974792f6b6579206861734c417574686f72697a6174696f6e73476976656e0101080605bd05b50584000000000000000000000000000000000000000000000000000000000000000000044d0120416c6c20617574686f72697a6174696f6e73207468617420616e206964656e746974792068617320676976656e2e2028417574686f72697a65722c20617574685f6964202d3e20617574686f72697a6564297043646441757468466f725072696d6172794b6579526f746174696f6e010039010400085d01204120636f6e66696720666c616720746861742c206966207365742c20696e7374727563747320616e20617574686f72697a6174696f6e2066726f6d2061204344442070726f766964657220696e206f7264657220746f9c206368616e676520746865207072696d617279206b6579206f6620616e206964656e746974792e3853746f7261676556657273696f6e0100c105040004442053746f726167652076657273696f6e2e484163636f756e744b6579526566436f756e740101040200282000000000000000001cc420486f77206d616e7920227374726f6e6722207265666572656e63657320746f20746865206163636f756e74206b65792e00fc205374726f6e67207265666572656e6365732077696c6c20626c6f636b2061206b65792066726f6d206c656176696e672069742773206964656e746974792e00cc2050616c6c657473207573696e6720227374726f6e6722207265666572656e63657320746f206163636f756e74206b6579733aac202a2052656c617965723a20466f722060757365725f6b65796020616e642060706179696e675f6b6579600024506172656e74446964000104068080040004c020506172656e74206964656e7469747920696620746865204449442069732061206368696c64204964656e746974792e204368696c644469640101080606c5053901040004050120416c6c206368696c64206964656e746974696573206f66206120706172656e742028692e6520506172656e744449442c204368696c644449442c207472756529484e756d6265724f66476976656e4175746873010104068010100000000004ec20547261636b20746865206e756d626572206f6620617574686f72697a6174696f6e7320676976656e2062792065616368206964656e746974792e584f75746461746564417574686f72697a6174696f6e7300010402b50528040004bc20547261636b7320616c6c20617574686f72697a6174696f6e732074686174206d7573742062652064656c657465643443757272656e74417574684964010028200000000000000000047c20436f6e74726f6c732074686520617574686f72697a6174696f6e2069642e01c90501940830496e697469616c504f4c595818400000000000000000000000000000000004c820504f4c595820676976656e20746f207072696d617279206b657973206f6620616c6c206e6577204964656e746974696573344d6178476976656e417574687310100004000004dc204d6178696d756d206e756d626572206f6620617574686f72697a6174696f6e7320616e206964656e746974792063616e20676976652e01e105074c4364645365727669636550726f766964657273014c4364645365727669636550726f7669646572730c344163746976654d656d6265727301004101040004ec205468652063757272656e74202261637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e3c496e6163746976654d656d626572730100e505040004f4205468652063757272656e742022696e61637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e484163746976654d656d626572734c696d6974010010100000000004c4204c696d6974206f6620686f77206d616e79202261637469766522206d656d626572732074686572652063616e2062652e01ed05013d010001f1050844506f6c796d657368436f6d6d69747465650144506f6c796d657368436f6d6d6974746565202450726f706f73616c730100a504040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062cf505040004882041637475616c2070726f706f73616c20666f72206120676976656e20686173682e18566f74696e67000104062cb908040004d420506f6c796d657368566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100410104000498205468652063757272656e74206d656d62657273206f662074686520636f6d6d69747465652e34566f74655468726573686f6c640100b503200000000000000000048020566f7465207468726573686f6c6420666f7220616e20617070726f76616c2e4852656c65617365436f6f7264696e61746f72000080040004582052656c6561736520636f6f726964696e61746f722e3045787069726573416674657201005101040104a42054696d6520616674657220776869636820612070726f706f73616c2077696c6c206578706972652e01f9050145010001bd08094c436f6d6d69747465654d656d62657273686970014c436f6d6d69747465654d656d626572736869700c344163746976654d656d6265727301004101040004ec205468652063757272656e74202261637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e3c496e6163746976654d656d626572730100e505040004f4205468652063757272656e742022696e61637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e484163746976654d656d626572734c696d6974010010100000000004c4204c696d6974206f6620686f77206d616e79202261637469766522206d656d626572732074686572652063616e2062652e01fd050155010001c1080a48546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565202450726f706f73616c730100a504040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062cf505040004882041637475616c2070726f706f73616c20666f72206120676976656e20686173682e18566f74696e67000104062cb908040004d420506f6c796d657368566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100410104000498205468652063757272656e74206d656d62657273206f662074686520636f6d6d69747465652e34566f74655468726573686f6c640100b503200000000000000000048020566f7465207468726573686f6c6420666f7220616e20617070726f76616c2e4852656c65617365436f6f7264696e61746f72000080040004582052656c6561736520636f6f726964696e61746f722e3045787069726573416674657201005101040104a42054696d6520616674657220776869636820612070726f706f73616c2077696c6c206578706972652e0101060159010001c5080b70546563686e6963616c436f6d6d69747465654d656d626572736869700170546563686e6963616c436f6d6d69747465654d656d626572736869700c344163746976654d656d6265727301004101040004ec205468652063757272656e74202261637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e3c496e6163746976654d656d626572730100e505040004f4205468652063757272656e742022696e61637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e484163746976654d656d626572734c696d6974010010100000000004c4204c696d6974206f6620686f77206d616e79202261637469766522206d656d626572732074686572652063616e2062652e010506015d010001c9080c4055706772616465436f6d6d6974746565014055706772616465436f6d6d6974746565202450726f706f73616c730100a504040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062cf505040004882041637475616c2070726f706f73616c20666f72206120676976656e20686173682e18566f74696e67000104062cb908040004d420506f6c796d657368566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100410104000498205468652063757272656e74206d656d62657273206f662074686520636f6d6d69747465652e34566f74655468726573686f6c640100b503200000000000000000048020566f7465207468726573686f6c6420666f7220616e20617070726f76616c2e4852656c65617365436f6f7264696e61746f72000080040004582052656c6561736520636f6f726964696e61746f722e3045787069726573416674657201005101040104a42054696d6520616674657220776869636820612070726f706f73616c2077696c6c206578706972652e0109060161010001cd080d6855706772616465436f6d6d69747465654d656d62657273686970016855706772616465436f6d6d69747465654d656d626572736869700c344163746976654d656d6265727301004101040004ec205468652063757272656e74202261637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e3c496e6163746976654d656d626572730100e505040004f4205468652063757272656e742022696e61637469766522206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e484163746976654d656d626572734c696d6974010010100000000004c4204c696d6974206f6620686f77206d616e79202261637469766522206d656d626572732074686572652063616e2062652e010d060165010001d1080e204d756c746953696701204d756c746953696740344d756c74695369674e6f6e6365010028200000000000000000042101204e6f6e636520746f20656e7375726520756e69717565204d756c746953696720616464726573736573206172652067656e6572617465643b207374617274732066726f6d20312e3c4d756c74695369675369676e6572730101080605d5083901040004cc205369676e657273206f662061206d756c74697369672e20286d756c74697369672c207369676e657229203d3e20626f6f6c2e3c4e756d6265724f665369676e65727301010406002820000000000000000004cc204e756d626572206f6620617070726f7665642f6163636570746564207369676e657273206f662061206d756c74697369672e544d756c74695369675369676e73526571756972656401010406002820000000000000000004e020436f6e6669726d6174696f6e73207265717569726564206265666f72652070726f63657373696e672061206d756c74697369672074782e384e65787450726f706f73616c49640101040600282000000000000000000cc4204e6578742070726f706f73616c20696420666f722061206d756c74697369672e20205374617274732066726f6d20302e0074206d756c7469736967203d3e206e6578742070726f706f73616c2069642450726f706f73616c730001080505d908f50504000cb82050726f706f73616c732070726573656e74656420666f7220766f74696e6720746f2061206d756c74697369672e00b4206d756c7469736967202d3e2070726f706f73616c206964203d3e204f7074696f6e3c50726f706f73616c3e2e14566f7465730101080505dd08390104000c8820496e646976696475616c206d756c7469736967207369676e657220766f7465732e00ac20286d756c74697369672c2070726f706f73616c5f696429202d3e207369676e6572203d3e20766f74652e24506179696e67446964000104060080040010090120546865206d756c7469736967277320706179696e67206964656e746974792e2020546865207072696d617279206b6579206f662074686973206964656e74697479f8207061797320746865207472616e73616374696f6e2f70726f746f63616c2066656573206f6620746865206d756c74697369672070726f706f73616c732e0080206d756c7469736967202d3e204f7074696f6e3c4964656e7469747949643e2e2041646d696e446964000104060080040010050120546865206d756c746973696727732061646d696e206964656e746974792e2020546865207072696d617279206b6579206f662074686973206964656e7469747994206861732061646d696e20636f6e74726f6c206f76657220746865206d756c74697369672e0080206d756c7469736967202d3e204f7074696f6e3c4964656e7469747949643e2e4850726f706f73616c566f7465436f756e74730001080505d908e10804000ce82054686520636f756e74206f6620617070726f76616c732f72656a656374696f6e73206f662061206d756c74697369672070726f706f73616c2e00d8206d756c7469736967202d3e2070726f706f73616c206964203d3e204f7074696f6e3c50726f706f73616c566f7465436f756e743e2e3850726f706f73616c5374617465730001080505d908e50804000c8420546865207374617465206f662061206d756c74697369672070726f706f73616c00c8206d756c7469736967202d3e2070726f706f73616c206964203d3e204f7074696f6e3c50726f706f73616c53746174653e2e40457865637574696f6e5265656e74727901003901040004882050726f706f73616c20657865637574696f6e207265656e7472792067756172642e4041757468546f50726f706f73616c49640001080505d9082804000cbc2050656e64696e67206a6f696e206964656e7469747920617574686f72697a6174696f6e2070726f706f73616c732e00b0206d756c7469736967202d3e2061757468206964203d3e204f7074696f6e3c70726f706f73616c2069643e2e485472616e73616374696f6e56657273696f6e010010100000000004f420546865206c617374207472616e73616374696f6e2076657273696f6e2c207573656420666f7220606f6e5f72756e74696d655f75706772616465602e4c4c617374496e76616c696450726f706f73616c00010406002804000c450120546865206c6173742070726f706f73616c206964206265666f726520746865206d756c7469736967206368616e676564207369676e657273206f72207369676e6174757265732072657175697265642e0080206d756c7469736967203d3e204f7074696f6e3c70726f706f73616c2069643e3853746f7261676556657273696f6e0100e908040004442053746f726167652076657273696f6e2e01110601690104284d61785369676e657273101032000000040501204d6178696d756d206e756d626572206f66207369676e65727320746861742063616e2062652061646465642f72656d6f76656420696e206f6e652063616c6c2e01ed080f2856616c696461746f7273012856616c696461746f72730c505065726d697373696f6e65644964656e746974790001040580f108040004ec20456e74697469657320746861742061726520616c6c6f77656420746f2072756e206f70657261746f722f76616c696461746f72206e6f6465732e48536c617368696e67416c6c6f776564466f7201007501040204b420536c617368696e672073776974636820666f722076616c696461746f72732026204e6f6d696e61746f72732e5856616c696461746f72436f6d6d697373696f6e436170010079011000000000049d0120416c6c6f777320666c65786962696c69747920696e20636f6d6d697373696f6e2e2045766572792076616c696461746f722068617320636f6d6d697373696f6e20746861742073686f756c6420626520696e207468652072616e6765205b302c204361705d2e0119060171010c5c4d617856616c696461746f725065724964656e746974798d02101009050008e8204d6178696d756d20616d6f756e74206f662076616c696461746f727320746861742063616e2072756e20627920616e206964656e746974792ef82049742077696c6c206265204d617856616c696461746f725065724964656e74697479202a2053656c663a3a76616c696461746f725f636f756e7428292e844d61785661726961626c65496e666c6174696f6e546f74616c49737375616e636518400080c6a47e8d03000000000000000000041501204d6178696d756d20616d6f756e74206f6620746f74616c2069737375616e63652061667465722077686963682066697865642072657761726473206b69636b7320696e2e444669786564596561726c79526577617264184000c0444a547f0000000000000000000004390120596561726c7920746f74616c2072657761726420616d6f756e7420746861742067657473206469737472696275746564207768656e2066697865642072657761726473206b69636b7320696e2e01f508101c5374616b696e67011c5374616b696e67943856616c696461746f72436f756e740100101000000000049c2054686520696465616c206e756d626572206f66206163746976652076616c696461746f72732e544d696e696d756d56616c696461746f72436f756e740100101000000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100fc04000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010405000004000c0101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e404d696e4e6f6d696e61746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f662061206e6f6d696e61746f722e404d696e56616c696461746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f6620612076616c696461746f722e484d696e696d756d4163746976655374616b65010018400000000000000000000000000000000004110120546865206d696e696d756d20616374697665206e6f6d696e61746f72207374616b65206f6620746865206c617374207375636365737366756c20656c656374696f6e2e344d696e436f6d6d697373696f6e0100790110000000000ce820546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e20746861742076616c696461746f72732063616e207365742e00802049662073657420746f206030602c206e6f206c696d6974206578697374732e184c65646765720001040200f9080400044501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e1450617965650101040500250604000ce42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e2856616c696461746f7273010104050081010800000c450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f7256616c696461746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d617856616c696461746f7273436f756e7400001004000c310120546865206d6178696d756d2076616c696461746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e284e6f6d696e61746f727300010405000d09040048750120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f207468656972206e6f6d696e6174696f6e20707265666572656e6365732c206e616d656c79207468652076616c696461746f72732074686174582074686579207769736820746f20737570706f72742e003901204e6f7465207468617420746865206b657973206f6620746869732073746f72616765206d6170206d69676874206265636f6d65206e6f6e2d6465636f6461626c6520696e2063617365207468656d01205b60436f6e6669673a3a4d61784e6f6d696e6174696f6e73605d20636f6e66696775726174696f6e206973206465637265617365642e20496e2074686973207261726520636173652c207468657365206e6f6d696e61746f7273650120617265207374696c6c206578697374656e7420696e2073746f726167652c207468656972206b657920697320636f727265637420616e64207265747269657661626c652028692e652e2060636f6e7461696e735f6b657960710120696e6469636174657320746861742074686579206578697374292c206275742074686569722076616c75652063616e6e6f74206265206465636f6465642e205468657265666f72652c20746865206e6f6e2d6465636f6461626c656d01206e6f6d696e61746f72732077696c6c206566666563746976656c79206e6f742d65786973742c20756e74696c20746865792072652d7375626d697420746865697220707265666572656e6365732073756368207468617420697401012069732077697468696e2074686520626f756e6473206f6620746865206e65776c79207365742060436f6e6669673a3a4d61784e6f6d696e6174696f6e73602e006101205468697320696d706c696573207468617420603a3a697465725f6b65797328292e636f756e7428296020616e6420603a3a6974657228292e636f756e74282960206d696768742072657475726e20646966666572656e746d012076616c75657320666f722074686973206d61702e204d6f72656f7665722c20746865206d61696e20603a3a636f756e7428296020697320616c69676e656420776974682074686520666f726d65722c206e616d656c79207468656c206e756d626572206f66206b65797320746861742065786973742e006d01204c6173746c792c20696620616e79206f6620746865206e6f6d696e61746f7273206265636f6d65206e6f6e2d6465636f6461626c652c20746865792063616e206265206368696c6c656420696d6d6564696174656c7920766961b8205b6043616c6c3a3a6368696c6c5f6f74686572605d20646973706174636861626c6520627920616e796f6e652e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f724e6f6d696e61746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d61784e6f6d696e61746f7273436f756e7400001004000c310120546865206d6178696d756d206e6f6d696e61746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e2843757272656e744572610000100400105c205468652063757272656e742065726120696e6465782e006501205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f7280207365742c206974206d6967687420626520616374697665206f72206e6f742e2441637469766545726100001509040010d820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e0059012054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d757374206265ac20657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e5445726173537461727453657373696f6e496e6465780001040510100400103101205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e006101204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e672061637469766529f020666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e2c457261735374616b65727301010805051909bd010c0000001878204578706f73757265206f662076616c696461746f72206174206572612e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e48457261735374616b657273436c697070656401010805051909bd010c0000002c9820436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e00590120546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f20746865dc2060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e1d0120284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292ef42054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e005d012054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e484572617356616c696461746f7250726566730101080505190981010800001411012053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4c4572617356616c696461746f7252657761726400010405101804000c09012054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e0021012045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e4045726173526577617264506f696e747301010405101d0914000000000008ac205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e3845726173546f74616c5374616b65010104051018400000000000000000000000000000000008ec2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e1d0120496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e20466f7263654572610100890104000454204d6f6465206f662065726120666f7263696e672e4c536c6173685265776172644672616374696f6e0100790110000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e4c43616e63656c6564536c6173685061796f757401001840000000000000000000000000000000000815012054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e7420776869636820776173ec2063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e40556e6170706c696564536c617368657301010405102d09040004c420416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e28426f6e646564457261730100a90404001025012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e00c8204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653abc20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d604c56616c696461746f72536c617368496e457261000108050519093509040008450120416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e7020616e6420736c6173682076616c7565206f6620746865206572612e4c4e6f6d696e61746f72536c617368496e4572610001080505190918040004610120416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e34536c617368696e675370616e73000104050039090400048c20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e245370616e536c6173680101040529093d09800000000000000000000000000000000000000000000000000000000000000000083d01205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2cb82061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e5443757272656e74506c616e6e656453657373696f6e01001010000000000ce820546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e0071012054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6070616c6c65745f73657373696f6e3a3a53657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e4c4f6666656e64696e6756616c696461746f727301004109040024690120496e6469636573206f662076616c696461746f727320746861742068617665206f6666656e64656420696e20746865206163746976652065726120616e6420776865746865722074686579206172652063757272656e746c79282064697361626c65642e00690120546869732076616c75652073686f756c642062652061207375706572736574206f662064697361626c65642076616c696461746f72732073696e6365206e6f7420616c6c206f6666656e636573206c65616420746f2074686571012076616c696461746f72206265696e672064697361626c65642028696620746865726520776173206e6f20736c617368292e2054686973206973206e656564656420746f20747261636b207468652070657263656e74616765206f6649012076616c696461746f727320746861742068617665206f6666656e64656420696e207468652063757272656e74206572612c20656e737572696e672061206e65772065726120697320666f72636564206966750120604f6666656e64696e6756616c696461746f72735468726573686f6c646020697320726561636865642e205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e6471012077686574686572206120676976656e2076616c696461746f72206861732070726576696f75736c79206f6666656e646564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e38207468652065726120656e64732e384368696c6c5468726573686f6c6400002d0604000c510120546865207468726573686f6c6420666f72207768656e2075736572732063616e2073746172742063616c6c696e6720606368696c6c5f6f746865726020666f72206f746865722076616c696461746f7273202f5901206e6f6d696e61746f72732e20546865207468726573686f6c6420697320636f6d706172656420746f207468652061637475616c206e756d626572206f662076616c696461746f7273202f206e6f6d696e61746f72732901202860436f756e74466f722a602920696e207468652073797374656d20636f6d706172656420746f2074686520636f6e66696775726564206d61782028604d61782a436f756e7460292e012106017d011c384d61784e6f6d696e6174696f6e7310101000000004b4204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e7320706572206e6f6d696e61746f722e30486973746f72794465707468101054000000508c204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e00e820466f6c6c6f77696e6720696e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d090120486973746f727944657074682c2063757272656e745f6572615d603a2060457261735374616b657273602c2060457261735374616b657273436c6970706564602c050120604572617356616c696461746f725072656673602c20604572617356616c696461746f72526577617264602c206045726173526577617264506f696e7473602cac206045726173546f74616c5374616b65602c206045726173537461727453657373696f6e496e646578602c8420605374616b696e674c65646765722e636c61696d65645f72657761726473602e00e4204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e2ef820492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203ec42063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e001101204966206d6967726174696e6720616e206578697374696e672070616c6c65742066726f6d2073746f726167652076616c756520746f20636f6e6669672076616c75652cec20746869732073686f756c642062652073657420746f2073616d652076616c7565206f72206772656174657220617320696e2073746f726167652e001501204e6f74653a2060486973746f727944657074686020697320757365642061732074686520757070657220626f756e6420666f72207468652060426f756e646564566563601101206974656d20605374616b696e674c65646765722e636c61696d65645f72657761726473602e2053657474696e6720746869732076616c7565206c6f776572207468616ed820746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865150120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e2061206d6967726174696f6e2ef020546865207465737420607265647563696e675f686973746f72795f64657074685f616272757074602073686f77732074686973206566666563742e3853657373696f6e735065724572611010030000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e10100700000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e48536c61736844656665724475726174696f6e101004000000100101204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e000d0120546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c617368657315012073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e804d61784e6f6d696e61746f72526577617264656450657256616c696461746f7210100004000010f820546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320726577617264656420666f7220656163682076616c696461746f722e00510120466f7220656163682076616c696461746f72206f6e6c79207468652060244d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732063616e390120636c61696d207468656972207265776172642e2054686973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e484d6178556e6c6f636b696e674368756e6b7310102000000028050120546865206d6178696d756d206e756d626572206f662060756e6c6f636b696e6760206368756e6b732061205b605374616b696e674c6564676572605d2063616e090120686176652e204566666563746976656c792064657465726d696e657320686f77206d616e7920756e6971756520657261732061207374616b6572206d61792062653820756e626f6e64696e6720696e2e00f8204e6f74653a20604d6178556e6c6f636b696e674368756e6b736020697320757365642061732074686520757070657220626f756e6420666f722074686501012060426f756e64656456656360206974656d20605374616b696e674c65646765722e756e6c6f636b696e67602e2053657474696e6720746869732076616c75650501206c6f776572207468616e20746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865090120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e20612072756e74696d650501206d6967726174696f6e2e20546865207465737420607265647563696e675f6d61785f756e6c6f636b696e675f6368756e6b735f616272757074602073686f7773342074686973206566666563742e01490911204f6666656e63657301204f6666656e636573081c5265706f727473000104052c4d09040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e64657801010805055109a5040400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e00018d010000121c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100fc0400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e67656401003901040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010055090400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010031060400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050049060400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e6572000104055d0900040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e014506019101000165091348417574686f72697479446973636f766572790000000000141c4772616e647061011c4772616e647061181453746174650100690904000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500006d09040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c65640000b5030400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010028200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405281004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e0151060195010c384d6178417574686f7269746965731010a0860100045c204d617820417574686f72697469657320696e20757365344d61784e6f6d696e61746f727310100004000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e584d6178536574496453657373696f6e456e74726965732820150000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e0175091528486973746f726963616c00000000001620496d4f6e6c696e650120496d4f6e6c696e651038486561727462656174416674657201001010000000002c1d012054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e74242073657373696f6e2e0025012041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c350120726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f721901207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f207468617420746865a820686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e00390120546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2d012070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c642062650101206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e104b65797301007909040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e485265636569766564486561727462656174730001080505b5033901040004350120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206053657373696f6e496e6465786020616e64206041757468496e646578602e38417574686f726564426c6f636b730101080505190910100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e017d0601a9010440556e7369676e65645072696f726974792820ffffffffffffffff10f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e018109176052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100850904000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e0000000018105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e018d0601cd010001890919144173736574011441737365748460556e697175655469636b6572526567697374726174696f6e0001040221018d090400042901204d61702065616368205b605469636b6572605d20746f2069747320726567697374726174696f6e2064657461696c7320285b605469636b6572526567697374726174696f6e605d292e305469636b6572436f6e666967010091090800000425012052657475726e73205b605469636b6572526567697374726174696f6e436f6e666967605d20666f7220617373657373696e672069662061207469636b65722069732076616c69642e1841737365747300010402a89509040004e4204d6170732065616368205b6041737365744964605d20746f2069747320756e6465726c696e67205b60417373657444657461696c73605d2e2841737365744e616d657300010402a8e101040004d8204d6170732065616368205b6041737365744964605d20746f2069747320756e6465726c696e67205b6041737365744e616d65605d2e2442616c616e63654f660101080206990918400000000000000000000000000000000004190120547261636b732074686520746f74616c205b6042616c616e6365605d20666f722065616368205b6041737365744964605d20706572205b604964656e746974794964605d2e4041737365744964656e7469666965727301010402a8e5010400041901204d6170732065616368205b6041737365744964605d20746f20697473206173736574206964656e7469666965727320285b6041737365744964656e746966696572605d292e50437573746f6d54797065496453657175656e63650100d90110000000000cc420546865206e65787420604173736574547970653a3a437573746f6d6020494420696e207468652073657175656e63652e00d0204e756d6265727320696e207468652073657175656e63652073746172742066726f6d203120726174686572207468616e20302e2c437573746f6d547970657301010405d90130040004f8204d61707320637573746f6d20617373657420747970652069647320746f20746865207265676973746572656420737472696e6720636f6e74656e74732e48437573746f6d5479706573496e76657273650001040230d901040004610120496e7665727365206d6170206f662060437573746f6d5479706573602c2066726f6d207265676973746572656420737472696e6720636f6e74656e747320746f20637573746f6d2061737365742074797065206964732e3046756e64696e67526f756e6401010402a8f9010400044101204d6170732065616368205b6041737365744964605d20746f20746865206e616d65206f662069747320666f756e64696e6720726f756e6420285b6046756e64696e67526f756e644e616d65605d292e50497373756564496e46756e64696e67526f756e64010104029d091840000000000000000000000000000000000479012054686520746f74616c205b6042616c616e6365605d206f6620746f6b656e732069737375656420696e20616c6c207265636f726465642066756e64696e6720726f756e647320285b6046756e64696e67526f756e644e616d65605d292e1846726f7a656e01010402a8390104000449012052657475726e7320607472756560206966207472616e736665727320666f7220746865206173736574206172652066726f7a656e2e204f74686572776973652c2072657475726e73206066616c7365602e384173736574446f63756d656e74730001080205a10901020400049c20416c6c205b60446f63756d656e74605d20617474616368656420746f20616e2061737365742e604173736574446f63756d656e7473496453657175656e636501010402a8fd01100000000004a0205b60446f63756d656e744964605d20636f756e74657220706572205b6041737365744964605d2e4c41737365744d6574616461746156616c7565730001080205a5092d020400047c204d65746174646174612076616c75657320666f7220616e2061737365742e6441737365744d6574616461746156616c756544657461696c730001080205a5093502040004a02044657461696c7320666f7220616e2061737365742773204d657461646174612076616c7565732e6c41737365744d657461646174614c6f63616c4e616d65546f4b65790001080202a909410204000488204173736574204d65746164617461204c6f63616c204e616d65202d3e204b65792e7041737365744d65746164617461476c6f62616c4e616d65546f4b6579000104023d025d020400048c204173736574204d6574616461746120476c6f62616c204e616d65202d3e204b65792e6c41737365744d657461646174614c6f63616c4b6579546f4e616d650001080205ad093d0204000488204173736574204d65746164617461204c6f63616c204b6579202d3e204e616d652e7041737365744d65746164617461476c6f62616c4b6579546f4e616d65000104055d023d020400048c204173736574204d6574616461746120476c6f62616c204b6579202d3e204e616d652e5c41737365744d657461646174614c6f63616c53706563730001080205ad09450204000480204173736574204d65746164617461204c6f63616c204b65792073706563732e6041737365744d65746164617461476c6f62616c5370656373000104055d02450204000484204173736574204d6574616461746120476c6f62616c204b65792073706563732e6c4173736574734578656d707446726f6d41666669726d6174696f6e01010402a839010400041d012041206c697374206f66206173736574732074686174206578656d707420616c6c2075736572732066726f6d2061666669726d696e672069747320726563656976656d656e742e40507265417070726f76656441737365740101080602b1093901040004250120416c6c20617373657473207468617420646f6e2774206e65656420616e2061666669726d6174696f6e20746f20626520726563656976656420627920616e206964656e746974792e484d616e6461746f72794d65646961746f727301010402a89906040004c820546865206c697374206f66206d616e6461746f7279206d65646961746f727320666f72206576657279207469636b65722e7043757272656e7441737365744d657461646174614c6f63616c4b657900010402a84102040004e420546865206c617374205b6041737365744d657461646174614c6f63616c4b6579605d207573656420666f72205b6041737365744964605d2e7443757272656e7441737365744d65746164617461476c6f62616c4b657900005d02040004ec20546865206c617374205b6041737365744d65746164617461476c6f62616c4b6579605d207573656420666f72206120676c6f62616c206b65792e485469636b6572734f776e65644279557365720101080602b50939010400047420416c6c207469636b657273206f776e6564206279206120757365722e645365637572697479546f6b656e734f776e65644279557365720101080602b10939010400047020416c6c20617373657473206f776e6564206279206120757365722e34417373657449645469636b657200010402a82101040004d8204d61707320616c6c205b6041737365744964605d207468617420617265206d617070656420746f2061205b605469636b6572605d2e345469636b657241737365744964000104022101a8040004dc204d61707320616c6c205b605469636b6572605d207468617420617265206c696e6b656420746f20616e205b6041737365744964605d2e2841737365744e6f6e6365010104060028200000000000000000040101204120706572206163636f756e74206e6f6e63652074686174206973207573656420666f722067656e65726174696e6720616e205b6041737365744964605d2e3853746f7261676556657273696f6e0100b909040004442053746f726167652076657273696f6e2e01910601d101184841737365744e616d654d61784c656e6774681010800000000494204d6178206c656e67746820666f7220746865206e616d65206f6620616e2061737365742e6446756e64696e67526f756e644e616d654d61784c656e6774681010800000000498204d6178206c656e677468206f66207468652066756e64696e6720726f756e64206e616d652e6841737365744d657461646174614e616d654d61784c656e67746810100001000004b4204d6178206c656e67746820666f7220746865204173736574204d657461646174612074797065206e616d652e6c41737365744d6574616461746156616c75654d61784c656e67746810100020000004a4204d6178206c656e67746820666f7220746865204173736574204d657461646174612076616c75652e7441737365744d65746164617461547970654465664d61784c656e67746810100020000004cc204d6178206c656e67746820666f7220746865204173736574204d65746164617461207479706520646566696e6974696f6e2e444d617841737365744d65646961746f727310100400000004a8204d6178696d756d206e756d626572206f66206d65646961746f727320666f7220616e2061737365742e01bd091a4c4361706974616c446973747269627574696f6e014c4361706974616c446973747269627574696f6e0c34446973747269627574696f6e73000104028102890204000c350120416c6c206361706974616c20646973747269627574696f6e732c207469656420746f207468656972207265737065637469766520636f72706f7261746520616374696f6e732028434173292e005c20284341496429203d3e20446973747269627574696f6e28486f6c6465725061696401010402c109390104000c8c2048617320616e20617373657420686f6c646572206265656e2070616964207965743f00a42028434149642c2044494429202d3e2057617320444944207061696420696e2074686520434149643f3853746f7261676556657273696f6e0100c509040004442053746f726167652076657273696f6e2e019d060179020001c9091b28436865636b706f696e740128436865636b706f696e74302c546f74616c537570706c790101080205cd091840000000000000000000000000000000000cb420546f74616c20737570706c79206f662074686520746f6b656e2061742074686520636865636b706f696e742e00010120285b6041737365744964605d2c20636865636b706f696e74496429202d3e20746f74616c20737570706c7920617420676976656e20636865636b706f696e741c42616c616e63650101080205d1091840000000000000000000000000000000000c882042616c616e6365206f66206120444944206174206120636865636b706f696e742e00190120285b6041737365744964605d2c206469642c20636865636b706f696e7420494429202d3e2042616c616e6365206f66206120444944206174206120636865636b706f696e7450436865636b706f696e74496453657175656e636501010402a89502200000000000000000108c20436865636b706f696e74732049442067656e657261746f722073657175656e63652ea8204944206f6620666972737420636865636b706f696e74206973203120696e7374656164206f6620302e009020285b6041737365744964605d29202d3e206e6f2e206f6620636865636b706f696e74733842616c616e63655570646174657301010802059909d509040008bc20436865636b706f696e747320776865726520612044494427732062616c616e63652077617320757064617465642e050120285b6041737365744964605d2c2064696429202d3e205b636865636b706f696e7420494420776865726520757365722062616c616e6365206368616e6765645d2854696d657374616d70730101080205cd0928200000000000000000185c20436865636b706f696e742074696d657374616d70732e000901204576657279207363686564756c652d6f726967696e6174656420636865636b706f696e74206d6170732069747320494420746f20697473206475652074696d652e210120457665727920636865636b706f696e74206d616e75616c6c792063726561746564206d6170732069747320494420746f207468652074696d65206f66207265636f7264696e672e00e420285b6041737365744964605d29202d3e2028636865636b706f696e7420494429202d3e20636865636b706f696e742074696d657374616d70585363686564756c65734d6178436f6d706c657869747901002820000000000000000004e420546865206d6178696d756d20636f6d706c657869747920616c6c6f77656420666f7220616e2061737365742773207363686564756c65732e485363686564756c65496453657175656e636501010402a899022000000000000000000cb020436865636b706f696e74207363686564756c652049442073657175656e636520666f72206173736574732e007420285b6041737365744964605d29202d3e207363686564756c65204944544361636865644e657874436865636b706f696e747300010402a8d909040014a820436163686564206e65787420636865636b706f696e7420666f722065616368207363686564756c652e002d012054686973206973207573656420746f20717569636b6c792066696e6420746865206e65787420636865636b706f696e742066726f6d20612061737365742773207363686564756c65732e008820285b6041737365744964605d29202d3e206e65787420636865636b706f696e7473505363686564756c6564436865636b706f696e74730001080205e9099d0204000c5c205363686564756c656420636865636b706f696e74732e00cc20285b6041737365744964605d2c207363686564756c6520494429202d3e207363686564756c6520636865636b706f696e7473405363686564756c65526566436f756e740101080205e90910100000000020010120486f77206d616e7920227374726f6e6722207265666572656e6365732061726520746865726520746f206120676976656e20605363686564756c654964603f00fc205468652070726573656e6365206f66206120227374726f6e6722207265666572656e63652c20696e207468652073656e7365206f66206052633c543e602ce020656e7461696c73207468617420746865207265666572656e636564207363686564756c652063616e6e6f742062652072656d6f7665642ed820546875732c206173206c6f6e6720617320607374726f6e675f7265665f636f756e74287363686564756c655f696429203e2030602cac206072656d6f76655f7363686564756c65287363686564756c655f696429602077696c6c206572726f722e00bc20285b6041737365744964605d2c207363686564756c6520494429202d3e207374726f6e672072656620636f756e74385363686564756c65506f696e74730101080205e909d50904000cc420416c6c2074686520636865636b706f696e7473206120676976656e207363686564756c65206f726967696e617465642e00b820285b6041737365744964605d2c207363686564756c6520494429202d3e205b636865636b706f696e742049445d3853746f7261676556657273696f6e0100ed09040004442053746f726167652076657273696f6e2e01a5060191020001f1091c44436f6d706c69616e63654d616e616765720144436f6d706c69616e63654d616e616765720c404173736574436f6d706c69616e63657301010402a8f50908000004f420436f6d706c69616e636520666f7220616e20617373657420285b6041737365744964605d202d3e205b604173736574436f6d706c69616e6365605d294854727573746564436c61696d49737375657201010402a8c502040004f0204c697374206f66207472757374656420636c61696d20697373756572205b6041737365744964605d202d3e20497373756572204964656e746974793853746f7261676556657273696f6e0100f909040004442053746f726167652076657273696f6e2e01a90601a90204584d6178436f6e646974696f6e436f6d706c6578697479101032000000046d0120546865206d6178696d756d20636c61696d20726561647320746861742061726520616c6c6f77656420746f2068617070656e20696e20776f7273742063617365206f66206120636f6e646974696f6e207265736f6c7574696f6e01fd091d3c436f72706f72617465416374696f6e013c436f72706f72617465416374696f6e24404d617844657461696c734c656e67746801001010000000001c5d012044657465726d696e657320746865206d6178696d756d206e756d626572206f6620627974657320746861742074686520667265652d666f726d206064657461696c7360206f6620612043412063616e2073746f72652e002901204e6f746520746861742074686973206973206e6f7420746865206e756d626572206f662060636861726073206f7220746865206e756d626572206f66205b6772617068656d65735d2e4101205768696c652074686973206d617920626520756e6e61747572616c20696e207465726d73206f662068756d616e20756e6465727374616e64696e67206f66206120746578742773206c656e6774682c6501206974206d6f726520636c6f73656c79207265666c656374732061637475616c2073746f7261676520636f73747320286027612760206973206368656170657220746f2073746f7265207468616e20616e20656d6f6a69292e00d0205b6772617068656d65735d3a2068747470733a2f2f656e2e77696b6970656469612e6f72672f77696b692f4772617068656d655c44656661756c745461726765744964656e74697469657301010402a8e10208000110ec20546865206964656e7469746965732074617267657465642062792064656661756c7420666f722043417320666f7220746869732061737365742c8c2065697468657220746f206265206578636c75646564206f7220696e636c756465642e007c202841737365744964203d3e20746172676574206964656e746974696573295444656661756c7457697468686f6c64696e6754617801010402a88d02100000000020a901205468652064656661756c7420616d6f756e74206f662074617820746f2077697468686f6c6420282277697468686f6c64696e6720746178222c2057542920666f722074686973206173736574207768656e20646973747269627574696e67206469766964656e64732e00350120546f20756e6465727374616e642077697468686f6c64696e67207461782c20652e672e2c206c6574277320617373756d65207468617420796f7520686f6c642041434d45207368617265732ec42041434d45206e6f77206465636964657320746f2064697374726962757465203130302053454b20746f20416c6963652e590120416c696365206c6976657320696e2053776564656e2c20736f20536b617474657665726b6574202874686520537765646973682074617820617574686f72697479292077616e747320333025206f6620746861742e5d01205468656e2074686f736520313030202a2033302520617265207769746868656c642066726f6d20416c6963652c20616e642041434d452077696c6c2073656e64207468656d20746f20536b617474657665726b65742e006c202841737365744964203d3e202520746f2077697468686f6c64294444696457697468686f6c64696e6754617801010402a801030400104d012054686520616d6f756e74206f662074617820746f2077697468686f6c6420282277697468686f6c64696e6720746178222c2057542920666f722061206365727461696e20417373657449642078204449442e6d0120496620616e20656e7472792065786973747320666f722061206365727461696e204449442c206974206f7665727269646573207468652064656661756c7420696e206044656661756c7457697468686f6c64696e67546178602e008c202841737365744964203d3e205b286469642c202520746f2077697468686f6c64295d304341496453657175656e636501010402a88502100000000008b820546865206e657874207065722d60417373657449646020434120494420696e207468652073657175656e63652e5101205468652066756c6c20494420697320646566696e6564206173206120636f6d62696e6174696f6e206f662060417373657449646020616e642061206e756d62657220696e20746869732073657175656e63652e40436f72706f72617465416374696f6e730001080205010aed020400146c20416c6c207265636f72646564204341732074687573206661722ea4204f6e6c792067656e6572696320696e666f726d6174696f6e2069732073746f72656420686572652e7d01205370656369666963206043414b696e6460732c20652e672e2c2062656e656669747320616e6420636f72706f726174652062616c6c6f74732c206d617920757365206164646974696f6e616c206f6e2d636861696e2073746f726167652e00b8202841737365744964203d3e206c6f63616c204944203d3e2074686520636f72706f7261746520616374696f6e29244341446f634c696e6b0101040281020d03040014d0204173736f63696174696f6e732066726f6d2043417320746f2060446f63756d656e74607320766961207468656972204944732e5c202843414964203d3e205b446f63756d656e7449645d29000901205468652060436f72706f72617465416374696f6e7360206d61702073746f726573206041737365744964203d3e204c6f63616c4964203d3e20546865204341602c290120736f2077652063616e20696e666572206041737365744964203d3e2043414964602e205468657265666f72652c20776520646f6e2774206e656564206120646f75626c65206d61702e1c44657461696c730101040281020903040008e8204173736f6369617465732064657461696c7320696e20667265652d666f726d207465787420776974682061204341206279206974732049442e50202843414964203d3e20434144657461696c73293853746f7261676556657273696f6e0100050a040004442053746f726167652076657273696f6e2e01ad0601dd0208304d61785461726765744964731010e803000004cc204d6178206e756d626572206f66204449442073706563696669656420696e20605461726765744964656e746974696573602e284d6178446964576874731010e803000004c4204d6178206e756d626572206f66207065722d4449442077697468686f6c64696e6720746178206f76657272696465732e01090a1e3c436f72706f7261746542616c6c6f74013c436f72706f7261746542616c6c6f741c144d65746173000104028102190304000c80204d65746164617461206f66206120636f72706f726174652062616c6c6f742e005420284341496429203d3e2042616c6c6f744d6574612854696d6552616e6765730001040281021503040010e42054696d652064657461696c73206f66206120636f72706f726174652062616c6c6f74206173736f636961746564207769746820612043412ed0205468652074696d657374616d70732064656e6f7465207768656e20766f74696e672073746172747320616e642073746f70732e006820284341496429203d3e2042616c6c6f7454696d6552616e6765404d6f74696f6e4e756d43686f696365730101040281020d0a040024c82053746f72657320686f77206d616e792063686f696365732074686572652061726520696e2065616368206d6f74696f6e2e00250120417420616c6c2074696d65732c2074686520696e76617269616e7420686f6c6473207468617420606d6f74696f6e5f63686f696365735b6964785d6020697320657175616c20746f310120606d657461732e756e7772617028292e6d6f74696f6e735b6964785d2e63686f696365732e6c656e2829602e20546861742069732c2074686973206973206a75737420612063616368652c1101207573656420746f2061766f6964206665746368696e6720616c6c20746865206d6f74696f6e732077697468207468656972206173736f6369617465642074657874732e0001012060753136602063686f696365732073686f756c64206265206d6f7265207468616e20656e6f75676820746f20666974207265616c207573652063617365732e00b020284341496429203d3e204e756d626572206f662063686f6963657320696e2065616368206d6f74696f6e2e0c5243560101040281023901040010dc2049732072616e6b65642063686f69636520766f74696e6720285243562920656e61626c656420666f7220746869732062616c6c6f743f650120466f7220616e20756e6465727374616e64696e67206f6620686f77205243562069732068616e646c65642c20736565206e6f7465206f6e206042616c6c6f74566f7465602773206066616c6c6261636b60206669656c642e003c20284341496429203d3e20626f6f6c1c526573756c7473010104028102110a04001cb02053746f7265732074686520746f74616c20766f74652074616c6c79206f6e20656163682063686f6963652e006820524356206973206e6f74206163636f756e74656420666f722cd02061732074686572652061726520746f6f206d616e792077616e747320746f20696e74657270726574207468652067726170682c9c20616e64206265636175736520697420776f756c64206e6f7420626520656666696369656e742e008420284341496429203d3e205b63757272656e7420766f746520776569676874735d14566f7465730101080206c1093903040018ac2053746f726573206561636820444944277320766f74657320696e206120676976656e2062616c6c6f742ef8205365652074686520646f63756d656e746174696f6e206f66206042616c6c6f74566f74656020666f72206e6f746573206f6e2073656d616e746963732e008420284341496429203d3e202844494429203d3e205b766f7465207765696768745d001d012055736572206d75737420656e746572203020766f746520776569676874206966207468657920646f6e27742077616e7420746f20766f746520666f7220612063686f6963652e3853746f7261676556657273696f6e0100150a040004442053746f726167652076657273696f6e2e01c5060111030001190a1f2c5065726d697373696f6e7300000000011d0a201050697073011050697073604c5072756e65486973746f726963616c5069707301003901040004dc2053657420746f2060747275656020696620686973746f726963616c20504950732064617461206d7573742062652072656d6f7665642e584d696e696d756d50726f706f73616c4465706f7369740100184000000000000000000000000000000000041d0120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f7220636f6d6d756e69747920504950206372656174696f6e2e5844656661756c74456e6163746d656e74506572696f6401001010000000000439012044656661756c7420656e6163746d656e7420706572696f6420746861742077696c6c2062652075736520616674657220612070726f706f73616c2069732061636365707465642062792047432e4050656e64696e6750697045787069727901005101040104ed01204e756d626572206f6620626c6f636b732069742077696c6c2074616b652c2061667465722061206050656e64696e67602050495020657870697265732c20617373756d696e6720697420686173206e6f74207472616e736974696f6e656420746f20616e6f74686572206050726f706f73616c5374617465602e3c4d6178506970536b6970436f756e740100080400048901204d6178696d756d2074696d65732061205049502063616e20626520736b6970706564206265666f72652074726967676572696e67206043616e6e6f74536b69705069706020696e2060656e6163745f736e617073686f745f726573756c7473602e384163746976655069704c696d6974010010100000000004b10120546865206d6178696d756d20616c6c6f776564206e756d62657220666f722061637469766520504950732e204f6e636520726561636865642c206e657720504950732063616e6e6f742062652070726f706f73656420627920636f6d6d756e697479206d656d626572732e34506970496453657175656e6365010055031000000000045c2050726f706f73616c2773206964656e7469666965722e48536e617073686f74496453657175656e6365010069031000000000045820536e6170686f742773206964656e7469666965722e38416374697665506970436f756e74010010100000000004a820546f74616c20636f756e74206f662070656e64696e67206f72207363686564756c656420504950732e4050726f706f73616c4d65746164617461000104055503210a040004d020546865205b60506970734d65746164617461605d20666f7220656163682070726f706f73616c20285b605069704964605d292e204465706f736974730001080505250a290a040004ec20416c6c206c6f636b6564205b604465706f736974496e666f605d20706572205b605069704964605d20666f722065616368206163636f756e742e2450726f706f73616c730001040555032d0a040004ac20546865205b60506970605d20666f7220656163682070726f706f73616c20285b605069704964605d292e3850726f706f73616c526573756c74010104055503310aa00000000000000000000000000000000000000000000000000000000000000000000000000000000004d020546865205b60566f74696e67526573756c74605d20666f7220656163682070726f706f73616c20285b605069704964605d292e3450726f706f73616c566f7465730001080505250a350a04000401012054686520566f74657320285b60566f7465605d2920666f7220656163682070726f706f73616c20285b605069704964605d2920706572206163636f756e742e34506970546f5363686564756c6500010405550310040004dc204d617073205049507320746f2074686520626c6f636b20617420776869636820746865792077696c6c2062652065786563757465642e244c697665517565756501006d03040018cc2041206c697665207072696f7269747920717565756520286c6f77657374207072696f7269747920617420696e646578203029a0206f662070656e64696e67205049507320757020746f2074686520616374697665206c696d69742ef4205072696f7269747920697320646566696e65642062792074686520607765696768746020696e207468652060536e617073686f74746564506970602e00450120556e6c696b652060536e617073686f745175657565602c2074686973207175657565206973206c6976652c2067657474696e6720757064617465642077697468206561636820766f746520636173742e2d012054686520736e617073686f74206973207468657265666f726520657373656e7469616c6c79206120706f696e742d696e2d74696d6520636c6f6e65206f6620746869732071756575652e34536e617073686f74517565756501006d03040014590120546865207072696f7269747920717565756520286c6f77657374207072696f7269747920617420696e646578203029206f6620504950732061742074686520706f696e74206f6620736e617073686f7474696e672ef4205072696f7269747920697320646566696e65642062792074686520607765696768746020696e207468652060536e617073686f74746564506970602e000901204120717565756564205049502063616e20626520736b69707065642e20446f696e6720736f2062756d70732074686520607069705f736b69705f636f756e74602e3501204f6e636520612028636f6e666967757261626c652920746872657368686f6c642069732065786365656465642c2061205049502063616e6e6f7420626520736b697070656420616761696e2e30536e617073686f744d6574610000390a0400046820546865205b60536e617073686f744d65746164617461605d2e30506970536b6970436f756e7401010405550308040008d020546865206e756d626572206f662074696d65732061206365727461696e2050495020686173206265656e20736b69707065642e3501204f6e636520612028636f6e666967757261626c652920746872657368686f6c642069732065786365656465642c2061205049502063616e6e6f7420626520736b697070656420616761696e2e34436f6d6d69747465655069707301008503040008d420416c6c206578697374696e672050495073207768657265207468652070726f706f736572206973206120636f6d6d69747465652e39012054686973206c6973742069732061206361636865206f6620616c6c2069647320696e206050726f706f73616c73602077697468206050726f706f7365723a3a436f6d6d6974746565285f29602e3850726f706f73616c5374617465730001040555036503040004d02054686520285b6050726f706f73616c5374617465605d29206f66206120676976656e2050495020285b605069704964605d292e3850656e64696e67526566756e647300010405550339010400049420416c6c20504950732074686174207374696c6c207265717569726520726566756e64732e3c566f746573546f42655072756e65640001040555033901040004c020416c6c20504950732074686174207374696c6c207265717569726520766f74657320746f206265207072756e65642e3853746f7261676556657273696f6e01003d0a040004442053746f726167652076657273696f6e2e01c90601490304604d6178526566756e6473416e64566f7465735072756e656410108000000004e020546865206d6178696d756d206e756d626572206f6620766f74657320746861742063616e206265207072756e6564206174206f6e63652e01410a2124506f7274666f6c696f0124506f7274666f6c696f344c4e657874506f7274666f6c696f4e756d6265720101040680f020010000000000000004cc20546865206e65787420706f7274666f6c696f2073657175656e6365206e756d626572206f6620616e206964656e746974792e28506f7274666f6c696f730001080605450a8d0304000c41012054686520736574206f66206578697374696e6720706f7274666f6c696f732077697468207468656972206e616d65732e2049662061206365727461696e2070616972206f6620612044494420616e64590120706f7274666f6c696f206e756d626572206d61707320746f20604e6f6e6560207468656e2073756368206120706f7274666f6c696f20646f65736e27742065786973742e20436f6e76657273656c792c206966206135012070616972206d61707320746f2060536f6d65286e616d652960207468656e2073756368206120706f7274666f6c696f2065786973747320616e642069732063616c6c656420606e616d65602e304e616d65546f4e756d6265720001080602490af0040008e420496e7665727365206d6170206f662060506f7274666f6c696f7360207573656420746f20656e737572652062696a6563746976697469792ca420616e6420756e697175656e657373206f66206e616d657320696e2060506f7274666f6c696f73602e4c506f7274666f6c696f4173736574436f756e7401010405e82820000000000000000004fc20486f77206d616e79206173736574732077697468206e6f6e2d7a65726f2062616c616e6365207468697320706f7274666f6c696f20636f6e7461696e732e58506f7274666f6c696f417373657442616c616e63657301010805024d0a1840000000000000000000000000000000000488205468652061737365742062616c616e636573206f6620706f7274666f6c696f732e54506f7274666f6c696f4c6f636b656441737365747301010805024d0a18400000000000000000000000000000000008a020416d6f756e74206f6620617373657473206c6f636b656420696e206120706f7274666f6c696f2e2d01205468657365206173736574732073686f7720757020696e20706f7274666f6c696f2062616c616e6365206275742063616e206e6f74206265207472616e7366657272656420617761792e48506f7274666f6c696f437573746f6469616e00010405e88004000481012054686520637573746f6469616e206f66206120706172746963756c617220706f7274666f6c696f2e204e6f6e6520696d706c696573207468617420746865206964656e74697479206f776e65722069732074686520637573746f6469616e2e4c506f7274666f6c696f73496e437573746f64790101080605510a390104000c550120547261636b7320616c6c2074686520706f7274666f6c696f7320696e20637573746f6479206f66206120706172746963756c6172206964656e746974792e204f6e6c79207573656420627920746865205549732ea501205768656e206074727565602069732073746f726564206173207468652076616c756520666f72206120676976656e2060286469642c2070696429602c206974206d65616e73207468617420607069646020697320696e20637573746f6479206f662060646964602ea501206066616c7365602076616c75657320617265206e65766572206578706c696369746c792073746f72656420696e20746865206d61702c20616e642061726520696e737465616420696e6665727265642062792074686520616273656e6365206f662061206b65792e30506f7274666f6c696f4e46540101080502550a39010400049420546865206e6674206173736f63696174656420746f2074686520706f7274666f6c696f2e48506f7274666f6c696f4c6f636b65644e46540101080502550a39010400049820416c6c206c6f636b6564206e667420666f72206120676976656e20706f7274666f6c696f2e54507265417070726f766564506f7274666f6c696f7301010805024d0a3901040004450120416c6c20706f7274666f6c696f73207468617420646f6e2774206e65656420746f2061666669726d2074686520726563656976656d656e74206f66206120676976656e205b6041737365744964605d2e44416c6c6f776564437573746f6469616e730101080606c50539010400043d0120437573746f6469616e7320616c6c6f77656420746f2063726561746520616e642074616b6520637573746f6479206f6620706f7274666f6c696f73206f6e20616e206964277320626568616c662e3853746f7261676556657273696f6e01005d0a040004442053746f726167652076657273696f6e2e01d90601890308604d61784e756d6265724f6646756e6769626c654d6f76657310100a000000043d01204d6178696d756d206e756d626572206f662066756e6769626c652061737365747320746861742063616e206265206d6f76656420696e20612073696e676c65207472616e736665722063616c6c2e504d61784e756d6265724f664e4654734d6f766573101064000000041101204d6178696d756d206e756d626572206f66204e46547320746861742063616e206265206d6f76656420696e20612073696e676c65207472616e736665722063616c6c2e01610a222c50726f746f636f6c466565012c50726f746f636f6c4665650820426173654665657301010405e90618400000000000000000000000000000000004150120546865206d617070696e67206f66206f7065726174696f6e206e616d657320746f2074686520626173652066656573206f662074686f7365206f7065726174696f6e732e2c436f656666696369656e740100ad03200100000001000000041501205468652066656520636f656666696369656e74206173206120706f73697469766520726174696f6e616c20286e756d657261746f722c2064656e6f6d696e61746f72292e01e50601a9030001650a23245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e64610101040510690a0400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504b503040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01ed0601b10308344d6178696d756d57656967687420400b00806e87740113cccccccccccccccc04290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101032000000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e01810a2428536574746c656d656e740128536574746c656d656e745c2456656e7565496e666f00010405c103850a0400049820496e666f2061626f757420612076656e75652e2076656e75655f6964202d3e2076656e75651c44657461696c7301010405c103c503040008e420467265652d666f726d20746578742061626f757420612076656e75652e2076656e75655f6964202d3e206056656e756544657461696c736060204f6e6c79206e656564656420666f72207468652055492e4456656e7565496e737472756374696f6e730101080505890a4d0100107020496e737472756374696f6e7320756e64657220612076656e75652e60204f6e6c79206e656564656420666f72207468652055492e00842076656e75655f6964202d3e20696e737472756374696f6e5f6964202d3e2028293056656e75655369676e65727301010805058d0a3901040004e4205369676e65727320616c6c6f776564206279207468652076656e75652e202876656e75655f69642c207369676e657229202d3e20626f6f6c285573657256656e7565730101080505910a4d010010782056656e7565732063726561746520627920616e206964656e746974792e60204f6e6c79206e656564656420666f72207468652055492e006c206964656e74697479202d3e2076656e75655f6964202d3e20282948496e737472756374696f6e44657461696c73010104057102950a34000000000000000000000000000411012044657461696c732061626f757420616e20696e737472756374696f6e2e20696e737472756374696f6e5f6964202d3e20696e737472756374696f6e5f64657461696c7350496e737472756374696f6e4c65675374617475730101080505990a9d0a040004310120537461747573206f662061206c656720756e64657220616e20696e737472756374696f6e2e2028696e737472756374696f6e5f69642c206c65675f696429202d3e204c656753746174757364496e737472756374696f6e41666669726d7350656e64696e6701010405710228200000000000000000048101204e756d626572206f662061666669726d6174696f6e732070656e64696e67206265666f726520696e737472756374696f6e2069732065786563757465642e20696e737472756374696f6e5f6964202d3e2061666669726d5f70656e64696e673c41666669726d7352656365697665640101080505a10aa50a040004990120547261636b732061666669726d6174696f6e7320726563656976656420666f7220616e20696e737472756374696f6e2e2028696e737472756374696f6e5f69642c20636f756e7465725f706172747929202d3e2041666669726d6174696f6e537461747573405573657241666669726d6174696f6e730101080505a90aa50a04000855012048656c70732061207573657220747261636b2074686569722070656e64696e6720696e737472756374696f6e7320616e642061666669726d6174696f6e7320286f6e6c79206e656564656420666f72205549292ed42028636f756e7465725f70617274792c20696e737472756374696f6e5f696429202d3e2041666669726d6174696f6e537461747573305265636569707473557365640101080502d9083901040004150120547261636b7320726564656d7074696f6e206f662072656365697074732e20287369676e65722c20726563656970745f75696429202d3e20726563656970745f757365643856656e756546696c746572696e6701010402a83901040004010220547261636b73206966206120746f6b656e2068617320656e61626c65642066696c746572696e672076656e75657320746861742063616e2063726561746520696e737472756374696f6e7320696e766f6c76696e6720746865697220746f6b656e2e2041737365744964202d3e2066696c746572696e675f656e61626c65643856656e7565416c6c6f774c6973740101080205ad0a3901040008c1012056656e75657320746861742061726520616c6c6f77656420746f2063726561746520696e737472756374696f6e7320696e766f6c76696e67206120706172746963756c61722061737365742e204f6e6c7920757365642069662066696c746572696e6720697320656e61626c65642e8c20285b6041737365744964605d2c2076656e75655f696429202d3e20616c6c6f7765643056656e7565436f756e7465720100c103200000000000000000041901204e756d626572206f662076656e75657320696e207468652073797374656d202849742773206f6e65206d6f7265207468616e207468652061637475616c206e756d6265722948496e737472756374696f6e436f756e74657201007102200000000000000000043101204e756d626572206f6620696e737472756374696f6e7320696e207468652073797374656d202849742773206f6e65206d6f7265207468616e207468652061637475616c206e756d6265722940496e737472756374696f6e4d656d6f73000104057102880400044420496e737472756374696f6e206d656d6f4c496e737472756374696f6e5374617475736573010104057102b10a040004e820496e737472756374696f6e2073746174757365732e20696e737472756374696f6e5f6964202d3e20496e737472756374696f6e5374617475733c496e737472756374696f6e4c6567730001080505990ae903040004ec204c65677320756e64657220616e20696e737472756374696f6e2e2028696e737472756374696f6e5f69642c206c65675f696429202d3e204c6567504f6666436861696e41666669726d6174696f6e730101080505990aa50a040004d90120547261636b73207468652061666669726d6174696f6e2073746174757320666f72206f6666636861696e206c65677320696e206120696e737472756374696f6e2e205b6028496e737472756374696f6e49642c204c6567496429605d202d3e205b6041666669726d6174696f6e537461747573605d504e756d6265724f6656656e75655369676e65727301010405c10310100000000004b420547261636b7320746865206e756d626572206f66207369676e65727320656163682076656e7565206861732e80496e737472756374696f6e4d65646961746f727341666669726d6174696f6e730101080506b50ab90a040004a8205468652073746174757320666f7220746865206d65646961746f72732061666669726d6174696f6e2e3c4c6f636b656454696d657374616d7000010405710228040004250120546865206d6f6d656e742074686520696e737472756374696f6e20776173206d6f76656420746f2074686520604c6f636b6564466f72457865637574696f6e60207374617475732e3853746f7261676556657273696f6e0100bd0a040004442053746f726167652076657273696f6e2e01f50601bd0320644d61784e756d6265724f6646756e6769626c6541737365747310100a000000041d01204d6178696d756d206e756d626572206f662066756e6769626c652061737365747320746861742063616e20626520696e20612073696e676c6520696e737472756374696f6e2e544d61784e756d6265724f664e4654735065724c656710100a00000004e4204d6178696d756d206e756d626572206f66204e46547320746861742063616e206265207472616e7366657272656420696e2061206c65672e3c4d61784e756d6265724f664e465473101064000000040501204d6178696d756d206e756d626572206f66204e46547320746861742063616e206265207472616e7366657272656420696e206120696e737472756374696f6e2e644d61784e756d6265724f664f6666436861696e41737365747310100a000000043501204d6178696d756d206e756d626572206f66206f66662d636861696e2061737365747320746861742063616e206265207472616e7366657272656420696e206120696e737472756374696f6e2e544d61784e756d6265724f66506f7274666f6c696f731010dc0000000478204d6178696d756d206e756d626572206f6620706f7274666f6c696f732e5c4d61784e756d6265724f6656656e75655369676e6572731010320000000484204d6178696d756d206e756d626572206f662076656e7565207369676e6572732e5c4d6178496e737472756374696f6e4d65646961746f7273101004000000046d01204d6178696d756d206e756d626572206d65646961746f727320696e2074686520696e737472756374696f6e206c6576656c20287468697320646f6573206e6f7420696e636c756465206173736574206d65646961746f7273292e444d6178696d756d4c6f636b506572696f64282000f915000000000004710120546865206d6178696d756d2074696d6520706572696f64207468617420616e20696e737472756374696f6e2063616e2062652068656c6420696e2074686520604c6f636b6564466f72457865637574696f6e60207374617475732e01c10a25285374617469737469637301285374617469737469637314404163746976654173736574537461747301010402a8c50a040004c4204d617073206120736574206f66205b605374617454797065605d20666f722065616368205b6041737365744964605d2e28417373657453746174730101080202c90a18400000000000000000000000000000000004342041737365742073746174732e6041737365745472616e73666572436f6d706c69616e63657301010402a8d10a08000004d820546865205b6041737365745472616e73666572436f6d706c69616e6365605d20666f722065616368205b6041737365744964605d2e7c5472616e73666572436f6e646974696f6e4578656d7074456e7469746965730101080202d90a3901040004c420456e746974696573206578656d70742066726f6d2061205472616e7366657220436f6d706c69616e63652072756c652e3853746f7261676556657273696f6e0100dd0a0400046c2053746f72616765206d6967726174696f6e2076657273696f6e2e01250701ed0308404d61785374617473506572417373657410100a00000004c0204d6178696d756d20737461747320746861742063616e20626520656e61626c656420666f7220616e2041737365742e744d61785472616e73666572436f6e646974696f6e73506572417373657410100400000004f8204d6178696d756d207472616e7366657220636f6e646974696f6e7320746861742063616e20626520656e61626c656420666f7220616e2041737365742e01e10a260c53746f010c53746f142c46756e64726169736572730001080205e50a3904040008b020416c6c2066756e64726169736572732074686174206172652063757272656e746c792072756e6e696e672e9c2028417373657449642c2066756e647261697365725f696429202d3e2046756e647261697365723c46756e64726169736572436f756e7401010402a83104200000000000000000049c20546f74616c2066756e6472616973657273206372656174656420666f72206120746f6b656e2e3c46756e647261697365724e616d65730001080205e50a3504040008b4204e616d6520666f72207468652046756e647261697365722e204f6e6c792075736564206f6666636861696e2eb02028417373657449642c2066756e647261697365725f696429202d3e2046756e64726169736572206e616d655c46756e647261697365724f6666636861696e41737365740001080205e50a21010400041901204966207468652066756e6472616973657220737570706f727473206f66662d636861696e2066756e64696e67207061796d656e7473207573696e672072656365697074732e3853746f7261676556657273696f6e0100e90a0400046c2053746f72616765206d6967726174696f6e2076657273696f6e2e013507012d040001ed0a2720547265617375727900014907014d040001f10a281c5574696c697479011c5574696c69747904184e6f6e6365730101040500282000000000000000000858204e6f6e636520666f72206072656c61795f7478602e4420504f4c594d4553483a2061646465642e015507015104044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01f50a2910426173650001790701550404184d61784c656e10100008000010a020546865206d6178696d756d206c656e67746820676f7665726e696e672060546f6f4c6f6e67602e002d0120486f77206c656e677468732061726520636f6d707574656420746f20636f6d7061726520616761696e737420746869732076616c756520697320736974756174696f6e2062617365642e650120466f72206578616d706c652c20796f7520636f756c642068616c76652069742c20646f75626c652069742c20636f6d7075746520612073756d20666f7220736f6d652074726565206f6620737472696e67732c206574632e01f90a2a3845787465726e616c4167656e7473013845787465726e616c4167656e747318304147496453657175656e636501010402a83501100000000010a820546865206e657874207065722d617373657420414720494420696e207468652073657175656e63652e005101205468652066756c6c20494420697320646566696e6564206173206120636f6d62696e6174696f6e206f662060417373657449646020616e642061206e756d62657220696e20746869732073657175656e63652c90207768696368207374617274732066726f6d20312c20726174686572207468616e20302e1c4167656e744f660101080202b1094d0100040d01204d61707320616e206167656e742028604964656e746974794964602920746f20616c6c2061737365747320746865792062656c6f6e6720746f2c20696620616e792e3047726f75704f664167656e740001080205990931010400043d01204d617073206167656e74732028604964656e746974794964602920666f7220616e2060417373657449646020746f207768617420414720746865792062656c6f6e6720746f2c20696620616e792e344e756d46756c6c4167656e747301010402a810100000000004e4204d61707320616e2060417373657449646020746f20746865206e756d626572206f66206046756c6c60206167656e747320666f722069742e4047726f75705065726d697373696f6e730001080205fd0ab8040004650120466f7220637573746f6d20414773206f6620616e206041737365744964602c206d61707320746f2077686174207065726d697373696f6e7320616e206167656e7420696e207468617420414720776f756c6420686176652e3853746f7261676556657273696f6e0100010b040004442053746f726167652076657273696f6e2e017d07015d040001050b2b1c52656c61796572011c52656c6179657204245375627369646965730001040200090b040018ec20546865207375627369647920666f7220612060757365725f6b657960206966207468657920617265206265696e6720737562736964697365642c882061732061206d61702060757365725f6b657960203d3e206053756273696479602e0009012041206b65792063616e206f6e6c792068617665206f6e65207375627369647920617420612074696d652e2020546f206368616e67652073756273696469736572731d012061206b6579206e6565647320746f2063616c6c206072656d6f76655f706179696e675f6b65796020746f2072656d6f7665207468652063757272656e7420737562736964792ca4206265666f726520746865792063616e206163636570742061206e657720737562736964697365722e01810701610400010d0b2c24436f6e7472616374730124436f6e7472616374731c305072697374696e65436f6465000104062c110b040004cc2041206d617070696e672066726f6d206120636f6e7472616374277320636f6465206861736820746f2069747320636f64652e28436f6465496e666f4f66000104062c150b040004e02041206d617070696e672066726f6d206120636f6e7472616374277320636f6465206861736820746f2069747320636f646520696e666f2e144e6f6e6365010028200000000000000000581d0120546869732069732061202a2a6d6f6e6f746f6e69632a2a20636f756e74657220696e6372656d656e746564206f6e20636f6e747261637420696e7374616e74696174696f6e2e0005012054686973206973207573656420696e206f7264657220746f2067656e657261746520756e6971756520747269652069647320666f7220636f6e7472616374732e2901205468652074726965206964206f662061206e657720636f6e74726163742069732063616c63756c617465642066726f6d2068617368286163636f756e745f69642c206e6f6e6365292e350120546865206e6f6e63652069732072657175697265642062656361757365206f74686572776973652074686520666f6c6c6f77696e672073657175656e636520776f756c64206c65616420746f84206120706f737369626c6520636f6c6c6973696f6e206f662073746f726167653a006820312e204372656174652061206e657720636f6e74726163742e6c20322e205465726d696e6174652074686520636f6e74726163742efc20332e20496d6d6564696174656c792072656372656174652074686520636f6e74726163742077697468207468652073616d65206163636f756e745f69642e00450120546869732069732062616420626563617573652074686520636f6e74656e7473206f6620612074726965206172652064656c65746564206c617a696c7920616e64207468657265206d6967687420626559012073746f72616765206f6620746865206f6c6420696e7374616e74696174696f6e207374696c6c20696e206974207768656e20746865206e657720636f6e747261637420697320637265617465642e20506c656173655901206e6f746520746861742077652063616e2774207265706c6163652074686520636f756e7465722062792074686520626c6f636b206e756d6265722062656361757365207468652073657175656e63652061626f766551012063616e2068617070656e20696e207468652073616d6520626c6f636b2e20576520616c736f2063616e2774206b65657020746865206163636f756e7420636f756e74657220696e206d656d6f7279206f6e6c79490120626563617573652073746f7261676520697320746865206f6e6c792077617920746f20636f6d6d756e6963617465206163726f737320646966666572656e742065787472696e7369637320696e20746865302073616d6520626c6f636b2e001c2023204e6f7465003d0120446f206e6f742075736520697420746f2064657465726d696e6520746865206e756d626572206f6620636f6e7472616374732e20497420776f6e27742062652064656372656d656e74656420696664206120636f6e74726163742069732064657374726f7965642e38436f6e7472616374496e666f4f660001040500190b04000ca82054686520636f6465206173736f6369617465642077697468206120676976656e206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e3444656c6574696f6e51756575650001040510790a040010c8204576696374656420636f6e7472616374732074686174206177616974206368696c6420747269652064656c6574696f6e2e004901204368696c6420747269652064656c6574696f6e2069732061206865617679206f7065726174696f6e20646570656e64696e67206f6e2074686520616d6f756e74206f662073746f72616765206974656d7341012073746f72656420696e207361696420747269652e205468657265666f72652074686973206f7065726174696f6e20697320706572666f726d6564206c617a696c7920696e20606f6e5f69646c65602e5044656c6574696f6e5175657565436f756e7465720100310b200000000000000000084d0120412070616972206f66206d6f6e6f746f6e696320636f756e74657273207573656420746f20747261636b20746865206c617465737420636f6e7472616374206d61726b656420666f722064656c6574696f6ea820616e6420746865206c61746573742064656c6574656420636f6e747261637420696e2071756575652e4c4d6967726174696f6e496e50726f67726573730000350b04000861012041206d6967726174696f6e2063616e207370616e206163726f7373206d756c7469706c6520626c6f636b732e20546869732073746f7261676520646566696e6573206120637572736f7220746f20747261636b207468654d012070726f6772657373206f6620746865206d6967726174696f6e2c20656e61626c696e6720757320746f20726573756d652066726f6d20746865206c61737420636f6d706c6574656420706f736974696f6e2e01850701650428205363686564756c65390b6105040000000001000000040000800000001000000000100000000100002000000000400000000000087b140000d2fb1400182275c30c4d2a22dbf60c5d2aa25c1c00183a420b000c22060a000c5a9c170018caa6240018a6f0680018560f1500181a1415001822e81400180a85140018b65158003862f9110018910f00127b1601b4e104000361ea0485457a56587800286210f40028c658523c3127bd0c008ed20e001c690f0052f3433d9504a10c00e8049e8daa894930265f3a3d85040102045e61390d8504c903042699410da504350b042669493da504b10b042a28ff446127ce0abfb1e12aca2ec78d3529e6c839d03152a10f0003a9fe0f6559516282903f4928d90f00711200a28e180020051100ba223100207534002e001c0020c912008a3e1c0020a112005203fc0a3501f6a8df02a88ae87e0dc101655c04d6cc0a000c66211300a02e5009000cba291f3db9282e4b093d2128046820436f7374207363686564756c6520616e64206c696d6974732e384465706f73697450657242797465184060ea00000000000000000000000000001411012054686520616d6f756e74206f662062616c616e636520612063616c6c65722068617320746f2070617920666f7220656163682062797465206f662073746f726167652e001c2023204e6f7465002901204368616e67696e6720746869732076616c756520666f7220616e206578697374696e6720636861696e206d69676874206e65656420612073746f72616765206d6967726174696f6e2e4c44656661756c744465706f7369744c696d6974184000c027af0e00000000000000000000000445012046616c6c6261636b2076616c756520746f206c696d6974207468652073746f72616765206465706f7369742069662069742773206e6f74206265696e6720736574206279207468652063616c6c65722e384465706f7369745065724974656d1840f04902000000000000000000000000001405012054686520616d6f756e74206f662062616c616e636520612063616c6c65722068617320746f2070617920666f7220656163682073746f72616765206974656d2e001c2023204e6f7465002901204368616e67696e6720746869732076616c756520666f7220616e206578697374696e6720636861696e206d69676874206e65656420612073746f72616765206d6967726174696f6e2e70436f6465486173684c6f636b75704465706f73697450657263656e7479011000a3e111104501205468652070657263656e74616765206f66207468652073746f72616765206465706f73697420746861742073686f756c642062652068656c6420666f72207573696e67206120636f646520686173682e5d0120496e7374616e74696174696e67206120636f6e74726163742c206f722063616c6c696e67205b60636861696e5f657874656e73696f6e3a3a4578743a3a6164645f64656c65676174655f646570656e64656e6379605d49012070726f74656374732074686520636f64652066726f6d206265696e672072656d6f7665642e20496e206f7264657220746f2070726576656e7420616275736520746865736520616374696f6e7320617265c42070726f746563746564207769746820612070657263656e74616765206f662074686520636f6465206465706f7369742e284d6178436f64654c656e101000ec010014c020546865206d6178696d756d206c656e677468206f66206120636f6e747261637420636f646520696e2062797465732e005901205468652076616c75652073686f756c642062652063686f73656e206361726566756c6c792074616b696e6720696e746f20746865206163636f756e7420746865206f766572616c6c206d656d6f7279206c696d6974f020796f75722072756e74696d65206861732c2061732077656c6c20617320746865205b6d6178696d756d20616c6c6f7765642063616c6c737461636b5d012064657074685d28236173736f636961746564747970652e43616c6c537461636b292e204c6f6f6b20696e746f207468652060696e746567726974795f7465737428296020666f7220736f6d6520696e7369676874732e404d617853746f726167654b65794c656e10108000000004e020546865206d6178696d756d20616c6c6f7761626c65206c656e67746820696e20627974657320666f722073746f72616765206b6579732e5c4d617844656c6567617465446570656e64656e6369657310102000000008290120546865206d6178696d756d206e756d626572206f662064656c65676174655f646570656e64656e636965732074686174206120636f6e74726163742063616e206c6f636b2077697468cc205b60636861696e5f657874656e73696f6e3a3a4578743a3a6164645f64656c65676174655f646570656e64656e6379605d2e5c556e73616665556e737461626c65496e7465726661636539010400241101204d616b6520636f6e74726163742063616c6c61626c652066756e6374696f6e73206d61726b65642061732060235b756e737461626c655d6020617661696c61626c652e003d0120436f6e7472616374732074686174207573652060235b756e737461626c655d602066756e6374696f6e7320776f6e27742062652061626c6520746f2062652075706c6f6164656420756e6c657373450120746869732069732073657420746f206074727565602e2054686973206973206f6e6c79206d65616e7420666f7220746573746e65747320616e6420646576206e6f64657320696e206f7264657220746f78206578706572696d656e742077697468206e65772066656174757265732e00282023205761726e696e6700c020446f202a2a6e6f742a2a2073657420746f20607472756560206f6e2070726f64756374696f6e7320636861696e732e444d617844656275674275666665724c656e10100000200004c420546865206d6178696d756d206c656e677468206f66207468652064656275672062756666657220696e2062797465732e01490b2e44506f6c796d657368436f6e7472616374730144506f6c796d657368436f6e747261637473105043616c6c52756e74696d6557686974656c697374010104067d043901040004f42057686974656c697374206f662065787472696e7369637320616c6c6f77656420746f2062652063616c6c65642066726f6d20636f6e7472616374732e3853746f7261676556657273696f6e01004d0b040004442053746f726167652076657273696f6e2e384170694e657874557067726164650001040575049d070400040d012053746f7265732074686520636861696e2076657273696f6e20616e6420636f6465206861736820666f7220746865206e65787420636861696e20757067726164652e3843757272656e7441706948617368000104057504a107040004a82053746f7265732074686520636f6465206861736820666f72207468652063757272656e74206170692e0191070171040001510b2f20507265696d6167650120507265696d6167650824537461747573466f72000104062c550b0400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f72000104065d0b610b04000001a5070181040001650b300c4e6674010c4e667424304e756d6265724f664e4654730101080206990928200000000000000000049c2054686520746f74616c206e756d626572206f66204e46547320706572206964656e746974792e3c436f6c6c656374696f6e417373657401010402a8890420000000000000000004bc2054686520636f6c6c656374696f6e20696420636f72726573706f6e64696e6720746f20656163682061737365742e28436f6c6c656374696f6e010104028904690b6000000000000000000000000000000000000000000000000004c820416c6c20636f6c6c656374696f6e2064657461696c7320666f72206120676976656e20636f6c6c656374696f6e2069642e38436f6c6c656374696f6e4b6579730101040289046d0b040004d020416c6c206d616e6461746f7279206d65746164617461206b65797320666f72206120676976656e20636f6c6c656374696f6e2e344d6574616461746156616c75650101080202710b2d02040004450120546865206d657461646174612076616c7565206f6620616e206e667420676976656e2069747320636f6c6c656374696f6e2069642c20746f6b656e20696420616e64206d65746164617461206b65792e404e465473496e436f6c6c656374696f6e01010402a82820000000000000000004a82054686520746f74616c206e756d626572206f66204e46547320696e206120636f6c6c656374696f6e2e204e46544f776e65720001080202590ae80400046c20547261636b7320746865206f776e6572206f6620616e204e46543043757272656e744e46544964000104028904a5030400048820546865206c61737420604e4654496460207573656420666f7220616e204e46542e4c43757272656e74436f6c6c656374696f6e496400008904040004c820546865206c61737420604e4654436f6c6c656374696f6e496460207573656420666f72206120636f6c6c656374696f6e2e01a90701850408644d61784e756d6265724f66436f6c6c656374696f6e4b6579730804ff00504d61784e756d6265724f664e465473436f756e7410100a0000000001790b3168456c656374696f6e50726f76696465724d756c746950686173650168456c656374696f6e50726f76696465724d756c746950686173652814526f756e64010010100100000018ac20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e00550120546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c6c20646961676e6f7374696373206f66207468652070616c6c65742e004d012054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e3043757272656e745068617365010099040400043c2043757272656e742070686173652e38517565756564536f6c7574696f6e00007d0b04000c3d012043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e006020416c7761797320736f727465642062792073636f72652e20536e617073686f740000850b04000c7020536e617073686f742064617461206f662074686520726f756e642e005d01205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e38446573697265645461726765747300001004000ccc2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e40536e617073686f744d6574616461746100009d0804000c9820546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e645369676e65645375626d697373696f6e4e657874496e646578010010100000000024010120546865206e65787420696e64657820746f2062652061737369676e656420746f20616e20696e636f6d696e67207369676e6564207375626d697373696f6e2e007501204576657279206163636570746564207375626d697373696f6e2069732061737369676e6564206120756e6971756520696e6465783b207468617420696e64657820697320626f756e6420746f207468617420706172746963756c61726501207375626d697373696f6e20666f7220746865206475726174696f6e206f662074686520656c656374696f6e2e204f6e20656c656374696f6e2066696e616c697a6174696f6e2c20746865206e65787420696e6465782069733020726573657420746f20302e0069012057652063616e2774206a7573742075736520605369676e65645375626d697373696f6e496e64696365732e6c656e2829602c206265636175736520746861742773206120626f756e646564207365743b20706173742069747359012063617061636974792c2069742077696c6c2073696d706c792073617475726174652e2057652063616e2774206a7573742069746572617465206f76657220605369676e65645375626d697373696f6e734d6170602cf4206265636175736520697465726174696f6e20697320736c6f772e20496e73746561642c2077652073746f7265207468652076616c756520686572652e5c5369676e65645375626d697373696f6e496e64696365730100910b0400186d01204120736f727465642c20626f756e64656420766563746f72206f6620602873636f72652c20626c6f636b5f6e756d6265722c20696e64657829602c20776865726520656163682060696e6465786020706f696e747320746f2061782076616c756520696e20605369676e65645375626d697373696f6e73602e007101205765206e65766572206e65656420746f2070726f63657373206d6f7265207468616e20612073696e676c65207369676e6564207375626d697373696f6e20617420612074696d652e205369676e6564207375626d697373696f6e7375012063616e206265207175697465206c617267652c20736f2077652772652077696c6c696e6720746f207061792074686520636f7374206f66206d756c7469706c6520646174616261736520616363657373657320746f206163636573732101207468656d206f6e6520617420612074696d6520696e7374656164206f662072656164696e6720616e64206465636f64696e6720616c6c206f66207468656d206174206f6e63652e505369676e65645375626d697373696f6e734d617000010405109d0b04001c7420556e636865636b65642c207369676e656420736f6c7574696f6e732e00690120546f676574686572207769746820605375626d697373696f6e496e6469636573602c20746869732073746f726573206120626f756e64656420736574206f6620605369676e65645375626d697373696f6e7360207768696c65ec20616c6c6f77696e6720757320746f206b656570206f6e6c7920612073696e676c65206f6e6520696e206d656d6f727920617420612074696d652e0069012054776f78206e6f74653a20746865206b6579206f6620746865206d617020697320616e206175746f2d696e6372656d656e74696e6720696e6465782077686963682075736572732063616e6e6f7420696e7370656374206f72f4206166666563743b2077652073686f756c646e2774206e65656420612063727970746f67726170686963616c6c7920736563757265206861736865722e544d696e696d756d556e7472757374656453636f7265000095040400105d0120546865206d696e696d756d2073636f7265207468617420656163682027756e747275737465642720736f6c7574696f6e206d7573742061747461696e20696e206f7264657220746f20626520636f6e7369646572656428206665617369626c652e00b82043616e206265207365742076696120607365745f6d696e696d756d5f756e747275737465645f73636f7265602e01c907018d045034556e7369676e6564506861736510104b0000000480204475726174696f6e206f662074686520756e7369676e65642070686173652e2c5369676e656450686173651010000000000478204475726174696f6e206f6620746865207369676e65642070686173652e544265747465725369676e65645468726573686f6c6479011000000000084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061737820226265747465722220696e20746865205369676e65642070686173652e5c426574746572556e7369676e65645468726573686f6c64790110a0860100084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061738020226265747465722220696e2074686520556e7369676e65642070686173652e384f6666636861696e52657065617410100500000010b42054686520726570656174207468726573686f6c64206f6620746865206f6666636861696e20776f726b65722e00610120466f72206578616d706c652c20696620697420697320352c2074686174206d65616e732074686174206174206c65617374203520626c6f636b732077696c6c20656c61707365206265747765656e20617474656d7074738420746f207375626d69742074686520776f726b6572277320736f6c7574696f6e2e3c4d696e657254785072696f726974792820feffffffffffff7f04250120546865207072696f72697479206f662074686520756e7369676e6564207472616e73616374696f6e207375626d697474656420696e2074686520756e7369676e65642d7068617365505369676e65644d61785375626d697373696f6e731010000000001ce4204d6178696d756d206e756d626572206f66207369676e6564207375626d697373696f6e7320746861742063616e206265207175657565642e005501204974206973206265737420746f2061766f69642061646a757374696e67207468697320647572696e6720616e20656c656374696f6e2c20617320697420696d706163747320646f776e73747265616d2064617461650120737472756374757265732e20496e20706172746963756c61722c20605369676e65645375626d697373696f6e496e64696365733c543e6020697320626f756e646564206f6e20746869732076616c75652e20496620796f75f42075706461746520746869732076616c756520647572696e6720616e20656c656374696f6e2c20796f75205f6d7573745f20656e7375726520746861744d0120605369676e65645375626d697373696f6e496e64696365732e6c656e282960206973206c657373207468616e206f7220657175616c20746f20746865206e65772076616c75652e204f74686572776973652cf020617474656d70747320746f207375626d6974206e657720736f6c7574696f6e73206d617920636175736520612072756e74696d652070616e69632e3c5369676e65644d6178576569676874200800001494204d6178696d756d20776569676874206f662061207369676e656420736f6c7574696f6e2e005d01204966205b60436f6e6669673a3a4d696e6572436f6e666967605d206973206265696e6720696d706c656d656e74656420746f207375626d6974207369676e656420736f6c7574696f6e7320286f757473696465206f663d0120746869732070616c6c6574292c207468656e205b604d696e6572436f6e6669673a3a736f6c7574696f6e5f776569676874605d206973207573656420746f20636f6d7061726520616761696e73743020746869732076616c75652e405369676e65644d6178526566756e647310100000000004190120546865206d6178696d756d20616d6f756e74206f6620756e636865636b656420736f6c7574696f6e7320746f20726566756e64207468652063616c6c2066656520666f722e405369676e656452657761726442617365184000000000000000000000000000000000048820426173652072657761726420666f722061207369676e656420736f6c7574696f6e445369676e65644465706f7369744261736518400000000000000000000000000000000004902042617365206465706f73697420666f722061207369676e656420736f6c7574696f6e2e445369676e65644465706f7369744279746518400000000000000000000000000000000004a0205065722d62797465206465706f73697420666f722061207369676e656420736f6c7574696f6e2e4c5369676e65644465706f73697457656967687418400000000000000000000000000000000004a8205065722d776569676874206465706f73697420666f722061207369676e656420736f6c7574696f6e2e444d6178456c656374696e67566f746572731010409c00000c5d0120546865206d6178696d756d206e756d626572206f6620656c656374696e6720766f7465727320746f2070757420696e2074686520736e617073686f742e20417420746865206d6f6d656e742c20736e617073686f7473590120617265206f6e6c79206f76657220612073696e676c6520626c6f636b2c20627574206f6e6365206d756c74692d626c6f636b20656c656374696f6e732061726520696e74726f647563656420746865792077696c6c842074616b6520706c616365206f766572206d756c7469706c6520626c6f636b732e4c4d6178456c65637461626c6554617267657473450308102704010120546865206d6178696d756d206e756d626572206f6620656c65637461626c65207461726765747320746f2070757420696e2074686520736e617073686f742e284d617857696e6e6572731010e803000010350120546865206d6178696d756d206e756d626572206f662077696e6e65727320746861742063616e20626520656c656374656420627920746869732060456c656374696f6e50726f7669646572604020696d706c656d656e746174696f6e2e005101204e6f74653a2054686973206d75737420616c776179732062652067726561746572206f7220657175616c20746f2060543a3a4461746150726f76696465723a3a646573697265645f746172676574732829602e384d696e65724d61784c656e677468101000006c0000384d696e65724d617857656967687420400b80c933df29011366666666666666a600544d696e65724d6178566f746573506572566f746572101010000000003c4d696e65724d617857696e6e6572731010e80300000001a10b32a50b042040436865636b5370656356657273696f6ead0b1038436865636b547856657273696f6eb10b1030436865636b47656e65736973b50b2c38436865636b4d6f7274616c697479b90b2c28436865636b4e6f6e6365c10b4d012c436865636b576569676874c50b4d01604368617267655472616e73616374696f6e5061796d656e74c90b4d014453746f726543616c6c4d65746164617461cd0b4d016d04","id":"1"} \ No newline at end of file diff --git a/scripts/cli/src/helpers/staking_helper.ts b/scripts/cli/src/helpers/staking_helper.ts index dcfb5ccbc4..6068638ea1 100644 --- a/scripts/cli/src/helpers/staking_helper.ts +++ b/scripts/cli/src/helpers/staking_helper.ts @@ -6,13 +6,13 @@ import BN from "bn.js"; /** * @description Take the origin account as a stash and lock up `value` of its balance. */ -export async function bond(signer: KeyringPair, controller: KeyringPair, value: number, payee: string): Promise { +export async function bond(signer: KeyringPair, value: number, payee: string): Promise { const api = await ApiSingleton.getInstance(); - const transaction = api.tx.staking.bond(controller.publicKey, value, payee); + const transaction = api.tx.staking.bond(value, payee); await sendTx(signer, transaction); } -export async function addNominator(controller: KeyringPair[], stash: KeyringPair[], from: KeyringPair, validator: KeyringPair[]) { +export async function addNominator(stash: KeyringPair[], from: KeyringPair, validator: KeyringPair[]) { const api = await ApiSingleton.getInstance(); let transfer_amount = new BN(1).mul(new BN(10).pow(new BN(6))); let operators = [validator[0].address, validator[1].address]; @@ -20,15 +20,10 @@ export async function addNominator(controller: KeyringPair[], stash: KeyringPair // bond nominator first for (let i = 0; i < stash.length; i++) { - const tx = api.tx.staking.bond(controller[i].address, bond_amount, "Controller"); - await sendTx(stash[i], tx); - } - // fund controller keys - await distributePolyBatch(from, controller, transfer_amount.toNumber()); - - for (let i = 0; i < controller.length; i++) { - const tx = api.tx.staking.nominate(operators); - await sendTx(controller[i], tx); + const tx1 = api.tx.staking.bond(bond_amount, "Controller"); + await sendTx(stash[i], tx1); + const tx2 = api.tx.staking.nominate(operators); + await sendTx(stash[i], tx2); } } diff --git a/scripts/cli/src/interfaces/augment-api-consts.ts b/scripts/cli/src/interfaces/augment-api-consts.ts index 01051f2358..e30b06e37a 100644 --- a/scripts/cli/src/interfaces/augment-api-consts.ts +++ b/scripts/cli/src/interfaces/augment-api-consts.ts @@ -16,11 +16,29 @@ export type __AugmentedConst = AugmentedConst declare module '@polkadot/api-base/types/consts' { interface AugmentedConsts { asset: { + /** + * Max length for the Asset Metadata type name. + **/ assetMetadataNameMaxLength: u32 & AugmentedConst; + /** + * Max length for the Asset Metadata type definition. + **/ assetMetadataTypeDefMaxLength: u32 & AugmentedConst; + /** + * Max length for the Asset Metadata value. + **/ assetMetadataValueMaxLength: u32 & AugmentedConst; + /** + * Max length for the name of an asset. + **/ assetNameMaxLength: u32 & AugmentedConst; + /** + * Max length of the funding round name. + **/ fundingRoundNameMaxLength: u32 & AugmentedConst; + /** + * Maximum number of mediators for an asset. + **/ maxAssetMediators: u32 & AugmentedConst; /** * Generic const @@ -46,6 +64,10 @@ declare module '@polkadot/api-base/types/consts' { * Max number of authorities allowed **/ maxAuthorities: u32 & AugmentedConst; + /** + * The maximum number of nominators for each validator. + **/ + maxNominators: u32 & AugmentedConst; /** * Generic const **/ @@ -53,6 +75,7 @@ declare module '@polkadot/api-base/types/consts' { }; balances: { /** + * This type is no longer needed but kept for compatibility reasons. * The minimum amount required to keep an account open. **/ existentialDeposit: u128 & AugmentedConst; @@ -62,6 +85,12 @@ declare module '@polkadot/api-base/types/consts' { [key: string]: Codec; }; base: { + /** + * The maximum length governing `TooLong`. + * + * How lengths are computed to compare against this value is situation based. + * For example, you could halve it, double it, compute a sum for some tree of strings, etc. + **/ maxLen: u32 & AugmentedConst; /** * Generic const @@ -69,6 +98,9 @@ declare module '@polkadot/api-base/types/consts' { [key: string]: Codec; }; complianceManager: { + /** + * The maximum claim reads that are allowed to happen in worst case of a condition resolution + **/ maxConditionComplexity: u32 & AugmentedConst; /** * Generic const @@ -77,32 +109,16 @@ declare module '@polkadot/api-base/types/consts' { }; contracts: { /** - * The maximum number of contracts that can be pending for deletion. - * - * When a contract is deleted by calling `seal_terminate` it becomes inaccessible - * immediately, but the deletion of the storage items it has accumulated is performed - * later. The contract is put into the deletion queue. This defines how many - * contracts can be queued up at the same time. If that limit is reached `seal_terminate` - * will fail. The action must be retried in a later block in that case. - * - * The reasons for limiting the queue depth are: - * - * 1. The queue is in storage in order to be persistent between blocks. We want to limit - * the amount of storage that can be consumed. - * 2. The queue is stored in a vector and needs to be decoded as a whole when reading - * it at the end of each block. Longer queues take more weight to decode and hence - * limit the amount of items that can be deleted per block. + * The percentage of the storage deposit that should be held for using a code hash. + * Instantiating a contract, or calling [`chain_extension::Ext::add_delegate_dependency`] + * protects the code from being removed. In order to prevent abuse these actions are + * protected with a percentage of the code deposit. **/ - deletionQueueDepth: u32 & AugmentedConst; + codeHashLockupDepositPercent: Perbill & AugmentedConst; /** - * The maximum amount of weight that can be consumed per block for lazy trie removal. - * - * The amount of weight that is dedicated per block to work on the deletion queue. Larger - * values allow more trie keys to be deleted in each block but reduce the amount of - * weight that is left for transactions. See [`Self::DeletionQueueDepth`] for more - * information about the deletion queue. + * Fallback value to limit the storage deposit if it's not being set by the caller. **/ - deletionWeightLimit: SpWeightsWeightV2Weight & AugmentedConst; + defaultDepositLimit: u128 & AugmentedConst; /** * The amount of balance a caller has to pay for each byte of storage. * @@ -120,9 +136,7 @@ declare module '@polkadot/api-base/types/consts' { **/ depositPerItem: u128 & AugmentedConst; /** - * The maximum length of a contract code in bytes. This limit applies to the instrumented - * version of the code. Therefore `instantiate_with_code` can fail even when supplying - * a wasm binary below this maximum size. + * The maximum length of a contract code in bytes. * * The value should be chosen carefully taking into the account the overall memory limit * your runtime has, as well as the [maximum allowed callstack @@ -133,6 +147,11 @@ declare module '@polkadot/api-base/types/consts' { * The maximum length of the debug buffer in bytes. **/ maxDebugBufferLen: u32 & AugmentedConst; + /** + * The maximum number of delegate_dependencies that a contract can lock with + * [`chain_extension::Ext::add_delegate_dependency`]. + **/ + maxDelegateDependencies: u32 & AugmentedConst; /** * The maximum allowable length in bytes for storage keys. **/ @@ -159,7 +178,13 @@ declare module '@polkadot/api-base/types/consts' { [key: string]: Codec; }; corporateAction: { + /** + * Max number of per-DID withholding tax overrides. + **/ maxDidWhts: u32 & AugmentedConst; + /** + * Max number of DID specified in `TargetIdentities`. + **/ maxTargetIds: u32 & AugmentedConst; /** * Generic const @@ -197,6 +222,7 @@ declare module '@polkadot/api-base/types/consts' { minerMaxLength: u32 & AugmentedConst; minerMaxVotesPerVoter: u32 & AugmentedConst; minerMaxWeight: SpWeightsWeightV2Weight & AugmentedConst; + minerMaxWinners: u32 & AugmentedConst; /** * The priority of the unsigned transaction submitted in the unsigned-phase **/ @@ -264,6 +290,10 @@ declare module '@polkadot/api-base/types/consts' { * Max Authorities in use **/ maxAuthorities: u32 & AugmentedConst; + /** + * The maximum number of nominators for each validator. + **/ + maxNominators: u32 & AugmentedConst; /** * The maximum number of entries to keep in the set id to session index mapping. * @@ -279,7 +309,13 @@ declare module '@polkadot/api-base/types/consts' { [key: string]: Codec; }; identity: { + /** + * POLYX given to primary keys of all new Identities + **/ initialPOLYX: u128 & AugmentedConst; + /** + * Maximum number of authorizations an identity can give. + **/ maxGivenAuths: u32 & AugmentedConst; /** * Generic const @@ -327,6 +363,30 @@ declare module '@polkadot/api-base/types/consts' { **/ [key: string]: Codec; }; + pips: { + /** + * The maximum number of votes that can be pruned at once. + **/ + maxRefundsAndVotesPruned: u32 & AugmentedConst; + /** + * Generic const + **/ + [key: string]: Codec; + }; + portfolio: { + /** + * Maximum number of fungible assets that can be moved in a single transfer call. + **/ + maxNumberOfFungibleMoves: u32 & AugmentedConst; + /** + * Maximum number of NFTs that can be moved in a single transfer call. + **/ + maxNumberOfNFTsMoves: u32 & AugmentedConst; + /** + * Generic const + **/ + [key: string]: Codec; + }; scheduler: { /** * The maximum weight that may be scheduled per block for any dispatchables. @@ -334,6 +394,10 @@ declare module '@polkadot/api-base/types/consts' { maximumWeight: SpWeightsWeightV2Weight & AugmentedConst; /** * The maximum number of scheduled calls in the queue for a single block. + * + * NOTE: + * + Dependent pallets' benchmarks might require a higher limit for the setting. Set a + * higher limit under `runtime-benchmarks` feature. **/ maxScheduledPerBlock: u32 & AugmentedConst; /** @@ -342,10 +406,37 @@ declare module '@polkadot/api-base/types/consts' { [key: string]: Codec; }; settlement: { + /** + * The maximum time period that an instruction can be held in the `LockedForExecution` status. + **/ + maximumLockPeriod: u64 & AugmentedConst; + /** + * Maximum number mediators in the instruction level (this does not include asset mediators). + **/ + maxInstructionMediators: u32 & AugmentedConst; + /** + * Maximum number of fungible assets that can be in a single instruction. + **/ maxNumberOfFungibleAssets: u32 & AugmentedConst; + /** + * Maximum number of NFTs that can be transferred in a instruction. + **/ maxNumberOfNFTs: u32 & AugmentedConst; + /** + * Maximum number of NFTs that can be transferred in a leg. + **/ maxNumberOfNFTsPerLeg: u32 & AugmentedConst; + /** + * Maximum number of off-chain assets that can be transferred in a instruction. + **/ maxNumberOfOffChainAssets: u32 & AugmentedConst; + /** + * Maximum number of portfolios. + **/ + maxNumberOfPortfolios: u32 & AugmentedConst; + /** + * Maximum number of venue signers. + **/ maxNumberOfVenueSigners: u32 & AugmentedConst; /** * Generic const @@ -357,10 +448,6 @@ declare module '@polkadot/api-base/types/consts' { * Number of eras that staked funds must remain bonded for. **/ bondingDuration: u32 & AugmentedConst; - /** - * Yearly total reward amount that gets distributed when fixed rewards kicks in. - **/ - fixedYearlyReward: u128 & AugmentedConst; /** * Number of eras to keep in history. * @@ -408,15 +495,6 @@ declare module '@polkadot/api-base/types/consts' { * this effect. **/ maxUnlockingChunks: u32 & AugmentedConst; - /** - * Maximum amount of validators that can run by an identity. - * It will be MaxValidatorPerIdentity * Self::validator_count(). - **/ - maxValidatorPerIdentity: Permill & AugmentedConst; - /** - * Maximum amount of total issuance after which fixed rewards kicks in. - **/ - maxVariableInflationTotalIssuance: u128 & AugmentedConst; /** * Number of sessions per era. **/ @@ -434,7 +512,13 @@ declare module '@polkadot/api-base/types/consts' { [key: string]: Codec; }; statistics: { + /** + * Maximum stats that can be enabled for an Asset. + **/ maxStatsPerAsset: u32 & AugmentedConst; + /** + * Maximum transfer conditions that can be enabled for an Asset. + **/ maxTransferConditionsPerAsset: u32 & AugmentedConst; /** * Generic const @@ -496,7 +580,7 @@ declare module '@polkadot/api-base/types/consts' { /** * The polynomial that is applied in order to derive fee from weight. **/ - weightToFee: Vec & AugmentedConst; + weightToFeeConst: Vec & AugmentedConst; /** * Generic const **/ @@ -512,5 +596,24 @@ declare module '@polkadot/api-base/types/consts' { **/ [key: string]: Codec; }; + validators: { + /** + * Yearly total reward amount that gets distributed when fixed rewards kicks in. + **/ + fixedYearlyReward: u128 & AugmentedConst; + /** + * Maximum amount of validators that can run by an identity. + * It will be MaxValidatorPerIdentity * Self::validator_count(). + **/ + maxValidatorPerIdentity: Permill & AugmentedConst; + /** + * Maximum amount of total issuance after which fixed rewards kicks in. + **/ + maxVariableInflationTotalIssuance: u128 & AugmentedConst; + /** + * Generic const + **/ + [key: string]: Codec; + }; } // AugmentedConsts } // declare module diff --git a/scripts/cli/src/interfaces/augment-api-errors.ts b/scripts/cli/src/interfaces/augment-api-errors.ts index 01f38fd21f..0c50b17462 100644 --- a/scripts/cli/src/interfaces/augment-api-errors.ts +++ b/scripts/cli/src/interfaces/augment-api-errors.ts @@ -28,6 +28,10 @@ declare module '@polkadot/api-base/types/errors' { * An unexpected error when generating a new asset ID. **/ AssetIdGenerationError: AugmentedError; + /** + * The given asset is already linked to a ticker. + **/ + AssetIsAlreadyLinkedToATicker: AugmentedError; /** * Asset Metadata Global type already exists. **/ @@ -64,6 +68,10 @@ declare module '@polkadot/api-base/types/errors' { * Maximum length of the asset metadata value has been exceeded. **/ AssetMetadataValueMaxLengthExceeded: AugmentedError; + /** + * The extrinsic expected a different `AuthorizationType` than what the `data.auth_type()` is. + **/ + BadAuthorizationType: AugmentedError; /** * An overflow while calculating the balance. **/ @@ -129,7 +137,7 @@ declare module '@polkadot/api-base/types/errors' { **/ MaxLengthOfAssetNameExceeded: AugmentedError; /** - * No security token associated to the given asset ID. + * No token associated to the given asset ID. **/ NoSuchAsset: AugmentedError; /** @@ -164,6 +172,10 @@ declare module '@polkadot/api-base/types/errors' { * The given ticker is already linked to an asset. **/ TickerIsAlreadyLinkedToAnAsset: AugmentedError; + /** + * The given ticker is not linked to the given asset. + **/ + TickerIsNotLinkedToTheAsset: AugmentedError; /** * The ticker has non-alphanumeric parts. **/ @@ -465,6 +477,14 @@ declare module '@polkadot/api-base/types/errors' { [key: string]: AugmentedError; }; contracts: { + /** + * Can not add a delegate dependency to the code hash of the contract itself. + **/ + CannotAddSelfAsDelegateDependency: AugmentedError; + /** + * No code info could be found at the supplied code hash. + **/ + CodeInfoNotFound: AugmentedError; /** * Code removal was denied because the code is still in use by at least one contract. **/ @@ -474,10 +494,10 @@ declare module '@polkadot/api-base/types/errors' { **/ CodeNotFound: AugmentedError; /** - * The contract's code was found to be invalid during validation or instrumentation. + * The contract's code was found to be invalid during validation. * * The most likely cause of this is that an API was used which is not supported by the - * node. This hapens if an older node is used with a new version of ink!. Try updating + * node. This happens if an older node is used with a new version of ink!. Try updating * your node to the newest available version. * * A more detailed error can be found on the node console if debug messages are enabled @@ -509,13 +529,13 @@ declare module '@polkadot/api-base/types/errors' { **/ DecodingFailed: AugmentedError; /** - * Removal of a contract failed because the deletion queue is full. - * - * This can happen when calling `seal_terminate`. - * The queue is filled by deleting contracts and emptied by a fixed amount each block. - * Trying again during another block is the only way to resolve this issue. + * The contract already depends on the given delegate dependency. + **/ + DelegateDependencyAlreadyExists: AugmentedError; + /** + * The dependency was not found in the contract's delegate dependencies. **/ - DeletionQueueFull: AugmentedError; + DelegateDependencyNotFound: AugmentedError; /** * A contract with the same AccountId already exists. **/ @@ -533,20 +553,32 @@ declare module '@polkadot/api-base/types/errors' { **/ InvalidCallFlags: AugmentedError; /** - * A new schedule must have a greater version than the current one. + * Invalid schedule supplied, e.g. with zero weight of a basic operation. **/ - InvalidScheduleVersion: AugmentedError; + InvalidSchedule: AugmentedError; /** * Performing a call was denied because the calling depth reached the limit * of what is specified in the schedule. **/ MaxCallDepthReached: AugmentedError; + /** + * The contract has reached its maximum number of delegate dependencies. + **/ + MaxDelegateDependenciesReached: AugmentedError; + /** + * A pending migration needs to complete before the extrinsic can be called. + **/ + MigrationInProgress: AugmentedError; /** * The chain does not provide a chain extension. Calling the chain extension results * in this error. Note that this usually shouldn't happen as deploying such contracts * is rejected. **/ NoChainExtension: AugmentedError; + /** + * Migrate dispatch call was attempted but no migration was performed. + **/ + NoMigrationPerformed: AugmentedError; /** * A buffer outside of sandbox memory was passed to a contract API function. **/ @@ -565,6 +597,9 @@ declare module '@polkadot/api-base/types/errors' { RandomSubjectTooLong: AugmentedError; /** * A call tried to invoke a contract that is flagged as non-reentrant. + * The only other cause is that a call from a contract into the runtime tried to call back + * into `pallet-contracts`. This would make the whole pallet reentrant with regard to + * contract code execution which is not supported. **/ ReentranceDenied: AugmentedError; /** @@ -786,6 +821,10 @@ declare module '@polkadot/api-base/types/errors' { * The provided `agent` is already an agent for the `AssetId`. **/ AlreadyAnAgent: AugmentedError; + /** + * The extrinsic expected a different `AuthorizationType` than what the `data.auth_type()` is. + **/ + BadAuthorizationType: AugmentedError; /** * An AG with the given `AGId` did not exist for the `AssetId`. **/ @@ -869,6 +908,10 @@ declare module '@polkadot/api-base/types/errors' { * Authorizations are not for the same DID. **/ AuthorizationsNotForSameDids: AugmentedError; + /** + * The extrinsic expected a different `AuthorizationType` than what the `data.auth_type()` is. + **/ + BadAuthorizationType: AugmentedError; /** * Cannot convert a `T::AccountId` to `AnySignature::Signer::AccountId`. **/ @@ -922,6 +965,11 @@ declare module '@polkadot/api-base/types/errors' { * Account Id cannot be extracted from signer **/ InvalidAccountKey: AugmentedError; + /** + * Auth identified by an `auth_id` for a given `target` does not exist. + * The `target` might be wrong or the `auth_id` was never created at all. + **/ + InvalidAuthorization: AugmentedError; /** * An invalid authorization from the CDD provider. **/ @@ -946,10 +994,6 @@ declare module '@polkadot/api-base/types/errors' { * Caller is missing an identity. **/ MissingIdentity: AugmentedError; - /** - * Multisig can not be unlinked from an identity while it still holds POLYX - **/ - MultiSigHasBalance: AugmentedError; /** * The Identity doesn't have a parent identity. **/ @@ -982,6 +1026,18 @@ declare module '@polkadot/api-base/types/errors' { * Signatory is not pre authorized by the identity **/ Unauthorized: AugmentedError; + /** + * The DID is missing a CDD claim. + **/ + UnauthorizedCallerDidMissingCdd: AugmentedError; + /** + * Frozen secondary key. + **/ + UnauthorizedCallerFrozenDid: AugmentedError; + /** + * The key does not have permissions to execute the extrinsic. + **/ + UnauthorizedCallerMissingPermissions: AugmentedError; /** * Only CDD service providers are allowed. **/ @@ -1032,6 +1088,10 @@ declare module '@polkadot/api-base/types/errors' { [key: string]: AugmentedError; }; multiSig: { + /** + * Multisig has no admin. + **/ + AdminNotFound: AugmentedError; /** * Already a signer. **/ @@ -1040,6 +1100,10 @@ declare module '@polkadot/api-base/types/errors' { * Already voted. **/ AlreadyVoted: AugmentedError; + /** + * The extrinsic expected a different `AuthorizationType` than what the `data.auth_type()` is. + **/ + BadAuthorizationType: AugmentedError; /** * Changing multisig parameters not allowed since multisig is a primary key. **/ @@ -1056,6 +1120,14 @@ declare module '@polkadot/api-base/types/errors' { * Identity provided is not the multisig's payer. **/ IdentityNotPayer: AugmentedError; + /** + * The proposal has been invalidated after a multisg update. + **/ + InvalidatedProposal: AugmentedError; + /** + * Expiry must be in the future. + **/ + InvalidExpiryDate: AugmentedError; /** * Max weight not enough to execute proposal. **/ @@ -1215,10 +1287,18 @@ declare module '@polkadot/api-base/types/errors' { * The maximum number of nfts being transferred in one leg was exceeded. **/ MaxNumberOfNFTsPerLegExceeded: AugmentedError; + /** + * The NFT is locked. + **/ + NFTIsLocked: AugmentedError; /** * The NFT does not exist. **/ NFTNotFound: AugmentedError; + /** + * The number of keys in the collection is greater than the input. + **/ + NumberOfKeysIsLessThanExpected: AugmentedError; /** * An overflow while calculating the updated supply. **/ @@ -1256,23 +1336,27 @@ declare module '@polkadot/api-base/types/errors' { **/ CannotSkipPip: AugmentedError; /** - * Proposer specifies an incorrect deposit + * Proposer specifies an incorrect deposit amount. **/ IncorrectDeposit: AugmentedError; /** - * Proposal is not in the correct state + * The proposal is not in the correct state for the requested operation. **/ IncorrectProposalState: AugmentedError; /** - * Proposer can't afford to lock minimum deposit + * Proposer cannot afford to lock the minimum deposit. **/ InsufficientDeposit: AugmentedError; /** - * When a block number is less than current block number. + * The specified block number is less than the current block number. **/ InvalidFutureBlockNumber: AugmentedError; /** - * Missing current DID + * Invalid PIP ID. Pip id was not expected to be in the live queue. + **/ + InvalidPipId: AugmentedError; + /** + * The current DID is missing. **/ MissingCurrentIdentity: AugmentedError; /** @@ -1280,12 +1364,12 @@ declare module '@polkadot/api-base/types/errors' { **/ NoSuchProposal: AugmentedError; /** - * Not part of governance committee. + * The caller is not a member of the governance committee. **/ NotACommitteeMember: AugmentedError; /** * The given dispatchable call is not valid for this proposal. - * The proposal must be by community, but isn't. + * The proposal must be from a committee, but isn't. **/ NotByCommittee: AugmentedError; /** @@ -1294,7 +1378,7 @@ declare module '@polkadot/api-base/types/errors' { **/ NotFromCommunity: AugmentedError; /** - * When number of votes overflows. + * The number of votes exceeds the allowed limit. **/ NumberOfVotesExceeded: AugmentedError; /** @@ -1310,7 +1394,7 @@ declare module '@polkadot/api-base/types/errors' { **/ ScheduledProposalDoesntExist: AugmentedError; /** - * Tried to enact result for PIP with id different from that at the position in the queue. + * Tried to enact result for PIP with an ID different from that at the position in the queue. **/ SnapshotIdMismatch: AugmentedError; /** @@ -1318,11 +1402,11 @@ declare module '@polkadot/api-base/types/errors' { **/ SnapshotResultTooLarge: AugmentedError; /** - * When stake amount of a vote overflows. + * The stake amount of a vote exceeds the allowed limit. **/ StakeAmountOfVotesExceeded: AugmentedError; /** - * The current number of active (pending | scheduled) PIPs exceed the maximum + * The current number of active (pending or scheduled) PIPs exceeds the maximum * and the proposal is not by a committee. **/ TooManyActivePips: AugmentedError; @@ -1432,6 +1516,14 @@ declare module '@polkadot/api-base/types/errors' { [key: string]: AugmentedError; }; portfolio: { + /** + * The extrinsic expected a different `AuthorizationType` than what the `data.auth_type()` is. + **/ + BadAuthorizationType: AugmentedError; + /** + * Default portfolios cannot have custodians. + **/ + DefaultPortfoliosCannotHaveCustodians: AugmentedError; /** * The source and destination portfolios should be different. **/ @@ -1500,6 +1592,10 @@ declare module '@polkadot/api-base/types/errors' { * The secondary key is not authorized to access the portfolio(s). **/ SecondaryKeyNotAuthorizedForPortfolio: AugmentedError; + /** + * Adding itself as an AllowedCustodian is not permitted. + **/ + SelfAdditionNotAllowed: AugmentedError; /** * The porfolio's custody is with someone other than the caller. **/ @@ -1558,6 +1654,10 @@ declare module '@polkadot/api-base/types/errors' { [key: string]: AugmentedError; }; relayer: { + /** + * The extrinsic expected a different `AuthorizationType` than what the `data.auth_type()` is. + **/ + BadAuthorizationType: AugmentedError; /** * The `user_key` doesn't have a `paying_key`. **/ @@ -1656,6 +1756,14 @@ declare module '@polkadot/api-base/types/errors' { * No duplicate uid are allowed for different receipts. **/ DuplicateReceiptUid: AugmentedError; + /** + * The instruction has been locked for too much time. + **/ + ExceededMaximumLockingPeriod: AugmentedError; + /** + * Not all conditions for transferring the asset have been met. + **/ + FailedAssetTransferringConditions: AugmentedError; /** * The instruction failed to release asset locks or transfer the assets. **/ @@ -1692,6 +1800,10 @@ declare module '@polkadot/api-base/types/errors' { * Only [`InstructionStatus::Pending`] or [`InstructionStatus::Failed`] instructions can be executed. **/ InvalidInstructionStatusForExecution: AugmentedError; + /** + * [`InstructionStatus::Unknow`] can't be rejected. + **/ + InvalidInstructionStatusForRejection: AugmentedError; /** * Offchain signature is invalid. **/ @@ -1704,6 +1816,10 @@ declare module '@polkadot/api-base/types/errors' { * No leg with the given id was found **/ LegNotFound: AugmentedError; + /** + * All locked instructions must register a lock timestamp. + **/ + LockTimestampNotFound: AugmentedError; /** * The maximum number of fungible assets was exceeded. **/ @@ -1752,6 +1868,10 @@ declare module '@polkadot/api-base/types/errors' { * Off-Chain assets cannot be locked. **/ OffChainAssetCantBeLocked: AugmentedError; + /** + * Offchain assets must have a venue. + **/ + OffChainAssetsMustHaveAVenue: AugmentedError; /** * Receipt already used. **/ @@ -1804,6 +1924,10 @@ declare module '@polkadot/api-base/types/errors' { * AssetId could not be found on chain. **/ UnexpectedOFFChainAsset: AugmentedError; + /** + * Unexpected settlement type. + **/ + UnexpectedSettlementType: AugmentedError; /** * Instruction status is unknown **/ @@ -1850,18 +1974,10 @@ declare module '@polkadot/api-base/types/errors' { * The user has enough bond and thus cannot be chilled forcefully by an external person. **/ CannotChillOther: AugmentedError; - /** - * Validator commiission is above maximum. - **/ - CommissionTooHigh: AugmentedError; /** * Commission is too low. Must be at least `MinCommission`. **/ CommissionTooLow: AugmentedError; - /** - * New commission must be different from previous commission. - **/ - CommissionUnchanged: AugmentedError; /** * Duplicate index. **/ @@ -1874,18 +1990,6 @@ declare module '@polkadot/api-base/types/errors' { * Attempting to target a stash that still has funds. **/ FundedTarget: AugmentedError; - /** - * Permissioned validator already exists. - **/ - IdentityIsAlreadyPermissioned: AugmentedError; - /** - * Identity has not gone throught CDD. - **/ - IdentityIsMissingCDD: AugmentedError; - /** - * Identity was not found in the permissioned identity pool. - **/ - IdentityNotFound: AugmentedError; /** * Incorrect previous history depth input provided. **/ @@ -1900,10 +2004,6 @@ declare module '@polkadot/api-base/types/errors' { * intention, `chill` first to remove one's role as validator/nominator. **/ InsufficientBond: AugmentedError; - /** - * When the intended number of validators to run is >= 2/3 of `validator_count`. - **/ - IntendedCountIsExceedingConsensusLimit: AugmentedError; /** * Invalid era to reward. **/ @@ -1936,18 +2036,6 @@ declare module '@polkadot/api-base/types/errors' { * Can not rebond without unlocking chunks. **/ NoUnlockChunk: AugmentedError; - /** - * Validator or nominator stash identity does not exist. - **/ - StashIdentityDoesNotExist: AugmentedError; - /** - * Nominator stash has not gone through CDD. - **/ - StashIdentityNotCDDed: AugmentedError; - /** - * Validator's stash identity is not permissioned. - **/ - StashIdentityNotPermissioned: AugmentedError; /** * There are too many nominators in the system. Governance needs to adjust the staking * settings to keep things safe for the runtime. @@ -1958,13 +2046,10 @@ declare module '@polkadot/api-base/types/errors' { **/ TooManyTargets: AugmentedError; /** - * There are too many validator candidates in the system. + * There are too many validator candidates in the system. Governance needs to adjust the + * staking settings to keep things safe for the runtime. **/ TooManyValidators: AugmentedError; - /** - * No validator was found for the given key. - **/ - ValidatorNotFound: AugmentedError; /** * Generic error **/ @@ -1976,9 +2061,9 @@ declare module '@polkadot/api-base/types/errors' { **/ CannotRemoveStatTypeInUse: AugmentedError; /** - * Transfer not allowed. + * Invalid transfer [`TransferCondition`] not respected. **/ - InvalidTransfer: AugmentedError; + InvalidTransferStatisticsFailure: AugmentedError; /** * The limit of StatTypes allowed for an asset has been reached. **/ @@ -2006,51 +2091,59 @@ declare module '@polkadot/api-base/types/errors' { }; sto: { /** - * Fundraiser has been closed/stopped already. + * The fundraiser has been permanently closed or stopped. **/ FundraiserClosed: AugmentedError; /** - * Interacting with a fundraiser past the end `Moment`. + * Attempting to interact with a fundraiser after its end time has passed. **/ FundraiserExpired: AugmentedError; /** - * Fundraiser not found. + * The specified fundraiser does not exist for the given asset. **/ FundraiserNotFound: AugmentedError; /** - * Fundraiser is either frozen or stopped. + * The fundraiser is not in a live state (either frozen or stopped). **/ FundraiserNotLive: AugmentedError; /** - * Not enough tokens left for sale. + * The fundraiser does not have enough tokens remaining to fulfil the investment. **/ InsufficientTokensRemaining: AugmentedError; /** - * Window (start time, end time) has invalid parameters, e.g start time is after end time. + * The fundraiser time window has invalid parameters (start time after end time). **/ InvalidOfferingWindow: AugmentedError; /** - * An individual price tier was invalid or a set of price tiers was invalid. + * One or more price tiers have invalid parameters (zero total, too many tiers, etc.). **/ InvalidPriceTiers: AugmentedError; /** - * An invalid venue provided. + * The off-chain receipt signature is invalid or could not be verified. + **/ + InvalidSignature: AugmentedError; + /** + * The provided venue is invalid (does not exist, wrong type, or wrong creator). **/ InvalidVenue: AugmentedError; /** - * Investment amount is lower than minimum investment amount. + * The investment amount is below the minimum investment threshold for this fundraiser. **/ InvestmentAmountTooLow: AugmentedError; /** - * Price of the investment exceeded the max price. + * The calculated price per token exceeds the maximum price specified by the investor. **/ MaxPriceExceeded: AugmentedError; /** - * An arithmetic operation overflowed. + * Off-chain funding has not been enabled for this fundraiser. + **/ + OffchainFundingNotAllowed: AugmentedError; + /** + * An arithmetic operation resulted in overflow or underflow. **/ Overflow: AugmentedError; /** - * Sender does not have required permissions. + * Sender does not have required permissions for the requested operation. **/ Unauthorized: AugmentedError; /** @@ -2177,12 +2270,6 @@ declare module '@polkadot/api-base/types/errors' { **/ [key: string]: AugmentedError; }; - testUtils: { - /** - * Generic error - **/ - [key: string]: AugmentedError; - }; treasury: { /** * Proposer's balance is too low. @@ -2303,5 +2390,47 @@ declare module '@polkadot/api-base/types/errors' { **/ [key: string]: AugmentedError; }; + validators: { + /** + * Validator commiission is above maximum. + **/ + CommissionTooHigh: AugmentedError; + /** + * New commission must be different from previous commission. + **/ + CommissionUnchanged: AugmentedError; + /** + * Permissioned validator already exists. + **/ + IdentityIsAlreadyPermissioned: AugmentedError; + /** + * Identity has not gone throught CDD. + **/ + IdentityIsMissingCDD: AugmentedError; + /** + * Identity was not found in the permissioned identity pool. + **/ + IdentityNotFound: AugmentedError; + /** + * When the intended number of validators to run is >= 2/3 of `validator_count`. + **/ + IntendedCountIsExceedingConsensusLimit: AugmentedError; + /** + * Validator or nominator stash identity does not exist. + **/ + StashIdentityDoesNotExist: AugmentedError; + /** + * Validator's stash identity is not permissioned. + **/ + StashIdentityNotPermissioned: AugmentedError; + /** + * No validator was found for the given key. + **/ + ValidatorNotFound: AugmentedError; + /** + * Generic error + **/ + [key: string]: AugmentedError; + }; } // AugmentedErrors } // declare module diff --git a/scripts/cli/src/interfaces/augment-api-events.ts b/scripts/cli/src/interfaces/augment-api-events.ts index a94f0b2450..e759eee071 100644 --- a/scripts/cli/src/interfaces/augment-api-events.ts +++ b/scripts/cli/src/interfaces/augment-api-events.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedEvent } from '@polkadot/api-base/types'; import type { BTreeSet, Bytes, Null, Option, Result, U8aFixed, Vec, bool, u128, u32, u64, u8 } from '@polkadot/types-codec'; import type { ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, H256, Perbill, Permill } from '@polkadot/types/interfaces/runtime'; -import type { FrameSupportDispatchDispatchInfo, FrameSupportTokensMiscBalanceStatus, PalletCorporateActionsBallotBallotMeta, PalletCorporateActionsBallotBallotTimeRange, PalletCorporateActionsBallotBallotVote, PalletCorporateActionsCaId, PalletCorporateActionsCorporateAction, PalletCorporateActionsDistribution, PalletCorporateActionsTargetIdentities, PalletElectionProviderMultiPhaseElectionCompute, PalletElectionProviderMultiPhasePhase, PalletImOnlineSr25519AppSr25519Public, PalletPipsProposalData, PalletPipsProposalState, PalletPipsProposer, PalletPipsSnapshottedPip, PalletStakingExposure, PalletStakingForcing, PalletStakingSlashingSwitch, PalletStakingValidatorPrefs, PalletStoFundraiser, PolymeshCommonUtilitiesCheckpointScheduleCheckpoints, PolymeshCommonUtilitiesMaybeBlock, PolymeshContractsApi, PolymeshContractsChainExtensionExtrinsicId, PolymeshContractsChainVersion, PolymeshPrimitivesAgentAgentGroup, PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetAssetType, PolymeshPrimitivesAssetIdentifier, PolymeshPrimitivesAssetMetadataAssetMetadataKey, PolymeshPrimitivesAssetMetadataAssetMetadataSpec, PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail, PolymeshPrimitivesAuthorizationAuthorizationData, PolymeshPrimitivesComplianceManagerComplianceRequirement, PolymeshPrimitivesConditionTrustedIssuer, PolymeshPrimitivesDocument, PolymeshPrimitivesEventOnly, PolymeshPrimitivesIdentityClaim, PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesMemo, PolymeshPrimitivesNftNfTs, PolymeshPrimitivesPortfolioFundDescription, PolymeshPrimitivesPortfolioPortfolioUpdateReason, PolymeshPrimitivesPosRatio, PolymeshPrimitivesSecondaryKey, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions, PolymeshPrimitivesSecondaryKeyPermissions, PolymeshPrimitivesSettlementLeg, PolymeshPrimitivesSettlementReceiptMetadata, PolymeshPrimitivesSettlementSettlementType, PolymeshPrimitivesSettlementVenueType, PolymeshPrimitivesStatisticsStatType, PolymeshPrimitivesStatisticsStatUpdate, PolymeshPrimitivesTicker, PolymeshPrimitivesTransferComplianceTransferCondition, PolymeshPrimitivesTransferComplianceTransferConditionExemptKey, SpConsensusGrandpaAppPublic, SpNposElectionsElectionScore, SpRuntimeDispatchError } from '@polkadot/types/lookup'; +import type { FrameSupportDispatchDispatchInfo, FrameSupportTokensMiscBalanceStatus, PalletContractsOrigin, PalletCorporateActionsBallotBallotMeta, PalletCorporateActionsBallotBallotTimeRange, PalletCorporateActionsBallotBallotVote, PalletCorporateActionsCaId, PalletCorporateActionsCorporateAction, PalletCorporateActionsDistribution, PalletCorporateActionsTargetIdentities, PalletElectionProviderMultiPhaseElectionCompute, PalletElectionProviderMultiPhasePhase, PalletImOnlineSr25519AppSr25519Public, PalletPipsProposalData, PalletPipsProposalState, PalletPipsProposer, PalletPipsSnapshottedPip, PalletStakingExposure, PalletStakingForcing, PalletStakingValidatorPrefs, PalletStoFundingAsset, PalletStoFundraiser, PalletValidatorsSlashingSwitch, PolymeshCommonUtilitiesCheckpointScheduleCheckpoints, PolymeshContractsApi, PolymeshContractsChainExtensionExtrinsicId, PolymeshContractsChainVersion, PolymeshPrimitivesAgentAgentGroup, PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetAssetType, PolymeshPrimitivesAssetIdentifier, PolymeshPrimitivesAssetMetadataAssetMetadataKey, PolymeshPrimitivesAssetMetadataAssetMetadataSpec, PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail, PolymeshPrimitivesAuthorizationAuthorizationData, PolymeshPrimitivesComplianceManagerComplianceRequirement, PolymeshPrimitivesConditionTrustedIssuer, PolymeshPrimitivesDocument, PolymeshPrimitivesEventOnly, PolymeshPrimitivesIdentityClaim, PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesMaybeBlock, PolymeshPrimitivesMemo, PolymeshPrimitivesNftNfTs, PolymeshPrimitivesPortfolioFundDescription, PolymeshPrimitivesPortfolioPortfolioUpdateReason, PolymeshPrimitivesPosRatio, PolymeshPrimitivesSecondaryKey, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions, PolymeshPrimitivesSecondaryKeyPermissions, PolymeshPrimitivesSettlementLeg, PolymeshPrimitivesSettlementReceiptMetadata, PolymeshPrimitivesSettlementSettlementType, PolymeshPrimitivesSettlementVenueType, PolymeshPrimitivesStatisticsStatType, PolymeshPrimitivesStatisticsStatUpdate, PolymeshPrimitivesTicker, PolymeshPrimitivesTransferComplianceTransferCondition, PolymeshPrimitivesTransferComplianceTransferConditionExemptKey, SpConsensusGrandpaAppPublic, SpNposElectionsElectionScore, SpRuntimeDispatchError } from '@polkadot/types/lookup'; export type __AugmentedEvent = AugmentedEvent; @@ -100,6 +100,11 @@ declare module '@polkadot/api-base/types/events' { * Parameters: caller DID, AssetId, funding round name. **/ FundingRoundSet: AugmentedEvent; + /** + * Asset Global Metadata Spec has been Updated. + * Parameters: [`AssetMetadataName`] of the metadata, [`AssetMetadataSpec`] of the metadata. + **/ + GlobalMetadataSpecUpdated: AugmentedEvent; /** * Event emitted when any token identifiers are updated. * caller DID, AssetId, a vector of (identifier type, identifier value) @@ -165,6 +170,11 @@ declare module '@polkadot/api-base/types/events' { * caller DID / ticker transferred to DID, ticker, from **/ TickerTransferred: AugmentedEvent; + /** + * An identity has unlinked a ticker from an asset. + * Parameters: [`IdentityId`] of caller, unlinked [`Ticker`], the asset identifier [`AssetId`]. + **/ + TickerUnlinkedFromAsset: AugmentedEvent; /** * Generic event **/ @@ -210,6 +220,7 @@ declare module '@polkadot/api-base/types/events' { base: { /** * An unexpected error happened that should be investigated. + * TODO: Unused, remove it. **/ UnexpectedError: AugmentedEvent]>; /** @@ -254,7 +265,8 @@ declare module '@polkadot/api-base/types/events' { **/ ActiveLimitChanged: AugmentedEvent; /** - * Phantom member, never used. + * Phantom member, never used. This can be removed now. FRAME v2 doesn't require this. + * TODO: remove. **/ Dummy: AugmentedEvent; /** @@ -323,7 +335,8 @@ declare module '@polkadot/api-base/types/events' { **/ ActiveLimitChanged: AugmentedEvent; /** - * Phantom member, never used. + * Phantom member, never used. This can be removed now. FRAME v2 doesn't require this. + * TODO: remove. **/ Dummy: AugmentedEvent; /** @@ -417,7 +430,7 @@ declare module '@polkadot/api-base/types/events' { * calls. This is because on failure all storage changes including events are * rolled back. **/ - Called: AugmentedEvent; + Called: AugmentedEvent; /** * A code with the specified hash was removed. **/ @@ -903,94 +916,188 @@ declare module '@polkadot/api-base/types/events' { pips: { /** * The maximum number of active PIPs was changed. - * (caller DID, old value, new value) + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `u32`: The old active PIP limit. + * - `u32`: The new active PIP limit. **/ ActivePipLimitChanged: AugmentedEvent; /** - * Default enactment period (in blocks) has been changed. - * (caller DID, old period, new period) + * The default enactment period was changed. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `BlockNumber`: The old enactment period. + * - `BlockNumber`: The new enactment period. **/ DefaultEnactmentPeriodChanged: AugmentedEvent; /** * Cancelling the PIP execution failed in the scheduler pallet. + * + * Parameters: + * - `PipId`: The ID of the PIP. **/ ExecutionCancellingFailed: AugmentedEvent; /** - * Execution of a PIP has been scheduled at specific block. + * The execution of a PIP was scheduled. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `PipId`: The ID of the PIP. + * - `BlockNumber`: The block number at which the PIP is scheduled for execution. **/ ExecutionScheduled: AugmentedEvent; /** * Scheduling of the PIP for execution failed in the scheduler pallet. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `PipId`: The ID of the PIP. + * - `BlockNumber`: The block number at which the PIP was scheduled for execution. **/ ExecutionSchedulingFailed: AugmentedEvent; /** * The PIP has been scheduled for expiry. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `PipId`: The ID of the PIP. + * - `BlockNumber`: The block number at which the PIP is scheduled for expiry. **/ ExpiryScheduled: AugmentedEvent; /** * Scheduling of the PIP for expiry failed in the scheduler pallet. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `PipId`: The ID of the PIP. + * - `BlockNumber`: The block number at which the PIP was scheduled for expiry. **/ ExpirySchedulingFailed: AugmentedEvent; /** - * Pruning Historical PIPs is enabled or disabled (caller DID, old value, new value) + * Historical PIPs Pruning has been set. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `bool`: The old value of the pruning setting. + * - `bool`: The new value of the pruning setting. **/ HistoricalPipsPruned: AugmentedEvent; /** - * The maximum times a PIP can be skipped was changed. - * (caller DID, old value, new value) + * The maximum number of times a PIP can be skipped was changed. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `SkippedCount`: The old skip count. + * - `SkippedCount`: The new skip count. **/ MaxPipSkipCountChanged: AugmentedEvent; /** - * Minimum deposit amount modified - * (caller DID, old amount, new amount) + * The minimum deposit amount for proposals was changed. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `Balance`: The old deposit amount. + * - `Balance`: The new deposit amount. **/ MinimumProposalDepositChanged: AugmentedEvent; /** - * Amount of blocks after which a pending PIP expires. - * (caller DID, old expiry, new expiry) + * The expiry time for pending PIPs was changed. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `MaybeBlock`: The old expiry time. + * - `MaybeBlock`: The new expiry time. **/ - PendingPipExpiryChanged: AugmentedEvent; + PendingPipExpiryChanged: AugmentedEvent; /** - * Pip has been closed, bool indicates whether data is pruned + * A PIP was closed. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `PipId`: The ID of the PIP. + * - `bool`: Indicates whether the data was pruned. **/ PipClosed: AugmentedEvent; /** * A PIP in the snapshot queue was skipped. - * (gc_did, pip_id, new_skip_count) + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `PipId`: The ID of the PIP. + * - `SkippedCount`: The new skip count. **/ PipSkipped: AugmentedEvent; /** - * A PIP was made with a `Balance` stake. + * A PIP was created with a specified `Balance` stake. * - * # Parameters: - * - * Caller DID, Proposer, PIP ID, deposit, URL, description, expiry time, proposal data. + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `Proposer`: The proposer of the PIP. + * - `PipId`: The ID of the PIP. + * - `Balance`: The deposit amount. + * - `Option`: The URL for proposal discussion. + * - `Option`: The description of the proposal. + * - `MaybeBlock`: The expiry time of the proposal. + * - `ProposalData`: The data of the proposal. **/ - ProposalCreated: AugmentedEvent, Option, PolymeshCommonUtilitiesMaybeBlock, PalletPipsProposalData]>; + ProposalCreated: AugmentedEvent, Option, PolymeshPrimitivesMaybeBlock, PalletPipsProposalData]>; /** - * Refund proposal - * (id, total amount) + * A proposal was refunded. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `PipId`: The ID of the PIP. + * - `Balance`: The total amount refunded. **/ ProposalRefund: AugmentedEvent; /** - * Triggered each time the state of a proposal is amended + * The state of a proposal was updated. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `PipId`: The ID of the PIP. + * - `ProposalState`: The new state of the proposal. **/ ProposalStateUpdated: AugmentedEvent; /** * The snapshot was cleared. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `SnapshotId`: The ID of the snapshot. **/ SnapshotCleared: AugmentedEvent; /** - * Results (e.g., approved, rejected, and skipped), were enacted for some PIPs. - * (gc_did, snapshot_id_opt, skipped_pips_with_new_count, rejected_pips, approved_pips) + * Results were enacted for some PIPs in the snapshot queue. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `Option`: The ID of the snapshot, if any. + * - `Vec<(PipId, SkippedCount)>`: The list of skipped PIPs with their new skip counts. + * - `Vec`: The list of rejected PIPs. + * - `Vec`: The list of approved PIPs. **/ SnapshotResultsEnacted: AugmentedEvent, Vec>, Vec, Vec]>; /** * A new snapshot was taken. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `SnapshotId`: The ID of the snapshot. + * - `Vec`: The list of PIPs in the snapshot. **/ SnapshotTaken: AugmentedEvent]>; /** - * `AccountId` voted `bool` on the proposal referenced by `PipId` + * An account voted on a proposal. + * + * Parameters: + * - `IdentityId`: The DID of the caller. + * - `T::AccountId`: The account that voted. + * - `PipId`: The ID of the PIP. + * - `bool`: The vote (true for aye, false for nay). + * - `Balance`: The deposit amount of the vote. **/ Voted: AugmentedEvent; /** @@ -1014,7 +1121,7 @@ declare module '@polkadot/api-base/types/events' { * Proposal expiry time has been updated. * Parameters: caller DID, new expiry time (if any). **/ - ExpiresAfterUpdated: AugmentedEvent; + ExpiresAfterUpdated: AugmentedEvent; /** * Final votes on a motion (given hash) * caller DID, ProposalIndex, Proposal hash, yes voters, no voter @@ -1074,6 +1181,14 @@ declare module '@polkadot/api-base/types/events' { [key: string]: AugmentedEvent; }; portfolio: { + /** + * Allow another identity to create portfolios. + * + * # Parameters + * * [`IdentityId`] of the caller. + * * [`IdentityId`] allowed to create portfolios. + **/ + AllowIdentityToCreatePortfolios: AugmentedEvent; /** * Funds have moved between portfolios * @@ -1129,6 +1244,14 @@ declare module '@polkadot/api-base/types/events' { * * [`AssetId`] of the asset that has been exempt from explicit affirmation. **/ PreApprovedPortfolio: AugmentedEvent; + /** + * Revoke another identities permission to create portfolios. + * + * # Parameters + * * [`IdentityId`] of the caller. + * * [`IdentityId`] permissions to create portfolios is revoked. + **/ + RevokeCreatePortfoliosPermission: AugmentedEvent; /** * A portfolio has removed the approval of an asset. * @@ -1286,9 +1409,13 @@ declare module '@polkadot/api-base/types/events' { **/ InstructionExecuted: AugmentedEvent; /** - * Instruction failed execution (did, instruction_id) + * An instruction has been sucessfully locked for execution + * + * Parameters: + * - `IdentityId`: The [`IdentityId`] of the caller. + * - `InstructionId`: The [`InstructionId`] of the instruction. **/ - InstructionFailed: AugmentedEvent; + InstructionLocked: AugmentedEvent; /** * An instruction with mediators has been created. * Parameters: [`InstructionId`] of the instruction and the [`IdentityId`] of all mediators. @@ -1373,15 +1500,11 @@ declare module '@polkadot/api-base/types/events' { * NOTE: This event is only emitted when funds are bonded via a dispatchable. Notably, * it will not be emitted for staking rewards when they are added to stake. **/ - Bonded: AugmentedEvent; + Bonded: AugmentedEvent; /** * An account has stopped participating as either a validator or nominator. **/ Chilled: AugmentedEvent; - /** - * Commission cap has been updated. - **/ - CommissionCapUpdated: AugmentedEvent; /** * The era payout has been set; the first balance is the validator-payout; the second is * the remainder from the maximum amount of reward. @@ -1391,18 +1514,10 @@ declare module '@polkadot/api-base/types/events' { * A new force era mode was set. **/ ForceEra: AugmentedEvent; - /** - * Remove the nominators from the valid nominators when there CDD expired. - **/ - InvalidatedNominators: AugmentedEvent], { governanceCouncillDid: PolymeshPrimitivesIdentityId, governanceCouncillAccount: PolymeshPrimitivesIdentityId, expiredNominators: Vec }>; /** * A nominator has been kicked from a validator. **/ Kicked: AugmentedEvent; - /** - * User has updated their nominations. - **/ - Nominated: AugmentedEvent], { nominatorIdentity: PolymeshPrimitivesIdentityId, stash: AccountId32, targets: Vec }>; /** * An old slashing report from a prior era was discarded because it could * not be processed. @@ -1412,30 +1527,14 @@ declare module '@polkadot/api-base/types/events' { * The stakers' rewards are getting paid. **/ PayoutStarted: AugmentedEvent; - /** - * An identity has issued a candidacy for becoming a validator. - **/ - PermissionedIdentityAdded: AugmentedEvent; - /** - * An identity has been removed from the permissioned identities pool. - **/ - PermissionedIdentityRemoved: AugmentedEvent; /** * The nominator has been rewarded by this amount. **/ - Rewarded: AugmentedEvent; - /** - * Reward scheduling interrupted. - **/ - RewardPaymentSchedulingInterrupted: AugmentedEvent; + Rewarded: AugmentedEvent; /** * A staker (validator or nominator) has been slashed by the given amount. **/ Slashed: AugmentedEvent; - /** - * Slashing allowed has been updated. - **/ - SlashingAllowedForChanged: AugmentedEvent; /** * A slash for the given validator, for the given percentage of their stake, at the given * era as been reported. @@ -1452,7 +1551,7 @@ declare module '@polkadot/api-base/types/events' { /** * An account has unbonded this amount. **/ - Unbonded: AugmentedEvent; + Unbonded: AugmentedEvent; /** * A validator has set their preferences. **/ @@ -1511,35 +1610,47 @@ declare module '@polkadot/api-base/types/events' { }; sto: { /** - * A fundraiser has been stopped. - * (Agent DID, fundraiser id) + * A fundraiser has been permanently closed. + * + * [agent_did, offering_asset, fundraiser_id] **/ - FundraiserClosed: AugmentedEvent; + FundraiserClosed: AugmentedEvent; /** * A new fundraiser has been created. - * (Agent DID, fundraiser id, fundraiser name, fundraiser details) + * + * [agent_did, offering_asset, raising_asset, fundraiser_id, fundraiser_name, fundraiser] **/ - FundraiserCreated: AugmentedEvent; + FundraiserCreated: AugmentedEvent; /** - * A fundraiser has been frozen. - * (Agent DID, fundraiser id) + * A fundraiser has been frozen, preventing new investments. + * + * [agent_did, offering_asset, fundraiser_id] **/ - FundraiserFrozen: AugmentedEvent; + FundraiserFrozen: AugmentedEvent; /** - * A fundraiser has been unfrozen. - * (Agent DID, fundraiser id) + * Off-chain funding has been enabled for a fundraiser. + * + * [agent_did, offering_asset, fundraiser_id, ticker] **/ - FundraiserUnfrozen: AugmentedEvent; + FundraiserOffchainFundingEnabled: AugmentedEvent; /** - * A fundraiser window has been modified. - * (Agent DID, fundraiser id, old_start, old_end, new_start, new_end) + * A fundraiser has been unfrozen, allowing new investments. + * + * [agent_did, offering_asset, fundraiser_id] **/ - FundraiserWindowModified: AugmentedEvent, u64, Option]>; + FundraiserUnfrozen: AugmentedEvent; /** - * An investor invested in the fundraiser. - * (Investor, fundraiser_id, offering token, raise token, offering_token_amount, raise_token_amount) + * A fundraiser's time window has been modified. + * + * [agent_did, offering_asset, fundraiser_id, old_start, old_end, new_start, new_end] **/ - Invested: AugmentedEvent; + FundraiserWindowModified: AugmentedEvent, newStart: u64, newEnd: Option], { agentDid: PolymeshPrimitivesEventOnly, offeringAsset: PolymeshPrimitivesAssetAssetId, fundraiserId: u64, oldStart: u64, oldEnd: Option, newStart: u64, newEnd: Option }>; + /** + * An investor successfully invested in the fundraiser. + * + * [investor_did, offering_asset, fundraiser_id, funding_asset, offering_amount, raise_amount] + **/ + Invested: AugmentedEvent; /** * Generic event **/ @@ -1547,17 +1658,17 @@ declare module '@polkadot/api-base/types/events' { }; sudo: { /** - * The \[sudoer\] just switched identity; the old key is supplied. + * The \[sudoer\] just switched identity; the old key is supplied if one existed. **/ - KeyChanged: AugmentedEvent]>; + KeyChanged: AugmentedEvent], { oldSudoer: Option }>; /** * A sudo just took place. \[result\] **/ - Sudid: AugmentedEvent]>; + Sudid: AugmentedEvent], { sudoResult: Result }>; /** * A sudo just took place. \[result\] **/ - SudoAsDone: AugmentedEvent]>; + SudoAsDone: AugmentedEvent], { sudoResult: Result }>; /** * Generic event **/ @@ -1609,7 +1720,7 @@ declare module '@polkadot/api-base/types/events' { * Proposal expiry time has been updated. * Parameters: caller DID, new expiry time (if any). **/ - ExpiresAfterUpdated: AugmentedEvent; + ExpiresAfterUpdated: AugmentedEvent; /** * Final votes on a motion (given hash) * caller DID, ProposalIndex, Proposal hash, yes voters, no voter @@ -1658,7 +1769,8 @@ declare module '@polkadot/api-base/types/events' { **/ ActiveLimitChanged: AugmentedEvent; /** - * Phantom member, never used. + * Phantom member, never used. This can be removed now. FRAME v2 doesn't require this. + * TODO: remove. **/ Dummy: AugmentedEvent; /** @@ -1691,23 +1803,6 @@ declare module '@polkadot/api-base/types/events' { **/ [key: string]: AugmentedEvent; }; - testUtils: { - /** - * Shows the `DID` associated to the `AccountId`, and a flag indicates if that DID has a - * valid CDD claim. - * (Target DID, Target Account, a valid CDD claim exists) - **/ - CddStatus: AugmentedEvent, AccountId32, bool]>; - /** - * Emits the `IdentityId` and the `AccountId` of the caller. - * (Caller DID, Caller account) - **/ - DidStatus: AugmentedEvent; - /** - * Generic event - **/ - [key: string]: AugmentedEvent; - }; transactionPayment: { /** * A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee, @@ -1759,7 +1854,7 @@ declare module '@polkadot/api-base/types/events' { * Proposal expiry time has been updated. * Parameters: caller DID, new expiry time (if any). **/ - ExpiresAfterUpdated: AugmentedEvent; + ExpiresAfterUpdated: AugmentedEvent; /** * Final votes on a motion (given hash) * caller DID, ProposalIndex, Proposal hash, yes voters, no voter @@ -1808,7 +1903,8 @@ declare module '@polkadot/api-base/types/events' { **/ ActiveLimitChanged: AugmentedEvent; /** - * Phantom member, never used. + * Phantom member, never used. This can be removed now. FRAME v2 doesn't require this. + * TODO: remove. **/ Dummy: AugmentedEvent; /** @@ -1846,12 +1942,6 @@ declare module '@polkadot/api-base/types/events' { * Batch of dispatches completed fully with no error. **/ BatchCompleted: AugmentedEvent; - /** - * Batch of dispatches completed fully with no error. - * Includes a vector of event counts for each dispatch. - * POLYMESH: event deprecated. - **/ - BatchCompletedOld: AugmentedEvent]>; /** * Batch of dispatches completed but has errors. **/ @@ -1861,20 +1951,6 @@ declare module '@polkadot/api-base/types/events' { * well as the error. **/ BatchInterrupted: AugmentedEvent; - /** - * Batch of dispatches did not complete fully. - * Includes a vector of event counts for each dispatch and - * the index of the first failing dispatch as well as the error. - * POLYMESH: event deprecated. - **/ - BatchInterruptedOld: AugmentedEvent, ITuple<[u32, SpRuntimeDispatchError]>]>; - /** - * Batch of dispatches did not complete fully. - * Includes a vector of event counts for each call and - * a vector of any failed dispatches with their indices and associated error. - * POLYMESH: event deprecated. - **/ - BatchOptimisticFailed: AugmentedEvent, Vec>]>; /** * A call was dispatched. **/ @@ -1897,5 +1973,39 @@ declare module '@polkadot/api-base/types/events' { **/ [key: string]: AugmentedEvent; }; + validators: { + /** + * Commission cap has been updated. + **/ + CommissionCapUpdated: AugmentedEvent; + /** + * Remove the nominators from the valid nominators when there CDD expired. + **/ + InvalidatedNominators: AugmentedEvent], { governanceCouncillDid: PolymeshPrimitivesIdentityId, governanceCouncillAccount: PolymeshPrimitivesIdentityId, expiredNominators: Vec }>; + /** + * User has updated their nominations. + **/ + Nominated: AugmentedEvent], { nominatorIdentity: PolymeshPrimitivesIdentityId, stash: AccountId32, targets: Vec }>; + /** + * An identity has issued a candidacy for becoming a validator. + **/ + PermissionedIdentityAdded: AugmentedEvent; + /** + * An identity has been removed from the permissioned identities pool. + **/ + PermissionedIdentityRemoved: AugmentedEvent; + /** + * Reward scheduling interrupted. + **/ + RewardPaymentSchedulingInterrupted: AugmentedEvent; + /** + * Slashing allowed has been updated. + **/ + SlashingAllowedForChanged: AugmentedEvent; + /** + * Generic event + **/ + [key: string]: AugmentedEvent; + }; } // AugmentedEvents } // declare module diff --git a/scripts/cli/src/interfaces/augment-api-query.ts b/scripts/cli/src/interfaces/augment-api-query.ts index 3cadc7357d..6257297dfd 100644 --- a/scripts/cli/src/interfaces/augment-api-query.ts +++ b/scripts/cli/src/interfaces/augment-api-query.ts @@ -6,10 +6,10 @@ import '@polkadot/api-base/types/storage'; import type { ApiTypes, AugmentedQuery, QueryableStorageEntry } from '@polkadot/api-base/types'; -import type { BTreeSet, Bytes, Null, Option, U8aFixed, Vec, WrapperOpaque, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; +import type { BTreeSet, Bytes, Null, Option, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H256, Perbill, Percent, Permill } from '@polkadot/types/interfaces/runtime'; -import type { FrameSupportDispatchPerDispatchClassWeight, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, PalletAssetAssetDetails, PalletAssetTickerRegistration, PalletAssetTickerRegistrationConfig, PalletBalancesBalanceLock, PalletBridgeBridgeTxDetail, PalletCommitteePolymeshVotes, PalletContractsStorageContractInfo, PalletContractsStorageDeletedContract, PalletContractsWasmOwnerInfo, PalletContractsWasmPrefabWasmModule, PalletCorporateActionsBallotBallotMeta, PalletCorporateActionsBallotBallotTimeRange, PalletCorporateActionsBallotBallotVote, PalletCorporateActionsCaId, PalletCorporateActionsCorporateAction, PalletCorporateActionsDistribution, PalletCorporateActionsTargetIdentities, PalletElectionProviderMultiPhasePhase, PalletElectionProviderMultiPhaseReadySolution, PalletElectionProviderMultiPhaseRoundSnapshot, PalletElectionProviderMultiPhaseSignedSignedSubmission, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletIdentityClaim1stKey, PalletIdentityClaim2ndKey, PalletImOnlineBoundedOpaqueNetworkState, PalletImOnlineSr25519AppSr25519Public, PalletPipsDepositInfo, PalletPipsPip, PalletPipsPipsMetadata, PalletPipsProposalState, PalletPipsSnapshotMetadata, PalletPipsSnapshottedPip, PalletPipsVote, PalletPipsVotingResult, PalletPreimageRequestStatus, PalletRelayerSubsidy, PalletSchedulerScheduled, PalletStakingActiveEraInfo, PalletStakingEraRewardPoints, PalletStakingExposure, PalletStakingForcing, PalletStakingNominations, PalletStakingPermissionedIdentityPrefs, PalletStakingRewardDestination, PalletStakingSlashingSlashingSpans, PalletStakingSlashingSpanRecord, PalletStakingSlashingSwitch, PalletStakingStakingLedger, PalletStakingUnappliedSlash, PalletStakingValidatorPrefs, PalletStoFundraiser, PalletTransactionPaymentReleases, PolymeshCommonUtilitiesCheckpointNextCheckpoints, PolymeshCommonUtilitiesCheckpointScheduleCheckpoints, PolymeshCommonUtilitiesGroupInactiveMember, PolymeshCommonUtilitiesMaybeBlock, PolymeshCommonUtilitiesProtocolFeeProtocolOp, PolymeshContractsApi, PolymeshContractsApiCodeHash, PolymeshContractsChainExtensionExtrinsicId, PolymeshContractsNextUpgrade, PolymeshPrimitivesAgentAgentGroup, PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetIdentifier, PolymeshPrimitivesAssetMetadataAssetMetadataKey, PolymeshPrimitivesAssetMetadataAssetMetadataSpec, PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail, PolymeshPrimitivesAuthorization, PolymeshPrimitivesComplianceManagerAssetCompliance, PolymeshPrimitivesConditionTrustedIssuer, PolymeshPrimitivesDocument, PolymeshPrimitivesIdentityClaim, PolymeshPrimitivesIdentityDidRecord, PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesMemo, PolymeshPrimitivesMultisigProposalState, PolymeshPrimitivesMultisigProposalVoteCount, PolymeshPrimitivesNftNftCollection, PolymeshPrimitivesPosRatio, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions, PolymeshPrimitivesSecondaryKeyKeyRecord, PolymeshPrimitivesSecondaryKeySignatory, PolymeshPrimitivesSettlementAffirmationStatus, PolymeshPrimitivesSettlementInstruction, PolymeshPrimitivesSettlementInstructionStatus, PolymeshPrimitivesSettlementLeg, PolymeshPrimitivesSettlementLegStatus, PolymeshPrimitivesSettlementMediatorAffirmationStatus, PolymeshPrimitivesSettlementVenue, PolymeshPrimitivesStatisticsStat1stKey, PolymeshPrimitivesStatisticsStat2ndKey, PolymeshPrimitivesStatisticsStatType, PolymeshPrimitivesSubsetSubsetRestrictionAssetId, PolymeshPrimitivesSubsetSubsetRestrictionPortfolioId, PolymeshPrimitivesTicker, PolymeshPrimitivesTransferComplianceAssetTransferCompliance, PolymeshPrimitivesTransferComplianceTransferConditionExemptKey, PolymeshRuntimeDevelopRuntimeSessionKeys, SpConsensusBabeAppPublic, SpConsensusBabeBabeEpochConfiguration, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusBabeDigestsPreDigest, SpCoreCryptoKeyTypeId, SpNposElectionsElectionScore, SpRuntimeDigest, SpStakingOffenceOffenceDetails } from '@polkadot/types/lookup'; +import type { FrameSupportDispatchPerDispatchClassWeight, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, PalletAssetAssetDetails, PalletAssetTickerRegistration, PalletAssetTickerRegistrationConfig, PalletBalancesBalanceLock, PalletCommitteePolymeshVotes, PalletContractsStorageContractInfo, PalletContractsStorageDeletionQueueManager, PalletContractsWasmCodeInfo, PalletCorporateActionsBallotBallotMeta, PalletCorporateActionsBallotBallotTimeRange, PalletCorporateActionsBallotBallotVote, PalletCorporateActionsCaId, PalletCorporateActionsCorporateAction, PalletCorporateActionsDistribution, PalletCorporateActionsTargetIdentities, PalletElectionProviderMultiPhasePhase, PalletElectionProviderMultiPhaseReadySolution, PalletElectionProviderMultiPhaseRoundSnapshot, PalletElectionProviderMultiPhaseSignedSignedSubmission, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletIdentityClaim1stKey, PalletIdentityClaim2ndKey, PalletImOnlineSr25519AppSr25519Public, PalletPipsDepositInfo, PalletPipsPip, PalletPipsPipsMetadata, PalletPipsProposalState, PalletPipsSnapshotMetadata, PalletPipsSnapshottedPip, PalletPipsVote, PalletPipsVotingResult, PalletPreimageRequestStatus, PalletRelayerSubsidy, PalletSchedulerScheduled, PalletStakingActiveEraInfo, PalletStakingEraRewardPoints, PalletStakingExposure, PalletStakingForcing, PalletStakingNominations, PalletStakingRewardDestination, PalletStakingSlashingSlashingSpans, PalletStakingSlashingSpanRecord, PalletStakingStakingLedger, PalletStakingUnappliedSlash, PalletStakingValidatorPrefs, PalletStoFundraiser, PalletTransactionPaymentReleases, PalletValidatorsPermissionedIdentityPrefs, PalletValidatorsSlashingSwitch, PolymeshCommonUtilitiesCheckpointNextCheckpoints, PolymeshCommonUtilitiesCheckpointScheduleCheckpoints, PolymeshCommonUtilitiesProtocolFeeProtocolOp, PolymeshContractsApi, PolymeshContractsApiCodeHash, PolymeshContractsChainExtensionExtrinsicId, PolymeshContractsNextUpgrade, PolymeshPrimitivesAgentAgentGroup, PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetIdentifier, PolymeshPrimitivesAssetMetadataAssetMetadataKey, PolymeshPrimitivesAssetMetadataAssetMetadataSpec, PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail, PolymeshPrimitivesAuthorization, PolymeshPrimitivesComplianceManagerAssetCompliance, PolymeshPrimitivesConditionTrustedIssuer, PolymeshPrimitivesDocument, PolymeshPrimitivesGroupInactiveMember, PolymeshPrimitivesIdentityClaim, PolymeshPrimitivesIdentityDidRecord, PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesMaybeBlock, PolymeshPrimitivesMemo, PolymeshPrimitivesMultisigProposalState, PolymeshPrimitivesMultisigProposalVoteCount, PolymeshPrimitivesNftNftCollection, PolymeshPrimitivesPosRatio, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions, PolymeshPrimitivesSecondaryKeyKeyRecord, PolymeshPrimitivesSecondaryKeySignatory, PolymeshPrimitivesSettlementAffirmationStatus, PolymeshPrimitivesSettlementInstruction, PolymeshPrimitivesSettlementInstructionStatus, PolymeshPrimitivesSettlementLeg, PolymeshPrimitivesSettlementLegStatus, PolymeshPrimitivesSettlementMediatorAffirmationStatus, PolymeshPrimitivesSettlementVenue, PolymeshPrimitivesStatisticsStat1stKey, PolymeshPrimitivesStatisticsStat2ndKey, PolymeshPrimitivesStatisticsStatType, PolymeshPrimitivesSubsetSubsetRestrictionAssetId, PolymeshPrimitivesSubsetSubsetRestrictionPortfolioId, PolymeshPrimitivesTicker, PolymeshPrimitivesTransferComplianceAssetTransferCompliance, PolymeshPrimitivesTransferComplianceTransferConditionExemptKey, PolymeshRuntimeDevelopRuntimeSessionKeys, SpConsensusBabeAppPublic, SpConsensusBabeBabeEpochConfiguration, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusBabeDigestsPreDigest, SpCoreCryptoKeyTypeId, SpNposElectionsElectionScore, SpRuntimeDigest, SpStakingOffenceOffenceDetails } from '@polkadot/types/lookup'; import type { Observable } from '@polkadot/types/types'; export type __AugmentedQuery = AugmentedQuery unknown>; @@ -33,7 +33,7 @@ declare module '@polkadot/api-base/types/storage' { /** * Maps all [`AssetId`] that are mapped to a [`Ticker`]. **/ - assetIDTicker: AugmentedQuery Observable>, [PolymeshPrimitivesAssetAssetId]> & QueryableStorageEntry; + assetIdTicker: AugmentedQuery Observable>, [PolymeshPrimitivesAssetAssetId]> & QueryableStorageEntry; /** * Asset Metadata Global Key -> Name. **/ @@ -109,7 +109,7 @@ declare module '@polkadot/api-base/types/storage' { **/ customTypesInverse: AugmentedQuery Observable>, [Bytes]> & QueryableStorageEntry; /** - * Returns `true` if transfers for the token associated to [`AssetId`] are frozen. Otherwise, returns `false`. + * Returns `true` if transfers for the asset are frozen. Otherwise, returns `false`. **/ frozen: AugmentedQuery Observable, [PolymeshPrimitivesAssetAssetId]> & QueryableStorageEntry; /** @@ -129,7 +129,7 @@ declare module '@polkadot/api-base/types/storage' { **/ preApprovedAsset: AugmentedQuery Observable, [PolymeshPrimitivesIdentityId, PolymeshPrimitivesAssetAssetId]> & QueryableStorageEntry; /** - * All security tokens owned by a user. + * All assets owned by a user. **/ securityTokensOwnedByUser: AugmentedQuery Observable, [PolymeshPrimitivesIdentityId, PolymeshPrimitivesAssetAssetId]> & QueryableStorageEntry; /** @@ -149,7 +149,7 @@ declare module '@polkadot/api-base/types/storage' { **/ tickersOwnedByUser: AugmentedQuery Observable, [PolymeshPrimitivesIdentityId, PolymeshPrimitivesTicker]> & QueryableStorageEntry; /** - * Maps each [`Ticker`] to its registration details ([`TickerRegistration`]). + * Map each [`Ticker`] to its registration details ([`TickerRegistration`]). **/ uniqueTickerRegistration: AugmentedQuery Observable>, [PolymeshPrimitivesTicker]> & QueryableStorageEntry; /** @@ -295,58 +295,6 @@ declare module '@polkadot/api-base/types/storage' { **/ [key: string]: QueryableStorageEntry; }; - bridge: { - /** - * The admin key. - **/ - admin: AugmentedQuery Observable>, []> & QueryableStorageEntry; - /** - * The maximum number of bridged POLYX per identity within a set interval of - * blocks. Fields: POLYX amount and the block interval duration. - **/ - bridgeLimit: AugmentedQuery Observable>, []> & QueryableStorageEntry; - /** - * Identities not constrained by the bridge limit. - **/ - bridgeLimitExempted: AugmentedQuery Observable, [PolymeshPrimitivesIdentityId]> & QueryableStorageEntry; - /** - * Details of bridge transactions identified with pairs of the recipient account and the - * bridge transaction nonce. - **/ - bridgeTxDetails: AugmentedQuery Observable, [AccountId32, u32]> & QueryableStorageEntry; - /** - * The multisig account of the bridge controller. The genesis signers accept their - * authorizations and are able to get their proposals delivered. The bridge creator - * transfers some POLY to their identity. - **/ - controller: AugmentedQuery Observable>, []> & QueryableStorageEntry; - /** - * Freeze bridge admins. These accounts can only freeze the bridge. - **/ - freezeAdmins: AugmentedQuery Observable, [AccountId32]> & QueryableStorageEntry; - /** - * Whether or not the bridge operation is frozen. - **/ - frozen: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** - * Amount of POLYX bridged by the identity in last block interval. Fields: the bridged - * amount and the last interval number. - **/ - polyxBridged: AugmentedQuery Observable>, [PolymeshPrimitivesIdentityId]> & QueryableStorageEntry; - /** - * Storage version. - **/ - storageVersion: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** - * The bridge transaction timelock period, in blocks, since the acceptance of the - * transaction proposal during which the admin key can freeze the transaction. - **/ - timelock: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** - * Generic query - **/ - [key: string]: QueryableStorageEntry; - }; capitalDistribution: { /** * All capital distributions, tied to their respective corporate actions (CAs). @@ -381,7 +329,7 @@ declare module '@polkadot/api-base/types/storage' { /** * The current "inactive" membership, stored as an ordered Vec. **/ - inactiveMembers: AugmentedQuery Observable>, []> & QueryableStorageEntry; + inactiveMembers: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** * Generic query **/ @@ -483,7 +431,7 @@ declare module '@polkadot/api-base/types/storage' { /** * The current "inactive" membership, stored as an ordered Vec. **/ - inactiveMembers: AugmentedQuery Observable>, []> & QueryableStorageEntry; + inactiveMembers: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** * Generic query **/ @@ -509,9 +457,9 @@ declare module '@polkadot/api-base/types/storage' { }; contracts: { /** - * A mapping between an original code hash and instrumented wasm code, ready for execution. + * A mapping from a contract's code hash to its code info. **/ - codeStorage: AugmentedQuery Observable>, [H256]> & QueryableStorageEntry; + codeInfoOf: AugmentedQuery Observable>, [H256]> & QueryableStorageEntry; /** * The code associated with a given account. * @@ -522,9 +470,19 @@ declare module '@polkadot/api-base/types/storage' { * Evicted contracts that await child trie deletion. * * Child trie deletion is a heavy operation depending on the amount of storage items - * stored in said trie. Therefore this operation is performed lazily in `on_initialize`. + * stored in said trie. Therefore this operation is performed lazily in `on_idle`. + **/ + deletionQueue: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + /** + * A pair of monotonic counters used to track the latest contract marked for deletion + * and the latest deleted contract in queue. **/ - deletionQueue: AugmentedQuery Observable>, []> & QueryableStorageEntry; + deletionQueueCounter: AugmentedQuery Observable, []> & QueryableStorageEntry; + /** + * A migration can span across multiple blocks. This storage defines a cursor to track the + * progress of the migration, enabling us to resume from the last completed position. + **/ + migrationInProgress: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** * This is a **monotonic** counter incremented on contract instantiation. * @@ -551,11 +509,7 @@ declare module '@polkadot/api-base/types/storage' { **/ nonce: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * A mapping between an original code hash and its owner information. - **/ - ownerInfoOf: AugmentedQuery Observable>, [H256]> & QueryableStorageEntry; - /** - * A mapping from an original code hash to the original code, untouched by instrumentation. + * A mapping from a contract's code hash to its code. **/ pristineCode: AugmentedQuery Observable>, [H256]> & QueryableStorageEntry; /** @@ -715,6 +669,8 @@ declare module '@polkadot/api-base/types/storage' { minimumUntrustedScore: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** * Current best solution, signed or unsigned, queued to be returned upon `elect`. + * + * Always sorted by score. **/ queuedSolution: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** @@ -798,6 +754,9 @@ declare module '@polkadot/api-base/types/storage' { * Maps an `AssetId` to the number of `Full` agents for it. **/ numFullAgents: AugmentedQuery Observable, [PolymeshPrimitivesAssetAssetId]> & QueryableStorageEntry; + /** + * Storage version. + **/ storageVersion: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * Generic query @@ -881,7 +840,7 @@ declare module '@polkadot/api-base/types/storage' { **/ currentAuthId: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * It stores the current gas fee payer for the current transaction + * It stores the current gas fee payer for the current transaction. **/ currentPayer: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** @@ -889,7 +848,7 @@ declare module '@polkadot/api-base/types/storage' { **/ customClaimIdSequence: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * CustomClaimTypeId -> String constant + * CusotmClaimTypeId -> String constant **/ customClaims: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; /** @@ -978,10 +937,9 @@ declare module '@polkadot/api-base/types/storage' { **/ keys: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** - * For each session index, we keep a mapping of `SessionIndex` and `AuthIndex` to - * `WrapperOpaque`. + * For each session index, we keep a mapping of `SessionIndex` and `AuthIndex`. **/ - receivedHeartbeats: AugmentedQuery Observable>>, [u32, u32]> & QueryableStorageEntry; + receivedHeartbeats: AugmentedQuery Observable>, [u32, u32]> & QueryableStorageEntry; /** * Generic query **/ @@ -1015,6 +973,12 @@ declare module '@polkadot/api-base/types/storage' { * Proposal execution reentry guard. **/ executionReentry: AugmentedQuery Observable, []> & QueryableStorageEntry; + /** + * The last proposal id before the multisig changed signers or signatures required. + * + * multisig => Option + **/ + lastInvalidProposal: AugmentedQuery Observable>, [AccountId32]> & QueryableStorageEntry; /** * Nonce to ensure unique MultiSig addresses are generated; starts from 1. **/ @@ -1111,17 +1075,13 @@ declare module '@polkadot/api-base/types/storage' { **/ nftOwner: AugmentedQuery Observable>, [PolymeshPrimitivesAssetAssetId, u64]> & QueryableStorageEntry; /** - * The total number of NFTs in a collection + * The total number of NFTs in a collection. **/ nfTsInCollection: AugmentedQuery Observable, [PolymeshPrimitivesAssetAssetId]> & QueryableStorageEntry; /** * The total number of NFTs per identity. **/ numberOfNFTs: AugmentedQuery Observable, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesIdentityId]> & QueryableStorageEntry; - /** - * Storage version. - **/ - storageVersion: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * Generic query **/ @@ -1136,15 +1096,6 @@ declare module '@polkadot/api-base/types/storage' { * The primary structure that holds all offence records keyed by report identifiers. **/ reports: AugmentedQuery Observable>, [H256]> & QueryableStorageEntry; - /** - * Enumerates all reports of a kind along with the time they happened. - * - * All reports are sorted by the time of offence. - * - * Note that the actual type of this mapping is `Vec`, this is because values of - * different types are not supported at the moment so we are doing the manual serialization. - **/ - reportsByKindIndex: AugmentedQuery Observable, [U8aFixed]> & QueryableStorageEntry; /** * Generic query **/ @@ -1152,12 +1103,11 @@ declare module '@polkadot/api-base/types/storage' { }; pips: { /** - * Total count of current pending or scheduled PIPs. + * Total count of pending or scheduled PIPs. **/ activePipCount: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * The maximum allowed number for `ActivePipCount`. - * Once reached, new PIPs cannot be proposed by community members. + * The maximum allowed number for active PIPs. Once reached, new PIPs cannot be proposed by community members. **/ activePipLimit: AugmentedQuery Observable, []> & QueryableStorageEntry; /** @@ -1170,8 +1120,7 @@ declare module '@polkadot/api-base/types/storage' { **/ defaultEnactmentPeriod: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * Those who have locked a deposit. - * proposal (id, proposer) -> deposit + * All locked [`DepositInfo`] per [`PipId`] for each account. **/ deposits: AugmentedQuery Observable>, [u32, AccountId32]> & QueryableStorageEntry; /** @@ -1192,12 +1141,15 @@ declare module '@polkadot/api-base/types/storage' { **/ minimumProposalDeposit: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * How many blocks will it take, after a `Pending` PIP expires, - * assuming it has not transitioned to another `ProposalState`? + * Number of blocks it will take, after a `Pending` PIP expires, assuming it has not transitioned to another `ProposalState`. **/ - pendingPipExpiry: AugmentedQuery Observable, []> & QueryableStorageEntry; + pendingPipExpiry: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * Proposals so far. id can be used to keep track of PIPs off-chain. + * All PIPs that still require refunds. + **/ + pendingRefunds: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; + /** + * Proposal's identifier. **/ pipIdSequence: AugmentedQuery Observable, []> & QueryableStorageEntry; /** @@ -1206,43 +1158,39 @@ declare module '@polkadot/api-base/types/storage' { **/ pipSkipCount: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; /** - * Maps PIPs to the block at which they will be executed, if any. + * Maps PIPs to the block at which they will be executed. **/ pipToSchedule: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; /** - * The metadata of the active proposals. + * The [`PipsMetadata`] for each proposal ([`PipId`]). **/ proposalMetadata: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; /** - * PolymeshVotes on a given proposal, if it is ongoing. - * proposal id -> vote count + * The [`VotingResult`] for each proposal ([`PipId`]). **/ proposalResult: AugmentedQuery Observable, [u32]> & QueryableStorageEntry; /** - * Actual proposal for a given id, if it's current. - * proposal id -> proposal + * The [`Pip`] for each proposal ([`PipId`]). **/ proposals: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; /** - * Proposal state for a given id. - * proposal id -> proposalState + * The ([`ProposalState`]) of a given PIP ([`PipId`]). **/ proposalStates: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; /** - * Votes per Proposal and account. Used to avoid double vote issue. - * (proposal id, account) -> Vote + * The Votes ([`Vote`]) for each proposal ([`PipId`]) per account. **/ proposalVotes: AugmentedQuery Observable>, [u32, AccountId32]> & QueryableStorageEntry; /** - * Determines whether historical PIP data is persisted or removed + * Set to `true` if historical PIPs data must be removed. **/ pruneHistoricalPips: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * Snapshots so far. id can be used to keep track of snapshots off-chain. + * Snaphot's identifier. **/ snapshotIdSequence: AugmentedQuery Observable, []> & QueryableStorageEntry; /** - * The metadata of the snapshot, if there is one. + * The [`SnapshotMetadata`]. **/ snapshotMeta: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** @@ -1253,7 +1201,14 @@ declare module '@polkadot/api-base/types/storage' { * Once a (configurable) threshhold is exceeded, a PIP cannot be skipped again. **/ snapshotQueue: AugmentedQuery Observable>, []> & QueryableStorageEntry; + /** + * Storage version. + **/ storageVersion: AugmentedQuery Observable, []> & QueryableStorageEntry; + /** + * All PIPs that still require votes to be pruned. + **/ + votesToBePruned: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; /** * Generic query **/ @@ -1263,7 +1218,7 @@ declare module '@polkadot/api-base/types/storage' { /** * Time after which a proposal will expire. **/ - expiresAfter: AugmentedQuery Observable, []> & QueryableStorageEntry; + expiresAfter: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * The current members of the committee. **/ @@ -1281,13 +1236,9 @@ declare module '@polkadot/api-base/types/storage' { **/ proposals: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** - * Release coordinator. + * Release cooridinator. **/ releaseCoordinator: AugmentedQuery Observable>, []> & QueryableStorageEntry; - /** - * Storage version. - **/ - storageVersion: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * Vote threshold for an approval. **/ @@ -1539,6 +1490,10 @@ declare module '@polkadot/api-base/types/storage' { * Instruction statuses. instruction_id -> InstructionStatus **/ instructionStatuses: AugmentedQuery Observable, [u64]> & QueryableStorageEntry; + /** + * The moment the instruction was moved to the `LockedForExecution` status. + **/ + lockedTimestamp: AugmentedQuery Observable>, [u64]> & QueryableStorageEntry; /** * Tracks the number of signers each venue has. **/ @@ -1561,11 +1516,10 @@ declare module '@polkadot/api-base/types/storage' { **/ userAffirmations: AugmentedQuery Observable, [PolymeshPrimitivesIdentityIdPortfolioId, u64]> & QueryableStorageEntry; /** - * Array of venues created by an identity. Only needed for the UI. IdentityId -> Vec * Venues create by an identity. * Only needed for the UI. * - * identity -> venue_id () + * identity -> venue_id -> () **/ userVenues: AugmentedQuery Observable, [PolymeshPrimitivesIdentityId, u64]> & QueryableStorageEntry; /** @@ -1799,15 +1753,6 @@ declare module '@polkadot/api-base/types/storage' { * TWOX-NOTE: SAFE since `AccountId` is a secure hash. **/ payee: AugmentedQuery Observable, [AccountId32]> & QueryableStorageEntry; - /** - * Entities that are allowed to run operator/validator nodes. - **/ - permissionedIdentity: AugmentedQuery Observable>, [PolymeshPrimitivesIdentityId]> & QueryableStorageEntry; - polymeshStorageVersion: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** - * Slashing switch for validators & Nominators. - **/ - slashingAllowedFor: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * Slashing spans for stash accounts. **/ @@ -1827,10 +1772,6 @@ declare module '@polkadot/api-base/types/storage' { * All unapplied slashes that are queued for later. **/ unappliedSlashes: AugmentedQuery Observable>, [u32]> & QueryableStorageEntry; - /** - * Allows flexibility in commission. Every validator has commission that should be in the range [0, Cap]. - **/ - validatorCommissionCap: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * The ideal number of active validators. **/ @@ -1887,6 +1828,10 @@ declare module '@polkadot/api-base/types/storage' { * (AssetId, fundraiser_id) -> Fundraiser name **/ fundraiserNames: AugmentedQuery Observable>, [PolymeshPrimitivesAssetAssetId, u64]> & QueryableStorageEntry; + /** + * If the fundraiser supports off-chain funding payments using receipts. + **/ + fundraiserOffchainAsset: AugmentedQuery Observable>, [PolymeshPrimitivesAssetAssetId, u64]> & QueryableStorageEntry; /** * All fundraisers that are currently running. * (AssetId, fundraiser_id) -> Fundraiser @@ -1954,7 +1899,7 @@ declare module '@polkadot/api-base/types/storage' { * allows light-clients to leverage the changes trie storage tracking mechanism and * in case of changes fetch the list of events of interest. * - * The value has the type `(T::BlockNumber, EventIndex)` because if we used only just + * The value has the type `(BlockNumberFor, EventIndex)` because if we used only just * the `EventIndex` then in case if the topic has the same contents on the next block * no notification will be triggered thus the event might be lost. **/ @@ -2001,7 +1946,7 @@ declare module '@polkadot/api-base/types/storage' { /** * Time after which a proposal will expire. **/ - expiresAfter: AugmentedQuery Observable, []> & QueryableStorageEntry; + expiresAfter: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * The current members of the committee. **/ @@ -2019,13 +1964,9 @@ declare module '@polkadot/api-base/types/storage' { **/ proposals: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** - * Release coordinator. + * Release cooridinator. **/ releaseCoordinator: AugmentedQuery Observable>, []> & QueryableStorageEntry; - /** - * Storage version. - **/ - storageVersion: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * Vote threshold for an approval. **/ @@ -2051,13 +1992,7 @@ declare module '@polkadot/api-base/types/storage' { /** * The current "inactive" membership, stored as an ordered Vec. **/ - inactiveMembers: AugmentedQuery Observable>, []> & QueryableStorageEntry; - /** - * Generic query - **/ - [key: string]: QueryableStorageEntry; - }; - testUtils: { + inactiveMembers: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** * Generic query **/ @@ -2089,7 +2024,7 @@ declare module '@polkadot/api-base/types/storage' { /** * Time after which a proposal will expire. **/ - expiresAfter: AugmentedQuery Observable, []> & QueryableStorageEntry; + expiresAfter: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * The current members of the committee. **/ @@ -2107,13 +2042,9 @@ declare module '@polkadot/api-base/types/storage' { **/ proposals: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** - * Release coordinator. + * Release cooridinator. **/ releaseCoordinator: AugmentedQuery Observable>, []> & QueryableStorageEntry; - /** - * Storage version. - **/ - storageVersion: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * Vote threshold for an approval. **/ @@ -2139,7 +2070,7 @@ declare module '@polkadot/api-base/types/storage' { /** * The current "inactive" membership, stored as an ordered Vec. **/ - inactiveMembers: AugmentedQuery Observable>, []> & QueryableStorageEntry; + inactiveMembers: AugmentedQuery Observable>, []> & QueryableStorageEntry; /** * Generic query **/ @@ -2156,5 +2087,23 @@ declare module '@polkadot/api-base/types/storage' { **/ [key: string]: QueryableStorageEntry; }; + validators: { + /** + * Entities that are allowed to run operator/validator nodes. + **/ + permissionedIdentity: AugmentedQuery Observable>, [PolymeshPrimitivesIdentityId]> & QueryableStorageEntry; + /** + * Slashing switch for validators & Nominators. + **/ + slashingAllowedFor: AugmentedQuery Observable, []> & QueryableStorageEntry; + /** + * Allows flexibility in commission. Every validator has commission that should be in the range [0, Cap]. + **/ + validatorCommissionCap: AugmentedQuery Observable, []> & QueryableStorageEntry; + /** + * Generic query + **/ + [key: string]: QueryableStorageEntry; + }; } // AugmentedQueries } // declare module diff --git a/scripts/cli/src/interfaces/augment-api-runtime.ts b/scripts/cli/src/interfaces/augment-api-runtime.ts index ff4f4975c1..cea7e4bf36 100644 --- a/scripts/cli/src/interfaces/augment-api-runtime.ts +++ b/scripts/cli/src/interfaces/augment-api-runtime.ts @@ -169,12 +169,20 @@ declare module '@polkadot/api-base/types/calls' { **/ [key: string]: DecoratedCallBase; }; - /** 0x37e397fc7c91f5e4/1 */ + /** 0x37e397fc7c91f5e4/2 */ metadata: { /** * Returns the metadata of a runtime **/ metadata: AugmentedCall Observable>; + /** + * Returns the metadata at a given version. + **/ + metadataAtVersion: AugmentedCall Observable>>; + /** + * Returns the supported metadata versions. + **/ + metadataVersions: AugmentedCall Observable>>; /** * Generic call **/ diff --git a/scripts/cli/src/interfaces/augment-api-tx.ts b/scripts/cli/src/interfaces/augment-api-tx.ts index eeffdd3c19..3151bba02e 100644 --- a/scripts/cli/src/interfaces/augment-api-tx.ts +++ b/scripts/cli/src/interfaces/augment-api-tx.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedSubmittable, SubmittableExtrinsic, SubmittableE import type { BTreeSet, Bytes, Compact, Option, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H256, MultiAddress, Perbill, Percent, Permill } from '@polkadot/types/interfaces/runtime'; -import type { PalletContractsWasmDeterminism, PalletCorporateActionsBallotBallotMeta, PalletCorporateActionsBallotBallotTimeRange, PalletCorporateActionsBallotBallotVote, PalletCorporateActionsCaId, PalletCorporateActionsCaKind, PalletCorporateActionsInitiateCorporateActionArgs, PalletCorporateActionsRecordDateSpec, PalletCorporateActionsTargetIdentities, PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Signature, PalletPipsSnapshotResult, PalletStakingPalletConfigOpPerbill, PalletStakingPalletConfigOpPercent, PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU32, PalletStakingRewardDestination, PalletStakingSlashingSwitch, PalletStakingValidatorPrefs, PalletStoPriceTier, PalletUtilityUniqueCall, PolymeshCommonUtilitiesCheckpointScheduleCheckpoints, PolymeshCommonUtilitiesIdentityCreateChildIdentityWithAuth, PolymeshCommonUtilitiesIdentitySecondaryKeyWithAuth, PolymeshCommonUtilitiesMaybeBlock, PolymeshCommonUtilitiesProtocolFeeProtocolOp, PolymeshContractsApi, PolymeshContractsChainExtensionExtrinsicId, PolymeshContractsNextUpgrade, PolymeshPrimitivesAgentAgentGroup, PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetAssetType, PolymeshPrimitivesAssetIdentifier, PolymeshPrimitivesAssetMetadataAssetMetadataKey, PolymeshPrimitivesAssetMetadataAssetMetadataSpec, PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail, PolymeshPrimitivesAssetNonFungibleType, PolymeshPrimitivesAuthorizationAuthorizationData, PolymeshPrimitivesBeneficiary, PolymeshPrimitivesComplianceManagerComplianceRequirement, PolymeshPrimitivesCondition, PolymeshPrimitivesConditionTrustedIssuer, PolymeshPrimitivesDocument, PolymeshPrimitivesIdentityClaimClaim, PolymeshPrimitivesIdentityClaimClaimType, PolymeshPrimitivesIdentityClaimScope, PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesIdentityIdPortfolioKind, PolymeshPrimitivesMemo, PolymeshPrimitivesNftNfTs, PolymeshPrimitivesNftNftCollectionKeys, PolymeshPrimitivesNftNftMetadataAttribute, PolymeshPrimitivesPortfolioFund, PolymeshPrimitivesPosRatio, PolymeshPrimitivesSecondaryKey, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions, PolymeshPrimitivesSecondaryKeyPermissions, PolymeshPrimitivesSecondaryKeySignatory, PolymeshPrimitivesSettlementAffirmationCount, PolymeshPrimitivesSettlementAssetCount, PolymeshPrimitivesSettlementLeg, PolymeshPrimitivesSettlementReceiptDetails, PolymeshPrimitivesSettlementSettlementType, PolymeshPrimitivesSettlementVenueType, PolymeshPrimitivesStatisticsStatType, PolymeshPrimitivesStatisticsStatUpdate, PolymeshPrimitivesTicker, PolymeshPrimitivesTransferComplianceTransferCondition, PolymeshPrimitivesTransferComplianceTransferConditionExemptKey, PolymeshRuntimeDevelopRuntimeOriginCaller, PolymeshRuntimeDevelopRuntimeSessionKeys, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusGrandpaEquivocationProof, SpConsensusSlotsEquivocationProof, SpNposElectionsElectionScore, SpNposElectionsSupport, SpRuntimeMultiSignature, SpSessionMembershipProof, SpWeightsWeightV2Weight } from '@polkadot/types/lookup'; +import type { PalletContractsWasmDeterminism, PalletCorporateActionsBallotBallotMeta, PalletCorporateActionsBallotBallotTimeRange, PalletCorporateActionsBallotBallotVote, PalletCorporateActionsCaId, PalletCorporateActionsCaKind, PalletCorporateActionsInitiateCorporateActionArgs, PalletCorporateActionsRecordDateSpec, PalletCorporateActionsTargetIdentities, PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Signature, PalletPipsSnapshotResult, PalletStakingPalletConfigOpPerbill, PalletStakingPalletConfigOpPercent, PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU32, PalletStakingRewardDestination, PalletStakingValidatorPrefs, PalletStoFundingMethod, PalletStoPriceTier, PalletUtilityUniqueCall, PalletValidatorsSlashingSwitch, PolymeshCommonUtilitiesCheckpointScheduleCheckpoints, PolymeshCommonUtilitiesIdentityCreateChildIdentityWithAuth, PolymeshCommonUtilitiesIdentitySecondaryKeyWithAuth, PolymeshCommonUtilitiesProtocolFeeProtocolOp, PolymeshContractsApi, PolymeshContractsChainExtensionExtrinsicId, PolymeshContractsNextUpgrade, PolymeshPrimitivesAgentAgentGroup, PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetAssetType, PolymeshPrimitivesAssetIdentifier, PolymeshPrimitivesAssetMetadataAssetMetadataKey, PolymeshPrimitivesAssetMetadataAssetMetadataSpec, PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail, PolymeshPrimitivesAssetNonFungibleType, PolymeshPrimitivesAuthorizationAuthorizationData, PolymeshPrimitivesBeneficiary, PolymeshPrimitivesComplianceManagerComplianceRequirement, PolymeshPrimitivesCondition, PolymeshPrimitivesConditionTrustedIssuer, PolymeshPrimitivesDocument, PolymeshPrimitivesIdentityClaimClaim, PolymeshPrimitivesIdentityClaimClaimType, PolymeshPrimitivesIdentityClaimScope, PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesIdentityIdPortfolioKind, PolymeshPrimitivesMaybeBlock, PolymeshPrimitivesMemo, PolymeshPrimitivesNftNfTs, PolymeshPrimitivesNftNftCollectionKeys, PolymeshPrimitivesNftNftMetadataAttribute, PolymeshPrimitivesPortfolioFund, PolymeshPrimitivesPosRatio, PolymeshPrimitivesSecondaryKey, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions, PolymeshPrimitivesSecondaryKeyPermissions, PolymeshPrimitivesSecondaryKeySignatory, PolymeshPrimitivesSettlementAffirmationCount, PolymeshPrimitivesSettlementAssetCount, PolymeshPrimitivesSettlementLeg, PolymeshPrimitivesSettlementReceiptDetails, PolymeshPrimitivesSettlementSettlementType, PolymeshPrimitivesSettlementVenueType, PolymeshPrimitivesStatisticsStatType, PolymeshPrimitivesStatisticsStatUpdate, PolymeshPrimitivesTicker, PolymeshPrimitivesTransferComplianceTransferCondition, PolymeshPrimitivesTransferComplianceTransferConditionExemptKey, PolymeshRuntimeDevelopRuntimeOriginCaller, PolymeshRuntimeDevelopRuntimeSessionKeys, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusGrandpaEquivocationProof, SpConsensusSlotsEquivocationProof, SpNposElectionsElectionScore, SpNposElectionsSupport, SpRuntimeMultiSignature, SpSessionMembershipProof, SpWeightsWeightV2Weight } from '@polkadot/types/lookup'; export type __AugmentedSubmittable = AugmentedSubmittable<() => unknown>; export type __SubmittableExtrinsic = SubmittableExtrinsic; @@ -19,399 +19,139 @@ declare module '@polkadot/api-base/types/submittable' { interface AugmentedSubmittables { asset: { /** - * This function is used to accept a token ownership transfer. - * NB: To reject the transfer, call remove auth function in identity module. - * - * # Arguments - * * `origin`: it contains the secondary key of the caller (i.e. who signed the transaction to execute this function). - * * `auth_id`: authorization ID of the token ownership transfer authorization. + * See [`Pallet::accept_asset_ownership_transfer`]. **/ acceptAssetOwnershipTransfer: AugmentedSubmittable<(authId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Accepts a ticker transfer. - * - * Consumes the authorization `auth_id` (see `pallet_identity::consume_auth`). - * NB: To reject the transfer, call remove auth function in identity module. - * - * # Arguments - * * `origin`: it contains the secondary key of the caller (i.e. who signed the transaction to execute this function). - * * `auth_id`: authorization ID of ticker transfer authorization. + * See [`Pallet::accept_ticker_transfer`]. **/ acceptTickerTransfer: AugmentedSubmittable<(authId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Add documents for a given token. - * - * # Arguments - * * `origin`: is a signer that has permissions to act as an agent of `asset_id`. - * * `asset_id`: the [`AssetId`] associated to the token. - * * `docs`: documents to be attached to the token. - * - * # Permissions - * * Asset + * See [`Pallet::add_documents`]. **/ addDocuments: AugmentedSubmittable<(docs: Vec | (PolymeshPrimitivesDocument | { uri?: any; contentHash?: any; name?: any; docType?: any; filingDate?: any } | string | Uint8Array)[], assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [Vec, PolymeshPrimitivesAssetAssetId]>; /** - * Sets all identities in the `mediators` set as mandatory mediators for any instruction transfering `asset_id`. - * - * # Arguments - * * `origin`: The secondary key of the sender. - * * `asset_id`: the [`AssetId`] of the asset that will require the mediators. - * * `mediators`: A set of [`IdentityId`] of all the mandatory mediators for the given ticker. - * - * # Permissions - * * Asset + * See [`Pallet::add_mandatory_mediators`]. **/ addMandatoryMediators: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, mediators: BTreeSet) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, BTreeSet]>; /** - * Forces a transfer of token from `from_portfolio` to the caller's default portfolio. - * - * # Arguments - * * `origin`: a signer that has permissions to act as an agent of `asset_id`. - * * `asset_id`: the [`AssetId`] associated to the token. - * * `value`: the [`Balance`] of tokens that will be transferred. - * * `from_portfolio`: the [`PortfolioId`] that will have its balance reduced. - * - * # Permissions - * * Asset - * * Portfolio + * See [`Pallet::controller_transfer`]. **/ controllerTransfer: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, value: u128 | AnyNumber | Uint8Array, fromPortfolio: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u128, PolymeshPrimitivesIdentityIdPortfolioId]>; /** - * Initializes a new [`AssetDetails`], with the initiating account as its owner. - * The total supply will initially be zero. To mint tokens, use [`Module::issue`]. - * - * # Arguments - * * `origin`: contains the secondary key of the caller (i.e. who signed the transaction to execute this function). - * * `asset_name`: the [`AssetName`] associated to the security token. - * * `divisible`: sets [`AssetDetails::divisible`], where `true` means the token is divisible. - * * `asset_type`: the [`AssetType`] that represents the security type of the [`AssetDetails`]. - * * `asset_identifiers`: a vector of [`AssetIdentifier`]. - * * `funding_round_name`: the name of the funding round ([`FundingRoundName`]). - * - * ## Permissions - * * Portfolio + * See [`Pallet::create_asset`]. **/ createAsset: AugmentedSubmittable<(assetName: Bytes | string | Uint8Array, divisible: bool | boolean | Uint8Array, assetType: PolymeshPrimitivesAssetAssetType | { EquityCommon: any } | { EquityPreferred: any } | { Commodity: any } | { FixedIncome: any } | { REIT: any } | { Fund: any } | { RevenueShareAgreement: any } | { StructuredProduct: any } | { Derivative: any } | { Custom: any } | { StableCoin: any } | { NonFungible: any } | string | Uint8Array, assetIdentifiers: Vec | (PolymeshPrimitivesAssetIdentifier | { CUSIP: any } | { CINS: any } | { ISIN: any } | { LEI: any } | { FIGI: any } | string | Uint8Array)[], fundingRoundName: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [Bytes, bool, PolymeshPrimitivesAssetAssetType, Vec, Option]>; /** - * Initializes a new [`AssetDetails`], with the initiating account as its owner. - * The total supply will initially be zero. To mint tokens, use [`Module::issue`]. - * Note: Utility extrinsic to batch [`Module::create_asset`] and [`Module::register_custom_asset_type`]. - * - * # Arguments - * * `origin`: contains the secondary key of the caller (i.e. who signed the transaction to execute this function). - * * `asset_name`: the [`AssetName`] associated to the security token. - * * `divisible`: sets [`AssetDetails::divisible`], where `true` means the token is divisible. - * * `custom_asset_type`: the custom asset type of the token. - * * `asset_identifiers`: a vector of [`AssetIdentifier`]. - * * `funding_round_name`: the name of the funding round ([`FundingRoundName`]). - * - * ## Permissions - * * Portfolio + * See [`Pallet::create_asset_with_custom_type`]. **/ createAssetWithCustomType: AugmentedSubmittable<(assetName: Bytes | string | Uint8Array, divisible: bool | boolean | Uint8Array, customAssetType: Bytes | string | Uint8Array, assetIdentifiers: Vec | (PolymeshPrimitivesAssetIdentifier | { CUSIP: any } | { CINS: any } | { ISIN: any } | { LEI: any } | { FIGI: any } | string | Uint8Array)[], fundingRoundName: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [Bytes, bool, Bytes, Vec, Option]>; /** - * Pre-approves the receivement of the asset for all identities. - * - * # Arguments - * * `origin`: the secondary key of the sender. - * * `asset_id`: the [`AssetId`] that will be exempt from affirmation. - * - * # Permissions - * * Root + * See [`Pallet::exempt_asset_affirmation`]. **/ exemptAssetAffirmation: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId]>; /** - * Freezes transfers of a given token. - * - * # Arguments - * * `origin`: the secondary key of the sender. - * * `asset_id`: the [`AssetId`] associated to the token. - * - * # Permissions - * * Asset + * See [`Pallet::freeze`]. **/ freeze: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId]>; /** - * Issue (i.e mint) new tokens to the caller, which must be an authorized external agent. - * - * # Arguments - * * `origin`: A signer that has permissions to act as an agent of `ticker`. - * * `asset_id`: the [`AssetId`] associated to the token. - * * `amount`: The amount of tokens that will be issued. - * * `portfolio_kind`: The [`PortfolioKind`] of the portfolio that will receive the minted tokens. - * - * # Permissions - * * Asset - * * Portfolio + * See [`Pallet::issue`]. **/ issue: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, portfolioKind: PolymeshPrimitivesIdentityIdPortfolioKind | { Default: any } | { User: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u128, PolymeshPrimitivesIdentityIdPortfolioKind]>; /** - * Establishes a connection between a ticker and an AssetId. - * - * # Arguments - * * `origin`: the secondary key of the sender. - * * `ticker`: the [`Ticker`] that will be linked to the given `asset_id`. - * * `asset_id`: the [`AssetId`] that will be connected to `ticker`. - * - * # Permissions - * * Asset + * See [`Pallet::link_ticker_to_asset_id`]. **/ linkTickerToAssetId: AugmentedSubmittable<(ticker: PolymeshPrimitivesTicker | string | Uint8Array, assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesTicker, PolymeshPrimitivesAssetAssetId]>; /** - * If the token associated to `asset_id` is indivisible, sets [`AssetDetails::divisible`] to true. - * - * # Arguments - * * `origin`: is a signer that has permissions to act as an agent of `ticker`. - * * `asset_id`: the [`AssetId`] associated to the token. - * - * # Permissions - * * Asset + * See [`Pallet::make_divisible`]. **/ makeDivisible: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId]>; /** - * Pre-approves the receivement of an asset. - * - * # Arguments - * * `origin`: the secondary key of the sender. - * * `asset_id`: the [`AssetId`] that will be exempt from affirmation. - * - * # Permissions - * * Asset + * See [`Pallet::pre_approve_asset`]. **/ preApproveAsset: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId]>; /** - * Redeems (i.e burns) existing tokens by reducing the balance of the caller's portfolio and the total supply of the token. - * - * # Arguments - * * `origin`: is a signer that has permissions to act as an agent of `asset_id`. - * * `asset_id`: the [`AssetId`] associated to the token. - * * `value`: amount of tokens to redeem. - * * `portfolio_kind`: the [`PortfolioKind`] that will have its balance reduced. - * - * # Permissions - * * Asset - * * Portfolio + * See [`Pallet::redeem`]. **/ redeem: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, value: u128 | AnyNumber | Uint8Array, portfolioKind: PolymeshPrimitivesIdentityIdPortfolioKind | { Default: any } | { User: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u128, PolymeshPrimitivesIdentityIdPortfolioKind]>; /** - * Registers and set local asset metadata. - * - * # Arguments - * * `origin`: is a signer that has permissions to act as an agent of `asset_id`. - * * `asset_id`: the [`AssetId`] associated to the token. - * * `name`: the [`AssetMetadataName`]. - * * `spec`: the asset metadata specifications ([`AssetMetadataSpec`]). - * * `value`: the [`AssetMetadataValue`] of the given metadata key. - * * `details`: optional [`AssetMetadataValueDetail`] (expire, lock status). - * - * # Permissions - * * Agent - * * Asset + * See [`Pallet::register_and_set_local_asset_metadata`]. **/ registerAndSetLocalAssetMetadata: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, name: Bytes | string | Uint8Array, spec: PolymeshPrimitivesAssetMetadataAssetMetadataSpec | { url?: any; description?: any; typeDef?: any } | string | Uint8Array, value: Bytes | string | Uint8Array, detail: Option | null | Uint8Array | PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail | { expire?: any; lockStatus?: any } | string) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, Bytes, PolymeshPrimitivesAssetMetadataAssetMetadataSpec, Bytes, Option]>; /** - * Registers asset metadata global type. - * - * # Arguments - * * `origin`: is a signer that has permissions to act as an agent of `asset_id`. - * * `name`: the [`AssetMetadataName`]. - * * `spec`: the asset metadata specifications ([`AssetMetadataSpec`]). + * See [`Pallet::register_asset_metadata_global_type`]. **/ registerAssetMetadataGlobalType: AugmentedSubmittable<(name: Bytes | string | Uint8Array, spec: PolymeshPrimitivesAssetMetadataAssetMetadataSpec | { url?: any; description?: any; typeDef?: any } | string | Uint8Array) => SubmittableExtrinsic, [Bytes, PolymeshPrimitivesAssetMetadataAssetMetadataSpec]>; /** - * Registers asset metadata local type. - * - * # Arguments - * * `origin`: is a signer that has permissions to act as an agent of `asset_id`. - * * `asset_id`: the [`AssetId`] associated to the token. - * * `name`: the [`AssetMetadataName`]. - * * `spec`: the asset metadata specifications ([`AssetMetadataSpec`]). - * - * # Permissions - * * Agent - * * Asset + * See [`Pallet::register_asset_metadata_local_type`]. **/ registerAssetMetadataLocalType: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, name: Bytes | string | Uint8Array, spec: PolymeshPrimitivesAssetMetadataAssetMetadataSpec | { url?: any; description?: any; typeDef?: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, Bytes, PolymeshPrimitivesAssetMetadataAssetMetadataSpec]>; /** - * Registers a custom asset type. - * - * The provided `ty` will be bound to an ID in storage. - * The ID can then be used in `AssetType::Custom`. - * Should the `ty` already exist in storage, no second ID is assigned to it. - * - * # Arguments - * * `origin`: who called the extrinsic. - * * `ty`: contains the string representation of the asset type. + * See [`Pallet::register_custom_asset_type`]. **/ registerCustomAssetType: AugmentedSubmittable<(ty: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Registers a unique ticker or extends validity of an existing ticker. - * NB: Ticker validity does not get carry forward when renewing ticker. - * - * # Arguments - * * `origin`: it contains the secondary key of the caller (i.e. who signed the transaction to execute this function). - * * `ticker`: [`Ticker`] to register. - * - * # Permissions - * * Asset + * See [`Pallet::register_unique_ticker`]. **/ registerUniqueTicker: AugmentedSubmittable<(ticker: PolymeshPrimitivesTicker | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesTicker]>; /** - * Removes the pre-approval of the asset for all identities. - * - * # Arguments - * * `origin`: the secondary key of the sender. - * * `asset_id`: the [`AssetId`] that will have its exemption removed. - * - * # Permissions - * * Root + * See [`Pallet::remove_asset_affirmation_exemption`]. **/ removeAssetAffirmationExemption: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId]>; /** - * Removes the pre approval of an asset. - * - * # Arguments - * * `origin` - the secondary key of the sender. - * * `asset_id`: the [`AssetId`] that will have its exemption removed. - * - * # Permissions - * * Asset + * See [`Pallet::remove_asset_pre_approval`]. **/ removeAssetPreApproval: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId]>; /** - * Remove documents for a given token. - * - * # Arguments - * * `origin`: is a signer that has permissions to act as an agent of `asset_id`. - * * `asset_id`: the [`AssetId`] associated to the token. - * * `docs_id`: a vector of all [`DocumentId`] that will be removed from the token. - * - * # Permissions - * * Asset + * See [`Pallet::remove_documents`]. **/ removeDocuments: AugmentedSubmittable<(docsId: Vec | (u32 | AnyNumber | Uint8Array)[], assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [Vec, PolymeshPrimitivesAssetAssetId]>; /** - * Removes the asset metadata key and value of a local key. - * - * # Arguments - * * `origin`: the secondary key of the sender. - * * `asset_id`: the [`AssetId`] associated to the local metadata key. - * * `local_key`: the [`AssetMetadataLocalKey`] that will be removed. - * - * # Permissions - * * Asset + * See [`Pallet::remove_local_metadata_key`]. **/ removeLocalMetadataKey: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, localKey: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64]>; /** - * Removes all identities in the `mediators` set from the mandatory mediators list for the given `asset_id`. - * - * # Arguments - * * `origin`: the secondary key of the sender. - * * `asset_id`: the [`AssetId`] of the asset that will have mediators removed. - * * `mediators`: A set of [`IdentityId`] of all the mediators that will be removed from the mandatory mediators list. - * - * # Permissions - * * Asset + * See [`Pallet::remove_mandatory_mediators`]. **/ removeMandatoryMediators: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, mediators: BTreeSet) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, BTreeSet]>; /** - * Removes the asset metadata value of a metadata key. - * - * # Arguments - * * `origin`: the secondary key of the sender. - * * `asset_id`: the [`AssetId`] associated to the metadata key. - * * `metadata_key`: the [`AssetMetadataKey`] that will have its value deleted. - * - * # Permissions - * * Asset + * See [`Pallet::remove_metadata_value`]. **/ removeMetadataValue: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, metadataKey: PolymeshPrimitivesAssetMetadataAssetMetadataKey | { Global: any } | { Local: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetMetadataAssetMetadataKey]>; /** - * Updates the [`AssetName`] associated to a security token. - * - * # Arguments - * * `origin`: the secondary key of the sender. - * * `asset_id`: the [`AssetId`] associated to the token. - * * `asset_name`: the [`AssetName`] that will be associated to the token. - * - * # Permissions - * * Asset + * See [`Pallet::rename_asset`]. **/ renameAsset: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, assetName: Bytes | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, Bytes]>; /** - * Set asset metadata value. - * - * # Arguments - * * `origin`: is a signer that has permissions to act as an agent of `asset_id`. - * * `asset_id`: the [`AssetId`] associated to the token. - * * `key`: the [`AssetMetadataKey`] associated to the token. - * * `value`: the [`AssetMetadataValue`] of the given metadata key. - * * `details`: optional [`AssetMetadataValueDetail`] (expire, lock status). - * - * # Permissions - * * Agent - * * Asset + * See [`Pallet::set_asset_metadata`]. **/ setAssetMetadata: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, key: PolymeshPrimitivesAssetMetadataAssetMetadataKey | { Global: any } | { Local: any } | string | Uint8Array, value: Bytes | string | Uint8Array, detail: Option | null | Uint8Array | PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail | { expire?: any; lockStatus?: any } | string) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetMetadataAssetMetadataKey, Bytes, Option]>; /** - * Set asset metadata value details (expire, lock status). - * - * # Arguments - * * `origin`: is a signer that has permissions to act as an agent of `asset_id`. - * * `asset_id`: the [`AssetId`] associated to the token. - * * `key`: the [`AssetMetadataKey`] associated to the token. - * * `details`: the [`AssetMetadataValueDetail`] (expire, lock status) that will be associated to the token. - * - * # Permissions - * * Agent - * * Asset + * See [`Pallet::set_asset_metadata_details`]. **/ setAssetMetadataDetails: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, key: PolymeshPrimitivesAssetMetadataAssetMetadataKey | { Global: any } | { Local: any } | string | Uint8Array, detail: PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail | { expire?: any; lockStatus?: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetMetadataAssetMetadataKey, PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail]>; /** - * Sets the name of the current funding round. - * - * # Arguments - * * `origin`: a signer that has permissions to act as an agent of `asset_id`. - * * `asset_id`: the [`AssetId`] associated to the token. - * * `founding_round_name`: the [`FoundingRoundName`] of the current funding round. - * - * # Permissions - * * Asset - **/ - setFundingRound: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, foundingRoundName: Bytes | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, Bytes]>; - /** - * Unfreezes transfers of a given token. - * - * # Arguments - * * `origin`: the secondary key of the sender. - * * `asset_id`: the [`AssetId`] associated to the token. - * - * # Permissions - * * Asset + * See [`Pallet::set_funding_round`]. + **/ + setFundingRound: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, fundingRoundName: Bytes | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, Bytes]>; + /** + * See [`Pallet::unfreeze`]. **/ unfreeze: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId]>; /** - * Updates the type of an asset. - * - * # Arguments - * * `origin`: it contains the secondary key of the sender - * * `asset_id`: the [`AssetId`] associated to the token. - * * `asset_type`: the new [`AssetType`] of the token. - * - * # Permissions - * * Asset + * See [`Pallet::unlink_ticker_from_asset_id`]. + **/ + unlinkTickerFromAssetId: AugmentedSubmittable<(ticker: PolymeshPrimitivesTicker | string | Uint8Array, assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesTicker, PolymeshPrimitivesAssetAssetId]>; + /** + * See [`Pallet::update_asset_type`]. **/ updateAssetType: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, assetType: PolymeshPrimitivesAssetAssetType | { EquityCommon: any } | { EquityPreferred: any } | { Commodity: any } | { FixedIncome: any } | { REIT: any } | { Fund: any } | { RevenueShareAgreement: any } | { StructuredProduct: any } | { Derivative: any } | { Custom: any } | { StableCoin: any } | { NonFungible: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetAssetType]>; /** - * Updates the asset identifiers associated to the token. - * - * # Arguments - * * `origin`: a signer that has permissions to act as an agent of `asset_id`. - * * `asset_id`: the [`AssetId`] associated to the token. - * * `asset_identifiers`: a vector of [`AssetIdentifier`] that will be associated to the token. - * - * # Permissions - * * Asset + * See [`Pallet::update_global_metadata_spec`]. + **/ + updateGlobalMetadataSpec: AugmentedSubmittable<(assetMetadataName: Bytes | string | Uint8Array, assetMetadataSpec: PolymeshPrimitivesAssetMetadataAssetMetadataSpec | { url?: any; description?: any; typeDef?: any } | string | Uint8Array) => SubmittableExtrinsic, [Bytes, PolymeshPrimitivesAssetMetadataAssetMetadataSpec]>; + /** + * See [`Pallet::update_identifiers`]. **/ updateIdentifiers: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, assetIdentifiers: Vec | (PolymeshPrimitivesAssetIdentifier | { CUSIP: any } | { CINS: any } | { ISIN: any } | { LEI: any } | { FIGI: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, Vec]>; /** @@ -421,28 +161,15 @@ declare module '@polkadot/api-base/types/submittable' { }; babe: { /** - * Plan an epoch config change. The epoch config change is recorded and will be enacted on - * the next call to `enact_epoch_change`. The config will be activated one epoch after. - * Multiple calls to this method will replace any existing planned config change that had - * not been enacted yet. + * See [`Pallet::plan_config_change`]. **/ planConfigChange: AugmentedSubmittable<(config: SpConsensusBabeDigestsNextConfigDescriptor | { V1: any } | string | Uint8Array) => SubmittableExtrinsic, [SpConsensusBabeDigestsNextConfigDescriptor]>; /** - * Report authority equivocation/misbehavior. This method will verify - * the equivocation proof and validate the given key ownership proof - * against the extracted offender. If both are valid, the offence will - * be reported. + * See [`Pallet::report_equivocation`]. **/ reportEquivocation: AugmentedSubmittable<(equivocationProof: SpConsensusSlotsEquivocationProof | { offender?: any; slot?: any; firstHeader?: any; secondHeader?: any } | string | Uint8Array, keyOwnerProof: SpSessionMembershipProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpConsensusSlotsEquivocationProof, SpSessionMembershipProof]>; /** - * Report authority equivocation/misbehavior. This method will verify - * the equivocation proof and validate the given key ownership proof - * against the extracted offender. If both are valid, the offence will - * be reported. - * This extrinsic must be called unsigned and it is expected that only - * block authors will call it (validated in `ValidateUnsigned`), as such - * if the block author is defined it will be defined as the equivocation - * reporter. + * See [`Pallet::report_equivocation_unsigned`]. **/ reportEquivocationUnsigned: AugmentedSubmittable<(equivocationProof: SpConsensusSlotsEquivocationProof | { offender?: any; slot?: any; firstHeader?: any; secondHeader?: any } | string | Uint8Array, keyOwnerProof: SpSessionMembershipProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpConsensusSlotsEquivocationProof, SpSessionMembershipProof]>; /** @@ -452,66 +179,27 @@ declare module '@polkadot/api-base/types/submittable' { }; balances: { /** - * Burns the given amount of tokens from the caller's free, unlocked balance. + * See [`Pallet::burn_account_balance`]. **/ burnAccountBalance: AugmentedSubmittable<(amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; /** - * Move some POLYX from balance of self to balance of BRR. + * See [`Pallet::deposit_block_reward_reserve_balance`]. **/ depositBlockRewardReserveBalance: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Exactly as `transfer`, except the origin must be root and the source account may be - * specified. - * - * # - * - Same as transfer, but additional read and write because the source account is - * not assumed to be in the overlay. - * # + * See [`Pallet::force_transfer`]. **/ forceTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, Compact]>; /** - * Set the balances of a given account. - * - * This will alter `FreeBalance` and `ReservedBalance` in storage. it will - * also decrease the total issuance of the system (`TotalIssuance`). - * - * The dispatch origin for this call is `root`. + * See [`Pallet::set_balance`]. **/ setBalance: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, newFree: Compact | AnyNumber | Uint8Array, newReserved: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact, Compact]>; /** - * Transfer some liquid free balance to another account. - * - * `transfer` will set the `FreeBalance` of the sender and receiver. - * It will decrease the total issuance of the system by the `TransferFee`. - * - * The dispatch origin for this call must be `Signed` by the transactor. - * - * # - * - Dependent on arguments but not critical, given proper implementations for - * input config types. See related functions below. - * - It contains a limited number of reads and writes internally and no complex computation. - * - * Related functions: - * - * - `ensure_can_withdraw` is always called internally but has a bounded complexity. - * - Transferring balances to accounts that did not exist before will cause - * `T::OnNewAccount::on_new_account` to be called. - * --------------------------------- - * - Base Weight: 73.64 µs, worst case scenario (account created, account removed) - * - DB Weight: 1 Read and 1 Write to destination account. - * - Origin account is already in memory, so no DB operations for them. - * # + * See [`Pallet::transfer`]. **/ transfer: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; /** - * Transfer the native currency with the help of identifier string - * this functionality can help to differentiate the transfers. - * - * # - * - Base Weight: 73.64 µs, worst case scenario (account created, account removed) - * - DB Weight: 1 Read and 1 Write to destination account. - * - Origin account is already in memory, so no DB operations for them. - * # + * See [`Pallet::transfer_with_memo`]. **/ transferWithMemo: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array, memo: Option | null | Uint8Array | PolymeshPrimitivesMemo | string) => SubmittableExtrinsic, [MultiAddress, Compact, Option]>; /** @@ -527,130 +215,23 @@ declare module '@polkadot/api-base/types/submittable' { }; capitalDistribution: { /** - * Claim a benefit of the capital distribution attached to `ca_id`. - * - * Taxes are withheld as specified by the CA. - * Post-tax earnings are then transferred to the default portfolio of the `origin`'s DID. - * - * All benefits are rounded by truncation, down to first integer below. - * Moreover, before post-tax earnings, in indivisible currencies are transferred, - * they are rounded down to a whole unit. - * - * ## Arguments - * - `origin` which must be a holder of the asset and eligible for the distribution. - * - `ca_id` identifies the CA to start a capital distribution for. - * - * # Errors - * - `HolderAlreadyPaid` if `origin`'s DID has already received its benefit. - * - `NoSuchDistribution` if there's no capital distribution for `ca_id`. - * - `CannotClaimBeforeStart` if `now < payment_at`. - * - `CannotClaimAfterExpiry` if `now > expiry_at.unwrap()`. - * - `NoSuchCA` if `ca_id` does not identify an existing CA. - * - `NotTargetedByCA` if the CA does not target `origin`'s DID. - * - `BalanceAmountProductOverflowed` if `ba = balance * amount` would overflow. - * - `BalanceAmountProductSupplyDivisionFailed` if `ba * supply` would overflow. - * - Other errors can occur if the compliance manager rejects the transfer. + * See [`Pallet::claim`]. **/ claim: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletCorporateActionsCaId]>; /** - * Start and attach a capital distribution, to the CA identified by `ca_id`, - * with `amount` funds in `currency` withdrawn from `portfolio` belonging to `origin`'s DID. - * - * The distribution will commence at `payment_at` and expire at `expires_at`, - * if provided, or if `None`, then there's no expiry. - * - * The funds will be locked in `portfolio` from when `distribute` is called. - * When there's no expiry, some funds may be locked indefinitely in `portfolio`, - * due to claimants not withdrawing or no benefits being pushed to them. - * For indivisible currencies, unlocked amounts, of less than one whole unit, - * will not be transferable from `portfolio`. - * However, if we imagine that users `Alice` and `Bob` both are entitled to 1.5 units, - * and only receive `1` units each, then `0.5 + 0.5 = 1` units are left in `portfolio`, - * which is now transferrable. - * - * ## Arguments - * - `origin` is a signer that has permissions to act as an agent of `ca_id.asset_id`. - * - `ca_id` identifies the CA to start a capital distribution for. - * - `portfolio` specifies the portfolio number of the agent to distribute `amount` from. - * - `currency` to withdraw and distribute from the `portfolio`. - * - `per_share` amount of `currency` to withdraw and distribute. - * Specified as a per-million, i.e. `1 / 10^6`th of one `currency` token. - * - `amount` of `currency` to withdraw and distribute at most. - * - `payment_at` specifies when benefits may first be pushed or claimed. - * - `expires_at` specifies, if provided, when remaining benefits are forfeit - * and may be reclaimed by `origin`. - * - * # Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `ExpiryBeforePayment` if `expires_at.unwrap() <= payment_at`. - * - `NoSuchCA` if `ca_id` does not identify an existing CA. - * - `NoRecordDate` if CA has no record date. - * - `RecordDateAfterStart` if CA's record date > payment_at. - * - `UnauthorizedCustodian` if the caller is not the custodian of `portfolio`. - * - `InsufficientPortfolioBalance` if `portfolio` has less than `amount` of `currency`. - * - `InsufficientBalance` if the protocol fee couldn't be charged. - * - `CANotBenefit` if the CA is not of kind PredictableBenefit/UnpredictableBenefit - * - `DistributionAmountIsZero` if the `amount` is zero. - * - `DistributionPerShareIsZero` if the `per_share` is zero. - * - * # Permissions - * * Asset - * * Portfolio + * See [`Pallet::distribute`]. **/ distribute: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array, portfolio: Option | null | Uint8Array | u64 | AnyNumber, currency: PolymeshPrimitivesAssetAssetId | string | Uint8Array, perShare: u128 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array, paymentAt: u64 | AnyNumber | Uint8Array, expiresAt: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [PalletCorporateActionsCaId, Option, PolymeshPrimitivesAssetAssetId, u128, u128, u64, Option]>; /** - * Push benefit of an ongoing distribution to the given `holder`. - * - * Taxes are withheld as specified by the CA. - * Post-tax earnings are then transferred to the default portfolio of the `origin`'s DID. - * - * All benefits are rounded by truncation, down to first integer below. - * Moreover, before post-tax earnings, in indivisible currencies are transferred, - * they are rounded down to a whole unit. - * - * ## Arguments - * - `origin` is a signer that has permissions to act as an agent of `ca_id.asset_id`. - * - `ca_id` identifies the CA with a capital distributions to push benefits for. - * - `holder` to push benefits to. - * - * # Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `NoSuchDistribution` if there's no capital distribution for `ca_id`. - * - `CannotClaimBeforeStart` if `now < payment_at`. - * - `CannotClaimAfterExpiry` if `now > expiry_at.unwrap()`. - * - `NoSuchCA` if `ca_id` does not identify an existing CA. - * - `NotTargetedByCA` if the CA does not target `holder`. - * - `BalanceAmountProductOverflowed` if `ba = balance * amount` would overflow. - * - `BalanceAmountProductSupplyDivisionFailed` if `ba * supply` would overflow. - * - Other errors can occur if the compliance manager rejects the transfer. + * See [`Pallet::push_benefit`]. **/ pushBenefit: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array, holder: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PalletCorporateActionsCaId, PolymeshPrimitivesIdentityId]>; /** - * Assuming a distribution has expired, - * unlock the remaining amount in the distributor portfolio. - * - * ## Arguments - * - `origin` which must be the creator of the capital distribution tied to `ca_id`. - * - `ca_id` identifies the CA with a capital distribution to reclaim for. - * - * # Errors - * - `NoSuchDistribution` if there's no capital distribution for `ca_id`. - * - `AlreadyReclaimed` if this function has already been called successfully. - * - `NotExpired` if `now < expiry`. + * See [`Pallet::reclaim`]. **/ reclaim: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletCorporateActionsCaId]>; /** - * Removes a distribution that hasn't started yet, - * unlocking the full amount in the distributor portfolio. - * - * ## Arguments - * - `origin` is a signer that has permissions to act as an agent of `ca_id.asset_id`. - * - `ca_id` identifies the CA with a not-yet-started capital distribution to remove. - * - * # Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `NoSuchDistribution` if there's no capital distribution for `ca_id`. - * - `DistributionStarted` if `payment_at <= now`. + * See [`Pallet::remove_distribution`]. **/ removeDistribution: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletCorporateActionsCaId]>; /** @@ -660,83 +241,31 @@ declare module '@polkadot/api-base/types/submittable' { }; cddServiceProviders: { /** - * Allows the calling member to *unilaterally quit* without this being subject to a GC - * vote. - * - * # Arguments - * * `origin` - Member of committee who wants to quit. - * - * # Error - * - * * Only primary key can abdicate. - * * Last member of a group cannot abdicate. + * See [`Pallet::abdicate_membership`]. **/ abdicateMembership: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Adds a member `who` to the group. May only be called from `AddOrigin` or root. - * - * # Arguments - * * `origin` - Origin representing `AddOrigin` or root - * * `who` - IdentityId to be added to the group. + * See [`Pallet::add_member`]. **/ addMember: AugmentedSubmittable<(who: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Disables a member at specific moment. - * - * Please note that if member is already revoked (a "valid member"), its revocation - * time-stamp will be updated. - * - * Any disabled member should NOT allow to act like an active member of the group. For - * instance, a disabled CDD member should NOT be able to generate a CDD claim. However any - * generated claim issued before `at` would be considered as a valid one. - * - * If you want to invalidate any generated claim, you should use `Self::remove_member`. - * - * # Arguments - * * `at` - Revocation time-stamp. - * * `who` - Target member of the group. - * * `expiry` - Time-stamp when `who` is removed from CDD. As soon as it is expired, the - * generated claims will be "invalid" as `who` is not considered a member of the group. + * See [`Pallet::disable_member`]. **/ disableMember: AugmentedSubmittable<(who: PolymeshPrimitivesIdentityId | string | Uint8Array, expiry: Option | null | Uint8Array | u64 | AnyNumber, at: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, Option, Option]>; /** - * Removes a member `who` from the set. May only be called from `RemoveOrigin` or root. - * - * Any claim previously generated by this member is not valid as a group claim. For - * instance, if a CDD member group generated a claim for a target identity and then it is - * removed, that claim will be invalid. In case you want to keep the validity of generated - * claims, you have to use `Self::disable_member` function - * - * # Arguments - * * `origin` - Origin representing `RemoveOrigin` or root - * * `who` - IdentityId to be removed from the group. + * See [`Pallet::remove_member`]. **/ removeMember: AugmentedSubmittable<(who: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Changes the membership to a new set, disregarding the existing membership. - * May only be called from `ResetOrigin` or root. - * - * # Arguments - * * `origin` - Origin representing `ResetOrigin` or root - * * `members` - New set of identities + * See [`Pallet::reset_members`]. **/ resetMembers: AugmentedSubmittable<(members: Vec | (PolymeshPrimitivesIdentityId | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Change this group's limit for how many concurrent active members they may be. - * - * # Arguments - * * `limit` - the number of active members there may be concurrently. + * See [`Pallet::set_active_members_limit`]. **/ setActiveMembersLimit: AugmentedSubmittable<(limit: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Swaps out one member `remove` for another member `add`. - * - * May only be called from `SwapOrigin` or root. - * - * # Arguments - * * `origin` - Origin representing `SwapOrigin` or root - * * `remove` - IdentityId to be removed from the group. - * * `add` - IdentityId to be added in place of `remove`. + * See [`Pallet::swap_member`]. **/ swapMember: AugmentedSubmittable<(remove: PolymeshPrimitivesIdentityId | string | Uint8Array, add: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; /** @@ -746,64 +275,19 @@ declare module '@polkadot/api-base/types/submittable' { }; checkpoint: { /** - * Creates a single checkpoint at the current time. - * - * # Arguments - * - `origin` is a signer that has permissions to act as an agent of `asset_id`. - * - `asset_id` to create the checkpoint for. - * - * # Errors - * - `UnauthorizedAgent` if the DID of `origin` isn't a permissioned agent for `asset_id`. - * - `CounterOverflow` if the total checkpoint counter would overflow. + * See [`Pallet::create_checkpoint`]. **/ createCheckpoint: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId]>; /** - * Creates a schedule generating checkpoints - * in the future at either a fixed time or at intervals. - * - * The schedule starts out with `strong_ref_count(schedule_id) <- 0`. - * - * # Arguments - * - `origin` is a signer that has permissions to act as owner of `asset_id`. - * - `asset_id` to create the schedule for. - * - `schedule` that will generate checkpoints. - * - * # Errors - * - `UnauthorizedAgent` if the DID of `origin` isn't a permissioned agent for `asset_id`. - * - `InsufficientAccountBalance` if the protocol fee could not be charged. - * - `CounterOverflow` if the schedule ID or total checkpoint counters would overflow. - * - * # Permissions - * * Asset + * See [`Pallet::create_schedule`]. **/ createSchedule: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, schedule: PolymeshCommonUtilitiesCheckpointScheduleCheckpoints | { pending?: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshCommonUtilitiesCheckpointScheduleCheckpoints]>; /** - * Removes the checkpoint schedule of an asset identified by `id`. - * - * # Arguments - * - `origin` is a signer that has permissions to act as owner of `asset_id`. - * - `asset_id` to remove the schedule from. - * - `id` of the schedule, when it was created by `created_schedule`. - * - * # Errors - * - `UnauthorizedAgent` if the DID of `origin` isn't a permissioned agent for `asset_id`. - * - `NoCheckpointSchedule` if `id` does not identify a schedule for this `asset_id`. - * - `ScheduleNotRemovable` if `id` exists but is not removable. - * - * # Permissions - * * Asset + * See [`Pallet::remove_schedule`]. **/ removeSchedule: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, id: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64]>; /** - * Sets the max complexity of a schedule set for an arbitrary asset_id to `max_complexity`. - * The new maximum is not enforced retroactively, - * and only applies once new schedules are made. - * - * Must be called as a PIP (requires "root"). - * - * # Arguments - * - `origin` is the root origin. - * - `max_complexity` allowed for an arbitrary asset's schedule set. + * See [`Pallet::set_schedules_max_complexity`]. **/ setSchedulesMaxComplexity: AugmentedSubmittable<(maxComplexity: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** @@ -813,83 +297,31 @@ declare module '@polkadot/api-base/types/submittable' { }; committeeMembership: { /** - * Allows the calling member to *unilaterally quit* without this being subject to a GC - * vote. - * - * # Arguments - * * `origin` - Member of committee who wants to quit. - * - * # Error - * - * * Only primary key can abdicate. - * * Last member of a group cannot abdicate. + * See [`Pallet::abdicate_membership`]. **/ abdicateMembership: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Adds a member `who` to the group. May only be called from `AddOrigin` or root. - * - * # Arguments - * * `origin` - Origin representing `AddOrigin` or root - * * `who` - IdentityId to be added to the group. + * See [`Pallet::add_member`]. **/ addMember: AugmentedSubmittable<(who: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Disables a member at specific moment. - * - * Please note that if member is already revoked (a "valid member"), its revocation - * time-stamp will be updated. - * - * Any disabled member should NOT allow to act like an active member of the group. For - * instance, a disabled CDD member should NOT be able to generate a CDD claim. However any - * generated claim issued before `at` would be considered as a valid one. - * - * If you want to invalidate any generated claim, you should use `Self::remove_member`. - * - * # Arguments - * * `at` - Revocation time-stamp. - * * `who` - Target member of the group. - * * `expiry` - Time-stamp when `who` is removed from CDD. As soon as it is expired, the - * generated claims will be "invalid" as `who` is not considered a member of the group. + * See [`Pallet::disable_member`]. **/ disableMember: AugmentedSubmittable<(who: PolymeshPrimitivesIdentityId | string | Uint8Array, expiry: Option | null | Uint8Array | u64 | AnyNumber, at: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, Option, Option]>; /** - * Removes a member `who` from the set. May only be called from `RemoveOrigin` or root. - * - * Any claim previously generated by this member is not valid as a group claim. For - * instance, if a CDD member group generated a claim for a target identity and then it is - * removed, that claim will be invalid. In case you want to keep the validity of generated - * claims, you have to use `Self::disable_member` function - * - * # Arguments - * * `origin` - Origin representing `RemoveOrigin` or root - * * `who` - IdentityId to be removed from the group. + * See [`Pallet::remove_member`]. **/ removeMember: AugmentedSubmittable<(who: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Changes the membership to a new set, disregarding the existing membership. - * May only be called from `ResetOrigin` or root. - * - * # Arguments - * * `origin` - Origin representing `ResetOrigin` or root - * * `members` - New set of identities + * See [`Pallet::reset_members`]. **/ resetMembers: AugmentedSubmittable<(members: Vec | (PolymeshPrimitivesIdentityId | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Change this group's limit for how many concurrent active members they may be. - * - * # Arguments - * * `limit` - the number of active members there may be concurrently. + * See [`Pallet::set_active_members_limit`]. **/ setActiveMembersLimit: AugmentedSubmittable<(limit: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Swaps out one member `remove` for another member `add`. - * - * May only be called from `SwapOrigin` or root. - * - * # Arguments - * * `origin` - Origin representing `SwapOrigin` or root - * * `remove` - IdentityId to be removed from the group. - * * `add` - IdentityId to be added in place of `remove`. + * See [`Pallet::swap_member`]. **/ swapMember: AugmentedSubmittable<(remove: PolymeshPrimitivesIdentityId | string | Uint8Array, add: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; /** @@ -899,116 +331,39 @@ declare module '@polkadot/api-base/types/submittable' { }; complianceManager: { /** - * Adds a compliance requirement to an asset given by `asset_id`. - * If there are duplicate ClaimTypes for a particular trusted issuer, duplicates are removed. - * - * # Arguments - * * origin - Signer of the dispatchable. It should be the owner of the asset - * * asset_id - Symbol of the asset - * * sender_conditions - Sender transfer conditions. - * * receiver_conditions - Receiver transfer conditions. - * - * # Permissions - * * Asset + * See [`Pallet::add_compliance_requirement`]. **/ addComplianceRequirement: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, senderConditions: Vec | (PolymeshPrimitivesCondition | { conditionType?: any; issuers?: any } | string | Uint8Array)[], receiverConditions: Vec | (PolymeshPrimitivesCondition | { conditionType?: any; issuers?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, Vec, Vec]>; /** - * Adds another default trusted claim issuer at the asset level. - * - * # Arguments - * * origin - Signer of the dispatchable. It should be the owner of the asset. - * * asset_id - Symbol of the asset. - * * issuer - IdentityId of the trusted claim issuer. - * - * # Permissions - * * Asset + * See [`Pallet::add_default_trusted_claim_issuer`]. **/ addDefaultTrustedClaimIssuer: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, issuer: PolymeshPrimitivesConditionTrustedIssuer | { issuer?: any; trustedFor?: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesConditionTrustedIssuer]>; /** - * Modify an existing compliance requirement of a given asset. - * - * # Arguments - * * origin - Signer of the dispatchable. It should be the owner of the asset. - * * asset_id - Symbol of the asset. - * * new_req - Compliance requirement. - * - * # Permissions - * * Asset + * See [`Pallet::change_compliance_requirement`]. **/ changeComplianceRequirement: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, newReq: PolymeshPrimitivesComplianceManagerComplianceRequirement | { senderConditions?: any; receiverConditions?: any; id?: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesComplianceManagerComplianceRequirement]>; /** - * Pauses the verification of conditions for `asset_id` during transfers. - * - * # Arguments - * * origin - Signer of the dispatchable. It should be the owner of the asset - * * asset_id - Symbol of the asset - * - * # Permissions - * * Asset + * See [`Pallet::pause_asset_compliance`]. **/ pauseAssetCompliance: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId]>; /** - * Removes a compliance requirement from an asset's compliance. - * - * # Arguments - * * origin - Signer of the dispatchable. It should be the owner of the asset - * * asset_id - Symbol of the asset - * * id - Compliance requirement id which is need to be removed - * - * # Permissions - * * Asset + * See [`Pallet::remove_compliance_requirement`]. **/ removeComplianceRequirement: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, id: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u32]>; /** - * Removes the given `issuer` from the set of default trusted claim issuers at the asset level. - * - * # Arguments - * * origin - Signer of the dispatchable. It should be the owner of the asset. - * * asset_id - Symbol of the asset. - * * issuer - IdentityId of the trusted claim issuer. - * - * # Permissions - * * Asset + * See [`Pallet::remove_default_trusted_claim_issuer`]. **/ removeDefaultTrustedClaimIssuer: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, issuer: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesIdentityId]>; /** - * Replaces an asset's compliance with a new compliance. - * - * Compliance requirements will be sorted (ascending by id) before - * replacing the current requirements. - * - * # Arguments - * * `asset_id` - the asset asset_id, - * * `asset_compliance - the new asset compliance. - * - * # Errors - * * `Unauthorized` if `origin` is not the owner of the asset_id. - * * `DuplicateAssetCompliance` if `asset_compliance` contains multiple entries with the same `requirement_id`. - * - * # Permissions - * * Asset + * See [`Pallet::replace_asset_compliance`]. **/ replaceAssetCompliance: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, assetCompliance: Vec | (PolymeshPrimitivesComplianceManagerComplianceRequirement | { senderConditions?: any; receiverConditions?: any; id?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, Vec]>; /** - * Removes an asset's compliance - * - * # Arguments - * * origin - Signer of the dispatchable. It should be the owner of the asset - * * asset_id - Symbol of the asset - * - * # Permissions - * * Asset + * See [`Pallet::reset_asset_compliance`]. **/ resetAssetCompliance: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId]>; /** - * Resumes the verification of conditions for `asset_id` during transfers. - * - * # Arguments - * * origin - Signer of the dispatchable. It should be the owner of the asset - * * asset_id - Symbol of the asset - * - * # Permissions - * * Asset + * See [`Pallet::resume_asset_compliance`]. **/ resumeAssetCompliance: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId]>; /** @@ -1018,116 +373,45 @@ declare module '@polkadot/api-base/types/submittable' { }; contracts: { /** - * Makes a call to an account, optionally transferring some balance. - * - * # Parameters - * - * * `dest`: Address of the contract to call. - * * `value`: The balance to transfer from the `origin` to `dest`. - * * `gas_limit`: The gas limit enforced when executing the constructor. - * * `storage_deposit_limit`: The maximum amount of balance that can be charged from the - * caller to pay for the storage consumed. - * * `data`: The input data to pass to the contract. - * - * * If the account is a smart-contract account, the associated code will be - * executed and any value will be transferred. - * * If the account is a regular account, any value will be transferred. - * * If no account exists and the call value is not less than `existential_deposit`, - * a regular account will be created and any value will be transferred. + * See [`Pallet::call`]. **/ call: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array, gasLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, storageDepositLimit: Option> | null | Uint8Array | Compact | AnyNumber, data: Bytes | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact, SpWeightsWeightV2Weight, Option>, Bytes]>; /** - * Deprecated version if [`Self::call`] for use in an in-storage `Call`. + * See [`Pallet::call_old_weight`]. **/ callOldWeight: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array, gasLimit: Compact | AnyNumber | Uint8Array, storageDepositLimit: Option> | null | Uint8Array | Compact | AnyNumber, data: Bytes | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact, Compact, Option>, Bytes]>; /** - * Instantiates a contract from a previously deployed wasm binary. - * - * This function is identical to [`Self::instantiate_with_code`] but without the - * code deployment step. Instead, the `code_hash` of an on-chain deployed wasm binary - * must be supplied. + * See [`Pallet::instantiate`]. **/ instantiate: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array, gasLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, storageDepositLimit: Option> | null | Uint8Array | Compact | AnyNumber, codeHash: H256 | string | Uint8Array, data: Bytes | string | Uint8Array, salt: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Compact, SpWeightsWeightV2Weight, Option>, H256, Bytes, Bytes]>; /** - * Deprecated version if [`Self::instantiate`] for use in an in-storage `Call`. + * See [`Pallet::instantiate_old_weight`]. **/ instantiateOldWeight: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array, gasLimit: Compact | AnyNumber | Uint8Array, storageDepositLimit: Option> | null | Uint8Array | Compact | AnyNumber, codeHash: H256 | string | Uint8Array, data: Bytes | string | Uint8Array, salt: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Compact, Compact, Option>, H256, Bytes, Bytes]>; /** - * Instantiates a new contract from the supplied `code` optionally transferring - * some balance. - * - * This dispatchable has the same effect as calling [`Self::upload_code`] + - * [`Self::instantiate`]. Bundling them together provides efficiency gains. Please - * also check the documentation of [`Self::upload_code`]. - * - * # Parameters - * - * * `value`: The balance to transfer from the `origin` to the newly created contract. - * * `gas_limit`: The gas limit enforced when executing the constructor. - * * `storage_deposit_limit`: The maximum amount of balance that can be charged/reserved - * from the caller to pay for the storage consumed. - * * `code`: The contract code to deploy in raw bytes. - * * `data`: The input data to pass to the contract constructor. - * * `salt`: Used for the address derivation. See [`Pallet::contract_address`]. - * - * Instantiation is executed as follows: - * - * - The supplied `code` is instrumented, deployed, and a `code_hash` is created for that - * code. - * - If the `code_hash` already exists on the chain the underlying `code` will be shared. - * - The destination address is computed based on the sender, code_hash and the salt. - * - The smart-contract account is created at the computed address. - * - The `value` is transferred to the new account. - * - The `deploy` function is executed in the context of the newly-created account. + * See [`Pallet::instantiate_with_code`]. **/ instantiateWithCode: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array, gasLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, storageDepositLimit: Option> | null | Uint8Array | Compact | AnyNumber, code: Bytes | string | Uint8Array, data: Bytes | string | Uint8Array, salt: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Compact, SpWeightsWeightV2Weight, Option>, Bytes, Bytes, Bytes]>; /** - * Deprecated version if [`Self::instantiate_with_code`] for use in an in-storage `Call`. + * See [`Pallet::instantiate_with_code_old_weight`]. **/ instantiateWithCodeOldWeight: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array, gasLimit: Compact | AnyNumber | Uint8Array, storageDepositLimit: Option> | null | Uint8Array | Compact | AnyNumber, code: Bytes | string | Uint8Array, data: Bytes | string | Uint8Array, salt: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Compact, Compact, Option>, Bytes, Bytes, Bytes]>; /** - * Remove the code stored under `code_hash` and refund the deposit to its owner. - * - * A code can only be removed by its original uploader (its owner) and only if it is - * not used by any contract. + * See [`Pallet::migrate`]. + **/ + migrate: AugmentedSubmittable<(weightLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; + /** + * See [`Pallet::remove_code`]. **/ removeCode: AugmentedSubmittable<(codeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Privileged function that changes the code of an existing contract. - * - * This takes care of updating refcounts and all other necessary operations. Returns - * an error if either the `code_hash` or `dest` do not exist. - * - * # Note - * - * This does **not** change the address of the contract in question. This means - * that the contract address is no longer derived from its code hash after calling - * this dispatchable. + * See [`Pallet::set_code`]. **/ setCode: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, codeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, H256]>; /** - * Upload new `code` without instantiating a contract from it. - * - * If the code does not already exist a deposit is reserved from the caller - * and unreserved only when [`Self::remove_code`] is called. The size of the reserve - * depends on the instrumented size of the the supplied `code`. - * - * If the code already exists in storage it will still return `Ok` and upgrades - * the in storage version to the current - * [`InstructionWeights::version`](InstructionWeights). - * - * - `determinism`: If this is set to any other value but [`Determinism::Deterministic`] - * then the only way to use this code is to delegate call into it from an offchain - * execution. Set to [`Determinism::Deterministic`] if in doubt. - * - * # Note - * - * Anyone can instantiate a contract from any uploaded code and thus prevent its removal. - * To avoid this situation a constructor could employ access control so that it can - * only be instantiated by permissioned entities. The same is true when uploading - * through [`Self::instantiate_with_code`]. - **/ - uploadCode: AugmentedSubmittable<(code: Bytes | string | Uint8Array, storageDepositLimit: Option> | null | Uint8Array | Compact | AnyNumber, determinism: PalletContractsWasmDeterminism | 'Deterministic' | 'AllowIndeterminism' | number | Uint8Array) => SubmittableExtrinsic, [Bytes, Option>, PalletContractsWasmDeterminism]>; + * See [`Pallet::upload_code`]. + **/ + uploadCode: AugmentedSubmittable<(code: Bytes | string | Uint8Array, storageDepositLimit: Option> | null | Uint8Array | Compact | AnyNumber, determinism: PalletContractsWasmDeterminism | 'Enforced' | 'Relaxed' | number | Uint8Array) => SubmittableExtrinsic, [Bytes, Option>, PalletContractsWasmDeterminism]>; /** * Generic tx **/ @@ -1135,155 +419,43 @@ declare module '@polkadot/api-base/types/submittable' { }; corporateAction: { /** - * Changes the record date of the CA identified by `ca_id`. - * - * ## Arguments - * - `origin` which must be an external agent of `ca_id.asset_id` with relevant permissions. - * - `ca_id` of the CA to alter. - * - `record_date`, if any, to calculate the impact of the CA. - * If provided, this results in a scheduled balance snapshot ("checkpoint") at the date. - * - * # Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `NoSuchCA` if `id` does not identify an existing CA. - * - When `record_date.is_some()`, other errors due to checkpoint scheduling may occur. - * - * # Permissions - * * Asset + * See [`Pallet::change_record_date`]. **/ changeRecordDate: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array, recordDate: Option | null | Uint8Array | PalletCorporateActionsRecordDateSpec | { Scheduled: any } | { ExistingSchedule: any } | { Existing: any } | string) => SubmittableExtrinsic, [PalletCorporateActionsCaId, Option]>; /** - * Initiates a CA for `asset_id` of `kind` with `details` and other provided arguments. - * - * ## Arguments - * - `origin` which must be an external agent of `asset_id` with relevant permissions. - * - `asset_id` that the CA is made for. - * - `kind` of CA being initiated. - * - `decl_date` of CA bring initialized. - * - `record_date`, if any, to calculate the impact of this CA. - * If provided, this results in a scheduled balance snapshot ("checkpoint") at the date. - * - `details` of the CA in free-text form, up to a certain number of bytes in length. - * - `targets`, if any, which this CA is relevant/irrelevant to. - * Overrides, if provided, the default at the asset level (`set_default_targets`). - * - `default_withholding_tax`, if any, is the default withholding tax to use for this CA. - * Overrides, if provided, the default at the asset level (`set_default_withholding_tax`). - * - `withholding_tax`, if any, provides per-DID withholding tax overrides. - * Overrides, if provided, the default at the asset level (`set_did_withholding_tax`). - * - * # Errors - * - `DetailsTooLong` if `details.len()` goes beyond `max_details_length`. - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `CounterOverflow` in the unlikely event that so many CAs were created for this `asset_id`, - * that integer overflow would have occured if instead allowed. - * - `TooManyDidTaxes` if `withholding_tax.unwrap().len()` would go over the limit `MaxDidWhts`. - * - `DuplicateDidTax` if a DID is included more than once in `wt`. - * - `TooManyTargetIds` if `targets.unwrap().identities.len() > T::MaxTargetIds::get()`. - * - `DeclDateInFuture` if the declaration date is not in the past. - * - When `record_date.is_some()`, other errors due to checkpoint scheduling may occur. - * - * # Permissions - * * Asset + * See [`Pallet::initiate_corporate_action`]. **/ initiateCorporateAction: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, kind: PalletCorporateActionsCaKind | 'PredictableBenefit' | 'UnpredictableBenefit' | 'IssuerNotice' | 'Reorganization' | 'Other' | number | Uint8Array, declDate: u64 | AnyNumber | Uint8Array, recordDate: Option | null | Uint8Array | PalletCorporateActionsRecordDateSpec | { Scheduled: any } | { ExistingSchedule: any } | { Existing: any } | string, details: Bytes | string | Uint8Array, targets: Option | null | Uint8Array | PalletCorporateActionsTargetIdentities | { identities?: any; treatment?: any } | string, defaultWithholdingTax: Option | null | Uint8Array | Permill | AnyNumber, withholdingTax: Option>> | null | Uint8Array | Vec> | ([PolymeshPrimitivesIdentityId | string | Uint8Array, Permill | AnyNumber | Uint8Array])[]) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PalletCorporateActionsCaKind, u64, Option, Bytes, Option, Option, Option>>]>; /** - * Utility extrinsic to batch `initiate_corporate_action` and `distribute` + * See [`Pallet::initiate_corporate_action_and_ballot`]. + **/ + initiateCorporateActionAndBallot: AugmentedSubmittable<(caArgs: PalletCorporateActionsInitiateCorporateActionArgs | { assetId?: any; kind?: any; declDate?: any; recordDate?: any; details?: any; targets?: any; defaultWithholdingTax?: any; withholdingTax?: any } | string | Uint8Array, ballotTimeRange: PalletCorporateActionsBallotBallotTimeRange | { start?: any; end?: any } | string | Uint8Array, ballotMeta: PalletCorporateActionsBallotBallotMeta | { title?: any; motions?: any } | string | Uint8Array, rcv: bool | boolean | Uint8Array) => SubmittableExtrinsic, [PalletCorporateActionsInitiateCorporateActionArgs, PalletCorporateActionsBallotBallotTimeRange, PalletCorporateActionsBallotBallotMeta, bool]>; + /** + * See [`Pallet::initiate_corporate_action_and_distribute`]. **/ initiateCorporateActionAndDistribute: AugmentedSubmittable<(caArgs: PalletCorporateActionsInitiateCorporateActionArgs | { assetId?: any; kind?: any; declDate?: any; recordDate?: any; details?: any; targets?: any; defaultWithholdingTax?: any; withholdingTax?: any } | string | Uint8Array, portfolio: Option | null | Uint8Array | u64 | AnyNumber, currency: PolymeshPrimitivesAssetAssetId | string | Uint8Array, perShare: u128 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array, paymentAt: u64 | AnyNumber | Uint8Array, expiresAt: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [PalletCorporateActionsInitiateCorporateActionArgs, Option, PolymeshPrimitivesAssetAssetId, u128, u128, u64, Option]>; /** - * Link the given CA `id` to the given `docs`. - * Any previous links for the CA are removed in favor of `docs`. - * - * The workflow here is to add the documents and initiating the CA in any order desired. - * Once both exist, they can now be linked together. - * - * ## Arguments - * - `origin` which must be an external agent of `id.asset_id` with relevant permissions. - * - `id` of the CA to associate with `docs`. - * - `docs` to associate with the CA with `id`. - * - * # Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `NoSuchCA` if `id` does not identify an existing CA. - * - `NoSuchDoc` if any of `docs` does not identify an existing document. - * - * # Permissions - * * Asset + * See [`Pallet::link_ca_doc`]. **/ linkCaDoc: AugmentedSubmittable<(id: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array, docs: Vec | (u32 | AnyNumber | Uint8Array)[]) => SubmittableExtrinsic, [PalletCorporateActionsCaId, Vec]>; /** - * Removes the CA identified by `ca_id`. - * - * Associated data, such as document links, ballots, - * and capital distributions are also removed. - * - * Any schedule associated with the record date will see - * `strong_ref_count(schedule_id)` decremented. - * - * ## Arguments - * - `origin` which must be an external agent of `ca_id.asset_id` with relevant permissions. - * - `ca_id` of the CA to remove. - * - * # Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `NoSuchCA` if `id` does not identify an existing CA. - * - * # Permissions - * * Asset + * See [`Pallet::remove_ca`]. **/ removeCa: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletCorporateActionsCaId]>; /** - * Set the default CA `TargetIdentities` to `targets`. - * - * ## Arguments - * - `origin` which must be an external agent of `asset_id` with relevant permissions. - * - `asset_id` for which the default identities are changing. - * - `targets` the default target identities for a CA. - * - * ## Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `TooManyTargetIds` if `targets.identities.len() > T::MaxTargetIds::get()`. - * - * # Permissions - * * Asset + * See [`Pallet::set_default_targets`]. **/ setDefaultTargets: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, targets: PalletCorporateActionsTargetIdentities | { identities?: any; treatment?: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PalletCorporateActionsTargetIdentities]>; /** - * Set the default withholding tax for all DIDs and CAs relevant to this `asset_id`. - * - * ## Arguments - * - `origin` which must be an external agent of `asset_id` with relevant permissions. - * - `asset_id` that the withholding tax will apply to. - * - `tax` that should be withheld when distributing dividends, etc. - * - * ## Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - * # Permissions - * * Asset + * See [`Pallet::set_default_withholding_tax`]. **/ setDefaultWithholdingTax: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, tax: Permill | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, Permill]>; /** - * Set the withholding tax of `asset_id` for `taxed_did` to `tax`. - * If `Some(tax)`, this overrides the default withholding tax of `asset_id` to `tax` for `taxed_did`. - * Otherwise, if `None`, the default withholding tax will be used. - * - * ## Arguments - * - `origin` which must be an external agent of `asset_id` with relevant permissions. - * - `asset_id` that the withholding tax will apply to. - * - `taxed_did` that will have its withholding tax updated. - * - `tax` that should be withheld when distributing dividends, etc. - * - * ## Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `TooManyDidTaxes` if `Some(tax)` and adding the override would go over the limit `MaxDidWhts`. - * - * # Permissions - * * Asset + * See [`Pallet::set_did_withholding_tax`]. **/ setDidWithholdingTax: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, taxedDid: PolymeshPrimitivesIdentityId | string | Uint8Array, tax: Option | null | Uint8Array | Permill | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesIdentityId, Option]>; /** - * Set the max `length` of `details` in terms of bytes. - * May only be called via a PIP. + * See [`Pallet::set_max_details_length`]. **/ setMaxDetailsLength: AugmentedSubmittable<(length: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** @@ -1293,110 +465,27 @@ declare module '@polkadot/api-base/types/submittable' { }; corporateBallot: { /** - * Attach a corporate ballot to the CA identified by `ca_id`. - * - * The ballot will admit votes within `range`. - * The ballot's metadata is provided by `meta`, - * which includes the ballot title, the motions, their choices, etc. - * See the `BallotMeta` for more. - * - * ## Arguments - * - `origin` is a signer that has permissions to act as an agent of `ca_id.asset_id`. - * - `ca_id` identifies the CA to attach the ballot to. - * - `range` specifies when voting starts and ends. - * - `meta` specifies the ballot's metadata as aforementioned. - * - `rcv` specifies whether RCV is enabled for this ballot. - * - * # Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `NoSuchCA` if `ca_id` does not identify an existing CA. - * - `CANotNotice` if the CA is not of the `IssuerNotice` kind. - * - `StartAfterEnd` if `range.start > range.end`. - * - `NowAfterEnd` if `now > range.end` where `now` is the current timestamp. - * - `NoRecordDate` if CA has no record date. - * - `RecordDateAfterStart` if `date > range.start` where `date` is the CA's record date. - * - `AlreadyExists` if there's a ballot already. - * - `NumberOfChoicesOverflow` if the total choice in `meta` overflows `usize`. - * - `TooLong` if any of the embedded strings in `meta` are too long. - * - `InsufficientBalance` if the protocol fee couldn't be charged. + * See [`Pallet::attach_ballot`]. **/ attachBallot: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array, range: PalletCorporateActionsBallotBallotTimeRange | { start?: any; end?: any } | string | Uint8Array, meta: PalletCorporateActionsBallotBallotMeta | { title?: any; motions?: any } | string | Uint8Array, rcv: bool | boolean | Uint8Array) => SubmittableExtrinsic, [PalletCorporateActionsCaId, PalletCorporateActionsBallotBallotTimeRange, PalletCorporateActionsBallotBallotMeta, bool]>; /** - * Amend the end date of the ballot of the CA identified by `ca_id`. - * - * ## Arguments - * - `origin` is a signer that has permissions to act as an agent of `ca_id.asset_id`. - * - `ca_id` identifies the attached ballot's CA. - * - `end` specifies the new end date of the ballot. - * - * # Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `NoSuchBallot` if `ca_id` does not identify a ballot. - * - `VotingAlreadyStarted` if `start >= now`, where `now` is the current time. - * - `StartAfterEnd` if `start > end`. + * See [`Pallet::change_end`]. **/ changeEnd: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array, end: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletCorporateActionsCaId, u64]>; /** - * Amend the metadata (title, motions, etc.) of the ballot of the CA identified by `ca_id`. - * - * ## Arguments - * - `origin` is a signer that has permissions to act as an agent of `ca_id.asset_id`. - * - `ca_id` identifies the attached ballot's CA. - * - `meta` specifies the new metadata. - * - * # Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `NoSuchBallot` if `ca_id` does not identify a ballot. - * - `VotingAlreadyStarted` if `start >= now`, where `now` is the current time. - * - `NumberOfChoicesOverflow` if the total choice in `meta` overflows `usize`. - * - `TooLong` if any of the embedded strings in `meta` are too long. + * See [`Pallet::change_meta`]. **/ changeMeta: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array, meta: PalletCorporateActionsBallotBallotMeta | { title?: any; motions?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletCorporateActionsCaId, PalletCorporateActionsBallotBallotMeta]>; /** - * Amend RCV support for the ballot of the CA identified by `ca_id`. - * - * ## Arguments - * - `origin` is a signer that has permissions to act as an agent of `ca_id.asset_id`. - * - `ca_id` identifies the attached ballot's CA. - * - `rcv` specifies if RCV is to be supported or not. - * - * # Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `NoSuchBallot` if `ca_id` does not identify a ballot. - * - `VotingAlreadyStarted` if `start >= now`, where `now` is the current time. + * See [`Pallet::change_rcv`]. **/ changeRcv: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array, rcv: bool | boolean | Uint8Array) => SubmittableExtrinsic, [PalletCorporateActionsCaId, bool]>; /** - * Remove the ballot of the CA identified by `ca_id`. - * - * ## Arguments - * - `origin` is a signer that has permissions to act as an agent of `ca_id.asset_id`. - * - `ca_id` identifies the attached ballot's CA. - * - * # Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - `NoSuchBallot` if `ca_id` does not identify a ballot. - * - `VotingAlreadyStarted` if `start >= now`, where `now` is the current time. + * See [`Pallet::remove_ballot`]. **/ removeBallot: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletCorporateActionsCaId]>; /** - * Cast `votes` in the ballot attached to the CA identified by `ca_id`. - * - * ## Arguments - * - `origin` which must be a permissioned signer targeted by the CA. - * - `ca_id` identifies the attached ballot's CA. - * - `votes` specifies the balances to assign to each choice in the ballot. - * The full voting power of `origin`'s DID may be used for each motion in the ballot. - * - * # Errors - * - `NoSuchBallot` if `ca_id` does not identify a ballot. - * - `VotingNotStarted` if the voting period hasn't commenced yet. - * - `VotingAlreadyEnded` if the voting period has ended. - * - `WrongVoteCount` if the number of choices in the ballot does not match `votes.len()`. - * - `NoSuchCA` if `ca_id` does not identify an existing CA. - * - `NotTargetedByCA` if the CA does not target `origin`'s DID. - * - `InsufficientVotes` if the voting power used for any motion in `votes` - * exceeds `origin`'s DID's voting power. + * See [`Pallet::vote`]. **/ vote: AugmentedSubmittable<(caId: PalletCorporateActionsCaId | { assetId?: any; localId?: any } | string | Uint8Array, votes: Vec | (PalletCorporateActionsBallotBallotVote | { power?: any; fallback?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [PalletCorporateActionsCaId, Vec]>; /** @@ -1406,58 +495,23 @@ declare module '@polkadot/api-base/types/submittable' { }; electionProviderMultiPhase: { /** - * Trigger the governance fallback. - * - * This can only be called when [`Phase::Emergency`] is enabled, as an alternative to - * calling [`Call::set_emergency_election_result`]. + * See [`Pallet::governance_fallback`]. **/ governanceFallback: AugmentedSubmittable<(maybeMaxVoters: Option | null | Uint8Array | u32 | AnyNumber, maybeMaxTargets: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [Option, Option]>; /** - * Set a solution in the queue, to be handed out to the client of this pallet in the next - * call to `ElectionProvider::elect`. - * - * This can only be set by `T::ForceOrigin`, and only when the phase is `Emergency`. - * - * The solution is not checked for any feasibility and is assumed to be trustworthy, as any - * feasibility check itself can in principle cause the election process to fail (due to - * memory/weight constrains). + * See [`Pallet::set_emergency_election_result`]. **/ setEmergencyElectionResult: AugmentedSubmittable<(supports: Vec> | ([AccountId32 | string | Uint8Array, SpNposElectionsSupport | { total?: any; voters?: any } | string | Uint8Array])[]) => SubmittableExtrinsic, [Vec>]>; /** - * Set a new value for `MinimumUntrustedScore`. - * - * Dispatch origin must be aligned with `T::ForceOrigin`. - * - * This check can be turned off by setting the value to `None`. + * See [`Pallet::set_minimum_untrusted_score`]. **/ setMinimumUntrustedScore: AugmentedSubmittable<(maybeNextScore: Option | null | Uint8Array | SpNposElectionsElectionScore | { minimalStake?: any; sumStake?: any; sumStakeSquared?: any } | string) => SubmittableExtrinsic, [Option]>; /** - * Submit a solution for the signed phase. - * - * The dispatch origin fo this call must be __signed__. - * - * The solution is potentially queued, based on the claimed score and processed at the end - * of the signed phase. - * - * A deposit is reserved and recorded for the solution. Based on the outcome, the solution - * might be rewarded, slashed, or get all or a part of the deposit back. + * See [`Pallet::submit`]. **/ submit: AugmentedSubmittable<(rawSolution: PalletElectionProviderMultiPhaseRawSolution | { solution?: any; score?: any; round?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletElectionProviderMultiPhaseRawSolution]>; /** - * Submit a solution for the unsigned phase. - * - * The dispatch origin fo this call must be __none__. - * - * This submission is checked on the fly. Moreover, this unsigned solution is only - * validated when submitted to the pool from the **local** node. Effectively, this means - * that only active validators can submit this transaction when authoring a block (similar - * to an inherent). - * - * To prevent any incorrect solution (and thus wasted time/weight), this transaction will - * panic if the solution submitted by the validator is invalid in any way, effectively - * putting their authoring reward at risk. - * - * No deposit or reward is associated with this submission. + * See [`Pallet::submit_unsigned`]. **/ submitUnsigned: AugmentedSubmittable<(rawSolution: PalletElectionProviderMultiPhaseRawSolution | { solution?: any; score?: any; round?: any } | string | Uint8Array, witness: PalletElectionProviderMultiPhaseSolutionOrSnapshotSize | { voters?: any; targets?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize]>; /** @@ -1467,127 +521,35 @@ declare module '@polkadot/api-base/types/submittable' { }; externalAgents: { /** - * Abdicate agentship for `asset_id`. - * - * # Arguments - * - `assetID` the [`AssetId] of which the caller is an agent. - * - * # Errors - * - `NotAnAgent` if the caller is not an agent of `asset_id`. - * - `RemovingLastFullAgent` if the caller is the last full agent. - * - * # Permissions - * * Asset + * See [`Pallet::abdicate`]. **/ abdicate: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId]>; /** - * Accept an authorization by an agent "Alice" who issued `auth_id` - * to also become an agent of the asset Alice specified. - * - * # Arguments - * - `auth_id` identifying the authorization to accept. - * - * # Errors - * - `AuthorizationError::Invalid` if `auth_id` does not exist for the given caller. - * - `AuthorizationError::Expired` if `auth_id` is for an auth that has expired. - * - `AuthorizationError::BadType` if `auth_id` was not for a `BecomeAgent` auth type. - * - `UnauthorizedAgent` if "Alice" is not permissioned to provide the auth. - * - `NoSuchAG` if the group referred to a custom that does not exist. - * - `AlreadyAnAgent` if the caller is already an agent of the asset. - * - * # Permissions - * * Agent + * See [`Pallet::accept_become_agent`]. **/ acceptBecomeAgent: AugmentedSubmittable<(authId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Change the agent group that `agent` belongs to in `asset_id`. - * - * # Arguments - * - `assetID` the [`AssetId] that has the `agent`. - * - `agent` of `asset_id` to change the group for. - * - `group` that `agent` will belong to in `asset_id`. - * - * # Errors - * - `UnauthorizedAgent` if `origin` was not authorized as an agent to call this. - * - `NoSuchAG` if `id` does not identify a custom AG. - * - `NotAnAgent` if `agent` is not an agent of `asset_id`. - * - `RemovingLastFullAgent` if `agent` was a `Full` one and is being demoted. - * - * # Permissions - * * Asset - * * Agent + * See [`Pallet::change_group`]. **/ changeGroup: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, agent: PolymeshPrimitivesIdentityId | string | Uint8Array, group: PolymeshPrimitivesAgentAgentGroup | { Full: any } | { Custom: any } | { ExceptMeta: any } | { PolymeshV1CAA: any } | { PolymeshV1PIA: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesIdentityId, PolymeshPrimitivesAgentAgentGroup]>; /** - * Utility extrinsic to batch `create_group` and `change_group` for custom groups only. - * - * # Permissions - * * Asset - * * Agent + * See [`Pallet::create_and_change_custom_group`]. **/ createAndChangeCustomGroup: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, perms: PolymeshPrimitivesSecondaryKeyExtrinsicPermissions | { Whole: any } | { These: any } | { Except: any } | string | Uint8Array, agent: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions, PolymeshPrimitivesIdentityId]>; /** - * Creates a custom agent group (AG) for the given `asset_id`. - * - * The AG will have the permissions as given by `perms`. - * This new AG is then assigned `id = AGIdSequence::get() + 1` as its `AGId`, - * which you can use as `AgentGroup::Custom(id)` when adding agents for `asset_id`. - * - * # Arguments - * - `assetID` the [`AssetId] to add the custom group for. - * - `perms` that the new AG will have. - * - * # Errors - * - `UnauthorizedAgent` if `origin` was not authorized as an agent to call this. - * - `TooLong` if `perms` had some string or list length that was too long. - * - `CounterOverflow` if `AGIdSequence::get() + 1` would exceed `u32::MAX`. - * - * # Permissions - * * Asset - * * Agent + * See [`Pallet::create_group`]. **/ createGroup: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, perms: PolymeshPrimitivesSecondaryKeyExtrinsicPermissions | { Whole: any } | { These: any } | { Except: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions]>; /** - * Utility extrinsic to batch `create_group` and `add_auth`. - * - * # Permissions - * * Asset - * * Agent + * See [`Pallet::create_group_and_add_auth`]. **/ createGroupAndAddAuth: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, perms: PolymeshPrimitivesSecondaryKeyExtrinsicPermissions | { Whole: any } | { These: any } | { Except: any } | string | Uint8Array, target: PolymeshPrimitivesIdentityId | string | Uint8Array, expiry: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions, PolymeshPrimitivesIdentityId, Option]>; /** - * Remove the given `agent` from `asset_id`. - * - * # Arguments - * - `assetID` the [`AssetId] that has the `agent` to remove. - * - `agent` of `asset_id` to remove. - * - * # Errors - * - `UnauthorizedAgent` if `origin` was not authorized as an agent to call this. - * - `NotAnAgent` if `agent` is not an agent of `asset_id`. - * - `RemovingLastFullAgent` if `agent` is the last full one. - * - * # Permissions - * * Asset - * * Agent + * See [`Pallet::remove_agent`]. **/ removeAgent: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, agent: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesIdentityId]>; /** - * Updates the permissions of the custom AG identified by `id`, for the given `asset_id`. - * - * # Arguments - * - `assetID` the [`AssetId] the custom AG belongs to. - * - `id` for the custom AG within `asset_id`. - * - `perms` to update the custom AG to. - * - * # Errors - * - `UnauthorizedAgent` if `origin` was not authorized as an agent to call this. - * - `TooLong` if `perms` had some string or list length that was too long. - * - `NoSuchAG` if `id` does not identify a custom AG. - * - * # Permissions - * * Asset - * * Agent + * See [`Pallet::set_group_permissions`]. **/ setGroupPermissions: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, id: u32 | AnyNumber | Uint8Array, perms: PolymeshPrimitivesSecondaryKeyExtrinsicPermissions | { Whole: any } | { These: any } | { Except: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u32, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions]>; /** @@ -1597,37 +559,15 @@ declare module '@polkadot/api-base/types/submittable' { }; grandpa: { /** - * Note that the current authority set of the GRANDPA finality gadget has stalled. - * - * This will trigger a forced authority set change at the beginning of the next session, to - * be enacted `delay` blocks after that. The `delay` should be high enough to safely assume - * that the block signalling the forced change will not be re-orged e.g. 1000 blocks. - * The block production rate (which may be slowed down because of finality lagging) should - * be taken into account when choosing the `delay`. The GRANDPA voters based on the new - * authority will start voting on top of `best_finalized_block_number` for new finalized - * blocks. `best_finalized_block_number` should be the highest of the latest finalized - * block of all validators of the new authority set. - * - * Only callable by root. + * See [`Pallet::note_stalled`]. **/ noteStalled: AugmentedSubmittable<(delay: u32 | AnyNumber | Uint8Array, bestFinalizedBlockNumber: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32]>; /** - * Report voter equivocation/misbehavior. This method will verify the - * equivocation proof and validate the given key ownership proof - * against the extracted offender. If both are valid, the offence - * will be reported. + * See [`Pallet::report_equivocation`]. **/ reportEquivocation: AugmentedSubmittable<(equivocationProof: SpConsensusGrandpaEquivocationProof | { setId?: any; equivocation?: any } | string | Uint8Array, keyOwnerProof: SpSessionMembershipProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpConsensusGrandpaEquivocationProof, SpSessionMembershipProof]>; /** - * Report voter equivocation/misbehavior. This method will verify the - * equivocation proof and validate the given key ownership proof - * against the extracted offender. If both are valid, the offence - * will be reported. - * - * This extrinsic must be called unsigned and it is expected that only - * block authors will call it (validated in `ValidateUnsigned`), as such - * if the block author is defined it will be defined as the equivocation - * reporter. + * See [`Pallet::report_equivocation_unsigned`]. **/ reportEquivocationUnsigned: AugmentedSubmittable<(equivocationProof: SpConsensusGrandpaEquivocationProof | { setId?: any; equivocation?: any } | string | Uint8Array, keyOwnerProof: SpSessionMembershipProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpConsensusGrandpaEquivocationProof, SpSessionMembershipProof]>; /** @@ -1637,212 +577,99 @@ declare module '@polkadot/api-base/types/submittable' { }; identity: { /** - * Call this with the new primary key. By invoking this method, caller accepts authorization - * to become the new primary key of the issuing identity. If a CDD service provider approved - * this change (or this is not required), primary key of the DID is updated. - * - * The caller (new primary key) must be either a secondary key of the issuing identity, or - * unlinked to any identity. - * - * Differs from rotate_primary_key_to_secondary in that it will unlink the old primary key - * instead of leaving it as a secondary key. - * - * # Arguments - * * `owner_auth_id` Authorization from the owner who initiated the change - * * `cdd_auth_id` Authorization from a CDD service provider + * See [`Pallet::accept_primary_key`]. **/ acceptPrimaryKey: AugmentedSubmittable<(rotationAuthId: u64 | AnyNumber | Uint8Array, optionalCddAuthId: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; /** - * Adds an authorization. + * See [`Pallet::add_authorization`]. **/ addAuthorization: AugmentedSubmittable<(target: PolymeshPrimitivesSecondaryKeySignatory | { Identity: any } | { Account: any } | string | Uint8Array, data: PolymeshPrimitivesAuthorizationAuthorizationData | { AttestPrimaryKeyRotation: any } | { RotatePrimaryKey: any } | { TransferTicker: any } | { AddMultiSigSigner: any } | { TransferAssetOwnership: any } | { JoinIdentity: any } | { PortfolioCustody: any } | { BecomeAgent: any } | { AddRelayerPayingKey: any } | { RotatePrimaryKeyToSecondary: any } | string | Uint8Array, expiry: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesSecondaryKeySignatory, PolymeshPrimitivesAuthorizationAuthorizationData, Option]>; /** - * Adds a new claim record or edits an existing one. - * - * Only called by did_issuer's secondary key. + * See [`Pallet::add_claim`]. **/ addClaim: AugmentedSubmittable<(target: PolymeshPrimitivesIdentityId | string | Uint8Array, claim: PolymeshPrimitivesIdentityClaimClaim | { Accredited: any } | { Affiliate: any } | { BuyLockup: any } | { SellLockup: any } | { CustomerDueDiligence: any } | { KnowYourCustomer: any } | { Jurisdiction: any } | { Exempted: any } | { Blocked: any } | { Custom: any } | string | Uint8Array, expiry: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityClaimClaim, Option]>; /** - * Adds secondary keys to target identity `id`. - * - * Keys are directly added to identity because each of them has an authorization. - * - * # Arguments: - * - `origin` which must be the primary key of the identity `id`. - * - `id` to which new secondary keys will be added. - * - `additional_keys` which includes secondary keys, - * coupled with authorization data, to add to target identity. - * - * # Errors - * - Can only called by primary key owner. - * - Keys should be able to linked to any identity. + * See [`Pallet::add_secondary_keys_with_authorization`]. **/ addSecondaryKeysWithAuthorization: AugmentedSubmittable<(additionalKeys: Vec | (PolymeshCommonUtilitiesIdentitySecondaryKeyWithAuth | { secondaryKey?: any; authSignature?: any } | string | Uint8Array)[], expiresAt: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Vec, u64]>; /** - * Register `target_account` with a new Identity. - * - * # Failure - * - `origin` has to be a active CDD provider. Inactive CDD providers cannot add new - * claims. - * - `target_account` (primary key of the new Identity) can be linked to just one and only - * one identity. - * - External secondary keys can be linked to just one identity. + * See [`Pallet::cdd_register_did`]. **/ cddRegisterDid: AugmentedSubmittable<(targetAccount: AccountId32 | string | Uint8Array, secondaryKeys: Vec | (PolymeshPrimitivesSecondaryKey | { key?: any; permissions?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [AccountId32, Vec]>; /** - * Register `target_account` with a new Identity and issue a CDD claim with a blank CddId - * - * # Failure - * - `origin` has to be a active CDD provider. Inactive CDD providers cannot add new - * claims. - * - `target_account` (primary key of the new Identity) can be linked to just one and only - * one identity. - * - External secondary keys can be linked to just one identity. + * See [`Pallet::cdd_register_did_with_cdd`]. **/ cddRegisterDidWithCdd: AugmentedSubmittable<(targetAccount: AccountId32 | string | Uint8Array, secondaryKeys: Vec | (PolymeshPrimitivesSecondaryKey | { key?: any; permissions?: any } | string | Uint8Array)[], expiry: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [AccountId32, Vec, Option]>; /** - * Set if CDD authorization is required for updating primary key of an identity. - * Callable via root (governance) - * - * # Arguments - * * `auth_required` CDD Authorization required or not + * See [`Pallet::change_cdd_requirement_for_mk_rotation`]. **/ changeCddRequirementForMkRotation: AugmentedSubmittable<(authRequired: bool | boolean | Uint8Array) => SubmittableExtrinsic, [bool]>; /** - * Create a child identities. - * - * The new primary key for each child identity will need to sign (off-chain) - * an authorization. - * - * Only the primary key can create child identities. - * - * # Arguments - * - `child_keys` the keys that will become primary keys of their own child identity. - * - * # Errors - * - `KeyNotAllowed` only the primary key can create a new identity. - * - `AlreadyLinked` one of the keys is already linked to an identity. - * - `DuplicateKey` one of the keys is included multiple times. - * - `IsChildIdentity` the caller's identity is already a child identity and can't create child identities. + * See [`Pallet::create_child_identities`]. **/ createChildIdentities: AugmentedSubmittable<(childKeys: Vec | (PolymeshCommonUtilitiesIdentityCreateChildIdentityWithAuth | { key?: any; authSignature?: any } | string | Uint8Array)[], expiresAt: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Vec, u64]>; /** - * Create a child identity and make the `secondary_key` it's primary key. - * - * Only the primary key can create child identities. - * - * # Arguments - * - `secondary_key` the secondary key that will become the primary key of the new identity. - * - * # Errors - * - `KeyNotAllowed` only the primary key can create a new identity. - * - `NotASigner` the `secondary_key` is not a secondary key of the caller's identity. - * - `AccountKeyIsBeingUsed` the `secondary_key` can't be unlinked from it's current identity. - * - `IsChildIdentity` the caller's identity is already a child identity and can't create child identities. + * See [`Pallet::create_child_identity`]. **/ createChildIdentity: AugmentedSubmittable<(secondaryKey: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; /** - * It disables all secondary keys at `did` identity. - * - * # Errors - * + * See [`Pallet::freeze_secondary_keys`]. **/ freezeSecondaryKeys: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Assuming this is executed by the GC voting majority, adds a new cdd claim record. + * See [`Pallet::gc_add_cdd_claim`]. **/ gcAddCddClaim: AugmentedSubmittable<(target: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Assuming this is executed by the GC voting majority, removes an existing cdd claim record. + * See [`Pallet::gc_revoke_cdd_claim`]. **/ gcRevokeCddClaim: AugmentedSubmittable<(target: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Invalidates any claim generated by `cdd` from `disable_from` timestamps. - * - * You can also define an expiration time, - * which will invalidate all claims generated by that `cdd` and remove it as CDD member group. + * See [`Pallet::invalidate_cdd_claims`]. **/ invalidateCddClaims: AugmentedSubmittable<(cdd: PolymeshPrimitivesIdentityId | string | Uint8Array, disableFrom: u64 | AnyNumber | Uint8Array, expiry: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, u64, Option]>; /** - * Join an identity as a secondary key. + * See [`Pallet::join_identity_as_key`]. **/ joinIdentityAsKey: AugmentedSubmittable<(authId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Leave the secondary key's identity. + * See [`Pallet::leave_identity_as_key`]. **/ leaveIdentityAsKey: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Register custom claim type. - * - * # Errors - * * `CustomClaimTypeAlreadyExists` The type that is being registered already exists. - * * `CounterOverflow` CustomClaimTypeId has overflowed. - * * `TooLong` The type being registered is too lang. + * See [`Pallet::register_custom_claim_type`]. **/ registerCustomClaimType: AugmentedSubmittable<(ty: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Removes an authorization. - * _auth_issuer_pays determines whether the issuer of the authorisation pays the transaction fee + * See [`Pallet::remove_authorization`]. **/ removeAuthorization: AugmentedSubmittable<(target: PolymeshPrimitivesSecondaryKeySignatory | { Identity: any } | { Account: any } | string | Uint8Array, authId: u64 | AnyNumber | Uint8Array, authIssuerPays: bool | boolean | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesSecondaryKeySignatory, u64, bool]>; /** - * Removes specified secondary keys of a DID if present. - * - * # Errors - * - * The extrinsic can only called by primary key owner. + * See [`Pallet::remove_secondary_keys`]. **/ removeSecondaryKeys: AugmentedSubmittable<(keysToRemove: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Marks the specified claim as revoked. + * See [`Pallet::revoke_claim`]. **/ revokeClaim: AugmentedSubmittable<(target: PolymeshPrimitivesIdentityId | string | Uint8Array, claim: PolymeshPrimitivesIdentityClaimClaim | { Accredited: any } | { Affiliate: any } | { BuyLockup: any } | { SellLockup: any } | { CustomerDueDiligence: any } | { KnowYourCustomer: any } | { Jurisdiction: any } | { Exempted: any } | { Blocked: any } | { Custom: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityClaimClaim]>; /** - * Revokes a specific claim using its [Claim Unique Index](/pallet_identity/index.html#claim-unique-index) composed by `target`, - * `claim_type`, and `scope`. - * - * Please note that `origin` must be the issuer of the target claim. + * See [`Pallet::revoke_claim_by_index`]. **/ revokeClaimByIndex: AugmentedSubmittable<(target: PolymeshPrimitivesIdentityId | string | Uint8Array, claimType: PolymeshPrimitivesIdentityClaimClaimType | { Accredited: any } | { Affiliate: any } | { BuyLockup: any } | { SellLockup: any } | { CustomerDueDiligence: any } | { KnowYourCustomer: any } | { Jurisdiction: any } | { Exempted: any } | { Blocked: any } | { Custom: any } | string | Uint8Array, scope: Option | null | Uint8Array | PolymeshPrimitivesIdentityClaimScope | { Identity: any } | { Asset: any } | { Custom: any } | string) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityClaimClaimType, Option]>; /** - * Call this with the new primary key. By invoking this method, caller accepts authorization - * to become the new primary key of the issuing identity. If a CDD service provider approved - * this change, (or this is not required), primary key of the DID is updated. - * - * The caller (new primary key) must be either a secondary key of the issuing identity, or - * unlinked to any identity. - * - * Differs from accept_primary_key in that it will leave the old primary key as a secondary - * key with the permissions specified in the corresponding RotatePrimaryKeyToSecondary authorization - * instead of unlinking the old primary key. - * - * # Arguments - * * `owner_auth_id` Authorization from the owner who initiated the change - * * `cdd_auth_id` Authorization from a CDD service provider + * See [`Pallet::rotate_primary_key_to_secondary`]. **/ rotatePrimaryKeyToSecondary: AugmentedSubmittable<(authId: u64 | AnyNumber | Uint8Array, optionalCddAuthId: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; /** - * Sets permissions for an specific `target_key` key. - * - * Only the primary key of an identity is able to set secondary key permissions. + * See [`Pallet::set_secondary_key_permissions`]. **/ setSecondaryKeyPermissions: AugmentedSubmittable<(key: AccountId32 | string | Uint8Array, perms: PolymeshPrimitivesSecondaryKeyPermissions | { asset?: any; extrinsic?: any; portfolio?: any } | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, PolymeshPrimitivesSecondaryKeyPermissions]>; /** - * Re-enables all secondary keys of the caller's identity. + * See [`Pallet::unfreeze_secondary_keys`]. **/ unfreezeSecondaryKeys: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Unlink a child identity from it's parent identity. - * - * Only the primary key of the parent or child identities can unlink the identities. - * - * # Arguments - * - `child_did` the child identity to unlink from its parent identity. - * - * # Errors - * - `KeyNotAllowed` only the primary key of either the parent or child identity can unlink the identities. - * - `NoParentIdentity` the identity `child_did` doesn't have a parent identity. - * - `NotParentOrChildIdentity` the caller's identity isn't the parent or child identity. + * See [`Pallet::unlink_child_identity`]. **/ unlinkChildIdentity: AugmentedSubmittable<(childDid: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** @@ -1852,13 +679,9 @@ declare module '@polkadot/api-base/types/submittable' { }; imOnline: { /** - * ## Complexity: - * - `O(K + E)` where K is length of `Keys` (heartbeat.validators_len) and E is length of - * `heartbeat.network_state.external_address` - * - `O(K)`: decoding of length `K` - * - `O(E)`: decoding/encoding of length `E` + * See [`Pallet::heartbeat`]. **/ - heartbeat: AugmentedSubmittable<(heartbeat: PalletImOnlineHeartbeat | { blockNumber?: any; networkState?: any; sessionIndex?: any; authorityIndex?: any; validatorsLen?: any } | string | Uint8Array, signature: PalletImOnlineSr25519AppSr25519Signature | string | Uint8Array) => SubmittableExtrinsic, [PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Signature]>; + heartbeat: AugmentedSubmittable<(heartbeat: PalletImOnlineHeartbeat | { blockNumber?: any; sessionIndex?: any; authorityIndex?: any; validatorsLen?: any } | string | Uint8Array, signature: PalletImOnlineSr25519AppSr25519Signature | string | Uint8Array) => SubmittableExtrinsic, [PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Signature]>; /** * Generic tx **/ @@ -1866,79 +689,23 @@ declare module '@polkadot/api-base/types/submittable' { }; indices: { /** - * Assign an previously unassigned index. - * - * Payment: `Deposit` is reserved from the sender account. - * - * The dispatch origin for this call must be _Signed_. - * - * - `index`: the index to be claimed. This must not be in use. - * - * Emits `IndexAssigned` if successful. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::claim`]. **/ claim: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Force an index to an account. This doesn't require a deposit. If the index is already - * held, then any deposit is reimbursed to its current owner. - * - * The dispatch origin for this call must be _Root_. - * - * - `index`: the index to be (re-)assigned. - * - `new`: the new owner of the index. This function is a no-op if it is equal to sender. - * - `freeze`: if set to `true`, will freeze the index so it cannot be transferred. - * - * Emits `IndexAssigned` if successful. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::force_transfer`]. **/ forceTransfer: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u32 | AnyNumber | Uint8Array, freeze: bool | boolean | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u32, bool]>; /** - * Free up an index owned by the sender. - * - * Payment: Any previous deposit placed for the index is unreserved in the sender account. - * - * The dispatch origin for this call must be _Signed_ and the sender must own the index. - * - * - `index`: the index to be freed. This must be owned by the sender. - * - * Emits `IndexFreed` if successful. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::free`]. **/ free: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Freeze an index so it will always point to the sender account. This consumes the - * deposit. - * - * The dispatch origin for this call must be _Signed_ and the signing account must have a - * non-frozen account `index`. - * - * - `index`: the index to be frozen in place. - * - * Emits `IndexFrozen` if successful. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::freeze`]. **/ freeze: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Assign an index already owned by the sender to another account. The balance reservation - * is effectively transferred to the new account. - * - * The dispatch origin for this call must be _Signed_. - * - * - `index`: the index to be re-assigned. This must be owned by the sender. - * - `new`: the new owner of the index. This function is a no-op if it is equal to sender. - * - * Emits `IndexAssigned` if successful. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::transfer`]. **/ transfer: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u32]>; /** @@ -1948,130 +715,75 @@ declare module '@polkadot/api-base/types/submittable' { }; multiSig: { /** - * Accepts a multisig signer authorization given to signer's key (AccountId). - * - * # Arguments - * * `auth_id` - Auth id of the authorization. + * See [`Pallet::accept_multisig_signer`]. **/ acceptMultisigSigner: AugmentedSubmittable<(authId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Add an admin identity to the multisig. This must be called by the multisig itself. + * See [`Pallet::add_admin`]. **/ addAdmin: AugmentedSubmittable<(adminDid: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Adds signers to the multisig. This must be called by the multisig itself. - * - * # Arguments - * * `signers` - Signers to add. + * See [`Pallet::add_multisig_signers`]. **/ addMultisigSigners: AugmentedSubmittable<(signers: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Adds a signer to the multisig. This must be called by the admin identity of the - * multisig. - * - * # Arguments - * * `multisig` - Address of the multi sig - * * `signers` - Signers to add. - * + * See [`Pallet::add_multisig_signers_via_admin`]. **/ addMultisigSignersViaAdmin: AugmentedSubmittable<(multisig: AccountId32 | string | Uint8Array, signers: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [AccountId32, Vec]>; /** - * Approves a multisig proposal using the caller's secondary key (`AccountId`). - * - * # Arguments - * * `multisig` - MultiSig address. - * * `proposal_id` - Proposal id to approve. - * * `max_weight` - The maximum weight to execute the proposal. - * - * If quorum is reached, the proposal will be immediately executed. - **/ - approve: AugmentedSubmittable<(multisig: AccountId32 | string | Uint8Array, proposalId: u64 | AnyNumber | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, u64, SpWeightsWeightV2Weight]>; - /** - * Approves a multisig join identity proposal. - * - * # Arguments - * * `multisig` - MultiSig address. - * * `auth_id` - The join identity authorization to approve. - * - * If quorum is reached, the join identity proposal will be immediately executed. + * See [`Pallet::approve`]. + **/ + approve: AugmentedSubmittable<(multisig: AccountId32 | string | Uint8Array, proposalId: u64 | AnyNumber | Uint8Array, maxWeight: Option | null | Uint8Array | SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string) => SubmittableExtrinsic, [AccountId32, u64, Option]>; + /** + * See [`Pallet::approve_join_identity`]. **/ approveJoinIdentity: AugmentedSubmittable<(multisig: AccountId32 | string | Uint8Array, authId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u64]>; /** - * Changes the number of signatures required by a multisig. This must be called by the - * multisig itself. - * - * # Arguments - * * `sigs_required` - New number of required signatures. + * See [`Pallet::change_sigs_required`]. **/ changeSigsRequired: AugmentedSubmittable<(sigsRequired: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Changes the number of signatures required by a multisig. This must be called by the admin of the multisig. - * - * # Arguments - * * `multisig` - The account identifier ([`AccountId`]) for the multi signature account. - * * `signatures_required` - The number of required signatures. + * See [`Pallet::change_sigs_required_via_admin`]. **/ changeSigsRequiredViaAdmin: AugmentedSubmittable<(multisig: AccountId32 | string | Uint8Array, signaturesRequired: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u64]>; /** - * Creates a multisig - * - * # Arguments - * * `signers` - Signers of the multisig (They need to accept authorization before they are actually added). - * * `sigs_required` - Number of sigs required to process a multi-sig tx. - * * `permissions` - optional custom permissions. Only the primary key can provide custom permissions. + * See [`Pallet::create_multisig`]. **/ createMultisig: AugmentedSubmittable<(signers: Vec | (AccountId32 | string | Uint8Array)[], sigsRequired: u64 | AnyNumber | Uint8Array, permissions: Option | null | Uint8Array | PolymeshPrimitivesSecondaryKeyPermissions | { asset?: any; extrinsic?: any; portfolio?: any } | string) => SubmittableExtrinsic, [Vec, u64, Option]>; /** - * Creates a multisig proposal - * - * # Arguments - * * `multisig` - MultiSig address. - * * `proposal` - Proposal to be voted on. - * * `expiry` - Optional proposal expiry time. - * - * If this is 1 out of `m` multisig, the proposal will be immediately executed. + * See [`Pallet::create_proposal`]. **/ createProposal: AugmentedSubmittable<(multisig: AccountId32 | string | Uint8Array, proposal: Call | IMethod | string | Uint8Array, expiry: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [AccountId32, Call, Option]>; /** - * Accept a JoinIdentity authorization for this multisig. This must be called by the multisig itself. + * See [`Pallet::join_identity`]. **/ joinIdentity: AugmentedSubmittable<(authId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Rejects a multisig proposal using the caller's secondary key (`AccountId`). - * - * # Arguments - * * `multisig` - MultiSig address. - * * `proposal_id` - Proposal id to reject. - * If quorum is reached, the proposal will be immediately executed. + * See [`Pallet::reject`]. **/ reject: AugmentedSubmittable<(multisig: AccountId32 | string | Uint8Array, proposalId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u64]>; /** - * Removes the admin identity from the `multisig`. This must be called by the admin of the multisig. + * See [`Pallet::remove_admin`]. + **/ + removeAdmin: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + /** + * See [`Pallet::remove_admin_via_admin`]. **/ removeAdminViaAdmin: AugmentedSubmittable<(multisig: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; /** - * Removes signers from the multisig. This must be called by the multisig itself. - * - * # Arguments - * * `signers` - Signers to remove. + * See [`Pallet::remove_multisig_signers`]. **/ removeMultisigSigners: AugmentedSubmittable<(signers: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Removes a signer from the multisig. - * This must be called by the admin identity of the multisig. - * - * # Arguments - * * `multisig` - Address of the multisig. - * * `signers` - Signers to remove. - * + * See [`Pallet::remove_multisig_signers_via_admin`]. **/ removeMultisigSignersViaAdmin: AugmentedSubmittable<(multisig: AccountId32 | string | Uint8Array, signers: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [AccountId32, Vec]>; /** - * Removes the paying identity from the `multisig`. This must be called by the multisig itself. + * See [`Pallet::remove_payer`]. **/ removePayer: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Removes the paying identity from the `multisig`. This must be called by the paying identity of the multisig. + * See [`Pallet::remove_payer_via_payer`]. **/ removePayerViaPayer: AugmentedSubmittable<(multisig: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; /** @@ -2081,77 +793,21 @@ declare module '@polkadot/api-base/types/submittable' { }; nft: { /** - * Forces the transfer of NFTs from a given portfolio to the caller's portfolio. - * - * # Arguments - * * `origin` - is a signer that has permissions to act as an agent of `asset_id`. - * * `nft_id` - the [`NFTId`] of the NFT to be transferred. - * * `source_portfolio` - the [`PortfolioId`] that currently holds the NFT. - * * `callers_portfolio_kind` - the [`PortfolioKind`] of the caller's portfolio. - * - * # Permissions - * * Asset - * * Portfolio + * See [`Pallet::controller_transfer`]. **/ controllerTransfer: AugmentedSubmittable<(nfts: PolymeshPrimitivesNftNfTs | { assetId?: any; ids?: any } | string | Uint8Array, sourcePortfolio: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array, callersPortfolioKind: PolymeshPrimitivesIdentityIdPortfolioKind | { Default: any } | { User: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesNftNfTs, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesIdentityIdPortfolioKind]>; /** - * Cretes a new `NFTCollection`. - * - * # Arguments - * * `origin` - contains the secondary key of the caller (i.e. who signed the transaction to execute this function). - * * `asset_id` - optional [`AssetId`] associated to the new collection. `None` will create a new asset. - * * `nft_type` - in case the asset hasn't been created yet, one will be created with the given type. - * * `collection_keys` - all mandatory metadata keys that the tokens in the collection must have. - * - * ## Errors - * - `CollectionAlredyRegistered` - if the asset_id is already associated to an NFT collection. - * - `InvalidAssetType` - if the associated asset is not of type NFT. - * - `MaxNumberOfKeysExceeded` - if the number of metadata keys for the collection is greater than the maximum allowed. - * - `UnregisteredMetadataKey` - if any of the metadata keys needed for the collection has not been registered. - * - `DuplicateMetadataKey` - if a duplicate metadata keys has been passed as input. - * - * # Permissions - * * Asset + * See [`Pallet::create_nft_collection`]. **/ createNftCollection: AugmentedSubmittable<(assetId: Option | null | Uint8Array | PolymeshPrimitivesAssetAssetId | string, nftType: Option | null | Uint8Array | PolymeshPrimitivesAssetNonFungibleType | { Derivative: any } | { FixedIncome: any } | { Invoice: any } | { Custom: any } | string, collectionKeys: PolymeshPrimitivesNftNftCollectionKeys) => SubmittableExtrinsic, [Option, Option, PolymeshPrimitivesNftNftCollectionKeys]>; /** - * Issues an NFT to the caller. - * - * # Arguments - * * `origin` - is a signer that has permissions to act as an agent of `asset_id`. - * * `asset_id` - the [`AssetId`] of the NFT collection. - * * `nft_metadata_attributes` - all mandatory metadata keys and values for the NFT. - * - `portfolio_kind` - the portfolio that will receive the minted nft. - * - * ## Errors - * - `CollectionNotFound` - if the collection associated to the given asset_id has not been created. - * - `InvalidMetadataAttribute` - if the number of attributes is not equal to the number set in the collection or attempting to set a value for a key not definied in the collection. - * - `DuplicateMetadataKey` - if a duplicate metadata keys has been passed as input. - * - * - * # Permissions - * * Asset - * * Portfolio + * See [`Pallet::issue_nft`]. **/ issueNft: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, nftMetadataAttributes: Vec | (PolymeshPrimitivesNftNftMetadataAttribute | { key?: any; value?: any } | string | Uint8Array)[], portfolioKind: PolymeshPrimitivesIdentityIdPortfolioKind | { Default: any } | { User: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, Vec, PolymeshPrimitivesIdentityIdPortfolioKind]>; /** - * Redeems the given NFT from the caller's portfolio. - * - * # Arguments - * * `origin` - is a signer that has permissions to act as an agent of `asset_id`. - * * `asset_id` - the [`AssetId`] of the NFT collection. - * * `nft_id` - the id of the NFT to be burned. - * * `portfolio_kind` - the portfolio that contains the nft. - * - * ## Errors - * - `CollectionNotFound` - if the collection associated to the given asset_id has not been created. - * - `NFTNotFound` - if the given NFT does not exist in the portfolio. - * - * # Permissions - * * Asset - * * Portfolio - **/ - redeemNft: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, nftId: u64 | AnyNumber | Uint8Array, portfolioKind: PolymeshPrimitivesIdentityIdPortfolioKind | { Default: any } | { User: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64, PolymeshPrimitivesIdentityIdPortfolioKind]>; + * See [`Pallet::redeem_nft`]. + **/ + redeemNft: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, nftId: u64 | AnyNumber | Uint8Array, portfolioKind: PolymeshPrimitivesIdentityIdPortfolioKind | { Default: any } | { User: any } | string | Uint8Array, numberOfKeys: Option | null | Uint8Array | u8 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64, PolymeshPrimitivesIdentityIdPortfolioKind, Option]>; /** * Generic tx **/ @@ -2159,173 +815,71 @@ declare module '@polkadot/api-base/types/submittable' { }; pips: { /** - * Approves the pending committee PIP given by the `id`. - * - * # Errors - * * `BadOrigin` unless a GC voting majority executes this function. - * * `NoSuchProposal` if the PIP with `id` doesn't exist. - * * `IncorrectProposalState` if the proposal isn't pending. - * * `NotByCommittee` if the proposal isn't by a committee. + * See [`Pallet::approve_committee_proposal`]. **/ approveCommitteeProposal: AugmentedSubmittable<(id: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Clears the snapshot and emits the event `SnapshotCleared`. - * - * # Errors - * * `NotACommitteeMember` - triggered when a non-GC-member executes the function. + * See [`Pallet::clear_snapshot`]. **/ clearSnapshot: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Enacts `results` for the PIPs in the snapshot queue. - * The snapshot will be available for further enactments until it is cleared. - * - * The `results` are encoded a list of `(id, result)` where `result` is applied to `id`. - * Note that the snapshot priority queue is encoded with the *lowest priority first*. - * so `results = [(id, Approve)]` will approve `SnapshotQueue[SnapshotQueue.len() - 1]`. - * - * # Errors - * * `BadOrigin` - unless a GC voting majority executes this function. - * * `CannotSkipPip` - a given PIP has already been skipped too many times. - * * `SnapshotResultTooLarge` - on len(results) > len(snapshot_queue). - * * `SnapshotIdMismatch` - if: - * ```text - * ∃ (i ∈ 0..SnapshotQueue.len()). - * results[i].0 ≠ SnapshotQueue[SnapshotQueue.len() - i].id - * ``` - * This is protects against clearing queue while GC is voting. + * See [`Pallet::enact_snapshot_results`]. **/ enactSnapshotResults: AugmentedSubmittable<(results: Vec> | ([u32 | AnyNumber | Uint8Array, PalletPipsSnapshotResult | 'Approve' | 'Reject' | 'Skip' | number | Uint8Array])[]) => SubmittableExtrinsic, [Vec>]>; /** - * Internal dispatchable that handles execution of a PIP. + * See [`Pallet::execute_scheduled_pip`]. **/ executeScheduledPip: AugmentedSubmittable<(id: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Internal dispatchable that handles expiration of a PIP. + * See [`Pallet::expire_scheduled_pip`]. **/ expireScheduledPip: AugmentedSubmittable<(did: PolymeshPrimitivesIdentityId | string | Uint8Array, id: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, u32]>; /** - * A network member creates a PIP by submitting a dispatchable which - * changes the network in someway. A minimum deposit is required to open a new proposal. - * - * # Arguments - * * `proposer` is either a signing key or committee. - * Used to understand whether this is a committee proposal and verified against `origin`. - * * `proposal` a dispatchable call - * * `deposit` minimum deposit value, which is ignored if `proposer` is a committee. - * * `url` a link to a website for proposal discussion + * See [`Pallet::propose`]. **/ propose: AugmentedSubmittable<(proposal: Call | IMethod | string | Uint8Array, deposit: u128 | AnyNumber | Uint8Array, url: Option | null | Uint8Array | Bytes | string, description: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [Call, u128, Option, Option]>; /** - * Prune the PIP given by the `id`, refunding any funds not already refunded. - * The PIP may not be active - * - * This function is intended for storage garbage collection purposes. - * - * # Errors - * * `BadOrigin` unless a GC voting majority executes this function. - * * `NoSuchProposal` if the PIP with `id` doesn't exist. - * * `IncorrectProposalState` if the proposal is active. + * See [`Pallet::prune_proposal`]. **/ pruneProposal: AugmentedSubmittable<(id: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Rejects the PIP given by the `id`, refunding any bonded funds, - * assuming it hasn't been cancelled or executed. - * Note that proposals scheduled-for-execution can also be rejected. - * - * # Errors - * * `BadOrigin` unless a GC voting majority executes this function. - * * `NoSuchProposal` if the PIP with `id` doesn't exist. - * * `IncorrectProposalState` if the proposal was cancelled or executed. + * See [`Pallet::reject_proposal`]. **/ rejectProposal: AugmentedSubmittable<(id: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Updates the execution schedule of the PIP given by `id`. - * - * # Arguments - * * `until` defines the future block where the enactment period will finished. - * `None` value means that enactment period is going to finish in the next block. - * - * # Errors - * * `RescheduleNotByReleaseCoordinator` unless triggered by release coordinator. - * * `IncorrectProposalState` unless the proposal was in a scheduled state. + * See [`Pallet::reschedule_execution`]. **/ rescheduleExecution: AugmentedSubmittable<(id: u32 | AnyNumber | Uint8Array, until: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [u32, Option]>; /** - * Change the maximum number of active PIPs before community members cannot propose anything. - * Can only be called by root. - * - * # Arguments - * * `limit` of concurrent active PIPs. + * See [`Pallet::set_active_pip_limit`]. **/ setActivePipLimit: AugmentedSubmittable<(limit: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Change the default enactment period. - * Can only be called by root. - * - * # Arguments - * * `duration` the new default enactment period it takes for a scheduled PIP to be executed. + * See [`Pallet::set_default_enactment_period`]. **/ setDefaultEnactmentPeriod: AugmentedSubmittable<(duration: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Change the maximum skip count (`max_pip_skip_count`). - * Can only be called by root. - * - * # Arguments - * * `max` skips before a PIP cannot be skipped by GC anymore. + * See [`Pallet::set_max_pip_skip_count`]. **/ setMaxPipSkipCount: AugmentedSubmittable<(max: u8 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u8]>; /** - * Change the minimum proposal deposit amount required to start a proposal. - * Can only be called by root. - * - * # Arguments - * * `deposit` the new min deposit required to start a proposal + * See [`Pallet::set_min_proposal_deposit`]. **/ setMinProposalDeposit: AugmentedSubmittable<(deposit: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; /** - * Change the amount of blocks after which a pending PIP is expired. - * If `expiry` is `None` then PIPs never expire. - * Can only be called by root. - * - * # Arguments - * * `expiry` the block-time it takes for a still-`Pending` PIP to expire. + * See [`Pallet::set_pending_pip_expiry`]. **/ - setPendingPipExpiry: AugmentedSubmittable<(expiry: PolymeshCommonUtilitiesMaybeBlock | { Some: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshCommonUtilitiesMaybeBlock]>; + setPendingPipExpiry: AugmentedSubmittable<(expiry: PolymeshPrimitivesMaybeBlock | { Some: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesMaybeBlock]>; /** - * Change whether completed PIPs are pruned. - * Can only be called by root. - * - * # Arguments - * * `prune` specifies whether completed PIPs should be pruned. + * See [`Pallet::set_prune_historical_pips`]. **/ setPruneHistoricalPips: AugmentedSubmittable<(prune: bool | boolean | Uint8Array) => SubmittableExtrinsic, [bool]>; /** - * Takes a new snapshot of the current list of active && pending PIPs. - * The PIPs are then sorted into a priority queue based on each PIP's weight. - * - * # Errors - * * `NotACommitteeMember` - triggered when a non-GC-member executes the function. + * See [`Pallet::snapshot`]. **/ snapshot: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Vote either in favor (`aye_or_nay` == true) or against a PIP with `id`. - * The "convinction" or strength of the vote is given by `deposit`, which is reserved. - * - * Note that `vote` is *not* additive. - * That is, `vote(id, true, 50)` followed by `vote(id, true, 40)` - * will first reserve `50` and then refund `50 - 10`, ending up with `40` in deposit. - * To add atop of existing votes, you'll need `existing_deposit + addition`. - * - * # Arguments - * * `id`, proposal id - * * `aye_or_nay`, a bool representing for or against vote - * * `deposit`, the "conviction" with which the vote is made. - * - * # Errors - * * `NoSuchProposal` if `id` doesn't reference a valid PIP. - * * `NotFromCommunity` if proposal was made by a committee. - * * `IncorrectProposalState` if PIP isn't pending. - * * `InsufficientDeposit` if `origin` cannot reserve `deposit - old_deposit`. + * See [`Pallet::vote`]. **/ vote: AugmentedSubmittable<(id: u32 | AnyNumber | Uint8Array, ayeOrNay: bool | boolean | Uint8Array, deposit: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, bool, u128]>; /** @@ -2335,62 +889,23 @@ declare module '@polkadot/api-base/types/submittable' { }; polymeshCommittee: { /** - * Changes the time after which a proposal expires. - * - * # Arguments - * * `expiry` - The new expiry time. + * See [`Pallet::set_expires_after`]. **/ - setExpiresAfter: AugmentedSubmittable<(expiry: PolymeshCommonUtilitiesMaybeBlock | { Some: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshCommonUtilitiesMaybeBlock]>; + setExpiresAfter: AugmentedSubmittable<(expiry: PolymeshPrimitivesMaybeBlock | { Some: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesMaybeBlock]>; /** - * Changes the release coordinator. - * - * # Arguments - * * `id` - The DID of the new release coordinator. - * - * # Errors - * * `NotAMember`, If the new coordinator `id` is not part of the committee. + * See [`Pallet::set_release_coordinator`]. **/ setReleaseCoordinator: AugmentedSubmittable<(id: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Change the vote threshold the determines the winning proposal. - * For e.g., for a simple majority use (1, 2) which represents the in-equation ">= 1/2". - * - * # Arguments - * * `n` - Numerator of the fraction representing vote threshold. - * * `d` - Denominator of the fraction representing vote threshold. + * See [`Pallet::set_vote_threshold`]. **/ setVoteThreshold: AugmentedSubmittable<(n: u32 | AnyNumber | Uint8Array, d: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32]>; /** - * Votes `approve`ingly (or not, if `false`) - * on an existing `proposal` given by its hash, `index`. - * - * # Arguments - * * `proposal` - A hash of the proposal to be voted on. - * * `index` - The proposal index. - * * `approve` - If `true` than this is a `for` vote, and `against` otherwise. - * - * # Errors - * * `NotAMember`, if the `origin` is not a member of this committee. + * See [`Pallet::vote`]. **/ vote: AugmentedSubmittable<(proposal: H256 | string | Uint8Array, index: u32 | AnyNumber | Uint8Array, approve: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, u32, bool]>; /** - * Proposes to the committee that `call` should be executed in its name. - * Alternatively, if the hash of `call` has already been recorded, i.e., already proposed, - * then this call counts as a vote, i.e., as if `vote_by_hash` was called. - * - * # Weight - * - * The weight of this dispatchable is that of `call` as well as the complexity - * for recording the vote itself. - * - * # Arguments - * * `approve` - is this an approving vote? - * If the proposal doesn't exist, passing `false` will result in error `FirstVoteReject`. - * * `call` - the call to propose for execution. - * - * # Errors - * * `FirstVoteReject`, if `call` hasn't been proposed and `approve == false`. - * * `NotAMember`, if the `origin` is not a member of this committee. + * See [`Pallet::vote_or_propose`]. **/ voteOrPropose: AugmentedSubmittable<(approve: bool | boolean | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [bool, Call]>; /** @@ -2400,102 +915,28 @@ declare module '@polkadot/api-base/types/submittable' { }; polymeshContracts: { /** - * Instantiates a smart contract defining it with the given `code` and `salt`. - * - * The contract will be attached as a primary key of a newly created child identity of the caller. - * - * # Arguments - * - `endowment`: Amount of POLYX to transfer to the contract. - * - `gas_limit`: For how much gas the `deploy` code in the contract may at most consume. - * - `storage_deposit_limit`: The maximum amount of balance that can be charged/reserved from the caller to pay for the storage consumed. - * - `code`: The WASM binary defining the smart contract. - * - `data`: The input data to pass to the contract constructor. - * - `salt`: Used for contract address derivation. By varying this, the same `code` can be used under the same identity. - * + * See [`Pallet::instantiate_with_code_as_primary_key`]. **/ instantiateWithCodeAsPrimaryKey: AugmentedSubmittable<(endowment: u128 | AnyNumber | Uint8Array, gasLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, storageDepositLimit: Option | null | Uint8Array | u128 | AnyNumber, code: Bytes | string | Uint8Array, data: Bytes | string | Uint8Array, salt: Bytes | string | Uint8Array) => SubmittableExtrinsic, [u128, SpWeightsWeightV2Weight, Option, Bytes, Bytes, Bytes]>; /** - * Instantiates a smart contract defining it with the given `code` and `salt`. - * - * The contract will be attached as a secondary key, - * with `perms` as its permissions, to `origin`'s identity. - * - * The contract is transferred `endowment` amount of POLYX. - * This is distinct from the `gas_limit`, - * which controls how much gas the deployment code may at most consume. - * - * # Arguments - * - `endowment` amount of POLYX to transfer to the contract. - * - `gas_limit` for how much gas the `deploy` code in the contract may at most consume. - * - `storage_deposit_limit` The maximum amount of balance that can be charged/reserved - * from the caller to pay for the storage consumed. - * - `code` with the WASM binary defining the smart contract. - * - `data` The input data to pass to the contract constructor. - * - `salt` used for contract address derivation. - * By varying this, the same `code` can be used under the same identity. - * - `perms` that the new secondary key will have. - * - * # Errors - * - All the errors in `pallet_contracts::Call::instantiate_with_code` can also happen here. - * - CDD/Permissions are checked, unlike in `pallet_contracts`. - * - Errors that arise when adding a new secondary key can also occur here. + * See [`Pallet::instantiate_with_code_perms`]. **/ instantiateWithCodePerms: AugmentedSubmittable<(endowment: u128 | AnyNumber | Uint8Array, gasLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, storageDepositLimit: Option | null | Uint8Array | u128 | AnyNumber, code: Bytes | string | Uint8Array, data: Bytes | string | Uint8Array, salt: Bytes | string | Uint8Array, perms: PolymeshPrimitivesSecondaryKeyPermissions | { asset?: any; extrinsic?: any; portfolio?: any } | string | Uint8Array) => SubmittableExtrinsic, [u128, SpWeightsWeightV2Weight, Option, Bytes, Bytes, Bytes, PolymeshPrimitivesSecondaryKeyPermissions]>; /** - * Instantiates a smart contract defining using the given `code_hash` and `salt`. - * - * Unlike `instantiate_with_code`, this assumes that at least one contract with the same WASM code has already been uploaded. - * - * The contract will be attached as a primary key of a newly created child identity of the caller. - * - * # Arguments - * - `endowment`: amount of POLYX to transfer to the contract. - * - `gas_limit`: for how much gas the `deploy` code in the contract may at most consume. - * - `storage_deposit_limit`: The maximum amount of balance that can be charged/reserved from the caller to pay for the storage consumed. - * - `code_hash`: of an already uploaded WASM binary. - * - `data`: The input data to pass to the contract constructor. - * - `salt`: used for contract address derivation. By varying this, the same `code` can be used under the same identity. - * + * See [`Pallet::instantiate_with_hash_as_primary_key`]. **/ instantiateWithHashAsPrimaryKey: AugmentedSubmittable<(endowment: u128 | AnyNumber | Uint8Array, gasLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, storageDepositLimit: Option | null | Uint8Array | u128 | AnyNumber, codeHash: H256 | string | Uint8Array, data: Bytes | string | Uint8Array, salt: Bytes | string | Uint8Array) => SubmittableExtrinsic, [u128, SpWeightsWeightV2Weight, Option, H256, Bytes, Bytes]>; /** - * Instantiates a smart contract defining using the given `code_hash` and `salt`. - * - * Unlike `instantiate_with_code`, - * this assumes that at least one contract with the same WASM code has already been uploaded. - * - * The contract will be attached as a secondary key, - * with `perms` as its permissions, to `origin`'s identity. - * - * The contract is transferred `endowment` amount of POLYX. - * This is distinct from the `gas_limit`, - * which controls how much gas the deployment code may at most consume. - * - * # Arguments - * - `endowment` amount of POLYX to transfer to the contract. - * - `gas_limit` for how much gas the `deploy` code in the contract may at most consume. - * - `storage_deposit_limit` The maximum amount of balance that can be charged/reserved - * from the caller to pay for the storage consumed. - * - `code_hash` of an already uploaded WASM binary. - * - `data` The input data to pass to the contract constructor. - * - `salt` used for contract address derivation. - * By varying this, the same `code` can be used under the same identity. - * - `perms` that the new secondary key will have. - * - * # Errors - * - All the errors in `pallet_contracts::Call::instantiate` can also happen here. - * - CDD/Permissions are checked, unlike in `pallet_contracts`. - * - Errors that arise when adding a new secondary key can also occur here. + * See [`Pallet::instantiate_with_hash_perms`]. **/ instantiateWithHashPerms: AugmentedSubmittable<(endowment: u128 | AnyNumber | Uint8Array, gasLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, storageDepositLimit: Option | null | Uint8Array | u128 | AnyNumber, codeHash: H256 | string | Uint8Array, data: Bytes | string | Uint8Array, salt: Bytes | string | Uint8Array, perms: PolymeshPrimitivesSecondaryKeyPermissions | { asset?: any; extrinsic?: any; portfolio?: any } | string | Uint8Array) => SubmittableExtrinsic, [u128, SpWeightsWeightV2Weight, Option, H256, Bytes, Bytes, PolymeshPrimitivesSecondaryKeyPermissions]>; /** - * Update CallRuntime whitelist. - * - * # Arguments - * - * # Errors + * See [`Pallet::update_call_runtime_whitelist`]. **/ updateCallRuntimeWhitelist: AugmentedSubmittable<(updates: Vec> | ([PolymeshContractsChainExtensionExtrinsicId, bool | boolean | Uint8Array])[]) => SubmittableExtrinsic, [Vec>]>; + /** + * See [`Pallet::upgrade_api`]. + **/ upgradeApi: AugmentedSubmittable<(api: PolymeshContractsApi | { desc?: any; major?: any } | string | Uint8Array, nextUpgrade: PolymeshContractsNextUpgrade | { chainVersion?: any; apiHash?: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshContractsApi, PolymeshContractsNextUpgrade]>; /** * Generic tx @@ -2503,111 +944,48 @@ declare module '@polkadot/api-base/types/submittable' { [key: string]: SubmittableExtrinsicFunction; }; portfolio: { + /** + * See [`Pallet::accept_portfolio_custody`]. + **/ acceptPortfolioCustody: AugmentedSubmittable<(authId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Adds an identity that will be allowed to create and take custody of a portfolio under the caller's identity. - * - * # Arguments - * * `trusted_identity` - the [`IdentityId`] that will be allowed to call `create_custody_portfolio`. - * + * See [`Pallet::allow_identity_to_create_portfolios`]. **/ allowIdentityToCreatePortfolios: AugmentedSubmittable<(trustedIdentity: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Creates a portfolio under the `portfolio_owner_id` identity and transfers its custody to the caller's identity. - * - * # Arguments - * * `portfolio_owner_id` - the [`IdentityId`] that will own the new portfolio. - * * `portfolio_name` - the [`PortfolioName`] of the new portfolio. - * + * See [`Pallet::create_custody_portfolio`]. **/ createCustodyPortfolio: AugmentedSubmittable<(portfolioOwnerId: PolymeshPrimitivesIdentityId | string | Uint8Array, portfolioName: Bytes | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, Bytes]>; /** - * Creates a portfolio with the given `name`. + * See [`Pallet::create_portfolio`]. **/ createPortfolio: AugmentedSubmittable<(name: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Deletes a user portfolio. A portfolio can be deleted only if it has no funds. - * - * # Errors - * * `PortfolioDoesNotExist` if `num` doesn't reference a valid portfolio. - * * `PortfolioNotEmpty` if the portfolio still holds any asset - * - * # Permissions - * * Portfolio + * See [`Pallet::delete_portfolio`]. **/ deletePortfolio: AugmentedSubmittable<(num: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Moves fungigle an non-fungible tokens from one portfolio of an identity to another portfolio of the same - * identity. Must be called by the custodian of the sender. - * Funds from deleted portfolios can also be recovered via this method. - * - * A short memo can be added to to each token amount moved. - * - * # Errors - * * `PortfolioDoesNotExist` if one or both of the portfolios reference an invalid portfolio. - * * `destination_is_same_portfolio` if both sender and receiver portfolio are the same - * * `DifferentIdentityPortfolios` if the sender and receiver portfolios belong to different identities - * * `UnauthorizedCustodian` if the caller is not the custodian of the from portfolio - * * `InsufficientPortfolioBalance` if the sender does not have enough free balance - * * `NoDuplicateAssetsAllowed` the same asset can't be repeated in the items vector. - * * `InvalidTransferNFTNotOwned` if the caller is trying to move an NFT he doesn't own. - * * `InvalidTransferNFTIsLocked` if the caller is trying to move a locked NFT. - * - * # Permissions - * * Portfolio + * See [`Pallet::move_portfolio_funds`]. **/ movePortfolioFunds: AugmentedSubmittable<(from: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array, to: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array, funds: Vec | (PolymeshPrimitivesPortfolioFund | { description?: any; memo?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesIdentityIdPortfolioId, Vec]>; /** - * Pre-approves the receivement of an asset to a portfolio. - * - * # Arguments - * * `origin` - the secondary key of the sender. - * * `asset_id` - the [`AssetId`] that will be exempt from affirmation. - * * `portfolio_id` - the [`PortfolioId`] that can receive `asset_id` without affirmation. - * - * # Permissions - * * Portfolio + * See [`Pallet::pre_approve_portfolio`]. **/ preApprovePortfolio: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, portfolioId: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesIdentityIdPortfolioId]>; /** - * When called by the custodian of `portfolio_id`, - * allows returning the custody of the portfolio to the portfolio owner unilaterally. - * - * # Errors - * * `UnauthorizedCustodian` if the caller is not the current custodian of `portfolio_id`. - * - * # Permissions - * * Portfolio + * See [`Pallet::quit_portfolio_custody`]. **/ quitPortfolioCustody: AugmentedSubmittable<(pid: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityIdPortfolioId]>; /** - * Removes the pre approval of an asset to a portfolio. - * - * # Arguments - * * `origin` - the secondary key of the sender. - * * `asset_id` - the [`AssetId`] that will be exempt from affirmation. - * * `portfolio_id` - the [`PortfolioId`] that can receive `asset_id` without affirmation. - * - * # Permissions - * * Portfolio + * See [`Pallet::remove_portfolio_pre_approval`]. **/ removePortfolioPreApproval: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, portfolioId: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesIdentityIdPortfolioId]>; /** - * Renames a non-default portfolio. - * - * # Errors - * * `PortfolioDoesNotExist` if `num` doesn't reference a valid portfolio. - * - * # Permissions - * * Portfolio + * See [`Pallet::rename_portfolio`]. **/ renamePortfolio: AugmentedSubmittable<(num: u64 | AnyNumber | Uint8Array, toName: Bytes | string | Uint8Array) => SubmittableExtrinsic, [u64, Bytes]>; /** - * Removes permission of an identity to create and take custody of a portfolio under the caller's identity. - * - * # Arguments - * * `identity` - the [`IdentityId`] that will have the permissions to call `create_custody_portfolio` revoked. - * + * See [`Pallet::revoke_create_portfolios_permission`]. **/ revokeCreatePortfoliosPermission: AugmentedSubmittable<(identity: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** @@ -2617,32 +995,19 @@ declare module '@polkadot/api-base/types/submittable' { }; preimage: { /** - * Register a preimage on-chain. - * - * If the preimage was previously requested, no fees or deposits are taken for providing - * the preimage. Otherwise, a deposit is taken proportional to the size of the preimage. + * See [`Pallet::note_preimage`]. **/ notePreimage: AugmentedSubmittable<(bytes: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Request a preimage be uploaded to the chain without paying any fees or deposits. - * - * If the preimage requests has already been provided on-chain, we unreserve any deposit - * a user may have paid, and take the control of the preimage out of their hands. + * See [`Pallet::request_preimage`]. **/ requestPreimage: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Clear an unrequested preimage from the runtime storage. - * - * If `len` is provided, then it will be a much cheaper operation. - * - * - `hash`: The hash of the preimage to be removed from the store. - * - `len`: The length of the preimage of `hash`. + * See [`Pallet::unnote_preimage`]. **/ unnotePreimage: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Clear a previously made request for a preimage. - * - * NOTE: THIS MUST NOT BE CALLED ON `hash` MORE TIMES THAN `request_preimage`. + * See [`Pallet::unrequest_preimage`]. **/ unrequestPreimage: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** @@ -2652,17 +1017,11 @@ declare module '@polkadot/api-base/types/submittable' { }; protocolFee: { /** - * Changes the a base fee for the root origin. - * - * # Errors - * * `BadOrigin` - Only root allowed. + * See [`Pallet::change_base_fee`]. **/ changeBaseFee: AugmentedSubmittable<(op: PolymeshCommonUtilitiesProtocolFeeProtocolOp | 'AssetRegisterTicker' | 'AssetIssue' | 'AssetAddDocuments' | 'AssetCreateAsset' | 'CheckpointCreateSchedule' | 'ComplianceManagerAddComplianceRequirement' | 'IdentityCddRegisterDid' | 'IdentityAddClaim' | 'IdentityAddSecondaryKeysWithAuthorization' | 'PipsPropose' | 'ContractsPutCode' | 'CorporateBallotAttachBallot' | 'CapitalDistributionDistribute' | 'NFTCreateCollection' | 'NFTMint' | 'IdentityCreateChildIdentity' | number | Uint8Array, baseFee: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshCommonUtilitiesProtocolFeeProtocolOp, u128]>; /** - * Changes the fee coefficient for the root origin. - * - * # Errors - * * `BadOrigin` - Only root allowed. + * See [`Pallet::change_coefficient`]. **/ changeCoefficient: AugmentedSubmittable<(coefficient: PolymeshPrimitivesPosRatio) => SubmittableExtrinsic, [PolymeshPrimitivesPosRatio]>; /** @@ -2672,86 +1031,27 @@ declare module '@polkadot/api-base/types/submittable' { }; relayer: { /** - * Accepts a `paying_key` authorization. - * - * # Arguments - * - `auth_id` the authorization id to accept a `paying_key`. - * - * # Errors - * - `AuthorizationError::Invalid` if `auth_id` does not exist for the given caller. - * - `AuthorizationError::Expired` if `auth_id` the authorization has expired. - * - `AuthorizationError::BadType` if `auth_id` was not a `AddRelayerPayingKey` authorization. - * - `NotAuthorizedForUserKey` if `origin` is not authorized to accept the authorization for the `user_key`. - * - `NotAuthorizedForPayingKey` if the authorization was created an identity different from the `paying_key`'s identity. - * - `UserKeyCddMissing` if the `user_key` is not attached to a CDD'd identity. - * - `PayingKeyCddMissing` if the `paying_key` is not attached to a CDD'd identity. - * - `UnauthorizedCaller` if `origin` is not authorized to call this extrinsic. + * See [`Pallet::accept_paying_key`]. **/ acceptPayingKey: AugmentedSubmittable<(authId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Decrease the available POLYX for a `user_key`. - * - * # Arguments - * - `user_key` the user key of the subsidy to update the available POLYX. - * - `amount` the amount of POLYX to remove from the subsidy of `user_key`. - * - * # Errors - * - `NoPayingKey` if the `user_key` doesn't have a `paying_key`. - * - `NotPayingKey` if `origin` doesn't match the current `paying_key`. - * - `UnauthorizedCaller` if `origin` is not authorized to call this extrinsic. - * - `Overlow` if the subsidy has less then `amount` POLYX remaining. + * See [`Pallet::decrease_polyx_limit`]. **/ decreasePolyxLimit: AugmentedSubmittable<(userKey: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128]>; /** - * Increase the available POLYX for a `user_key`. - * - * # Arguments - * - `user_key` the user key of the subsidy to update the available POLYX. - * - `amount` the amount of POLYX to add to the subsidy of `user_key`. - * - * # Errors - * - `NoPayingKey` if the `user_key` doesn't have a `paying_key`. - * - `NotPayingKey` if `origin` doesn't match the current `paying_key`. - * - `UnauthorizedCaller` if `origin` is not authorized to call this extrinsic. - * - `Overlow` if the subsidy's remaining POLYX would have overflowed `u128::MAX`. + * See [`Pallet::increase_polyx_limit`]. **/ increasePolyxLimit: AugmentedSubmittable<(userKey: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128]>; /** - * Removes the `paying_key` from a `user_key`. - * - * # Arguments - * - `user_key` the user key to remove the subsidy from. - * - `paying_key` the paying key that was subsidising the `user_key`. - * - * # Errors - * - `NotAuthorizedForUserKey` if `origin` is not authorized to remove the subsidy for the `user_key`. - * - `NoPayingKey` if the `user_key` doesn't have a `paying_key`. - * - `NotPayingKey` if the `paying_key` doesn't match the current `paying_key`. - * - `UnauthorizedCaller` if `origin` is not authorized to call this extrinsic. + * See [`Pallet::remove_paying_key`]. **/ removePayingKey: AugmentedSubmittable<(userKey: AccountId32 | string | Uint8Array, payingKey: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, AccountId32]>; /** - * Creates an authorization to allow `user_key` to accept the caller (`origin == paying_key`) as their subsidiser. - * - * # Arguments - * - `user_key` the user key to subsidise. - * - `polyx_limit` the initial POLYX limit for this subsidy. - * - * # Errors - * - `UnauthorizedCaller` if `origin` is not authorized to call this extrinsic. + * See [`Pallet::set_paying_key`]. **/ setPayingKey: AugmentedSubmittable<(userKey: AccountId32 | string | Uint8Array, polyxLimit: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128]>; /** - * Updates the available POLYX for a `user_key`. - * - * # Arguments - * - `user_key` the user key of the subsidy to update the available POLYX. - * - `polyx_limit` the amount of POLYX available for subsidising the `user_key`. - * - * # Errors - * - `NoPayingKey` if the `user_key` doesn't have a `paying_key`. - * - `NotPayingKey` if `origin` doesn't match the current `paying_key`. - * - `UnauthorizedCaller` if `origin` is not authorized to call this extrinsic. + * See [`Pallet::update_polyx_limit`]. **/ updatePolyxLimit: AugmentedSubmittable<(userKey: AccountId32 | string | Uint8Array, polyxLimit: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128]>; /** @@ -2761,27 +1061,27 @@ declare module '@polkadot/api-base/types/submittable' { }; scheduler: { /** - * Cancel an anonymously scheduled task. + * See [`Pallet::cancel`]. **/ cancel: AugmentedSubmittable<(when: u32 | AnyNumber | Uint8Array, index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32]>; /** - * Cancel a named scheduled task. + * See [`Pallet::cancel_named`]. **/ cancelNamed: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed]>; /** - * Anonymously schedule a task. + * See [`Pallet::schedule`]. **/ schedule: AugmentedSubmittable<(when: u32 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u32, u32]> | [u32 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u32, Option>, u8, Call]>; /** - * Anonymously schedule a task after a delay. + * See [`Pallet::schedule_after`]. **/ scheduleAfter: AugmentedSubmittable<(after: u32 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u32, u32]> | [u32 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u32, Option>, u8, Call]>; /** - * Schedule a named task. + * See [`Pallet::schedule_named`]. **/ scheduleNamed: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array, when: u32 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u32, u32]> | [u32 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed, u32, Option>, u8, Call]>; /** - * Schedule a named task after a delay. + * See [`Pallet::schedule_named_after`]. **/ scheduleNamedAfter: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array, after: u32 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u32, u32]> | [u32 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed, u32, Option>, u8, Call]>; /** @@ -2791,30 +1091,11 @@ declare module '@polkadot/api-base/types/submittable' { }; session: { /** - * Removes any session key(s) of the function caller. - * - * This doesn't take effect until the next session. - * - * The dispatch origin of this function must be Signed and the account must be either be - * convertible to a validator ID using the chain's typical addressing system (this usually - * means being a controller account) or directly convertible into a validator ID (which - * usually means being a stash account). - * - * ## Complexity - * - `O(1)` in number of key types. Actual cost depends on the number of length of - * `T::Keys::key_ids()` which is fixed. + * See [`Pallet::purge_keys`]. **/ purgeKeys: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Sets the session key(s) of the function caller to `keys`. - * Allows an account to set its session key prior to becoming a validator. - * This doesn't take effect until the next session. - * - * The dispatch origin of this function must be signed. - * - * ## Complexity - * - `O(1)`. Actual cost depends on the number of length of `T::Keys::key_ids()` which is - * fixed. + * See [`Pallet::set_keys`]. **/ setKeys: AugmentedSubmittable<(keys: PolymeshRuntimeDevelopRuntimeSessionKeys | { grandpa?: any; babe?: any; imOnline?: any; authorityDiscovery?: any } | string | Uint8Array, proof: Bytes | string | Uint8Array) => SubmittableExtrinsic, [PolymeshRuntimeDevelopRuntimeSessionKeys, Bytes]>; /** @@ -2824,272 +1105,105 @@ declare module '@polkadot/api-base/types/submittable' { }; settlement: { /** - * Adds and affirms a new instruction. - * - * # Arguments - * * `venue_id`: The [`VenueId`] of the venue this instruction belongs to. - * * `settlement_type`: The [`SettlementType`] specifying when the instruction should be settled. - * * `trade_date`: Optional date from which people can interact with this instruction. - * * `value_date`: Optional date after which the instruction should be settled (not enforced). - * * `legs`: A vector of all [`Leg`] included in this instruction. - * * `portfolios`: A vector of [`PortfolioId`] under the caller's control and intended for affirmation. - * * `memo`: An optional [`Memo`] field for this instruction. - * - * # Permissions - * * Portfolio - **/ - addAndAffirmInstruction: AugmentedSubmittable<(venueId: Option | null | Uint8Array | u64 | AnyNumber, settlementType: PolymeshPrimitivesSettlementSettlementType | { SettleOnAffirmation: any } | { SettleOnBlock: any } | { SettleManual: any } | string | Uint8Array, tradeDate: Option | null | Uint8Array | u64 | AnyNumber, valueDate: Option | null | Uint8Array | u64 | AnyNumber, legs: Vec | (PolymeshPrimitivesSettlementLeg | { Fungible: any } | { NonFungible: any } | { OffChain: any } | string | Uint8Array)[], portfolios: Vec | (PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array)[], instructionMemo: Option | null | Uint8Array | PolymeshPrimitivesMemo | string) => SubmittableExtrinsic, [Option, PolymeshPrimitivesSettlementSettlementType, Option, Option, Vec, Vec, Option]>; - /** - * Adds and affirms a new instruction with mediators. - * - * # Arguments - * * `venue_id`: The [`VenueId`] of the venue this instruction belongs to. - * * `settlement_type`: The [`SettlementType`] specifying when the instruction should be settled. - * * `trade_date`: Optional date from which people can interact with this instruction. - * * `value_date`: Optional date after which the instruction should be settled (not enforced). - * * `legs`: A vector of all [`Leg`] included in this instruction. - * * `portfolios`: A vector of [`PortfolioId`] under the caller's control and intended for affirmation. - * * `instruction_memo`: An optional [`Memo`] field for this instruction. - * * `mediators`: A set of [`IdentityId`] of all the mandatory mediators for the instruction. - * - * # Permissions - * * Portfolio - **/ - addAndAffirmWithMediators: AugmentedSubmittable<(venueId: Option | null | Uint8Array | u64 | AnyNumber, settlementType: PolymeshPrimitivesSettlementSettlementType | { SettleOnAffirmation: any } | { SettleOnBlock: any } | { SettleManual: any } | string | Uint8Array, tradeDate: Option | null | Uint8Array | u64 | AnyNumber, valueDate: Option | null | Uint8Array | u64 | AnyNumber, legs: Vec | (PolymeshPrimitivesSettlementLeg | { Fungible: any } | { NonFungible: any } | { OffChain: any } | string | Uint8Array)[], portfolios: Vec | (PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array)[], instructionMemo: Option | null | Uint8Array | PolymeshPrimitivesMemo | string, mediators: BTreeSet) => SubmittableExtrinsic, [Option, PolymeshPrimitivesSettlementSettlementType, Option, Option, Vec, Vec, Option, BTreeSet]>; - /** - * Adds a new instruction. - * - * # Arguments - * * `venue_id`: The optional [`VenueId`] of the venue this instruction belongs to. - * * `settlement_type`: The [`SettlementType`] specifying when the instruction should be settled. - * * `trade_date`: Optional date from which people can interact with this instruction. - * * `value_date`: Optional date after which the instruction should be settled (not enforced). - * * `legs`: A vector of all [`Leg`] included in this instruction. - * * `memo`: An optional [`Memo`] field for this instruction. - **/ - addInstruction: AugmentedSubmittable<(venueId: Option | null | Uint8Array | u64 | AnyNumber, settlementType: PolymeshPrimitivesSettlementSettlementType | { SettleOnAffirmation: any } | { SettleOnBlock: any } | { SettleManual: any } | string | Uint8Array, tradeDate: Option | null | Uint8Array | u64 | AnyNumber, valueDate: Option | null | Uint8Array | u64 | AnyNumber, legs: Vec | (PolymeshPrimitivesSettlementLeg | { Fungible: any } | { NonFungible: any } | { OffChain: any } | string | Uint8Array)[], instructionMemo: Option | null | Uint8Array | PolymeshPrimitivesMemo | string) => SubmittableExtrinsic, [Option, PolymeshPrimitivesSettlementSettlementType, Option, Option, Vec, Option]>; - /** - * Adds a new instruction with mediators. - * - * # Arguments - * * `venue_id`: The [`VenueId`] of the venue this instruction belongs to. - * * `settlement_type`: The [`SettlementType`] specifying when the instruction should be settled. - * * `trade_date`: Optional date from which people can interact with this instruction. - * * `value_date`: Optional date after which the instruction should be settled (not enforced). - * * `legs`: A vector of all [`Leg`] included in this instruction. - * * `instruction_memo`: An optional [`Memo`] field for this instruction. - * * `mediators`: A set of [`IdentityId`] of all the mandatory mediators for the instruction. - **/ - addInstructionWithMediators: AugmentedSubmittable<(venueId: Option | null | Uint8Array | u64 | AnyNumber, settlementType: PolymeshPrimitivesSettlementSettlementType | { SettleOnAffirmation: any } | { SettleOnBlock: any } | { SettleManual: any } | string | Uint8Array, tradeDate: Option | null | Uint8Array | u64 | AnyNumber, valueDate: Option | null | Uint8Array | u64 | AnyNumber, legs: Vec | (PolymeshPrimitivesSettlementLeg | { Fungible: any } | { NonFungible: any } | { OffChain: any } | string | Uint8Array)[], instructionMemo: Option | null | Uint8Array | PolymeshPrimitivesMemo | string, mediators: BTreeSet) => SubmittableExtrinsic, [Option, PolymeshPrimitivesSettlementSettlementType, Option, Option, Vec, Option, BTreeSet]>; - /** - * Provide affirmation to an existing instruction. - * - * # Arguments - * * `id` - the [`InstructionId`] of the instruction being affirmed. - * * `portfolios` - a vector of [`PortfolioId`] under the caller's control and intended for affirmation. - * - * # Permissions - * * Portfolio - **/ - affirmInstruction: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, portfolios: Vec | (PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [u64, Vec]>; - /** - * Affirms the instruction as a mediator - should only be called by mediators, otherwise it will fail. - * - * # Arguments - * * `origin`: The secondary key of the sender. - * * `instruction_id`: The [`InstructionId`] that will be affirmed by the mediator. - * * `expiry`: An Optional value for defining when the affirmation will expire (None means it will always be valid). + * See [`Pallet::add_and_affirm_instruction`]. + **/ + addAndAffirmInstruction: AugmentedSubmittable<(venueId: Option | null | Uint8Array | u64 | AnyNumber, settlementType: PolymeshPrimitivesSettlementSettlementType | { SettleOnAffirmation: any } | { SettleOnBlock: any } | { SettleManual: any } | { SettleAfterLock: any } | string | Uint8Array, tradeDate: Option | null | Uint8Array | u64 | AnyNumber, valueDate: Option | null | Uint8Array | u64 | AnyNumber, legs: Vec | (PolymeshPrimitivesSettlementLeg | { Fungible: any } | { NonFungible: any } | { OffChain: any } | string | Uint8Array)[], portfolios: BTreeSet, instructionMemo: Option | null | Uint8Array | PolymeshPrimitivesMemo | string) => SubmittableExtrinsic, [Option, PolymeshPrimitivesSettlementSettlementType, Option, Option, Vec, BTreeSet, Option]>; + /** + * See [`Pallet::add_and_affirm_with_mediators`]. + **/ + addAndAffirmWithMediators: AugmentedSubmittable<(venueId: Option | null | Uint8Array | u64 | AnyNumber, settlementType: PolymeshPrimitivesSettlementSettlementType | { SettleOnAffirmation: any } | { SettleOnBlock: any } | { SettleManual: any } | { SettleAfterLock: any } | string | Uint8Array, tradeDate: Option | null | Uint8Array | u64 | AnyNumber, valueDate: Option | null | Uint8Array | u64 | AnyNumber, legs: Vec | (PolymeshPrimitivesSettlementLeg | { Fungible: any } | { NonFungible: any } | { OffChain: any } | string | Uint8Array)[], portfolios: BTreeSet, instructionMemo: Option | null | Uint8Array | PolymeshPrimitivesMemo | string, mediators: BTreeSet) => SubmittableExtrinsic, [Option, PolymeshPrimitivesSettlementSettlementType, Option, Option, Vec, BTreeSet, Option, BTreeSet]>; + /** + * See [`Pallet::add_instruction`]. + **/ + addInstruction: AugmentedSubmittable<(venueId: Option | null | Uint8Array | u64 | AnyNumber, settlementType: PolymeshPrimitivesSettlementSettlementType | { SettleOnAffirmation: any } | { SettleOnBlock: any } | { SettleManual: any } | { SettleAfterLock: any } | string | Uint8Array, tradeDate: Option | null | Uint8Array | u64 | AnyNumber, valueDate: Option | null | Uint8Array | u64 | AnyNumber, legs: Vec | (PolymeshPrimitivesSettlementLeg | { Fungible: any } | { NonFungible: any } | { OffChain: any } | string | Uint8Array)[], instructionMemo: Option | null | Uint8Array | PolymeshPrimitivesMemo | string) => SubmittableExtrinsic, [Option, PolymeshPrimitivesSettlementSettlementType, Option, Option, Vec, Option]>; + /** + * See [`Pallet::add_instruction_with_mediators`]. + **/ + addInstructionWithMediators: AugmentedSubmittable<(venueId: Option | null | Uint8Array | u64 | AnyNumber, settlementType: PolymeshPrimitivesSettlementSettlementType | { SettleOnAffirmation: any } | { SettleOnBlock: any } | { SettleManual: any } | { SettleAfterLock: any } | string | Uint8Array, tradeDate: Option | null | Uint8Array | u64 | AnyNumber, valueDate: Option | null | Uint8Array | u64 | AnyNumber, legs: Vec | (PolymeshPrimitivesSettlementLeg | { Fungible: any } | { NonFungible: any } | { OffChain: any } | string | Uint8Array)[], instructionMemo: Option | null | Uint8Array | PolymeshPrimitivesMemo | string, mediators: BTreeSet) => SubmittableExtrinsic, [Option, PolymeshPrimitivesSettlementSettlementType, Option, Option, Vec, Option, BTreeSet]>; + /** + * See [`Pallet::affirm_instruction`]. + **/ + affirmInstruction: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, portfolios: BTreeSet) => SubmittableExtrinsic, [u64, BTreeSet]>; + /** + * See [`Pallet::affirm_instruction_as_mediator`]. **/ affirmInstructionAsMediator: AugmentedSubmittable<(instructionId: u64 | AnyNumber | Uint8Array, expiry: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; /** - * Provide affirmation to an existing instruction. - * - * # Arguments - * * `id` - the [`InstructionId`] of the instruction being affirmed. - * * `portfolios` - a vector of [`PortfolioId`] under the caller's control and intended for affirmation. - * * `number_of_assets` - an optional [`AffirmationCount`] that will be used for a precise fee estimation before executing the extrinsic. - * - * Note: calling the rpc method `get_affirmation_count` returns an instance of [`AffirmationCount`]. - * - * # Permissions - * * Portfolio - **/ - affirmInstructionWithCount: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, portfolios: Vec | (PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array)[], numberOfAssets: Option | null | Uint8Array | PolymeshPrimitivesSettlementAffirmationCount | { senderAssetCount?: any; receiverAssetCount?: any; offchainCount?: any } | string) => SubmittableExtrinsic, [u64, Vec, Option]>; - /** - * Affirms an instruction using receipts for offchain transfers. - * - * # Arguments - * * `id` - the [`InstructionId`] of the instruction being affirmed. - * * `receipt_details` - a vector of [`ReceiptDetails`], which contain the details about the offchain transfer. - * * `portfolios` - a vector of [`PortfolioId`] under the caller's control and intended for affirmation. - * - * # Permissions - * * Portfolio - **/ - affirmWithReceipts: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, receiptDetails: Vec | (PolymeshPrimitivesSettlementReceiptDetails | { uid?: any; instructionId?: any; legId?: any; signer?: any; signature?: any; metadata?: any } | string | Uint8Array)[], portfolios: Vec | (PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [u64, Vec, Vec]>; - /** - * Affirms an instruction using receipts for offchain transfers. - * - * # Arguments - * * `id` - the [`InstructionId`] of the instruction being affirmed. - * * `receipt_details` - a vector of [`ReceiptDetails`], which contain the details about the offchain transfer. - * * `portfolios` - a vector of [`PortfolioId`] under the caller's control and intended for affirmation. - * * `number_of_assets` - an optional [`AffirmationCount`] that will be used for a precise fee estimation before executing the extrinsic. - * - * Note: calling the rpc method `get_affirmation_count` returns an instance of [`AffirmationCount`]. - * - * # Permissions - * * Portfolio - **/ - affirmWithReceiptsWithCount: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, receiptDetails: Vec | (PolymeshPrimitivesSettlementReceiptDetails | { uid?: any; instructionId?: any; legId?: any; signer?: any; signature?: any; metadata?: any } | string | Uint8Array)[], portfolios: Vec | (PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array)[], numberOfAssets: Option | null | Uint8Array | PolymeshPrimitivesSettlementAffirmationCount | { senderAssetCount?: any; receiverAssetCount?: any; offchainCount?: any } | string) => SubmittableExtrinsic, [u64, Vec, Vec, Option]>; - /** - * Allows additional venues to create instructions involving an asset. - * - * * `asset_id` - AssetId of the token in question. - * * `venues` - Array of venues that are allowed to create instructions for the token in question. - * - * # Permissions - * * Asset + * See [`Pallet::affirm_instruction_with_count`]. + **/ + affirmInstructionWithCount: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, portfolios: BTreeSet, numberOfAssets: Option | null | Uint8Array | PolymeshPrimitivesSettlementAffirmationCount | { senderAssetCount?: any; receiverAssetCount?: any; offchainCount?: any } | string) => SubmittableExtrinsic, [u64, BTreeSet, Option]>; + /** + * See [`Pallet::affirm_with_receipts`]. + **/ + affirmWithReceipts: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, receiptDetails: Vec | (PolymeshPrimitivesSettlementReceiptDetails | { uid?: any; instructionId?: any; legId?: any; signer?: any; signature?: any; metadata?: any } | string | Uint8Array)[], portfolios: BTreeSet) => SubmittableExtrinsic, [u64, Vec, BTreeSet]>; + /** + * See [`Pallet::affirm_with_receipts_with_count`]. + **/ + affirmWithReceiptsWithCount: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, receiptDetails: Vec | (PolymeshPrimitivesSettlementReceiptDetails | { uid?: any; instructionId?: any; legId?: any; signer?: any; signature?: any; metadata?: any } | string | Uint8Array)[], portfolios: BTreeSet, numberOfAssets: Option | null | Uint8Array | PolymeshPrimitivesSettlementAffirmationCount | { senderAssetCount?: any; receiverAssetCount?: any; offchainCount?: any } | string) => SubmittableExtrinsic, [u64, Vec, BTreeSet, Option]>; + /** + * See [`Pallet::allow_venues`]. **/ allowVenues: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, venues: Vec | (u64 | AnyNumber | Uint8Array)[]) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, Vec]>; /** - * Registers a new venue. - * - * * `details` - Extra details about a venue - * * `signers` - Array of signers that are allowed to sign receipts for this venue - * * `typ` - Type of venue being created + * See [`Pallet::create_venue`]. **/ createVenue: AugmentedSubmittable<(details: Bytes | string | Uint8Array, signers: Vec | (AccountId32 | string | Uint8Array)[], typ: PolymeshPrimitivesSettlementVenueType | 'Other' | 'Distribution' | 'Sto' | 'Exchange' | number | Uint8Array) => SubmittableExtrinsic, [Bytes, Vec, PolymeshPrimitivesSettlementVenueType]>; /** - * Revokes permission given to venues for creating instructions involving a particular asset. - * - * * `asset_id` - AssetId of the token in question. - * * `venues` - Array of venues that are no longer allowed to create instructions for the token in question. - * - * # Permissions - * * Asset + * See [`Pallet::disallow_venues`]. **/ disallowVenues: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, venues: Vec | (u64 | AnyNumber | Uint8Array)[]) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, Vec]>; /** - * Manually executes an instruction. - * - * # Arguments - * * `id`: The [`InstructionId`] of the instruction to be executed. - * * `portfolio`: One of the caller's [`PortfolioId`] which is also a counter patry in the instruction. - * If None, the caller must be the venue creator or a counter party in a [`Leg::OffChain`]. - * * `fungible_transfers`: The number of fungible legs in the instruction. - * * `nfts_transfers`: The number of nfts being transferred in the instruction. - * * `offchain_transfers`: The number of offchain legs in the instruction. - * * `weight_limit`: An optional maximum [`Weight`] value to be charged for executing the instruction. - * If the `weight_limit` is less than the required amount, the instruction will fail execution. - * - * Note: calling the rpc method `get_execute_instruction_info` returns an instance of [`ExecuteInstructionInfo`], which contains the count parameters. + * See [`Pallet::execute_manual_instruction`]. **/ executeManualInstruction: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, portfolio: Option | null | Uint8Array | PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string, fungibleTransfers: u32 | AnyNumber | Uint8Array, nftsTransfers: u32 | AnyNumber | Uint8Array, offchainTransfers: u32 | AnyNumber | Uint8Array, weightLimit: Option | null | Uint8Array | SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string) => SubmittableExtrinsic, [u64, Option, u32, u32, u32, Option]>; /** - * Root callable extrinsic, used as an internal call to execute a scheduled settlement instruction. + * See [`Pallet::execute_scheduled_instruction`]. **/ executeScheduledInstruction: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, weightLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u64, SpWeightsWeightV2Weight]>; /** - * Rejects an existing instruction. - * - * # Arguments - * * `id` - the [`InstructionId`] of the instruction being rejected. - * * `portfolio` - the [`PortfolioId`] that belongs to the instruction and is rejecting it. - * - * # Permissions - * * Portfolio + * See [`Pallet::lock_instruction`]. + **/ + lockInstruction: AugmentedSubmittable<(instId: u64 | AnyNumber | Uint8Array, weightLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u64, SpWeightsWeightV2Weight]>; + /** + * See [`Pallet::reject_instruction`]. **/ rejectInstruction: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, portfolio: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array) => SubmittableExtrinsic, [u64, PolymeshPrimitivesIdentityIdPortfolioId]>; /** - * Rejects an existing instruction - should only be called by mediators, otherwise it will fail. - * - * # Arguments - * * `instruction_id` - the [`InstructionId`] of the instruction being rejected. - * * `number_of_assets` - an optional [`AssetCount`] that will be used for a precise fee estimation before executing the extrinsic. - * - * Note: calling the rpc method `get_execute_instruction_info` returns an instance of [`ExecuteInstructionInfo`], which contain the asset count. + * See [`Pallet::reject_instruction_as_mediator`]. **/ rejectInstructionAsMediator: AugmentedSubmittable<(instructionId: u64 | AnyNumber | Uint8Array, numberOfAssets: Option | null | Uint8Array | PolymeshPrimitivesSettlementAssetCount | { fungible?: any; nonFungible?: any; offChain?: any } | string) => SubmittableExtrinsic, [u64, Option]>; /** - * Rejects an existing instruction. - * - * # Arguments - * * `id` - the [`InstructionId`] of the instruction being rejected. - * * `portfolio` - the [`PortfolioId`] that belongs to the instruction and is rejecting it. - * * `number_of_assets` - an optional [`AssetCount`] that will be used for a precise fee estimation before executing the extrinsic. - * - * Note: calling the rpc method `get_execute_instruction_info` returns an instance of [`ExecuteInstructionInfo`], which contain the asset count. - * - * # Permissions - * * Portfolio + * See [`Pallet::reject_instruction_with_count`]. **/ rejectInstructionWithCount: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, portfolio: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array, numberOfAssets: Option | null | Uint8Array | PolymeshPrimitivesSettlementAssetCount | { fungible?: any; nonFungible?: any; offChain?: any } | string) => SubmittableExtrinsic, [u64, PolymeshPrimitivesIdentityIdPortfolioId, Option]>; /** - * Enables or disabled venue filtering for a token. - * - * # Arguments - * * `asset_id` - AssetId of the token in question. - * * `enabled` - Boolean that decides if the filtering should be enabled. - * - * # Permissions - * * Asset + * See [`Pallet::set_venue_filtering`]. **/ setVenueFiltering: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, enabled: bool | boolean | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, bool]>; /** - * Edit a venue's details. - * - * * `id` specifies the ID of the venue to edit. - * * `details` specifies the updated venue details. + * See [`Pallet::update_venue_details`]. **/ updateVenueDetails: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, details: Bytes | string | Uint8Array) => SubmittableExtrinsic, [u64, Bytes]>; /** - * Edit a venue's signers. - * * `id` specifies the ID of the venue to edit. - * * `signers` specifies the signers to add/remove. - * * `add_signers` specifies the update type add/remove of venue where add is true and remove is false. + * See [`Pallet::update_venue_signers`]. **/ updateVenueSigners: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, signers: Vec | (AccountId32 | string | Uint8Array)[], addSigners: bool | boolean | Uint8Array) => SubmittableExtrinsic, [u64, Vec, bool]>; /** - * Edit a venue's type. - * - * * `id` specifies the ID of the venue to edit. - * * `type` specifies the new type of the venue. + * See [`Pallet::update_venue_type`]. **/ updateVenueType: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, typ: PolymeshPrimitivesSettlementVenueType | 'Other' | 'Distribution' | 'Sto' | 'Exchange' | number | Uint8Array) => SubmittableExtrinsic, [u64, PolymeshPrimitivesSettlementVenueType]>; /** - * Withdraw an affirmation for a given instruction. - * - * # Arguments - * * `id` - the [`InstructionId`] of the instruction getting an affirmation withdrawn. - * * `portfolios` - a vector of [`PortfolioId`] under the caller's control and intended for affirmation withdrawal. - * - * # Permissions - * * Portfolio + * See [`Pallet::withdraw_affirmation`]. **/ - withdrawAffirmation: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, portfolios: Vec | (PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [u64, Vec]>; + withdrawAffirmation: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, portfolios: BTreeSet) => SubmittableExtrinsic, [u64, BTreeSet]>; /** - * Removes the mediator's affirmation for the instruction - should only be called by mediators, otherwise it will fail. - * - * # Arguments - * * `origin`: The secondary key of the sender. - * * `instruction_id`: The [`InstructionId`] that will have the affirmation removed. + * See [`Pallet::withdraw_affirmation_as_mediator`]. **/ withdrawAffirmationAsMediator: AugmentedSubmittable<(instructionId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Withdraw an affirmation for a given instruction. - * - * # Arguments - * * `id` - the [`InstructionId`] of the instruction getting an affirmation withdrawn. - * * `portfolios` - a vector of [`PortfolioId`] under the caller's control and intended for affirmation withdrawal. - * * `number_of_assets` - an optional [`AffirmationCount`] that will be used for a precise fee estimation before executing the extrinsic. - * - * Note: calling the rpc method `get_affirmation_count` returns an instance of [`AffirmationCount`]. - * - * # Permissions - * * Portfolio + * See [`Pallet::withdraw_affirmation_with_count`]. **/ - withdrawAffirmationWithCount: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, portfolios: Vec | (PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array)[], numberOfAssets: Option | null | Uint8Array | PolymeshPrimitivesSettlementAffirmationCount | { senderAssetCount?: any; receiverAssetCount?: any; offchainCount?: any } | string) => SubmittableExtrinsic, [u64, Vec, Option]>; + withdrawAffirmationWithCount: AugmentedSubmittable<(id: u64 | AnyNumber | Uint8Array, portfolios: BTreeSet, numberOfAssets: Option | null | Uint8Array | PolymeshPrimitivesSettlementAffirmationCount | { senderAssetCount?: any; receiverAssetCount?: any; offchainCount?: any } | string) => SubmittableExtrinsic, [u64, BTreeSet, Option]>; /** * Generic tx **/ @@ -3097,394 +1211,107 @@ declare module '@polkadot/api-base/types/submittable' { }; staking: { /** - * Adds a permissioned identity and sets its preferences. - * - * The dispatch origin must be Root. + * See [`Pallet::bond`]. **/ - addPermissionedValidator: AugmentedSubmittable<(identity: PolymeshPrimitivesIdentityId | string | Uint8Array, intendedCount: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, Option]>; + bond: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array, payee: PalletStakingRewardDestination | { Staked: any } | { Stash: any } | { Controller: any } | { Account: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, PalletStakingRewardDestination]>; /** - * Take the origin account as a stash and lock up `value` of its balance. `controller` will - * be the account that controls it. - * - * `value` must be more than the `minimum_balance` specified by `T::Currency`. - * - * The dispatch origin for this call must be _Signed_ by the stash account. - * - * Emits `Bonded`. - * ## Complexity - * - Independent of the arguments. Moderate complexity. - * - O(1). - * - Three extra DB entries. - * - * NOTE: Two of the storage writes (`Self::bonded`, `Self::payee`) are _never_ cleaned - * unless the `origin` falls below _existential deposit_ and gets removed as dust. - **/ - bond: AugmentedSubmittable<(controller: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array, payee: PalletStakingRewardDestination | { Staked: any } | { Stash: any } | { Controller: any } | { Account: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact, PalletStakingRewardDestination]>; - /** - * Add some extra amount that have appeared in the stash `free_balance` into the balance up - * for staking. - * - * The dispatch origin for this call must be _Signed_ by the stash, not the controller. - * - * Use this if there are additional funds in your stash account that you wish to bond. - * Unlike [`bond`](Self::bond) or [`unbond`](Self::unbond) this function does not impose - * any limitation on the amount that can be added. - * - * Emits `Bonded`. - * - * ## Complexity - * - Independent of the arguments. Insignificant complexity. - * - O(1). + * See [`Pallet::bond_extra`]. **/ bondExtra: AugmentedSubmittable<(maxAdditional: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Cancel enactment of a deferred slash. - * - * Can be called by the `T::AdminOrigin`. - * - * Parameters: era and indices of the slashes for that era to kill. + * See [`Pallet::cancel_deferred_slash`]. **/ cancelDeferredSlash: AugmentedSubmittable<(era: u32 | AnyNumber | Uint8Array, slashIndices: Vec | (u32 | AnyNumber | Uint8Array)[]) => SubmittableExtrinsic, [u32, Vec]>; /** - * Switch slashing status on the basis of given `slashing_switch`. Can only be called by root. - **/ - changeSlashingAllowedFor: AugmentedSubmittable<(slashingSwitch: PalletStakingSlashingSwitch | 'Validator' | 'ValidatorAndNominator' | 'None' | number | Uint8Array) => SubmittableExtrinsic, [PalletStakingSlashingSwitch]>; - /** - * Declare no desire to either validate or nominate. - * - * Effects will be felt at the beginning of the next era. - * - * The dispatch origin for this call must be _Signed_ by the controller, not the stash. - * - * ## Complexity - * - Independent of the arguments. Insignificant complexity. - * - Contains one read. - * - Writes are limited to the `origin` account key. + * See [`Pallet::chill`]. **/ chill: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Governance council forcefully chills a validator. Effects will be felt at the beginning of the next era. - **/ - chillFromGovernance: AugmentedSubmittable<(identity: PolymeshPrimitivesIdentityId | string | Uint8Array, stashKeys: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, Vec]>; - /** - * Declare a `controller` to stop participating as either a validator or nominator. - * - * Effects will be felt at the beginning of the next era. - * - * The dispatch origin for this call must be _Signed_, but can be called by anyone. - * - * If the caller is the same as the controller being targeted, then no further checks are - * enforced, and this function behaves just like `chill`. - * - * If the caller is different than the controller being targeted, the following conditions - * must be met: - * - * * `controller` must belong to a nominator who has become non-decodable, - * - * Or: - * - * * A `ChillThreshold` must be set and checked which defines how close to the max - * nominators or validators we must reach before users can start chilling one-another. - * * A `MaxNominatorCount` and `MaxValidatorCount` must be set which is used to determine - * how close we are to the threshold. - * * A `MinNominatorBond` and `MinValidatorBond` must be set and checked, which determines - * if this is a person that should be chilled because they have not met the threshold - * bond required. - * - * This can be helpful if bond requirements are updated, and we need to remove old users - * who do not satisfy these requirements. + * See [`Pallet::chill_other`]. **/ chillOther: AugmentedSubmittable<(controller: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; /** - * Force a validator to have at least the minimum commission. This will not affect a - * validator who already has a commission greater than or equal to the minimum. Any account - * can call this. + * See [`Pallet::force_apply_min_commission`]. **/ forceApplyMinCommission: AugmentedSubmittable<(validatorStash: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; /** - * Force there to be a new era at the end of the next session. After this, it will be - * reset to normal (non-forced) behaviour. - * - * The dispatch origin must be Root. - * - * # Warning - * - * The election process starts multiple blocks before the end of the era. - * If this is called just before a new era is triggered, the election process may not - * have enough blocks to get a result. - * - * ## Complexity - * - No arguments. - * - Weight: O(1) + * See [`Pallet::force_new_era`]. **/ forceNewEra: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Force there to be a new era at the end of sessions indefinitely. - * - * The dispatch origin must be Root. - * - * # Warning - * - * The election process starts multiple blocks before the end of the era. - * If this is called just before a new era is triggered, the election process may not - * have enough blocks to get a result. + * See [`Pallet::force_new_era_always`]. **/ forceNewEraAlways: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Force there to be no new eras indefinitely. - * - * The dispatch origin must be Root. - * - * # Warning - * - * The election process starts multiple blocks before the end of the era. - * Thus the election process may be ongoing when this is called. In this case the - * election will continue until the next era is triggered. - * - * ## Complexity - * - No arguments. - * - Weight: O(1) + * See [`Pallet::force_no_eras`]. **/ forceNoEras: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Force a current staker to become completely unstaked, immediately. - * - * The dispatch origin must be Root. + * See [`Pallet::force_unstake`]. **/ forceUnstake: AugmentedSubmittable<(stash: AccountId32 | string | Uint8Array, numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; /** - * Increments the ideal number of validators upto maximum of - * `ElectionProviderBase::MaxWinners`. - * - * The dispatch origin must be Root. - * - * ## Complexity - * Same as [`Self::set_validator_count`]. + * See [`Pallet::increase_validator_count`]. **/ increaseValidatorCount: AugmentedSubmittable<(additional: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Remove the given nominations from the calling validator. - * - * Effects will be felt at the beginning of the next era. - * - * The dispatch origin for this call must be _Signed_ by the controller, not the stash. - * - * - `who`: A list of nominator stash accounts who are nominating this validator which - * should no longer be nominating this validator. - * - * Note: Making this call only makes sense if you first set the validator preferences to - * block any further nominations. + * See [`Pallet::kick`]. **/ kick: AugmentedSubmittable<(who: Vec | (MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Declare the desire to nominate `targets` for the origin controller. - * - * Effects will be felt at the beginning of the next era. - * - * The dispatch origin for this call must be _Signed_ by the controller, not the stash. - * - * ## Complexity - * - The transaction's complexity is proportional to the size of `targets` (N) - * which is capped at CompactAssignments::LIMIT (T::MaxNominations). - * - Both the reads and writes follow a similar pattern. + * See [`Pallet::nominate`]. **/ nominate: AugmentedSubmittable<(targets: Vec | (MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Pay out all the stakers behind a single validator for a single era. - * - * - `validator_stash` is the stash account of the validator. Their nominators, up to - * `T::MaxNominatorRewardedPerValidator`, will also receive their rewards. - * - `era` may be any era between `[current_era - history_depth; current_era]`. - * - * The origin of this call must be _Signed_. Any account can call this function, even if - * it is not one of the stakers. - * - * ## Complexity - * - At most O(MaxNominatorRewardedPerValidator). + * See [`Pallet::payout_stakers`]. **/ payoutStakers: AugmentedSubmittable<(validatorStash: AccountId32 | string | Uint8Array, era: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; - payoutStakersBySystem: AugmentedSubmittable<(validatorStash: AccountId32 | string | Uint8Array, era: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; /** - * Remove all data structures concerning a staker/stash once it is at a state where it can - * be considered `dust` in the staking system. The requirements are: - * - * 1. the `total_balance` of the stash is below existential deposit. - * 2. or, the `ledger.total` of the stash is below existential deposit. - * - * The former can happen in cases like a slash; the latter when a fully unbonded account - * is still receiving staking rewards in `RewardDestination::Staked`. - * - * It can be called by anyone, as long as `stash` meets the above requirements. - * - * Refunds the transaction fees upon successful execution. + * See [`Pallet::reap_stash`]. **/ reapStash: AugmentedSubmittable<(stash: AccountId32 | string | Uint8Array, numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; /** - * Rebond a portion of the stash scheduled to be unlocked. - * - * The dispatch origin must be signed by the controller. - * - * ## Complexity - * - Time complexity: O(L), where L is unlocking chunks - * - Bounded by `MaxUnlockingChunks`. + * See [`Pallet::rebond`]. **/ rebond: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Remove an identity from the pool of (wannabe) validator identities. Effects are known in the next session. - * - * The dispatch origin must be Root. - * - * # Arguments - * * origin Required origin for removing a potential validator. - * * identity Validator's IdentityId. - **/ - removePermissionedValidator: AugmentedSubmittable<(identity: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; - /** - * Scale up the ideal number of validators by a factor upto maximum of - * `ElectionProviderBase::MaxWinners`. - * - * The dispatch origin must be Root. - * - * ## Complexity - * Same as [`Self::set_validator_count`]. + * See [`Pallet::scale_validator_count`]. **/ scaleValidatorCount: AugmentedSubmittable<(factor: Percent | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Percent]>; /** - * Changes commission rate which applies to all validators. Only Governance - * committee is allowed to change this value. - * - * # Arguments - * * `new_cap` the new commission cap. - **/ - setCommissionCap: AugmentedSubmittable<(newCap: Perbill | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Perbill]>; - /** - * (Re-)set the controller of a stash. - * - * Effects will be felt instantly (as soon as this function is completed successfully). - * - * The dispatch origin for this call must be _Signed_ by the stash, not the controller. - * - * ## Complexity - * O(1) - * - Independent of the arguments. Insignificant complexity. - * - Contains a limited number of reads. - * - Writes are limited to the `origin` account key. + * See [`Pallet::set_controller`]. **/ - setController: AugmentedSubmittable<(controller: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; + setController: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Set the validators who cannot be slashed (if any). - * - * The dispatch origin must be Root. + * See [`Pallet::set_invulnerables`]. **/ setInvulnerables: AugmentedSubmittable<(invulnerables: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Sets the minimum amount of commission that each validators must maintain. - * - * This call has lower privilege requirements than `set_staking_config` and can be called - * by the `T::AdminOrigin`. Root can always call this. + * See [`Pallet::set_min_commission`]. **/ setMinCommission: AugmentedSubmittable<(updated: Perbill | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Perbill]>; /** - * (Re-)set the payment target for a controller. - * - * Effects will be felt instantly (as soon as this function is completed successfully). - * - * The dispatch origin for this call must be _Signed_ by the controller, not the stash. - * - * ## Complexity - * - O(1) - * - Independent of the arguments. Insignificant complexity. - * - Contains a limited number of reads. - * - Writes are limited to the `origin` account key. - * --------- + * See [`Pallet::set_payee`]. **/ setPayee: AugmentedSubmittable<(payee: PalletStakingRewardDestination | { Staked: any } | { Stash: any } | { Controller: any } | { Account: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletStakingRewardDestination]>; /** - * Update the various staking configurations . - * - * * `min_nominator_bond`: The minimum active bond needed to be a nominator. - * * `min_validator_bond`: The minimum active bond needed to be a validator. - * * `max_nominator_count`: The max number of users who can be a nominator at once. When - * set to `None`, no limit is enforced. - * * `max_validator_count`: The max number of users who can be a validator at once. When - * set to `None`, no limit is enforced. - * * `chill_threshold`: The ratio of `max_nominator_count` or `max_validator_count` which - * should be filled in order for the `chill_other` transaction to work. - * * `min_commission`: The minimum amount of commission that each validators must maintain. - * This is checked only upon calling `validate`. Existing validators are not affected. - * - * RuntimeOrigin must be Root to call this function. - * - * NOTE: Existing nominators and validators will not be affected by this update. - * to kick people under the new limits, `chill_other` should be called. + * See [`Pallet::set_staking_configs`]. **/ setStakingConfigs: AugmentedSubmittable<(minNominatorBond: PalletStakingPalletConfigOpU128 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, minValidatorBond: PalletStakingPalletConfigOpU128 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, maxNominatorCount: PalletStakingPalletConfigOpU32 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, maxValidatorCount: PalletStakingPalletConfigOpU32 | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, chillThreshold: PalletStakingPalletConfigOpPercent | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array, minCommission: PalletStakingPalletConfigOpPerbill | { Noop: any } | { Set: any } | { Remove: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU32, PalletStakingPalletConfigOpU32, PalletStakingPalletConfigOpPercent, PalletStakingPalletConfigOpPerbill]>; /** - * Sets the ideal number of validators. - * - * The dispatch origin must be Root. - * - * ## Complexity - * O(1) + * See [`Pallet::set_validator_count`]. **/ setValidatorCount: AugmentedSubmittable<(updated: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Schedule a portion of the stash to be unlocked ready for transfer out after the bond - * period ends. If this leaves an amount actively bonded less than - * T::Currency::minimum_balance(), then it is increased to the full amount. - * - * The dispatch origin for this call must be _Signed_ by the controller, not the stash. - * - * Once the unlock period is done, you can call `withdraw_unbonded` to actually move - * the funds out of management ready for transfer. - * - * No more than a limited number of unlocking chunks (see `MaxUnlockingChunks`) - * can co-exists at the same time. If there are no unlocking chunks slots available - * [`Call::withdraw_unbonded`] is called to remove some of the chunks (if possible). - * - * If a user encounters the `InsufficientBond` error when calling this extrinsic, - * they should call `chill` first in order to free up their bonded funds. - * - * Emits `Unbonded`. - * - * See also [`Call::withdraw_unbonded`]. + * See [`Pallet::unbond`]. **/ unbond: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Sets the intended count to `new_intended_count` for the given `identity`. - **/ - updatePermissionedValidatorIntendedCount: AugmentedSubmittable<(identity: PolymeshPrimitivesIdentityId | string | Uint8Array, newIntendedCount: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, u32]>; - /** - * Declare the desire to validate for the origin controller. - * - * Effects will be felt at the beginning of the next era. - * - * The dispatch origin for this call must be _Signed_ by the controller, not the stash. + * See [`Pallet::validate`]. **/ validate: AugmentedSubmittable<(prefs: PalletStakingValidatorPrefs | { commission?: any; blocked?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletStakingValidatorPrefs]>; /** - * Validate the nominators CDD expiry time. - * - * If an account from a given set of address is nominating then check the CDD expiry time - * of it and if it is expired then the account should be unbonded and removed from the - * nominating process. - **/ - validateCddExpiryNominators: AugmentedSubmittable<(targets: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - /** - * Remove any unlocked chunks from the `unlocking` queue from our management. - * - * This essentially frees up that balance to be used by the stash account to do - * whatever it wants. - * - * The dispatch origin for this call must be _Signed_ by the controller. - * - * Emits `Withdrawn`. - * - * See also [`Call::unbond`]. - * - * ## Complexity - * O(S) where S is the number of slashing spans to remove - * NOTE: Weight annotation is the kill scenario, we refund otherwise. + * See [`Pallet::withdraw_unbonded`]. **/ withdrawUnbonded: AugmentedSubmittable<(numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** @@ -3494,74 +1321,19 @@ declare module '@polkadot/api-base/types/submittable' { }; statistics: { /** - * Allow a trusted issuer to init/resync asset/company stats. - * - * # Arguments - * - `origin` - a signer that has permissions to act as an agent of `asset_id`. - * - `asset_id` - the [`AssetId`] to change the active stats on. - * - `stat_type` - stat type to update. - * - `values` - Updated values for `stat_type`. - * - * # Errors - * - `StatTypeMissing` - `stat_type` is not enabled for the `asset_id`. - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - * # Permissions - * - Agent - * - Asset + * See [`Pallet::batch_update_asset_stats`]. **/ batchUpdateAssetStats: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, statType: PolymeshPrimitivesStatisticsStatType | { operationType?: any; claimIssuer?: any } | string | Uint8Array, values: BTreeSet) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesStatisticsStatType, BTreeSet]>; /** - * Set the active asset stat_types. - * - * # Arguments - * - `origin` - a signer that has permissions to act as an agent of `asset_id`. - * - `asset_id` - the [`AssetId`] to change the active stats on. - * - `stat_types` - the new stat types to replace any existing types. - * - * # Errors - * - `StatTypeLimitReached` - too many stat types enabled for the `asset_id`. - * - `CannotRemoveStatTypeInUse` - can not remove a stat type that is in use by transfer conditions. - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - * # Permissions - * - Agent - * - Asset + * See [`Pallet::set_active_asset_stats`]. **/ setActiveAssetStats: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, statTypes: BTreeSet) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, BTreeSet]>; /** - * Set asset transfer compliance rules. - * - * # Arguments - * - `origin` - a signer that has permissions to act as an agent of `asset_id`. - * - `asset_id` - the [`AssetId`] to change the active stats on. - * - `transfer_conditions` - the new transfer condition to replace any existing conditions. - * - * # Errors - * - `TransferConditionLimitReached` - too many transfer condititon enabled for `asset_id`. - * - `StatTypeMissing` - a transfer condition requires a stat type that is not enabled for the `asset_id`. - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset_id`. - * - * # Permissions - * - Agent - * - Asset + * See [`Pallet::set_asset_transfer_compliance`]. **/ setAssetTransferCompliance: AugmentedSubmittable<(assetId: PolymeshPrimitivesAssetAssetId | string | Uint8Array, transferConditions: BTreeSet) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, BTreeSet]>; /** - * Set/unset entities exempt from an asset's transfer compliance rules. - * - * # Arguments - * - `origin` - a signer that has permissions to act as an agent of `exempt_key.asset`. - * - `is_exempt` - enable/disable exemption for `entities`. - * - `exempt_key` - the asset and stat type to exempt the `entities` from. - * - `entities` - the entities to set/unset the exemption for. - * - * # Errors - * - `UnauthorizedAgent` if `origin` is not agent-permissioned for `asset`. - * - * # Permissions - * - Agent - * - Asset + * See [`Pallet::set_entities_exempt`]. **/ setEntitiesExempt: AugmentedSubmittable<(isExempt: bool | boolean | Uint8Array, exemptKey: PolymeshPrimitivesTransferComplianceTransferConditionExemptKey | { assetId?: any; op?: any; claimType?: any } | string | Uint8Array, entities: BTreeSet) => SubmittableExtrinsic, [bool, PolymeshPrimitivesTransferComplianceTransferConditionExemptKey, BTreeSet]>; /** @@ -3571,81 +1343,33 @@ declare module '@polkadot/api-base/types/submittable' { }; sto: { /** - * Create a new fundraiser. - * - * * `offering_portfolio` - Portfolio containing the `offering_asset`. - * * `offering_asset` - Asset being offered. - * * `raising_portfolio` - Portfolio containing the `raising_asset`. - * * `raising_asset` - Asset being exchanged for `offering_asset` on investment. - * * `tiers` - Price tiers to charge investors on investment. - * * `venue_id` - Venue to handle settlement. - * * `start` - Fundraiser start time, if `None` the fundraiser will start immediately. - * * `end` - Fundraiser end time, if `None` the fundraiser will never expire. - * * `minimum_investment` - Minimum amount of `raising_asset` that an investor needs to spend to invest in this raise. - * * `fundraiser_name` - Fundraiser name, only used in the UIs. - * - * # Permissions - * * Asset - * * Portfolio + * See [`Pallet::create_fundraiser`]. **/ createFundraiser: AugmentedSubmittable<(offeringPortfolio: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array, offeringAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, raisingPortfolio: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array, raisingAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, tiers: Vec | (PalletStoPriceTier | { total?: any; price?: any } | string | Uint8Array)[], venueId: u64 | AnyNumber | Uint8Array, start: Option | null | Uint8Array | u64 | AnyNumber, end: Option | null | Uint8Array | u64 | AnyNumber, minimumInvestment: u128 | AnyNumber | Uint8Array, fundraiserName: Bytes | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesAssetAssetId, Vec, u64, Option, Option, u128, Bytes]>; /** - * Freeze a fundraiser. - * - * * `offering_asset` - Asset to freeze. - * * `id` - ID of the fundraiser to freeze. - * - * # Permissions - * * Asset - **/ - freezeFundraiser: AugmentedSubmittable<(offeringAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, id: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64]>; - /** - * Invest in a fundraiser. - * - * * `investment_portfolio` - Portfolio that `offering_asset` will be deposited in. - * * `funding_portfolio` - Portfolio that will fund the investment. - * * `offering_asset` - Asset to invest in. - * * `id` - ID of the fundraiser to invest in. - * * `purchase_amount` - Amount of `offering_asset` to purchase. - * * `max_price` - Maximum price to pay per unit of `offering_asset`, If `None`there are no constraints on price. - * * `receipt` - Off-chain receipt to use instead of on-chain balance in `funding_portfolio`. - * - * # Permissions - * * Portfolio - **/ - invest: AugmentedSubmittable<(investmentPortfolio: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array, fundingPortfolio: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array, offeringAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, id: u64 | AnyNumber | Uint8Array, purchaseAmount: u128 | AnyNumber | Uint8Array, maxPrice: Option | null | Uint8Array | u128 | AnyNumber, receipt: Option | null | Uint8Array | PolymeshPrimitivesSettlementReceiptDetails | { uid?: any; instructionId?: any; legId?: any; signer?: any; signature?: any; metadata?: any } | string) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesAssetAssetId, u64, u128, Option, Option]>; - /** - * Modify the time window a fundraiser is active - * - * * `offering_asset` - Asset to modify. - * * `id` - ID of the fundraiser to modify. - * * `start` - New start of the fundraiser. - * * `end` - New end of the fundraiser to modify. - * - * # Permissions - * * Asset - **/ - modifyFundraiserWindow: AugmentedSubmittable<(offeringAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, id: u64 | AnyNumber | Uint8Array, start: u64 | AnyNumber | Uint8Array, end: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64, u64, Option]>; - /** - * Stop a fundraiser. - * - * * `offering_asset` - Asset to stop. - * * `id` - ID of the fundraiser to stop. - * - * # Permissions - * * Asset - **/ - stop: AugmentedSubmittable<(offeringAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, id: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64]>; - /** - * Unfreeze a fundraiser. - * - * * `offering_asset` - Asset to unfreeze. - * * `id` - ID of the fundraiser to unfreeze. - * - * # Permissions - * * Asset - **/ - unfreezeFundraiser: AugmentedSubmittable<(offeringAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, id: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64]>; + * See [`Pallet::enable_offchain_funding`]. + **/ + enableOffchainFunding: AugmentedSubmittable<(offeringAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, fundraiserId: u64 | AnyNumber | Uint8Array, ticker: PolymeshPrimitivesTicker | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64, PolymeshPrimitivesTicker]>; + /** + * See [`Pallet::freeze_fundraiser`]. + **/ + freezeFundraiser: AugmentedSubmittable<(offeringAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, fundraiserId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64]>; + /** + * See [`Pallet::invest`]. + **/ + invest: AugmentedSubmittable<(offeringAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, fundraiserId: u64 | AnyNumber | Uint8Array, investmentPortfolio: PolymeshPrimitivesIdentityIdPortfolioId | { did?: any; kind?: any } | string | Uint8Array, funding: PalletStoFundingMethod | { OnChain: any } | { OffChain: any } | string | Uint8Array, purchaseAmount: u128 | AnyNumber | Uint8Array, maxPrice: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64, PolymeshPrimitivesIdentityIdPortfolioId, PalletStoFundingMethod, u128, Option]>; + /** + * See [`Pallet::modify_fundraiser_window`]. + **/ + modifyFundraiserWindow: AugmentedSubmittable<(offeringAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, fundraiserId: u64 | AnyNumber | Uint8Array, start: u64 | AnyNumber | Uint8Array, end: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64, u64, Option]>; + /** + * See [`Pallet::stop`]. + **/ + stop: AugmentedSubmittable<(offeringAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, fundraiserId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64]>; + /** + * See [`Pallet::unfreeze_fundraiser`]. + **/ + unfreezeFundraiser: AugmentedSubmittable<(offeringAsset: PolymeshPrimitivesAssetAssetId | string | Uint8Array, fundraiserId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesAssetAssetId, u64]>; /** * Generic tx **/ @@ -3653,55 +1377,19 @@ declare module '@polkadot/api-base/types/submittable' { }; sudo: { /** - * Authenticates the current sudo key and sets the given AccountId (`new`) as the new sudo key. - * - * The dispatch origin for this call must be _Signed_. - * - * # - * - O(1). - * - Limited storage reads. - * - One DB change. - * # + * See [`Pallet::set_key`]. **/ setKey: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** - * Authenticates the sudo key and dispatches a function call with `Root` origin. - * - * The dispatch origin for this call must be _Signed_. - * - * # - * - O(1). - * - Limited storage reads. - * - One DB write (event). - * - Weight of derivative `call` execution + 10,000. - * # + * See [`Pallet::sudo`]. **/ sudo: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [Call]>; /** - * Authenticates the sudo key and dispatches a function call with `Signed` origin from - * a given account. - * - * The dispatch origin for this call must be _Signed_. - * - * # - * - O(1). - * - Limited storage reads. - * - One DB write (event). - * - Weight of derivative `call` execution + 10,000. - * # + * See [`Pallet::sudo_as`]. **/ sudoAs: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Call]>; /** - * Authenticates the sudo key and dispatches a function call with `Root` origin. - * This function does not check the weight of the call, and instead allows the - * Sudo user to specify the weight of the call. - * - * The dispatch origin for this call must be _Signed_. - * - * # - * - O(1). - * - The weight of this call is defined by the caller. - * # + * See [`Pallet::sudo_unchecked_weight`]. **/ sudoUncheckedWeight: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array, weight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [Call, SpWeightsWeightV2Weight]>; /** @@ -3711,47 +1399,35 @@ declare module '@polkadot/api-base/types/submittable' { }; system: { /** - * Kill all storage items with a key that starts with the given prefix. - * - * **NOTE:** We rely on the Root origin to provide us the number of subkeys under - * the prefix we are removing to accurately calculate the weight of this function. + * See [`Pallet::kill_prefix`]. **/ killPrefix: AugmentedSubmittable<(prefix: Bytes | string | Uint8Array, subkeys: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Bytes, u32]>; /** - * Kill some items from storage. + * See [`Pallet::kill_storage`]. **/ killStorage: AugmentedSubmittable<(keys: Vec | (Bytes | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Make some on-chain remark. - * - * ## Complexity - * - `O(1)` + * See [`Pallet::remark`]. **/ remark: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Make some on-chain remark and emit event. + * See [`Pallet::remark_with_event`]. **/ remarkWithEvent: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Set the new runtime code. - * - * ## Complexity - * - `O(C + S)` where `C` length of `code` and `S` complexity of `can_set_code` + * See [`Pallet::set_code`]. **/ setCode: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Set the new runtime code without doing any checks of the given `code`. - * - * ## Complexity - * - `O(C)` where `C` length of `code` + * See [`Pallet::set_code_without_checks`]. **/ setCodeWithoutChecks: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Set the number of pages in the WebAssembly environment's heap. + * See [`Pallet::set_heap_pages`]. **/ setHeapPages: AugmentedSubmittable<(pages: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Set some items of storage. + * See [`Pallet::set_storage`]. **/ setStorage: AugmentedSubmittable<(items: Vec> | ([Bytes | string | Uint8Array, Bytes | string | Uint8Array])[]) => SubmittableExtrinsic, [Vec>]>; /** @@ -3761,62 +1437,23 @@ declare module '@polkadot/api-base/types/submittable' { }; technicalCommittee: { /** - * Changes the time after which a proposal expires. - * - * # Arguments - * * `expiry` - The new expiry time. + * See [`Pallet::set_expires_after`]. **/ - setExpiresAfter: AugmentedSubmittable<(expiry: PolymeshCommonUtilitiesMaybeBlock | { Some: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshCommonUtilitiesMaybeBlock]>; + setExpiresAfter: AugmentedSubmittable<(expiry: PolymeshPrimitivesMaybeBlock | { Some: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesMaybeBlock]>; /** - * Changes the release coordinator. - * - * # Arguments - * * `id` - The DID of the new release coordinator. - * - * # Errors - * * `NotAMember`, If the new coordinator `id` is not part of the committee. + * See [`Pallet::set_release_coordinator`]. **/ setReleaseCoordinator: AugmentedSubmittable<(id: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Change the vote threshold the determines the winning proposal. - * For e.g., for a simple majority use (1, 2) which represents the in-equation ">= 1/2". - * - * # Arguments - * * `n` - Numerator of the fraction representing vote threshold. - * * `d` - Denominator of the fraction representing vote threshold. + * See [`Pallet::set_vote_threshold`]. **/ setVoteThreshold: AugmentedSubmittable<(n: u32 | AnyNumber | Uint8Array, d: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32]>; /** - * Votes `approve`ingly (or not, if `false`) - * on an existing `proposal` given by its hash, `index`. - * - * # Arguments - * * `proposal` - A hash of the proposal to be voted on. - * * `index` - The proposal index. - * * `approve` - If `true` than this is a `for` vote, and `against` otherwise. - * - * # Errors - * * `NotAMember`, if the `origin` is not a member of this committee. + * See [`Pallet::vote`]. **/ vote: AugmentedSubmittable<(proposal: H256 | string | Uint8Array, index: u32 | AnyNumber | Uint8Array, approve: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, u32, bool]>; /** - * Proposes to the committee that `call` should be executed in its name. - * Alternatively, if the hash of `call` has already been recorded, i.e., already proposed, - * then this call counts as a vote, i.e., as if `vote_by_hash` was called. - * - * # Weight - * - * The weight of this dispatchable is that of `call` as well as the complexity - * for recording the vote itself. - * - * # Arguments - * * `approve` - is this an approving vote? - * If the proposal doesn't exist, passing `false` will result in error `FirstVoteReject`. - * * `call` - the call to propose for execution. - * - * # Errors - * * `FirstVoteReject`, if `call` hasn't been proposed and `approve == false`. - * * `NotAMember`, if the `origin` is not a member of this committee. + * See [`Pallet::vote_or_propose`]. **/ voteOrPropose: AugmentedSubmittable<(approve: bool | boolean | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [bool, Call]>; /** @@ -3826,83 +1463,31 @@ declare module '@polkadot/api-base/types/submittable' { }; technicalCommitteeMembership: { /** - * Allows the calling member to *unilaterally quit* without this being subject to a GC - * vote. - * - * # Arguments - * * `origin` - Member of committee who wants to quit. - * - * # Error - * - * * Only primary key can abdicate. - * * Last member of a group cannot abdicate. + * See [`Pallet::abdicate_membership`]. **/ abdicateMembership: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Adds a member `who` to the group. May only be called from `AddOrigin` or root. - * - * # Arguments - * * `origin` - Origin representing `AddOrigin` or root - * * `who` - IdentityId to be added to the group. + * See [`Pallet::add_member`]. **/ addMember: AugmentedSubmittable<(who: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Disables a member at specific moment. - * - * Please note that if member is already revoked (a "valid member"), its revocation - * time-stamp will be updated. - * - * Any disabled member should NOT allow to act like an active member of the group. For - * instance, a disabled CDD member should NOT be able to generate a CDD claim. However any - * generated claim issued before `at` would be considered as a valid one. - * - * If you want to invalidate any generated claim, you should use `Self::remove_member`. - * - * # Arguments - * * `at` - Revocation time-stamp. - * * `who` - Target member of the group. - * * `expiry` - Time-stamp when `who` is removed from CDD. As soon as it is expired, the - * generated claims will be "invalid" as `who` is not considered a member of the group. + * See [`Pallet::disable_member`]. **/ disableMember: AugmentedSubmittable<(who: PolymeshPrimitivesIdentityId | string | Uint8Array, expiry: Option | null | Uint8Array | u64 | AnyNumber, at: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, Option, Option]>; /** - * Removes a member `who` from the set. May only be called from `RemoveOrigin` or root. - * - * Any claim previously generated by this member is not valid as a group claim. For - * instance, if a CDD member group generated a claim for a target identity and then it is - * removed, that claim will be invalid. In case you want to keep the validity of generated - * claims, you have to use `Self::disable_member` function - * - * # Arguments - * * `origin` - Origin representing `RemoveOrigin` or root - * * `who` - IdentityId to be removed from the group. + * See [`Pallet::remove_member`]. **/ removeMember: AugmentedSubmittable<(who: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Changes the membership to a new set, disregarding the existing membership. - * May only be called from `ResetOrigin` or root. - * - * # Arguments - * * `origin` - Origin representing `ResetOrigin` or root - * * `members` - New set of identities + * See [`Pallet::reset_members`]. **/ resetMembers: AugmentedSubmittable<(members: Vec | (PolymeshPrimitivesIdentityId | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Change this group's limit for how many concurrent active members they may be. - * - * # Arguments - * * `limit` - the number of active members there may be concurrently. + * See [`Pallet::set_active_members_limit`]. **/ setActiveMembersLimit: AugmentedSubmittable<(limit: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Swaps out one member `remove` for another member `add`. - * - * May only be called from `SwapOrigin` or root. - * - * # Arguments - * * `origin` - Origin representing `SwapOrigin` or root - * * `remove` - IdentityId to be removed from the group. - * * `add` - IdentityId to be added in place of `remove`. + * See [`Pallet::swap_member`]. **/ swapMember: AugmentedSubmittable<(remove: PolymeshPrimitivesIdentityId | string | Uint8Array, add: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; /** @@ -3910,62 +1495,21 @@ declare module '@polkadot/api-base/types/submittable' { **/ [key: string]: SubmittableExtrinsicFunction; }; - testUtils: { - /** - * Emits an event with caller's identity and CDD status. - **/ - getCddOf: AugmentedSubmittable<(of: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; - /** - * Emits an event with caller's identity. - **/ - getMyDid: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * Registers a new Identity for the `target_account` and issues a CDD claim to it. - * - * # Failure - * - `origin` has to be an active CDD provider. Inactive CDD providers cannot add new - * claims. - * - `target_account` (primary key of the new Identity) can be linked to just one and only - * one identity. - **/ - mockCddRegisterDid: AugmentedSubmittable<(targetAccount: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; + timestamp: { /** - * Generates a new `IdentityID` for the caller, and issues a self-generated CDD claim. - * - * The caller account will be the primary key of that identity. - * For each account of `secondary_keys`, a new `JoinIdentity` authorization is created, so - * each of them will need to accept it before become part of this new `IdentityID`. - * - * # Errors - * - `AlreadyLinked` if the caller account or if any of the given `secondary_keys` has already linked to an `IdentityID` - * - `SecondaryKeysContainPrimaryKey` if `secondary_keys` contains the caller account. - * - `DidAlreadyExists` if auto-generated DID already exists. + * See [`Pallet::set`]. **/ - registerDid: AugmentedSubmittable<(secondaryKeys: Vec | (PolymeshPrimitivesSecondaryKey | { key?: any; permissions?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + set: AugmentedSubmittable<(now: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** * Generic tx **/ [key: string]: SubmittableExtrinsicFunction; }; - timestamp: { + transactionPayment: { /** - * Set the current time. - * - * This call should be invoked exactly once per block. It will panic at the finalization - * phase, if this call hasn't been invoked by that time. - * - * The timestamp should be greater than the previous one by the amount specified by - * `MinimumPeriod`. - * - * The dispatch origin for this call must be `Inherent`. - * - * ## Complexity - * - `O(1)` (Note that implementations of `OnTimestampSet` must also be `O(1)`) - * - 1 storage read and 1 storage mutation (codec `O(1)`). (because of `DidUpdate::take` in - * `on_finalize`) - * - 1 event handler `on_timestamp_set`. Must be `O(1)`. + * See [`Pallet::set_disable_fees`]. **/ - set: AugmentedSubmittable<(now: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + setDisableFees: AugmentedSubmittable<(value: bool | boolean | Uint8Array) => SubmittableExtrinsic, [bool]>; /** * Generic tx **/ @@ -3973,19 +1517,11 @@ declare module '@polkadot/api-base/types/submittable' { }; treasury: { /** - * It transfers balances from treasury to each of beneficiaries and the specific amount - * for each of them. - * - * # Error - * * `BadOrigin`: Only root can execute transaction. - * * `InsufficientBalance`: If treasury balances is not enough to cover all beneficiaries. - * * `InvalidIdentity`: If one of the beneficiaries has an invalid identity. + * See [`Pallet::disbursement`]. **/ disbursement: AugmentedSubmittable<(beneficiaries: Vec | (PolymeshPrimitivesBeneficiary | { id?: any; amount?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * It transfers the specific `amount` from `origin` account into treasury. - * - * Only accounts which are associated to an identity can make a donation to treasury. + * See [`Pallet::reimbursement`]. **/ reimbursement: AugmentedSubmittable<(amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; /** @@ -3995,62 +1531,23 @@ declare module '@polkadot/api-base/types/submittable' { }; upgradeCommittee: { /** - * Changes the time after which a proposal expires. - * - * # Arguments - * * `expiry` - The new expiry time. + * See [`Pallet::set_expires_after`]. **/ - setExpiresAfter: AugmentedSubmittable<(expiry: PolymeshCommonUtilitiesMaybeBlock | { Some: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshCommonUtilitiesMaybeBlock]>; + setExpiresAfter: AugmentedSubmittable<(expiry: PolymeshPrimitivesMaybeBlock | { Some: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesMaybeBlock]>; /** - * Changes the release coordinator. - * - * # Arguments - * * `id` - The DID of the new release coordinator. - * - * # Errors - * * `NotAMember`, If the new coordinator `id` is not part of the committee. + * See [`Pallet::set_release_coordinator`]. **/ setReleaseCoordinator: AugmentedSubmittable<(id: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Change the vote threshold the determines the winning proposal. - * For e.g., for a simple majority use (1, 2) which represents the in-equation ">= 1/2". - * - * # Arguments - * * `n` - Numerator of the fraction representing vote threshold. - * * `d` - Denominator of the fraction representing vote threshold. + * See [`Pallet::set_vote_threshold`]. **/ setVoteThreshold: AugmentedSubmittable<(n: u32 | AnyNumber | Uint8Array, d: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32]>; /** - * Votes `approve`ingly (or not, if `false`) - * on an existing `proposal` given by its hash, `index`. - * - * # Arguments - * * `proposal` - A hash of the proposal to be voted on. - * * `index` - The proposal index. - * * `approve` - If `true` than this is a `for` vote, and `against` otherwise. - * - * # Errors - * * `NotAMember`, if the `origin` is not a member of this committee. + * See [`Pallet::vote`]. **/ vote: AugmentedSubmittable<(proposal: H256 | string | Uint8Array, index: u32 | AnyNumber | Uint8Array, approve: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, u32, bool]>; /** - * Proposes to the committee that `call` should be executed in its name. - * Alternatively, if the hash of `call` has already been recorded, i.e., already proposed, - * then this call counts as a vote, i.e., as if `vote_by_hash` was called. - * - * # Weight - * - * The weight of this dispatchable is that of `call` as well as the complexity - * for recording the vote itself. - * - * # Arguments - * * `approve` - is this an approving vote? - * If the proposal doesn't exist, passing `false` will result in error `FirstVoteReject`. - * * `call` - the call to propose for execution. - * - * # Errors - * * `FirstVoteReject`, if `call` hasn't been proposed and `approve == false`. - * * `NotAMember`, if the `origin` is not a member of this committee. + * See [`Pallet::vote_or_propose`]. **/ voteOrPropose: AugmentedSubmittable<(approve: bool | boolean | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [bool, Call]>; /** @@ -4060,83 +1557,31 @@ declare module '@polkadot/api-base/types/submittable' { }; upgradeCommitteeMembership: { /** - * Allows the calling member to *unilaterally quit* without this being subject to a GC - * vote. - * - * # Arguments - * * `origin` - Member of committee who wants to quit. - * - * # Error - * - * * Only primary key can abdicate. - * * Last member of a group cannot abdicate. + * See [`Pallet::abdicate_membership`]. **/ abdicateMembership: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Adds a member `who` to the group. May only be called from `AddOrigin` or root. - * - * # Arguments - * * `origin` - Origin representing `AddOrigin` or root - * * `who` - IdentityId to be added to the group. + * See [`Pallet::add_member`]. **/ addMember: AugmentedSubmittable<(who: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Disables a member at specific moment. - * - * Please note that if member is already revoked (a "valid member"), its revocation - * time-stamp will be updated. - * - * Any disabled member should NOT allow to act like an active member of the group. For - * instance, a disabled CDD member should NOT be able to generate a CDD claim. However any - * generated claim issued before `at` would be considered as a valid one. - * - * If you want to invalidate any generated claim, you should use `Self::remove_member`. - * - * # Arguments - * * `at` - Revocation time-stamp. - * * `who` - Target member of the group. - * * `expiry` - Time-stamp when `who` is removed from CDD. As soon as it is expired, the - * generated claims will be "invalid" as `who` is not considered a member of the group. + * See [`Pallet::disable_member`]. **/ disableMember: AugmentedSubmittable<(who: PolymeshPrimitivesIdentityId | string | Uint8Array, expiry: Option | null | Uint8Array | u64 | AnyNumber, at: Option | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, Option, Option]>; /** - * Removes a member `who` from the set. May only be called from `RemoveOrigin` or root. - * - * Any claim previously generated by this member is not valid as a group claim. For - * instance, if a CDD member group generated a claim for a target identity and then it is - * removed, that claim will be invalid. In case you want to keep the validity of generated - * claims, you have to use `Self::disable_member` function - * - * # Arguments - * * `origin` - Origin representing `RemoveOrigin` or root - * * `who` - IdentityId to be removed from the group. + * See [`Pallet::remove_member`]. **/ removeMember: AugmentedSubmittable<(who: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; /** - * Changes the membership to a new set, disregarding the existing membership. - * May only be called from `ResetOrigin` or root. - * - * # Arguments - * * `origin` - Origin representing `ResetOrigin` or root - * * `members` - New set of identities + * See [`Pallet::reset_members`]. **/ resetMembers: AugmentedSubmittable<(members: Vec | (PolymeshPrimitivesIdentityId | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Change this group's limit for how many concurrent active members they may be. - * - * # Arguments - * * `limit` - the number of active members there may be concurrently. + * See [`Pallet::set_active_members_limit`]. **/ setActiveMembersLimit: AugmentedSubmittable<(limit: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Swaps out one member `remove` for another member `add`. - * - * May only be called from `SwapOrigin` or root. - * - * # Arguments - * * `origin` - Origin representing `SwapOrigin` or root - * * `remove` - IdentityId to be removed from the group. - * * `add` - IdentityId to be added in place of `remove`. + * See [`Pallet::swap_member`]. **/ swapMember: AugmentedSubmittable<(remove: PolymeshPrimitivesIdentityId | string | Uint8Array, add: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; /** @@ -4146,172 +1591,31 @@ declare module '@polkadot/api-base/types/submittable' { }; utility: { /** - * Send a call through an indexed pseudonym of the sender. - * - * Filter from origin are passed along. The call will be dispatched with an origin which - * use the same filter as the origin of this call. - * - * The dispatch origin for this call must be _Signed_. + * See [`Pallet::as_derivative`]. **/ asDerivative: AugmentedSubmittable<(index: u16 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u16, Call]>; /** - * Send a batch of dispatch calls. - * - * May be called from any origin except `None`. - * - * - `calls`: The calls to be dispatched from the same origin. The number of call must not - * exceed the constant: `batched_calls_limit` (available in constant metadata). - * - * If origin is root then the calls are dispatched without checking origin filter. (This - * includes bypassing `frame_system::Config::BaseCallFilter`). - * - * ## Complexity - * - O(C) where C is the number of calls to be batched. - * - * This will return `Ok` in all circumstances. To determine the success of the batch, an - * event is deposited. If a call failed and the batch was interrupted, then the - * `BatchInterrupted` event is deposited, along with the number of successful calls made - * and the error of the failed call. If all were successful, then the `BatchCompleted` - * event is deposited. + * See [`Pallet::batch`]. **/ batch: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Send a batch of dispatch calls and atomically execute them. - * The whole transaction will rollback and fail if any of the calls failed. - * - * May be called from any origin except `None`. - * - * - `calls`: The calls to be dispatched from the same origin. The number of call must not - * exceed the constant: `batched_calls_limit` (available in constant metadata). - * - * If origin is root then the calls are dispatched without checking origin filter. (This - * includes bypassing `frame_system::Config::BaseCallFilter`). - * - * ## Complexity - * - O(C) where C is the number of calls to be batched. + * See [`Pallet::batch_all`]. **/ batchAll: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Dispatch multiple calls from the sender's origin. - * - * This will execute all calls, in order, stopping at the first failure, - * in which case the state changes are rolled back. - * On failure, an event `BatchInterruptedOld(failure_idx, error)` is deposited. - * - * May be called from root or a signed origin. - * - * # Parameters - * - `calls`: The calls to be dispatched from the same origin. - * - * # Weight - * - The sum of the weights of the `calls`. - * - One event. - * - * This will return `Ok` in all circumstances except an unsigned origin. - * To determine the success of the batch, an event is deposited. - * If any call failed, then `BatchInterruptedOld` is deposited. - * If all were successful, then the `BatchCompletedOld` event is deposited. - * - * POLYMESH: deprecated. - **/ - batchAtomic: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - /** - * Dispatch multiple calls from the sender's origin. - * - * This will execute until the first one fails and then stop. - * - * May be called from root or a signed origin. - * - * # Parameters - * - `calls`: The calls to be dispatched from the same origin. - * - * # Weight - * - The sum of the weights of the `calls`. - * - One event. - * - * This will return `Ok` in all circumstances except an unsigned origin. To determine the success of the batch, an - * event is deposited. If a call failed and the batch was interrupted, then the - * `BatchInterruptedOld` event is deposited, along with the number of successful calls made - * and the error of the failed call. If all were successful, then the `BatchCompletedOld` - * event is deposited. - * - * POLYMESH: Renamed from `batch` and deprecated. - **/ - batchOld: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - /** - * Dispatch multiple calls from the sender's origin. - * - * This will execute all calls, in order, irrespective of failures. - * Any failures will be available in a `BatchOptimisticFailed` event. - * - * May be called from root or a signed origin. - * - * # Parameters - * - `calls`: The calls to be dispatched from the same origin. - * - * - * # Weight - * - The sum of the weights of the `calls`. - * - One event. - * - * This will return `Ok` in all circumstances except an unsigned origin. - * To determine the success of the batch, an event is deposited. - * If any call failed, then `BatchOptimisticFailed` is deposited, - * with a vector of event counts for each call as well as a vector - * of errors. - * If all were successful, then the `BatchCompletedOld` event is deposited. - * - * POLYMESH: deprecated. - **/ - batchOptimistic: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - /** - * Dispatches a function call with a provided origin. - * - * The dispatch origin for this call must be _Root_. - * - * ## Complexity - * - O(1). + * See [`Pallet::dispatch_as`]. **/ dispatchAs: AugmentedSubmittable<(asOrigin: PolymeshRuntimeDevelopRuntimeOriginCaller | { system: any } | { Void: any } | { PolymeshCommittee: any } | { TechnicalCommittee: any } | { UpgradeCommittee: any } | string | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [PolymeshRuntimeDevelopRuntimeOriginCaller, Call]>; /** - * Send a batch of dispatch calls. - * Unlike `batch`, it allows errors and won't interrupt. - * - * May be called from any origin except `None`. - * - * - `calls`: The calls to be dispatched from the same origin. The number of call must not - * exceed the constant: `batched_calls_limit` (available in constant metadata). - * - * If origin is root then the calls are dispatch without checking origin filter. (This - * includes bypassing `frame_system::Config::BaseCallFilter`). - * - * ## Complexity - * - O(C) where C is the number of calls to be batched. + * See [`Pallet::force_batch`]. **/ forceBatch: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Relay a call for a target from an origin - * - * Relaying in this context refers to the ability of origin to make a call on behalf of - * target. - * - * Fees are charged to origin - * - * # Parameters - * - `target`: Account to be relayed - * - `signature`: Signature from target authorizing the relay - * - `call`: Call to be relayed on behalf of target - * - * POLYMESH: added. + * See [`Pallet::relay_tx`]. **/ relayTx: AugmentedSubmittable<(target: AccountId32 | string | Uint8Array, signature: SpRuntimeMultiSignature | { Ed25519: any } | { Sr25519: any } | { Ecdsa: any } | string | Uint8Array, call: PalletUtilityUniqueCall | { nonce?: any; call?: any } | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, SpRuntimeMultiSignature, PalletUtilityUniqueCall]>; /** - * Dispatch a function call with a specified weight. - * - * This function does not check the weight of the call, and instead allows the - * Root origin to specify the weight of the call. - * - * The dispatch origin for this call must be _Root_. + * See [`Pallet::with_weight`]. **/ withWeight: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array, weight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [Call, SpWeightsWeightV2Weight]>; /** @@ -4319,5 +1623,39 @@ declare module '@polkadot/api-base/types/submittable' { **/ [key: string]: SubmittableExtrinsicFunction; }; + validators: { + /** + * See [`Pallet::add_permissioned_validator`]. + **/ + addPermissionedValidator: AugmentedSubmittable<(identity: PolymeshPrimitivesIdentityId | string | Uint8Array, intendedCount: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, Option]>; + /** + * See [`Pallet::change_slashing_allowed_for`]. + **/ + changeSlashingAllowedFor: AugmentedSubmittable<(slashingSwitch: PalletValidatorsSlashingSwitch | 'Validator' | 'ValidatorAndNominator' | 'None' | number | Uint8Array) => SubmittableExtrinsic, [PalletValidatorsSlashingSwitch]>; + /** + * See [`Pallet::chill_from_governance`]. + **/ + chillFromGovernance: AugmentedSubmittable<(identity: PolymeshPrimitivesIdentityId | string | Uint8Array, stashKeys: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, Vec]>; + /** + * See [`Pallet::payout_stakers_by_system`]. + **/ + payoutStakersBySystem: AugmentedSubmittable<(validatorStash: AccountId32 | string | Uint8Array, era: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; + /** + * See [`Pallet::remove_permissioned_validator`]. + **/ + removePermissionedValidator: AugmentedSubmittable<(identity: PolymeshPrimitivesIdentityId | string | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId]>; + /** + * See [`Pallet::set_commission_cap`]. + **/ + setCommissionCap: AugmentedSubmittable<(newCap: Perbill | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Perbill]>; + /** + * See [`Pallet::update_permissioned_validator_intended_count`]. + **/ + updatePermissionedValidatorIntendedCount: AugmentedSubmittable<(identity: PolymeshPrimitivesIdentityId | string | Uint8Array, newIntendedCount: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PolymeshPrimitivesIdentityId, u32]>; + /** + * Generic tx + **/ + [key: string]: SubmittableExtrinsicFunction; + }; } // AugmentedSubmittables } // declare module diff --git a/scripts/cli/src/interfaces/augment-types.ts b/scripts/cli/src/interfaces/augment-types.ts index d65c513aad..238ef39c9a 100644 --- a/scripts/cli/src/interfaces/augment-types.ts +++ b/scripts/cli/src/interfaces/augment-types.ts @@ -74,7 +74,7 @@ import type { ClassDetails, ClassId, ClassMetadata, DepositBalance, DepositBalan import type { Multisig, Timepoint } from '@polkadot/types/interfaces/utility'; import type { VestingInfo } from '@polkadot/types/interfaces/vesting'; import type { AssetInstance, AssetInstanceV0, AssetInstanceV1, AssetInstanceV2, BodyId, BodyPart, DoubleEncodedCall, Fungibility, FungibilityV0, FungibilityV1, FungibilityV2, InboundStatus, InstructionV2, InteriorMultiLocation, Junction, JunctionV0, JunctionV1, JunctionV2, Junctions, JunctionsV1, JunctionsV2, MultiAsset, MultiAssetFilter, MultiAssetFilterV1, MultiAssetFilterV2, MultiAssetV0, MultiAssetV1, MultiAssetV2, MultiAssets, MultiAssetsV1, MultiAssetsV2, MultiLocation, MultiLocationV0, MultiLocationV1, MultiLocationV2, NetworkId, OriginKindV0, OriginKindV1, OriginKindV2, OutboundStatus, Outcome, QueryId, QueryStatus, QueueConfigData, Response, ResponseV0, ResponseV1, ResponseV2, ResponseV2Error, ResponseV2Result, VersionMigrationStage, VersionedMultiAsset, VersionedMultiAssets, VersionedMultiLocation, VersionedResponse, VersionedXcm, WeightLimitV2, WildFungibility, WildFungibilityV0, WildFungibilityV1, WildFungibilityV2, WildMultiAsset, WildMultiAssetV1, WildMultiAssetV2, Xcm, XcmAssetId, XcmError, XcmErrorV0, XcmErrorV1, XcmErrorV2, XcmOrder, XcmOrderV0, XcmOrderV1, XcmOrderV2, XcmOrigin, XcmOriginKind, XcmV0, XcmV1, XcmV2, XcmVersion, XcmpMessageFormat } from '@polkadot/types/interfaces/xcm'; -import type { AGId, AffirmationCount, AgentGroup, AssetComplianceResult, AssetCount, AssetDidResult, AssetId, AssetPermissions, Authorization, AuthorizationData, AuthorizationType, CanTransferGranularReturn, CappedFee, CddId, CddStatus, Claim, ClaimType, ComplianceReport, ComplianceRequirementResult, Condition, ConditionReport, ConditionResult, ConditionType, CountryCode, CustomClaimTypeId, DidStatus, ExecuteInstructionInfo, ExtrinsicName, ExtrinsicNames, ExtrinsicPermissions, FungibleLeg, GranularCanTransferResult, IdentityClaim, IdentityId, InstructionId, KeyIdentityData, Leg, Member, NFTId, NFTs, NonFungibleLeg, OffChainLeg, PalletName, PalletPermissions, Percentage, Permissions, PipId, PortfolioId, PortfolioKind, PortfolioNumber, PortfolioPermissions, PortfolioValidityResult, ProtocolOp, RequirementReport, RpcDidRecords, RpcDidRecordsSuccess, Scope, SecondaryKey, Signatory, StatClaim, TargetIdentity, Ticker, TransferCondition, TransferConditionResult, TrustedFor, TrustedIssuer, VoteCount, VoteCountProposalFound } from 'polymesh-types/default'; +import type { AGId, AffirmationCount, AgentGroup, AssetComplianceResult, AssetCount, AssetDidResult, AssetPermissions, Authorization, AuthorizationData, AuthorizationType, CanTransferGranularReturn, CappedFee, CddId, CddStatus, Claim, ClaimType, ComplianceReport, ComplianceRequirementResult, Condition, ConditionReport, ConditionResult, ConditionType, CountryCode, CustomClaimTypeId, DidStatus, ExecuteInstructionInfo, ExtrinsicName, ExtrinsicNames, ExtrinsicPermissions, FungibleLeg, GranularCanTransferResult, IdentityClaim, IdentityId, InstructionId, KeyIdentityData, Leg, Member, NFTId, NFTs, NonFungibleLeg, OffChainLeg, PalletName, PalletPermissions, Percentage, Permissions, PipId, PolymeshAssetId, PolymeshMoment, PortfolioId, PortfolioKind, PortfolioNumber, PortfolioPermissions, PortfolioValidityResult, ProtocolOp, RequirementReport, RpcDidRecords, RpcDidRecordsSuccess, Scope, SecondaryKey, Signatory, StatClaim, TargetIdentity, Ticker, TransferCondition, TransferConditionResult, TrustedFor, TrustedIssuer, VoteCount, VoteCountProposalFound } from 'polymesh-types/default'; declare module '@polkadot/types/types/registry' { interface InterfaceTypes { @@ -127,7 +127,6 @@ declare module '@polkadot/types/types/registry' { AssetDetails: AssetDetails; AssetDidResult: AssetDidResult; AssetId: AssetId; - AssetId: AssetId; AssetInstance: AssetInstance; AssetInstanceV0: AssetInstanceV0; AssetInstanceV1: AssetInstanceV1; @@ -888,6 +887,8 @@ declare module '@polkadot/types/types/registry' { PhragmenScore: PhragmenScore; PipId: PipId; Points: Points; + PolymeshAssetId: PolymeshAssetId; + PolymeshMoment: PolymeshMoment; PortableType: PortableType; PortableTypeV14: PortableTypeV14; PortfolioId: PortfolioId; diff --git a/scripts/cli/src/interfaces/default/types.ts b/scripts/cli/src/interfaces/default/types.ts index 8926f4ade3..45518a9595 100644 --- a/scripts/cli/src/interfaces/default/types.ts +++ b/scripts/cli/src/interfaces/default/types.ts @@ -1,16 +1,16 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -import type { Bytes, Enum, Option, Struct, Text, U8aFixed, Vec, bool, u32, u64 } from '@polkadot/types-codec'; +import type { BTreeMap, BTreeSet, Bytes, Enum, Option, Struct, Text, U8aFixed, Vec, bool, u128, u32, u64 } from '@polkadot/types-codec'; import type { ITuple } from '@polkadot/types-codec/types'; -import type { AccountId, Balance, Permill, Weight } from '@polkadot/types/interfaces/runtime'; +import type { AccountId, AccountId32, Balance, Permill, Weight } from '@polkadot/types/interfaces/runtime'; import type { DispatchError } from '@polkadot/types/interfaces/system'; /** @name AffirmationCount */ export interface AffirmationCount extends Struct { - readonly sender_asset_count: AssetCount; - readonly receiver_asset_count: AssetCount; - readonly offchain_count: u32; + readonly senderAssetCount: AssetCount; + readonly receiverAssetCount: AssetCount; + readonly offchainCount: u32; } /** @name AgentGroup */ @@ -36,9 +36,9 @@ export interface AssetComplianceResult extends Struct { /** @name AssetCount */ export interface AssetCount extends Struct { - readonly fungible_tokens: u32; - readonly non_fungible_tokens: u32; - readonly off_chain_assets: u32; + readonly fungibleTokens: u32; + readonly nonFungibleTokens: u32; + readonly offChainAssets: u32; } /** @name AssetDidResult */ @@ -50,25 +50,23 @@ export interface AssetDidResult extends Enum { readonly type: 'Ok' | 'Err'; } -/** @name AssetId */ -export interface AssetId extends U8aFixed {} - /** @name AssetPermissions */ export interface AssetPermissions extends Enum { readonly isWhole: boolean; readonly isThese: boolean; - readonly asThese: Vec; + readonly asThese: BTreeSet; readonly isExcept: boolean; - readonly asExcept: Vec; + readonly asExcept: BTreeSet; readonly type: 'Whole' | 'These' | 'Except'; } /** @name Authorization */ export interface Authorization extends Struct { - readonly authorization_data: AuthorizationData; - readonly authorized_by: IdentityId; - readonly expiry: Option; - readonly auth_id: u64; + readonly authorizationData: AuthorizationData; + readonly authorizedBy: IdentityId; + readonly expiry: Option; + readonly authId: u64; + readonly count: u32; } /** @name AuthorizationData */ @@ -81,15 +79,15 @@ export interface AuthorizationData extends Enum { readonly isAddMultiSigSigner: boolean; readonly asAddMultiSigSigner: AccountId; readonly isTransferAssetOwnership: boolean; - readonly asTransferAssetOwnership: AssetId; + readonly asTransferAssetOwnership: PolymeshAssetId; readonly isJoinIdentity: boolean; readonly asJoinIdentity: Permissions; readonly isPortfolioCustody: boolean; readonly asPortfolioCustody: PortfolioId; readonly isBecomeAgent: boolean; - readonly asBecomeAgent: ITuple<[AssetId, AgentGroup]>; + readonly asBecomeAgent: ITuple<[PolymeshAssetId, AgentGroup]>; readonly isAddRelayerPayingKey: boolean; - readonly asAddRelayerPayingKey: ITuple<[AccountId, AccountId, Balance]>; + readonly asAddRelayerPayingKey: ITuple<[AccountId32, AccountId32, u128]>; readonly isRotatePrimaryKeyToSecondary: boolean; readonly asRotatePrimaryKeyToSecondary: Permissions; readonly type: 'AttestPrimaryKeyRotation' | 'RotatePrimaryKey' | 'TransferTicker' | 'AddMultiSigSigner' | 'TransferAssetOwnership' | 'JoinIdentity' | 'PortfolioCustody' | 'BecomeAgent' | 'AddRelayerPayingKey' | 'RotatePrimaryKeyToSecondary'; @@ -177,22 +175,22 @@ export interface ClaimType extends Enum { /** @name ComplianceReport */ export interface ComplianceReport extends Struct { - readonly any_requirement_satistifed: bool; - readonly paused_compliance: bool; + readonly anyRequirementSatisfied: bool; + readonly pausedCompliance: bool; readonly requirements: Vec; } /** @name ComplianceRequirementResult */ export interface ComplianceRequirementResult extends Struct { - readonly sender_conditions: Vec; - readonly receiver_conditions: Vec; + readonly senderConditions: Vec; + readonly receiverConditions: Vec; readonly id: u32; readonly result: bool; } /** @name Condition */ export interface Condition extends Struct { - readonly condition_type: ConditionType; + readonly conditionType: ConditionType; readonly issuers: Vec; } @@ -491,10 +489,10 @@ export interface DidStatus extends Enum { /** @name ExecuteInstructionInfo */ export interface ExecuteInstructionInfo extends Struct { - readonly fungible_tokens: u32; - readonly non_fungible_tokens: u32; - readonly off_chain_assets: u32; - readonly consumed_weight: Weight; + readonly fungibleTokens: u32; + readonly nonFungibleTokens: u32; + readonly offChainAssets: u32; + readonly consumedWeight: Weight; readonly error: Option; } @@ -505,9 +503,9 @@ export interface ExtrinsicName extends Text {} export interface ExtrinsicNames extends Enum { readonly isWhole: boolean; readonly isThese: boolean; - readonly asThese: Vec; + readonly asThese: BTreeSet; readonly isExcept: boolean; - readonly asExcept: Vec; + readonly asExcept: BTreeSet; readonly type: 'Whole' | 'These' | 'Except'; } @@ -515,9 +513,9 @@ export interface ExtrinsicNames extends Enum { export interface ExtrinsicPermissions extends Enum { readonly isWhole: boolean; readonly isThese: boolean; - readonly asThese: Vec>; + readonly asThese: BTreeMap; readonly isExcept: boolean; - readonly asExcept: Vec>; + readonly asExcept: BTreeMap; readonly type: 'Whole' | 'These' | 'Except'; } @@ -525,33 +523,33 @@ export interface ExtrinsicPermissions extends Enum { export interface FungibleLeg extends Struct { readonly sender: PortfolioId; readonly receiver: PortfolioId; - readonly asset_id: AssetId; + readonly assetId: PolymeshAssetId; readonly amount: Balance; } /** @name GranularCanTransferResult */ export interface GranularCanTransferResult extends Struct { - readonly invalid_granularity: bool; - readonly self_transfer: bool; - readonly invalid_receiver_cdd: bool; - readonly invalid_sender_cdd: bool; - readonly receiver_custodian_error: bool; - readonly sender_custodian_error: bool; - readonly sender_insufficient_balance: bool; - readonly portfolio_validity_result: PortfolioValidityResult; - readonly asset_frozen: bool; - readonly transfer_condition_result: Vec; - readonly compliance_result: AssetComplianceResult; + readonly invalidGranularity: bool; + readonly selfTransfer: bool; + readonly invalidReceiverCdd: bool; + readonly invalidSenderCdd: bool; + readonly receiverCustodianError: bool; + readonly senderCustodianError: bool; + readonly senderInsufficientBalance: bool; + readonly portfolioValidityResult: PortfolioValidityResult; + readonly assetFrozen: bool; + readonly transferConditionResult: Vec; + readonly complianceResult: AssetComplianceResult; readonly result: bool; - readonly consumed_weight: Option; + readonly consumedWeight: Option; } /** @name IdentityClaim */ export interface IdentityClaim extends Struct { - readonly claim_issuer: IdentityId; - readonly issuance_date: Moment; - readonly last_update_date: Moment; - readonly expiry: Option; + readonly claimIssuer: IdentityId; + readonly issuanceDate: PolymeshMoment; + readonly lastUpdateDate: PolymeshMoment; + readonly expiry: Option; readonly claim: Claim; } @@ -581,19 +579,16 @@ export interface Leg extends Enum { /** @name Member */ export interface Member extends Struct { readonly id: IdentityId; - readonly expiry_at: Option; - readonly inactive_from: Option; + readonly expiryAt: Option; + readonly inactiveFrom: Option; } -/** @name Moment */ -export interface Moment extends u64 {} - /** @name NFTId */ export interface NFTId extends u64 {} /** @name NFTs */ export interface NFTs extends Struct { - readonly asset_id: AssetId; + readonly assetId: PolymeshAssetId; readonly ids: Vec; } @@ -606,9 +601,9 @@ export interface NonFungibleLeg extends Struct { /** @name OffChainLeg */ export interface OffChainLeg extends Struct { - readonly sender_identity: IdentityId; - readonly receiver_identity: IdentityId; - readonly asset_id: AssetId; + readonly senderIdentity: IdentityId; + readonly receiverIdentity: IdentityId; + readonly ticker: Ticker; readonly amount: Balance; } @@ -633,6 +628,12 @@ export interface Permissions extends Struct { /** @name PipId */ export interface PipId extends u32 {} +/** @name PolymeshAssetId */ +export interface PolymeshAssetId extends U8aFixed {} + +/** @name PolymeshMoment */ +export interface PolymeshMoment extends u64 {} + /** @name PortfolioId */ export interface PortfolioId extends Struct { readonly did: IdentityId; @@ -654,18 +655,18 @@ export interface PortfolioNumber extends u64 {} export interface PortfolioPermissions extends Enum { readonly isWhole: boolean; readonly isThese: boolean; - readonly asThese: Vec; + readonly asThese: BTreeSet; readonly isExcept: boolean; - readonly asExcept: Vec; + readonly asExcept: BTreeSet; readonly type: 'Whole' | 'These' | 'Except'; } /** @name PortfolioValidityResult */ export interface PortfolioValidityResult extends Struct { - readonly receiver_is_same_portfolio: bool; - readonly sender_portfolio_does_not_exist: bool; - readonly receiver_portfolio_does_not_exist: bool; - readonly sender_insufficient_balance: bool; + readonly receiverIsSamePortfolio: bool; + readonly senderPortfolioDoesNotExist: bool; + readonly receiverPortfolioDoesNotExist: bool; + readonly senderInsufficientBalance: bool; readonly result: bool; } @@ -692,10 +693,10 @@ export interface ProtocolOp extends Enum { /** @name RequirementReport */ export interface RequirementReport extends Struct { - readonly requirement_satisfied: bool; + readonly requirementSatisfied: bool; readonly id: u32; - readonly sender_conditions: Vec; - readonly receiver_conditions: Vec; + readonly senderConditions: Vec; + readonly receiverConditions: Vec; } /** @name RpcDidRecords */ @@ -709,8 +710,8 @@ export interface RpcDidRecords extends Enum { /** @name RpcDidRecordsSuccess */ export interface RpcDidRecordsSuccess extends Struct { - readonly primary_key: AccountId; - readonly secondary_keys: Vec; + readonly primaryKey: AccountId; + readonly secondaryKeys: Vec; } /** @name Scope */ @@ -718,7 +719,7 @@ export interface Scope extends Enum { readonly isIdentity: boolean; readonly asIdentity: IdentityId; readonly isAsset: boolean; - readonly asAsset: AssetId; + readonly asAsset: PolymeshAssetId; readonly isCustom: boolean; readonly asCustom: Bytes; readonly type: 'Identity' | 'Asset' | 'Custom'; @@ -791,7 +792,7 @@ export interface TrustedFor extends Enum { /** @name TrustedIssuer */ export interface TrustedIssuer extends Struct { readonly issuer: IdentityId; - readonly trusted_for: TrustedFor; + readonly trustedFor: TrustedFor; } /** @name VoteCount */ diff --git a/scripts/cli/src/interfaces/definitions.ts b/scripts/cli/src/interfaces/definitions.ts index daa063cbc1..ed41b51b7c 100644 --- a/scripts/cli/src/interfaces/definitions.ts +++ b/scripts/cli/src/interfaces/definitions.ts @@ -1,3 +1,3 @@ export default { -types: {"AssetId":"[u8; 16]","IdentityId":"[u8; 32]","Ticker":"[u8; 12]","CddId":"[u8; 32]","PalletName":"Text","ExtrinsicName":"Text","AssetPermissions":{"_enum":{"Whole":"","These":"Vec","Except":"Vec"}},"PortfolioPermissions":{"_enum":{"Whole":"","These":"Vec","Except":"Vec"}},"ExtrinsicNames":{"_enum":{"Whole":"","These":"Vec","Except":"Vec"}},"PalletPermissions":{"extrinsics":"ExtrinsicNames"},"ExtrinsicPermissions":{"_enum":{"Whole":"","These":"Vec<(PalletName, PalletPermissions)>","Except":"Vec<(PalletName, PalletPermissions)>"}},"Permissions":{"asset":"AssetPermissions","extrinsic":"ExtrinsicPermissions","portfolio":"PortfolioPermissions"},"Signatory":{"_enum":{"Identity":"IdentityId","Account":"AccountId"}},"SecondaryKey":{"key":"AccountId","permissions":"Permissions"},"KeyIdentityData":{"identity":"IdentityId","permissions":"Option"},"CountryCode":{"_enum":["AF","AX","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BV","BR","VG","IO","BN","BG","BF","BI","KH","CM","CA","CV","KY","CF","TD","CL","CN","HK","MO","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MK","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","AN","NC","NZ","NI","NE","NG","NU","NF","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SZ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VI","WF","EH","YE","ZM","ZW","BQ","CW","SX"]},"Scope":{"_enum":{"Identity":"IdentityId","Asset":"AssetId","Custom":"Vec"}},"CustomClaimTypeId":"u32","Claim":{"_enum":{"Accredited":"Scope","Affiliate":"Scope","BuyLockup":"Scope","SellLockup":"Scope","CustomerDueDiligence":"CddId","KnowYourCustomer":"Scope","Jurisdiction":"(CountryCode, Scope)","Exempted":"Scope","Blocked":"Scope","Custom":"(CustomClaimTypeId, Option)"}},"ClaimType":{"_enum":{"Accredited":"","Affiliate":"","BuyLockup":"","SellLockup":"","CustomerDueDiligence":"","KnowYourCustomer":"","Jurisdiction":"","Exempted":"","Blocked":"","Custom":"CustomClaimTypeId"}},"IdentityClaim":{"claim_issuer":"IdentityId","issuance_date":"Moment","last_update_date":"Moment","expiry":"Option","claim":"Claim"},"ComplianceRequirementResult":{"sender_conditions":"Vec","receiver_conditions":"Vec","id":"u32","result":"bool"},"ConditionType":{"_enum":{"IsPresent":"Claim","IsAbsent":"Claim","IsAnyOf":"Vec","IsNoneOf":"Vec","IsIdentity":"TargetIdentity"}},"TrustedFor":{"_enum":{"Any":"","Specific":"Vec"}},"TrustedIssuer":{"issuer":"IdentityId","trusted_for":"TrustedFor"},"Condition":{"condition_type":"ConditionType","issuers":"Vec"},"ConditionResult":{"condition":"Condition","result":"bool"},"PipId":"u32","Authorization":{"authorization_data":"AuthorizationData","authorized_by":"IdentityId","expiry":"Option","auth_id":"u64"},"AuthorizationData":{"_enum":{"AttestPrimaryKeyRotation":"IdentityId","RotatePrimaryKey":"","TransferTicker":"Ticker","AddMultiSigSigner":"AccountId","TransferAssetOwnership":"AssetId","JoinIdentity":"Permissions","PortfolioCustody":"PortfolioId","BecomeAgent":"(AssetId, AgentGroup)","AddRelayerPayingKey":"(AccountId, AccountId, Balance)","RotatePrimaryKeyToSecondary":"Permissions"}},"Percentage":"Permill","StatClaim":{"_enum":{"Accredited":"bool","Affiliate":"bool","Jurisdiction":"Option"}},"TransferCondition":{"_enum":{"MaxInvestorCount":"u64","MaxInvestorOwnership":"Percentage","ClaimCount":"(StatClaim, IdentityId, u64, Option)","ClaimOwnership":"(StatClaim, IdentityId, Percentage, Percentage)"}},"AssetComplianceResult":{"paused":"bool","requirements":"Vec","result":"bool"},"ProtocolOp":{"_enum":["AssetRegisterTicker","AssetIssue","AssetAddDocuments","AssetCreateAsset","CheckpointCreateSchedule","ComplianceManagerAddComplianceRequirement","IdentityCddRegisterDid","IdentityAddClaim","IdentityAddSecondaryKeysWithAuthorization","PipsPropose","ContractsPutCode","CorporateBallotAttachBallot","CapitalDistributionDistribute","NFTCreateCollection","NFTMint","IdentityCreateChildIdentity"]},"CddStatus":{"_enum":{"Ok":"IdentityId","Err":"Vec"}},"AssetDidResult":{"_enum":{"Ok":"IdentityId","Err":"Vec"}},"RpcDidRecordsSuccess":{"primary_key":"AccountId","secondary_keys":"Vec"},"RpcDidRecords":{"_enum":{"Success":"RpcDidRecordsSuccess","IdNotFound":"Vec"}},"VoteCountProposalFound":{"ayes":"u64","nays":"u64"},"VoteCount":{"_enum":{"ProposalFound":"VoteCountProposalFound","ProposalNotFound":""}},"CappedFee":"u64","AuthorizationType":{"_enum":{"AttestPrimaryKeyRotation":"","RotatePrimaryKey":"","TransferTicker":"","AddMultiSigSigner":"","TransferAssetOwnership":"","JoinIdentity":"","PortfolioCustody":"","BecomeAgent":"","AddRelayerPayingKey":"","RotatePrimaryKeyToSecondary":""}},"DidStatus":{"_enum":{"Unknown":"","Exists":"","CddVerified":""}},"PortfolioNumber":"u64","PortfolioKind":{"_enum":{"Default":"","User":"PortfolioNumber"}},"PortfolioId":{"did":"IdentityId","kind":"PortfolioKind"},"Moment":"u64","InstructionId":"u64","TargetIdentity":{"_enum":{"ExternalAgent":"","Specific":"IdentityId"}},"CanTransferGranularReturn":{"_enum":{"Ok":"GranularCanTransferResult","Err":"DispatchError"}},"GranularCanTransferResult":{"invalid_granularity":"bool","self_transfer":"bool","invalid_receiver_cdd":"bool","invalid_sender_cdd":"bool","receiver_custodian_error":"bool","sender_custodian_error":"bool","sender_insufficient_balance":"bool","portfolio_validity_result":"PortfolioValidityResult","asset_frozen":"bool","transfer_condition_result":"Vec","compliance_result":"AssetComplianceResult","result":"bool","consumed_weight":"Option"},"PortfolioValidityResult":{"receiver_is_same_portfolio":"bool","sender_portfolio_does_not_exist":"bool","receiver_portfolio_does_not_exist":"bool","sender_insufficient_balance":"bool","result":"bool"},"TransferConditionResult":{"condition":"TransferCondition","result":"bool"},"AGId":"u32","AgentGroup":{"_enum":{"Full":"","Custom":"AGId","ExceptMeta":"","PolymeshV1CAA":"","PolymeshV1PIA":""}},"Member":{"id":"IdentityId","expiry_at":"Option","inactive_from":"Option"},"NFTId":"u64","NFTs":{"asset_id":"AssetId","ids":"Vec"},"FungibleLeg":{"sender":"PortfolioId","receiver":"PortfolioId","asset_id":"AssetId","amount":"Balance"},"NonFungibleLeg":{"sender":"PortfolioId","receiver":"PortfolioId","nfts":"NFTs"},"OffChainLeg":{"sender_identity":"IdentityId","receiver_identity":"IdentityId","asset_id":"AssetId","amount":"Balance"},"Leg":{"_enum":{"Fungible":"FungibleLeg","NonFungible":"NonFungibleLeg","OffChain":"OffChainLeg"}},"ExecuteInstructionInfo":{"fungible_tokens":"u32","non_fungible_tokens":"u32","off_chain_assets":"u32","consumed_weight":"Weight","error":"Option"},"AssetCount":{"fungible_tokens":"u32","non_fungible_tokens":"u32","off_chain_assets":"u32"},"AffirmationCount":{"sender_asset_count":"AssetCount","receiver_asset_count":"AssetCount","offchain_count":"u32"},"ComplianceReport":{"any_requirement_satistifed":"bool","paused_compliance":"bool","requirements":"Vec"},"RequirementReport":{"requirement_satisfied":"bool","id":"u32","sender_conditions":"Vec","receiver_conditions":"Vec"},"ConditionReport":{"satisfied":"bool","condition":"Condition"}} +types: {"PolymeshAssetId":"[u8; 16]","IdentityId":"[u8; 32]","Ticker":"[u8; 12]","CddId":"[u8; 32]","PalletName":"Text","ExtrinsicName":"Text","AssetPermissions":{"_enum":{"Whole":"","These":"BTreeSet","Except":"BTreeSet"}},"PortfolioPermissions":{"_enum":{"Whole":"","These":"BTreeSet","Except":"BTreeSet"}},"ExtrinsicNames":{"_enum":{"Whole":"","These":"BTreeSet","Except":"BTreeSet"}},"PalletPermissions":{"extrinsics":"ExtrinsicNames"},"ExtrinsicPermissions":{"_enum":{"Whole":"","These":"BTreeMap","Except":"BTreeMap"}},"Permissions":{"asset":"AssetPermissions","extrinsic":"ExtrinsicPermissions","portfolio":"PortfolioPermissions"},"Signatory":{"_enum":{"Identity":"IdentityId","Account":"AccountId"}},"SecondaryKey":{"key":"AccountId","permissions":"Permissions"},"KeyIdentityData":{"identity":"IdentityId","permissions":"Option"},"CountryCode":{"_enum":["AF","AX","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BV","BR","VG","IO","BN","BG","BF","BI","KH","CM","CA","CV","KY","CF","TD","CL","CN","HK","MO","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MK","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","AN","NC","NZ","NI","NE","NG","NU","NF","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SK","SI","SB","SO","ZA","GS","SS","ES","LK","SD","SR","SJ","SZ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VI","WF","EH","YE","ZM","ZW","BQ","CW","SX"]},"Scope":{"_enum":{"Identity":"IdentityId","Asset":"PolymeshAssetId","Custom":"Vec"}},"CustomClaimTypeId":"u32","Claim":{"_enum":{"Accredited":"Scope","Affiliate":"Scope","BuyLockup":"Scope","SellLockup":"Scope","CustomerDueDiligence":"CddId","KnowYourCustomer":"Scope","Jurisdiction":"(CountryCode, Scope)","Exempted":"Scope","Blocked":"Scope","Custom":"(CustomClaimTypeId, Option)"}},"ClaimType":{"_enum":{"Accredited":"","Affiliate":"","BuyLockup":"","SellLockup":"","CustomerDueDiligence":"","KnowYourCustomer":"","Jurisdiction":"","Exempted":"","Blocked":"","Custom":"CustomClaimTypeId"}},"IdentityClaim":{"claimIssuer":"IdentityId","issuanceDate":"PolymeshMoment","lastUpdateDate":"PolymeshMoment","expiry":"Option","claim":"Claim"},"ComplianceRequirementResult":{"senderConditions":"Vec","receiverConditions":"Vec","id":"u32","result":"bool"},"ConditionType":{"_enum":{"IsPresent":"Claim","IsAbsent":"Claim","IsAnyOf":"Vec","IsNoneOf":"Vec","IsIdentity":"TargetIdentity"}},"TrustedFor":{"_enum":{"Any":"","Specific":"Vec"}},"TrustedIssuer":{"issuer":"IdentityId","trustedFor":"TrustedFor"},"Condition":{"conditionType":"ConditionType","issuers":"Vec"},"ConditionResult":{"condition":"Condition","result":"bool"},"PipId":"u32","Authorization":{"authorizationData":"AuthorizationData","authorizedBy":"IdentityId","expiry":"Option","authId":"u64","count":"u32"},"AuthorizationData":{"_enum":{"AttestPrimaryKeyRotation":"IdentityId","RotatePrimaryKey":"","TransferTicker":"Ticker","AddMultiSigSigner":"AccountId","TransferAssetOwnership":"PolymeshAssetId","JoinIdentity":"Permissions","PortfolioCustody":"PortfolioId","BecomeAgent":"(PolymeshAssetId, AgentGroup)","AddRelayerPayingKey":"(AccountId32, AccountId32, u128)","RotatePrimaryKeyToSecondary":"Permissions"}},"Percentage":"Permill","StatClaim":{"_enum":{"Accredited":"bool","Affiliate":"bool","Jurisdiction":"Option"}},"TransferCondition":{"_enum":{"MaxInvestorCount":"u64","MaxInvestorOwnership":"Percentage","ClaimCount":"(StatClaim, IdentityId, u64, Option)","ClaimOwnership":"(StatClaim, IdentityId, Percentage, Percentage)"}},"AssetComplianceResult":{"paused":"bool","requirements":"Vec","result":"bool"},"ProtocolOp":{"_enum":["AssetRegisterTicker","AssetIssue","AssetAddDocuments","AssetCreateAsset","CheckpointCreateSchedule","ComplianceManagerAddComplianceRequirement","IdentityCddRegisterDid","IdentityAddClaim","IdentityAddSecondaryKeysWithAuthorization","PipsPropose","ContractsPutCode","CorporateBallotAttachBallot","CapitalDistributionDistribute","NFTCreateCollection","NFTMint","IdentityCreateChildIdentity"]},"CddStatus":{"_enum":{"Ok":"IdentityId","Err":"Vec"}},"AssetDidResult":{"_enum":{"Ok":"IdentityId","Err":"Vec"}},"RpcDidRecordsSuccess":{"primaryKey":"AccountId","secondaryKeys":"Vec"},"RpcDidRecords":{"_enum":{"Success":"RpcDidRecordsSuccess","IdNotFound":"Vec"}},"VoteCountProposalFound":{"ayes":"u64","nays":"u64"},"VoteCount":{"_enum":{"ProposalFound":"VoteCountProposalFound","ProposalNotFound":""}},"CappedFee":"u64","AuthorizationType":{"_enum":{"AttestPrimaryKeyRotation":"","RotatePrimaryKey":"","TransferTicker":"","AddMultiSigSigner":"","TransferAssetOwnership":"","JoinIdentity":"","PortfolioCustody":"","BecomeAgent":"","AddRelayerPayingKey":"","RotatePrimaryKeyToSecondary":""}},"DidStatus":{"_enum":{"Unknown":"","Exists":"","CddVerified":""}},"PortfolioNumber":"u64","PortfolioKind":{"_enum":{"Default":"","User":"PortfolioNumber"}},"PortfolioId":{"did":"IdentityId","kind":"PortfolioKind"},"PolymeshMoment":"u64","InstructionId":"u64","TargetIdentity":{"_enum":{"ExternalAgent":"","Specific":"IdentityId"}},"CanTransferGranularReturn":{"_enum":{"Ok":"GranularCanTransferResult","Err":"DispatchError"}},"GranularCanTransferResult":{"invalidGranularity":"bool","selfTransfer":"bool","invalidReceiverCdd":"bool","invalidSenderCdd":"bool","receiverCustodianError":"bool","senderCustodianError":"bool","senderInsufficientBalance":"bool","portfolioValidityResult":"PortfolioValidityResult","assetFrozen":"bool","transferConditionResult":"Vec","complianceResult":"AssetComplianceResult","result":"bool","consumedWeight":"Option"},"PortfolioValidityResult":{"receiverIsSamePortfolio":"bool","senderPortfolioDoesNotExist":"bool","receiverPortfolioDoesNotExist":"bool","senderInsufficientBalance":"bool","result":"bool"},"TransferConditionResult":{"condition":"TransferCondition","result":"bool"},"AGId":"u32","AgentGroup":{"_enum":{"Full":"","Custom":"AGId","ExceptMeta":"","PolymeshV1CAA":"","PolymeshV1PIA":""}},"Member":{"id":"IdentityId","expiryAt":"Option","inactiveFrom":"Option"},"NFTId":"u64","NFTs":{"assetId":"PolymeshAssetId","ids":"Vec"},"FungibleLeg":{"sender":"PortfolioId","receiver":"PortfolioId","assetId":"PolymeshAssetId","amount":"Balance"},"NonFungibleLeg":{"sender":"PortfolioId","receiver":"PortfolioId","nfts":"NFTs"},"OffChainLeg":{"senderIdentity":"IdentityId","receiverIdentity":"IdentityId","ticker":"Ticker","amount":"Balance"},"Leg":{"_enum":{"Fungible":"FungibleLeg","NonFungible":"NonFungibleLeg","OffChain":"OffChainLeg"}},"ExecuteInstructionInfo":{"fungibleTokens":"u32","nonFungibleTokens":"u32","offChainAssets":"u32","consumedWeight":"Weight","error":"Option"},"AssetCount":{"fungibleTokens":"u32","nonFungibleTokens":"u32","offChainAssets":"u32"},"AffirmationCount":{"senderAssetCount":"AssetCount","receiverAssetCount":"AssetCount","offchainCount":"u32"},"ComplianceReport":{"anyRequirementSatisfied":"bool","pausedCompliance":"bool","requirements":"Vec"},"RequirementReport":{"requirementSatisfied":"bool","id":"u32","senderConditions":"Vec","receiverConditions":"Vec"},"ConditionReport":{"satisfied":"bool","condition":"Condition"}} } \ No newline at end of file diff --git a/scripts/cli/src/interfaces/lookup.ts b/scripts/cli/src/interfaces/lookup.ts index 48375aba2d..69b53c0fe4 100644 --- a/scripts/cli/src/interfaces/lookup.ts +++ b/scripts/cli/src/interfaces/lookup.ts @@ -5,19 +5,19 @@ export default { /** - * Lookup3: frame_system::AccountInfo + * Lookup3: frame_system::AccountInfo **/ FrameSystemAccountInfo: { nonce: 'u32', consumers: 'u32', providers: 'u32', sufficients: 'u32', - data: 'PolymeshCommonUtilitiesBalancesAccountData' + data: 'PalletBalancesAccountData' }, /** - * Lookup5: polymesh_common_utilities::traits::balances::AccountData + * Lookup5: pallet_balances::AccountData **/ - PolymeshCommonUtilitiesBalancesAccountData: { + PalletBalancesAccountData: { free: 'u128', reserved: 'u128', miscFrozen: 'u128', @@ -133,7 +133,8 @@ export default { Transactional: 'SpRuntimeTransactionalError', Exhausted: 'Null', Corruption: 'Null', - Unavailable: 'Null' + Unavailable: 'Null', + RootNotAllowed: 'Null' } }, /** @@ -147,7 +148,7 @@ export default { * Lookup26: sp_runtime::TokenError **/ SpRuntimeTokenError: { - _enum: ['NoFunds', 'WouldDie', 'BelowMinimum', 'CannotCreate', 'UnknownAsset', 'Frozen', 'Unsupported'] + _enum: ['FundsUnavailable', 'OnlyProvider', 'BelowMinimum', 'CannotCreate', 'UnknownAsset', 'Frozen', 'Unsupported', 'CannotCreateHold', 'NotExpendable', 'Blocked'] }, /** * Lookup27: sp_arithmetic::ArithmeticError @@ -180,9 +181,9 @@ export default { } }, /** - * Lookup30: polymesh_common_utilities::traits::balances::RawEvent + * Lookup30: pallet_balances::pallet::Event **/ - PolymeshCommonUtilitiesBalancesRawEvent: { + PalletBalancesEvent: { _enum: { Endowed: '(Option,AccountId32,u128)', Transfer: '(Option,AccountId32,Option,AccountId32,u128,Option)', @@ -208,9 +209,9 @@ export default { _enum: ['Free', 'Reserved'] }, /** - * Lookup36: pallet_transaction_payment::RawEvent + * Lookup36: pallet_transaction_payment::pallet::Event **/ - PalletTransactionPaymentRawEvent: { + PalletTransactionPaymentEvent: { _enum: { TransactionFeePaid: { who: 'AccountId32', @@ -220,9 +221,9 @@ export default { } }, /** - * Lookup37: polymesh_common_utilities::traits::identity::RawEvent + * Lookup37: pallet_identity::pallet::Event **/ - PolymeshCommonUtilitiesIdentityRawEvent: { + PalletIdentityEvent: { _enum: { DidCreated: '(PolymeshPrimitivesIdentityId,AccountId32,Vec)', SecondaryKeysAdded: '(PolymeshPrimitivesIdentityId,Vec)', @@ -409,9 +410,9 @@ export default { } }, /** - * Lookup79: polymesh_common_utilities::traits::group::RawEvent + * Lookup79: pallet_group::pallet::Event **/ - PolymeshCommonUtilitiesGroupRawEventInstance2: { + PalletGroupEvent: { _enum: { MemberAdded: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', MemberRemoved: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', @@ -423,13 +424,9 @@ export default { } }, /** - * Lookup80: pallet_group::Instance2 + * Lookup81: pallet_committee::pallet::Event **/ - PalletGroupInstance2: 'Null', - /** - * Lookup82: pallet_committee::RawEvent - **/ - PalletCommitteeRawEventInstance1: { + PalletCommitteeEvent: { _enum: { Proposed: '(PolymeshPrimitivesIdentityId,u32,H256)', Voted: '(PolymeshPrimitivesIdentityId,u32,H256,bool,u32,u32,u32)', @@ -439,121 +436,21 @@ export default { Rejected: '(Option,H256,u32,u32,u32)', Executed: '(Option,H256,Result)', ReleaseCoordinatorUpdated: 'Option', - ExpiresAfterUpdated: '(PolymeshPrimitivesIdentityId,PolymeshCommonUtilitiesMaybeBlock)', + ExpiresAfterUpdated: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesMaybeBlock)', VoteThresholdUpdated: '(PolymeshPrimitivesIdentityId,u32,u32)' } }, /** - * Lookup83: pallet_committee::Instance1 - **/ - PalletCommitteeInstance1: 'Null', - /** - * Lookup86: polymesh_common_utilities::MaybeBlock + * Lookup84: polymesh_primitives::MaybeBlock **/ - PolymeshCommonUtilitiesMaybeBlock: { + PolymeshPrimitivesMaybeBlock: { _enum: { Some: 'u32', None: 'Null' } }, /** - * Lookup87: polymesh_common_utilities::traits::group::RawEvent - **/ - PolymeshCommonUtilitiesGroupRawEventInstance1: { - _enum: { - MemberAdded: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', - MemberRemoved: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', - MemberRevoked: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', - MembersSwapped: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', - MembersReset: '(PolymeshPrimitivesIdentityId,Vec)', - ActiveLimitChanged: '(PolymeshPrimitivesIdentityId,u32,u32)', - Dummy: 'Null' - } - }, - /** - * Lookup88: pallet_group::Instance1 - **/ - PalletGroupInstance1: 'Null', - /** - * Lookup89: pallet_committee::RawEvent - **/ - PalletCommitteeRawEventInstance3: { - _enum: { - Proposed: '(PolymeshPrimitivesIdentityId,u32,H256)', - Voted: '(PolymeshPrimitivesIdentityId,u32,H256,bool,u32,u32,u32)', - VoteRetracted: '(PolymeshPrimitivesIdentityId,u32,H256,bool)', - FinalVotes: '(Option,u32,H256,Vec,Vec)', - Approved: '(Option,H256,u32,u32,u32)', - Rejected: '(Option,H256,u32,u32,u32)', - Executed: '(Option,H256,Result)', - ReleaseCoordinatorUpdated: 'Option', - ExpiresAfterUpdated: '(PolymeshPrimitivesIdentityId,PolymeshCommonUtilitiesMaybeBlock)', - VoteThresholdUpdated: '(PolymeshPrimitivesIdentityId,u32,u32)' - } - }, - /** - * Lookup90: pallet_committee::Instance3 - **/ - PalletCommitteeInstance3: 'Null', - /** - * Lookup91: polymesh_common_utilities::traits::group::RawEvent - **/ - PolymeshCommonUtilitiesGroupRawEventInstance3: { - _enum: { - MemberAdded: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', - MemberRemoved: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', - MemberRevoked: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', - MembersSwapped: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', - MembersReset: '(PolymeshPrimitivesIdentityId,Vec)', - ActiveLimitChanged: '(PolymeshPrimitivesIdentityId,u32,u32)', - Dummy: 'Null' - } - }, - /** - * Lookup92: pallet_group::Instance3 - **/ - PalletGroupInstance3: 'Null', - /** - * Lookup93: pallet_committee::RawEvent - **/ - PalletCommitteeRawEventInstance4: { - _enum: { - Proposed: '(PolymeshPrimitivesIdentityId,u32,H256)', - Voted: '(PolymeshPrimitivesIdentityId,u32,H256,bool,u32,u32,u32)', - VoteRetracted: '(PolymeshPrimitivesIdentityId,u32,H256,bool)', - FinalVotes: '(Option,u32,H256,Vec,Vec)', - Approved: '(Option,H256,u32,u32,u32)', - Rejected: '(Option,H256,u32,u32,u32)', - Executed: '(Option,H256,Result)', - ReleaseCoordinatorUpdated: 'Option', - ExpiresAfterUpdated: '(PolymeshPrimitivesIdentityId,PolymeshCommonUtilitiesMaybeBlock)', - VoteThresholdUpdated: '(PolymeshPrimitivesIdentityId,u32,u32)' - } - }, - /** - * Lookup94: pallet_committee::Instance4 - **/ - PalletCommitteeInstance4: 'Null', - /** - * Lookup95: polymesh_common_utilities::traits::group::RawEvent - **/ - PolymeshCommonUtilitiesGroupRawEventInstance4: { - _enum: { - MemberAdded: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', - MemberRemoved: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', - MemberRevoked: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', - MembersSwapped: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', - MembersReset: '(PolymeshPrimitivesIdentityId,Vec)', - ActiveLimitChanged: '(PolymeshPrimitivesIdentityId,u32,u32)', - Dummy: 'Null' - } - }, - /** - * Lookup96: pallet_group::Instance4 - **/ - PalletGroupInstance4: 'Null', - /** - * Lookup97: pallet_multisig::pallet::Event + * Lookup90: pallet_multisig::pallet::Event **/ PalletMultisigEvent: { _enum: { @@ -635,7 +532,51 @@ export default { } }, /** - * Lookup99: pallet_staking::pallet::pallet::Event + * Lookup92: pallet_validators::pallet::Event + **/ + PalletValidatorsEvent: { + _enum: { + Nominated: { + nominatorIdentity: 'PolymeshPrimitivesIdentityId', + stash: 'AccountId32', + targets: 'Vec', + }, + PermissionedIdentityAdded: { + governanceCouncillDid: 'PolymeshPrimitivesIdentityId', + validatorsIdentity: 'PolymeshPrimitivesIdentityId', + }, + PermissionedIdentityRemoved: { + governanceCouncillDid: 'PolymeshPrimitivesIdentityId', + validatorsIdentity: 'PolymeshPrimitivesIdentityId', + }, + InvalidatedNominators: { + governanceCouncillDid: 'PolymeshPrimitivesIdentityId', + governanceCouncillAccount: 'PolymeshPrimitivesIdentityId', + expiredNominators: 'Vec', + }, + SlashingAllowedForChanged: { + slashingSwitch: 'PalletValidatorsSlashingSwitch', + }, + RewardPaymentSchedulingInterrupted: { + accountId: 'AccountId32', + era: 'u32', + error: 'SpRuntimeDispatchError', + }, + CommissionCapUpdated: { + governanceCouncillDid: 'PolymeshPrimitivesIdentityId', + oldCommissionCap: 'Perbill', + newCommissionCap: 'Perbill' + } + } + }, + /** + * Lookup93: pallet_validators::types::SlashingSwitch + **/ + PalletValidatorsSlashingSwitch: { + _enum: ['Validator', 'ValidatorAndNominator', 'None'] + }, + /** + * Lookup95: pallet_staking::pallet::pallet::Event **/ PalletStakingPalletEvent: { _enum: { @@ -645,7 +586,6 @@ export default { remainder: 'u128', }, Rewarded: { - identity: 'PolymeshPrimitivesIdentityId', stash: 'AccountId32', amount: 'u128', }, @@ -663,12 +603,10 @@ export default { }, StakersElected: 'Null', Bonded: { - identity: 'PolymeshPrimitivesIdentityId', stash: 'AccountId32', amount: 'u128', }, Unbonded: { - identity: 'PolymeshPrimitivesIdentityId', stash: 'AccountId32', amount: 'u128', }, @@ -693,62 +631,25 @@ export default { prefs: 'PalletStakingValidatorPrefs', }, ForceEra: { - mode: 'PalletStakingForcing', - }, - Nominated: { - nominatorIdentity: 'PolymeshPrimitivesIdentityId', - stash: 'AccountId32', - targets: 'Vec', - }, - PermissionedIdentityAdded: { - governanceCouncillDid: 'PolymeshPrimitivesIdentityId', - validatorsIdentity: 'PolymeshPrimitivesIdentityId', - }, - PermissionedIdentityRemoved: { - governanceCouncillDid: 'PolymeshPrimitivesIdentityId', - validatorsIdentity: 'PolymeshPrimitivesIdentityId', - }, - InvalidatedNominators: { - governanceCouncillDid: 'PolymeshPrimitivesIdentityId', - governanceCouncillAccount: 'PolymeshPrimitivesIdentityId', - expiredNominators: 'Vec', - }, - SlashingAllowedForChanged: { - slashingSwitch: 'PalletStakingSlashingSwitch', - }, - RewardPaymentSchedulingInterrupted: { - accountId: 'AccountId32', - era: 'u32', - error: 'SpRuntimeDispatchError', - }, - CommissionCapUpdated: { - governanceCouncillDid: 'PolymeshPrimitivesIdentityId', - oldCommissionCap: 'Perbill', - newCommissionCap: 'Perbill' + mode: 'PalletStakingForcing' } } }, /** - * Lookup101: pallet_staking::ValidatorPrefs + * Lookup96: pallet_staking::ValidatorPrefs **/ PalletStakingValidatorPrefs: { commission: 'Compact', blocked: 'bool' }, /** - * Lookup103: pallet_staking::Forcing + * Lookup98: pallet_staking::Forcing **/ PalletStakingForcing: { _enum: ['NotForcing', 'ForceNew', 'ForceNone', 'ForceAlways'] }, /** - * Lookup104: pallet_staking::types::SlashingSwitch - **/ - PalletStakingSlashingSwitch: { - _enum: ['Validator', 'ValidatorAndNominator', 'None'] - }, - /** - * Lookup105: pallet_offences::pallet::Event + * Lookup99: pallet_offences::pallet::Event **/ PalletOffencesEvent: { _enum: { @@ -759,7 +660,7 @@ export default { } }, /** - * Lookup106: pallet_session::pallet::Event + * Lookup100: pallet_session::pallet::Event **/ PalletSessionEvent: { _enum: { @@ -769,7 +670,7 @@ export default { } }, /** - * Lookup107: pallet_grandpa::pallet::Event + * Lookup101: pallet_grandpa::pallet::Event **/ PalletGrandpaEvent: { _enum: { @@ -781,15 +682,15 @@ export default { } }, /** - * Lookup110: sp_consensus_grandpa::app::Public + * Lookup104: sp_consensus_grandpa::app::Public **/ SpConsensusGrandpaAppPublic: 'SpCoreEd25519Public', /** - * Lookup111: sp_core::ed25519::Public + * Lookup105: sp_core::ed25519::Public **/ SpCoreEd25519Public: '[u8;32]', /** - * Lookup112: pallet_im_online::pallet::Event + * Lookup106: pallet_im_online::pallet::Event **/ PalletImOnlineEvent: { _enum: { @@ -803,15 +704,15 @@ export default { } }, /** - * Lookup113: pallet_im_online::sr25519::app_sr25519::Public + * Lookup107: pallet_im_online::sr25519::app_sr25519::Public **/ PalletImOnlineSr25519AppSr25519Public: 'SpCoreSr25519Public', /** - * Lookup114: sp_core::sr25519::Public + * Lookup108: sp_core::sr25519::Public **/ SpCoreSr25519Public: '[u8;32]', /** - * Lookup117: pallet_staking::Exposure + * Lookup111: pallet_staking::Exposure **/ PalletStakingExposure: { total: 'Compact', @@ -819,26 +720,32 @@ export default { others: 'Vec' }, /** - * Lookup120: pallet_staking::IndividualExposure + * Lookup114: pallet_staking::IndividualExposure **/ PalletStakingIndividualExposure: { who: 'AccountId32', value: 'Compact' }, /** - * Lookup121: pallet_sudo::RawEvent + * Lookup115: pallet_sudo::pallet::Event **/ - PalletSudoRawEvent: { + PalletSudoEvent: { _enum: { - Sudid: 'Result', - KeyChanged: 'Option', - SudoAsDone: 'Result' + Sudid: { + sudoResult: 'Result', + }, + KeyChanged: { + oldSudoer: 'Option', + }, + SudoAsDone: { + sudoResult: 'Result' + } } }, /** - * Lookup122: polymesh_common_utilities::traits::asset::RawEvent + * Lookup116: pallet_asset::pallet::Event **/ - PolymeshCommonUtilitiesAssetRawEvent: { + PalletAssetEvent: { _enum: { AssetCreated: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId,bool,PolymeshPrimitivesAssetAssetType,PolymeshPrimitivesIdentityId,Bytes,Vec,Option)', IdentifiersUpdated: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId,Vec)', @@ -869,11 +776,13 @@ export default { RemovePreApprovedAsset: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId)', AssetMediatorsAdded: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId,BTreeSet)', AssetMediatorsRemoved: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId,BTreeSet)', - TickerLinkedToAsset: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesTicker,PolymeshPrimitivesAssetAssetId)' + TickerLinkedToAsset: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesTicker,PolymeshPrimitivesAssetAssetId)', + TickerUnlinkedFromAsset: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesTicker,PolymeshPrimitivesAssetAssetId)', + GlobalMetadataSpecUpdated: '(Bytes,PolymeshPrimitivesAssetMetadataAssetMetadataSpec)' } }, /** - * Lookup123: polymesh_primitives::asset::AssetType + * Lookup117: polymesh_primitives::asset::AssetType **/ PolymeshPrimitivesAssetAssetType: { _enum: { @@ -892,7 +801,7 @@ export default { } }, /** - * Lookup125: polymesh_primitives::asset::NonFungibleType + * Lookup119: polymesh_primitives::asset::NonFungibleType **/ PolymeshPrimitivesAssetNonFungibleType: { _enum: { @@ -903,7 +812,7 @@ export default { } }, /** - * Lookup128: polymesh_primitives::asset_identifier::AssetIdentifier + * Lookup122: polymesh_primitives::asset_identifier::AssetIdentifier **/ PolymeshPrimitivesAssetIdentifier: { _enum: { @@ -915,7 +824,7 @@ export default { } }, /** - * Lookup134: polymesh_primitives::document::Document + * Lookup128: polymesh_primitives::document::Document **/ PolymeshPrimitivesDocument: { uri: 'Bytes', @@ -925,7 +834,7 @@ export default { filingDate: 'Option' }, /** - * Lookup136: polymesh_primitives::document_hash::DocumentHash + * Lookup130: polymesh_primitives::document_hash::DocumentHash **/ PolymeshPrimitivesDocumentHash: { _enum: { @@ -941,14 +850,14 @@ export default { } }, /** - * Lookup147: polymesh_primitives::asset_metadata::AssetMetadataValueDetail + * Lookup141: polymesh_primitives::asset_metadata::AssetMetadataValueDetail **/ PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail: { expire: 'Option', lockStatus: 'PolymeshPrimitivesAssetMetadataAssetMetadataLockStatus' }, /** - * Lookup148: polymesh_primitives::asset_metadata::AssetMetadataLockStatus + * Lookup142: polymesh_primitives::asset_metadata::AssetMetadataLockStatus **/ PolymeshPrimitivesAssetMetadataAssetMetadataLockStatus: { _enum: { @@ -958,7 +867,7 @@ export default { } }, /** - * Lookup151: polymesh_primitives::asset_metadata::AssetMetadataSpec + * Lookup145: polymesh_primitives::asset_metadata::AssetMetadataSpec **/ PolymeshPrimitivesAssetMetadataAssetMetadataSpec: { url: 'Option', @@ -966,7 +875,7 @@ export default { typeDef: 'Option' }, /** - * Lookup158: polymesh_primitives::asset_metadata::AssetMetadataKey + * Lookup152: polymesh_primitives::asset_metadata::AssetMetadataKey **/ PolymeshPrimitivesAssetMetadataAssetMetadataKey: { _enum: { @@ -975,7 +884,7 @@ export default { } }, /** - * Lookup160: polymesh_primitives::portfolio::PortfolioUpdateReason + * Lookup154: polymesh_primitives::portfolio::PortfolioUpdateReason **/ PolymeshPrimitivesPortfolioPortfolioUpdateReason: { _enum: { @@ -991,9 +900,9 @@ export default { } }, /** - * Lookup164: pallet_corporate_actions::distribution::Event + * Lookup158: pallet_corporate_actions::distribution::pallet::Event **/ - PalletCorporateActionsDistributionEvent: { + PalletCorporateActionsDistributionPalletEvent: { _enum: { Created: '(PolymeshPrimitivesEventOnly,PalletCorporateActionsCaId,PalletCorporateActionsDistribution)', BenefitClaimed: '(PolymeshPrimitivesEventOnly,PolymeshPrimitivesEventOnly,PalletCorporateActionsCaId,PalletCorporateActionsDistribution,u128,Permill)', @@ -1002,18 +911,18 @@ export default { } }, /** - * Lookup165: polymesh_primitives::event_only::EventOnly + * Lookup159: polymesh_primitives::event_only::EventOnly **/ PolymeshPrimitivesEventOnly: 'PolymeshPrimitivesIdentityId', /** - * Lookup166: pallet_corporate_actions::CAId + * Lookup160: pallet_corporate_actions::CAId **/ PalletCorporateActionsCaId: { assetId: 'PolymeshPrimitivesAssetAssetId', localId: 'u32' }, /** - * Lookup168: pallet_corporate_actions::distribution::Distribution + * Lookup162: pallet_corporate_actions::distribution::Distribution **/ PalletCorporateActionsDistribution: { from: 'PolymeshPrimitivesIdentityIdPortfolioId', @@ -1026,9 +935,9 @@ export default { expiresAt: 'Option' }, /** - * Lookup170: polymesh_common_utilities::traits::checkpoint::Event + * Lookup164: pallet_asset::checkpoint::pallet::Event **/ - PolymeshCommonUtilitiesCheckpointEvent: { + PalletAssetCheckpointPalletEvent: { _enum: { CheckpointCreated: '(Option,PolymeshPrimitivesAssetAssetId,u64,u128,u64)', MaximumSchedulesComplexityChanged: '(PolymeshPrimitivesIdentityId,u64)', @@ -1037,15 +946,15 @@ export default { } }, /** - * Lookup173: polymesh_common_utilities::traits::checkpoint::ScheduleCheckpoints + * Lookup167: polymesh_common_utilities::traits::checkpoint::ScheduleCheckpoints **/ PolymeshCommonUtilitiesCheckpointScheduleCheckpoints: { pending: 'BTreeSet' }, /** - * Lookup176: polymesh_common_utilities::traits::compliance_manager::Event + * Lookup170: pallet_compliance_manager::pallet::Event **/ - PolymeshCommonUtilitiesComplianceManagerEvent: { + PalletComplianceManagerEvent: { _enum: { ComplianceRequirementCreated: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId,PolymeshPrimitivesComplianceManagerComplianceRequirement)', ComplianceRequirementRemoved: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId,u32)', @@ -1059,7 +968,7 @@ export default { } }, /** - * Lookup177: polymesh_primitives::compliance_manager::ComplianceRequirement + * Lookup171: polymesh_primitives::compliance_manager::ComplianceRequirement **/ PolymeshPrimitivesComplianceManagerComplianceRequirement: { senderConditions: 'Vec', @@ -1067,14 +976,14 @@ export default { id: 'u32' }, /** - * Lookup179: polymesh_primitives::condition::Condition + * Lookup173: polymesh_primitives::condition::Condition **/ PolymeshPrimitivesCondition: { conditionType: 'PolymeshPrimitivesConditionConditionType', issuers: 'Vec' }, /** - * Lookup180: polymesh_primitives::condition::ConditionType + * Lookup174: polymesh_primitives::condition::ConditionType **/ PolymeshPrimitivesConditionConditionType: { _enum: { @@ -1086,7 +995,7 @@ export default { } }, /** - * Lookup182: polymesh_primitives::condition::TargetIdentity + * Lookup176: polymesh_primitives::condition::TargetIdentity **/ PolymeshPrimitivesConditionTargetIdentity: { _enum: { @@ -1095,14 +1004,14 @@ export default { } }, /** - * Lookup184: polymesh_primitives::condition::TrustedIssuer + * Lookup178: polymesh_primitives::condition::TrustedIssuer **/ PolymeshPrimitivesConditionTrustedIssuer: { issuer: 'PolymeshPrimitivesIdentityId', trustedFor: 'PolymeshPrimitivesConditionTrustedFor' }, /** - * Lookup185: polymesh_primitives::condition::TrustedFor + * Lookup179: polymesh_primitives::condition::TrustedFor **/ PolymeshPrimitivesConditionTrustedFor: { _enum: { @@ -1111,7 +1020,7 @@ export default { } }, /** - * Lookup187: polymesh_primitives::identity_claim::ClaimType + * Lookup181: polymesh_primitives::identity_claim::ClaimType **/ PolymeshPrimitivesIdentityClaimClaimType: { _enum: { @@ -1128,7 +1037,7 @@ export default { } }, /** - * Lookup189: pallet_corporate_actions::Event + * Lookup183: pallet_corporate_actions::pallet::Event **/ PalletCorporateActionsEvent: { _enum: { @@ -1143,20 +1052,20 @@ export default { } }, /** - * Lookup190: pallet_corporate_actions::TargetIdentities + * Lookup184: pallet_corporate_actions::TargetIdentities **/ PalletCorporateActionsTargetIdentities: { identities: 'Vec', treatment: 'PalletCorporateActionsTargetTreatment' }, /** - * Lookup191: pallet_corporate_actions::TargetTreatment + * Lookup185: pallet_corporate_actions::TargetTreatment **/ PalletCorporateActionsTargetTreatment: { _enum: ['Include', 'Exclude'] }, /** - * Lookup193: pallet_corporate_actions::CorporateAction + * Lookup187: pallet_corporate_actions::CorporateAction **/ PalletCorporateActionsCorporateAction: { kind: 'PalletCorporateActionsCaKind', @@ -1167,20 +1076,20 @@ export default { withholdingTax: 'Vec<(PolymeshPrimitivesIdentityId,Permill)>' }, /** - * Lookup194: pallet_corporate_actions::CAKind + * Lookup188: pallet_corporate_actions::CAKind **/ PalletCorporateActionsCaKind: { _enum: ['PredictableBenefit', 'UnpredictableBenefit', 'IssuerNotice', 'Reorganization', 'Other'] }, /** - * Lookup196: pallet_corporate_actions::RecordDate + * Lookup190: pallet_corporate_actions::RecordDate **/ PalletCorporateActionsRecordDate: { date: 'u64', checkpoint: 'PalletCorporateActionsCaCheckpoint' }, /** - * Lookup197: pallet_corporate_actions::CACheckpoint + * Lookup191: pallet_corporate_actions::CACheckpoint **/ PalletCorporateActionsCaCheckpoint: { _enum: { @@ -1189,9 +1098,9 @@ export default { } }, /** - * Lookup202: pallet_corporate_actions::ballot::Event + * Lookup196: pallet_corporate_actions::ballot::pallet::Event **/ - PalletCorporateActionsBallotEvent: { + PalletCorporateActionsBallotPalletEvent: { _enum: { Created: '(PolymeshPrimitivesIdentityId,PalletCorporateActionsCaId,PalletCorporateActionsBallotBallotTimeRange,PalletCorporateActionsBallotBallotMeta,bool)', VoteCast: '(PolymeshPrimitivesIdentityId,PalletCorporateActionsCaId,Vec)', @@ -1202,21 +1111,21 @@ export default { } }, /** - * Lookup203: pallet_corporate_actions::ballot::BallotTimeRange + * Lookup197: pallet_corporate_actions::ballot::BallotTimeRange **/ PalletCorporateActionsBallotBallotTimeRange: { start: 'u64', end: 'u64' }, /** - * Lookup204: pallet_corporate_actions::ballot::BallotMeta + * Lookup198: pallet_corporate_actions::ballot::BallotMeta **/ PalletCorporateActionsBallotBallotMeta: { title: 'Bytes', motions: 'Vec' }, /** - * Lookup207: pallet_corporate_actions::ballot::Motion + * Lookup201: pallet_corporate_actions::ballot::Motion **/ PalletCorporateActionsBallotMotion: { title: 'Bytes', @@ -1224,26 +1133,26 @@ export default { choices: 'Vec' }, /** - * Lookup213: pallet_corporate_actions::ballot::BallotVote + * Lookup207: pallet_corporate_actions::ballot::BallotVote **/ PalletCorporateActionsBallotBallotVote: { power: 'u128', fallback: 'Option' }, /** - * Lookup216: pallet_pips::RawEvent + * Lookup210: pallet_pips::pallet::Event **/ - PalletPipsRawEvent: { + PalletPipsEvent: { _enum: { HistoricalPipsPruned: '(PolymeshPrimitivesIdentityId,bool,bool)', - ProposalCreated: '(PolymeshPrimitivesIdentityId,PalletPipsProposer,u32,u128,Option,Option,PolymeshCommonUtilitiesMaybeBlock,PalletPipsProposalData)', + ProposalCreated: '(PolymeshPrimitivesIdentityId,PalletPipsProposer,u32,u128,Option,Option,PolymeshPrimitivesMaybeBlock,PalletPipsProposalData)', ProposalStateUpdated: '(PolymeshPrimitivesIdentityId,u32,PalletPipsProposalState)', Voted: '(PolymeshPrimitivesIdentityId,AccountId32,u32,bool,u128)', PipClosed: '(PolymeshPrimitivesIdentityId,u32,bool)', ExecutionScheduled: '(PolymeshPrimitivesIdentityId,u32,u32)', DefaultEnactmentPeriodChanged: '(PolymeshPrimitivesIdentityId,u32,u32)', MinimumProposalDepositChanged: '(PolymeshPrimitivesIdentityId,u128,u128)', - PendingPipExpiryChanged: '(PolymeshPrimitivesIdentityId,PolymeshCommonUtilitiesMaybeBlock,PolymeshCommonUtilitiesMaybeBlock)', + PendingPipExpiryChanged: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesMaybeBlock,PolymeshPrimitivesMaybeBlock)', MaxPipSkipCountChanged: '(PolymeshPrimitivesIdentityId,u8,u8)', ActivePipLimitChanged: '(PolymeshPrimitivesIdentityId,u32,u32)', ProposalRefund: '(PolymeshPrimitivesIdentityId,u32,u128)', @@ -1258,7 +1167,7 @@ export default { } }, /** - * Lookup217: pallet_pips::Proposer + * Lookup211: pallet_pips::types::Proposer **/ PalletPipsProposer: { _enum: { @@ -1267,13 +1176,13 @@ export default { } }, /** - * Lookup218: pallet_pips::Committee + * Lookup212: pallet_pips::types::Committee **/ PalletPipsCommittee: { _enum: ['Technical', 'Upgrade'] }, /** - * Lookup222: pallet_pips::ProposalData + * Lookup216: pallet_pips::types::ProposalData **/ PalletPipsProposalData: { _enum: { @@ -1282,22 +1191,22 @@ export default { } }, /** - * Lookup223: pallet_pips::ProposalState + * Lookup217: pallet_pips::types::ProposalState **/ PalletPipsProposalState: { _enum: ['Pending', 'Rejected', 'Scheduled', 'Failed', 'Executed', 'Expired'] }, /** - * Lookup226: pallet_pips::SnapshottedPip + * Lookup220: pallet_pips::types::SnapshottedPip **/ PalletPipsSnapshottedPip: { id: 'u32', weight: '(bool,u128)' }, /** - * Lookup232: polymesh_common_utilities::traits::portfolio::Event + * Lookup226: pallet_portfolio::pallet::Event **/ - PolymeshCommonUtilitiesPortfolioEvent: { + PalletPortfolioEvent: { _enum: { PortfolioCreated: '(PolymeshPrimitivesIdentityId,u64,Bytes)', PortfolioDeleted: '(PolymeshPrimitivesIdentityId,u64)', @@ -1306,11 +1215,13 @@ export default { PortfolioCustodianChanged: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityIdPortfolioId,PolymeshPrimitivesIdentityId)', FundsMovedBetweenPortfolios: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityIdPortfolioId,PolymeshPrimitivesIdentityIdPortfolioId,PolymeshPrimitivesPortfolioFundDescription,Option)', PreApprovedPortfolio: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityIdPortfolioId,PolymeshPrimitivesAssetAssetId)', - RevokePreApprovedPortfolio: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityIdPortfolioId,PolymeshPrimitivesAssetAssetId)' + RevokePreApprovedPortfolio: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityIdPortfolioId,PolymeshPrimitivesAssetAssetId)', + AllowIdentityToCreatePortfolios: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)', + RevokeCreatePortfoliosPermission: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId)' } }, /** - * Lookup236: polymesh_primitives::portfolio::FundDescription + * Lookup230: polymesh_primitives::portfolio::FundDescription **/ PolymeshPrimitivesPortfolioFundDescription: { _enum: { @@ -1322,16 +1233,16 @@ export default { } }, /** - * Lookup237: polymesh_primitives::nft::NFTs + * Lookup231: polymesh_primitives::nft::NFTs **/ PolymeshPrimitivesNftNfTs: { assetId: 'PolymeshPrimitivesAssetAssetId', ids: 'Vec' }, /** - * Lookup240: pallet_protocol_fee::RawEvent + * Lookup234: pallet_protocol_fee::pallet::Event **/ - PalletProtocolFeeRawEvent: { + PalletProtocolFeeEvent: { _enum: { FeeSet: '(PolymeshPrimitivesIdentityId,u128)', CoefficientSet: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesPosRatio)', @@ -1339,11 +1250,11 @@ export default { } }, /** - * Lookup241: polymesh_primitives::PosRatio + * Lookup235: polymesh_primitives::PosRatio **/ PolymeshPrimitivesPosRatio: '(u32,u32)', /** - * Lookup242: pallet_scheduler::pallet::Event + * Lookup236: pallet_scheduler::pallet::Event **/ PalletSchedulerEvent: { _enum: { @@ -1375,9 +1286,9 @@ export default { } }, /** - * Lookup245: polymesh_common_utilities::traits::settlement::RawEvent + * Lookup239: pallet_settlement::pallet::Event **/ - PolymeshCommonUtilitiesSettlementRawEvent: { + PalletSettlementEvent: { _enum: { VenueCreated: '(PolymeshPrimitivesIdentityId,u64,Bytes,PolymeshPrimitivesSettlementVenueType)', VenueDetailsUpdated: '(PolymeshPrimitivesIdentityId,u64,Bytes)', @@ -1390,7 +1301,6 @@ export default { VenuesAllowed: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId,Vec)', VenuesBlocked: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId,Vec)', LegFailedExecution: '(PolymeshPrimitivesIdentityId,u64,u64)', - InstructionFailed: '(PolymeshPrimitivesIdentityId,u64)', InstructionExecuted: '(PolymeshPrimitivesIdentityId,u64)', VenueUnauthorized: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId,u64)', SchedulingFailed: '(u64,SpRuntimeDispatchError)', @@ -1402,31 +1312,33 @@ export default { InstructionAutomaticallyAffirmed: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityIdPortfolioId,u64)', MediatorAffirmationReceived: '(PolymeshPrimitivesIdentityId,u64,Option)', MediatorAffirmationWithdrawn: '(PolymeshPrimitivesIdentityId,u64)', - InstructionMediators: '(u64,BTreeSet)' + InstructionMediators: '(u64,BTreeSet)', + InstructionLocked: '(PolymeshPrimitivesIdentityId,u64)' } }, /** - * Lookup248: polymesh_primitives::settlement::VenueType + * Lookup242: polymesh_primitives::settlement::VenueType **/ PolymeshPrimitivesSettlementVenueType: { _enum: ['Other', 'Distribution', 'Sto', 'Exchange'] }, /** - * Lookup251: polymesh_primitives::settlement::ReceiptMetadata + * Lookup245: polymesh_primitives::settlement::ReceiptMetadata **/ PolymeshPrimitivesSettlementReceiptMetadata: '[u8;32]', /** - * Lookup254: polymesh_primitives::settlement::SettlementType + * Lookup248: polymesh_primitives::settlement::SettlementType **/ PolymeshPrimitivesSettlementSettlementType: { _enum: { SettleOnAffirmation: 'Null', SettleOnBlock: 'u32', - SettleManual: 'u32' + SettleManual: 'u32', + SettleAfterLock: 'Null' } }, /** - * Lookup256: polymesh_primitives::settlement::Leg + * Lookup250: polymesh_primitives::settlement::Leg **/ PolymeshPrimitivesSettlementLeg: { _enum: { @@ -1450,9 +1362,9 @@ export default { } }, /** - * Lookup257: polymesh_common_utilities::traits::statistics::Event + * Lookup251: pallet_statistics::pallet::Event **/ - PolymeshCommonUtilitiesStatisticsEvent: { + PalletStatisticsEvent: { _enum: { StatTypesAdded: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId,Vec)', StatTypesRemoved: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId,Vec)', @@ -1463,27 +1375,27 @@ export default { } }, /** - * Lookup259: polymesh_primitives::statistics::StatType + * Lookup253: polymesh_primitives::statistics::StatType **/ PolymeshPrimitivesStatisticsStatType: { operationType: 'PolymeshPrimitivesStatisticsStatOpType', claimIssuer: 'Option<(PolymeshPrimitivesIdentityClaimClaimType,PolymeshPrimitivesIdentityId)>' }, /** - * Lookup260: polymesh_primitives::statistics::StatOpType + * Lookup254: polymesh_primitives::statistics::StatOpType **/ PolymeshPrimitivesStatisticsStatOpType: { _enum: ['Count', 'Balance'] }, /** - * Lookup264: polymesh_primitives::statistics::StatUpdate + * Lookup258: polymesh_primitives::statistics::StatUpdate **/ PolymeshPrimitivesStatisticsStatUpdate: { key2: 'PolymeshPrimitivesStatisticsStat2ndKey', value: 'Option' }, /** - * Lookup265: polymesh_primitives::statistics::Stat2ndKey + * Lookup259: polymesh_primitives::statistics::Stat2ndKey **/ PolymeshPrimitivesStatisticsStat2ndKey: { _enum: { @@ -1492,7 +1404,7 @@ export default { } }, /** - * Lookup266: polymesh_primitives::statistics::StatClaim + * Lookup260: polymesh_primitives::statistics::StatClaim **/ PolymeshPrimitivesStatisticsStatClaim: { _enum: { @@ -1502,7 +1414,7 @@ export default { } }, /** - * Lookup270: polymesh_primitives::transfer_compliance::TransferCondition + * Lookup264: polymesh_primitives::transfer_compliance::TransferCondition **/ PolymeshPrimitivesTransferComplianceTransferCondition: { _enum: { @@ -1513,7 +1425,7 @@ export default { } }, /** - * Lookup271: polymesh_primitives::transfer_compliance::TransferConditionExemptKey + * Lookup265: polymesh_primitives::transfer_compliance::TransferConditionExemptKey **/ PolymeshPrimitivesTransferComplianceTransferConditionExemptKey: { assetId: 'PolymeshPrimitivesAssetAssetId', @@ -1521,20 +1433,60 @@ export default { claimType: 'Option' }, /** - * Lookup273: pallet_sto::RawEvent + * Lookup267: pallet_sto::pallet::Event **/ - PalletStoRawEvent: { + PalletStoEvent: { _enum: { - FundraiserCreated: '(PolymeshPrimitivesIdentityId,u64,Bytes,PalletStoFundraiser)', - Invested: '(PolymeshPrimitivesIdentityId,u64,PolymeshPrimitivesAssetAssetId,PolymeshPrimitivesAssetAssetId,u128,u128)', - FundraiserFrozen: '(PolymeshPrimitivesIdentityId,u64)', - FundraiserUnfrozen: '(PolymeshPrimitivesIdentityId,u64)', - FundraiserWindowModified: '(PolymeshPrimitivesEventOnly,u64,u64,Option,u64,Option)', - FundraiserClosed: '(PolymeshPrimitivesIdentityId,u64)' + FundraiserCreated: { + agentDid: 'PolymeshPrimitivesIdentityId', + offeringAsset: 'PolymeshPrimitivesAssetAssetId', + raisingAsset: 'PolymeshPrimitivesAssetAssetId', + fundraiserId: 'u64', + fundraiserName: 'Bytes', + fundraiser: 'PalletStoFundraiser', + }, + Invested: { + investorDid: 'PolymeshPrimitivesIdentityId', + offeringAsset: 'PolymeshPrimitivesAssetAssetId', + fundraiserId: 'u64', + fundingAsset: 'PalletStoFundingAsset', + offeringAmount: 'u128', + raiseAmount: 'u128', + }, + FundraiserFrozen: { + agentDid: 'PolymeshPrimitivesIdentityId', + offeringAsset: 'PolymeshPrimitivesAssetAssetId', + fundraiserId: 'u64', + }, + FundraiserUnfrozen: { + agentDid: 'PolymeshPrimitivesIdentityId', + offeringAsset: 'PolymeshPrimitivesAssetAssetId', + fundraiserId: 'u64', + }, + FundraiserWindowModified: { + agentDid: 'PolymeshPrimitivesEventOnly', + offeringAsset: 'PolymeshPrimitivesAssetAssetId', + fundraiserId: 'u64', + oldStart: 'u64', + oldEnd: 'Option', + newStart: 'u64', + newEnd: 'Option', + }, + FundraiserClosed: { + agentDid: 'PolymeshPrimitivesIdentityId', + offeringAsset: 'PolymeshPrimitivesAssetAssetId', + fundraiserId: 'u64', + }, + FundraiserOffchainFundingEnabled: { + agentDid: 'PolymeshPrimitivesIdentityId', + offeringAsset: 'PolymeshPrimitivesAssetAssetId', + fundraiserId: 'u64', + ticker: 'PolymeshPrimitivesTicker' + } } }, /** - * Lookup276: pallet_sto::Fundraiser + * Lookup270: pallet_sto::Fundraiser **/ PalletStoFundraiser: { creator: 'PolymeshPrimitivesIdentityId', @@ -1550,7 +1502,7 @@ export default { minimumInvestment: 'u128' }, /** - * Lookup278: pallet_sto::FundraiserTier + * Lookup272: pallet_sto::FundraiserTier **/ PalletStoFundraiserTier: { total: 'u128', @@ -1558,15 +1510,24 @@ export default { remaining: 'u128' }, /** - * Lookup279: pallet_sto::FundraiserStatus + * Lookup273: pallet_sto::FundraiserStatus **/ PalletStoFundraiserStatus: { _enum: ['Live', 'Frozen', 'Closed', 'ClosedEarly'] }, /** - * Lookup280: pallet_treasury::RawEvent + * Lookup274: pallet_sto::FundingAsset **/ - PalletTreasuryRawEvent: { + PalletStoFundingAsset: { + _enum: { + OnChain: 'PolymeshPrimitivesAssetAssetId', + OffChain: 'PolymeshPrimitivesTicker' + } + }, + /** + * Lookup275: pallet_treasury::pallet::Event + **/ + PalletTreasuryEvent: { _enum: { TreasuryDisbursement: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId,AccountId32,u128)', TreasuryDisbursementFailed: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesIdentityId,AccountId32,u128)', @@ -1574,7 +1535,7 @@ export default { } }, /** - * Lookup281: pallet_utility::pallet::Event + * Lookup276: pallet_utility::pallet::Event **/ PalletUtilityEvent: { _enum: { @@ -1594,25 +1555,22 @@ export default { RelayedTx: { callerDid: 'PolymeshPrimitivesIdentityId', target: 'AccountId32', - result: 'Result', - }, - BatchInterruptedOld: '(Vec,(u32,SpRuntimeDispatchError))', - BatchOptimisticFailed: '(Vec,Vec<(u32,SpRuntimeDispatchError)>)', - BatchCompletedOld: 'Vec' + result: 'Result' + } } }, /** - * Lookup285: polymesh_common_utilities::traits::base::Event + * Lookup277: pallet_base::pallet::Event **/ - PolymeshCommonUtilitiesBaseEvent: { + PalletBaseEvent: { _enum: { UnexpectedError: 'Option' } }, /** - * Lookup287: polymesh_common_utilities::traits::external_agents::Event + * Lookup279: pallet_external_agents::pallet::Event **/ - PolymeshCommonUtilitiesExternalAgentsEvent: { + PalletExternalAgentsEvent: { _enum: { GroupCreated: '(PolymeshPrimitivesEventOnly,PolymeshPrimitivesAssetAssetId,u32,PolymeshPrimitivesSecondaryKeyExtrinsicPermissions)', GroupPermissionsUpdated: '(PolymeshPrimitivesEventOnly,PolymeshPrimitivesAssetAssetId,u32,PolymeshPrimitivesSecondaryKeyExtrinsicPermissions)', @@ -1622,9 +1580,9 @@ export default { } }, /** - * Lookup288: polymesh_common_utilities::traits::relayer::RawEvent + * Lookup280: pallet_relayer::pallet::Event **/ - PolymeshCommonUtilitiesRelayerRawEvent: { + PalletRelayerEvent: { _enum: { AuthorizedPayingKey: '(PolymeshPrimitivesEventOnly,AccountId32,AccountId32,u128,u64)', AcceptedPayingKey: '(PolymeshPrimitivesEventOnly,AccountId32,AccountId32)', @@ -1633,7 +1591,7 @@ export default { } }, /** - * Lookup289: pallet_contracts::pallet::Event + * Lookup281: pallet_contracts::pallet::Event **/ PalletContractsEvent: { _enum: { @@ -1661,7 +1619,7 @@ export default { oldCodeHash: 'H256', }, Called: { - caller: 'AccountId32', + caller: 'PalletContractsOrigin', contract: 'AccountId32', }, DelegateCalled: { @@ -1671,34 +1629,47 @@ export default { } }, /** - * Lookup290: polymesh_contracts::RawEvent + * Lookup282: pallet_contracts::Origin + **/ + PalletContractsOrigin: { + _enum: { + Root: 'Null', + Signed: 'AccountId32' + } + }, + /** + * Lookup283: polymesh_runtime_develop::runtime::Runtime **/ - PolymeshContractsRawEvent: { + PolymeshRuntimeDevelopRuntime: 'Null', + /** + * Lookup284: polymesh_contracts::pallet::Event + **/ + PolymeshContractsEvent: { _enum: { ApiHashUpdated: '(PolymeshContractsApi,PolymeshContractsChainVersion,H256)', SCRuntimeCall: '(AccountId32,PolymeshContractsChainExtensionExtrinsicId)' } }, /** - * Lookup291: polymesh_contracts::Api + * Lookup285: polymesh_contracts::Api **/ PolymeshContractsApi: { desc: '[u8;4]', major: 'u32' }, /** - * Lookup292: polymesh_contracts::ChainVersion + * Lookup286: polymesh_contracts::ChainVersion **/ PolymeshContractsChainVersion: { specVersion: 'u32', txVersion: 'u32' }, /** - * Lookup293: polymesh_contracts::chain_extension::ExtrinsicId + * Lookup287: polymesh_contracts::chain_extension::ExtrinsicId **/ PolymeshContractsChainExtensionExtrinsicId: '(u8,u8)', /** - * Lookup294: pallet_preimage::pallet::Event + * Lookup288: pallet_preimage::pallet::Event **/ PalletPreimageEvent: { _enum: { @@ -1723,16 +1694,16 @@ export default { } }, /** - * Lookup295: polymesh_common_utilities::traits::nft::Event + * Lookup289: pallet_nft::pallet::Event **/ - PolymeshCommonUtilitiesNftEvent: { + PalletNftEvent: { _enum: { NftCollectionCreated: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesAssetAssetId,u64)', NFTPortfolioUpdated: '(PolymeshPrimitivesIdentityId,PolymeshPrimitivesNftNfTs,Option,Option,PolymeshPrimitivesPortfolioPortfolioUpdateReason)' } }, /** - * Lookup297: pallet_election_provider_multi_phase::pallet::Event + * Lookup291: pallet_election_provider_multi_phase::pallet::Event **/ PalletElectionProviderMultiPhaseEvent: { _enum: { @@ -1762,13 +1733,13 @@ export default { } }, /** - * Lookup298: pallet_election_provider_multi_phase::ElectionCompute + * Lookup292: pallet_election_provider_multi_phase::ElectionCompute **/ PalletElectionProviderMultiPhaseElectionCompute: { _enum: ['OnChain', 'Signed', 'Unsigned', 'Fallback', 'Emergency'] }, /** - * Lookup299: sp_npos_elections::ElectionScore + * Lookup293: sp_npos_elections::ElectionScore **/ SpNposElectionsElectionScore: { minimalStake: 'u128', @@ -1776,7 +1747,7 @@ export default { sumStakeSquared: 'u128' }, /** - * Lookup300: pallet_election_provider_multi_phase::Phase + * Lookup294: pallet_election_provider_multi_phase::Phase **/ PalletElectionProviderMultiPhasePhase: { _enum: { @@ -1787,16 +1758,7 @@ export default { } }, /** - * Lookup302: pallet_test_utils::RawEvent - **/ - PalletTestUtilsRawEvent: { - _enum: { - DidStatus: '(PolymeshPrimitivesIdentityId,AccountId32)', - CddStatus: '(Option,AccountId32,bool)' - } - }, - /** - * Lookup303: frame_system::Phase + * Lookup296: frame_system::Phase **/ FrameSystemPhase: { _enum: { @@ -1806,14 +1768,14 @@ export default { } }, /** - * Lookup306: frame_system::LastRuntimeUpgradeInfo + * Lookup299: frame_system::LastRuntimeUpgradeInfo **/ FrameSystemLastRuntimeUpgradeInfo: { specVersion: 'Compact', specName: 'Text' }, /** - * Lookup308: frame_system::pallet::Call + * Lookup301: frame_system::pallet::Call **/ FrameSystemCall: { _enum: { @@ -1848,7 +1810,7 @@ export default { } }, /** - * Lookup312: frame_system::limits::BlockWeights + * Lookup305: frame_system::limits::BlockWeights **/ FrameSystemLimitsBlockWeights: { baseBlock: 'SpWeightsWeightV2Weight', @@ -1856,7 +1818,7 @@ export default { perClass: 'FrameSupportDispatchPerDispatchClassWeightsPerClass' }, /** - * Lookup313: frame_support::dispatch::PerDispatchClass + * Lookup306: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassWeightsPerClass: { normal: 'FrameSystemLimitsWeightsPerClass', @@ -1864,7 +1826,7 @@ export default { mandatory: 'FrameSystemLimitsWeightsPerClass' }, /** - * Lookup314: frame_system::limits::WeightsPerClass + * Lookup307: frame_system::limits::WeightsPerClass **/ FrameSystemLimitsWeightsPerClass: { baseExtrinsic: 'SpWeightsWeightV2Weight', @@ -1873,13 +1835,13 @@ export default { reserved: 'Option' }, /** - * Lookup316: frame_system::limits::BlockLength + * Lookup309: frame_system::limits::BlockLength **/ FrameSystemLimitsBlockLength: { max: 'FrameSupportDispatchPerDispatchClassU32' }, /** - * Lookup317: frame_support::dispatch::PerDispatchClass + * Lookup310: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassU32: { normal: 'u32', @@ -1887,14 +1849,14 @@ export default { mandatory: 'u32' }, /** - * Lookup318: sp_weights::RuntimeDbWeight + * Lookup311: sp_weights::RuntimeDbWeight **/ SpWeightsRuntimeDbWeight: { read: 'u64', write: 'u64' }, /** - * Lookup319: sp_version::RuntimeVersion + * Lookup312: sp_version::RuntimeVersion **/ SpVersionRuntimeVersion: { specName: 'Text', @@ -1907,17 +1869,17 @@ export default { stateVersion: 'u8' }, /** - * Lookup324: frame_system::pallet::Error + * Lookup317: frame_system::pallet::Error **/ FrameSystemError: { _enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered'] }, /** - * Lookup327: sp_consensus_babe::app::Public + * Lookup320: sp_consensus_babe::app::Public **/ SpConsensusBabeAppPublic: 'SpCoreSr25519Public', /** - * Lookup330: sp_consensus_babe::digests::NextConfigDescriptor + * Lookup323: sp_consensus_babe::digests::NextConfigDescriptor **/ SpConsensusBabeDigestsNextConfigDescriptor: { _enum: { @@ -1929,13 +1891,13 @@ export default { } }, /** - * Lookup332: sp_consensus_babe::AllowedSlots + * Lookup325: sp_consensus_babe::AllowedSlots **/ SpConsensusBabeAllowedSlots: { _enum: ['PrimarySlots', 'PrimaryAndSecondaryPlainSlots', 'PrimaryAndSecondaryVRFSlots'] }, /** - * Lookup336: sp_consensus_babe::digests::PreDigest + * Lookup329: sp_consensus_babe::digests::PreDigest **/ SpConsensusBabeDigestsPreDigest: { _enum: { @@ -1946,39 +1908,44 @@ export default { } }, /** - * Lookup337: sp_consensus_babe::digests::PrimaryPreDigest + * Lookup330: sp_consensus_babe::digests::PrimaryPreDigest **/ SpConsensusBabeDigestsPrimaryPreDigest: { authorityIndex: 'u32', slot: 'u64', - vrfOutput: '[u8;32]', - vrfProof: '[u8;64]' + vrfSignature: 'SpCoreSr25519VrfVrfSignature' }, /** - * Lookup338: sp_consensus_babe::digests::SecondaryPlainPreDigest + * Lookup331: sp_core::sr25519::vrf::VrfSignature + **/ + SpCoreSr25519VrfVrfSignature: { + output: '[u8;32]', + proof: '[u8;64]' + }, + /** + * Lookup332: sp_consensus_babe::digests::SecondaryPlainPreDigest **/ SpConsensusBabeDigestsSecondaryPlainPreDigest: { authorityIndex: 'u32', slot: 'u64' }, /** - * Lookup339: sp_consensus_babe::digests::SecondaryVRFPreDigest + * Lookup333: sp_consensus_babe::digests::SecondaryVRFPreDigest **/ SpConsensusBabeDigestsSecondaryVRFPreDigest: { authorityIndex: 'u32', slot: 'u64', - vrfOutput: '[u8;32]', - vrfProof: '[u8;64]' + vrfSignature: 'SpCoreSr25519VrfVrfSignature' }, /** - * Lookup340: sp_consensus_babe::BabeEpochConfiguration + * Lookup334: sp_consensus_babe::BabeEpochConfiguration **/ SpConsensusBabeBabeEpochConfiguration: { c: '(u64,u64)', allowedSlots: 'SpConsensusBabeAllowedSlots' }, /** - * Lookup344: pallet_babe::pallet::Call + * Lookup338: pallet_babe::pallet::Call **/ PalletBabeCall: { _enum: { @@ -1996,7 +1963,7 @@ export default { } }, /** - * Lookup345: sp_consensus_slots::EquivocationProof, sp_consensus_babe::app::Public> + * Lookup339: sp_consensus_slots::EquivocationProof, sp_consensus_babe::app::Public> **/ SpConsensusSlotsEquivocationProof: { offender: 'SpConsensusBabeAppPublic', @@ -2005,7 +1972,7 @@ export default { secondHeader: 'SpRuntimeHeader' }, /** - * Lookup346: sp_runtime::generic::header::Header + * Lookup340: sp_runtime::generic::header::Header **/ SpRuntimeHeader: { parentHash: 'H256', @@ -2015,11 +1982,7 @@ export default { digest: 'SpRuntimeDigest' }, /** - * Lookup347: sp_runtime::traits::BlakeTwo256 - **/ - SpRuntimeBlakeTwo256: 'Null', - /** - * Lookup348: sp_session::MembershipProof + * Lookup341: sp_session::MembershipProof **/ SpSessionMembershipProof: { session: 'u32', @@ -2027,13 +1990,13 @@ export default { validatorCount: 'u32' }, /** - * Lookup349: pallet_babe::pallet::Error + * Lookup342: pallet_babe::pallet::Error **/ PalletBabeError: { _enum: ['InvalidEquivocationProof', 'InvalidKeyOwnershipProof', 'DuplicateOffenceReport', 'InvalidConfiguration'] }, /** - * Lookup350: pallet_timestamp::pallet::Call + * Lookup343: pallet_timestamp::pallet::Call **/ PalletTimestampCall: { _enum: { @@ -2043,7 +2006,7 @@ export default { } }, /** - * Lookup352: pallet_indices::pallet::Call + * Lookup345: pallet_indices::pallet::Call **/ PalletIndicesCall: { _enum: { @@ -2074,27 +2037,27 @@ export default { } }, /** - * Lookup354: pallet_indices::pallet::Error + * Lookup347: pallet_indices::pallet::Error **/ PalletIndicesError: { _enum: ['NotAssigned', 'NotOwner', 'InUse', 'NotTransfer', 'Permanent'] }, /** - * Lookup356: pallet_balances::BalanceLock + * Lookup349: pallet_balances::pallet::BalanceLock **/ PalletBalancesBalanceLock: { id: '[u8;8]', amount: 'u128', - reasons: 'PolymeshCommonUtilitiesBalancesReasons' + reasons: 'PalletBalancesReasons' }, /** - * Lookup357: polymesh_common_utilities::traits::balances::Reasons + * Lookup350: pallet_balances::Reasons **/ - PolymeshCommonUtilitiesBalancesReasons: { + PalletBalancesReasons: { _enum: ['Fee', 'Misc', 'All'] }, /** - * Lookup358: pallet_balances::Call + * Lookup351: pallet_balances::pallet::Call **/ PalletBalancesCall: { _enum: { @@ -2126,19 +2089,29 @@ export default { } }, /** - * Lookup359: pallet_balances::Error + * Lookup352: pallet_balances::pallet::Error **/ PalletBalancesError: { _enum: ['LiquidityRestrictions', 'Overflow', 'InsufficientBalance', 'ExistentialDeposit', 'ReceiverCddMissing'] }, /** - * Lookup361: pallet_transaction_payment::Releases + * Lookup354: pallet_transaction_payment::Releases **/ PalletTransactionPaymentReleases: { _enum: ['V1Ancient', 'V2'] }, /** - * Lookup363: sp_weights::WeightToFeeCoefficient + * Lookup355: pallet_transaction_payment::pallet::Call + **/ + PalletTransactionPaymentCall: { + _enum: { + set_disable_fees: { + value: 'bool' + } + } + }, + /** + * Lookup357: sp_weights::WeightToFeeCoefficient **/ SpWeightsWeightToFeeCoefficient: { coeffInteger: 'u128', @@ -2147,27 +2120,27 @@ export default { degree: 'u8' }, /** - * Lookup364: polymesh_primitives::identity::DidRecord + * Lookup358: polymesh_primitives::identity::DidRecord **/ PolymeshPrimitivesIdentityDidRecord: { primaryKey: 'Option' }, /** - * Lookup366: pallet_identity::types::Claim1stKey + * Lookup360: pallet_identity::types::Claim1stKey **/ PalletIdentityClaim1stKey: { target: 'PolymeshPrimitivesIdentityId', claimType: 'PolymeshPrimitivesIdentityClaimClaimType' }, /** - * Lookup367: pallet_identity::types::Claim2ndKey + * Lookup361: pallet_identity::types::Claim2ndKey **/ PalletIdentityClaim2ndKey: { issuer: 'PolymeshPrimitivesIdentityId', scope: 'Option' }, /** - * Lookup368: polymesh_primitives::secondary_key::KeyRecord + * Lookup362: polymesh_primitives::secondary_key::KeyRecord **/ PolymeshPrimitivesSecondaryKeyKeyRecord: { _enum: { @@ -2177,7 +2150,7 @@ export default { } }, /** - * Lookup371: polymesh_primitives::secondary_key::Signatory + * Lookup365: polymesh_primitives::secondary_key::Signatory **/ PolymeshPrimitivesSecondaryKeySignatory: { _enum: { @@ -2186,7 +2159,7 @@ export default { } }, /** - * Lookup372: polymesh_primitives::authorization::Authorization + * Lookup366: polymesh_primitives::authorization::Authorization **/ PolymeshPrimitivesAuthorization: { authorizationData: 'PolymeshPrimitivesAuthorizationAuthorizationData', @@ -2196,7 +2169,7 @@ export default { count: 'u32' }, /** - * Lookup376: pallet_identity::Call + * Lookup370: pallet_identity::pallet::Call **/ PalletIdentityCall: { _enum: { @@ -2288,35 +2261,35 @@ export default { } }, /** - * Lookup378: polymesh_common_utilities::traits::identity::SecondaryKeyWithAuth + * Lookup372: polymesh_common_utilities::traits::identity::SecondaryKeyWithAuth **/ PolymeshCommonUtilitiesIdentitySecondaryKeyWithAuth: { secondaryKey: 'PolymeshPrimitivesSecondaryKey', authSignature: 'H512' }, /** - * Lookup381: polymesh_common_utilities::traits::identity::CreateChildIdentityWithAuth + * Lookup375: polymesh_common_utilities::traits::identity::CreateChildIdentityWithAuth **/ PolymeshCommonUtilitiesIdentityCreateChildIdentityWithAuth: { key: 'AccountId32', authSignature: 'H512' }, /** - * Lookup382: pallet_identity::Error + * Lookup376: pallet_identity::pallet::Error **/ PalletIdentityError: { - _enum: ['AlreadyLinked', 'MissingIdentity', 'Unauthorized', 'InvalidAccountKey', 'UnAuthorizedCddProvider', 'InvalidAuthorizationFromOwner', 'InvalidAuthorizationFromCddProvider', 'NotCddProviderAttestation', 'AuthorizationsNotForSameDids', 'DidMustAlreadyExist', 'AuthorizationExpired', 'TargetHasNoCdd', 'AuthorizationHasBeenRevoked', 'InvalidAuthorizationSignature', 'KeyNotAllowed', 'NotPrimaryKey', 'DidDoesNotExist', 'DidAlreadyExists', 'SecondaryKeysContainPrimaryKey', 'FailedToChargeFee', 'NotASigner', 'CannotDecodeSignerAccountId', 'MultiSigHasBalance', 'AccountKeyIsBeingUsed', 'CustomScopeTooLong', 'CustomClaimTypeAlreadyExists', 'CustomClaimTypeDoesNotExist', 'ClaimDoesNotExist', 'IsChildIdentity', 'NoParentIdentity', 'NotParentOrChildIdentity', 'DuplicateKey', 'ExceptNotAllowedForExtrinsics', 'ExceededNumberOfGivenAuths'] + _enum: ['AlreadyLinked', 'MissingIdentity', 'Unauthorized', 'InvalidAccountKey', 'UnAuthorizedCddProvider', 'InvalidAuthorizationFromOwner', 'InvalidAuthorizationFromCddProvider', 'NotCddProviderAttestation', 'AuthorizationsNotForSameDids', 'DidMustAlreadyExist', 'AuthorizationExpired', 'TargetHasNoCdd', 'AuthorizationHasBeenRevoked', 'InvalidAuthorizationSignature', 'KeyNotAllowed', 'NotPrimaryKey', 'DidDoesNotExist', 'DidAlreadyExists', 'SecondaryKeysContainPrimaryKey', 'FailedToChargeFee', 'NotASigner', 'CannotDecodeSignerAccountId', 'AccountKeyIsBeingUsed', 'CustomScopeTooLong', 'CustomClaimTypeAlreadyExists', 'CustomClaimTypeDoesNotExist', 'ClaimDoesNotExist', 'IsChildIdentity', 'NoParentIdentity', 'NotParentOrChildIdentity', 'DuplicateKey', 'ExceptNotAllowedForExtrinsics', 'ExceededNumberOfGivenAuths', 'BadAuthorizationType', 'InvalidAuthorization', 'UnauthorizedCallerFrozenDid', 'UnauthorizedCallerDidMissingCdd', 'UnauthorizedCallerMissingPermissions'] }, /** - * Lookup384: polymesh_common_utilities::traits::group::InactiveMember + * Lookup378: polymesh_primitives::traits::group::InactiveMember **/ - PolymeshCommonUtilitiesGroupInactiveMember: { + PolymeshPrimitivesGroupInactiveMember: { id: 'PolymeshPrimitivesIdentityId', deactivatedAt: 'u64', expiry: 'Option' }, /** - * Lookup385: pallet_group::Call + * Lookup379: pallet_group::pallet::Call **/ PalletGroupCall: { _enum: { @@ -2345,13 +2318,13 @@ export default { } }, /** - * Lookup386: pallet_group::Error + * Lookup380: pallet_group::pallet::Error **/ PalletGroupError: { _enum: ['OnlyPrimaryKeyAllowed', 'DuplicateMember', 'NoSuchMember', 'LastMemberCannotQuit', 'ActiveMembersLimitExceeded', 'ActiveMembersLimitOverflow'] }, /** - * Lookup388: pallet_committee::Call + * Lookup382: pallet_committee::pallet::Call **/ PalletCommitteeCall: { _enum: { @@ -2363,7 +2336,7 @@ export default { id: 'PolymeshPrimitivesIdentityId', }, set_expires_after: { - expiry: 'PolymeshCommonUtilitiesMaybeBlock', + expiry: 'PolymeshPrimitivesMaybeBlock', }, vote_or_propose: { approve: 'bool', @@ -2377,7 +2350,7 @@ export default { } }, /** - * Lookup394: pallet_multisig::pallet::Call + * Lookup388: pallet_multisig::pallet::Call **/ PalletMultisigCall: { _enum: { @@ -2394,7 +2367,7 @@ export default { approve: { multisig: 'AccountId32', proposalId: 'u64', - maxWeight: 'SpWeightsWeightV2Weight', + maxWeight: 'Option', }, reject: { multisig: 'AccountId32', @@ -2439,17 +2412,49 @@ export default { authId: 'u64', }, join_identity: { - authId: 'u64' + authId: 'u64', + }, + remove_admin: 'Null' + } + }, + /** + * Lookup390: pallet_validators::pallet::Call + **/ + PalletValidatorsCall: { + _enum: { + add_permissioned_validator: { + identity: 'PolymeshPrimitivesIdentityId', + intendedCount: 'Option', + }, + remove_permissioned_validator: { + identity: 'PolymeshPrimitivesIdentityId', + }, + payout_stakers_by_system: { + validatorStash: 'AccountId32', + era: 'u32', + }, + change_slashing_allowed_for: { + slashingSwitch: 'PalletValidatorsSlashingSwitch', + }, + update_permissioned_validator_intended_count: { + identity: 'PolymeshPrimitivesIdentityId', + newIntendedCount: 'u32', + }, + chill_from_governance: { + identity: 'PolymeshPrimitivesIdentityId', + stashKeys: 'Vec', + }, + set_commission_cap: { + newCap: 'Perbill' } } }, /** - * Lookup396: pallet_staking::pallet::pallet::Call + * Lookup392: pallet_staking::pallet::pallet::Call **/ PalletStakingPalletCall: { _enum: { bond: { - controller: 'MultiAddress', value: 'Compact', payee: 'PalletStakingRewardDestination', }, @@ -2472,9 +2477,7 @@ export default { set_payee: { payee: 'PalletStakingRewardDestination', }, - set_controller: { - controller: 'MultiAddress', - }, + set_controller: 'Null', set_validator_count: { _alias: { new_: 'new', @@ -2533,40 +2536,12 @@ export default { _alias: { new_: 'new', }, - new_: 'Perbill', - }, - add_permissioned_validator: { - identity: 'PolymeshPrimitivesIdentityId', - intendedCount: 'Option', - }, - remove_permissioned_validator: { - identity: 'PolymeshPrimitivesIdentityId', - }, - validate_cdd_expiry_nominators: { - targets: 'Vec', - }, - payout_stakers_by_system: { - validatorStash: 'AccountId32', - era: 'u32', - }, - change_slashing_allowed_for: { - slashingSwitch: 'PalletStakingSlashingSwitch', - }, - update_permissioned_validator_intended_count: { - identity: 'PolymeshPrimitivesIdentityId', - newIntendedCount: 'u32', - }, - chill_from_governance: { - identity: 'PolymeshPrimitivesIdentityId', - stashKeys: 'Vec', - }, - set_commission_cap: { - newCap: 'Perbill' + new_: 'Perbill' } } }, /** - * Lookup397: pallet_staking::RewardDestination + * Lookup393: pallet_staking::RewardDestination **/ PalletStakingRewardDestination: { _enum: { @@ -2578,7 +2553,7 @@ export default { } }, /** - * Lookup400: pallet_staking::pallet::pallet::ConfigOp + * Lookup397: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpU128: { _enum: { @@ -2588,7 +2563,7 @@ export default { } }, /** - * Lookup401: pallet_staking::pallet::pallet::ConfigOp + * Lookup398: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpU32: { _enum: { @@ -2598,7 +2573,7 @@ export default { } }, /** - * Lookup402: pallet_staking::pallet::pallet::ConfigOp + * Lookup399: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpPercent: { _enum: { @@ -2608,7 +2583,7 @@ export default { } }, /** - * Lookup403: pallet_staking::pallet::pallet::ConfigOp + * Lookup400: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpPerbill: { _enum: { @@ -2618,7 +2593,7 @@ export default { } }, /** - * Lookup405: pallet_session::pallet::Call + * Lookup401: pallet_session::pallet::Call **/ PalletSessionCall: { _enum: { @@ -2633,7 +2608,7 @@ export default { } }, /** - * Lookup406: polymesh_runtime_develop::runtime::SessionKeys + * Lookup402: polymesh_runtime_develop::runtime::SessionKeys **/ PolymeshRuntimeDevelopRuntimeSessionKeys: { grandpa: 'SpConsensusGrandpaAppPublic', @@ -2642,11 +2617,11 @@ export default { authorityDiscovery: 'SpAuthorityDiscoveryAppPublic' }, /** - * Lookup407: sp_authority_discovery::app::Public + * Lookup403: sp_authority_discovery::app::Public **/ SpAuthorityDiscoveryAppPublic: 'SpCoreSr25519Public', /** - * Lookup408: pallet_grandpa::pallet::Call + * Lookup404: pallet_grandpa::pallet::Call **/ PalletGrandpaCall: { _enum: { @@ -2665,14 +2640,14 @@ export default { } }, /** - * Lookup409: sp_consensus_grandpa::EquivocationProof + * Lookup405: sp_consensus_grandpa::EquivocationProof **/ SpConsensusGrandpaEquivocationProof: { setId: 'u64', equivocation: 'SpConsensusGrandpaEquivocation' }, /** - * Lookup410: sp_consensus_grandpa::Equivocation + * Lookup406: sp_consensus_grandpa::Equivocation **/ SpConsensusGrandpaEquivocation: { _enum: { @@ -2681,7 +2656,7 @@ export default { } }, /** - * Lookup411: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> + * Lookup407: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> **/ FinalityGrandpaEquivocationPrevote: { roundNumber: 'u64', @@ -2690,22 +2665,22 @@ export default { second: '(FinalityGrandpaPrevote,SpConsensusGrandpaAppSignature)' }, /** - * Lookup412: finality_grandpa::Prevote + * Lookup408: finality_grandpa::Prevote **/ FinalityGrandpaPrevote: { targetHash: 'H256', targetNumber: 'u32' }, /** - * Lookup413: sp_consensus_grandpa::app::Signature + * Lookup409: sp_consensus_grandpa::app::Signature **/ SpConsensusGrandpaAppSignature: 'SpCoreEd25519Signature', /** - * Lookup414: sp_core::ed25519::Signature + * Lookup410: sp_core::ed25519::Signature **/ SpCoreEd25519Signature: '[u8;64]', /** - * Lookup416: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> + * Lookup412: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> **/ FinalityGrandpaEquivocationPrecommit: { roundNumber: 'u64', @@ -2714,14 +2689,14 @@ export default { second: '(FinalityGrandpaPrecommit,SpConsensusGrandpaAppSignature)' }, /** - * Lookup417: finality_grandpa::Precommit + * Lookup413: finality_grandpa::Precommit **/ FinalityGrandpaPrecommit: { targetHash: 'H256', targetNumber: 'u32' }, /** - * Lookup419: pallet_im_online::pallet::Call + * Lookup415: pallet_im_online::pallet::Call **/ PalletImOnlineCall: { _enum: { @@ -2732,32 +2707,24 @@ export default { } }, /** - * Lookup420: pallet_im_online::Heartbeat + * Lookup416: pallet_im_online::Heartbeat **/ PalletImOnlineHeartbeat: { blockNumber: 'u32', - networkState: 'SpCoreOffchainOpaqueNetworkState', sessionIndex: 'u32', authorityIndex: 'u32', validatorsLen: 'u32' }, /** - * Lookup421: sp_core::offchain::OpaqueNetworkState - **/ - SpCoreOffchainOpaqueNetworkState: { - peerId: 'OpaquePeerId', - externalAddresses: 'Vec' - }, - /** - * Lookup425: pallet_im_online::sr25519::app_sr25519::Signature + * Lookup417: pallet_im_online::sr25519::app_sr25519::Signature **/ PalletImOnlineSr25519AppSr25519Signature: 'SpCoreSr25519Signature', /** - * Lookup426: sp_core::sr25519::Signature + * Lookup418: sp_core::sr25519::Signature **/ SpCoreSr25519Signature: '[u8;64]', /** - * Lookup427: pallet_sudo::Call + * Lookup419: pallet_sudo::pallet::Call **/ PalletSudoCall: { _enum: { @@ -2781,7 +2748,7 @@ export default { } }, /** - * Lookup428: pallet_asset::Call + * Lookup420: pallet_asset::pallet::Call **/ PalletAssetCall: { _enum: { @@ -2834,7 +2801,7 @@ export default { }, set_funding_round: { assetId: 'PolymeshPrimitivesAssetAssetId', - foundingRoundName: 'Bytes', + fundingRoundName: 'Bytes', }, update_identifiers: { assetId: 'PolymeshPrimitivesAssetAssetId', @@ -2916,14 +2883,22 @@ export default { }, link_ticker_to_asset_id: { ticker: 'PolymeshPrimitivesTicker', - assetId: 'PolymeshPrimitivesAssetAssetId' + assetId: 'PolymeshPrimitivesAssetAssetId', + }, + unlink_ticker_from_asset_id: { + ticker: 'PolymeshPrimitivesTicker', + assetId: 'PolymeshPrimitivesAssetAssetId', + }, + update_global_metadata_spec: { + assetMetadataName: 'Bytes', + assetMetadataSpec: 'PolymeshPrimitivesAssetMetadataAssetMetadataSpec' } } }, /** - * Lookup431: pallet_corporate_actions::distribution::Call + * Lookup423: pallet_corporate_actions::distribution::pallet::Call **/ - PalletCorporateActionsDistributionCall: { + PalletCorporateActionsDistributionPalletCall: { _enum: { distribute: { caId: 'PalletCorporateActionsCaId', @@ -2950,9 +2925,9 @@ export default { } }, /** - * Lookup433: pallet_asset::checkpoint::Call + * Lookup425: pallet_asset::checkpoint::pallet::Call **/ - PalletAssetCheckpointCall: { + PalletAssetCheckpointPalletCall: { _enum: { create_checkpoint: { assetId: 'PolymeshPrimitivesAssetAssetId', @@ -2971,7 +2946,7 @@ export default { } }, /** - * Lookup434: pallet_compliance_manager::Call + * Lookup426: pallet_compliance_manager::pallet::Call **/ PalletComplianceManagerCall: { _enum: { @@ -3012,7 +2987,7 @@ export default { } }, /** - * Lookup435: pallet_corporate_actions::Call + * Lookup427: pallet_corporate_actions::pallet::Call **/ PalletCorporateActionsCall: { _enum: { @@ -3060,12 +3035,18 @@ export default { perShare: 'u128', amount: 'u128', paymentAt: 'u64', - expiresAt: 'Option' + expiresAt: 'Option', + }, + initiate_corporate_action_and_ballot: { + caArgs: 'PalletCorporateActionsInitiateCorporateActionArgs', + ballotTimeRange: 'PalletCorporateActionsBallotBallotTimeRange', + ballotMeta: 'PalletCorporateActionsBallotBallotMeta', + rcv: 'bool' } } }, /** - * Lookup437: pallet_corporate_actions::RecordDateSpec + * Lookup429: pallet_corporate_actions::RecordDateSpec **/ PalletCorporateActionsRecordDateSpec: { _enum: { @@ -3075,7 +3056,7 @@ export default { } }, /** - * Lookup440: pallet_corporate_actions::InitiateCorporateActionArgs + * Lookup432: pallet_corporate_actions::InitiateCorporateActionArgs **/ PalletCorporateActionsInitiateCorporateActionArgs: { assetId: 'PolymeshPrimitivesAssetAssetId', @@ -3088,9 +3069,9 @@ export default { withholdingTax: 'Option>' }, /** - * Lookup441: pallet_corporate_actions::ballot::Call + * Lookup433: pallet_corporate_actions::ballot::pallet::Call **/ - PalletCorporateActionsBallotCall: { + PalletCorporateActionsBallotPalletCall: { _enum: { attach_ballot: { caId: 'PalletCorporateActionsCaId', @@ -3120,7 +3101,7 @@ export default { } }, /** - * Lookup442: pallet_pips::Call + * Lookup434: pallet_pips::pallet::Call **/ PalletPipsCall: { _enum: { @@ -3134,7 +3115,7 @@ export default { duration: 'u32', }, set_pending_pip_expiry: { - expiry: 'PolymeshCommonUtilitiesMaybeBlock', + expiry: 'PolymeshPrimitivesMaybeBlock', }, set_max_pip_skip_count: { max: 'u8', @@ -3181,13 +3162,13 @@ export default { } }, /** - * Lookup445: pallet_pips::SnapshotResult + * Lookup437: pallet_pips::types::SnapshotResult **/ PalletPipsSnapshotResult: { _enum: ['Approve', 'Reject', 'Skip'] }, /** - * Lookup446: pallet_portfolio::Call + * Lookup438: pallet_portfolio::pallet::Call **/ PalletPortfolioCall: { _enum: { @@ -3233,14 +3214,14 @@ export default { } }, /** - * Lookup448: polymesh_primitives::portfolio::Fund + * Lookup440: polymesh_primitives::portfolio::Fund **/ PolymeshPrimitivesPortfolioFund: { description: 'PolymeshPrimitivesPortfolioFundDescription', memo: 'Option' }, /** - * Lookup449: pallet_protocol_fee::Call + * Lookup441: pallet_protocol_fee::pallet::Call **/ PalletProtocolFeeCall: { _enum: { @@ -3254,13 +3235,13 @@ export default { } }, /** - * Lookup450: polymesh_common_utilities::protocol_fee::ProtocolOp + * Lookup442: polymesh_common_utilities::protocol_fee::ProtocolOp **/ PolymeshCommonUtilitiesProtocolFeeProtocolOp: { _enum: ['AssetRegisterTicker', 'AssetIssue', 'AssetAddDocuments', 'AssetCreateAsset', 'CheckpointCreateSchedule', 'ComplianceManagerAddComplianceRequirement', 'IdentityCddRegisterDid', 'IdentityAddClaim', 'IdentityAddSecondaryKeysWithAuthorization', 'PipsPropose', 'ContractsPutCode', 'CorporateBallotAttachBallot', 'CapitalDistributionDistribute', 'NFTCreateCollection', 'NFTMint', 'IdentityCreateChildIdentity'] }, /** - * Lookup451: pallet_scheduler::pallet::Call + * Lookup443: pallet_scheduler::pallet::Call **/ PalletSchedulerCall: { _enum: { @@ -3300,7 +3281,7 @@ export default { } }, /** - * Lookup453: pallet_settlement::Call + * Lookup445: pallet_settlement::pallet::Call **/ PalletSettlementCall: { _enum: { @@ -3320,7 +3301,7 @@ export default { affirm_with_receipts: { id: 'u64', receiptDetails: 'Vec', - portfolios: 'Vec', + portfolios: 'BTreeSet', }, set_venue_filtering: { assetId: 'PolymeshPrimitivesAssetAssetId', @@ -3361,16 +3342,16 @@ export default { tradeDate: 'Option', valueDate: 'Option', legs: 'Vec', - portfolios: 'Vec', + portfolios: 'BTreeSet', instructionMemo: 'Option', }, affirm_instruction: { id: 'u64', - portfolios: 'Vec', + portfolios: 'BTreeSet', }, withdraw_affirmation: { id: 'u64', - portfolios: 'Vec', + portfolios: 'BTreeSet', }, reject_instruction: { id: 'u64', @@ -3383,12 +3364,12 @@ export default { affirm_with_receipts_with_count: { id: 'u64', receiptDetails: 'Vec', - portfolios: 'Vec', + portfolios: 'BTreeSet', numberOfAssets: 'Option', }, affirm_instruction_with_count: { id: 'u64', - portfolios: 'Vec', + portfolios: 'BTreeSet', numberOfAssets: 'Option', }, reject_instruction_with_count: { @@ -3398,7 +3379,7 @@ export default { }, withdraw_affirmation_with_count: { id: 'u64', - portfolios: 'Vec', + portfolios: 'BTreeSet', numberOfAssets: 'Option', }, add_instruction_with_mediators: { @@ -3416,7 +3397,7 @@ export default { tradeDate: 'Option', valueDate: 'Option', legs: 'Vec', - portfolios: 'Vec', + portfolios: 'BTreeSet', instructionMemo: 'Option', mediators: 'BTreeSet', }, @@ -3429,12 +3410,16 @@ export default { }, reject_instruction_as_mediator: { instructionId: 'u64', - numberOfAssets: 'Option' + numberOfAssets: 'Option', + }, + lock_instruction: { + instId: 'u64', + weightLimit: 'SpWeightsWeightV2Weight' } } }, /** - * Lookup455: polymesh_primitives::settlement::ReceiptDetails + * Lookup447: polymesh_primitives::settlement::ReceiptDetails **/ PolymeshPrimitivesSettlementReceiptDetails: { uid: 'u64', @@ -3445,7 +3430,7 @@ export default { metadata: 'Option' }, /** - * Lookup456: sp_runtime::MultiSignature + * Lookup448: sp_runtime::MultiSignature **/ SpRuntimeMultiSignature: { _enum: { @@ -3455,11 +3440,11 @@ export default { } }, /** - * Lookup457: sp_core::ecdsa::Signature + * Lookup449: sp_core::ecdsa::Signature **/ SpCoreEcdsaSignature: '[u8;65]', /** - * Lookup460: polymesh_primitives::settlement::AffirmationCount + * Lookup453: polymesh_primitives::settlement::AffirmationCount **/ PolymeshPrimitivesSettlementAffirmationCount: { senderAssetCount: 'PolymeshPrimitivesSettlementAssetCount', @@ -3467,7 +3452,7 @@ export default { offchainCount: 'u32' }, /** - * Lookup461: polymesh_primitives::settlement::AssetCount + * Lookup454: polymesh_primitives::settlement::AssetCount **/ PolymeshPrimitivesSettlementAssetCount: { fungible: 'u32', @@ -3475,7 +3460,7 @@ export default { offChain: 'u32' }, /** - * Lookup464: pallet_statistics::Call + * Lookup457: pallet_statistics::pallet::Call **/ PalletStatisticsCall: { _enum: { @@ -3500,7 +3485,7 @@ export default { } }, /** - * Lookup468: pallet_sto::Call + * Lookup461: pallet_sto::pallet::Call **/ PalletStoCall: { _enum: { @@ -3517,43 +3502,65 @@ export default { fundraiserName: 'Bytes', }, invest: { - investmentPortfolio: 'PolymeshPrimitivesIdentityIdPortfolioId', - fundingPortfolio: 'PolymeshPrimitivesIdentityIdPortfolioId', offeringAsset: 'PolymeshPrimitivesAssetAssetId', - id: 'u64', + fundraiserId: 'u64', + investmentPortfolio: 'PolymeshPrimitivesIdentityIdPortfolioId', + funding: 'PalletStoFundingMethod', purchaseAmount: 'u128', maxPrice: 'Option', - receipt: 'Option', }, freeze_fundraiser: { offeringAsset: 'PolymeshPrimitivesAssetAssetId', - id: 'u64', + fundraiserId: 'u64', }, unfreeze_fundraiser: { offeringAsset: 'PolymeshPrimitivesAssetAssetId', - id: 'u64', + fundraiserId: 'u64', }, modify_fundraiser_window: { offeringAsset: 'PolymeshPrimitivesAssetAssetId', - id: 'u64', + fundraiserId: 'u64', start: 'u64', end: 'Option', }, stop: { offeringAsset: 'PolymeshPrimitivesAssetAssetId', - id: 'u64' + fundraiserId: 'u64', + }, + enable_offchain_funding: { + offeringAsset: 'PolymeshPrimitivesAssetAssetId', + fundraiserId: 'u64', + ticker: 'PolymeshPrimitivesTicker' } } }, /** - * Lookup470: pallet_sto::PriceTier + * Lookup463: pallet_sto::PriceTier **/ PalletStoPriceTier: { total: 'u128', price: 'u128' }, /** - * Lookup472: pallet_treasury::Call + * Lookup464: pallet_sto::FundingMethod + **/ + PalletStoFundingMethod: { + _enum: { + OnChain: 'PolymeshPrimitivesIdentityIdPortfolioId', + OffChain: 'PolymeshPrimitivesStoFundraiserReceiptDetails' + } + }, + /** + * Lookup465: polymesh_primitives::sto::FundraiserReceiptDetails + **/ + PolymeshPrimitivesStoFundraiserReceiptDetails: { + uid: 'u64', + signer: 'AccountId32', + signature: 'SpRuntimeMultiSignature', + metadata: 'Option' + }, + /** + * Lookup466: pallet_treasury::pallet::Call **/ PalletTreasuryCall: { _enum: { @@ -3566,14 +3573,14 @@ export default { } }, /** - * Lookup474: polymesh_primitives::Beneficiary + * Lookup468: polymesh_primitives::Beneficiary **/ PolymeshPrimitivesBeneficiary: { id: 'PolymeshPrimitivesIdentityId', amount: 'u128' }, /** - * Lookup475: pallet_utility::pallet::Call + * Lookup469: pallet_utility::pallet::Call **/ PalletUtilityCall: { _enum: { @@ -3599,15 +3606,9 @@ export default { call: 'Call', weight: 'SpWeightsWeightV2Weight', }, - batch_old: { - calls: 'Vec', - }, - batch_atomic: { - calls: 'Vec', - }, - batch_optimistic: { - calls: 'Vec', - }, + __Unused6: 'Null', + __Unused7: 'Null', + __Unused8: 'Null', as_derivative: { index: 'u16', call: 'Call' @@ -3615,14 +3616,14 @@ export default { } }, /** - * Lookup477: pallet_utility::UniqueCall + * Lookup471: pallet_utility::UniqueCall **/ PalletUtilityUniqueCall: { nonce: 'u64', call: 'Call' }, /** - * Lookup478: polymesh_runtime_develop::runtime::OriginCaller + * Lookup472: polymesh_runtime_develop::runtime::OriginCaller **/ PolymeshRuntimeDevelopRuntimeOriginCaller: { _enum: { @@ -3635,15 +3636,15 @@ export default { __Unused6: 'Null', __Unused7: 'Null', __Unused8: 'Null', - PolymeshCommittee: 'PalletCommitteeRawOriginInstance1', + PolymeshCommittee: 'PalletCommitteeRawOrigin', __Unused10: 'Null', - TechnicalCommittee: 'PalletCommitteeRawOriginInstance3', + TechnicalCommittee: 'PalletCommitteeRawOrigin', __Unused12: 'Null', - UpgradeCommittee: 'PalletCommitteeRawOriginInstance4' + UpgradeCommittee: 'PalletCommitteeRawOrigin' } }, /** - * Lookup479: frame_support::dispatch::RawOrigin + * Lookup473: frame_support::dispatch::RawOrigin **/ FrameSupportDispatchRawOrigin: { _enum: { @@ -3653,33 +3654,21 @@ export default { } }, /** - * Lookup480: pallet_committee::RawOrigin + * Lookup474: pallet_committee::pallet::RawOrigin **/ - PalletCommitteeRawOriginInstance1: { + PalletCommitteeRawOrigin: { _enum: ['Endorsed'] }, /** - * Lookup481: pallet_committee::RawOrigin - **/ - PalletCommitteeRawOriginInstance3: { - _enum: ['Endorsed'] - }, - /** - * Lookup482: pallet_committee::RawOrigin - **/ - PalletCommitteeRawOriginInstance4: { - _enum: ['Endorsed'] - }, - /** - * Lookup483: sp_core::Void + * Lookup477: sp_core::Void **/ SpCoreVoid: 'Null', /** - * Lookup484: pallet_base::Call + * Lookup478: pallet_base::pallet::Call **/ PalletBaseCall: 'Null', /** - * Lookup485: pallet_external_agents::Call + * Lookup479: pallet_external_agents::pallet::Call **/ PalletExternalAgentsCall: { _enum: { @@ -3721,7 +3710,7 @@ export default { } }, /** - * Lookup486: pallet_relayer::Call + * Lookup480: pallet_relayer::pallet::Call **/ PalletRelayerCall: { _enum: { @@ -3751,7 +3740,7 @@ export default { } }, /** - * Lookup487: pallet_contracts::pallet::Call + * Lookup481: pallet_contracts::pallet::Call **/ PalletContractsCall: { _enum: { @@ -3811,18 +3800,21 @@ export default { storageDepositLimit: 'Option>', codeHash: 'H256', data: 'Bytes', - salt: 'Bytes' + salt: 'Bytes', + }, + migrate: { + weightLimit: 'SpWeightsWeightV2Weight' } } }, /** - * Lookup491: pallet_contracts::wasm::Determinism + * Lookup483: pallet_contracts::wasm::Determinism **/ PalletContractsWasmDeterminism: { - _enum: ['Deterministic', 'AllowIndeterminism'] + _enum: ['Enforced', 'Relaxed'] }, /** - * Lookup492: polymesh_contracts::Call + * Lookup484: polymesh_contracts::pallet::Call **/ PolymeshContractsCall: { _enum: { @@ -3870,14 +3862,14 @@ export default { } }, /** - * Lookup495: polymesh_contracts::NextUpgrade + * Lookup487: polymesh_contracts::NextUpgrade **/ PolymeshContractsNextUpgrade: { chainVersion: 'PolymeshContractsChainVersion', apiHash: 'PolymeshContractsApiCodeHash' }, /** - * Lookup496: polymesh_contracts::ApiCodeHash + * Lookup488: polymesh_contracts::ApiCodeHash **/ PolymeshContractsApiCodeHash: { _alias: { @@ -3886,7 +3878,7 @@ export default { hash_: 'H256' }, /** - * Lookup497: pallet_preimage::pallet::Call + * Lookup489: pallet_preimage::pallet::Call **/ PalletPreimageCall: { _enum: { @@ -3914,7 +3906,7 @@ export default { } }, /** - * Lookup498: pallet_nft::Call + * Lookup490: pallet_nft::pallet::Call **/ PalletNftCall: { _enum: { @@ -3932,6 +3924,7 @@ export default { assetId: 'PolymeshPrimitivesAssetAssetId', nftId: 'u64', portfolioKind: 'PolymeshPrimitivesIdentityIdPortfolioKind', + numberOfKeys: 'Option', }, controller_transfer: { nfts: 'PolymeshPrimitivesNftNfTs', @@ -3941,18 +3934,18 @@ export default { } }, /** - * Lookup501: polymesh_primitives::nft::NFTCollectionKeys + * Lookup493: polymesh_primitives::nft::NFTCollectionKeys **/ PolymeshPrimitivesNftNftCollectionKeys: 'Vec', /** - * Lookup504: polymesh_primitives::nft::NFTMetadataAttribute + * Lookup496: polymesh_primitives::nft::NFTMetadataAttribute **/ PolymeshPrimitivesNftNftMetadataAttribute: { key: 'PolymeshPrimitivesAssetMetadataAssetMetadataKey', value: 'Bytes' }, /** - * Lookup505: pallet_election_provider_multi_phase::pallet::Call + * Lookup498: pallet_election_provider_multi_phase::pallet::Call **/ PalletElectionProviderMultiPhaseCall: { _enum: { @@ -3976,7 +3969,7 @@ export default { } }, /** - * Lookup506: pallet_election_provider_multi_phase::RawSolution + * Lookup499: pallet_election_provider_multi_phase::RawSolution **/ PalletElectionProviderMultiPhaseRawSolution: { solution: 'PolymeshRuntimeCommonNposSolution16', @@ -3984,7 +3977,7 @@ export default { round: 'u32' }, /** - * Lookup507: polymesh_runtime_common::NposSolution16 + * Lookup500: polymesh_runtime_common::NposSolution16 **/ PolymeshRuntimeCommonNposSolution16: { votes1: 'Vec<(Compact,Compact)>', @@ -4005,60 +3998,43 @@ export default { votes16: 'Vec<(Compact,[(Compact,Compact);15],Compact)>' }, /** - * Lookup558: pallet_election_provider_multi_phase::SolutionOrSnapshotSize + * Lookup551: pallet_election_provider_multi_phase::SolutionOrSnapshotSize **/ PalletElectionProviderMultiPhaseSolutionOrSnapshotSize: { voters: 'Compact', targets: 'Compact' }, /** - * Lookup562: sp_npos_elections::Support + * Lookup555: sp_npos_elections::Support **/ SpNposElectionsSupport: { total: 'u128', voters: 'Vec<(AccountId32,u128)>' }, /** - * Lookup565: pallet_test_utils::Call - **/ - PalletTestUtilsCall: { - _enum: { - register_did: { - secondaryKeys: 'Vec', - }, - mock_cdd_register_did: { - targetAccount: 'AccountId32', - }, - get_my_did: 'Null', - get_cdd_of: { - of: 'AccountId32' - } - } - }, - /** - * Lookup566: pallet_committee::PolymeshVotes + * Lookup558: pallet_committee::pallet::PolymeshVotes **/ PalletCommitteePolymeshVotes: { index: 'u32', ayes: 'Vec', nays: 'Vec', - expiry: 'PolymeshCommonUtilitiesMaybeBlock' + expiry: 'PolymeshPrimitivesMaybeBlock' }, /** - * Lookup568: pallet_committee::Error + * Lookup559: pallet_committee::pallet::Error **/ PalletCommitteeError: { _enum: ['DuplicateVote', 'NotAMember', 'NoSuchProposal', 'ProposalExpired', 'DuplicateProposal', 'MismatchedVotingIndex', 'InvalidProportion', 'FirstVoteReject', 'ProposalsLimitReached'] }, /** - * Lookup577: polymesh_primitives::multisig::ProposalVoteCount + * Lookup568: polymesh_primitives::multisig::ProposalVoteCount **/ PolymeshPrimitivesMultisigProposalVoteCount: { approvals: 'u64', rejections: 'u64' }, /** - * Lookup578: polymesh_primitives::multisig::ProposalState + * Lookup569: polymesh_primitives::multisig::ProposalState **/ PolymeshPrimitivesMultisigProposalState: { _enum: { @@ -4071,34 +4047,26 @@ export default { } }, /** - * Lookup580: pallet_multisig::pallet::Error + * Lookup571: pallet_multisig::pallet::Error **/ PalletMultisigError: { - _enum: ['ProposalMissing', 'DecodingError', 'RequiredSignersIsZero', 'NotASigner', 'NoSuchMultisig', 'NotEnoughSigners', 'NonceOverflow', 'AlreadyVoted', 'AlreadyASigner', 'IdentityNotAdmin', 'IdentityNotPayer', 'ChangeNotAllowed', 'SignerAlreadyLinkedToMultisig', 'SignerAlreadyLinkedToIdentity', 'NestingNotAllowed', 'ProposalAlreadyRejected', 'ProposalExpired', 'ProposalAlreadyExecuted', 'MaxWeightTooLow', 'MultisigMissingIdentity', 'TooManySigners', 'NoPayingDid'] + _enum: ['ProposalMissing', 'DecodingError', 'RequiredSignersIsZero', 'NotASigner', 'NoSuchMultisig', 'NotEnoughSigners', 'NonceOverflow', 'AlreadyVoted', 'AlreadyASigner', 'IdentityNotAdmin', 'IdentityNotPayer', 'ChangeNotAllowed', 'SignerAlreadyLinkedToMultisig', 'SignerAlreadyLinkedToIdentity', 'NestingNotAllowed', 'ProposalAlreadyRejected', 'ProposalExpired', 'ProposalAlreadyExecuted', 'MaxWeightTooLow', 'MultisigMissingIdentity', 'TooManySigners', 'NoPayingDid', 'InvalidExpiryDate', 'InvalidatedProposal', 'AdminNotFound', 'BadAuthorizationType'] }, /** - * Lookup582: pallet_bridge::BridgeTxDetail + * Lookup572: pallet_validators::types::PermissionedIdentityPrefs **/ - PalletBridgeBridgeTxDetail: { - amount: 'u128', - status: 'PalletBridgeBridgeTxStatus', - executionBlock: 'u32', - txHash: 'H256' + PalletValidatorsPermissionedIdentityPrefs: { + intendedCount: 'u32', + runningCount: 'u32' }, /** - * Lookup583: pallet_bridge::BridgeTxStatus + * Lookup573: pallet_validators::pallet::Error **/ - PalletBridgeBridgeTxStatus: { - _enum: { - Absent: 'Null', - Pending: 'u8', - Frozen: 'Null', - Timelocked: 'Null', - Handled: 'Null' - } + PalletValidatorsError: { + _enum: ['StashIdentityDoesNotExist', 'StashIdentityNotPermissioned', 'IdentityIsAlreadyPermissioned', 'IdentityIsMissingCDD', 'IntendedCountIsExceedingConsensusLimit', 'IdentityNotFound', 'ValidatorNotFound', 'CommissionTooHigh', 'CommissionUnchanged'] }, /** - * Lookup586: pallet_staking::StakingLedger + * Lookup574: pallet_staking::StakingLedger **/ PalletStakingStakingLedger: { stash: 'AccountId32', @@ -4108,14 +4076,14 @@ export default { claimedRewards: 'Vec' }, /** - * Lookup588: pallet_staking::UnlockChunk + * Lookup576: pallet_staking::UnlockChunk **/ PalletStakingUnlockChunk: { value: 'Compact', era: 'Compact' }, /** - * Lookup591: pallet_staking::Nominations + * Lookup579: pallet_staking::Nominations **/ PalletStakingNominations: { targets: 'Vec', @@ -4123,21 +4091,21 @@ export default { suppressed: 'bool' }, /** - * Lookup593: pallet_staking::ActiveEraInfo + * Lookup581: pallet_staking::ActiveEraInfo **/ PalletStakingActiveEraInfo: { index: 'u32', start: 'Option' }, /** - * Lookup595: pallet_staking::EraRewardPoints + * Lookup583: pallet_staking::EraRewardPoints **/ PalletStakingEraRewardPoints: { total: 'u32', individual: 'BTreeMap' }, /** - * Lookup599: pallet_staking::UnappliedSlash + * Lookup588: pallet_staking::UnappliedSlash **/ PalletStakingUnappliedSlash: { validator: 'AccountId32', @@ -4147,7 +4115,7 @@ export default { payout: 'u128' }, /** - * Lookup601: pallet_staking::slashing::SlashingSpans + * Lookup590: pallet_staking::slashing::SlashingSpans **/ PalletStakingSlashingSlashingSpans: { spanIndex: 'u32', @@ -4156,44 +4124,37 @@ export default { prior: 'Vec' }, /** - * Lookup602: pallet_staking::slashing::SpanRecord + * Lookup591: pallet_staking::slashing::SpanRecord **/ PalletStakingSlashingSpanRecord: { slashed: 'u128', paidOut: 'u128' }, /** - * Lookup605: pallet_staking::types::PermissionedIdentityPrefs - **/ - PalletStakingPermissionedIdentityPrefs: { - intendedCount: 'u32', - runningCount: 'u32' - }, - /** - * Lookup607: pallet_staking::pallet::pallet::Error + * Lookup594: pallet_staking::pallet::pallet::Error **/ PalletStakingPalletError: { - _enum: ['NotController', 'NotStash', 'AlreadyBonded', 'AlreadyPaired', 'EmptyTargets', 'DuplicateIndex', 'InvalidSlashIndex', 'InsufficientBond', 'NoMoreChunks', 'NoUnlockChunk', 'FundedTarget', 'InvalidEraToReward', 'InvalidNumberOfNominations', 'NotSortedAndUnique', 'AlreadyClaimed', 'IncorrectHistoryDepth', 'IncorrectSlashingSpans', 'BadState', 'TooManyTargets', 'BadTarget', 'CannotChillOther', 'TooManyNominators', 'TooManyValidators', 'CommissionTooLow', 'BoundNotMet', 'StashIdentityDoesNotExist', 'StashIdentityNotPermissioned', 'StashIdentityNotCDDed', 'IdentityIsAlreadyPermissioned', 'IdentityIsMissingCDD', 'IntendedCountIsExceedingConsensusLimit', 'IdentityNotFound', 'ValidatorNotFound', 'CommissionTooHigh', 'CommissionUnchanged'] + _enum: ['NotController', 'NotStash', 'AlreadyBonded', 'AlreadyPaired', 'EmptyTargets', 'DuplicateIndex', 'InvalidSlashIndex', 'InsufficientBond', 'NoMoreChunks', 'NoUnlockChunk', 'FundedTarget', 'InvalidEraToReward', 'InvalidNumberOfNominations', 'NotSortedAndUnique', 'AlreadyClaimed', 'IncorrectHistoryDepth', 'IncorrectSlashingSpans', 'BadState', 'TooManyTargets', 'BadTarget', 'CannotChillOther', 'TooManyNominators', 'TooManyValidators', 'CommissionTooLow', 'BoundNotMet'] }, /** - * Lookup608: sp_staking::offence::OffenceDetails + * Lookup595: sp_staking::offence::OffenceDetails **/ SpStakingOffenceOffenceDetails: { offender: '(AccountId32,PalletStakingExposure)', reporters: 'Vec' }, /** - * Lookup613: sp_core::crypto::KeyTypeId + * Lookup600: sp_core::crypto::KeyTypeId **/ SpCoreCryptoKeyTypeId: '[u8;4]', /** - * Lookup614: pallet_session::pallet::Error + * Lookup601: pallet_session::pallet::Error **/ PalletSessionError: { _enum: ['InvalidProof', 'NoAssociatedValidatorId', 'DuplicatedKey', 'NoKeys', 'NoAccount'] }, /** - * Lookup615: pallet_grandpa::StoredState + * Lookup602: pallet_grandpa::StoredState **/ PalletGrandpaStoredState: { _enum: { @@ -4210,7 +4171,7 @@ export default { } }, /** - * Lookup616: pallet_grandpa::StoredPendingChange + * Lookup603: pallet_grandpa::StoredPendingChange **/ PalletGrandpaStoredPendingChange: { scheduledAt: 'u32', @@ -4219,46 +4180,39 @@ export default { forced: 'Option' }, /** - * Lookup618: pallet_grandpa::pallet::Error + * Lookup605: pallet_grandpa::pallet::Error **/ PalletGrandpaError: { _enum: ['PauseFailed', 'ResumeFailed', 'ChangePending', 'TooSoon', 'InvalidKeyOwnershipProof', 'InvalidEquivocationProof', 'DuplicateOffenceReport'] }, /** - * Lookup622: pallet_im_online::BoundedOpaqueNetworkState - **/ - PalletImOnlineBoundedOpaqueNetworkState: { - peerId: 'Bytes', - externalAddresses: 'Vec' - }, - /** - * Lookup626: pallet_im_online::pallet::Error + * Lookup608: pallet_im_online::pallet::Error **/ PalletImOnlineError: { _enum: ['InvalidKey', 'DuplicatedHeartbeat'] }, /** - * Lookup628: pallet_sudo::Error + * Lookup610: pallet_sudo::pallet::Error **/ PalletSudoError: { _enum: ['RequireSudo'] }, /** - * Lookup629: pallet_asset::types::TickerRegistration + * Lookup611: pallet_asset::types::TickerRegistration **/ PalletAssetTickerRegistration: { owner: 'PolymeshPrimitivesIdentityId', expiry: 'Option' }, /** - * Lookup630: pallet_asset::types::TickerRegistrationConfig + * Lookup612: pallet_asset::types::TickerRegistrationConfig **/ PalletAssetTickerRegistrationConfig: { maxTickerLength: 'u8', registrationLength: 'Option' }, /** - * Lookup631: pallet_asset::types::AssetDetails + * Lookup613: pallet_asset::types::AssetDetails **/ PalletAssetAssetDetails: { totalSupply: 'u128', @@ -4267,19 +4221,19 @@ export default { assetType: 'PolymeshPrimitivesAssetAssetType' }, /** - * Lookup641: pallet_asset::error::Error + * Lookup623: pallet_asset::pallet::Error **/ PalletAssetError: { - _enum: ['Unauthorized', 'AssetAlreadyCreated', 'TickerTooLong', 'TickerNotAlphanumeric', 'TickerAlreadyRegistered', 'TotalSupplyAboveLimit', 'NoSuchAsset', 'AlreadyFrozen', 'NotAnOwner', 'BalanceOverflow', 'TotalSupplyOverflow', 'InvalidGranularity', 'NotFrozen', 'InvalidTransfer', 'InsufficientBalance', 'AssetAlreadyDivisible', 'InvalidEthereumSignature', 'TickerRegistrationExpired', 'SenderSameAsReceiver', 'NoSuchDoc', 'MaxLengthOfAssetNameExceeded', 'FundingRoundNameMaxLengthExceeded', 'InvalidAssetIdentifier', 'InvestorUniquenessClaimNotAllowed', 'InvalidCustomAssetTypeId', 'AssetMetadataNameMaxLengthExceeded', 'AssetMetadataValueMaxLengthExceeded', 'AssetMetadataTypeDefMaxLengthExceeded', 'AssetMetadataKeyIsMissing', 'AssetMetadataValueIsLocked', 'AssetMetadataLocalKeyAlreadyExists', 'AssetMetadataGlobalKeyAlreadyExists', 'TickerFirstByteNotValid', 'UnexpectedNonFungibleToken', 'IncompatibleAssetTypeUpdate', 'AssetMetadataKeyBelongsToNFTCollection', 'AssetMetadataValueIsEmpty', 'NumberOfAssetMediatorsExceeded', 'InvalidTickerCharacter', 'InvalidTransferFrozenAsset', 'InvalidTransferComplianceFailure', 'InvalidTransferInvalidReceiverCDD', 'InvalidTransferInvalidSenderCDD', 'TickerRegistrationNotFound', 'TickerIsAlreadyLinkedToAnAsset', 'AssetIdGenerationError', 'TickerNotRegisteredToCaller'] + _enum: ['Unauthorized', 'AssetAlreadyCreated', 'TickerTooLong', 'TickerNotAlphanumeric', 'TickerAlreadyRegistered', 'TotalSupplyAboveLimit', 'NoSuchAsset', 'AlreadyFrozen', 'NotAnOwner', 'BalanceOverflow', 'TotalSupplyOverflow', 'InvalidGranularity', 'NotFrozen', 'InvalidTransfer', 'InsufficientBalance', 'AssetAlreadyDivisible', 'InvalidEthereumSignature', 'TickerRegistrationExpired', 'SenderSameAsReceiver', 'NoSuchDoc', 'MaxLengthOfAssetNameExceeded', 'FundingRoundNameMaxLengthExceeded', 'InvalidAssetIdentifier', 'InvestorUniquenessClaimNotAllowed', 'InvalidCustomAssetTypeId', 'AssetMetadataNameMaxLengthExceeded', 'AssetMetadataValueMaxLengthExceeded', 'AssetMetadataTypeDefMaxLengthExceeded', 'AssetMetadataKeyIsMissing', 'AssetMetadataValueIsLocked', 'AssetMetadataLocalKeyAlreadyExists', 'AssetMetadataGlobalKeyAlreadyExists', 'TickerFirstByteNotValid', 'UnexpectedNonFungibleToken', 'IncompatibleAssetTypeUpdate', 'AssetMetadataKeyBelongsToNFTCollection', 'AssetMetadataValueIsEmpty', 'NumberOfAssetMediatorsExceeded', 'InvalidTickerCharacter', 'InvalidTransferFrozenAsset', 'InvalidTransferComplianceFailure', 'InvalidTransferInvalidReceiverCDD', 'InvalidTransferInvalidSenderCDD', 'TickerRegistrationNotFound', 'TickerIsAlreadyLinkedToAnAsset', 'AssetIdGenerationError', 'TickerNotRegisteredToCaller', 'AssetIsAlreadyLinkedToATicker', 'TickerIsNotLinkedToTheAsset', 'BadAuthorizationType'] }, /** - * Lookup644: pallet_corporate_actions::distribution::Error + * Lookup626: pallet_corporate_actions::distribution::pallet::Error **/ - PalletCorporateActionsDistributionError: { + PalletCorporateActionsDistributionPalletError: { _enum: ['CANotBenefit', 'AlreadyExists', 'ExpiryBeforePayment', 'HolderAlreadyPaid', 'NoSuchDistribution', 'CannotClaimBeforeStart', 'CannotClaimAfterExpiry', 'BalancePerShareProductOverflowed', 'NotDistributionCreator', 'AlreadyReclaimed', 'NotExpired', 'DistributionStarted', 'InsufficientRemainingAmount', 'DistributionAmountIsZero', 'DistributionPerShareIsZero'] }, /** - * Lookup648: polymesh_common_utilities::traits::checkpoint::NextCheckpoints + * Lookup630: polymesh_common_utilities::traits::checkpoint::NextCheckpoints **/ PolymeshCommonUtilitiesCheckpointNextCheckpoints: { nextAt: 'u64', @@ -4287,44 +4241,44 @@ export default { schedules: 'BTreeMap' }, /** - * Lookup654: pallet_asset::checkpoint::Error + * Lookup636: pallet_asset::checkpoint::pallet::Error **/ - PalletAssetCheckpointError: { + PalletAssetCheckpointPalletError: { _enum: ['NoSuchSchedule', 'ScheduleNotRemovable', 'SchedulesOverMaxComplexity', 'ScheduleIsEmpty', 'ScheduleFinished', 'ScheduleHasExpiredCheckpoints'] }, /** - * Lookup655: polymesh_primitives::compliance_manager::AssetCompliance + * Lookup637: polymesh_primitives::compliance_manager::AssetCompliance **/ PolymeshPrimitivesComplianceManagerAssetCompliance: { paused: 'bool', requirements: 'Vec' }, /** - * Lookup657: pallet_compliance_manager::Error + * Lookup639: pallet_compliance_manager::pallet::Error **/ PalletComplianceManagerError: { _enum: ['Unauthorized', 'DidNotExist', 'InvalidComplianceRequirementId', 'IncorrectOperationOnTrustedIssuer', 'DuplicateComplianceRequirements', 'ComplianceRequirementTooComplex', 'WeightLimitExceeded'] }, /** - * Lookup660: pallet_corporate_actions::Error + * Lookup642: pallet_corporate_actions::pallet::Error **/ PalletCorporateActionsError: { _enum: ['DetailsTooLong', 'DuplicateDidTax', 'TooManyDidTaxes', 'TooManyTargetIds', 'NoSuchCheckpointId', 'NoSuchCA', 'NoRecordDate', 'RecordDateAfterStart', 'DeclDateAfterRecordDate', 'DeclDateInFuture', 'NotTargetedByCA'] }, /** - * Lookup664: pallet_corporate_actions::ballot::Error + * Lookup646: pallet_corporate_actions::ballot::pallet::Error **/ - PalletCorporateActionsBallotError: { + PalletCorporateActionsBallotPalletError: { _enum: ['CANotNotice', 'AlreadyExists', 'NoSuchBallot', 'StartAfterEnd', 'NowAfterEnd', 'NumberOfChoicesOverflow', 'VotingAlreadyStarted', 'VotingNotStarted', 'VotingAlreadyEnded', 'WrongVoteCount', 'InsufficientVotes', 'NoSuchRCVFallback', 'RCVSelfCycle', 'RCVNotAllowed'] }, /** - * Lookup665: pallet_permissions::Error + * Lookup647: pallet_permissions::pallet::Error **/ PalletPermissionsError: { _enum: ['UnauthorizedCaller'] }, /** - * Lookup666: pallet_pips::PipsMetadata + * Lookup648: pallet_pips::types::PipsMetadata **/ PalletPipsPipsMetadata: { id: 'u32', @@ -4332,17 +4286,17 @@ export default { description: 'Option', createdAt: 'u32', transactionVersion: 'u32', - expiry: 'PolymeshCommonUtilitiesMaybeBlock' + expiry: 'PolymeshPrimitivesMaybeBlock' }, /** - * Lookup668: pallet_pips::DepositInfo + * Lookup650: pallet_pips::types::DepositInfo **/ PalletPipsDepositInfo: { owner: 'AccountId32', amount: 'u128' }, /** - * Lookup669: pallet_pips::Pip + * Lookup651: pallet_pips::types::Pip **/ PalletPipsPip: { id: 'u32', @@ -4350,7 +4304,7 @@ export default { proposer: 'PalletPipsProposer' }, /** - * Lookup670: pallet_pips::VotingResult + * Lookup652: pallet_pips::types::VotingResult **/ PalletPipsVotingResult: { ayesCount: 'u32', @@ -4359,11 +4313,11 @@ export default { naysStake: 'u128' }, /** - * Lookup671: pallet_pips::Vote + * Lookup653: pallet_pips::types::Vote **/ PalletPipsVote: '(bool,u128)', /** - * Lookup672: pallet_pips::SnapshotMetadata + * Lookup654: pallet_pips::types::SnapshotMetadata **/ PalletPipsSnapshotMetadata: { createdAt: 'u32', @@ -4371,25 +4325,25 @@ export default { id: 'u32' }, /** - * Lookup674: pallet_pips::Error + * Lookup656: pallet_pips::pallet::Error **/ PalletPipsError: { - _enum: ['RescheduleNotByReleaseCoordinator', 'NotFromCommunity', 'NotByCommittee', 'TooManyActivePips', 'IncorrectDeposit', 'InsufficientDeposit', 'NoSuchProposal', 'NotACommitteeMember', 'InvalidFutureBlockNumber', 'NumberOfVotesExceeded', 'StakeAmountOfVotesExceeded', 'MissingCurrentIdentity', 'IncorrectProposalState', 'CannotSkipPip', 'SnapshotResultTooLarge', 'SnapshotIdMismatch', 'ScheduledProposalDoesntExist', 'ProposalNotInScheduledState'] + _enum: ['RescheduleNotByReleaseCoordinator', 'NotFromCommunity', 'NotByCommittee', 'TooManyActivePips', 'IncorrectDeposit', 'InsufficientDeposit', 'NoSuchProposal', 'NotACommitteeMember', 'InvalidFutureBlockNumber', 'NumberOfVotesExceeded', 'StakeAmountOfVotesExceeded', 'MissingCurrentIdentity', 'IncorrectProposalState', 'CannotSkipPip', 'SnapshotResultTooLarge', 'SnapshotIdMismatch', 'ScheduledProposalDoesntExist', 'ProposalNotInScheduledState', 'InvalidPipId'] }, /** - * Lookup682: pallet_portfolio::Error + * Lookup664: pallet_portfolio::pallet::Error **/ PalletPortfolioError: { - _enum: ['PortfolioDoesNotExist', 'InsufficientPortfolioBalance', 'DestinationIsSamePortfolio', 'PortfolioNameAlreadyInUse', 'SecondaryKeyNotAuthorizedForPortfolio', 'UnauthorizedCustodian', 'InsufficientTokensLocked', 'PortfolioNotEmpty', 'DifferentIdentityPortfolios', 'NoDuplicateAssetsAllowed', 'NFTNotFoundInPortfolio', 'NFTAlreadyLocked', 'NFTNotLocked', 'InvalidTransferNFTNotOwned', 'InvalidTransferNFTIsLocked', 'EmptyTransfer', 'MissingOwnersPermission', 'InvalidTransferSenderIdMatchesReceiverId'] + _enum: ['PortfolioDoesNotExist', 'InsufficientPortfolioBalance', 'DestinationIsSamePortfolio', 'PortfolioNameAlreadyInUse', 'SecondaryKeyNotAuthorizedForPortfolio', 'UnauthorizedCustodian', 'InsufficientTokensLocked', 'PortfolioNotEmpty', 'DifferentIdentityPortfolios', 'NoDuplicateAssetsAllowed', 'NFTNotFoundInPortfolio', 'NFTAlreadyLocked', 'NFTNotLocked', 'InvalidTransferNFTNotOwned', 'InvalidTransferNFTIsLocked', 'EmptyTransfer', 'MissingOwnersPermission', 'InvalidTransferSenderIdMatchesReceiverId', 'SelfAdditionNotAllowed', 'BadAuthorizationType', 'DefaultPortfoliosCannotHaveCustodians'] }, /** - * Lookup683: pallet_protocol_fee::Error + * Lookup665: pallet_protocol_fee::pallet::Error **/ PalletProtocolFeeError: { _enum: ['InsufficientAccountBalance', 'UnHandledImbalances', 'InsufficientSubsidyBalance'] }, /** - * Lookup686: pallet_scheduler::Scheduled, BlockNumber, polymesh_runtime_develop::runtime::OriginCaller, sp_core::crypto::AccountId32> + * Lookup668: pallet_scheduler::Scheduled, BlockNumber, polymesh_runtime_develop::runtime::OriginCaller, sp_core::crypto::AccountId32> **/ PalletSchedulerScheduled: { maybeId: 'Option<[u8;32]>', @@ -4399,7 +4353,7 @@ export default { origin: 'PolymeshRuntimeDevelopRuntimeOriginCaller' }, /** - * Lookup687: frame_support::traits::preimages::Bounded + * Lookup669: frame_support::traits::preimages::Bounded **/ FrameSupportPreimagesBounded: { _enum: { @@ -4420,20 +4374,20 @@ export default { } }, /** - * Lookup690: pallet_scheduler::pallet::Error + * Lookup672: pallet_scheduler::pallet::Error **/ PalletSchedulerError: { _enum: ['FailedToSchedule', 'NotFound', 'TargetBlockNumberInPast', 'RescheduleNoChange', 'Named'] }, /** - * Lookup691: polymesh_primitives::settlement::Venue + * Lookup673: polymesh_primitives::settlement::Venue **/ PolymeshPrimitivesSettlementVenue: { creator: 'PolymeshPrimitivesIdentityId', venueType: 'PolymeshPrimitivesSettlementVenueType' }, /** - * Lookup695: polymesh_primitives::settlement::Instruction + * Lookup677: polymesh_primitives::settlement::Instruction **/ PolymeshPrimitivesSettlementInstruction: { instructionId: 'u64', @@ -4444,7 +4398,7 @@ export default { valueDate: 'Option' }, /** - * Lookup697: polymesh_primitives::settlement::LegStatus + * Lookup679: polymesh_primitives::settlement::LegStatus **/ PolymeshPrimitivesSettlementLegStatus: { _enum: { @@ -4454,13 +4408,13 @@ export default { } }, /** - * Lookup699: polymesh_primitives::settlement::AffirmationStatus + * Lookup681: polymesh_primitives::settlement::AffirmationStatus **/ PolymeshPrimitivesSettlementAffirmationStatus: { _enum: ['Unknown', 'Pending', 'Affirmed'] }, /** - * Lookup702: polymesh_primitives::settlement::InstructionStatus + * Lookup684: polymesh_primitives::settlement::InstructionStatus **/ PolymeshPrimitivesSettlementInstructionStatus: { _enum: { @@ -4468,11 +4422,12 @@ export default { Pending: 'Null', Failed: 'Null', Success: 'u32', - Rejected: 'u32' + Rejected: 'u32', + LockedForExecution: 'Null' } }, /** - * Lookup704: polymesh_primitives::settlement::MediatorAffirmationStatus + * Lookup686: polymesh_primitives::settlement::MediatorAffirmationStatus **/ PolymeshPrimitivesSettlementMediatorAffirmationStatus: { _enum: { @@ -4484,94 +4439,86 @@ export default { } }, /** - * Lookup706: pallet_settlement::Error + * Lookup688: pallet_settlement::pallet::Error **/ PalletSettlementError: { - _enum: ['InvalidVenue', 'Unauthorized', 'InstructionNotAffirmed', 'UnauthorizedSigner', 'ReceiptAlreadyClaimed', 'UnauthorizedVenue', 'InstructionDatesInvalid', 'InstructionSettleBlockPassed', 'InvalidSignature', 'SameSenderReceiver', 'SettleOnPastBlock', 'UnexpectedAffirmationStatus', 'FailedToSchedule', 'UnknownInstruction', 'SignerAlreadyExists', 'SignerDoesNotExist', 'ZeroAmount', 'InstructionSettleBlockNotReached', 'CallerIsNotAParty', 'MaxNumberOfNFTsExceeded', 'NumberOfTransferredNFTsUnderestimated', 'ReceiptForInvalidLegType', 'WeightLimitExceeded', 'MaxNumberOfFungibleAssetsExceeded', 'MaxNumberOfOffChainAssetsExceeded', 'NumberOfFungibleTransfersUnderestimated', 'UnexpectedOFFChainAsset', 'OffChainAssetCantBeLocked', 'NumberOfOffChainTransfersUnderestimated', 'LegNotFound', 'InputWeightIsLessThanMinimum', 'MaxNumberOfReceiptsExceeded', 'NotAllAffirmationsHaveBeenReceived', 'InvalidInstructionStatusForExecution', 'FailedToReleaseLockOrTransferAssets', 'DuplicateReceiptUid', 'ReceiptInstructionIdMissmatch', 'MultipleReceiptsForOneLeg', 'UnexpectedLegStatus', 'NumberOfVenueSignersExceeded', 'CallerIsNotAMediator', 'InvalidExpiryDate', 'MediatorAffirmationExpired'] + _enum: ['InvalidVenue', 'Unauthorized', 'InstructionNotAffirmed', 'UnauthorizedSigner', 'ReceiptAlreadyClaimed', 'UnauthorizedVenue', 'InstructionDatesInvalid', 'InstructionSettleBlockPassed', 'InvalidSignature', 'SameSenderReceiver', 'SettleOnPastBlock', 'UnexpectedAffirmationStatus', 'FailedToSchedule', 'UnknownInstruction', 'SignerAlreadyExists', 'SignerDoesNotExist', 'ZeroAmount', 'InstructionSettleBlockNotReached', 'CallerIsNotAParty', 'MaxNumberOfNFTsExceeded', 'NumberOfTransferredNFTsUnderestimated', 'ReceiptForInvalidLegType', 'WeightLimitExceeded', 'MaxNumberOfFungibleAssetsExceeded', 'MaxNumberOfOffChainAssetsExceeded', 'NumberOfFungibleTransfersUnderestimated', 'UnexpectedOFFChainAsset', 'OffChainAssetCantBeLocked', 'NumberOfOffChainTransfersUnderestimated', 'LegNotFound', 'InputWeightIsLessThanMinimum', 'MaxNumberOfReceiptsExceeded', 'NotAllAffirmationsHaveBeenReceived', 'InvalidInstructionStatusForExecution', 'FailedToReleaseLockOrTransferAssets', 'DuplicateReceiptUid', 'ReceiptInstructionIdMissmatch', 'MultipleReceiptsForOneLeg', 'UnexpectedLegStatus', 'NumberOfVenueSignersExceeded', 'CallerIsNotAMediator', 'InvalidExpiryDate', 'MediatorAffirmationExpired', 'OffChainAssetsMustHaveAVenue', 'UnexpectedSettlementType', 'InvalidInstructionStatusForRejection', 'LockTimestampNotFound', 'ExceededMaximumLockingPeriod', 'FailedAssetTransferringConditions'] }, /** - * Lookup709: polymesh_primitives::statistics::Stat1stKey + * Lookup691: polymesh_primitives::statistics::Stat1stKey **/ PolymeshPrimitivesStatisticsStat1stKey: { assetId: 'PolymeshPrimitivesAssetAssetId', statType: 'PolymeshPrimitivesStatisticsStatType' }, /** - * Lookup710: polymesh_primitives::transfer_compliance::AssetTransferCompliance + * Lookup692: polymesh_primitives::transfer_compliance::AssetTransferCompliance **/ PolymeshPrimitivesTransferComplianceAssetTransferCompliance: { paused: 'bool', requirements: 'BTreeSet' }, /** - * Lookup714: pallet_statistics::Error + * Lookup696: pallet_statistics::pallet::Error **/ PalletStatisticsError: { - _enum: ['InvalidTransfer', 'StatTypeMissing', 'StatTypeNeededByTransferCondition', 'CannotRemoveStatTypeInUse', 'StatTypeLimitReached', 'TransferConditionLimitReached', 'WeightLimitExceeded'] + _enum: ['InvalidTransferStatisticsFailure', 'StatTypeMissing', 'StatTypeNeededByTransferCondition', 'CannotRemoveStatTypeInUse', 'StatTypeLimitReached', 'TransferConditionLimitReached', 'WeightLimitExceeded'] }, /** - * Lookup717: pallet_sto::Error + * Lookup699: pallet_sto::pallet::Error **/ PalletStoError: { - _enum: ['Unauthorized', 'Overflow', 'InsufficientTokensRemaining', 'FundraiserNotFound', 'FundraiserNotLive', 'FundraiserClosed', 'FundraiserExpired', 'InvalidVenue', 'InvalidPriceTiers', 'InvalidOfferingWindow', 'MaxPriceExceeded', 'InvestmentAmountTooLow'] + _enum: ['Unauthorized', 'Overflow', 'InsufficientTokensRemaining', 'FundraiserNotFound', 'FundraiserNotLive', 'FundraiserClosed', 'FundraiserExpired', 'InvalidVenue', 'InvalidPriceTiers', 'InvalidOfferingWindow', 'MaxPriceExceeded', 'InvestmentAmountTooLow', 'InvalidSignature', 'OffchainFundingNotAllowed'] }, /** - * Lookup718: pallet_treasury::Error + * Lookup700: pallet_treasury::pallet::Error **/ PalletTreasuryError: { _enum: ['InsufficientBalance', 'InvalidIdentity'] }, /** - * Lookup719: pallet_utility::pallet::Error + * Lookup701: pallet_utility::pallet::Error **/ PalletUtilityError: { _enum: ['TooManyCalls', 'InvalidSignature', 'TargetCddMissing', 'InvalidNonce', 'UnableToDeriveAccountId'] }, /** - * Lookup720: pallet_base::Error + * Lookup702: pallet_base::pallet::Error **/ PalletBaseError: { _enum: ['TooLong', 'CounterOverflow'] }, /** - * Lookup723: pallet_external_agents::Error + * Lookup705: pallet_external_agents::pallet::Error **/ PalletExternalAgentsError: { - _enum: ['NoSuchAG', 'UnauthorizedAgent', 'AlreadyAnAgent', 'NotAnAgent', 'RemovingLastFullAgent', 'SecondaryKeyNotAuthorizedForAsset'] + _enum: ['NoSuchAG', 'UnauthorizedAgent', 'AlreadyAnAgent', 'NotAnAgent', 'RemovingLastFullAgent', 'SecondaryKeyNotAuthorizedForAsset', 'BadAuthorizationType'] }, /** - * Lookup724: pallet_relayer::Subsidy + * Lookup706: pallet_relayer::pallet::Subsidy **/ PalletRelayerSubsidy: { payingKey: 'AccountId32', remaining: 'u128' }, /** - * Lookup725: pallet_relayer::Error + * Lookup707: pallet_relayer::pallet::Error **/ PalletRelayerError: { - _enum: ['UserKeyCddMissing', 'PayingKeyCddMissing', 'NoPayingKey', 'NotPayingKey', 'NotAuthorizedForPayingKey', 'NotAuthorizedForUserKey', 'Overflow'] - }, - /** - * Lookup727: pallet_contracts::wasm::PrefabWasmModule - **/ - PalletContractsWasmPrefabWasmModule: { - instructionWeightsVersion: 'Compact', - initial: 'Compact', - maximum: 'Compact', - code: 'Bytes', - determinism: 'PalletContractsWasmDeterminism' + _enum: ['UserKeyCddMissing', 'PayingKeyCddMissing', 'NoPayingKey', 'NotPayingKey', 'NotAuthorizedForPayingKey', 'NotAuthorizedForUserKey', 'Overflow', 'BadAuthorizationType'] }, /** - * Lookup729: pallet_contracts::wasm::OwnerInfo + * Lookup709: pallet_contracts::wasm::CodeInfo **/ - PalletContractsWasmOwnerInfo: { + PalletContractsWasmCodeInfo: { owner: 'AccountId32', deposit: 'Compact', - refcount: 'Compact' + refcount: 'Compact', + determinism: 'PalletContractsWasmDeterminism', + codeLen: 'u32' }, /** - * Lookup730: pallet_contracts::storage::ContractInfo + * Lookup710: pallet_contracts::storage::ContractInfo **/ PalletContractsStorageContractInfo: { trieId: 'Bytes', @@ -4581,16 +4528,18 @@ export default { storageItems: 'u32', storageByteDeposit: 'u128', storageItemDeposit: 'u128', - storageBaseDeposit: 'u128' + storageBaseDeposit: 'u128', + delegateDependencies: 'BTreeMap' }, /** - * Lookup733: pallet_contracts::storage::DeletedContract + * Lookup716: pallet_contracts::storage::DeletionQueueManager **/ - PalletContractsStorageDeletedContract: { - trieId: 'Bytes' + PalletContractsStorageDeletionQueueManager: { + insertCounter: 'u32', + deleteCounter: 'u32' }, /** - * Lookup735: pallet_contracts::schedule::Schedule + * Lookup718: pallet_contracts::schedule::Schedule **/ PalletContractsSchedule: { limits: 'PalletContractsScheduleLimits', @@ -4598,7 +4547,7 @@ export default { hostFnWeights: 'PalletContractsScheduleHostFnWeights' }, /** - * Lookup736: pallet_contracts::schedule::Limits + * Lookup719: pallet_contracts::schedule::Limits **/ PalletContractsScheduleLimits: { eventTopics: 'u32', @@ -4609,72 +4558,17 @@ export default { tableSize: 'u32', brTableSize: 'u32', subjectLen: 'u32', - payloadLen: 'u32' + payloadLen: 'u32', + runtimeMemory: 'u32' }, /** - * Lookup737: pallet_contracts::schedule::InstructionWeights + * Lookup720: pallet_contracts::schedule::InstructionWeights **/ PalletContractsScheduleInstructionWeights: { - _alias: { - r_if: 'r#if' - }, - version: 'u32', - fallback: 'u32', - i64const: 'u32', - i64load: 'u32', - i64store: 'u32', - select: 'u32', - r_if: 'u32', - br: 'u32', - brIf: 'u32', - brTable: 'u32', - brTablePerEntry: 'u32', - call: 'u32', - callIndirect: 'u32', - callIndirectPerParam: 'u32', - callPerLocal: 'u32', - localGet: 'u32', - localSet: 'u32', - localTee: 'u32', - globalGet: 'u32', - globalSet: 'u32', - memoryCurrent: 'u32', - memoryGrow: 'u32', - i64clz: 'u32', - i64ctz: 'u32', - i64popcnt: 'u32', - i64eqz: 'u32', - i64extendsi32: 'u32', - i64extendui32: 'u32', - i32wrapi64: 'u32', - i64eq: 'u32', - i64ne: 'u32', - i64lts: 'u32', - i64ltu: 'u32', - i64gts: 'u32', - i64gtu: 'u32', - i64les: 'u32', - i64leu: 'u32', - i64ges: 'u32', - i64geu: 'u32', - i64add: 'u32', - i64sub: 'u32', - i64mul: 'u32', - i64divs: 'u32', - i64divu: 'u32', - i64rems: 'u32', - i64remu: 'u32', - i64and: 'u32', - i64or: 'u32', - i64xor: 'u32', - i64shl: 'u32', - i64shrs: 'u32', - i64shru: 'u32', - i64rotl: 'u32', - i64rotr: 'u32' - }, - /** - * Lookup738: pallet_contracts::schedule::HostFnWeights + base: 'u32' + }, + /** + * Lookup721: pallet_contracts::schedule::HostFnWeights **/ PalletContractsScheduleHostFnWeights: { _alias: { @@ -4685,6 +4579,7 @@ export default { codeHash: 'SpWeightsWeightV2Weight', ownCodeHash: 'SpWeightsWeightV2Weight', callerIsOrigin: 'SpWeightsWeightV2Weight', + callerIsRoot: 'SpWeightsWeightV2Weight', address: 'SpWeightsWeightV2Weight', gasLeft: 'SpWeightsWeightV2Weight', balance: 'SpWeightsWeightV2Weight', @@ -4693,7 +4588,6 @@ export default { blockNumber: 'SpWeightsWeightV2Weight', now: 'SpWeightsWeightV2Weight', weightToFee: 'SpWeightsWeightV2Weight', - gas: 'SpWeightsWeightV2Weight', input: 'SpWeightsWeightV2Weight', inputPerByte: 'SpWeightsWeightV2Weight', r_return: 'SpWeightsWeightV2Weight', @@ -4736,24 +4630,28 @@ export default { hashBlake2128PerByte: 'SpWeightsWeightV2Weight', ecdsaRecover: 'SpWeightsWeightV2Weight', ecdsaToEthAddress: 'SpWeightsWeightV2Weight', + sr25519Verify: 'SpWeightsWeightV2Weight', + sr25519VerifyPerByte: 'SpWeightsWeightV2Weight', reentranceCount: 'SpWeightsWeightV2Weight', accountReentranceCount: 'SpWeightsWeightV2Weight', - instantiationNonce: 'SpWeightsWeightV2Weight' + instantiationNonce: 'SpWeightsWeightV2Weight', + addDelegateDependency: 'SpWeightsWeightV2Weight', + removeDelegateDependency: 'SpWeightsWeightV2Weight' }, /** - * Lookup739: pallet_contracts::pallet::Error + * Lookup722: pallet_contracts::pallet::Error **/ PalletContractsError: { - _enum: ['InvalidScheduleVersion', 'InvalidCallFlags', 'OutOfGas', 'OutputBufferTooSmall', 'TransferFailed', 'MaxCallDepthReached', 'ContractNotFound', 'CodeTooLarge', 'CodeNotFound', 'OutOfBounds', 'DecodingFailed', 'ContractTrapped', 'ValueTooLarge', 'TerminatedWhileReentrant', 'InputForwarded', 'RandomSubjectTooLong', 'TooManyTopics', 'NoChainExtension', 'DeletionQueueFull', 'DuplicateContract', 'TerminatedInConstructor', 'ReentranceDenied', 'StorageDepositNotEnoughFunds', 'StorageDepositLimitExhausted', 'CodeInUse', 'ContractReverted', 'CodeRejected', 'Indeterministic'] + _enum: ['InvalidSchedule', 'InvalidCallFlags', 'OutOfGas', 'OutputBufferTooSmall', 'TransferFailed', 'MaxCallDepthReached', 'ContractNotFound', 'CodeTooLarge', 'CodeNotFound', 'CodeInfoNotFound', 'OutOfBounds', 'DecodingFailed', 'ContractTrapped', 'ValueTooLarge', 'TerminatedWhileReentrant', 'InputForwarded', 'RandomSubjectTooLong', 'TooManyTopics', 'NoChainExtension', 'DuplicateContract', 'TerminatedInConstructor', 'ReentranceDenied', 'StorageDepositNotEnoughFunds', 'StorageDepositLimitExhausted', 'CodeInUse', 'ContractReverted', 'CodeRejected', 'Indeterministic', 'MigrationInProgress', 'NoMigrationPerformed', 'MaxDelegateDependenciesReached', 'DelegateDependencyNotFound', 'DelegateDependencyAlreadyExists', 'CannotAddSelfAsDelegateDependency'] }, /** - * Lookup741: polymesh_contracts::Error + * Lookup724: polymesh_contracts::pallet::Error **/ PolymeshContractsError: { _enum: ['InvalidFuncId', 'InvalidRuntimeCall', 'ReadStorageFailed', 'DataLeftAfterDecoding', 'InLenTooLarge', 'OutLenTooLarge', 'InstantiatorWithNoIdentity', 'RuntimeCallDenied', 'CallerNotAPrimaryKey', 'MissingKeyPermissions', 'InvalidChainVersion', 'NoUpgradesSupported'] }, /** - * Lookup742: pallet_preimage::RequestStatus + * Lookup725: pallet_preimage::RequestStatus **/ PalletPreimageRequestStatus: { _enum: { @@ -4769,26 +4667,26 @@ export default { } }, /** - * Lookup746: pallet_preimage::pallet::Error + * Lookup729: pallet_preimage::pallet::Error **/ PalletPreimageError: { _enum: ['TooBig', 'AlreadyNoted', 'NotAuthorized', 'NotNoted', 'Requested', 'NotRequested'] }, /** - * Lookup747: polymesh_primitives::nft::NFTCollection + * Lookup730: polymesh_primitives::nft::NFTCollection **/ PolymeshPrimitivesNftNftCollection: { id: 'u64', assetId: 'PolymeshPrimitivesAssetAssetId' }, /** - * Lookup752: pallet_nft::Error + * Lookup734: pallet_nft::pallet::Error **/ PalletNftError: { - _enum: ['BalanceOverflow', 'BalanceUnderflow', 'CollectionAlredyRegistered', 'CollectionNotFound', 'DuplicateMetadataKey', 'DuplicatedNFTId', 'InvalidAssetType', 'InvalidMetadataAttribute', 'InvalidNFTTransferCollectionNotFound', 'InvalidNFTTransferSamePortfolio', 'InvalidNFTTransferNFTNotOwned', 'InvalidNFTTransferCountOverflow', 'InvalidNFTTransferComplianceFailure', 'InvalidNFTTransferFrozenAsset', 'InvalidNFTTransferInsufficientCount', 'MaxNumberOfKeysExceeded', 'MaxNumberOfNFTsPerLegExceeded', 'NFTNotFound', 'UnregisteredMetadataKey', 'ZeroCount', 'SupplyOverflow', 'SupplyUnderflow', 'InvalidNFTTransferNFTIsLocked', 'InvalidNFTTransferSenderIdMatchesReceiverId', 'InvalidNFTTransferInvalidReceiverCDD', 'InvalidNFTTransferInvalidSenderCDD', 'InvalidAssetId'] + _enum: ['BalanceOverflow', 'BalanceUnderflow', 'CollectionAlredyRegistered', 'CollectionNotFound', 'DuplicateMetadataKey', 'DuplicatedNFTId', 'InvalidAssetType', 'InvalidMetadataAttribute', 'InvalidNFTTransferCollectionNotFound', 'InvalidNFTTransferSamePortfolio', 'InvalidNFTTransferNFTNotOwned', 'InvalidNFTTransferCountOverflow', 'InvalidNFTTransferComplianceFailure', 'InvalidNFTTransferFrozenAsset', 'InvalidNFTTransferInsufficientCount', 'MaxNumberOfKeysExceeded', 'MaxNumberOfNFTsPerLegExceeded', 'NFTNotFound', 'UnregisteredMetadataKey', 'ZeroCount', 'SupplyOverflow', 'SupplyUnderflow', 'InvalidNFTTransferNFTIsLocked', 'InvalidNFTTransferSenderIdMatchesReceiverId', 'InvalidNFTTransferInvalidReceiverCDD', 'InvalidNFTTransferInvalidSenderCDD', 'InvalidAssetId', 'NFTIsLocked', 'NumberOfKeysIsLessThanExpected'] }, /** - * Lookup753: pallet_election_provider_multi_phase::ReadySolution + * Lookup735: pallet_election_provider_multi_phase::ReadySolution **/ PalletElectionProviderMultiPhaseReadySolution: { supports: 'Vec<(AccountId32,SpNposElectionsSupport)>', @@ -4796,14 +4694,14 @@ export default { compute: 'PalletElectionProviderMultiPhaseElectionCompute' }, /** - * Lookup755: pallet_election_provider_multi_phase::RoundSnapshot + * Lookup737: pallet_election_provider_multi_phase::RoundSnapshot **/ PalletElectionProviderMultiPhaseRoundSnapshot: { voters: 'Vec<(AccountId32,u64,Vec)>', targets: 'Vec' }, /** - * Lookup761: pallet_election_provider_multi_phase::signed::SignedSubmission + * Lookup743: pallet_election_provider_multi_phase::signed::SignedSubmission **/ PalletElectionProviderMultiPhaseSignedSignedSubmission: { who: 'AccountId32', @@ -4812,49 +4710,37 @@ export default { callFee: 'u128' }, /** - * Lookup762: pallet_election_provider_multi_phase::pallet::Error + * Lookup744: pallet_election_provider_multi_phase::pallet::Error **/ PalletElectionProviderMultiPhaseError: { _enum: ['PreDispatchEarlySubmission', 'PreDispatchWrongWinnerCount', 'PreDispatchWeakSubmission', 'SignedQueueFull', 'SignedCannotPayDeposit', 'SignedInvalidWitness', 'SignedTooMuchWeight', 'OcwCallWrongEra', 'MissingSnapshotMetadata', 'InvalidSubmissionIndex', 'CallNotAllowed', 'FallbackFailed', 'BoundNotMet', 'TooManyWinners'] }, /** - * Lookup763: pallet_test_utils::Error - **/ - PalletTestUtilsError: 'Null', - /** - * Lookup766: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup747: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: 'Null', /** - * Lookup767: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup748: frame_system::extensions::check_tx_version::CheckTxVersion **/ FrameSystemExtensionsCheckTxVersion: 'Null', /** - * Lookup768: frame_system::extensions::check_genesis::CheckGenesis + * Lookup749: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: 'Null', /** - * Lookup771: frame_system::extensions::check_nonce::CheckNonce + * Lookup752: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: 'Compact', /** - * Lookup772: polymesh_extensions::check_weight::CheckWeight - **/ - PolymeshExtensionsCheckWeight: 'FrameSystemExtensionsCheckWeight', - /** - * Lookup773: frame_system::extensions::check_weight::CheckWeight + * Lookup753: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: 'Null', /** - * Lookup774: pallet_transaction_payment::ChargeTransactionPayment + * Lookup754: pallet_transaction_payment::ChargeTransactionPayment **/ PalletTransactionPaymentChargeTransactionPayment: 'Compact', /** - * Lookup775: pallet_permissions::StoreCallMetadata - **/ - PalletPermissionsStoreCallMetadata: 'Null', - /** - * Lookup776: polymesh_runtime_develop::runtime::Runtime + * Lookup755: pallet_permissions::StoreCallMetadata **/ - PolymeshRuntimeDevelopRuntime: 'Null' + PalletPermissionsStoreCallMetadata: 'Null' }; diff --git a/scripts/cli/src/interfaces/registry.ts b/scripts/cli/src/interfaces/registry.ts index e697becd93..98b22ac2cc 100644 --- a/scripts/cli/src/interfaces/registry.ts +++ b/scripts/cli/src/interfaces/registry.ts @@ -5,7 +5,7 @@ // this is required to allow for ambient/previous definitions import '@polkadot/types/types/registry'; -import type { FinalityGrandpaEquivocationPrecommit, FinalityGrandpaEquivocationPrevote, FinalityGrandpaPrecommit, FinalityGrandpaPrevote, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPreimagesBounded, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, PalletAssetAssetDetails, PalletAssetCall, PalletAssetCheckpointCall, PalletAssetCheckpointError, PalletAssetError, PalletAssetTickerRegistration, PalletAssetTickerRegistrationConfig, PalletBabeCall, PalletBabeError, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBaseCall, PalletBaseError, PalletBridgeBridgeTxDetail, PalletBridgeBridgeTxStatus, PalletCommitteeCall, PalletCommitteeError, PalletCommitteeInstance1, PalletCommitteeInstance3, PalletCommitteeInstance4, PalletCommitteePolymeshVotes, PalletCommitteeRawEventInstance1, PalletCommitteeRawEventInstance3, PalletCommitteeRawEventInstance4, PalletCommitteeRawOriginInstance1, PalletCommitteeRawOriginInstance3, PalletCommitteeRawOriginInstance4, PalletComplianceManagerCall, PalletComplianceManagerError, PalletContractsCall, PalletContractsError, PalletContractsEvent, PalletContractsSchedule, PalletContractsScheduleHostFnWeights, PalletContractsScheduleInstructionWeights, PalletContractsScheduleLimits, PalletContractsStorageContractInfo, PalletContractsStorageDeletedContract, PalletContractsWasmDeterminism, PalletContractsWasmOwnerInfo, PalletContractsWasmPrefabWasmModule, PalletCorporateActionsBallotBallotMeta, PalletCorporateActionsBallotBallotTimeRange, PalletCorporateActionsBallotBallotVote, PalletCorporateActionsBallotCall, PalletCorporateActionsBallotError, PalletCorporateActionsBallotEvent, PalletCorporateActionsBallotMotion, PalletCorporateActionsCaCheckpoint, PalletCorporateActionsCaId, PalletCorporateActionsCaKind, PalletCorporateActionsCall, PalletCorporateActionsCorporateAction, PalletCorporateActionsDistribution, PalletCorporateActionsDistributionCall, PalletCorporateActionsDistributionError, PalletCorporateActionsDistributionEvent, PalletCorporateActionsError, PalletCorporateActionsEvent, PalletCorporateActionsInitiateCorporateActionArgs, PalletCorporateActionsRecordDate, PalletCorporateActionsRecordDateSpec, PalletCorporateActionsTargetIdentities, PalletCorporateActionsTargetTreatment, PalletElectionProviderMultiPhaseCall, PalletElectionProviderMultiPhaseElectionCompute, PalletElectionProviderMultiPhaseError, PalletElectionProviderMultiPhaseEvent, PalletElectionProviderMultiPhasePhase, PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseReadySolution, PalletElectionProviderMultiPhaseRoundSnapshot, PalletElectionProviderMultiPhaseSignedSignedSubmission, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletExternalAgentsCall, PalletExternalAgentsError, PalletGrandpaCall, PalletGrandpaError, PalletGrandpaEvent, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletGroupCall, PalletGroupError, PalletGroupInstance1, PalletGroupInstance2, PalletGroupInstance3, PalletGroupInstance4, PalletIdentityCall, PalletIdentityClaim1stKey, PalletIdentityClaim2ndKey, PalletIdentityError, PalletImOnlineBoundedOpaqueNetworkState, PalletImOnlineCall, PalletImOnlineError, PalletImOnlineEvent, PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Public, PalletImOnlineSr25519AppSr25519Signature, PalletIndicesCall, PalletIndicesError, PalletIndicesEvent, PalletMultisigCall, PalletMultisigError, PalletMultisigEvent, PalletNftCall, PalletNftError, PalletOffencesEvent, PalletPermissionsError, PalletPermissionsStoreCallMetadata, PalletPipsCall, PalletPipsCommittee, PalletPipsDepositInfo, PalletPipsError, PalletPipsPip, PalletPipsPipsMetadata, PalletPipsProposalData, PalletPipsProposalState, PalletPipsProposer, PalletPipsRawEvent, PalletPipsSnapshotMetadata, PalletPipsSnapshotResult, PalletPipsSnapshottedPip, PalletPipsVote, PalletPipsVotingResult, PalletPortfolioCall, PalletPortfolioError, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletProtocolFeeCall, PalletProtocolFeeError, PalletProtocolFeeRawEvent, PalletRelayerCall, PalletRelayerError, PalletRelayerSubsidy, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletSettlementCall, PalletSettlementError, PalletStakingActiveEraInfo, PalletStakingEraRewardPoints, PalletStakingExposure, PalletStakingForcing, PalletStakingIndividualExposure, PalletStakingNominations, PalletStakingPalletCall, PalletStakingPalletConfigOpPerbill, PalletStakingPalletConfigOpPercent, PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU32, PalletStakingPalletError, PalletStakingPalletEvent, PalletStakingPermissionedIdentityPrefs, PalletStakingRewardDestination, PalletStakingSlashingSlashingSpans, PalletStakingSlashingSpanRecord, PalletStakingSlashingSwitch, PalletStakingStakingLedger, PalletStakingUnappliedSlash, PalletStakingUnlockChunk, PalletStakingValidatorPrefs, PalletStatisticsCall, PalletStatisticsError, PalletStoCall, PalletStoError, PalletStoFundraiser, PalletStoFundraiserStatus, PalletStoFundraiserTier, PalletStoPriceTier, PalletStoRawEvent, PalletSudoCall, PalletSudoError, PalletSudoRawEvent, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsRawEvent, PalletTimestampCall, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentRawEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryRawEvent, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletUtilityUniqueCall, PolymeshCommonUtilitiesAssetRawEvent, PolymeshCommonUtilitiesBalancesAccountData, PolymeshCommonUtilitiesBalancesRawEvent, PolymeshCommonUtilitiesBalancesReasons, PolymeshCommonUtilitiesBaseEvent, PolymeshCommonUtilitiesCheckpointEvent, PolymeshCommonUtilitiesCheckpointNextCheckpoints, PolymeshCommonUtilitiesCheckpointScheduleCheckpoints, PolymeshCommonUtilitiesComplianceManagerEvent, PolymeshCommonUtilitiesExternalAgentsEvent, PolymeshCommonUtilitiesGroupInactiveMember, PolymeshCommonUtilitiesGroupRawEventInstance1, PolymeshCommonUtilitiesGroupRawEventInstance2, PolymeshCommonUtilitiesGroupRawEventInstance3, PolymeshCommonUtilitiesGroupRawEventInstance4, PolymeshCommonUtilitiesIdentityCreateChildIdentityWithAuth, PolymeshCommonUtilitiesIdentityRawEvent, PolymeshCommonUtilitiesIdentitySecondaryKeyWithAuth, PolymeshCommonUtilitiesMaybeBlock, PolymeshCommonUtilitiesNftEvent, PolymeshCommonUtilitiesPortfolioEvent, PolymeshCommonUtilitiesProtocolFeeProtocolOp, PolymeshCommonUtilitiesRelayerRawEvent, PolymeshCommonUtilitiesSettlementRawEvent, PolymeshCommonUtilitiesStatisticsEvent, PolymeshContractsApi, PolymeshContractsApiCodeHash, PolymeshContractsCall, PolymeshContractsChainExtensionExtrinsicId, PolymeshContractsChainVersion, PolymeshContractsError, PolymeshContractsNextUpgrade, PolymeshContractsRawEvent, PolymeshExtensionsCheckWeight, PolymeshPrimitivesAgentAgentGroup, PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetAssetType, PolymeshPrimitivesAssetIdentifier, PolymeshPrimitivesAssetMetadataAssetMetadataKey, PolymeshPrimitivesAssetMetadataAssetMetadataLockStatus, PolymeshPrimitivesAssetMetadataAssetMetadataSpec, PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail, PolymeshPrimitivesAssetNonFungibleType, PolymeshPrimitivesAuthorization, PolymeshPrimitivesAuthorizationAuthorizationData, PolymeshPrimitivesBeneficiary, PolymeshPrimitivesCddId, PolymeshPrimitivesComplianceManagerAssetCompliance, PolymeshPrimitivesComplianceManagerComplianceRequirement, PolymeshPrimitivesCondition, PolymeshPrimitivesConditionConditionType, PolymeshPrimitivesConditionTargetIdentity, PolymeshPrimitivesConditionTrustedFor, PolymeshPrimitivesConditionTrustedIssuer, PolymeshPrimitivesDocument, PolymeshPrimitivesDocumentHash, PolymeshPrimitivesEventOnly, PolymeshPrimitivesIdentityClaim, PolymeshPrimitivesIdentityClaimClaim, PolymeshPrimitivesIdentityClaimClaimType, PolymeshPrimitivesIdentityClaimScope, PolymeshPrimitivesIdentityDidRecord, PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesIdentityIdPortfolioKind, PolymeshPrimitivesJurisdictionCountryCode, PolymeshPrimitivesMemo, PolymeshPrimitivesMultisigProposalState, PolymeshPrimitivesMultisigProposalVoteCount, PolymeshPrimitivesNftNfTs, PolymeshPrimitivesNftNftCollection, PolymeshPrimitivesNftNftCollectionKeys, PolymeshPrimitivesNftNftMetadataAttribute, PolymeshPrimitivesPortfolioFund, PolymeshPrimitivesPortfolioFundDescription, PolymeshPrimitivesPortfolioPortfolioUpdateReason, PolymeshPrimitivesPosRatio, PolymeshPrimitivesSecondaryKey, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions, PolymeshPrimitivesSecondaryKeyKeyRecord, PolymeshPrimitivesSecondaryKeyPalletPermissions, PolymeshPrimitivesSecondaryKeyPermissions, PolymeshPrimitivesSecondaryKeySignatory, PolymeshPrimitivesSettlementAffirmationCount, PolymeshPrimitivesSettlementAffirmationStatus, PolymeshPrimitivesSettlementAssetCount, PolymeshPrimitivesSettlementInstruction, PolymeshPrimitivesSettlementInstructionStatus, PolymeshPrimitivesSettlementLeg, PolymeshPrimitivesSettlementLegStatus, PolymeshPrimitivesSettlementMediatorAffirmationStatus, PolymeshPrimitivesSettlementReceiptDetails, PolymeshPrimitivesSettlementReceiptMetadata, PolymeshPrimitivesSettlementSettlementType, PolymeshPrimitivesSettlementVenue, PolymeshPrimitivesSettlementVenueType, PolymeshPrimitivesStatisticsStat1stKey, PolymeshPrimitivesStatisticsStat2ndKey, PolymeshPrimitivesStatisticsStatClaim, PolymeshPrimitivesStatisticsStatOpType, PolymeshPrimitivesStatisticsStatType, PolymeshPrimitivesStatisticsStatUpdate, PolymeshPrimitivesSubsetSubsetRestrictionAssetId, PolymeshPrimitivesSubsetSubsetRestrictionExtrinsicName, PolymeshPrimitivesSubsetSubsetRestrictionPortfolioId, PolymeshPrimitivesTicker, PolymeshPrimitivesTransferComplianceAssetTransferCompliance, PolymeshPrimitivesTransferComplianceTransferCondition, PolymeshPrimitivesTransferComplianceTransferConditionExemptKey, PolymeshRuntimeCommonNposSolution16, PolymeshRuntimeDevelopRuntime, PolymeshRuntimeDevelopRuntimeOriginCaller, PolymeshRuntimeDevelopRuntimeSessionKeys, SpArithmeticArithmeticError, SpAuthorityDiscoveryAppPublic, SpConsensusBabeAllowedSlots, SpConsensusBabeAppPublic, SpConsensusBabeBabeEpochConfiguration, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusBabeDigestsPreDigest, SpConsensusBabeDigestsPrimaryPreDigest, SpConsensusBabeDigestsSecondaryPlainPreDigest, SpConsensusBabeDigestsSecondaryVRFPreDigest, SpConsensusGrandpaAppPublic, SpConsensusGrandpaAppSignature, SpConsensusGrandpaEquivocation, SpConsensusGrandpaEquivocationProof, SpConsensusSlotsEquivocationProof, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreOffchainOpaqueNetworkState, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpNposElectionsElectionScore, SpNposElectionsSupport, SpRuntimeBlakeTwo256, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeHeader, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpSessionMembershipProof, SpStakingOffenceOffenceDetails, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightToFeeCoefficient, SpWeightsWeightV2Weight } from '@polkadot/types/lookup'; +import type { FinalityGrandpaEquivocationPrecommit, FinalityGrandpaEquivocationPrevote, FinalityGrandpaPrecommit, FinalityGrandpaPrevote, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPreimagesBounded, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, PalletAssetAssetDetails, PalletAssetCall, PalletAssetCheckpointPalletCall, PalletAssetCheckpointPalletError, PalletAssetCheckpointPalletEvent, PalletAssetError, PalletAssetEvent, PalletAssetTickerRegistration, PalletAssetTickerRegistrationConfig, PalletBabeCall, PalletBabeError, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBaseCall, PalletBaseError, PalletBaseEvent, PalletCommitteeCall, PalletCommitteeError, PalletCommitteeEvent, PalletCommitteePolymeshVotes, PalletCommitteeRawOrigin, PalletComplianceManagerCall, PalletComplianceManagerError, PalletComplianceManagerEvent, PalletContractsCall, PalletContractsError, PalletContractsEvent, PalletContractsOrigin, PalletContractsSchedule, PalletContractsScheduleHostFnWeights, PalletContractsScheduleInstructionWeights, PalletContractsScheduleLimits, PalletContractsStorageContractInfo, PalletContractsStorageDeletionQueueManager, PalletContractsWasmCodeInfo, PalletContractsWasmDeterminism, PalletCorporateActionsBallotBallotMeta, PalletCorporateActionsBallotBallotTimeRange, PalletCorporateActionsBallotBallotVote, PalletCorporateActionsBallotMotion, PalletCorporateActionsBallotPalletCall, PalletCorporateActionsBallotPalletError, PalletCorporateActionsBallotPalletEvent, PalletCorporateActionsCaCheckpoint, PalletCorporateActionsCaId, PalletCorporateActionsCaKind, PalletCorporateActionsCall, PalletCorporateActionsCorporateAction, PalletCorporateActionsDistribution, PalletCorporateActionsDistributionPalletCall, PalletCorporateActionsDistributionPalletError, PalletCorporateActionsDistributionPalletEvent, PalletCorporateActionsError, PalletCorporateActionsEvent, PalletCorporateActionsInitiateCorporateActionArgs, PalletCorporateActionsRecordDate, PalletCorporateActionsRecordDateSpec, PalletCorporateActionsTargetIdentities, PalletCorporateActionsTargetTreatment, PalletElectionProviderMultiPhaseCall, PalletElectionProviderMultiPhaseElectionCompute, PalletElectionProviderMultiPhaseError, PalletElectionProviderMultiPhaseEvent, PalletElectionProviderMultiPhasePhase, PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseReadySolution, PalletElectionProviderMultiPhaseRoundSnapshot, PalletElectionProviderMultiPhaseSignedSignedSubmission, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletExternalAgentsCall, PalletExternalAgentsError, PalletExternalAgentsEvent, PalletGrandpaCall, PalletGrandpaError, PalletGrandpaEvent, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletGroupCall, PalletGroupError, PalletGroupEvent, PalletIdentityCall, PalletIdentityClaim1stKey, PalletIdentityClaim2ndKey, PalletIdentityError, PalletIdentityEvent, PalletImOnlineCall, PalletImOnlineError, PalletImOnlineEvent, PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Public, PalletImOnlineSr25519AppSr25519Signature, PalletIndicesCall, PalletIndicesError, PalletIndicesEvent, PalletMultisigCall, PalletMultisigError, PalletMultisigEvent, PalletNftCall, PalletNftError, PalletNftEvent, PalletOffencesEvent, PalletPermissionsError, PalletPermissionsStoreCallMetadata, PalletPipsCall, PalletPipsCommittee, PalletPipsDepositInfo, PalletPipsError, PalletPipsEvent, PalletPipsPip, PalletPipsPipsMetadata, PalletPipsProposalData, PalletPipsProposalState, PalletPipsProposer, PalletPipsSnapshotMetadata, PalletPipsSnapshotResult, PalletPipsSnapshottedPip, PalletPipsVote, PalletPipsVotingResult, PalletPortfolioCall, PalletPortfolioError, PalletPortfolioEvent, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletProtocolFeeCall, PalletProtocolFeeError, PalletProtocolFeeEvent, PalletRelayerCall, PalletRelayerError, PalletRelayerEvent, PalletRelayerSubsidy, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletSettlementCall, PalletSettlementError, PalletSettlementEvent, PalletStakingActiveEraInfo, PalletStakingEraRewardPoints, PalletStakingExposure, PalletStakingForcing, PalletStakingIndividualExposure, PalletStakingNominations, PalletStakingPalletCall, PalletStakingPalletConfigOpPerbill, PalletStakingPalletConfigOpPercent, PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU32, PalletStakingPalletError, PalletStakingPalletEvent, PalletStakingRewardDestination, PalletStakingSlashingSlashingSpans, PalletStakingSlashingSpanRecord, PalletStakingStakingLedger, PalletStakingUnappliedSlash, PalletStakingUnlockChunk, PalletStakingValidatorPrefs, PalletStatisticsCall, PalletStatisticsError, PalletStatisticsEvent, PalletStoCall, PalletStoError, PalletStoEvent, PalletStoFundingAsset, PalletStoFundingMethod, PalletStoFundraiser, PalletStoFundraiserStatus, PalletStoFundraiserTier, PalletStoPriceTier, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTimestampCall, PalletTransactionPaymentCall, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletUtilityUniqueCall, PalletValidatorsCall, PalletValidatorsError, PalletValidatorsEvent, PalletValidatorsPermissionedIdentityPrefs, PalletValidatorsSlashingSwitch, PolymeshCommonUtilitiesCheckpointNextCheckpoints, PolymeshCommonUtilitiesCheckpointScheduleCheckpoints, PolymeshCommonUtilitiesIdentityCreateChildIdentityWithAuth, PolymeshCommonUtilitiesIdentitySecondaryKeyWithAuth, PolymeshCommonUtilitiesProtocolFeeProtocolOp, PolymeshContractsApi, PolymeshContractsApiCodeHash, PolymeshContractsCall, PolymeshContractsChainExtensionExtrinsicId, PolymeshContractsChainVersion, PolymeshContractsError, PolymeshContractsEvent, PolymeshContractsNextUpgrade, PolymeshPrimitivesAgentAgentGroup, PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetAssetType, PolymeshPrimitivesAssetIdentifier, PolymeshPrimitivesAssetMetadataAssetMetadataKey, PolymeshPrimitivesAssetMetadataAssetMetadataLockStatus, PolymeshPrimitivesAssetMetadataAssetMetadataSpec, PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail, PolymeshPrimitivesAssetNonFungibleType, PolymeshPrimitivesAuthorization, PolymeshPrimitivesAuthorizationAuthorizationData, PolymeshPrimitivesBeneficiary, PolymeshPrimitivesCddId, PolymeshPrimitivesComplianceManagerAssetCompliance, PolymeshPrimitivesComplianceManagerComplianceRequirement, PolymeshPrimitivesCondition, PolymeshPrimitivesConditionConditionType, PolymeshPrimitivesConditionTargetIdentity, PolymeshPrimitivesConditionTrustedFor, PolymeshPrimitivesConditionTrustedIssuer, PolymeshPrimitivesDocument, PolymeshPrimitivesDocumentHash, PolymeshPrimitivesEventOnly, PolymeshPrimitivesGroupInactiveMember, PolymeshPrimitivesIdentityClaim, PolymeshPrimitivesIdentityClaimClaim, PolymeshPrimitivesIdentityClaimClaimType, PolymeshPrimitivesIdentityClaimScope, PolymeshPrimitivesIdentityDidRecord, PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesIdentityIdPortfolioKind, PolymeshPrimitivesJurisdictionCountryCode, PolymeshPrimitivesMaybeBlock, PolymeshPrimitivesMemo, PolymeshPrimitivesMultisigProposalState, PolymeshPrimitivesMultisigProposalVoteCount, PolymeshPrimitivesNftNfTs, PolymeshPrimitivesNftNftCollection, PolymeshPrimitivesNftNftCollectionKeys, PolymeshPrimitivesNftNftMetadataAttribute, PolymeshPrimitivesPortfolioFund, PolymeshPrimitivesPortfolioFundDescription, PolymeshPrimitivesPortfolioPortfolioUpdateReason, PolymeshPrimitivesPosRatio, PolymeshPrimitivesSecondaryKey, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions, PolymeshPrimitivesSecondaryKeyKeyRecord, PolymeshPrimitivesSecondaryKeyPalletPermissions, PolymeshPrimitivesSecondaryKeyPermissions, PolymeshPrimitivesSecondaryKeySignatory, PolymeshPrimitivesSettlementAffirmationCount, PolymeshPrimitivesSettlementAffirmationStatus, PolymeshPrimitivesSettlementAssetCount, PolymeshPrimitivesSettlementInstruction, PolymeshPrimitivesSettlementInstructionStatus, PolymeshPrimitivesSettlementLeg, PolymeshPrimitivesSettlementLegStatus, PolymeshPrimitivesSettlementMediatorAffirmationStatus, PolymeshPrimitivesSettlementReceiptDetails, PolymeshPrimitivesSettlementReceiptMetadata, PolymeshPrimitivesSettlementSettlementType, PolymeshPrimitivesSettlementVenue, PolymeshPrimitivesSettlementVenueType, PolymeshPrimitivesStatisticsStat1stKey, PolymeshPrimitivesStatisticsStat2ndKey, PolymeshPrimitivesStatisticsStatClaim, PolymeshPrimitivesStatisticsStatOpType, PolymeshPrimitivesStatisticsStatType, PolymeshPrimitivesStatisticsStatUpdate, PolymeshPrimitivesStoFundraiserReceiptDetails, PolymeshPrimitivesSubsetSubsetRestrictionAssetId, PolymeshPrimitivesSubsetSubsetRestrictionExtrinsicName, PolymeshPrimitivesSubsetSubsetRestrictionPortfolioId, PolymeshPrimitivesTicker, PolymeshPrimitivesTransferComplianceAssetTransferCompliance, PolymeshPrimitivesTransferComplianceTransferCondition, PolymeshPrimitivesTransferComplianceTransferConditionExemptKey, PolymeshRuntimeCommonNposSolution16, PolymeshRuntimeDevelopRuntime, PolymeshRuntimeDevelopRuntimeOriginCaller, PolymeshRuntimeDevelopRuntimeSessionKeys, SpArithmeticArithmeticError, SpAuthorityDiscoveryAppPublic, SpConsensusBabeAllowedSlots, SpConsensusBabeAppPublic, SpConsensusBabeBabeEpochConfiguration, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusBabeDigestsPreDigest, SpConsensusBabeDigestsPrimaryPreDigest, SpConsensusBabeDigestsSecondaryPlainPreDigest, SpConsensusBabeDigestsSecondaryVRFPreDigest, SpConsensusGrandpaAppPublic, SpConsensusGrandpaAppSignature, SpConsensusGrandpaEquivocation, SpConsensusGrandpaEquivocationProof, SpConsensusSlotsEquivocationProof, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreSr25519VrfVrfSignature, SpCoreVoid, SpNposElectionsElectionScore, SpNposElectionsSupport, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeHeader, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpSessionMembershipProof, SpStakingOffenceOffenceDetails, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightToFeeCoefficient, SpWeightsWeightV2Weight } from '@polkadot/types/lookup'; declare module '@polkadot/types/types/registry' { interface InterfaceTypes { @@ -39,62 +39,60 @@ declare module '@polkadot/types/types/registry' { FrameSystemPhase: FrameSystemPhase; PalletAssetAssetDetails: PalletAssetAssetDetails; PalletAssetCall: PalletAssetCall; - PalletAssetCheckpointCall: PalletAssetCheckpointCall; - PalletAssetCheckpointError: PalletAssetCheckpointError; + PalletAssetCheckpointPalletCall: PalletAssetCheckpointPalletCall; + PalletAssetCheckpointPalletError: PalletAssetCheckpointPalletError; + PalletAssetCheckpointPalletEvent: PalletAssetCheckpointPalletEvent; PalletAssetError: PalletAssetError; + PalletAssetEvent: PalletAssetEvent; PalletAssetTickerRegistration: PalletAssetTickerRegistration; PalletAssetTickerRegistrationConfig: PalletAssetTickerRegistrationConfig; PalletBabeCall: PalletBabeCall; PalletBabeError: PalletBabeError; + PalletBalancesAccountData: PalletBalancesAccountData; PalletBalancesBalanceLock: PalletBalancesBalanceLock; PalletBalancesCall: PalletBalancesCall; PalletBalancesError: PalletBalancesError; + PalletBalancesEvent: PalletBalancesEvent; + PalletBalancesReasons: PalletBalancesReasons; PalletBaseCall: PalletBaseCall; PalletBaseError: PalletBaseError; - PalletBridgeBridgeTxDetail: PalletBridgeBridgeTxDetail; - PalletBridgeBridgeTxStatus: PalletBridgeBridgeTxStatus; + PalletBaseEvent: PalletBaseEvent; PalletCommitteeCall: PalletCommitteeCall; PalletCommitteeError: PalletCommitteeError; - PalletCommitteeInstance1: PalletCommitteeInstance1; - PalletCommitteeInstance3: PalletCommitteeInstance3; - PalletCommitteeInstance4: PalletCommitteeInstance4; + PalletCommitteeEvent: PalletCommitteeEvent; PalletCommitteePolymeshVotes: PalletCommitteePolymeshVotes; - PalletCommitteeRawEventInstance1: PalletCommitteeRawEventInstance1; - PalletCommitteeRawEventInstance3: PalletCommitteeRawEventInstance3; - PalletCommitteeRawEventInstance4: PalletCommitteeRawEventInstance4; - PalletCommitteeRawOriginInstance1: PalletCommitteeRawOriginInstance1; - PalletCommitteeRawOriginInstance3: PalletCommitteeRawOriginInstance3; - PalletCommitteeRawOriginInstance4: PalletCommitteeRawOriginInstance4; + PalletCommitteeRawOrigin: PalletCommitteeRawOrigin; PalletComplianceManagerCall: PalletComplianceManagerCall; PalletComplianceManagerError: PalletComplianceManagerError; + PalletComplianceManagerEvent: PalletComplianceManagerEvent; PalletContractsCall: PalletContractsCall; PalletContractsError: PalletContractsError; PalletContractsEvent: PalletContractsEvent; + PalletContractsOrigin: PalletContractsOrigin; PalletContractsSchedule: PalletContractsSchedule; PalletContractsScheduleHostFnWeights: PalletContractsScheduleHostFnWeights; PalletContractsScheduleInstructionWeights: PalletContractsScheduleInstructionWeights; PalletContractsScheduleLimits: PalletContractsScheduleLimits; PalletContractsStorageContractInfo: PalletContractsStorageContractInfo; - PalletContractsStorageDeletedContract: PalletContractsStorageDeletedContract; + PalletContractsStorageDeletionQueueManager: PalletContractsStorageDeletionQueueManager; + PalletContractsWasmCodeInfo: PalletContractsWasmCodeInfo; PalletContractsWasmDeterminism: PalletContractsWasmDeterminism; - PalletContractsWasmOwnerInfo: PalletContractsWasmOwnerInfo; - PalletContractsWasmPrefabWasmModule: PalletContractsWasmPrefabWasmModule; PalletCorporateActionsBallotBallotMeta: PalletCorporateActionsBallotBallotMeta; PalletCorporateActionsBallotBallotTimeRange: PalletCorporateActionsBallotBallotTimeRange; PalletCorporateActionsBallotBallotVote: PalletCorporateActionsBallotBallotVote; - PalletCorporateActionsBallotCall: PalletCorporateActionsBallotCall; - PalletCorporateActionsBallotError: PalletCorporateActionsBallotError; - PalletCorporateActionsBallotEvent: PalletCorporateActionsBallotEvent; PalletCorporateActionsBallotMotion: PalletCorporateActionsBallotMotion; + PalletCorporateActionsBallotPalletCall: PalletCorporateActionsBallotPalletCall; + PalletCorporateActionsBallotPalletError: PalletCorporateActionsBallotPalletError; + PalletCorporateActionsBallotPalletEvent: PalletCorporateActionsBallotPalletEvent; PalletCorporateActionsCaCheckpoint: PalletCorporateActionsCaCheckpoint; PalletCorporateActionsCaId: PalletCorporateActionsCaId; PalletCorporateActionsCaKind: PalletCorporateActionsCaKind; PalletCorporateActionsCall: PalletCorporateActionsCall; PalletCorporateActionsCorporateAction: PalletCorporateActionsCorporateAction; PalletCorporateActionsDistribution: PalletCorporateActionsDistribution; - PalletCorporateActionsDistributionCall: PalletCorporateActionsDistributionCall; - PalletCorporateActionsDistributionError: PalletCorporateActionsDistributionError; - PalletCorporateActionsDistributionEvent: PalletCorporateActionsDistributionEvent; + PalletCorporateActionsDistributionPalletCall: PalletCorporateActionsDistributionPalletCall; + PalletCorporateActionsDistributionPalletError: PalletCorporateActionsDistributionPalletError; + PalletCorporateActionsDistributionPalletEvent: PalletCorporateActionsDistributionPalletEvent; PalletCorporateActionsError: PalletCorporateActionsError; PalletCorporateActionsEvent: PalletCorporateActionsEvent; PalletCorporateActionsInitiateCorporateActionArgs: PalletCorporateActionsInitiateCorporateActionArgs; @@ -114,6 +112,7 @@ declare module '@polkadot/types/types/registry' { PalletElectionProviderMultiPhaseSolutionOrSnapshotSize: PalletElectionProviderMultiPhaseSolutionOrSnapshotSize; PalletExternalAgentsCall: PalletExternalAgentsCall; PalletExternalAgentsError: PalletExternalAgentsError; + PalletExternalAgentsEvent: PalletExternalAgentsEvent; PalletGrandpaCall: PalletGrandpaCall; PalletGrandpaError: PalletGrandpaError; PalletGrandpaEvent: PalletGrandpaEvent; @@ -121,15 +120,12 @@ declare module '@polkadot/types/types/registry' { PalletGrandpaStoredState: PalletGrandpaStoredState; PalletGroupCall: PalletGroupCall; PalletGroupError: PalletGroupError; - PalletGroupInstance1: PalletGroupInstance1; - PalletGroupInstance2: PalletGroupInstance2; - PalletGroupInstance3: PalletGroupInstance3; - PalletGroupInstance4: PalletGroupInstance4; + PalletGroupEvent: PalletGroupEvent; PalletIdentityCall: PalletIdentityCall; PalletIdentityClaim1stKey: PalletIdentityClaim1stKey; PalletIdentityClaim2ndKey: PalletIdentityClaim2ndKey; PalletIdentityError: PalletIdentityError; - PalletImOnlineBoundedOpaqueNetworkState: PalletImOnlineBoundedOpaqueNetworkState; + PalletIdentityEvent: PalletIdentityEvent; PalletImOnlineCall: PalletImOnlineCall; PalletImOnlineError: PalletImOnlineError; PalletImOnlineEvent: PalletImOnlineEvent; @@ -144,6 +140,7 @@ declare module '@polkadot/types/types/registry' { PalletMultisigEvent: PalletMultisigEvent; PalletNftCall: PalletNftCall; PalletNftError: PalletNftError; + PalletNftEvent: PalletNftEvent; PalletOffencesEvent: PalletOffencesEvent; PalletPermissionsError: PalletPermissionsError; PalletPermissionsStoreCallMetadata: PalletPermissionsStoreCallMetadata; @@ -151,12 +148,12 @@ declare module '@polkadot/types/types/registry' { PalletPipsCommittee: PalletPipsCommittee; PalletPipsDepositInfo: PalletPipsDepositInfo; PalletPipsError: PalletPipsError; + PalletPipsEvent: PalletPipsEvent; PalletPipsPip: PalletPipsPip; PalletPipsPipsMetadata: PalletPipsPipsMetadata; PalletPipsProposalData: PalletPipsProposalData; PalletPipsProposalState: PalletPipsProposalState; PalletPipsProposer: PalletPipsProposer; - PalletPipsRawEvent: PalletPipsRawEvent; PalletPipsSnapshotMetadata: PalletPipsSnapshotMetadata; PalletPipsSnapshotResult: PalletPipsSnapshotResult; PalletPipsSnapshottedPip: PalletPipsSnapshottedPip; @@ -164,15 +161,17 @@ declare module '@polkadot/types/types/registry' { PalletPipsVotingResult: PalletPipsVotingResult; PalletPortfolioCall: PalletPortfolioCall; PalletPortfolioError: PalletPortfolioError; + PalletPortfolioEvent: PalletPortfolioEvent; PalletPreimageCall: PalletPreimageCall; PalletPreimageError: PalletPreimageError; PalletPreimageEvent: PalletPreimageEvent; PalletPreimageRequestStatus: PalletPreimageRequestStatus; PalletProtocolFeeCall: PalletProtocolFeeCall; PalletProtocolFeeError: PalletProtocolFeeError; - PalletProtocolFeeRawEvent: PalletProtocolFeeRawEvent; + PalletProtocolFeeEvent: PalletProtocolFeeEvent; PalletRelayerCall: PalletRelayerCall; PalletRelayerError: PalletRelayerError; + PalletRelayerEvent: PalletRelayerEvent; PalletRelayerSubsidy: PalletRelayerSubsidy; PalletSchedulerCall: PalletSchedulerCall; PalletSchedulerError: PalletSchedulerError; @@ -183,6 +182,7 @@ declare module '@polkadot/types/types/registry' { PalletSessionEvent: PalletSessionEvent; PalletSettlementCall: PalletSettlementCall; PalletSettlementError: PalletSettlementError; + PalletSettlementEvent: PalletSettlementEvent; PalletStakingActiveEraInfo: PalletStakingActiveEraInfo; PalletStakingEraRewardPoints: PalletStakingEraRewardPoints; PalletStakingExposure: PalletStakingExposure; @@ -196,75 +196,58 @@ declare module '@polkadot/types/types/registry' { PalletStakingPalletConfigOpU32: PalletStakingPalletConfigOpU32; PalletStakingPalletError: PalletStakingPalletError; PalletStakingPalletEvent: PalletStakingPalletEvent; - PalletStakingPermissionedIdentityPrefs: PalletStakingPermissionedIdentityPrefs; PalletStakingRewardDestination: PalletStakingRewardDestination; PalletStakingSlashingSlashingSpans: PalletStakingSlashingSlashingSpans; PalletStakingSlashingSpanRecord: PalletStakingSlashingSpanRecord; - PalletStakingSlashingSwitch: PalletStakingSlashingSwitch; PalletStakingStakingLedger: PalletStakingStakingLedger; PalletStakingUnappliedSlash: PalletStakingUnappliedSlash; PalletStakingUnlockChunk: PalletStakingUnlockChunk; PalletStakingValidatorPrefs: PalletStakingValidatorPrefs; PalletStatisticsCall: PalletStatisticsCall; PalletStatisticsError: PalletStatisticsError; + PalletStatisticsEvent: PalletStatisticsEvent; PalletStoCall: PalletStoCall; PalletStoError: PalletStoError; + PalletStoEvent: PalletStoEvent; + PalletStoFundingAsset: PalletStoFundingAsset; + PalletStoFundingMethod: PalletStoFundingMethod; PalletStoFundraiser: PalletStoFundraiser; PalletStoFundraiserStatus: PalletStoFundraiserStatus; PalletStoFundraiserTier: PalletStoFundraiserTier; PalletStoPriceTier: PalletStoPriceTier; - PalletStoRawEvent: PalletStoRawEvent; PalletSudoCall: PalletSudoCall; PalletSudoError: PalletSudoError; - PalletSudoRawEvent: PalletSudoRawEvent; - PalletTestUtilsCall: PalletTestUtilsCall; - PalletTestUtilsError: PalletTestUtilsError; - PalletTestUtilsRawEvent: PalletTestUtilsRawEvent; + PalletSudoEvent: PalletSudoEvent; PalletTimestampCall: PalletTimestampCall; + PalletTransactionPaymentCall: PalletTransactionPaymentCall; PalletTransactionPaymentChargeTransactionPayment: PalletTransactionPaymentChargeTransactionPayment; - PalletTransactionPaymentRawEvent: PalletTransactionPaymentRawEvent; + PalletTransactionPaymentEvent: PalletTransactionPaymentEvent; PalletTransactionPaymentReleases: PalletTransactionPaymentReleases; PalletTreasuryCall: PalletTreasuryCall; PalletTreasuryError: PalletTreasuryError; - PalletTreasuryRawEvent: PalletTreasuryRawEvent; + PalletTreasuryEvent: PalletTreasuryEvent; PalletUtilityCall: PalletUtilityCall; PalletUtilityError: PalletUtilityError; PalletUtilityEvent: PalletUtilityEvent; PalletUtilityUniqueCall: PalletUtilityUniqueCall; - PolymeshCommonUtilitiesAssetRawEvent: PolymeshCommonUtilitiesAssetRawEvent; - PolymeshCommonUtilitiesBalancesAccountData: PolymeshCommonUtilitiesBalancesAccountData; - PolymeshCommonUtilitiesBalancesRawEvent: PolymeshCommonUtilitiesBalancesRawEvent; - PolymeshCommonUtilitiesBalancesReasons: PolymeshCommonUtilitiesBalancesReasons; - PolymeshCommonUtilitiesBaseEvent: PolymeshCommonUtilitiesBaseEvent; - PolymeshCommonUtilitiesCheckpointEvent: PolymeshCommonUtilitiesCheckpointEvent; + PalletValidatorsCall: PalletValidatorsCall; + PalletValidatorsError: PalletValidatorsError; + PalletValidatorsEvent: PalletValidatorsEvent; + PalletValidatorsPermissionedIdentityPrefs: PalletValidatorsPermissionedIdentityPrefs; + PalletValidatorsSlashingSwitch: PalletValidatorsSlashingSwitch; PolymeshCommonUtilitiesCheckpointNextCheckpoints: PolymeshCommonUtilitiesCheckpointNextCheckpoints; PolymeshCommonUtilitiesCheckpointScheduleCheckpoints: PolymeshCommonUtilitiesCheckpointScheduleCheckpoints; - PolymeshCommonUtilitiesComplianceManagerEvent: PolymeshCommonUtilitiesComplianceManagerEvent; - PolymeshCommonUtilitiesExternalAgentsEvent: PolymeshCommonUtilitiesExternalAgentsEvent; - PolymeshCommonUtilitiesGroupInactiveMember: PolymeshCommonUtilitiesGroupInactiveMember; - PolymeshCommonUtilitiesGroupRawEventInstance1: PolymeshCommonUtilitiesGroupRawEventInstance1; - PolymeshCommonUtilitiesGroupRawEventInstance2: PolymeshCommonUtilitiesGroupRawEventInstance2; - PolymeshCommonUtilitiesGroupRawEventInstance3: PolymeshCommonUtilitiesGroupRawEventInstance3; - PolymeshCommonUtilitiesGroupRawEventInstance4: PolymeshCommonUtilitiesGroupRawEventInstance4; PolymeshCommonUtilitiesIdentityCreateChildIdentityWithAuth: PolymeshCommonUtilitiesIdentityCreateChildIdentityWithAuth; - PolymeshCommonUtilitiesIdentityRawEvent: PolymeshCommonUtilitiesIdentityRawEvent; PolymeshCommonUtilitiesIdentitySecondaryKeyWithAuth: PolymeshCommonUtilitiesIdentitySecondaryKeyWithAuth; - PolymeshCommonUtilitiesMaybeBlock: PolymeshCommonUtilitiesMaybeBlock; - PolymeshCommonUtilitiesNftEvent: PolymeshCommonUtilitiesNftEvent; - PolymeshCommonUtilitiesPortfolioEvent: PolymeshCommonUtilitiesPortfolioEvent; PolymeshCommonUtilitiesProtocolFeeProtocolOp: PolymeshCommonUtilitiesProtocolFeeProtocolOp; - PolymeshCommonUtilitiesRelayerRawEvent: PolymeshCommonUtilitiesRelayerRawEvent; - PolymeshCommonUtilitiesSettlementRawEvent: PolymeshCommonUtilitiesSettlementRawEvent; - PolymeshCommonUtilitiesStatisticsEvent: PolymeshCommonUtilitiesStatisticsEvent; PolymeshContractsApi: PolymeshContractsApi; PolymeshContractsApiCodeHash: PolymeshContractsApiCodeHash; PolymeshContractsCall: PolymeshContractsCall; PolymeshContractsChainExtensionExtrinsicId: PolymeshContractsChainExtensionExtrinsicId; PolymeshContractsChainVersion: PolymeshContractsChainVersion; PolymeshContractsError: PolymeshContractsError; + PolymeshContractsEvent: PolymeshContractsEvent; PolymeshContractsNextUpgrade: PolymeshContractsNextUpgrade; - PolymeshContractsRawEvent: PolymeshContractsRawEvent; - PolymeshExtensionsCheckWeight: PolymeshExtensionsCheckWeight; PolymeshPrimitivesAgentAgentGroup: PolymeshPrimitivesAgentAgentGroup; PolymeshPrimitivesAssetAssetId: PolymeshPrimitivesAssetAssetId; PolymeshPrimitivesAssetAssetType: PolymeshPrimitivesAssetAssetType; @@ -288,6 +271,7 @@ declare module '@polkadot/types/types/registry' { PolymeshPrimitivesDocument: PolymeshPrimitivesDocument; PolymeshPrimitivesDocumentHash: PolymeshPrimitivesDocumentHash; PolymeshPrimitivesEventOnly: PolymeshPrimitivesEventOnly; + PolymeshPrimitivesGroupInactiveMember: PolymeshPrimitivesGroupInactiveMember; PolymeshPrimitivesIdentityClaim: PolymeshPrimitivesIdentityClaim; PolymeshPrimitivesIdentityClaimClaim: PolymeshPrimitivesIdentityClaimClaim; PolymeshPrimitivesIdentityClaimClaimType: PolymeshPrimitivesIdentityClaimClaimType; @@ -297,6 +281,7 @@ declare module '@polkadot/types/types/registry' { PolymeshPrimitivesIdentityIdPortfolioId: PolymeshPrimitivesIdentityIdPortfolioId; PolymeshPrimitivesIdentityIdPortfolioKind: PolymeshPrimitivesIdentityIdPortfolioKind; PolymeshPrimitivesJurisdictionCountryCode: PolymeshPrimitivesJurisdictionCountryCode; + PolymeshPrimitivesMaybeBlock: PolymeshPrimitivesMaybeBlock; PolymeshPrimitivesMemo: PolymeshPrimitivesMemo; PolymeshPrimitivesMultisigProposalState: PolymeshPrimitivesMultisigProposalState; PolymeshPrimitivesMultisigProposalVoteCount: PolymeshPrimitivesMultisigProposalVoteCount; @@ -333,6 +318,7 @@ declare module '@polkadot/types/types/registry' { PolymeshPrimitivesStatisticsStatOpType: PolymeshPrimitivesStatisticsStatOpType; PolymeshPrimitivesStatisticsStatType: PolymeshPrimitivesStatisticsStatType; PolymeshPrimitivesStatisticsStatUpdate: PolymeshPrimitivesStatisticsStatUpdate; + PolymeshPrimitivesStoFundraiserReceiptDetails: PolymeshPrimitivesStoFundraiserReceiptDetails; PolymeshPrimitivesSubsetSubsetRestrictionAssetId: PolymeshPrimitivesSubsetSubsetRestrictionAssetId; PolymeshPrimitivesSubsetSubsetRestrictionExtrinsicName: PolymeshPrimitivesSubsetSubsetRestrictionExtrinsicName; PolymeshPrimitivesSubsetSubsetRestrictionPortfolioId: PolymeshPrimitivesSubsetSubsetRestrictionPortfolioId; @@ -363,13 +349,12 @@ declare module '@polkadot/types/types/registry' { SpCoreEcdsaSignature: SpCoreEcdsaSignature; SpCoreEd25519Public: SpCoreEd25519Public; SpCoreEd25519Signature: SpCoreEd25519Signature; - SpCoreOffchainOpaqueNetworkState: SpCoreOffchainOpaqueNetworkState; SpCoreSr25519Public: SpCoreSr25519Public; SpCoreSr25519Signature: SpCoreSr25519Signature; + SpCoreSr25519VrfVrfSignature: SpCoreSr25519VrfVrfSignature; SpCoreVoid: SpCoreVoid; SpNposElectionsElectionScore: SpNposElectionsElectionScore; SpNposElectionsSupport: SpNposElectionsSupport; - SpRuntimeBlakeTwo256: SpRuntimeBlakeTwo256; SpRuntimeDigest: SpRuntimeDigest; SpRuntimeDigestDigestItem: SpRuntimeDigestDigestItem; SpRuntimeDispatchError: SpRuntimeDispatchError; diff --git a/scripts/cli/src/interfaces/types-lookup.ts b/scripts/cli/src/interfaces/types-lookup.ts index 761463c8cf..399c3e2aa8 100644 --- a/scripts/cli/src/interfaces/types-lookup.ts +++ b/scripts/cli/src/interfaces/types-lookup.ts @@ -7,7 +7,6 @@ import '@polkadot/types/lookup'; import type { BTreeMap, BTreeSet, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { ITuple } from '@polkadot/types-codec/types'; -import type { OpaqueMultiaddr, OpaquePeerId } from '@polkadot/types/interfaces/imOnline'; import type { AccountId32, Call, H256, H512, MultiAddress, PerU16, Perbill, Percent, Permill } from '@polkadot/types/interfaces/runtime'; import type { Event } from '@polkadot/types/interfaces/system'; @@ -18,11 +17,11 @@ declare module '@polkadot/types/lookup' { readonly consumers: u32; readonly providers: u32; readonly sufficients: u32; - readonly data: PolymeshCommonUtilitiesBalancesAccountData; + readonly data: PalletBalancesAccountData; } - /** @name PolymeshCommonUtilitiesBalancesAccountData (5) */ - interface PolymeshCommonUtilitiesBalancesAccountData extends Struct { + /** @name PalletBalancesAccountData (5) */ + interface PalletBalancesAccountData extends Struct { readonly free: u128; readonly reserved: u128; readonly miscFrozen: u128; @@ -137,7 +136,8 @@ declare module '@polkadot/types/lookup' { readonly isExhausted: boolean; readonly isCorruption: boolean; readonly isUnavailable: boolean; - readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional' | 'Exhausted' | 'Corruption' | 'Unavailable'; + readonly isRootNotAllowed: boolean; + readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional' | 'Exhausted' | 'Corruption' | 'Unavailable' | 'RootNotAllowed'; } /** @name SpRuntimeModuleError (25) */ @@ -148,14 +148,17 @@ declare module '@polkadot/types/lookup' { /** @name SpRuntimeTokenError (26) */ interface SpRuntimeTokenError extends Enum { - readonly isNoFunds: boolean; - readonly isWouldDie: boolean; + readonly isFundsUnavailable: boolean; + readonly isOnlyProvider: boolean; readonly isBelowMinimum: boolean; readonly isCannotCreate: boolean; readonly isUnknownAsset: boolean; readonly isFrozen: boolean; readonly isUnsupported: boolean; - readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported'; + readonly isCannotCreateHold: boolean; + readonly isNotExpendable: boolean; + readonly isBlocked: boolean; + readonly type: 'FundsUnavailable' | 'OnlyProvider' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported' | 'CannotCreateHold' | 'NotExpendable' | 'Blocked'; } /** @name SpArithmeticArithmeticError (27) */ @@ -192,8 +195,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'IndexAssigned' | 'IndexFreed' | 'IndexFrozen'; } - /** @name PolymeshCommonUtilitiesBalancesRawEvent (30) */ - interface PolymeshCommonUtilitiesBalancesRawEvent extends Enum { + /** @name PalletBalancesEvent (30) */ + interface PalletBalancesEvent extends Enum { readonly isEndowed: boolean; readonly asEndowed: ITuple<[Option, AccountId32, u128]>; readonly isTransfer: boolean; @@ -224,8 +227,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Free' | 'Reserved'; } - /** @name PalletTransactionPaymentRawEvent (36) */ - interface PalletTransactionPaymentRawEvent extends Enum { + /** @name PalletTransactionPaymentEvent (36) */ + interface PalletTransactionPaymentEvent extends Enum { readonly isTransactionFeePaid: boolean; readonly asTransactionFeePaid: { readonly who: AccountId32; @@ -235,8 +238,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'TransactionFeePaid'; } - /** @name PolymeshCommonUtilitiesIdentityRawEvent (37) */ - interface PolymeshCommonUtilitiesIdentityRawEvent extends Enum { + /** @name PalletIdentityEvent (37) */ + interface PalletIdentityEvent extends Enum { readonly isDidCreated: boolean; readonly asDidCreated: ITuple<[PolymeshPrimitivesIdentityId, AccountId32, Vec]>; readonly isSecondaryKeysAdded: boolean; @@ -698,8 +701,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Full' | 'Custom' | 'ExceptMeta' | 'PolymeshV1CAA' | 'PolymeshV1PIA'; } - /** @name PolymeshCommonUtilitiesGroupRawEventInstance2 (79) */ - interface PolymeshCommonUtilitiesGroupRawEventInstance2 extends Enum { + /** @name PalletGroupEvent (79) */ + interface PalletGroupEvent extends Enum { readonly isMemberAdded: boolean; readonly asMemberAdded: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; readonly isMemberRemoved: boolean; @@ -716,11 +719,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'MemberAdded' | 'MemberRemoved' | 'MemberRevoked' | 'MembersSwapped' | 'MembersReset' | 'ActiveLimitChanged' | 'Dummy'; } - /** @name PalletGroupInstance2 (80) */ - type PalletGroupInstance2 = Null; - - /** @name PalletCommitteeRawEventInstance1 (82) */ - interface PalletCommitteeRawEventInstance1 extends Enum { + /** @name PalletCommitteeEvent (81) */ + interface PalletCommitteeEvent extends Enum { readonly isProposed: boolean; readonly asProposed: ITuple<[PolymeshPrimitivesIdentityId, u32, H256]>; readonly isVoted: boolean; @@ -738,143 +738,21 @@ declare module '@polkadot/types/lookup' { readonly isReleaseCoordinatorUpdated: boolean; readonly asReleaseCoordinatorUpdated: Option; readonly isExpiresAfterUpdated: boolean; - readonly asExpiresAfterUpdated: ITuple<[PolymeshPrimitivesIdentityId, PolymeshCommonUtilitiesMaybeBlock]>; + readonly asExpiresAfterUpdated: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesMaybeBlock]>; readonly isVoteThresholdUpdated: boolean; readonly asVoteThresholdUpdated: ITuple<[PolymeshPrimitivesIdentityId, u32, u32]>; readonly type: 'Proposed' | 'Voted' | 'VoteRetracted' | 'FinalVotes' | 'Approved' | 'Rejected' | 'Executed' | 'ReleaseCoordinatorUpdated' | 'ExpiresAfterUpdated' | 'VoteThresholdUpdated'; } - /** @name PalletCommitteeInstance1 (83) */ - type PalletCommitteeInstance1 = Null; - - /** @name PolymeshCommonUtilitiesMaybeBlock (86) */ - interface PolymeshCommonUtilitiesMaybeBlock extends Enum { + /** @name PolymeshPrimitivesMaybeBlock (84) */ + interface PolymeshPrimitivesMaybeBlock extends Enum { readonly isSome: boolean; readonly asSome: u32; readonly isNone: boolean; readonly type: 'Some' | 'None'; } - /** @name PolymeshCommonUtilitiesGroupRawEventInstance1 (87) */ - interface PolymeshCommonUtilitiesGroupRawEventInstance1 extends Enum { - readonly isMemberAdded: boolean; - readonly asMemberAdded: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; - readonly isMemberRemoved: boolean; - readonly asMemberRemoved: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; - readonly isMemberRevoked: boolean; - readonly asMemberRevoked: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; - readonly isMembersSwapped: boolean; - readonly asMembersSwapped: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; - readonly isMembersReset: boolean; - readonly asMembersReset: ITuple<[PolymeshPrimitivesIdentityId, Vec]>; - readonly isActiveLimitChanged: boolean; - readonly asActiveLimitChanged: ITuple<[PolymeshPrimitivesIdentityId, u32, u32]>; - readonly isDummy: boolean; - readonly type: 'MemberAdded' | 'MemberRemoved' | 'MemberRevoked' | 'MembersSwapped' | 'MembersReset' | 'ActiveLimitChanged' | 'Dummy'; - } - - /** @name PalletGroupInstance1 (88) */ - type PalletGroupInstance1 = Null; - - /** @name PalletCommitteeRawEventInstance3 (89) */ - interface PalletCommitteeRawEventInstance3 extends Enum { - readonly isProposed: boolean; - readonly asProposed: ITuple<[PolymeshPrimitivesIdentityId, u32, H256]>; - readonly isVoted: boolean; - readonly asVoted: ITuple<[PolymeshPrimitivesIdentityId, u32, H256, bool, u32, u32, u32]>; - readonly isVoteRetracted: boolean; - readonly asVoteRetracted: ITuple<[PolymeshPrimitivesIdentityId, u32, H256, bool]>; - readonly isFinalVotes: boolean; - readonly asFinalVotes: ITuple<[Option, u32, H256, Vec, Vec]>; - readonly isApproved: boolean; - readonly asApproved: ITuple<[Option, H256, u32, u32, u32]>; - readonly isRejected: boolean; - readonly asRejected: ITuple<[Option, H256, u32, u32, u32]>; - readonly isExecuted: boolean; - readonly asExecuted: ITuple<[Option, H256, Result]>; - readonly isReleaseCoordinatorUpdated: boolean; - readonly asReleaseCoordinatorUpdated: Option; - readonly isExpiresAfterUpdated: boolean; - readonly asExpiresAfterUpdated: ITuple<[PolymeshPrimitivesIdentityId, PolymeshCommonUtilitiesMaybeBlock]>; - readonly isVoteThresholdUpdated: boolean; - readonly asVoteThresholdUpdated: ITuple<[PolymeshPrimitivesIdentityId, u32, u32]>; - readonly type: 'Proposed' | 'Voted' | 'VoteRetracted' | 'FinalVotes' | 'Approved' | 'Rejected' | 'Executed' | 'ReleaseCoordinatorUpdated' | 'ExpiresAfterUpdated' | 'VoteThresholdUpdated'; - } - - /** @name PalletCommitteeInstance3 (90) */ - type PalletCommitteeInstance3 = Null; - - /** @name PolymeshCommonUtilitiesGroupRawEventInstance3 (91) */ - interface PolymeshCommonUtilitiesGroupRawEventInstance3 extends Enum { - readonly isMemberAdded: boolean; - readonly asMemberAdded: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; - readonly isMemberRemoved: boolean; - readonly asMemberRemoved: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; - readonly isMemberRevoked: boolean; - readonly asMemberRevoked: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; - readonly isMembersSwapped: boolean; - readonly asMembersSwapped: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; - readonly isMembersReset: boolean; - readonly asMembersReset: ITuple<[PolymeshPrimitivesIdentityId, Vec]>; - readonly isActiveLimitChanged: boolean; - readonly asActiveLimitChanged: ITuple<[PolymeshPrimitivesIdentityId, u32, u32]>; - readonly isDummy: boolean; - readonly type: 'MemberAdded' | 'MemberRemoved' | 'MemberRevoked' | 'MembersSwapped' | 'MembersReset' | 'ActiveLimitChanged' | 'Dummy'; - } - - /** @name PalletGroupInstance3 (92) */ - type PalletGroupInstance3 = Null; - - /** @name PalletCommitteeRawEventInstance4 (93) */ - interface PalletCommitteeRawEventInstance4 extends Enum { - readonly isProposed: boolean; - readonly asProposed: ITuple<[PolymeshPrimitivesIdentityId, u32, H256]>; - readonly isVoted: boolean; - readonly asVoted: ITuple<[PolymeshPrimitivesIdentityId, u32, H256, bool, u32, u32, u32]>; - readonly isVoteRetracted: boolean; - readonly asVoteRetracted: ITuple<[PolymeshPrimitivesIdentityId, u32, H256, bool]>; - readonly isFinalVotes: boolean; - readonly asFinalVotes: ITuple<[Option, u32, H256, Vec, Vec]>; - readonly isApproved: boolean; - readonly asApproved: ITuple<[Option, H256, u32, u32, u32]>; - readonly isRejected: boolean; - readonly asRejected: ITuple<[Option, H256, u32, u32, u32]>; - readonly isExecuted: boolean; - readonly asExecuted: ITuple<[Option, H256, Result]>; - readonly isReleaseCoordinatorUpdated: boolean; - readonly asReleaseCoordinatorUpdated: Option; - readonly isExpiresAfterUpdated: boolean; - readonly asExpiresAfterUpdated: ITuple<[PolymeshPrimitivesIdentityId, PolymeshCommonUtilitiesMaybeBlock]>; - readonly isVoteThresholdUpdated: boolean; - readonly asVoteThresholdUpdated: ITuple<[PolymeshPrimitivesIdentityId, u32, u32]>; - readonly type: 'Proposed' | 'Voted' | 'VoteRetracted' | 'FinalVotes' | 'Approved' | 'Rejected' | 'Executed' | 'ReleaseCoordinatorUpdated' | 'ExpiresAfterUpdated' | 'VoteThresholdUpdated'; - } - - /** @name PalletCommitteeInstance4 (94) */ - type PalletCommitteeInstance4 = Null; - - /** @name PolymeshCommonUtilitiesGroupRawEventInstance4 (95) */ - interface PolymeshCommonUtilitiesGroupRawEventInstance4 extends Enum { - readonly isMemberAdded: boolean; - readonly asMemberAdded: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; - readonly isMemberRemoved: boolean; - readonly asMemberRemoved: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; - readonly isMemberRevoked: boolean; - readonly asMemberRevoked: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; - readonly isMembersSwapped: boolean; - readonly asMembersSwapped: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; - readonly isMembersReset: boolean; - readonly asMembersReset: ITuple<[PolymeshPrimitivesIdentityId, Vec]>; - readonly isActiveLimitChanged: boolean; - readonly asActiveLimitChanged: ITuple<[PolymeshPrimitivesIdentityId, u32, u32]>; - readonly isDummy: boolean; - readonly type: 'MemberAdded' | 'MemberRemoved' | 'MemberRevoked' | 'MembersSwapped' | 'MembersReset' | 'ActiveLimitChanged' | 'Dummy'; - } - - /** @name PalletGroupInstance4 (96) */ - type PalletGroupInstance4 = Null; - - /** @name PalletMultisigEvent (97) */ + /** @name PalletMultisigEvent (90) */ interface PalletMultisigEvent extends Enum { readonly isMultiSigCreated: boolean; readonly asMultiSigCreated: { @@ -968,7 +846,58 @@ declare module '@polkadot/types/lookup' { readonly type: 'MultiSigCreated' | 'ProposalAdded' | 'ProposalExecuted' | 'MultiSigSignerAdded' | 'MultiSigSignersAuthorized' | 'MultiSigSignersRemoved' | 'MultiSigSignersRequiredChanged' | 'ProposalApprovalVote' | 'ProposalRejectionVote' | 'ProposalApproved' | 'ProposalRejected' | 'MultiSigAddedAdmin' | 'MultiSigRemovedAdmin' | 'MultiSigRemovedPayingDid'; } - /** @name PalletStakingPalletEvent (99) */ + /** @name PalletValidatorsEvent (92) */ + interface PalletValidatorsEvent extends Enum { + readonly isNominated: boolean; + readonly asNominated: { + readonly nominatorIdentity: PolymeshPrimitivesIdentityId; + readonly stash: AccountId32; + readonly targets: Vec; + } & Struct; + readonly isPermissionedIdentityAdded: boolean; + readonly asPermissionedIdentityAdded: { + readonly governanceCouncillDid: PolymeshPrimitivesIdentityId; + readonly validatorsIdentity: PolymeshPrimitivesIdentityId; + } & Struct; + readonly isPermissionedIdentityRemoved: boolean; + readonly asPermissionedIdentityRemoved: { + readonly governanceCouncillDid: PolymeshPrimitivesIdentityId; + readonly validatorsIdentity: PolymeshPrimitivesIdentityId; + } & Struct; + readonly isInvalidatedNominators: boolean; + readonly asInvalidatedNominators: { + readonly governanceCouncillDid: PolymeshPrimitivesIdentityId; + readonly governanceCouncillAccount: PolymeshPrimitivesIdentityId; + readonly expiredNominators: Vec; + } & Struct; + readonly isSlashingAllowedForChanged: boolean; + readonly asSlashingAllowedForChanged: { + readonly slashingSwitch: PalletValidatorsSlashingSwitch; + } & Struct; + readonly isRewardPaymentSchedulingInterrupted: boolean; + readonly asRewardPaymentSchedulingInterrupted: { + readonly accountId: AccountId32; + readonly era: u32; + readonly error: SpRuntimeDispatchError; + } & Struct; + readonly isCommissionCapUpdated: boolean; + readonly asCommissionCapUpdated: { + readonly governanceCouncillDid: PolymeshPrimitivesIdentityId; + readonly oldCommissionCap: Perbill; + readonly newCommissionCap: Perbill; + } & Struct; + readonly type: 'Nominated' | 'PermissionedIdentityAdded' | 'PermissionedIdentityRemoved' | 'InvalidatedNominators' | 'SlashingAllowedForChanged' | 'RewardPaymentSchedulingInterrupted' | 'CommissionCapUpdated'; + } + + /** @name PalletValidatorsSlashingSwitch (93) */ + interface PalletValidatorsSlashingSwitch extends Enum { + readonly isValidator: boolean; + readonly isValidatorAndNominator: boolean; + readonly isNone: boolean; + readonly type: 'Validator' | 'ValidatorAndNominator' | 'None'; + } + + /** @name PalletStakingPalletEvent (95) */ interface PalletStakingPalletEvent extends Enum { readonly isEraPaid: boolean; readonly asEraPaid: { @@ -978,7 +907,6 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isRewarded: boolean; readonly asRewarded: { - readonly identity: PolymeshPrimitivesIdentityId; readonly stash: AccountId32; readonly amount: u128; } & Struct; @@ -1000,13 +928,11 @@ declare module '@polkadot/types/lookup' { readonly isStakersElected: boolean; readonly isBonded: boolean; readonly asBonded: { - readonly identity: PolymeshPrimitivesIdentityId; readonly stash: AccountId32; readonly amount: u128; } & Struct; readonly isUnbonded: boolean; readonly asUnbonded: { - readonly identity: PolymeshPrimitivesIdentityId; readonly stash: AccountId32; readonly amount: u128; } & Struct; @@ -1039,54 +965,16 @@ declare module '@polkadot/types/lookup' { readonly asForceEra: { readonly mode: PalletStakingForcing; } & Struct; - readonly isNominated: boolean; - readonly asNominated: { - readonly nominatorIdentity: PolymeshPrimitivesIdentityId; - readonly stash: AccountId32; - readonly targets: Vec; - } & Struct; - readonly isPermissionedIdentityAdded: boolean; - readonly asPermissionedIdentityAdded: { - readonly governanceCouncillDid: PolymeshPrimitivesIdentityId; - readonly validatorsIdentity: PolymeshPrimitivesIdentityId; - } & Struct; - readonly isPermissionedIdentityRemoved: boolean; - readonly asPermissionedIdentityRemoved: { - readonly governanceCouncillDid: PolymeshPrimitivesIdentityId; - readonly validatorsIdentity: PolymeshPrimitivesIdentityId; - } & Struct; - readonly isInvalidatedNominators: boolean; - readonly asInvalidatedNominators: { - readonly governanceCouncillDid: PolymeshPrimitivesIdentityId; - readonly governanceCouncillAccount: PolymeshPrimitivesIdentityId; - readonly expiredNominators: Vec; - } & Struct; - readonly isSlashingAllowedForChanged: boolean; - readonly asSlashingAllowedForChanged: { - readonly slashingSwitch: PalletStakingSlashingSwitch; - } & Struct; - readonly isRewardPaymentSchedulingInterrupted: boolean; - readonly asRewardPaymentSchedulingInterrupted: { - readonly accountId: AccountId32; - readonly era: u32; - readonly error: SpRuntimeDispatchError; - } & Struct; - readonly isCommissionCapUpdated: boolean; - readonly asCommissionCapUpdated: { - readonly governanceCouncillDid: PolymeshPrimitivesIdentityId; - readonly oldCommissionCap: Perbill; - readonly newCommissionCap: Perbill; - } & Struct; - readonly type: 'EraPaid' | 'Rewarded' | 'Slashed' | 'SlashReported' | 'OldSlashingReportDiscarded' | 'StakersElected' | 'Bonded' | 'Unbonded' | 'Withdrawn' | 'Kicked' | 'StakingElectionFailed' | 'Chilled' | 'PayoutStarted' | 'ValidatorPrefsSet' | 'ForceEra' | 'Nominated' | 'PermissionedIdentityAdded' | 'PermissionedIdentityRemoved' | 'InvalidatedNominators' | 'SlashingAllowedForChanged' | 'RewardPaymentSchedulingInterrupted' | 'CommissionCapUpdated'; + readonly type: 'EraPaid' | 'Rewarded' | 'Slashed' | 'SlashReported' | 'OldSlashingReportDiscarded' | 'StakersElected' | 'Bonded' | 'Unbonded' | 'Withdrawn' | 'Kicked' | 'StakingElectionFailed' | 'Chilled' | 'PayoutStarted' | 'ValidatorPrefsSet' | 'ForceEra'; } - /** @name PalletStakingValidatorPrefs (101) */ + /** @name PalletStakingValidatorPrefs (96) */ interface PalletStakingValidatorPrefs extends Struct { readonly commission: Compact; readonly blocked: bool; } - /** @name PalletStakingForcing (103) */ + /** @name PalletStakingForcing (98) */ interface PalletStakingForcing extends Enum { readonly isNotForcing: boolean; readonly isForceNew: boolean; @@ -1095,15 +983,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotForcing' | 'ForceNew' | 'ForceNone' | 'ForceAlways'; } - /** @name PalletStakingSlashingSwitch (104) */ - interface PalletStakingSlashingSwitch extends Enum { - readonly isValidator: boolean; - readonly isValidatorAndNominator: boolean; - readonly isNone: boolean; - readonly type: 'Validator' | 'ValidatorAndNominator' | 'None'; - } - - /** @name PalletOffencesEvent (105) */ + /** @name PalletOffencesEvent (99) */ interface PalletOffencesEvent extends Enum { readonly isOffence: boolean; readonly asOffence: { @@ -1113,7 +993,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Offence'; } - /** @name PalletSessionEvent (106) */ + /** @name PalletSessionEvent (100) */ interface PalletSessionEvent extends Enum { readonly isNewSession: boolean; readonly asNewSession: { @@ -1122,7 +1002,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NewSession'; } - /** @name PalletGrandpaEvent (107) */ + /** @name PalletGrandpaEvent (101) */ interface PalletGrandpaEvent extends Enum { readonly isNewAuthorities: boolean; readonly asNewAuthorities: { @@ -1133,13 +1013,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'NewAuthorities' | 'Paused' | 'Resumed'; } - /** @name SpConsensusGrandpaAppPublic (110) */ + /** @name SpConsensusGrandpaAppPublic (104) */ interface SpConsensusGrandpaAppPublic extends SpCoreEd25519Public {} - /** @name SpCoreEd25519Public (111) */ + /** @name SpCoreEd25519Public (105) */ interface SpCoreEd25519Public extends U8aFixed {} - /** @name PalletImOnlineEvent (112) */ + /** @name PalletImOnlineEvent (106) */ interface PalletImOnlineEvent extends Enum { readonly isHeartbeatReceived: boolean; readonly asHeartbeatReceived: { @@ -1153,38 +1033,44 @@ declare module '@polkadot/types/lookup' { readonly type: 'HeartbeatReceived' | 'AllGood' | 'SomeOffline'; } - /** @name PalletImOnlineSr25519AppSr25519Public (113) */ + /** @name PalletImOnlineSr25519AppSr25519Public (107) */ interface PalletImOnlineSr25519AppSr25519Public extends SpCoreSr25519Public {} - /** @name SpCoreSr25519Public (114) */ + /** @name SpCoreSr25519Public (108) */ interface SpCoreSr25519Public extends U8aFixed {} - /** @name PalletStakingExposure (117) */ + /** @name PalletStakingExposure (111) */ interface PalletStakingExposure extends Struct { readonly total: Compact; readonly own: Compact; readonly others: Vec; } - /** @name PalletStakingIndividualExposure (120) */ + /** @name PalletStakingIndividualExposure (114) */ interface PalletStakingIndividualExposure extends Struct { readonly who: AccountId32; readonly value: Compact; } - /** @name PalletSudoRawEvent (121) */ - interface PalletSudoRawEvent extends Enum { + /** @name PalletSudoEvent (115) */ + interface PalletSudoEvent extends Enum { readonly isSudid: boolean; - readonly asSudid: Result; + readonly asSudid: { + readonly sudoResult: Result; + } & Struct; readonly isKeyChanged: boolean; - readonly asKeyChanged: Option; + readonly asKeyChanged: { + readonly oldSudoer: Option; + } & Struct; readonly isSudoAsDone: boolean; - readonly asSudoAsDone: Result; + readonly asSudoAsDone: { + readonly sudoResult: Result; + } & Struct; readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone'; } - /** @name PolymeshCommonUtilitiesAssetRawEvent (122) */ - interface PolymeshCommonUtilitiesAssetRawEvent extends Enum { + /** @name PalletAssetEvent (116) */ + interface PalletAssetEvent extends Enum { readonly isAssetCreated: boolean; readonly asAssetCreated: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesAssetAssetId, bool, PolymeshPrimitivesAssetAssetType, PolymeshPrimitivesIdentityId, Bytes, Vec, Option]>; readonly isIdentifiersUpdated: boolean; @@ -1245,10 +1131,14 @@ declare module '@polkadot/types/lookup' { readonly asAssetMediatorsRemoved: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesAssetAssetId, BTreeSet]>; readonly isTickerLinkedToAsset: boolean; readonly asTickerLinkedToAsset: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesTicker, PolymeshPrimitivesAssetAssetId]>; - readonly type: 'AssetCreated' | 'IdentifiersUpdated' | 'DivisibilityChanged' | 'TickerRegistered' | 'TickerTransferred' | 'AssetOwnershipTransferred' | 'AssetFrozen' | 'AssetUnfrozen' | 'AssetRenamed' | 'FundingRoundSet' | 'DocumentAdded' | 'DocumentRemoved' | 'ControllerTransfer' | 'CustomAssetTypeExists' | 'CustomAssetTypeRegistered' | 'SetAssetMetadataValue' | 'SetAssetMetadataValueDetails' | 'RegisterAssetMetadataLocalType' | 'RegisterAssetMetadataGlobalType' | 'AssetTypeChanged' | 'LocalMetadataKeyDeleted' | 'MetadataValueDeleted' | 'AssetBalanceUpdated' | 'AssetAffirmationExemption' | 'RemoveAssetAffirmationExemption' | 'PreApprovedAsset' | 'RemovePreApprovedAsset' | 'AssetMediatorsAdded' | 'AssetMediatorsRemoved' | 'TickerLinkedToAsset'; + readonly isTickerUnlinkedFromAsset: boolean; + readonly asTickerUnlinkedFromAsset: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesTicker, PolymeshPrimitivesAssetAssetId]>; + readonly isGlobalMetadataSpecUpdated: boolean; + readonly asGlobalMetadataSpecUpdated: ITuple<[Bytes, PolymeshPrimitivesAssetMetadataAssetMetadataSpec]>; + readonly type: 'AssetCreated' | 'IdentifiersUpdated' | 'DivisibilityChanged' | 'TickerRegistered' | 'TickerTransferred' | 'AssetOwnershipTransferred' | 'AssetFrozen' | 'AssetUnfrozen' | 'AssetRenamed' | 'FundingRoundSet' | 'DocumentAdded' | 'DocumentRemoved' | 'ControllerTransfer' | 'CustomAssetTypeExists' | 'CustomAssetTypeRegistered' | 'SetAssetMetadataValue' | 'SetAssetMetadataValueDetails' | 'RegisterAssetMetadataLocalType' | 'RegisterAssetMetadataGlobalType' | 'AssetTypeChanged' | 'LocalMetadataKeyDeleted' | 'MetadataValueDeleted' | 'AssetBalanceUpdated' | 'AssetAffirmationExemption' | 'RemoveAssetAffirmationExemption' | 'PreApprovedAsset' | 'RemovePreApprovedAsset' | 'AssetMediatorsAdded' | 'AssetMediatorsRemoved' | 'TickerLinkedToAsset' | 'TickerUnlinkedFromAsset' | 'GlobalMetadataSpecUpdated'; } - /** @name PolymeshPrimitivesAssetAssetType (123) */ + /** @name PolymeshPrimitivesAssetAssetType (117) */ interface PolymeshPrimitivesAssetAssetType extends Enum { readonly isEquityCommon: boolean; readonly isEquityPreferred: boolean; @@ -1267,7 +1157,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'EquityCommon' | 'EquityPreferred' | 'Commodity' | 'FixedIncome' | 'Reit' | 'Fund' | 'RevenueShareAgreement' | 'StructuredProduct' | 'Derivative' | 'Custom' | 'StableCoin' | 'NonFungible'; } - /** @name PolymeshPrimitivesAssetNonFungibleType (125) */ + /** @name PolymeshPrimitivesAssetNonFungibleType (119) */ interface PolymeshPrimitivesAssetNonFungibleType extends Enum { readonly isDerivative: boolean; readonly isFixedIncome: boolean; @@ -1277,7 +1167,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Derivative' | 'FixedIncome' | 'Invoice' | 'Custom'; } - /** @name PolymeshPrimitivesAssetIdentifier (128) */ + /** @name PolymeshPrimitivesAssetIdentifier (122) */ interface PolymeshPrimitivesAssetIdentifier extends Enum { readonly isCusip: boolean; readonly asCusip: U8aFixed; @@ -1292,7 +1182,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Cusip' | 'Cins' | 'Isin' | 'Lei' | 'Figi'; } - /** @name PolymeshPrimitivesDocument (134) */ + /** @name PolymeshPrimitivesDocument (128) */ interface PolymeshPrimitivesDocument extends Struct { readonly uri: Bytes; readonly contentHash: PolymeshPrimitivesDocumentHash; @@ -1301,7 +1191,7 @@ declare module '@polkadot/types/lookup' { readonly filingDate: Option; } - /** @name PolymeshPrimitivesDocumentHash (136) */ + /** @name PolymeshPrimitivesDocumentHash (130) */ interface PolymeshPrimitivesDocumentHash extends Enum { readonly isNone: boolean; readonly isH512: boolean; @@ -1323,13 +1213,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'None' | 'H512' | 'H384' | 'H320' | 'H256' | 'H224' | 'H192' | 'H160' | 'H128'; } - /** @name PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail (147) */ + /** @name PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail (141) */ interface PolymeshPrimitivesAssetMetadataAssetMetadataValueDetail extends Struct { readonly expire: Option; readonly lockStatus: PolymeshPrimitivesAssetMetadataAssetMetadataLockStatus; } - /** @name PolymeshPrimitivesAssetMetadataAssetMetadataLockStatus (148) */ + /** @name PolymeshPrimitivesAssetMetadataAssetMetadataLockStatus (142) */ interface PolymeshPrimitivesAssetMetadataAssetMetadataLockStatus extends Enum { readonly isUnlocked: boolean; readonly isLocked: boolean; @@ -1338,14 +1228,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unlocked' | 'Locked' | 'LockedUntil'; } - /** @name PolymeshPrimitivesAssetMetadataAssetMetadataSpec (151) */ + /** @name PolymeshPrimitivesAssetMetadataAssetMetadataSpec (145) */ interface PolymeshPrimitivesAssetMetadataAssetMetadataSpec extends Struct { readonly url: Option; readonly description: Option; readonly typeDef: Option; } - /** @name PolymeshPrimitivesAssetMetadataAssetMetadataKey (158) */ + /** @name PolymeshPrimitivesAssetMetadataAssetMetadataKey (152) */ interface PolymeshPrimitivesAssetMetadataAssetMetadataKey extends Enum { readonly isGlobal: boolean; readonly asGlobal: u64; @@ -1354,7 +1244,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Global' | 'Local'; } - /** @name PolymeshPrimitivesPortfolioPortfolioUpdateReason (160) */ + /** @name PolymeshPrimitivesPortfolioPortfolioUpdateReason (154) */ interface PolymeshPrimitivesPortfolioPortfolioUpdateReason extends Enum { readonly isIssued: boolean; readonly asIssued: { @@ -1370,8 +1260,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Issued' | 'Redeemed' | 'Transferred' | 'ControllerTransfer'; } - /** @name PalletCorporateActionsDistributionEvent (164) */ - interface PalletCorporateActionsDistributionEvent extends Enum { + /** @name PalletCorporateActionsDistributionPalletEvent (158) */ + interface PalletCorporateActionsDistributionPalletEvent extends Enum { readonly isCreated: boolean; readonly asCreated: ITuple<[PolymeshPrimitivesEventOnly, PalletCorporateActionsCaId, PalletCorporateActionsDistribution]>; readonly isBenefitClaimed: boolean; @@ -1383,16 +1273,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Created' | 'BenefitClaimed' | 'Reclaimed' | 'Removed'; } - /** @name PolymeshPrimitivesEventOnly (165) */ + /** @name PolymeshPrimitivesEventOnly (159) */ interface PolymeshPrimitivesEventOnly extends PolymeshPrimitivesIdentityId {} - /** @name PalletCorporateActionsCaId (166) */ + /** @name PalletCorporateActionsCaId (160) */ interface PalletCorporateActionsCaId extends Struct { readonly assetId: PolymeshPrimitivesAssetAssetId; readonly localId: u32; } - /** @name PalletCorporateActionsDistribution (168) */ + /** @name PalletCorporateActionsDistribution (162) */ interface PalletCorporateActionsDistribution extends Struct { readonly from: PolymeshPrimitivesIdentityIdPortfolioId; readonly currency: PolymeshPrimitivesAssetAssetId; @@ -1404,8 +1294,8 @@ declare module '@polkadot/types/lookup' { readonly expiresAt: Option; } - /** @name PolymeshCommonUtilitiesCheckpointEvent (170) */ - interface PolymeshCommonUtilitiesCheckpointEvent extends Enum { + /** @name PalletAssetCheckpointPalletEvent (164) */ + interface PalletAssetCheckpointPalletEvent extends Enum { readonly isCheckpointCreated: boolean; readonly asCheckpointCreated: ITuple<[Option, PolymeshPrimitivesAssetAssetId, u64, u128, u64]>; readonly isMaximumSchedulesComplexityChanged: boolean; @@ -1417,13 +1307,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'CheckpointCreated' | 'MaximumSchedulesComplexityChanged' | 'ScheduleCreated' | 'ScheduleRemoved'; } - /** @name PolymeshCommonUtilitiesCheckpointScheduleCheckpoints (173) */ + /** @name PolymeshCommonUtilitiesCheckpointScheduleCheckpoints (167) */ interface PolymeshCommonUtilitiesCheckpointScheduleCheckpoints extends Struct { readonly pending: BTreeSet; } - /** @name PolymeshCommonUtilitiesComplianceManagerEvent (176) */ - interface PolymeshCommonUtilitiesComplianceManagerEvent extends Enum { + /** @name PalletComplianceManagerEvent (170) */ + interface PalletComplianceManagerEvent extends Enum { readonly isComplianceRequirementCreated: boolean; readonly asComplianceRequirementCreated: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesComplianceManagerComplianceRequirement]>; readonly isComplianceRequirementRemoved: boolean; @@ -1445,20 +1335,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'ComplianceRequirementCreated' | 'ComplianceRequirementRemoved' | 'AssetComplianceReplaced' | 'AssetComplianceReset' | 'AssetComplianceResumed' | 'AssetCompliancePaused' | 'ComplianceRequirementChanged' | 'TrustedDefaultClaimIssuerAdded' | 'TrustedDefaultClaimIssuerRemoved'; } - /** @name PolymeshPrimitivesComplianceManagerComplianceRequirement (177) */ + /** @name PolymeshPrimitivesComplianceManagerComplianceRequirement (171) */ interface PolymeshPrimitivesComplianceManagerComplianceRequirement extends Struct { readonly senderConditions: Vec; readonly receiverConditions: Vec; readonly id: u32; } - /** @name PolymeshPrimitivesCondition (179) */ + /** @name PolymeshPrimitivesCondition (173) */ interface PolymeshPrimitivesCondition extends Struct { readonly conditionType: PolymeshPrimitivesConditionConditionType; readonly issuers: Vec; } - /** @name PolymeshPrimitivesConditionConditionType (180) */ + /** @name PolymeshPrimitivesConditionConditionType (174) */ interface PolymeshPrimitivesConditionConditionType extends Enum { readonly isIsPresent: boolean; readonly asIsPresent: PolymeshPrimitivesIdentityClaimClaim; @@ -1473,7 +1363,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'IsPresent' | 'IsAbsent' | 'IsAnyOf' | 'IsNoneOf' | 'IsIdentity'; } - /** @name PolymeshPrimitivesConditionTargetIdentity (182) */ + /** @name PolymeshPrimitivesConditionTargetIdentity (176) */ interface PolymeshPrimitivesConditionTargetIdentity extends Enum { readonly isExternalAgent: boolean; readonly isSpecific: boolean; @@ -1481,13 +1371,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'ExternalAgent' | 'Specific'; } - /** @name PolymeshPrimitivesConditionTrustedIssuer (184) */ + /** @name PolymeshPrimitivesConditionTrustedIssuer (178) */ interface PolymeshPrimitivesConditionTrustedIssuer extends Struct { readonly issuer: PolymeshPrimitivesIdentityId; readonly trustedFor: PolymeshPrimitivesConditionTrustedFor; } - /** @name PolymeshPrimitivesConditionTrustedFor (185) */ + /** @name PolymeshPrimitivesConditionTrustedFor (179) */ interface PolymeshPrimitivesConditionTrustedFor extends Enum { readonly isAny: boolean; readonly isSpecific: boolean; @@ -1495,7 +1385,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Any' | 'Specific'; } - /** @name PolymeshPrimitivesIdentityClaimClaimType (187) */ + /** @name PolymeshPrimitivesIdentityClaimClaimType (181) */ interface PolymeshPrimitivesIdentityClaimClaimType extends Enum { readonly isAccredited: boolean; readonly isAffiliate: boolean; @@ -1511,7 +1401,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Accredited' | 'Affiliate' | 'BuyLockup' | 'SellLockup' | 'CustomerDueDiligence' | 'KnowYourCustomer' | 'Jurisdiction' | 'Exempted' | 'Blocked' | 'Custom'; } - /** @name PalletCorporateActionsEvent (189) */ + /** @name PalletCorporateActionsEvent (183) */ interface PalletCorporateActionsEvent extends Enum { readonly isMaxDetailsLengthChanged: boolean; readonly asMaxDetailsLengthChanged: ITuple<[PolymeshPrimitivesIdentityId, u32]>; @@ -1532,20 +1422,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'MaxDetailsLengthChanged' | 'DefaultTargetIdentitiesChanged' | 'DefaultWithholdingTaxChanged' | 'DidWithholdingTaxChanged' | 'CaInitiated' | 'CaLinkedToDoc' | 'CaRemoved' | 'RecordDateChanged'; } - /** @name PalletCorporateActionsTargetIdentities (190) */ + /** @name PalletCorporateActionsTargetIdentities (184) */ interface PalletCorporateActionsTargetIdentities extends Struct { readonly identities: Vec; readonly treatment: PalletCorporateActionsTargetTreatment; } - /** @name PalletCorporateActionsTargetTreatment (191) */ + /** @name PalletCorporateActionsTargetTreatment (185) */ interface PalletCorporateActionsTargetTreatment extends Enum { readonly isInclude: boolean; readonly isExclude: boolean; readonly type: 'Include' | 'Exclude'; } - /** @name PalletCorporateActionsCorporateAction (193) */ + /** @name PalletCorporateActionsCorporateAction (187) */ interface PalletCorporateActionsCorporateAction extends Struct { readonly kind: PalletCorporateActionsCaKind; readonly declDate: u64; @@ -1555,7 +1445,7 @@ declare module '@polkadot/types/lookup' { readonly withholdingTax: Vec>; } - /** @name PalletCorporateActionsCaKind (194) */ + /** @name PalletCorporateActionsCaKind (188) */ interface PalletCorporateActionsCaKind extends Enum { readonly isPredictableBenefit: boolean; readonly isUnpredictableBenefit: boolean; @@ -1565,13 +1455,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'PredictableBenefit' | 'UnpredictableBenefit' | 'IssuerNotice' | 'Reorganization' | 'Other'; } - /** @name PalletCorporateActionsRecordDate (196) */ + /** @name PalletCorporateActionsRecordDate (190) */ interface PalletCorporateActionsRecordDate extends Struct { readonly date: u64; readonly checkpoint: PalletCorporateActionsCaCheckpoint; } - /** @name PalletCorporateActionsCaCheckpoint (197) */ + /** @name PalletCorporateActionsCaCheckpoint (191) */ interface PalletCorporateActionsCaCheckpoint extends Enum { readonly isScheduled: boolean; readonly asScheduled: ITuple<[u64, u64]>; @@ -1580,8 +1470,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Scheduled' | 'Existing'; } - /** @name PalletCorporateActionsBallotEvent (202) */ - interface PalletCorporateActionsBallotEvent extends Enum { + /** @name PalletCorporateActionsBallotPalletEvent (196) */ + interface PalletCorporateActionsBallotPalletEvent extends Enum { readonly isCreated: boolean; readonly asCreated: ITuple<[PolymeshPrimitivesIdentityId, PalletCorporateActionsCaId, PalletCorporateActionsBallotBallotTimeRange, PalletCorporateActionsBallotBallotMeta, bool]>; readonly isVoteCast: boolean; @@ -1597,37 +1487,37 @@ declare module '@polkadot/types/lookup' { readonly type: 'Created' | 'VoteCast' | 'RangeChanged' | 'MetaChanged' | 'RcvChanged' | 'Removed'; } - /** @name PalletCorporateActionsBallotBallotTimeRange (203) */ + /** @name PalletCorporateActionsBallotBallotTimeRange (197) */ interface PalletCorporateActionsBallotBallotTimeRange extends Struct { readonly start: u64; readonly end: u64; } - /** @name PalletCorporateActionsBallotBallotMeta (204) */ + /** @name PalletCorporateActionsBallotBallotMeta (198) */ interface PalletCorporateActionsBallotBallotMeta extends Struct { readonly title: Bytes; readonly motions: Vec; } - /** @name PalletCorporateActionsBallotMotion (207) */ + /** @name PalletCorporateActionsBallotMotion (201) */ interface PalletCorporateActionsBallotMotion extends Struct { readonly title: Bytes; readonly infoLink: Bytes; readonly choices: Vec; } - /** @name PalletCorporateActionsBallotBallotVote (213) */ + /** @name PalletCorporateActionsBallotBallotVote (207) */ interface PalletCorporateActionsBallotBallotVote extends Struct { readonly power: u128; readonly fallback: Option; } - /** @name PalletPipsRawEvent (216) */ - interface PalletPipsRawEvent extends Enum { + /** @name PalletPipsEvent (210) */ + interface PalletPipsEvent extends Enum { readonly isHistoricalPipsPruned: boolean; readonly asHistoricalPipsPruned: ITuple<[PolymeshPrimitivesIdentityId, bool, bool]>; readonly isProposalCreated: boolean; - readonly asProposalCreated: ITuple<[PolymeshPrimitivesIdentityId, PalletPipsProposer, u32, u128, Option, Option, PolymeshCommonUtilitiesMaybeBlock, PalletPipsProposalData]>; + readonly asProposalCreated: ITuple<[PolymeshPrimitivesIdentityId, PalletPipsProposer, u32, u128, Option, Option, PolymeshPrimitivesMaybeBlock, PalletPipsProposalData]>; readonly isProposalStateUpdated: boolean; readonly asProposalStateUpdated: ITuple<[PolymeshPrimitivesIdentityId, u32, PalletPipsProposalState]>; readonly isVoted: boolean; @@ -1641,7 +1531,7 @@ declare module '@polkadot/types/lookup' { readonly isMinimumProposalDepositChanged: boolean; readonly asMinimumProposalDepositChanged: ITuple<[PolymeshPrimitivesIdentityId, u128, u128]>; readonly isPendingPipExpiryChanged: boolean; - readonly asPendingPipExpiryChanged: ITuple<[PolymeshPrimitivesIdentityId, PolymeshCommonUtilitiesMaybeBlock, PolymeshCommonUtilitiesMaybeBlock]>; + readonly asPendingPipExpiryChanged: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesMaybeBlock, PolymeshPrimitivesMaybeBlock]>; readonly isMaxPipSkipCountChanged: boolean; readonly asMaxPipSkipCountChanged: ITuple<[PolymeshPrimitivesIdentityId, u8, u8]>; readonly isActivePipLimitChanged: boolean; @@ -1667,7 +1557,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'HistoricalPipsPruned' | 'ProposalCreated' | 'ProposalStateUpdated' | 'Voted' | 'PipClosed' | 'ExecutionScheduled' | 'DefaultEnactmentPeriodChanged' | 'MinimumProposalDepositChanged' | 'PendingPipExpiryChanged' | 'MaxPipSkipCountChanged' | 'ActivePipLimitChanged' | 'ProposalRefund' | 'SnapshotCleared' | 'SnapshotTaken' | 'PipSkipped' | 'SnapshotResultsEnacted' | 'ExecutionSchedulingFailed' | 'ExpiryScheduled' | 'ExpirySchedulingFailed' | 'ExecutionCancellingFailed'; } - /** @name PalletPipsProposer (217) */ + /** @name PalletPipsProposer (211) */ interface PalletPipsProposer extends Enum { readonly isCommunity: boolean; readonly asCommunity: AccountId32; @@ -1676,14 +1566,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Community' | 'Committee'; } - /** @name PalletPipsCommittee (218) */ + /** @name PalletPipsCommittee (212) */ interface PalletPipsCommittee extends Enum { readonly isTechnical: boolean; readonly isUpgrade: boolean; readonly type: 'Technical' | 'Upgrade'; } - /** @name PalletPipsProposalData (222) */ + /** @name PalletPipsProposalData (216) */ interface PalletPipsProposalData extends Enum { readonly isHash: boolean; readonly asHash: H256; @@ -1692,7 +1582,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Hash' | 'Proposal'; } - /** @name PalletPipsProposalState (223) */ + /** @name PalletPipsProposalState (217) */ interface PalletPipsProposalState extends Enum { readonly isPending: boolean; readonly isRejected: boolean; @@ -1703,14 +1593,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Pending' | 'Rejected' | 'Scheduled' | 'Failed' | 'Executed' | 'Expired'; } - /** @name PalletPipsSnapshottedPip (226) */ + /** @name PalletPipsSnapshottedPip (220) */ interface PalletPipsSnapshottedPip extends Struct { readonly id: u32; readonly weight: ITuple<[bool, u128]>; } - /** @name PolymeshCommonUtilitiesPortfolioEvent (232) */ - interface PolymeshCommonUtilitiesPortfolioEvent extends Enum { + /** @name PalletPortfolioEvent (226) */ + interface PalletPortfolioEvent extends Enum { readonly isPortfolioCreated: boolean; readonly asPortfolioCreated: ITuple<[PolymeshPrimitivesIdentityId, u64, Bytes]>; readonly isPortfolioDeleted: boolean; @@ -1727,10 +1617,14 @@ declare module '@polkadot/types/lookup' { readonly asPreApprovedPortfolio: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesAssetAssetId]>; readonly isRevokePreApprovedPortfolio: boolean; readonly asRevokePreApprovedPortfolio: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityIdPortfolioId, PolymeshPrimitivesAssetAssetId]>; - readonly type: 'PortfolioCreated' | 'PortfolioDeleted' | 'PortfolioRenamed' | 'UserPortfolios' | 'PortfolioCustodianChanged' | 'FundsMovedBetweenPortfolios' | 'PreApprovedPortfolio' | 'RevokePreApprovedPortfolio'; + readonly isAllowIdentityToCreatePortfolios: boolean; + readonly asAllowIdentityToCreatePortfolios: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; + readonly isRevokeCreatePortfoliosPermission: boolean; + readonly asRevokeCreatePortfoliosPermission: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId]>; + readonly type: 'PortfolioCreated' | 'PortfolioDeleted' | 'PortfolioRenamed' | 'UserPortfolios' | 'PortfolioCustodianChanged' | 'FundsMovedBetweenPortfolios' | 'PreApprovedPortfolio' | 'RevokePreApprovedPortfolio' | 'AllowIdentityToCreatePortfolios' | 'RevokeCreatePortfoliosPermission'; } - /** @name PolymeshPrimitivesPortfolioFundDescription (236) */ + /** @name PolymeshPrimitivesPortfolioFundDescription (230) */ interface PolymeshPrimitivesPortfolioFundDescription extends Enum { readonly isFungible: boolean; readonly asFungible: { @@ -1742,14 +1636,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fungible' | 'NonFungible'; } - /** @name PolymeshPrimitivesNftNfTs (237) */ + /** @name PolymeshPrimitivesNftNfTs (231) */ interface PolymeshPrimitivesNftNfTs extends Struct { readonly assetId: PolymeshPrimitivesAssetAssetId; readonly ids: Vec; } - /** @name PalletProtocolFeeRawEvent (240) */ - interface PalletProtocolFeeRawEvent extends Enum { + /** @name PalletProtocolFeeEvent (234) */ + interface PalletProtocolFeeEvent extends Enum { readonly isFeeSet: boolean; readonly asFeeSet: ITuple<[PolymeshPrimitivesIdentityId, u128]>; readonly isCoefficientSet: boolean; @@ -1759,10 +1653,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'FeeSet' | 'CoefficientSet' | 'FeeCharged'; } - /** @name PolymeshPrimitivesPosRatio (241) */ + /** @name PolymeshPrimitivesPosRatio (235) */ interface PolymeshPrimitivesPosRatio extends ITuple<[u32, u32]> {} - /** @name PalletSchedulerEvent (242) */ + /** @name PalletSchedulerEvent (236) */ interface PalletSchedulerEvent extends Enum { readonly isScheduled: boolean; readonly asScheduled: { @@ -1798,8 +1692,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallUnavailable' | 'PeriodicFailed' | 'PermanentlyOverweight'; } - /** @name PolymeshCommonUtilitiesSettlementRawEvent (245) */ - interface PolymeshCommonUtilitiesSettlementRawEvent extends Enum { + /** @name PalletSettlementEvent (239) */ + interface PalletSettlementEvent extends Enum { readonly isVenueCreated: boolean; readonly asVenueCreated: ITuple<[PolymeshPrimitivesIdentityId, u64, Bytes, PolymeshPrimitivesSettlementVenueType]>; readonly isVenueDetailsUpdated: boolean; @@ -1822,8 +1716,6 @@ declare module '@polkadot/types/lookup' { readonly asVenuesBlocked: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesAssetAssetId, Vec]>; readonly isLegFailedExecution: boolean; readonly asLegFailedExecution: ITuple<[PolymeshPrimitivesIdentityId, u64, u64]>; - readonly isInstructionFailed: boolean; - readonly asInstructionFailed: ITuple<[PolymeshPrimitivesIdentityId, u64]>; readonly isInstructionExecuted: boolean; readonly asInstructionExecuted: ITuple<[PolymeshPrimitivesIdentityId, u64]>; readonly isVenueUnauthorized: boolean; @@ -1848,10 +1740,12 @@ declare module '@polkadot/types/lookup' { readonly asMediatorAffirmationWithdrawn: ITuple<[PolymeshPrimitivesIdentityId, u64]>; readonly isInstructionMediators: boolean; readonly asInstructionMediators: ITuple<[u64, BTreeSet]>; - readonly type: 'VenueCreated' | 'VenueDetailsUpdated' | 'VenueTypeUpdated' | 'InstructionAffirmed' | 'AffirmationWithdrawn' | 'InstructionRejected' | 'ReceiptClaimed' | 'VenueFiltering' | 'VenuesAllowed' | 'VenuesBlocked' | 'LegFailedExecution' | 'InstructionFailed' | 'InstructionExecuted' | 'VenueUnauthorized' | 'SchedulingFailed' | 'InstructionRescheduled' | 'VenueSignersUpdated' | 'SettlementManuallyExecuted' | 'InstructionCreated' | 'FailedToExecuteInstruction' | 'InstructionAutomaticallyAffirmed' | 'MediatorAffirmationReceived' | 'MediatorAffirmationWithdrawn' | 'InstructionMediators'; + readonly isInstructionLocked: boolean; + readonly asInstructionLocked: ITuple<[PolymeshPrimitivesIdentityId, u64]>; + readonly type: 'VenueCreated' | 'VenueDetailsUpdated' | 'VenueTypeUpdated' | 'InstructionAffirmed' | 'AffirmationWithdrawn' | 'InstructionRejected' | 'ReceiptClaimed' | 'VenueFiltering' | 'VenuesAllowed' | 'VenuesBlocked' | 'LegFailedExecution' | 'InstructionExecuted' | 'VenueUnauthorized' | 'SchedulingFailed' | 'InstructionRescheduled' | 'VenueSignersUpdated' | 'SettlementManuallyExecuted' | 'InstructionCreated' | 'FailedToExecuteInstruction' | 'InstructionAutomaticallyAffirmed' | 'MediatorAffirmationReceived' | 'MediatorAffirmationWithdrawn' | 'InstructionMediators' | 'InstructionLocked'; } - /** @name PolymeshPrimitivesSettlementVenueType (248) */ + /** @name PolymeshPrimitivesSettlementVenueType (242) */ interface PolymeshPrimitivesSettlementVenueType extends Enum { readonly isOther: boolean; readonly isDistribution: boolean; @@ -1860,20 +1754,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'Other' | 'Distribution' | 'Sto' | 'Exchange'; } - /** @name PolymeshPrimitivesSettlementReceiptMetadata (251) */ + /** @name PolymeshPrimitivesSettlementReceiptMetadata (245) */ interface PolymeshPrimitivesSettlementReceiptMetadata extends U8aFixed {} - /** @name PolymeshPrimitivesSettlementSettlementType (254) */ + /** @name PolymeshPrimitivesSettlementSettlementType (248) */ interface PolymeshPrimitivesSettlementSettlementType extends Enum { readonly isSettleOnAffirmation: boolean; readonly isSettleOnBlock: boolean; readonly asSettleOnBlock: u32; readonly isSettleManual: boolean; readonly asSettleManual: u32; - readonly type: 'SettleOnAffirmation' | 'SettleOnBlock' | 'SettleManual'; + readonly isSettleAfterLock: boolean; + readonly type: 'SettleOnAffirmation' | 'SettleOnBlock' | 'SettleManual' | 'SettleAfterLock'; } - /** @name PolymeshPrimitivesSettlementLeg (256) */ + /** @name PolymeshPrimitivesSettlementLeg (250) */ interface PolymeshPrimitivesSettlementLeg extends Enum { readonly isFungible: boolean; readonly asFungible: { @@ -1898,8 +1793,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fungible' | 'NonFungible' | 'OffChain'; } - /** @name PolymeshCommonUtilitiesStatisticsEvent (257) */ - interface PolymeshCommonUtilitiesStatisticsEvent extends Enum { + /** @name PalletStatisticsEvent (251) */ + interface PalletStatisticsEvent extends Enum { readonly isStatTypesAdded: boolean; readonly asStatTypesAdded: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesAssetAssetId, Vec]>; readonly isStatTypesRemoved: boolean; @@ -1915,26 +1810,26 @@ declare module '@polkadot/types/lookup' { readonly type: 'StatTypesAdded' | 'StatTypesRemoved' | 'AssetStatsUpdated' | 'SetAssetTransferCompliance' | 'TransferConditionExemptionsAdded' | 'TransferConditionExemptionsRemoved'; } - /** @name PolymeshPrimitivesStatisticsStatType (259) */ + /** @name PolymeshPrimitivesStatisticsStatType (253) */ interface PolymeshPrimitivesStatisticsStatType extends Struct { readonly operationType: PolymeshPrimitivesStatisticsStatOpType; readonly claimIssuer: Option>; } - /** @name PolymeshPrimitivesStatisticsStatOpType (260) */ + /** @name PolymeshPrimitivesStatisticsStatOpType (254) */ interface PolymeshPrimitivesStatisticsStatOpType extends Enum { readonly isCount: boolean; readonly isBalance: boolean; readonly type: 'Count' | 'Balance'; } - /** @name PolymeshPrimitivesStatisticsStatUpdate (264) */ + /** @name PolymeshPrimitivesStatisticsStatUpdate (258) */ interface PolymeshPrimitivesStatisticsStatUpdate extends Struct { readonly key2: PolymeshPrimitivesStatisticsStat2ndKey; readonly value: Option; } - /** @name PolymeshPrimitivesStatisticsStat2ndKey (265) */ + /** @name PolymeshPrimitivesStatisticsStat2ndKey (259) */ interface PolymeshPrimitivesStatisticsStat2ndKey extends Enum { readonly isNoClaimStat: boolean; readonly isClaim: boolean; @@ -1942,7 +1837,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NoClaimStat' | 'Claim'; } - /** @name PolymeshPrimitivesStatisticsStatClaim (266) */ + /** @name PolymeshPrimitivesStatisticsStatClaim (260) */ interface PolymeshPrimitivesStatisticsStatClaim extends Enum { readonly isAccredited: boolean; readonly asAccredited: bool; @@ -1953,7 +1848,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Accredited' | 'Affiliate' | 'Jurisdiction'; } - /** @name PolymeshPrimitivesTransferComplianceTransferCondition (270) */ + /** @name PolymeshPrimitivesTransferComplianceTransferCondition (264) */ interface PolymeshPrimitivesTransferComplianceTransferCondition extends Enum { readonly isMaxInvestorCount: boolean; readonly asMaxInvestorCount: u64; @@ -1966,31 +1861,72 @@ declare module '@polkadot/types/lookup' { readonly type: 'MaxInvestorCount' | 'MaxInvestorOwnership' | 'ClaimCount' | 'ClaimOwnership'; } - /** @name PolymeshPrimitivesTransferComplianceTransferConditionExemptKey (271) */ + /** @name PolymeshPrimitivesTransferComplianceTransferConditionExemptKey (265) */ interface PolymeshPrimitivesTransferComplianceTransferConditionExemptKey extends Struct { readonly assetId: PolymeshPrimitivesAssetAssetId; readonly op: PolymeshPrimitivesStatisticsStatOpType; readonly claimType: Option; } - /** @name PalletStoRawEvent (273) */ - interface PalletStoRawEvent extends Enum { + /** @name PalletStoEvent (267) */ + interface PalletStoEvent extends Enum { readonly isFundraiserCreated: boolean; - readonly asFundraiserCreated: ITuple<[PolymeshPrimitivesIdentityId, u64, Bytes, PalletStoFundraiser]>; + readonly asFundraiserCreated: { + readonly agentDid: PolymeshPrimitivesIdentityId; + readonly offeringAsset: PolymeshPrimitivesAssetAssetId; + readonly raisingAsset: PolymeshPrimitivesAssetAssetId; + readonly fundraiserId: u64; + readonly fundraiserName: Bytes; + readonly fundraiser: PalletStoFundraiser; + } & Struct; readonly isInvested: boolean; - readonly asInvested: ITuple<[PolymeshPrimitivesIdentityId, u64, PolymeshPrimitivesAssetAssetId, PolymeshPrimitivesAssetAssetId, u128, u128]>; + readonly asInvested: { + readonly investorDid: PolymeshPrimitivesIdentityId; + readonly offeringAsset: PolymeshPrimitivesAssetAssetId; + readonly fundraiserId: u64; + readonly fundingAsset: PalletStoFundingAsset; + readonly offeringAmount: u128; + readonly raiseAmount: u128; + } & Struct; readonly isFundraiserFrozen: boolean; - readonly asFundraiserFrozen: ITuple<[PolymeshPrimitivesIdentityId, u64]>; + readonly asFundraiserFrozen: { + readonly agentDid: PolymeshPrimitivesIdentityId; + readonly offeringAsset: PolymeshPrimitivesAssetAssetId; + readonly fundraiserId: u64; + } & Struct; readonly isFundraiserUnfrozen: boolean; - readonly asFundraiserUnfrozen: ITuple<[PolymeshPrimitivesIdentityId, u64]>; + readonly asFundraiserUnfrozen: { + readonly agentDid: PolymeshPrimitivesIdentityId; + readonly offeringAsset: PolymeshPrimitivesAssetAssetId; + readonly fundraiserId: u64; + } & Struct; readonly isFundraiserWindowModified: boolean; - readonly asFundraiserWindowModified: ITuple<[PolymeshPrimitivesEventOnly, u64, u64, Option, u64, Option]>; + readonly asFundraiserWindowModified: { + readonly agentDid: PolymeshPrimitivesEventOnly; + readonly offeringAsset: PolymeshPrimitivesAssetAssetId; + readonly fundraiserId: u64; + readonly oldStart: u64; + readonly oldEnd: Option; + readonly newStart: u64; + readonly newEnd: Option; + } & Struct; readonly isFundraiserClosed: boolean; - readonly asFundraiserClosed: ITuple<[PolymeshPrimitivesIdentityId, u64]>; - readonly type: 'FundraiserCreated' | 'Invested' | 'FundraiserFrozen' | 'FundraiserUnfrozen' | 'FundraiserWindowModified' | 'FundraiserClosed'; + readonly asFundraiserClosed: { + readonly agentDid: PolymeshPrimitivesIdentityId; + readonly offeringAsset: PolymeshPrimitivesAssetAssetId; + readonly fundraiserId: u64; + } & Struct; + readonly isFundraiserOffchainFundingEnabled: boolean; + readonly asFundraiserOffchainFundingEnabled: { + readonly agentDid: PolymeshPrimitivesIdentityId; + readonly offeringAsset: PolymeshPrimitivesAssetAssetId; + readonly fundraiserId: u64; + readonly ticker: PolymeshPrimitivesTicker; + } & Struct; + readonly type: 'FundraiserCreated' | 'Invested' | 'FundraiserFrozen' | 'FundraiserUnfrozen' | 'FundraiserWindowModified' | 'FundraiserClosed' | 'FundraiserOffchainFundingEnabled'; } - /** @name PalletStoFundraiser (276) */ + /** @name PalletStoFundraiser (270) */ interface PalletStoFundraiser extends Struct { readonly creator: PolymeshPrimitivesIdentityId; readonly offeringPortfolio: PolymeshPrimitivesIdentityIdPortfolioId; @@ -2005,14 +1941,14 @@ declare module '@polkadot/types/lookup' { readonly minimumInvestment: u128; } - /** @name PalletStoFundraiserTier (278) */ + /** @name PalletStoFundraiserTier (272) */ interface PalletStoFundraiserTier extends Struct { readonly total: u128; readonly price: u128; readonly remaining: u128; } - /** @name PalletStoFundraiserStatus (279) */ + /** @name PalletStoFundraiserStatus (273) */ interface PalletStoFundraiserStatus extends Enum { readonly isLive: boolean; readonly isFrozen: boolean; @@ -2021,8 +1957,17 @@ declare module '@polkadot/types/lookup' { readonly type: 'Live' | 'Frozen' | 'Closed' | 'ClosedEarly'; } - /** @name PalletTreasuryRawEvent (280) */ - interface PalletTreasuryRawEvent extends Enum { + /** @name PalletStoFundingAsset (274) */ + interface PalletStoFundingAsset extends Enum { + readonly isOnChain: boolean; + readonly asOnChain: PolymeshPrimitivesAssetAssetId; + readonly isOffChain: boolean; + readonly asOffChain: PolymeshPrimitivesTicker; + readonly type: 'OnChain' | 'OffChain'; + } + + /** @name PalletTreasuryEvent (275) */ + interface PalletTreasuryEvent extends Enum { readonly isTreasuryDisbursement: boolean; readonly asTreasuryDisbursement: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesIdentityId, AccountId32, u128]>; readonly isTreasuryDisbursementFailed: boolean; @@ -2032,7 +1977,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'TreasuryDisbursement' | 'TreasuryDisbursementFailed' | 'TreasuryReimbursement'; } - /** @name PalletUtilityEvent (281) */ + /** @name PalletUtilityEvent (276) */ interface PalletUtilityEvent extends Enum { readonly isBatchInterrupted: boolean; readonly asBatchInterrupted: { @@ -2056,24 +2001,18 @@ declare module '@polkadot/types/lookup' { readonly target: AccountId32; readonly result: Result; } & Struct; - readonly isBatchInterruptedOld: boolean; - readonly asBatchInterruptedOld: ITuple<[Vec, ITuple<[u32, SpRuntimeDispatchError]>]>; - readonly isBatchOptimisticFailed: boolean; - readonly asBatchOptimisticFailed: ITuple<[Vec, Vec>]>; - readonly isBatchCompletedOld: boolean; - readonly asBatchCompletedOld: Vec; - readonly type: 'BatchInterrupted' | 'BatchCompleted' | 'BatchCompletedWithErrors' | 'ItemCompleted' | 'ItemFailed' | 'DispatchedAs' | 'RelayedTx' | 'BatchInterruptedOld' | 'BatchOptimisticFailed' | 'BatchCompletedOld'; + readonly type: 'BatchInterrupted' | 'BatchCompleted' | 'BatchCompletedWithErrors' | 'ItemCompleted' | 'ItemFailed' | 'DispatchedAs' | 'RelayedTx'; } - /** @name PolymeshCommonUtilitiesBaseEvent (285) */ - interface PolymeshCommonUtilitiesBaseEvent extends Enum { + /** @name PalletBaseEvent (277) */ + interface PalletBaseEvent extends Enum { readonly isUnexpectedError: boolean; readonly asUnexpectedError: Option; readonly type: 'UnexpectedError'; } - /** @name PolymeshCommonUtilitiesExternalAgentsEvent (287) */ - interface PolymeshCommonUtilitiesExternalAgentsEvent extends Enum { + /** @name PalletExternalAgentsEvent (279) */ + interface PalletExternalAgentsEvent extends Enum { readonly isGroupCreated: boolean; readonly asGroupCreated: ITuple<[PolymeshPrimitivesEventOnly, PolymeshPrimitivesAssetAssetId, u32, PolymeshPrimitivesSecondaryKeyExtrinsicPermissions]>; readonly isGroupPermissionsUpdated: boolean; @@ -2087,8 +2026,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'GroupCreated' | 'GroupPermissionsUpdated' | 'AgentAdded' | 'AgentRemoved' | 'GroupChanged'; } - /** @name PolymeshCommonUtilitiesRelayerRawEvent (288) */ - interface PolymeshCommonUtilitiesRelayerRawEvent extends Enum { + /** @name PalletRelayerEvent (280) */ + interface PalletRelayerEvent extends Enum { readonly isAuthorizedPayingKey: boolean; readonly asAuthorizedPayingKey: ITuple<[PolymeshPrimitivesEventOnly, AccountId32, AccountId32, u128, u64]>; readonly isAcceptedPayingKey: boolean; @@ -2100,7 +2039,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AuthorizedPayingKey' | 'AcceptedPayingKey' | 'RemovedPayingKey' | 'UpdatedPolyxLimit'; } - /** @name PalletContractsEvent (289) */ + /** @name PalletContractsEvent (281) */ interface PalletContractsEvent extends Enum { readonly isInstantiated: boolean; readonly asInstantiated: { @@ -2133,7 +2072,7 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isCalled: boolean; readonly asCalled: { - readonly caller: AccountId32; + readonly caller: PalletContractsOrigin; readonly contract: AccountId32; } & Struct; readonly isDelegateCalled: boolean; @@ -2144,8 +2083,19 @@ declare module '@polkadot/types/lookup' { readonly type: 'Instantiated' | 'Terminated' | 'CodeStored' | 'ContractEmitted' | 'CodeRemoved' | 'ContractCodeUpdated' | 'Called' | 'DelegateCalled'; } - /** @name PolymeshContractsRawEvent (290) */ - interface PolymeshContractsRawEvent extends Enum { + /** @name PalletContractsOrigin (282) */ + interface PalletContractsOrigin extends Enum { + readonly isRoot: boolean; + readonly isSigned: boolean; + readonly asSigned: AccountId32; + readonly type: 'Root' | 'Signed'; + } + + /** @name PolymeshRuntimeDevelopRuntime (283) */ + type PolymeshRuntimeDevelopRuntime = Null; + + /** @name PolymeshContractsEvent (284) */ + interface PolymeshContractsEvent extends Enum { readonly isApiHashUpdated: boolean; readonly asApiHashUpdated: ITuple<[PolymeshContractsApi, PolymeshContractsChainVersion, H256]>; readonly isScRuntimeCall: boolean; @@ -2153,22 +2103,22 @@ declare module '@polkadot/types/lookup' { readonly type: 'ApiHashUpdated' | 'ScRuntimeCall'; } - /** @name PolymeshContractsApi (291) */ + /** @name PolymeshContractsApi (285) */ interface PolymeshContractsApi extends Struct { readonly desc: U8aFixed; readonly major: u32; } - /** @name PolymeshContractsChainVersion (292) */ + /** @name PolymeshContractsChainVersion (286) */ interface PolymeshContractsChainVersion extends Struct { readonly specVersion: u32; readonly txVersion: u32; } - /** @name PolymeshContractsChainExtensionExtrinsicId (293) */ + /** @name PolymeshContractsChainExtensionExtrinsicId (287) */ interface PolymeshContractsChainExtensionExtrinsicId extends ITuple<[u8, u8]> {} - /** @name PalletPreimageEvent (294) */ + /** @name PalletPreimageEvent (288) */ interface PalletPreimageEvent extends Enum { readonly isNoted: boolean; readonly asNoted: { @@ -2185,8 +2135,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noted' | 'Requested' | 'Cleared'; } - /** @name PolymeshCommonUtilitiesNftEvent (295) */ - interface PolymeshCommonUtilitiesNftEvent extends Enum { + /** @name PalletNftEvent (289) */ + interface PalletNftEvent extends Enum { readonly isNftCollectionCreated: boolean; readonly asNftCollectionCreated: ITuple<[PolymeshPrimitivesIdentityId, PolymeshPrimitivesAssetAssetId, u64]>; readonly isNftPortfolioUpdated: boolean; @@ -2194,7 +2144,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NftCollectionCreated' | 'NftPortfolioUpdated'; } - /** @name PalletElectionProviderMultiPhaseEvent (297) */ + /** @name PalletElectionProviderMultiPhaseEvent (291) */ interface PalletElectionProviderMultiPhaseEvent extends Enum { readonly isSolutionStored: boolean; readonly asSolutionStored: { @@ -2227,7 +2177,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SolutionStored' | 'ElectionFinalized' | 'ElectionFailed' | 'Rewarded' | 'Slashed' | 'PhaseTransitioned'; } - /** @name PalletElectionProviderMultiPhaseElectionCompute (298) */ + /** @name PalletElectionProviderMultiPhaseElectionCompute (292) */ interface PalletElectionProviderMultiPhaseElectionCompute extends Enum { readonly isOnChain: boolean; readonly isSigned: boolean; @@ -2237,14 +2187,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'OnChain' | 'Signed' | 'Unsigned' | 'Fallback' | 'Emergency'; } - /** @name SpNposElectionsElectionScore (299) */ + /** @name SpNposElectionsElectionScore (293) */ interface SpNposElectionsElectionScore extends Struct { readonly minimalStake: u128; readonly sumStake: u128; readonly sumStakeSquared: u128; } - /** @name PalletElectionProviderMultiPhasePhase (300) */ + /** @name PalletElectionProviderMultiPhasePhase (294) */ interface PalletElectionProviderMultiPhasePhase extends Enum { readonly isOff: boolean; readonly isSigned: boolean; @@ -2254,16 +2204,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Off' | 'Signed' | 'Unsigned' | 'Emergency'; } - /** @name PalletTestUtilsRawEvent (302) */ - interface PalletTestUtilsRawEvent extends Enum { - readonly isDidStatus: boolean; - readonly asDidStatus: ITuple<[PolymeshPrimitivesIdentityId, AccountId32]>; - readonly isCddStatus: boolean; - readonly asCddStatus: ITuple<[Option, AccountId32, bool]>; - readonly type: 'DidStatus' | 'CddStatus'; - } - - /** @name FrameSystemPhase (303) */ + /** @name FrameSystemPhase (296) */ interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; readonly asApplyExtrinsic: u32; @@ -2272,13 +2213,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } - /** @name FrameSystemLastRuntimeUpgradeInfo (306) */ + /** @name FrameSystemLastRuntimeUpgradeInfo (299) */ interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; readonly specName: Text; } - /** @name FrameSystemCall (308) */ + /** @name FrameSystemCall (301) */ interface FrameSystemCall extends Enum { readonly isRemark: boolean; readonly asRemark: { @@ -2316,21 +2257,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent'; } - /** @name FrameSystemLimitsBlockWeights (312) */ + /** @name FrameSystemLimitsBlockWeights (305) */ interface FrameSystemLimitsBlockWeights extends Struct { readonly baseBlock: SpWeightsWeightV2Weight; readonly maxBlock: SpWeightsWeightV2Weight; readonly perClass: FrameSupportDispatchPerDispatchClassWeightsPerClass; } - /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (313) */ + /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (306) */ interface FrameSupportDispatchPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; readonly operational: FrameSystemLimitsWeightsPerClass; readonly mandatory: FrameSystemLimitsWeightsPerClass; } - /** @name FrameSystemLimitsWeightsPerClass (314) */ + /** @name FrameSystemLimitsWeightsPerClass (307) */ interface FrameSystemLimitsWeightsPerClass extends Struct { readonly baseExtrinsic: SpWeightsWeightV2Weight; readonly maxExtrinsic: Option; @@ -2338,25 +2279,25 @@ declare module '@polkadot/types/lookup' { readonly reserved: Option; } - /** @name FrameSystemLimitsBlockLength (316) */ + /** @name FrameSystemLimitsBlockLength (309) */ interface FrameSystemLimitsBlockLength extends Struct { readonly max: FrameSupportDispatchPerDispatchClassU32; } - /** @name FrameSupportDispatchPerDispatchClassU32 (317) */ + /** @name FrameSupportDispatchPerDispatchClassU32 (310) */ interface FrameSupportDispatchPerDispatchClassU32 extends Struct { readonly normal: u32; readonly operational: u32; readonly mandatory: u32; } - /** @name SpWeightsRuntimeDbWeight (318) */ + /** @name SpWeightsRuntimeDbWeight (311) */ interface SpWeightsRuntimeDbWeight extends Struct { readonly read: u64; readonly write: u64; } - /** @name SpVersionRuntimeVersion (319) */ + /** @name SpVersionRuntimeVersion (312) */ interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; readonly implName: Text; @@ -2368,7 +2309,7 @@ declare module '@polkadot/types/lookup' { readonly stateVersion: u8; } - /** @name FrameSystemError (324) */ + /** @name FrameSystemError (317) */ interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; readonly isSpecVersionNeedsToIncrease: boolean; @@ -2379,10 +2320,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered'; } - /** @name SpConsensusBabeAppPublic (327) */ + /** @name SpConsensusBabeAppPublic (320) */ interface SpConsensusBabeAppPublic extends SpCoreSr25519Public {} - /** @name SpConsensusBabeDigestsNextConfigDescriptor (330) */ + /** @name SpConsensusBabeDigestsNextConfigDescriptor (323) */ interface SpConsensusBabeDigestsNextConfigDescriptor extends Enum { readonly isV1: boolean; readonly asV1: { @@ -2392,7 +2333,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'V1'; } - /** @name SpConsensusBabeAllowedSlots (332) */ + /** @name SpConsensusBabeAllowedSlots (325) */ interface SpConsensusBabeAllowedSlots extends Enum { readonly isPrimarySlots: boolean; readonly isPrimaryAndSecondaryPlainSlots: boolean; @@ -2400,7 +2341,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'PrimarySlots' | 'PrimaryAndSecondaryPlainSlots' | 'PrimaryAndSecondaryVRFSlots'; } - /** @name SpConsensusBabeDigestsPreDigest (336) */ + /** @name SpConsensusBabeDigestsPreDigest (329) */ interface SpConsensusBabeDigestsPreDigest extends Enum { readonly isPrimary: boolean; readonly asPrimary: SpConsensusBabeDigestsPrimaryPreDigest; @@ -2411,35 +2352,39 @@ declare module '@polkadot/types/lookup' { readonly type: 'Primary' | 'SecondaryPlain' | 'SecondaryVRF'; } - /** @name SpConsensusBabeDigestsPrimaryPreDigest (337) */ + /** @name SpConsensusBabeDigestsPrimaryPreDigest (330) */ interface SpConsensusBabeDigestsPrimaryPreDigest extends Struct { readonly authorityIndex: u32; readonly slot: u64; - readonly vrfOutput: U8aFixed; - readonly vrfProof: U8aFixed; + readonly vrfSignature: SpCoreSr25519VrfVrfSignature; } - /** @name SpConsensusBabeDigestsSecondaryPlainPreDigest (338) */ + /** @name SpCoreSr25519VrfVrfSignature (331) */ + interface SpCoreSr25519VrfVrfSignature extends Struct { + readonly output: U8aFixed; + readonly proof: U8aFixed; + } + + /** @name SpConsensusBabeDigestsSecondaryPlainPreDigest (332) */ interface SpConsensusBabeDigestsSecondaryPlainPreDigest extends Struct { readonly authorityIndex: u32; readonly slot: u64; } - /** @name SpConsensusBabeDigestsSecondaryVRFPreDigest (339) */ + /** @name SpConsensusBabeDigestsSecondaryVRFPreDigest (333) */ interface SpConsensusBabeDigestsSecondaryVRFPreDigest extends Struct { readonly authorityIndex: u32; readonly slot: u64; - readonly vrfOutput: U8aFixed; - readonly vrfProof: U8aFixed; + readonly vrfSignature: SpCoreSr25519VrfVrfSignature; } - /** @name SpConsensusBabeBabeEpochConfiguration (340) */ + /** @name SpConsensusBabeBabeEpochConfiguration (334) */ interface SpConsensusBabeBabeEpochConfiguration extends Struct { readonly c: ITuple<[u64, u64]>; readonly allowedSlots: SpConsensusBabeAllowedSlots; } - /** @name PalletBabeCall (344) */ + /** @name PalletBabeCall (338) */ interface PalletBabeCall extends Enum { readonly isReportEquivocation: boolean; readonly asReportEquivocation: { @@ -2458,7 +2403,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReportEquivocation' | 'ReportEquivocationUnsigned' | 'PlanConfigChange'; } - /** @name SpConsensusSlotsEquivocationProof (345) */ + /** @name SpConsensusSlotsEquivocationProof (339) */ interface SpConsensusSlotsEquivocationProof extends Struct { readonly offender: SpConsensusBabeAppPublic; readonly slot: u64; @@ -2466,7 +2411,7 @@ declare module '@polkadot/types/lookup' { readonly secondHeader: SpRuntimeHeader; } - /** @name SpRuntimeHeader (346) */ + /** @name SpRuntimeHeader (340) */ interface SpRuntimeHeader extends Struct { readonly parentHash: H256; readonly number: Compact; @@ -2475,17 +2420,14 @@ declare module '@polkadot/types/lookup' { readonly digest: SpRuntimeDigest; } - /** @name SpRuntimeBlakeTwo256 (347) */ - type SpRuntimeBlakeTwo256 = Null; - - /** @name SpSessionMembershipProof (348) */ + /** @name SpSessionMembershipProof (341) */ interface SpSessionMembershipProof extends Struct { readonly session: u32; readonly trieNodes: Vec; readonly validatorCount: u32; } - /** @name PalletBabeError (349) */ + /** @name PalletBabeError (342) */ interface PalletBabeError extends Enum { readonly isInvalidEquivocationProof: boolean; readonly isInvalidKeyOwnershipProof: boolean; @@ -2494,7 +2436,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidEquivocationProof' | 'InvalidKeyOwnershipProof' | 'DuplicateOffenceReport' | 'InvalidConfiguration'; } - /** @name PalletTimestampCall (350) */ + /** @name PalletTimestampCall (343) */ interface PalletTimestampCall extends Enum { readonly isSet: boolean; readonly asSet: { @@ -2503,7 +2445,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Set'; } - /** @name PalletIndicesCall (352) */ + /** @name PalletIndicesCall (345) */ interface PalletIndicesCall extends Enum { readonly isClaim: boolean; readonly asClaim: { @@ -2531,7 +2473,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Claim' | 'Transfer' | 'Free' | 'ForceTransfer' | 'Freeze'; } - /** @name PalletIndicesError (354) */ + /** @name PalletIndicesError (347) */ interface PalletIndicesError extends Enum { readonly isNotAssigned: boolean; readonly isNotOwner: boolean; @@ -2541,22 +2483,22 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotAssigned' | 'NotOwner' | 'InUse' | 'NotTransfer' | 'Permanent'; } - /** @name PalletBalancesBalanceLock (356) */ + /** @name PalletBalancesBalanceLock (349) */ interface PalletBalancesBalanceLock extends Struct { readonly id: U8aFixed; readonly amount: u128; - readonly reasons: PolymeshCommonUtilitiesBalancesReasons; + readonly reasons: PalletBalancesReasons; } - /** @name PolymeshCommonUtilitiesBalancesReasons (357) */ - interface PolymeshCommonUtilitiesBalancesReasons extends Enum { + /** @name PalletBalancesReasons (350) */ + interface PalletBalancesReasons extends Enum { readonly isFee: boolean; readonly isMisc: boolean; readonly isAll: boolean; readonly type: 'Fee' | 'Misc' | 'All'; } - /** @name PalletBalancesCall (358) */ + /** @name PalletBalancesCall (351) */ interface PalletBalancesCall extends Enum { readonly isTransfer: boolean; readonly asTransfer: { @@ -2592,7 +2534,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Transfer' | 'TransferWithMemo' | 'DepositBlockRewardReserveBalance' | 'SetBalance' | 'ForceTransfer' | 'BurnAccountBalance'; } - /** @name PalletBalancesError (359) */ + /** @name PalletBalancesError (352) */ interface PalletBalancesError extends Enum { readonly isLiquidityRestrictions: boolean; readonly isOverflow: boolean; @@ -2602,14 +2544,23 @@ declare module '@polkadot/types/lookup' { readonly type: 'LiquidityRestrictions' | 'Overflow' | 'InsufficientBalance' | 'ExistentialDeposit' | 'ReceiverCddMissing'; } - /** @name PalletTransactionPaymentReleases (361) */ + /** @name PalletTransactionPaymentReleases (354) */ interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; readonly isV2: boolean; readonly type: 'V1Ancient' | 'V2'; } - /** @name SpWeightsWeightToFeeCoefficient (363) */ + /** @name PalletTransactionPaymentCall (355) */ + interface PalletTransactionPaymentCall extends Enum { + readonly isSetDisableFees: boolean; + readonly asSetDisableFees: { + readonly value: bool; + } & Struct; + readonly type: 'SetDisableFees'; + } + + /** @name SpWeightsWeightToFeeCoefficient (357) */ interface SpWeightsWeightToFeeCoefficient extends Struct { readonly coeffInteger: u128; readonly coeffFrac: Perbill; @@ -2617,24 +2568,24 @@ declare module '@polkadot/types/lookup' { readonly degree: u8; } - /** @name PolymeshPrimitivesIdentityDidRecord (364) */ + /** @name PolymeshPrimitivesIdentityDidRecord (358) */ interface PolymeshPrimitivesIdentityDidRecord extends Struct { readonly primaryKey: Option; } - /** @name PalletIdentityClaim1stKey (366) */ + /** @name PalletIdentityClaim1stKey (360) */ interface PalletIdentityClaim1stKey extends Struct { readonly target: PolymeshPrimitivesIdentityId; readonly claimType: PolymeshPrimitivesIdentityClaimClaimType; } - /** @name PalletIdentityClaim2ndKey (367) */ + /** @name PalletIdentityClaim2ndKey (361) */ interface PalletIdentityClaim2ndKey extends Struct { readonly issuer: PolymeshPrimitivesIdentityId; readonly scope: Option; } - /** @name PolymeshPrimitivesSecondaryKeyKeyRecord (368) */ + /** @name PolymeshPrimitivesSecondaryKeyKeyRecord (362) */ interface PolymeshPrimitivesSecondaryKeyKeyRecord extends Enum { readonly isPrimaryKey: boolean; readonly asPrimaryKey: PolymeshPrimitivesIdentityId; @@ -2645,7 +2596,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'PrimaryKey' | 'SecondaryKey' | 'MultiSigSignerKey'; } - /** @name PolymeshPrimitivesSecondaryKeySignatory (371) */ + /** @name PolymeshPrimitivesSecondaryKeySignatory (365) */ interface PolymeshPrimitivesSecondaryKeySignatory extends Enum { readonly isIdentity: boolean; readonly asIdentity: PolymeshPrimitivesIdentityId; @@ -2654,7 +2605,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Identity' | 'Account'; } - /** @name PolymeshPrimitivesAuthorization (372) */ + /** @name PolymeshPrimitivesAuthorization (366) */ interface PolymeshPrimitivesAuthorization extends Struct { readonly authorizationData: PolymeshPrimitivesAuthorizationAuthorizationData; readonly authorizedBy: PolymeshPrimitivesIdentityId; @@ -2663,7 +2614,7 @@ declare module '@polkadot/types/lookup' { readonly count: u32; } - /** @name PalletIdentityCall (376) */ + /** @name PalletIdentityCall (370) */ interface PalletIdentityCall extends Enum { readonly isCddRegisterDid: boolean; readonly asCddRegisterDid: { @@ -2774,19 +2725,19 @@ declare module '@polkadot/types/lookup' { readonly type: 'CddRegisterDid' | 'InvalidateCddClaims' | 'AcceptPrimaryKey' | 'ChangeCddRequirementForMkRotation' | 'JoinIdentityAsKey' | 'LeaveIdentityAsKey' | 'AddClaim' | 'RevokeClaim' | 'FreezeSecondaryKeys' | 'UnfreezeSecondaryKeys' | 'AddAuthorization' | 'RemoveAuthorization' | 'GcAddCddClaim' | 'GcRevokeCddClaim' | 'RevokeClaimByIndex' | 'RotatePrimaryKeyToSecondary' | 'AddSecondaryKeysWithAuthorization' | 'SetSecondaryKeyPermissions' | 'RemoveSecondaryKeys' | 'RegisterCustomClaimType' | 'CddRegisterDidWithCdd' | 'CreateChildIdentity' | 'CreateChildIdentities' | 'UnlinkChildIdentity'; } - /** @name PolymeshCommonUtilitiesIdentitySecondaryKeyWithAuth (378) */ + /** @name PolymeshCommonUtilitiesIdentitySecondaryKeyWithAuth (372) */ interface PolymeshCommonUtilitiesIdentitySecondaryKeyWithAuth extends Struct { readonly secondaryKey: PolymeshPrimitivesSecondaryKey; readonly authSignature: H512; } - /** @name PolymeshCommonUtilitiesIdentityCreateChildIdentityWithAuth (381) */ + /** @name PolymeshCommonUtilitiesIdentityCreateChildIdentityWithAuth (375) */ interface PolymeshCommonUtilitiesIdentityCreateChildIdentityWithAuth extends Struct { readonly key: AccountId32; readonly authSignature: H512; } - /** @name PalletIdentityError (382) */ + /** @name PalletIdentityError (376) */ interface PalletIdentityError extends Enum { readonly isAlreadyLinked: boolean; readonly isMissingIdentity: boolean; @@ -2810,7 +2761,6 @@ declare module '@polkadot/types/lookup' { readonly isFailedToChargeFee: boolean; readonly isNotASigner: boolean; readonly isCannotDecodeSignerAccountId: boolean; - readonly isMultiSigHasBalance: boolean; readonly isAccountKeyIsBeingUsed: boolean; readonly isCustomScopeTooLong: boolean; readonly isCustomClaimTypeAlreadyExists: boolean; @@ -2822,17 +2772,22 @@ declare module '@polkadot/types/lookup' { readonly isDuplicateKey: boolean; readonly isExceptNotAllowedForExtrinsics: boolean; readonly isExceededNumberOfGivenAuths: boolean; - readonly type: 'AlreadyLinked' | 'MissingIdentity' | 'Unauthorized' | 'InvalidAccountKey' | 'UnAuthorizedCddProvider' | 'InvalidAuthorizationFromOwner' | 'InvalidAuthorizationFromCddProvider' | 'NotCddProviderAttestation' | 'AuthorizationsNotForSameDids' | 'DidMustAlreadyExist' | 'AuthorizationExpired' | 'TargetHasNoCdd' | 'AuthorizationHasBeenRevoked' | 'InvalidAuthorizationSignature' | 'KeyNotAllowed' | 'NotPrimaryKey' | 'DidDoesNotExist' | 'DidAlreadyExists' | 'SecondaryKeysContainPrimaryKey' | 'FailedToChargeFee' | 'NotASigner' | 'CannotDecodeSignerAccountId' | 'MultiSigHasBalance' | 'AccountKeyIsBeingUsed' | 'CustomScopeTooLong' | 'CustomClaimTypeAlreadyExists' | 'CustomClaimTypeDoesNotExist' | 'ClaimDoesNotExist' | 'IsChildIdentity' | 'NoParentIdentity' | 'NotParentOrChildIdentity' | 'DuplicateKey' | 'ExceptNotAllowedForExtrinsics' | 'ExceededNumberOfGivenAuths'; + readonly isBadAuthorizationType: boolean; + readonly isInvalidAuthorization: boolean; + readonly isUnauthorizedCallerFrozenDid: boolean; + readonly isUnauthorizedCallerDidMissingCdd: boolean; + readonly isUnauthorizedCallerMissingPermissions: boolean; + readonly type: 'AlreadyLinked' | 'MissingIdentity' | 'Unauthorized' | 'InvalidAccountKey' | 'UnAuthorizedCddProvider' | 'InvalidAuthorizationFromOwner' | 'InvalidAuthorizationFromCddProvider' | 'NotCddProviderAttestation' | 'AuthorizationsNotForSameDids' | 'DidMustAlreadyExist' | 'AuthorizationExpired' | 'TargetHasNoCdd' | 'AuthorizationHasBeenRevoked' | 'InvalidAuthorizationSignature' | 'KeyNotAllowed' | 'NotPrimaryKey' | 'DidDoesNotExist' | 'DidAlreadyExists' | 'SecondaryKeysContainPrimaryKey' | 'FailedToChargeFee' | 'NotASigner' | 'CannotDecodeSignerAccountId' | 'AccountKeyIsBeingUsed' | 'CustomScopeTooLong' | 'CustomClaimTypeAlreadyExists' | 'CustomClaimTypeDoesNotExist' | 'ClaimDoesNotExist' | 'IsChildIdentity' | 'NoParentIdentity' | 'NotParentOrChildIdentity' | 'DuplicateKey' | 'ExceptNotAllowedForExtrinsics' | 'ExceededNumberOfGivenAuths' | 'BadAuthorizationType' | 'InvalidAuthorization' | 'UnauthorizedCallerFrozenDid' | 'UnauthorizedCallerDidMissingCdd' | 'UnauthorizedCallerMissingPermissions'; } - /** @name PolymeshCommonUtilitiesGroupInactiveMember (384) */ - interface PolymeshCommonUtilitiesGroupInactiveMember extends Struct { + /** @name PolymeshPrimitivesGroupInactiveMember (378) */ + interface PolymeshPrimitivesGroupInactiveMember extends Struct { readonly id: PolymeshPrimitivesIdentityId; readonly deactivatedAt: u64; readonly expiry: Option; } - /** @name PalletGroupCall (385) */ + /** @name PalletGroupCall (379) */ interface PalletGroupCall extends Enum { readonly isSetActiveMembersLimit: boolean; readonly asSetActiveMembersLimit: { @@ -2865,7 +2820,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetActiveMembersLimit' | 'DisableMember' | 'AddMember' | 'RemoveMember' | 'SwapMember' | 'ResetMembers' | 'AbdicateMembership'; } - /** @name PalletGroupError (386) */ + /** @name PalletGroupError (380) */ interface PalletGroupError extends Enum { readonly isOnlyPrimaryKeyAllowed: boolean; readonly isDuplicateMember: boolean; @@ -2876,7 +2831,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'OnlyPrimaryKeyAllowed' | 'DuplicateMember' | 'NoSuchMember' | 'LastMemberCannotQuit' | 'ActiveMembersLimitExceeded' | 'ActiveMembersLimitOverflow'; } - /** @name PalletCommitteeCall (388) */ + /** @name PalletCommitteeCall (382) */ interface PalletCommitteeCall extends Enum { readonly isSetVoteThreshold: boolean; readonly asSetVoteThreshold: { @@ -2889,7 +2844,7 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isSetExpiresAfter: boolean; readonly asSetExpiresAfter: { - readonly expiry: PolymeshCommonUtilitiesMaybeBlock; + readonly expiry: PolymeshPrimitivesMaybeBlock; } & Struct; readonly isVoteOrPropose: boolean; readonly asVoteOrPropose: { @@ -2905,7 +2860,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetVoteThreshold' | 'SetReleaseCoordinator' | 'SetExpiresAfter' | 'VoteOrPropose' | 'Vote'; } - /** @name PalletMultisigCall (394) */ + /** @name PalletMultisigCall (388) */ interface PalletMultisigCall extends Enum { readonly isCreateMultisig: boolean; readonly asCreateMultisig: { @@ -2923,7 +2878,7 @@ declare module '@polkadot/types/lookup' { readonly asApprove: { readonly multisig: AccountId32; readonly proposalId: u64; - readonly maxWeight: SpWeightsWeightV2Weight; + readonly maxWeight: Option; } & Struct; readonly isReject: boolean; readonly asReject: { @@ -2983,14 +2938,51 @@ declare module '@polkadot/types/lookup' { readonly asJoinIdentity: { readonly authId: u64; } & Struct; - readonly type: 'CreateMultisig' | 'CreateProposal' | 'Approve' | 'Reject' | 'AcceptMultisigSigner' | 'AddMultisigSigners' | 'RemoveMultisigSigners' | 'AddMultisigSignersViaAdmin' | 'RemoveMultisigSignersViaAdmin' | 'ChangeSigsRequired' | 'ChangeSigsRequiredViaAdmin' | 'AddAdmin' | 'RemoveAdminViaAdmin' | 'RemovePayer' | 'RemovePayerViaPayer' | 'ApproveJoinIdentity' | 'JoinIdentity'; + readonly isRemoveAdmin: boolean; + readonly type: 'CreateMultisig' | 'CreateProposal' | 'Approve' | 'Reject' | 'AcceptMultisigSigner' | 'AddMultisigSigners' | 'RemoveMultisigSigners' | 'AddMultisigSignersViaAdmin' | 'RemoveMultisigSignersViaAdmin' | 'ChangeSigsRequired' | 'ChangeSigsRequiredViaAdmin' | 'AddAdmin' | 'RemoveAdminViaAdmin' | 'RemovePayer' | 'RemovePayerViaPayer' | 'ApproveJoinIdentity' | 'JoinIdentity' | 'RemoveAdmin'; } - /** @name PalletStakingPalletCall (396) */ + /** @name PalletValidatorsCall (390) */ + interface PalletValidatorsCall extends Enum { + readonly isAddPermissionedValidator: boolean; + readonly asAddPermissionedValidator: { + readonly identity: PolymeshPrimitivesIdentityId; + readonly intendedCount: Option; + } & Struct; + readonly isRemovePermissionedValidator: boolean; + readonly asRemovePermissionedValidator: { + readonly identity: PolymeshPrimitivesIdentityId; + } & Struct; + readonly isPayoutStakersBySystem: boolean; + readonly asPayoutStakersBySystem: { + readonly validatorStash: AccountId32; + readonly era: u32; + } & Struct; + readonly isChangeSlashingAllowedFor: boolean; + readonly asChangeSlashingAllowedFor: { + readonly slashingSwitch: PalletValidatorsSlashingSwitch; + } & Struct; + readonly isUpdatePermissionedValidatorIntendedCount: boolean; + readonly asUpdatePermissionedValidatorIntendedCount: { + readonly identity: PolymeshPrimitivesIdentityId; + readonly newIntendedCount: u32; + } & Struct; + readonly isChillFromGovernance: boolean; + readonly asChillFromGovernance: { + readonly identity: PolymeshPrimitivesIdentityId; + readonly stashKeys: Vec; + } & Struct; + readonly isSetCommissionCap: boolean; + readonly asSetCommissionCap: { + readonly newCap: Perbill; + } & Struct; + readonly type: 'AddPermissionedValidator' | 'RemovePermissionedValidator' | 'PayoutStakersBySystem' | 'ChangeSlashingAllowedFor' | 'UpdatePermissionedValidatorIntendedCount' | 'ChillFromGovernance' | 'SetCommissionCap'; + } + + /** @name PalletStakingPalletCall (392) */ interface PalletStakingPalletCall extends Enum { readonly isBond: boolean; readonly asBond: { - readonly controller: MultiAddress; readonly value: Compact; readonly payee: PalletStakingRewardDestination; } & Struct; @@ -3020,9 +3012,6 @@ declare module '@polkadot/types/lookup' { readonly payee: PalletStakingRewardDestination; } & Struct; readonly isSetController: boolean; - readonly asSetController: { - readonly controller: MultiAddress; - } & Struct; readonly isSetValidatorCount: boolean; readonly asSetValidatorCount: { readonly new_: Compact; @@ -3091,46 +3080,10 @@ declare module '@polkadot/types/lookup' { readonly asSetMinCommission: { readonly new_: Perbill; } & Struct; - readonly isAddPermissionedValidator: boolean; - readonly asAddPermissionedValidator: { - readonly identity: PolymeshPrimitivesIdentityId; - readonly intendedCount: Option; - } & Struct; - readonly isRemovePermissionedValidator: boolean; - readonly asRemovePermissionedValidator: { - readonly identity: PolymeshPrimitivesIdentityId; - } & Struct; - readonly isValidateCddExpiryNominators: boolean; - readonly asValidateCddExpiryNominators: { - readonly targets: Vec; - } & Struct; - readonly isPayoutStakersBySystem: boolean; - readonly asPayoutStakersBySystem: { - readonly validatorStash: AccountId32; - readonly era: u32; - } & Struct; - readonly isChangeSlashingAllowedFor: boolean; - readonly asChangeSlashingAllowedFor: { - readonly slashingSwitch: PalletStakingSlashingSwitch; - } & Struct; - readonly isUpdatePermissionedValidatorIntendedCount: boolean; - readonly asUpdatePermissionedValidatorIntendedCount: { - readonly identity: PolymeshPrimitivesIdentityId; - readonly newIntendedCount: u32; - } & Struct; - readonly isChillFromGovernance: boolean; - readonly asChillFromGovernance: { - readonly identity: PolymeshPrimitivesIdentityId; - readonly stashKeys: Vec; - } & Struct; - readonly isSetCommissionCap: boolean; - readonly asSetCommissionCap: { - readonly newCap: Perbill; - } & Struct; - readonly type: 'Bond' | 'BondExtra' | 'Unbond' | 'WithdrawUnbonded' | 'Validate' | 'Nominate' | 'Chill' | 'SetPayee' | 'SetController' | 'SetValidatorCount' | 'IncreaseValidatorCount' | 'ScaleValidatorCount' | 'ForceNoEras' | 'ForceNewEra' | 'SetInvulnerables' | 'ForceUnstake' | 'ForceNewEraAlways' | 'CancelDeferredSlash' | 'PayoutStakers' | 'Rebond' | 'ReapStash' | 'Kick' | 'SetStakingConfigs' | 'ChillOther' | 'ForceApplyMinCommission' | 'SetMinCommission' | 'AddPermissionedValidator' | 'RemovePermissionedValidator' | 'ValidateCddExpiryNominators' | 'PayoutStakersBySystem' | 'ChangeSlashingAllowedFor' | 'UpdatePermissionedValidatorIntendedCount' | 'ChillFromGovernance' | 'SetCommissionCap'; + readonly type: 'Bond' | 'BondExtra' | 'Unbond' | 'WithdrawUnbonded' | 'Validate' | 'Nominate' | 'Chill' | 'SetPayee' | 'SetController' | 'SetValidatorCount' | 'IncreaseValidatorCount' | 'ScaleValidatorCount' | 'ForceNoEras' | 'ForceNewEra' | 'SetInvulnerables' | 'ForceUnstake' | 'ForceNewEraAlways' | 'CancelDeferredSlash' | 'PayoutStakers' | 'Rebond' | 'ReapStash' | 'Kick' | 'SetStakingConfigs' | 'ChillOther' | 'ForceApplyMinCommission' | 'SetMinCommission'; } - /** @name PalletStakingRewardDestination (397) */ + /** @name PalletStakingRewardDestination (393) */ interface PalletStakingRewardDestination extends Enum { readonly isStaked: boolean; readonly isStash: boolean; @@ -3141,7 +3094,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Staked' | 'Stash' | 'Controller' | 'Account' | 'None'; } - /** @name PalletStakingPalletConfigOpU128 (400) */ + /** @name PalletStakingPalletConfigOpU128 (397) */ interface PalletStakingPalletConfigOpU128 extends Enum { readonly isNoop: boolean; readonly isSet: boolean; @@ -3150,7 +3103,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletStakingPalletConfigOpU32 (401) */ + /** @name PalletStakingPalletConfigOpU32 (398) */ interface PalletStakingPalletConfigOpU32 extends Enum { readonly isNoop: boolean; readonly isSet: boolean; @@ -3159,7 +3112,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletStakingPalletConfigOpPercent (402) */ + /** @name PalletStakingPalletConfigOpPercent (399) */ interface PalletStakingPalletConfigOpPercent extends Enum { readonly isNoop: boolean; readonly isSet: boolean; @@ -3168,7 +3121,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletStakingPalletConfigOpPerbill (403) */ + /** @name PalletStakingPalletConfigOpPerbill (400) */ interface PalletStakingPalletConfigOpPerbill extends Enum { readonly isNoop: boolean; readonly isSet: boolean; @@ -3177,7 +3130,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletSessionCall (405) */ + /** @name PalletSessionCall (401) */ interface PalletSessionCall extends Enum { readonly isSetKeys: boolean; readonly asSetKeys: { @@ -3188,7 +3141,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetKeys' | 'PurgeKeys'; } - /** @name PolymeshRuntimeDevelopRuntimeSessionKeys (406) */ + /** @name PolymeshRuntimeDevelopRuntimeSessionKeys (402) */ interface PolymeshRuntimeDevelopRuntimeSessionKeys extends Struct { readonly grandpa: SpConsensusGrandpaAppPublic; readonly babe: SpConsensusBabeAppPublic; @@ -3196,10 +3149,10 @@ declare module '@polkadot/types/lookup' { readonly authorityDiscovery: SpAuthorityDiscoveryAppPublic; } - /** @name SpAuthorityDiscoveryAppPublic (407) */ + /** @name SpAuthorityDiscoveryAppPublic (403) */ interface SpAuthorityDiscoveryAppPublic extends SpCoreSr25519Public {} - /** @name PalletGrandpaCall (408) */ + /** @name PalletGrandpaCall (404) */ interface PalletGrandpaCall extends Enum { readonly isReportEquivocation: boolean; readonly asReportEquivocation: { @@ -3219,13 +3172,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReportEquivocation' | 'ReportEquivocationUnsigned' | 'NoteStalled'; } - /** @name SpConsensusGrandpaEquivocationProof (409) */ + /** @name SpConsensusGrandpaEquivocationProof (405) */ interface SpConsensusGrandpaEquivocationProof extends Struct { readonly setId: u64; readonly equivocation: SpConsensusGrandpaEquivocation; } - /** @name SpConsensusGrandpaEquivocation (410) */ + /** @name SpConsensusGrandpaEquivocation (406) */ interface SpConsensusGrandpaEquivocation extends Enum { readonly isPrevote: boolean; readonly asPrevote: FinalityGrandpaEquivocationPrevote; @@ -3234,7 +3187,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Prevote' | 'Precommit'; } - /** @name FinalityGrandpaEquivocationPrevote (411) */ + /** @name FinalityGrandpaEquivocationPrevote (407) */ interface FinalityGrandpaEquivocationPrevote extends Struct { readonly roundNumber: u64; readonly identity: SpConsensusGrandpaAppPublic; @@ -3242,19 +3195,19 @@ declare module '@polkadot/types/lookup' { readonly second: ITuple<[FinalityGrandpaPrevote, SpConsensusGrandpaAppSignature]>; } - /** @name FinalityGrandpaPrevote (412) */ + /** @name FinalityGrandpaPrevote (408) */ interface FinalityGrandpaPrevote extends Struct { readonly targetHash: H256; readonly targetNumber: u32; } - /** @name SpConsensusGrandpaAppSignature (413) */ + /** @name SpConsensusGrandpaAppSignature (409) */ interface SpConsensusGrandpaAppSignature extends SpCoreEd25519Signature {} - /** @name SpCoreEd25519Signature (414) */ + /** @name SpCoreEd25519Signature (410) */ interface SpCoreEd25519Signature extends U8aFixed {} - /** @name FinalityGrandpaEquivocationPrecommit (416) */ + /** @name FinalityGrandpaEquivocationPrecommit (412) */ interface FinalityGrandpaEquivocationPrecommit extends Struct { readonly roundNumber: u64; readonly identity: SpConsensusGrandpaAppPublic; @@ -3262,13 +3215,13 @@ declare module '@polkadot/types/lookup' { readonly second: ITuple<[FinalityGrandpaPrecommit, SpConsensusGrandpaAppSignature]>; } - /** @name FinalityGrandpaPrecommit (417) */ + /** @name FinalityGrandpaPrecommit (413) */ interface FinalityGrandpaPrecommit extends Struct { readonly targetHash: H256; readonly targetNumber: u32; } - /** @name PalletImOnlineCall (419) */ + /** @name PalletImOnlineCall (415) */ interface PalletImOnlineCall extends Enum { readonly isHeartbeat: boolean; readonly asHeartbeat: { @@ -3278,28 +3231,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'Heartbeat'; } - /** @name PalletImOnlineHeartbeat (420) */ + /** @name PalletImOnlineHeartbeat (416) */ interface PalletImOnlineHeartbeat extends Struct { readonly blockNumber: u32; - readonly networkState: SpCoreOffchainOpaqueNetworkState; readonly sessionIndex: u32; readonly authorityIndex: u32; readonly validatorsLen: u32; } - /** @name SpCoreOffchainOpaqueNetworkState (421) */ - interface SpCoreOffchainOpaqueNetworkState extends Struct { - readonly peerId: OpaquePeerId; - readonly externalAddresses: Vec; - } - - /** @name PalletImOnlineSr25519AppSr25519Signature (425) */ + /** @name PalletImOnlineSr25519AppSr25519Signature (417) */ interface PalletImOnlineSr25519AppSr25519Signature extends SpCoreSr25519Signature {} - /** @name SpCoreSr25519Signature (426) */ + /** @name SpCoreSr25519Signature (418) */ interface SpCoreSr25519Signature extends U8aFixed {} - /** @name PalletSudoCall (427) */ + /** @name PalletSudoCall (419) */ interface PalletSudoCall extends Enum { readonly isSudo: boolean; readonly asSudo: { @@ -3322,7 +3268,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs'; } - /** @name PalletAssetCall (428) */ + /** @name PalletAssetCall (420) */ interface PalletAssetCall extends Enum { readonly isRegisterUniqueTicker: boolean; readonly asRegisterUniqueTicker: { @@ -3386,7 +3332,7 @@ declare module '@polkadot/types/lookup' { readonly isSetFundingRound: boolean; readonly asSetFundingRound: { readonly assetId: PolymeshPrimitivesAssetAssetId; - readonly foundingRoundName: Bytes; + readonly fundingRoundName: Bytes; } & Struct; readonly isUpdateIdentifiers: boolean; readonly asUpdateIdentifiers: { @@ -3489,11 +3435,21 @@ declare module '@polkadot/types/lookup' { readonly ticker: PolymeshPrimitivesTicker; readonly assetId: PolymeshPrimitivesAssetAssetId; } & Struct; - readonly type: 'RegisterUniqueTicker' | 'AcceptTickerTransfer' | 'AcceptAssetOwnershipTransfer' | 'CreateAsset' | 'Freeze' | 'Unfreeze' | 'RenameAsset' | 'Issue' | 'Redeem' | 'MakeDivisible' | 'AddDocuments' | 'RemoveDocuments' | 'SetFundingRound' | 'UpdateIdentifiers' | 'ControllerTransfer' | 'RegisterCustomAssetType' | 'CreateAssetWithCustomType' | 'SetAssetMetadata' | 'SetAssetMetadataDetails' | 'RegisterAndSetLocalAssetMetadata' | 'RegisterAssetMetadataLocalType' | 'RegisterAssetMetadataGlobalType' | 'UpdateAssetType' | 'RemoveLocalMetadataKey' | 'RemoveMetadataValue' | 'ExemptAssetAffirmation' | 'RemoveAssetAffirmationExemption' | 'PreApproveAsset' | 'RemoveAssetPreApproval' | 'AddMandatoryMediators' | 'RemoveMandatoryMediators' | 'LinkTickerToAssetId'; + readonly isUnlinkTickerFromAssetId: boolean; + readonly asUnlinkTickerFromAssetId: { + readonly ticker: PolymeshPrimitivesTicker; + readonly assetId: PolymeshPrimitivesAssetAssetId; + } & Struct; + readonly isUpdateGlobalMetadataSpec: boolean; + readonly asUpdateGlobalMetadataSpec: { + readonly assetMetadataName: Bytes; + readonly assetMetadataSpec: PolymeshPrimitivesAssetMetadataAssetMetadataSpec; + } & Struct; + readonly type: 'RegisterUniqueTicker' | 'AcceptTickerTransfer' | 'AcceptAssetOwnershipTransfer' | 'CreateAsset' | 'Freeze' | 'Unfreeze' | 'RenameAsset' | 'Issue' | 'Redeem' | 'MakeDivisible' | 'AddDocuments' | 'RemoveDocuments' | 'SetFundingRound' | 'UpdateIdentifiers' | 'ControllerTransfer' | 'RegisterCustomAssetType' | 'CreateAssetWithCustomType' | 'SetAssetMetadata' | 'SetAssetMetadataDetails' | 'RegisterAndSetLocalAssetMetadata' | 'RegisterAssetMetadataLocalType' | 'RegisterAssetMetadataGlobalType' | 'UpdateAssetType' | 'RemoveLocalMetadataKey' | 'RemoveMetadataValue' | 'ExemptAssetAffirmation' | 'RemoveAssetAffirmationExemption' | 'PreApproveAsset' | 'RemoveAssetPreApproval' | 'AddMandatoryMediators' | 'RemoveMandatoryMediators' | 'LinkTickerToAssetId' | 'UnlinkTickerFromAssetId' | 'UpdateGlobalMetadataSpec'; } - /** @name PalletCorporateActionsDistributionCall (431) */ - interface PalletCorporateActionsDistributionCall extends Enum { + /** @name PalletCorporateActionsDistributionPalletCall (423) */ + interface PalletCorporateActionsDistributionPalletCall extends Enum { readonly isDistribute: boolean; readonly asDistribute: { readonly caId: PalletCorporateActionsCaId; @@ -3524,8 +3480,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Distribute' | 'Claim' | 'PushBenefit' | 'Reclaim' | 'RemoveDistribution'; } - /** @name PalletAssetCheckpointCall (433) */ - interface PalletAssetCheckpointCall extends Enum { + /** @name PalletAssetCheckpointPalletCall (425) */ + interface PalletAssetCheckpointPalletCall extends Enum { readonly isCreateCheckpoint: boolean; readonly asCreateCheckpoint: { readonly assetId: PolymeshPrimitivesAssetAssetId; @@ -3547,7 +3503,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CreateCheckpoint' | 'SetSchedulesMaxComplexity' | 'CreateSchedule' | 'RemoveSchedule'; } - /** @name PalletComplianceManagerCall (434) */ + /** @name PalletComplianceManagerCall (426) */ interface PalletComplianceManagerCall extends Enum { readonly isAddComplianceRequirement: boolean; readonly asAddComplianceRequirement: { @@ -3595,7 +3551,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AddComplianceRequirement' | 'RemoveComplianceRequirement' | 'ReplaceAssetCompliance' | 'ResetAssetCompliance' | 'PauseAssetCompliance' | 'ResumeAssetCompliance' | 'AddDefaultTrustedClaimIssuer' | 'RemoveDefaultTrustedClaimIssuer' | 'ChangeComplianceRequirement'; } - /** @name PalletCorporateActionsCall (435) */ + /** @name PalletCorporateActionsCall (427) */ interface PalletCorporateActionsCall extends Enum { readonly isSetMaxDetailsLength: boolean; readonly asSetMaxDetailsLength: { @@ -3652,10 +3608,17 @@ declare module '@polkadot/types/lookup' { readonly paymentAt: u64; readonly expiresAt: Option; } & Struct; - readonly type: 'SetMaxDetailsLength' | 'SetDefaultTargets' | 'SetDefaultWithholdingTax' | 'SetDidWithholdingTax' | 'InitiateCorporateAction' | 'LinkCaDoc' | 'RemoveCa' | 'ChangeRecordDate' | 'InitiateCorporateActionAndDistribute'; + readonly isInitiateCorporateActionAndBallot: boolean; + readonly asInitiateCorporateActionAndBallot: { + readonly caArgs: PalletCorporateActionsInitiateCorporateActionArgs; + readonly ballotTimeRange: PalletCorporateActionsBallotBallotTimeRange; + readonly ballotMeta: PalletCorporateActionsBallotBallotMeta; + readonly rcv: bool; + } & Struct; + readonly type: 'SetMaxDetailsLength' | 'SetDefaultTargets' | 'SetDefaultWithholdingTax' | 'SetDidWithholdingTax' | 'InitiateCorporateAction' | 'LinkCaDoc' | 'RemoveCa' | 'ChangeRecordDate' | 'InitiateCorporateActionAndDistribute' | 'InitiateCorporateActionAndBallot'; } - /** @name PalletCorporateActionsRecordDateSpec (437) */ + /** @name PalletCorporateActionsRecordDateSpec (429) */ interface PalletCorporateActionsRecordDateSpec extends Enum { readonly isScheduled: boolean; readonly asScheduled: u64; @@ -3666,7 +3629,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Scheduled' | 'ExistingSchedule' | 'Existing'; } - /** @name PalletCorporateActionsInitiateCorporateActionArgs (440) */ + /** @name PalletCorporateActionsInitiateCorporateActionArgs (432) */ interface PalletCorporateActionsInitiateCorporateActionArgs extends Struct { readonly assetId: PolymeshPrimitivesAssetAssetId; readonly kind: PalletCorporateActionsCaKind; @@ -3678,8 +3641,8 @@ declare module '@polkadot/types/lookup' { readonly withholdingTax: Option>>; } - /** @name PalletCorporateActionsBallotCall (441) */ - interface PalletCorporateActionsBallotCall extends Enum { + /** @name PalletCorporateActionsBallotPalletCall (433) */ + interface PalletCorporateActionsBallotPalletCall extends Enum { readonly isAttachBallot: boolean; readonly asAttachBallot: { readonly caId: PalletCorporateActionsCaId; @@ -3714,7 +3677,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AttachBallot' | 'Vote' | 'ChangeEnd' | 'ChangeMeta' | 'ChangeRcv' | 'RemoveBallot'; } - /** @name PalletPipsCall (442) */ + /** @name PalletPipsCall (434) */ interface PalletPipsCall extends Enum { readonly isSetPruneHistoricalPips: boolean; readonly asSetPruneHistoricalPips: { @@ -3730,7 +3693,7 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isSetPendingPipExpiry: boolean; readonly asSetPendingPipExpiry: { - readonly expiry: PolymeshCommonUtilitiesMaybeBlock; + readonly expiry: PolymeshPrimitivesMaybeBlock; } & Struct; readonly isSetMaxPipSkipCount: boolean; readonly asSetMaxPipSkipCount: { @@ -3788,7 +3751,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetPruneHistoricalPips' | 'SetMinProposalDeposit' | 'SetDefaultEnactmentPeriod' | 'SetPendingPipExpiry' | 'SetMaxPipSkipCount' | 'SetActivePipLimit' | 'Propose' | 'Vote' | 'ApproveCommitteeProposal' | 'RejectProposal' | 'PruneProposal' | 'RescheduleExecution' | 'ClearSnapshot' | 'Snapshot' | 'EnactSnapshotResults' | 'ExecuteScheduledPip' | 'ExpireScheduledPip'; } - /** @name PalletPipsSnapshotResult (445) */ + /** @name PalletPipsSnapshotResult (437) */ interface PalletPipsSnapshotResult extends Enum { readonly isApprove: boolean; readonly isReject: boolean; @@ -3796,7 +3759,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Approve' | 'Reject' | 'Skip'; } - /** @name PalletPortfolioCall (446) */ + /** @name PalletPortfolioCall (438) */ interface PalletPortfolioCall extends Enum { readonly isCreatePortfolio: boolean; readonly asCreatePortfolio: { @@ -3851,13 +3814,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'CreatePortfolio' | 'DeletePortfolio' | 'RenamePortfolio' | 'QuitPortfolioCustody' | 'AcceptPortfolioCustody' | 'MovePortfolioFunds' | 'PreApprovePortfolio' | 'RemovePortfolioPreApproval' | 'AllowIdentityToCreatePortfolios' | 'RevokeCreatePortfoliosPermission' | 'CreateCustodyPortfolio'; } - /** @name PolymeshPrimitivesPortfolioFund (448) */ + /** @name PolymeshPrimitivesPortfolioFund (440) */ interface PolymeshPrimitivesPortfolioFund extends Struct { readonly description: PolymeshPrimitivesPortfolioFundDescription; readonly memo: Option; } - /** @name PalletProtocolFeeCall (449) */ + /** @name PalletProtocolFeeCall (441) */ interface PalletProtocolFeeCall extends Enum { readonly isChangeCoefficient: boolean; readonly asChangeCoefficient: { @@ -3871,7 +3834,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ChangeCoefficient' | 'ChangeBaseFee'; } - /** @name PolymeshCommonUtilitiesProtocolFeeProtocolOp (450) */ + /** @name PolymeshCommonUtilitiesProtocolFeeProtocolOp (442) */ interface PolymeshCommonUtilitiesProtocolFeeProtocolOp extends Enum { readonly isAssetRegisterTicker: boolean; readonly isAssetIssue: boolean; @@ -3892,7 +3855,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AssetRegisterTicker' | 'AssetIssue' | 'AssetAddDocuments' | 'AssetCreateAsset' | 'CheckpointCreateSchedule' | 'ComplianceManagerAddComplianceRequirement' | 'IdentityCddRegisterDid' | 'IdentityAddClaim' | 'IdentityAddSecondaryKeysWithAuthorization' | 'PipsPropose' | 'ContractsPutCode' | 'CorporateBallotAttachBallot' | 'CapitalDistributionDistribute' | 'NftCreateCollection' | 'NftMint' | 'IdentityCreateChildIdentity'; } - /** @name PalletSchedulerCall (451) */ + /** @name PalletSchedulerCall (443) */ interface PalletSchedulerCall extends Enum { readonly isSchedule: boolean; readonly asSchedule: { @@ -3936,7 +3899,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Schedule' | 'Cancel' | 'ScheduleNamed' | 'CancelNamed' | 'ScheduleAfter' | 'ScheduleNamedAfter'; } - /** @name PalletSettlementCall (453) */ + /** @name PalletSettlementCall (445) */ interface PalletSettlementCall extends Enum { readonly isCreateVenue: boolean; readonly asCreateVenue: { @@ -3958,7 +3921,7 @@ declare module '@polkadot/types/lookup' { readonly asAffirmWithReceipts: { readonly id: u64; readonly receiptDetails: Vec; - readonly portfolios: Vec; + readonly portfolios: BTreeSet; } & Struct; readonly isSetVenueFiltering: boolean; readonly asSetVenueFiltering: { @@ -4006,18 +3969,18 @@ declare module '@polkadot/types/lookup' { readonly tradeDate: Option; readonly valueDate: Option; readonly legs: Vec; - readonly portfolios: Vec; + readonly portfolios: BTreeSet; readonly instructionMemo: Option; } & Struct; readonly isAffirmInstruction: boolean; readonly asAffirmInstruction: { readonly id: u64; - readonly portfolios: Vec; + readonly portfolios: BTreeSet; } & Struct; readonly isWithdrawAffirmation: boolean; readonly asWithdrawAffirmation: { readonly id: u64; - readonly portfolios: Vec; + readonly portfolios: BTreeSet; } & Struct; readonly isRejectInstruction: boolean; readonly asRejectInstruction: { @@ -4033,13 +3996,13 @@ declare module '@polkadot/types/lookup' { readonly asAffirmWithReceiptsWithCount: { readonly id: u64; readonly receiptDetails: Vec; - readonly portfolios: Vec; + readonly portfolios: BTreeSet; readonly numberOfAssets: Option; } & Struct; readonly isAffirmInstructionWithCount: boolean; readonly asAffirmInstructionWithCount: { readonly id: u64; - readonly portfolios: Vec; + readonly portfolios: BTreeSet; readonly numberOfAssets: Option; } & Struct; readonly isRejectInstructionWithCount: boolean; @@ -4051,7 +4014,7 @@ declare module '@polkadot/types/lookup' { readonly isWithdrawAffirmationWithCount: boolean; readonly asWithdrawAffirmationWithCount: { readonly id: u64; - readonly portfolios: Vec; + readonly portfolios: BTreeSet; readonly numberOfAssets: Option; } & Struct; readonly isAddInstructionWithMediators: boolean; @@ -4071,7 +4034,7 @@ declare module '@polkadot/types/lookup' { readonly tradeDate: Option; readonly valueDate: Option; readonly legs: Vec; - readonly portfolios: Vec; + readonly portfolios: BTreeSet; readonly instructionMemo: Option; readonly mediators: BTreeSet; } & Struct; @@ -4089,10 +4052,15 @@ declare module '@polkadot/types/lookup' { readonly instructionId: u64; readonly numberOfAssets: Option; } & Struct; - readonly type: 'CreateVenue' | 'UpdateVenueDetails' | 'UpdateVenueType' | 'AffirmWithReceipts' | 'SetVenueFiltering' | 'AllowVenues' | 'DisallowVenues' | 'UpdateVenueSigners' | 'ExecuteManualInstruction' | 'AddInstruction' | 'AddAndAffirmInstruction' | 'AffirmInstruction' | 'WithdrawAffirmation' | 'RejectInstruction' | 'ExecuteScheduledInstruction' | 'AffirmWithReceiptsWithCount' | 'AffirmInstructionWithCount' | 'RejectInstructionWithCount' | 'WithdrawAffirmationWithCount' | 'AddInstructionWithMediators' | 'AddAndAffirmWithMediators' | 'AffirmInstructionAsMediator' | 'WithdrawAffirmationAsMediator' | 'RejectInstructionAsMediator'; + readonly isLockInstruction: boolean; + readonly asLockInstruction: { + readonly instId: u64; + readonly weightLimit: SpWeightsWeightV2Weight; + } & Struct; + readonly type: 'CreateVenue' | 'UpdateVenueDetails' | 'UpdateVenueType' | 'AffirmWithReceipts' | 'SetVenueFiltering' | 'AllowVenues' | 'DisallowVenues' | 'UpdateVenueSigners' | 'ExecuteManualInstruction' | 'AddInstruction' | 'AddAndAffirmInstruction' | 'AffirmInstruction' | 'WithdrawAffirmation' | 'RejectInstruction' | 'ExecuteScheduledInstruction' | 'AffirmWithReceiptsWithCount' | 'AffirmInstructionWithCount' | 'RejectInstructionWithCount' | 'WithdrawAffirmationWithCount' | 'AddInstructionWithMediators' | 'AddAndAffirmWithMediators' | 'AffirmInstructionAsMediator' | 'WithdrawAffirmationAsMediator' | 'RejectInstructionAsMediator' | 'LockInstruction'; } - /** @name PolymeshPrimitivesSettlementReceiptDetails (455) */ + /** @name PolymeshPrimitivesSettlementReceiptDetails (447) */ interface PolymeshPrimitivesSettlementReceiptDetails extends Struct { readonly uid: u64; readonly instructionId: u64; @@ -4102,7 +4070,7 @@ declare module '@polkadot/types/lookup' { readonly metadata: Option; } - /** @name SpRuntimeMultiSignature (456) */ + /** @name SpRuntimeMultiSignature (448) */ interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -4113,24 +4081,24 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpCoreEcdsaSignature (457) */ + /** @name SpCoreEcdsaSignature (449) */ interface SpCoreEcdsaSignature extends U8aFixed {} - /** @name PolymeshPrimitivesSettlementAffirmationCount (460) */ + /** @name PolymeshPrimitivesSettlementAffirmationCount (453) */ interface PolymeshPrimitivesSettlementAffirmationCount extends Struct { readonly senderAssetCount: PolymeshPrimitivesSettlementAssetCount; readonly receiverAssetCount: PolymeshPrimitivesSettlementAssetCount; readonly offchainCount: u32; } - /** @name PolymeshPrimitivesSettlementAssetCount (461) */ + /** @name PolymeshPrimitivesSettlementAssetCount (454) */ interface PolymeshPrimitivesSettlementAssetCount extends Struct { readonly fungible: u32; readonly nonFungible: u32; readonly offChain: u32; } - /** @name PalletStatisticsCall (464) */ + /** @name PalletStatisticsCall (457) */ interface PalletStatisticsCall extends Enum { readonly isSetActiveAssetStats: boolean; readonly asSetActiveAssetStats: { @@ -4157,7 +4125,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetActiveAssetStats' | 'BatchUpdateAssetStats' | 'SetAssetTransferCompliance' | 'SetEntitiesExempt'; } - /** @name PalletStoCall (468) */ + /** @name PalletStoCall (461) */ interface PalletStoCall extends Enum { readonly isCreateFundraiser: boolean; readonly asCreateFundraiser: { @@ -4174,46 +4142,68 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isInvest: boolean; readonly asInvest: { - readonly investmentPortfolio: PolymeshPrimitivesIdentityIdPortfolioId; - readonly fundingPortfolio: PolymeshPrimitivesIdentityIdPortfolioId; readonly offeringAsset: PolymeshPrimitivesAssetAssetId; - readonly id: u64; + readonly fundraiserId: u64; + readonly investmentPortfolio: PolymeshPrimitivesIdentityIdPortfolioId; + readonly funding: PalletStoFundingMethod; readonly purchaseAmount: u128; readonly maxPrice: Option; - readonly receipt: Option; } & Struct; readonly isFreezeFundraiser: boolean; readonly asFreezeFundraiser: { readonly offeringAsset: PolymeshPrimitivesAssetAssetId; - readonly id: u64; + readonly fundraiserId: u64; } & Struct; readonly isUnfreezeFundraiser: boolean; readonly asUnfreezeFundraiser: { readonly offeringAsset: PolymeshPrimitivesAssetAssetId; - readonly id: u64; + readonly fundraiserId: u64; } & Struct; readonly isModifyFundraiserWindow: boolean; readonly asModifyFundraiserWindow: { readonly offeringAsset: PolymeshPrimitivesAssetAssetId; - readonly id: u64; + readonly fundraiserId: u64; readonly start: u64; readonly end: Option; } & Struct; readonly isStop: boolean; readonly asStop: { readonly offeringAsset: PolymeshPrimitivesAssetAssetId; - readonly id: u64; + readonly fundraiserId: u64; + } & Struct; + readonly isEnableOffchainFunding: boolean; + readonly asEnableOffchainFunding: { + readonly offeringAsset: PolymeshPrimitivesAssetAssetId; + readonly fundraiserId: u64; + readonly ticker: PolymeshPrimitivesTicker; } & Struct; - readonly type: 'CreateFundraiser' | 'Invest' | 'FreezeFundraiser' | 'UnfreezeFundraiser' | 'ModifyFundraiserWindow' | 'Stop'; + readonly type: 'CreateFundraiser' | 'Invest' | 'FreezeFundraiser' | 'UnfreezeFundraiser' | 'ModifyFundraiserWindow' | 'Stop' | 'EnableOffchainFunding'; } - /** @name PalletStoPriceTier (470) */ + /** @name PalletStoPriceTier (463) */ interface PalletStoPriceTier extends Struct { readonly total: u128; readonly price: u128; } - /** @name PalletTreasuryCall (472) */ + /** @name PalletStoFundingMethod (464) */ + interface PalletStoFundingMethod extends Enum { + readonly isOnChain: boolean; + readonly asOnChain: PolymeshPrimitivesIdentityIdPortfolioId; + readonly isOffChain: boolean; + readonly asOffChain: PolymeshPrimitivesStoFundraiserReceiptDetails; + readonly type: 'OnChain' | 'OffChain'; + } + + /** @name PolymeshPrimitivesStoFundraiserReceiptDetails (465) */ + interface PolymeshPrimitivesStoFundraiserReceiptDetails extends Struct { + readonly uid: u64; + readonly signer: AccountId32; + readonly signature: SpRuntimeMultiSignature; + readonly metadata: Option; + } + + /** @name PalletTreasuryCall (466) */ interface PalletTreasuryCall extends Enum { readonly isDisbursement: boolean; readonly asDisbursement: { @@ -4226,13 +4216,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Disbursement' | 'Reimbursement'; } - /** @name PolymeshPrimitivesBeneficiary (474) */ + /** @name PolymeshPrimitivesBeneficiary (468) */ interface PolymeshPrimitivesBeneficiary extends Struct { readonly id: PolymeshPrimitivesIdentityId; readonly amount: u128; } - /** @name PalletUtilityCall (475) */ + /** @name PalletUtilityCall (469) */ interface PalletUtilityCall extends Enum { readonly isBatch: boolean; readonly asBatch: { @@ -4262,47 +4252,35 @@ declare module '@polkadot/types/lookup' { readonly call: Call; readonly weight: SpWeightsWeightV2Weight; } & Struct; - readonly isBatchOld: boolean; - readonly asBatchOld: { - readonly calls: Vec; - } & Struct; - readonly isBatchAtomic: boolean; - readonly asBatchAtomic: { - readonly calls: Vec; - } & Struct; - readonly isBatchOptimistic: boolean; - readonly asBatchOptimistic: { - readonly calls: Vec; - } & Struct; readonly isAsDerivative: boolean; readonly asAsDerivative: { readonly index: u16; readonly call: Call; } & Struct; - readonly type: 'Batch' | 'RelayTx' | 'BatchAll' | 'DispatchAs' | 'ForceBatch' | 'WithWeight' | 'BatchOld' | 'BatchAtomic' | 'BatchOptimistic' | 'AsDerivative'; + readonly type: 'Batch' | 'RelayTx' | 'BatchAll' | 'DispatchAs' | 'ForceBatch' | 'WithWeight' | 'AsDerivative'; } - /** @name PalletUtilityUniqueCall (477) */ + /** @name PalletUtilityUniqueCall (471) */ interface PalletUtilityUniqueCall extends Struct { readonly nonce: u64; readonly call: Call; } - /** @name PolymeshRuntimeDevelopRuntimeOriginCaller (478) */ + /** @name PolymeshRuntimeDevelopRuntimeOriginCaller (472) */ interface PolymeshRuntimeDevelopRuntimeOriginCaller extends Enum { readonly isSystem: boolean; readonly asSystem: FrameSupportDispatchRawOrigin; readonly isVoid: boolean; readonly isPolymeshCommittee: boolean; - readonly asPolymeshCommittee: PalletCommitteeRawOriginInstance1; + readonly asPolymeshCommittee: PalletCommitteeRawOrigin; readonly isTechnicalCommittee: boolean; - readonly asTechnicalCommittee: PalletCommitteeRawOriginInstance3; + readonly asTechnicalCommittee: PalletCommitteeRawOrigin; readonly isUpgradeCommittee: boolean; - readonly asUpgradeCommittee: PalletCommitteeRawOriginInstance4; + readonly asUpgradeCommittee: PalletCommitteeRawOrigin; readonly type: 'System' | 'Void' | 'PolymeshCommittee' | 'TechnicalCommittee' | 'UpgradeCommittee'; } - /** @name FrameSupportDispatchRawOrigin (479) */ + /** @name FrameSupportDispatchRawOrigin (473) */ interface FrameSupportDispatchRawOrigin extends Enum { readonly isRoot: boolean; readonly isSigned: boolean; @@ -4311,31 +4289,19 @@ declare module '@polkadot/types/lookup' { readonly type: 'Root' | 'Signed' | 'None'; } - /** @name PalletCommitteeRawOriginInstance1 (480) */ - interface PalletCommitteeRawOriginInstance1 extends Enum { - readonly isEndorsed: boolean; - readonly type: 'Endorsed'; - } - - /** @name PalletCommitteeRawOriginInstance3 (481) */ - interface PalletCommitteeRawOriginInstance3 extends Enum { - readonly isEndorsed: boolean; - readonly type: 'Endorsed'; - } - - /** @name PalletCommitteeRawOriginInstance4 (482) */ - interface PalletCommitteeRawOriginInstance4 extends Enum { + /** @name PalletCommitteeRawOrigin (474) */ + interface PalletCommitteeRawOrigin extends Enum { readonly isEndorsed: boolean; readonly type: 'Endorsed'; } - /** @name SpCoreVoid (483) */ + /** @name SpCoreVoid (477) */ type SpCoreVoid = Null; - /** @name PalletBaseCall (484) */ + /** @name PalletBaseCall (478) */ type PalletBaseCall = Null; - /** @name PalletExternalAgentsCall (485) */ + /** @name PalletExternalAgentsCall (479) */ interface PalletExternalAgentsCall extends Enum { readonly isCreateGroup: boolean; readonly asCreateGroup: { @@ -4383,7 +4349,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CreateGroup' | 'SetGroupPermissions' | 'RemoveAgent' | 'Abdicate' | 'ChangeGroup' | 'AcceptBecomeAgent' | 'CreateGroupAndAddAuth' | 'CreateAndChangeCustomGroup'; } - /** @name PalletRelayerCall (486) */ + /** @name PalletRelayerCall (480) */ interface PalletRelayerCall extends Enum { readonly isSetPayingKey: boolean; readonly asSetPayingKey: { @@ -4417,7 +4383,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetPayingKey' | 'AcceptPayingKey' | 'RemovePayingKey' | 'UpdatePolyxLimit' | 'IncreasePolyxLimit' | 'DecreasePolyxLimit'; } - /** @name PalletContractsCall (487) */ + /** @name PalletContractsCall (481) */ interface PalletContractsCall extends Enum { readonly isCallOldWeight: boolean; readonly asCallOldWeight: { @@ -4486,17 +4452,21 @@ declare module '@polkadot/types/lookup' { readonly data: Bytes; readonly salt: Bytes; } & Struct; - readonly type: 'CallOldWeight' | 'InstantiateWithCodeOldWeight' | 'InstantiateOldWeight' | 'UploadCode' | 'RemoveCode' | 'SetCode' | 'Call' | 'InstantiateWithCode' | 'Instantiate'; + readonly isMigrate: boolean; + readonly asMigrate: { + readonly weightLimit: SpWeightsWeightV2Weight; + } & Struct; + readonly type: 'CallOldWeight' | 'InstantiateWithCodeOldWeight' | 'InstantiateOldWeight' | 'UploadCode' | 'RemoveCode' | 'SetCode' | 'Call' | 'InstantiateWithCode' | 'Instantiate' | 'Migrate'; } - /** @name PalletContractsWasmDeterminism (491) */ + /** @name PalletContractsWasmDeterminism (483) */ interface PalletContractsWasmDeterminism extends Enum { - readonly isDeterministic: boolean; - readonly isAllowIndeterminism: boolean; - readonly type: 'Deterministic' | 'AllowIndeterminism'; + readonly isEnforced: boolean; + readonly isRelaxed: boolean; + readonly type: 'Enforced' | 'Relaxed'; } - /** @name PolymeshContractsCall (492) */ + /** @name PolymeshContractsCall (484) */ interface PolymeshContractsCall extends Enum { readonly isInstantiateWithCodePerms: boolean; readonly asInstantiateWithCodePerms: { @@ -4548,18 +4518,18 @@ declare module '@polkadot/types/lookup' { readonly type: 'InstantiateWithCodePerms' | 'InstantiateWithHashPerms' | 'UpdateCallRuntimeWhitelist' | 'InstantiateWithCodeAsPrimaryKey' | 'InstantiateWithHashAsPrimaryKey' | 'UpgradeApi'; } - /** @name PolymeshContractsNextUpgrade (495) */ + /** @name PolymeshContractsNextUpgrade (487) */ interface PolymeshContractsNextUpgrade extends Struct { readonly chainVersion: PolymeshContractsChainVersion; readonly apiHash: PolymeshContractsApiCodeHash; } - /** @name PolymeshContractsApiCodeHash (496) */ + /** @name PolymeshContractsApiCodeHash (488) */ interface PolymeshContractsApiCodeHash extends Struct { readonly hash_: H256; } - /** @name PalletPreimageCall (497) */ + /** @name PalletPreimageCall (489) */ interface PalletPreimageCall extends Enum { readonly isNotePreimage: boolean; readonly asNotePreimage: { @@ -4580,7 +4550,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotePreimage' | 'UnnotePreimage' | 'RequestPreimage' | 'UnrequestPreimage'; } - /** @name PalletNftCall (498) */ + /** @name PalletNftCall (490) */ interface PalletNftCall extends Enum { readonly isCreateNftCollection: boolean; readonly asCreateNftCollection: { @@ -4599,6 +4569,7 @@ declare module '@polkadot/types/lookup' { readonly assetId: PolymeshPrimitivesAssetAssetId; readonly nftId: u64; readonly portfolioKind: PolymeshPrimitivesIdentityIdPortfolioKind; + readonly numberOfKeys: Option; } & Struct; readonly isControllerTransfer: boolean; readonly asControllerTransfer: { @@ -4609,16 +4580,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'CreateNftCollection' | 'IssueNft' | 'RedeemNft' | 'ControllerTransfer'; } - /** @name PolymeshPrimitivesNftNftCollectionKeys (501) */ + /** @name PolymeshPrimitivesNftNftCollectionKeys (493) */ interface PolymeshPrimitivesNftNftCollectionKeys extends Vec {} - /** @name PolymeshPrimitivesNftNftMetadataAttribute (504) */ + /** @name PolymeshPrimitivesNftNftMetadataAttribute (496) */ interface PolymeshPrimitivesNftNftMetadataAttribute extends Struct { readonly key: PolymeshPrimitivesAssetMetadataAssetMetadataKey; readonly value: Bytes; } - /** @name PalletElectionProviderMultiPhaseCall (505) */ + /** @name PalletElectionProviderMultiPhaseCall (498) */ interface PalletElectionProviderMultiPhaseCall extends Enum { readonly isSubmitUnsigned: boolean; readonly asSubmitUnsigned: { @@ -4645,14 +4616,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'SubmitUnsigned' | 'SetMinimumUntrustedScore' | 'SetEmergencyElectionResult' | 'Submit' | 'GovernanceFallback'; } - /** @name PalletElectionProviderMultiPhaseRawSolution (506) */ + /** @name PalletElectionProviderMultiPhaseRawSolution (499) */ interface PalletElectionProviderMultiPhaseRawSolution extends Struct { readonly solution: PolymeshRuntimeCommonNposSolution16; readonly score: SpNposElectionsElectionScore; readonly round: u32; } - /** @name PolymeshRuntimeCommonNposSolution16 (507) */ + /** @name PolymeshRuntimeCommonNposSolution16 (500) */ interface PolymeshRuntimeCommonNposSolution16 extends Struct { readonly votes1: Vec, Compact]>>; readonly votes2: Vec, ITuple<[Compact, Compact]>, Compact]>>; @@ -4672,45 +4643,27 @@ declare module '@polkadot/types/lookup' { readonly votes16: Vec, Vec, Compact]>>, Compact]>>; } - /** @name PalletElectionProviderMultiPhaseSolutionOrSnapshotSize (558) */ + /** @name PalletElectionProviderMultiPhaseSolutionOrSnapshotSize (551) */ interface PalletElectionProviderMultiPhaseSolutionOrSnapshotSize extends Struct { readonly voters: Compact; readonly targets: Compact; } - /** @name SpNposElectionsSupport (562) */ + /** @name SpNposElectionsSupport (555) */ interface SpNposElectionsSupport extends Struct { readonly total: u128; readonly voters: Vec>; } - /** @name PalletTestUtilsCall (565) */ - interface PalletTestUtilsCall extends Enum { - readonly isRegisterDid: boolean; - readonly asRegisterDid: { - readonly secondaryKeys: Vec; - } & Struct; - readonly isMockCddRegisterDid: boolean; - readonly asMockCddRegisterDid: { - readonly targetAccount: AccountId32; - } & Struct; - readonly isGetMyDid: boolean; - readonly isGetCddOf: boolean; - readonly asGetCddOf: { - readonly of: AccountId32; - } & Struct; - readonly type: 'RegisterDid' | 'MockCddRegisterDid' | 'GetMyDid' | 'GetCddOf'; - } - - /** @name PalletCommitteePolymeshVotes (566) */ + /** @name PalletCommitteePolymeshVotes (558) */ interface PalletCommitteePolymeshVotes extends Struct { readonly index: u32; readonly ayes: Vec; readonly nays: Vec; - readonly expiry: PolymeshCommonUtilitiesMaybeBlock; + readonly expiry: PolymeshPrimitivesMaybeBlock; } - /** @name PalletCommitteeError (568) */ + /** @name PalletCommitteeError (559) */ interface PalletCommitteeError extends Enum { readonly isDuplicateVote: boolean; readonly isNotAMember: boolean; @@ -4724,13 +4677,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'DuplicateVote' | 'NotAMember' | 'NoSuchProposal' | 'ProposalExpired' | 'DuplicateProposal' | 'MismatchedVotingIndex' | 'InvalidProportion' | 'FirstVoteReject' | 'ProposalsLimitReached'; } - /** @name PolymeshPrimitivesMultisigProposalVoteCount (577) */ + /** @name PolymeshPrimitivesMultisigProposalVoteCount (568) */ interface PolymeshPrimitivesMultisigProposalVoteCount extends Struct { readonly approvals: u64; readonly rejections: u64; } - /** @name PolymeshPrimitivesMultisigProposalState (578) */ + /** @name PolymeshPrimitivesMultisigProposalState (569) */ interface PolymeshPrimitivesMultisigProposalState extends Enum { readonly isActive: boolean; readonly asActive: { @@ -4742,7 +4695,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Active' | 'ExecutionSuccessful' | 'ExecutionFailed' | 'Rejected'; } - /** @name PalletMultisigError (580) */ + /** @name PalletMultisigError (571) */ interface PalletMultisigError extends Enum { readonly isProposalMissing: boolean; readonly isDecodingError: boolean; @@ -4766,29 +4719,34 @@ declare module '@polkadot/types/lookup' { readonly isMultisigMissingIdentity: boolean; readonly isTooManySigners: boolean; readonly isNoPayingDid: boolean; - readonly type: 'ProposalMissing' | 'DecodingError' | 'RequiredSignersIsZero' | 'NotASigner' | 'NoSuchMultisig' | 'NotEnoughSigners' | 'NonceOverflow' | 'AlreadyVoted' | 'AlreadyASigner' | 'IdentityNotAdmin' | 'IdentityNotPayer' | 'ChangeNotAllowed' | 'SignerAlreadyLinkedToMultisig' | 'SignerAlreadyLinkedToIdentity' | 'NestingNotAllowed' | 'ProposalAlreadyRejected' | 'ProposalExpired' | 'ProposalAlreadyExecuted' | 'MaxWeightTooLow' | 'MultisigMissingIdentity' | 'TooManySigners' | 'NoPayingDid'; + readonly isInvalidExpiryDate: boolean; + readonly isInvalidatedProposal: boolean; + readonly isAdminNotFound: boolean; + readonly isBadAuthorizationType: boolean; + readonly type: 'ProposalMissing' | 'DecodingError' | 'RequiredSignersIsZero' | 'NotASigner' | 'NoSuchMultisig' | 'NotEnoughSigners' | 'NonceOverflow' | 'AlreadyVoted' | 'AlreadyASigner' | 'IdentityNotAdmin' | 'IdentityNotPayer' | 'ChangeNotAllowed' | 'SignerAlreadyLinkedToMultisig' | 'SignerAlreadyLinkedToIdentity' | 'NestingNotAllowed' | 'ProposalAlreadyRejected' | 'ProposalExpired' | 'ProposalAlreadyExecuted' | 'MaxWeightTooLow' | 'MultisigMissingIdentity' | 'TooManySigners' | 'NoPayingDid' | 'InvalidExpiryDate' | 'InvalidatedProposal' | 'AdminNotFound' | 'BadAuthorizationType'; } - /** @name PalletBridgeBridgeTxDetail (582) */ - interface PalletBridgeBridgeTxDetail extends Struct { - readonly amount: u128; - readonly status: PalletBridgeBridgeTxStatus; - readonly executionBlock: u32; - readonly txHash: H256; + /** @name PalletValidatorsPermissionedIdentityPrefs (572) */ + interface PalletValidatorsPermissionedIdentityPrefs extends Struct { + readonly intendedCount: u32; + readonly runningCount: u32; } - /** @name PalletBridgeBridgeTxStatus (583) */ - interface PalletBridgeBridgeTxStatus extends Enum { - readonly isAbsent: boolean; - readonly isPending: boolean; - readonly asPending: u8; - readonly isFrozen: boolean; - readonly isTimelocked: boolean; - readonly isHandled: boolean; - readonly type: 'Absent' | 'Pending' | 'Frozen' | 'Timelocked' | 'Handled'; + /** @name PalletValidatorsError (573) */ + interface PalletValidatorsError extends Enum { + readonly isStashIdentityDoesNotExist: boolean; + readonly isStashIdentityNotPermissioned: boolean; + readonly isIdentityIsAlreadyPermissioned: boolean; + readonly isIdentityIsMissingCDD: boolean; + readonly isIntendedCountIsExceedingConsensusLimit: boolean; + readonly isIdentityNotFound: boolean; + readonly isValidatorNotFound: boolean; + readonly isCommissionTooHigh: boolean; + readonly isCommissionUnchanged: boolean; + readonly type: 'StashIdentityDoesNotExist' | 'StashIdentityNotPermissioned' | 'IdentityIsAlreadyPermissioned' | 'IdentityIsMissingCDD' | 'IntendedCountIsExceedingConsensusLimit' | 'IdentityNotFound' | 'ValidatorNotFound' | 'CommissionTooHigh' | 'CommissionUnchanged'; } - /** @name PalletStakingStakingLedger (586) */ + /** @name PalletStakingStakingLedger (574) */ interface PalletStakingStakingLedger extends Struct { readonly stash: AccountId32; readonly total: Compact; @@ -4797,32 +4755,32 @@ declare module '@polkadot/types/lookup' { readonly claimedRewards: Vec; } - /** @name PalletStakingUnlockChunk (588) */ + /** @name PalletStakingUnlockChunk (576) */ interface PalletStakingUnlockChunk extends Struct { readonly value: Compact; readonly era: Compact; } - /** @name PalletStakingNominations (591) */ + /** @name PalletStakingNominations (579) */ interface PalletStakingNominations extends Struct { readonly targets: Vec; readonly submittedIn: u32; readonly suppressed: bool; } - /** @name PalletStakingActiveEraInfo (593) */ + /** @name PalletStakingActiveEraInfo (581) */ interface PalletStakingActiveEraInfo extends Struct { readonly index: u32; readonly start: Option; } - /** @name PalletStakingEraRewardPoints (595) */ + /** @name PalletStakingEraRewardPoints (583) */ interface PalletStakingEraRewardPoints extends Struct { readonly total: u32; readonly individual: BTreeMap; } - /** @name PalletStakingUnappliedSlash (599) */ + /** @name PalletStakingUnappliedSlash (588) */ interface PalletStakingUnappliedSlash extends Struct { readonly validator: AccountId32; readonly own: u128; @@ -4831,7 +4789,7 @@ declare module '@polkadot/types/lookup' { readonly payout: u128; } - /** @name PalletStakingSlashingSlashingSpans (601) */ + /** @name PalletStakingSlashingSlashingSpans (590) */ interface PalletStakingSlashingSlashingSpans extends Struct { readonly spanIndex: u32; readonly lastStart: u32; @@ -4839,19 +4797,13 @@ declare module '@polkadot/types/lookup' { readonly prior: Vec; } - /** @name PalletStakingSlashingSpanRecord (602) */ + /** @name PalletStakingSlashingSpanRecord (591) */ interface PalletStakingSlashingSpanRecord extends Struct { readonly slashed: u128; readonly paidOut: u128; } - /** @name PalletStakingPermissionedIdentityPrefs (605) */ - interface PalletStakingPermissionedIdentityPrefs extends Struct { - readonly intendedCount: u32; - readonly runningCount: u32; - } - - /** @name PalletStakingPalletError (607) */ + /** @name PalletStakingPalletError (594) */ interface PalletStakingPalletError extends Enum { readonly isNotController: boolean; readonly isNotStash: boolean; @@ -4878,29 +4830,19 @@ declare module '@polkadot/types/lookup' { readonly isTooManyValidators: boolean; readonly isCommissionTooLow: boolean; readonly isBoundNotMet: boolean; - readonly isStashIdentityDoesNotExist: boolean; - readonly isStashIdentityNotPermissioned: boolean; - readonly isStashIdentityNotCDDed: boolean; - readonly isIdentityIsAlreadyPermissioned: boolean; - readonly isIdentityIsMissingCDD: boolean; - readonly isIntendedCountIsExceedingConsensusLimit: boolean; - readonly isIdentityNotFound: boolean; - readonly isValidatorNotFound: boolean; - readonly isCommissionTooHigh: boolean; - readonly isCommissionUnchanged: boolean; - readonly type: 'NotController' | 'NotStash' | 'AlreadyBonded' | 'AlreadyPaired' | 'EmptyTargets' | 'DuplicateIndex' | 'InvalidSlashIndex' | 'InsufficientBond' | 'NoMoreChunks' | 'NoUnlockChunk' | 'FundedTarget' | 'InvalidEraToReward' | 'InvalidNumberOfNominations' | 'NotSortedAndUnique' | 'AlreadyClaimed' | 'IncorrectHistoryDepth' | 'IncorrectSlashingSpans' | 'BadState' | 'TooManyTargets' | 'BadTarget' | 'CannotChillOther' | 'TooManyNominators' | 'TooManyValidators' | 'CommissionTooLow' | 'BoundNotMet' | 'StashIdentityDoesNotExist' | 'StashIdentityNotPermissioned' | 'StashIdentityNotCDDed' | 'IdentityIsAlreadyPermissioned' | 'IdentityIsMissingCDD' | 'IntendedCountIsExceedingConsensusLimit' | 'IdentityNotFound' | 'ValidatorNotFound' | 'CommissionTooHigh' | 'CommissionUnchanged'; + readonly type: 'NotController' | 'NotStash' | 'AlreadyBonded' | 'AlreadyPaired' | 'EmptyTargets' | 'DuplicateIndex' | 'InvalidSlashIndex' | 'InsufficientBond' | 'NoMoreChunks' | 'NoUnlockChunk' | 'FundedTarget' | 'InvalidEraToReward' | 'InvalidNumberOfNominations' | 'NotSortedAndUnique' | 'AlreadyClaimed' | 'IncorrectHistoryDepth' | 'IncorrectSlashingSpans' | 'BadState' | 'TooManyTargets' | 'BadTarget' | 'CannotChillOther' | 'TooManyNominators' | 'TooManyValidators' | 'CommissionTooLow' | 'BoundNotMet'; } - /** @name SpStakingOffenceOffenceDetails (608) */ + /** @name SpStakingOffenceOffenceDetails (595) */ interface SpStakingOffenceOffenceDetails extends Struct { readonly offender: ITuple<[AccountId32, PalletStakingExposure]>; readonly reporters: Vec; } - /** @name SpCoreCryptoKeyTypeId (613) */ + /** @name SpCoreCryptoKeyTypeId (600) */ interface SpCoreCryptoKeyTypeId extends U8aFixed {} - /** @name PalletSessionError (614) */ + /** @name PalletSessionError (601) */ interface PalletSessionError extends Enum { readonly isInvalidProof: boolean; readonly isNoAssociatedValidatorId: boolean; @@ -4910,7 +4852,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidProof' | 'NoAssociatedValidatorId' | 'DuplicatedKey' | 'NoKeys' | 'NoAccount'; } - /** @name PalletGrandpaStoredState (615) */ + /** @name PalletGrandpaStoredState (602) */ interface PalletGrandpaStoredState extends Enum { readonly isLive: boolean; readonly isPendingPause: boolean; @@ -4927,7 +4869,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Live' | 'PendingPause' | 'Paused' | 'PendingResume'; } - /** @name PalletGrandpaStoredPendingChange (616) */ + /** @name PalletGrandpaStoredPendingChange (603) */ interface PalletGrandpaStoredPendingChange extends Struct { readonly scheduledAt: u32; readonly delay: u32; @@ -4935,7 +4877,7 @@ declare module '@polkadot/types/lookup' { readonly forced: Option; } - /** @name PalletGrandpaError (618) */ + /** @name PalletGrandpaError (605) */ interface PalletGrandpaError extends Enum { readonly isPauseFailed: boolean; readonly isResumeFailed: boolean; @@ -4947,38 +4889,32 @@ declare module '@polkadot/types/lookup' { readonly type: 'PauseFailed' | 'ResumeFailed' | 'ChangePending' | 'TooSoon' | 'InvalidKeyOwnershipProof' | 'InvalidEquivocationProof' | 'DuplicateOffenceReport'; } - /** @name PalletImOnlineBoundedOpaqueNetworkState (622) */ - interface PalletImOnlineBoundedOpaqueNetworkState extends Struct { - readonly peerId: Bytes; - readonly externalAddresses: Vec; - } - - /** @name PalletImOnlineError (626) */ + /** @name PalletImOnlineError (608) */ interface PalletImOnlineError extends Enum { readonly isInvalidKey: boolean; readonly isDuplicatedHeartbeat: boolean; readonly type: 'InvalidKey' | 'DuplicatedHeartbeat'; } - /** @name PalletSudoError (628) */ + /** @name PalletSudoError (610) */ interface PalletSudoError extends Enum { readonly isRequireSudo: boolean; readonly type: 'RequireSudo'; } - /** @name PalletAssetTickerRegistration (629) */ + /** @name PalletAssetTickerRegistration (611) */ interface PalletAssetTickerRegistration extends Struct { readonly owner: PolymeshPrimitivesIdentityId; readonly expiry: Option; } - /** @name PalletAssetTickerRegistrationConfig (630) */ + /** @name PalletAssetTickerRegistrationConfig (612) */ interface PalletAssetTickerRegistrationConfig extends Struct { readonly maxTickerLength: u8; readonly registrationLength: Option; } - /** @name PalletAssetAssetDetails (631) */ + /** @name PalletAssetAssetDetails (613) */ interface PalletAssetAssetDetails extends Struct { readonly totalSupply: u128; readonly ownerDid: PolymeshPrimitivesIdentityId; @@ -4986,7 +4922,7 @@ declare module '@polkadot/types/lookup' { readonly assetType: PolymeshPrimitivesAssetAssetType; } - /** @name PalletAssetError (641) */ + /** @name PalletAssetError (623) */ interface PalletAssetError extends Enum { readonly isUnauthorized: boolean; readonly isAssetAlreadyCreated: boolean; @@ -5035,11 +4971,14 @@ declare module '@polkadot/types/lookup' { readonly isTickerIsAlreadyLinkedToAnAsset: boolean; readonly isAssetIdGenerationError: boolean; readonly isTickerNotRegisteredToCaller: boolean; - readonly type: 'Unauthorized' | 'AssetAlreadyCreated' | 'TickerTooLong' | 'TickerNotAlphanumeric' | 'TickerAlreadyRegistered' | 'TotalSupplyAboveLimit' | 'NoSuchAsset' | 'AlreadyFrozen' | 'NotAnOwner' | 'BalanceOverflow' | 'TotalSupplyOverflow' | 'InvalidGranularity' | 'NotFrozen' | 'InvalidTransfer' | 'InsufficientBalance' | 'AssetAlreadyDivisible' | 'InvalidEthereumSignature' | 'TickerRegistrationExpired' | 'SenderSameAsReceiver' | 'NoSuchDoc' | 'MaxLengthOfAssetNameExceeded' | 'FundingRoundNameMaxLengthExceeded' | 'InvalidAssetIdentifier' | 'InvestorUniquenessClaimNotAllowed' | 'InvalidCustomAssetTypeId' | 'AssetMetadataNameMaxLengthExceeded' | 'AssetMetadataValueMaxLengthExceeded' | 'AssetMetadataTypeDefMaxLengthExceeded' | 'AssetMetadataKeyIsMissing' | 'AssetMetadataValueIsLocked' | 'AssetMetadataLocalKeyAlreadyExists' | 'AssetMetadataGlobalKeyAlreadyExists' | 'TickerFirstByteNotValid' | 'UnexpectedNonFungibleToken' | 'IncompatibleAssetTypeUpdate' | 'AssetMetadataKeyBelongsToNFTCollection' | 'AssetMetadataValueIsEmpty' | 'NumberOfAssetMediatorsExceeded' | 'InvalidTickerCharacter' | 'InvalidTransferFrozenAsset' | 'InvalidTransferComplianceFailure' | 'InvalidTransferInvalidReceiverCDD' | 'InvalidTransferInvalidSenderCDD' | 'TickerRegistrationNotFound' | 'TickerIsAlreadyLinkedToAnAsset' | 'AssetIdGenerationError' | 'TickerNotRegisteredToCaller'; + readonly isAssetIsAlreadyLinkedToATicker: boolean; + readonly isTickerIsNotLinkedToTheAsset: boolean; + readonly isBadAuthorizationType: boolean; + readonly type: 'Unauthorized' | 'AssetAlreadyCreated' | 'TickerTooLong' | 'TickerNotAlphanumeric' | 'TickerAlreadyRegistered' | 'TotalSupplyAboveLimit' | 'NoSuchAsset' | 'AlreadyFrozen' | 'NotAnOwner' | 'BalanceOverflow' | 'TotalSupplyOverflow' | 'InvalidGranularity' | 'NotFrozen' | 'InvalidTransfer' | 'InsufficientBalance' | 'AssetAlreadyDivisible' | 'InvalidEthereumSignature' | 'TickerRegistrationExpired' | 'SenderSameAsReceiver' | 'NoSuchDoc' | 'MaxLengthOfAssetNameExceeded' | 'FundingRoundNameMaxLengthExceeded' | 'InvalidAssetIdentifier' | 'InvestorUniquenessClaimNotAllowed' | 'InvalidCustomAssetTypeId' | 'AssetMetadataNameMaxLengthExceeded' | 'AssetMetadataValueMaxLengthExceeded' | 'AssetMetadataTypeDefMaxLengthExceeded' | 'AssetMetadataKeyIsMissing' | 'AssetMetadataValueIsLocked' | 'AssetMetadataLocalKeyAlreadyExists' | 'AssetMetadataGlobalKeyAlreadyExists' | 'TickerFirstByteNotValid' | 'UnexpectedNonFungibleToken' | 'IncompatibleAssetTypeUpdate' | 'AssetMetadataKeyBelongsToNFTCollection' | 'AssetMetadataValueIsEmpty' | 'NumberOfAssetMediatorsExceeded' | 'InvalidTickerCharacter' | 'InvalidTransferFrozenAsset' | 'InvalidTransferComplianceFailure' | 'InvalidTransferInvalidReceiverCDD' | 'InvalidTransferInvalidSenderCDD' | 'TickerRegistrationNotFound' | 'TickerIsAlreadyLinkedToAnAsset' | 'AssetIdGenerationError' | 'TickerNotRegisteredToCaller' | 'AssetIsAlreadyLinkedToATicker' | 'TickerIsNotLinkedToTheAsset' | 'BadAuthorizationType'; } - /** @name PalletCorporateActionsDistributionError (644) */ - interface PalletCorporateActionsDistributionError extends Enum { + /** @name PalletCorporateActionsDistributionPalletError (626) */ + interface PalletCorporateActionsDistributionPalletError extends Enum { readonly isCaNotBenefit: boolean; readonly isAlreadyExists: boolean; readonly isExpiryBeforePayment: boolean; @@ -5058,15 +4997,15 @@ declare module '@polkadot/types/lookup' { readonly type: 'CaNotBenefit' | 'AlreadyExists' | 'ExpiryBeforePayment' | 'HolderAlreadyPaid' | 'NoSuchDistribution' | 'CannotClaimBeforeStart' | 'CannotClaimAfterExpiry' | 'BalancePerShareProductOverflowed' | 'NotDistributionCreator' | 'AlreadyReclaimed' | 'NotExpired' | 'DistributionStarted' | 'InsufficientRemainingAmount' | 'DistributionAmountIsZero' | 'DistributionPerShareIsZero'; } - /** @name PolymeshCommonUtilitiesCheckpointNextCheckpoints (648) */ + /** @name PolymeshCommonUtilitiesCheckpointNextCheckpoints (630) */ interface PolymeshCommonUtilitiesCheckpointNextCheckpoints extends Struct { readonly nextAt: u64; readonly totalPending: u64; readonly schedules: BTreeMap; } - /** @name PalletAssetCheckpointError (654) */ - interface PalletAssetCheckpointError extends Enum { + /** @name PalletAssetCheckpointPalletError (636) */ + interface PalletAssetCheckpointPalletError extends Enum { readonly isNoSuchSchedule: boolean; readonly isScheduleNotRemovable: boolean; readonly isSchedulesOverMaxComplexity: boolean; @@ -5076,13 +5015,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'NoSuchSchedule' | 'ScheduleNotRemovable' | 'SchedulesOverMaxComplexity' | 'ScheduleIsEmpty' | 'ScheduleFinished' | 'ScheduleHasExpiredCheckpoints'; } - /** @name PolymeshPrimitivesComplianceManagerAssetCompliance (655) */ + /** @name PolymeshPrimitivesComplianceManagerAssetCompliance (637) */ interface PolymeshPrimitivesComplianceManagerAssetCompliance extends Struct { readonly paused: bool; readonly requirements: Vec; } - /** @name PalletComplianceManagerError (657) */ + /** @name PalletComplianceManagerError (639) */ interface PalletComplianceManagerError extends Enum { readonly isUnauthorized: boolean; readonly isDidNotExist: boolean; @@ -5094,7 +5033,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unauthorized' | 'DidNotExist' | 'InvalidComplianceRequirementId' | 'IncorrectOperationOnTrustedIssuer' | 'DuplicateComplianceRequirements' | 'ComplianceRequirementTooComplex' | 'WeightLimitExceeded'; } - /** @name PalletCorporateActionsError (660) */ + /** @name PalletCorporateActionsError (642) */ interface PalletCorporateActionsError extends Enum { readonly isDetailsTooLong: boolean; readonly isDuplicateDidTax: boolean; @@ -5110,8 +5049,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'DetailsTooLong' | 'DuplicateDidTax' | 'TooManyDidTaxes' | 'TooManyTargetIds' | 'NoSuchCheckpointId' | 'NoSuchCA' | 'NoRecordDate' | 'RecordDateAfterStart' | 'DeclDateAfterRecordDate' | 'DeclDateInFuture' | 'NotTargetedByCA'; } - /** @name PalletCorporateActionsBallotError (664) */ - interface PalletCorporateActionsBallotError extends Enum { + /** @name PalletCorporateActionsBallotPalletError (646) */ + interface PalletCorporateActionsBallotPalletError extends Enum { readonly isCaNotNotice: boolean; readonly isAlreadyExists: boolean; readonly isNoSuchBallot: boolean; @@ -5129,36 +5068,36 @@ declare module '@polkadot/types/lookup' { readonly type: 'CaNotNotice' | 'AlreadyExists' | 'NoSuchBallot' | 'StartAfterEnd' | 'NowAfterEnd' | 'NumberOfChoicesOverflow' | 'VotingAlreadyStarted' | 'VotingNotStarted' | 'VotingAlreadyEnded' | 'WrongVoteCount' | 'InsufficientVotes' | 'NoSuchRCVFallback' | 'RcvSelfCycle' | 'RcvNotAllowed'; } - /** @name PalletPermissionsError (665) */ + /** @name PalletPermissionsError (647) */ interface PalletPermissionsError extends Enum { readonly isUnauthorizedCaller: boolean; readonly type: 'UnauthorizedCaller'; } - /** @name PalletPipsPipsMetadata (666) */ + /** @name PalletPipsPipsMetadata (648) */ interface PalletPipsPipsMetadata extends Struct { readonly id: u32; readonly url: Option; readonly description: Option; readonly createdAt: u32; readonly transactionVersion: u32; - readonly expiry: PolymeshCommonUtilitiesMaybeBlock; + readonly expiry: PolymeshPrimitivesMaybeBlock; } - /** @name PalletPipsDepositInfo (668) */ + /** @name PalletPipsDepositInfo (650) */ interface PalletPipsDepositInfo extends Struct { readonly owner: AccountId32; readonly amount: u128; } - /** @name PalletPipsPip (669) */ + /** @name PalletPipsPip (651) */ interface PalletPipsPip extends Struct { readonly id: u32; readonly proposal: Call; readonly proposer: PalletPipsProposer; } - /** @name PalletPipsVotingResult (670) */ + /** @name PalletPipsVotingResult (652) */ interface PalletPipsVotingResult extends Struct { readonly ayesCount: u32; readonly ayesStake: u128; @@ -5166,17 +5105,17 @@ declare module '@polkadot/types/lookup' { readonly naysStake: u128; } - /** @name PalletPipsVote (671) */ + /** @name PalletPipsVote (653) */ interface PalletPipsVote extends ITuple<[bool, u128]> {} - /** @name PalletPipsSnapshotMetadata (672) */ + /** @name PalletPipsSnapshotMetadata (654) */ interface PalletPipsSnapshotMetadata extends Struct { readonly createdAt: u32; readonly madeBy: AccountId32; readonly id: u32; } - /** @name PalletPipsError (674) */ + /** @name PalletPipsError (656) */ interface PalletPipsError extends Enum { readonly isRescheduleNotByReleaseCoordinator: boolean; readonly isNotFromCommunity: boolean; @@ -5196,10 +5135,11 @@ declare module '@polkadot/types/lookup' { readonly isSnapshotIdMismatch: boolean; readonly isScheduledProposalDoesntExist: boolean; readonly isProposalNotInScheduledState: boolean; - readonly type: 'RescheduleNotByReleaseCoordinator' | 'NotFromCommunity' | 'NotByCommittee' | 'TooManyActivePips' | 'IncorrectDeposit' | 'InsufficientDeposit' | 'NoSuchProposal' | 'NotACommitteeMember' | 'InvalidFutureBlockNumber' | 'NumberOfVotesExceeded' | 'StakeAmountOfVotesExceeded' | 'MissingCurrentIdentity' | 'IncorrectProposalState' | 'CannotSkipPip' | 'SnapshotResultTooLarge' | 'SnapshotIdMismatch' | 'ScheduledProposalDoesntExist' | 'ProposalNotInScheduledState'; + readonly isInvalidPipId: boolean; + readonly type: 'RescheduleNotByReleaseCoordinator' | 'NotFromCommunity' | 'NotByCommittee' | 'TooManyActivePips' | 'IncorrectDeposit' | 'InsufficientDeposit' | 'NoSuchProposal' | 'NotACommitteeMember' | 'InvalidFutureBlockNumber' | 'NumberOfVotesExceeded' | 'StakeAmountOfVotesExceeded' | 'MissingCurrentIdentity' | 'IncorrectProposalState' | 'CannotSkipPip' | 'SnapshotResultTooLarge' | 'SnapshotIdMismatch' | 'ScheduledProposalDoesntExist' | 'ProposalNotInScheduledState' | 'InvalidPipId'; } - /** @name PalletPortfolioError (682) */ + /** @name PalletPortfolioError (664) */ interface PalletPortfolioError extends Enum { readonly isPortfolioDoesNotExist: boolean; readonly isInsufficientPortfolioBalance: boolean; @@ -5219,10 +5159,13 @@ declare module '@polkadot/types/lookup' { readonly isEmptyTransfer: boolean; readonly isMissingOwnersPermission: boolean; readonly isInvalidTransferSenderIdMatchesReceiverId: boolean; - readonly type: 'PortfolioDoesNotExist' | 'InsufficientPortfolioBalance' | 'DestinationIsSamePortfolio' | 'PortfolioNameAlreadyInUse' | 'SecondaryKeyNotAuthorizedForPortfolio' | 'UnauthorizedCustodian' | 'InsufficientTokensLocked' | 'PortfolioNotEmpty' | 'DifferentIdentityPortfolios' | 'NoDuplicateAssetsAllowed' | 'NftNotFoundInPortfolio' | 'NftAlreadyLocked' | 'NftNotLocked' | 'InvalidTransferNFTNotOwned' | 'InvalidTransferNFTIsLocked' | 'EmptyTransfer' | 'MissingOwnersPermission' | 'InvalidTransferSenderIdMatchesReceiverId'; + readonly isSelfAdditionNotAllowed: boolean; + readonly isBadAuthorizationType: boolean; + readonly isDefaultPortfoliosCannotHaveCustodians: boolean; + readonly type: 'PortfolioDoesNotExist' | 'InsufficientPortfolioBalance' | 'DestinationIsSamePortfolio' | 'PortfolioNameAlreadyInUse' | 'SecondaryKeyNotAuthorizedForPortfolio' | 'UnauthorizedCustodian' | 'InsufficientTokensLocked' | 'PortfolioNotEmpty' | 'DifferentIdentityPortfolios' | 'NoDuplicateAssetsAllowed' | 'NftNotFoundInPortfolio' | 'NftAlreadyLocked' | 'NftNotLocked' | 'InvalidTransferNFTNotOwned' | 'InvalidTransferNFTIsLocked' | 'EmptyTransfer' | 'MissingOwnersPermission' | 'InvalidTransferSenderIdMatchesReceiverId' | 'SelfAdditionNotAllowed' | 'BadAuthorizationType' | 'DefaultPortfoliosCannotHaveCustodians'; } - /** @name PalletProtocolFeeError (683) */ + /** @name PalletProtocolFeeError (665) */ interface PalletProtocolFeeError extends Enum { readonly isInsufficientAccountBalance: boolean; readonly isUnHandledImbalances: boolean; @@ -5230,7 +5173,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InsufficientAccountBalance' | 'UnHandledImbalances' | 'InsufficientSubsidyBalance'; } - /** @name PalletSchedulerScheduled (686) */ + /** @name PalletSchedulerScheduled (668) */ interface PalletSchedulerScheduled extends Struct { readonly maybeId: Option; readonly priority: u8; @@ -5239,7 +5182,7 @@ declare module '@polkadot/types/lookup' { readonly origin: PolymeshRuntimeDevelopRuntimeOriginCaller; } - /** @name FrameSupportPreimagesBounded (687) */ + /** @name FrameSupportPreimagesBounded (669) */ interface FrameSupportPreimagesBounded extends Enum { readonly isLegacy: boolean; readonly asLegacy: { @@ -5255,7 +5198,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Legacy' | 'Inline' | 'Lookup'; } - /** @name PalletSchedulerError (690) */ + /** @name PalletSchedulerError (672) */ interface PalletSchedulerError extends Enum { readonly isFailedToSchedule: boolean; readonly isNotFound: boolean; @@ -5265,13 +5208,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange' | 'Named'; } - /** @name PolymeshPrimitivesSettlementVenue (691) */ + /** @name PolymeshPrimitivesSettlementVenue (673) */ interface PolymeshPrimitivesSettlementVenue extends Struct { readonly creator: PolymeshPrimitivesIdentityId; readonly venueType: PolymeshPrimitivesSettlementVenueType; } - /** @name PolymeshPrimitivesSettlementInstruction (695) */ + /** @name PolymeshPrimitivesSettlementInstruction (677) */ interface PolymeshPrimitivesSettlementInstruction extends Struct { readonly instructionId: u64; readonly venueId: Option; @@ -5281,7 +5224,7 @@ declare module '@polkadot/types/lookup' { readonly valueDate: Option; } - /** @name PolymeshPrimitivesSettlementLegStatus (697) */ + /** @name PolymeshPrimitivesSettlementLegStatus (679) */ interface PolymeshPrimitivesSettlementLegStatus extends Enum { readonly isPendingTokenLock: boolean; readonly isExecutionPending: boolean; @@ -5290,7 +5233,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'PendingTokenLock' | 'ExecutionPending' | 'ExecutionToBeSkipped'; } - /** @name PolymeshPrimitivesSettlementAffirmationStatus (699) */ + /** @name PolymeshPrimitivesSettlementAffirmationStatus (681) */ interface PolymeshPrimitivesSettlementAffirmationStatus extends Enum { readonly isUnknown: boolean; readonly isPending: boolean; @@ -5298,7 +5241,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unknown' | 'Pending' | 'Affirmed'; } - /** @name PolymeshPrimitivesSettlementInstructionStatus (702) */ + /** @name PolymeshPrimitivesSettlementInstructionStatus (684) */ interface PolymeshPrimitivesSettlementInstructionStatus extends Enum { readonly isUnknown: boolean; readonly isPending: boolean; @@ -5307,10 +5250,11 @@ declare module '@polkadot/types/lookup' { readonly asSuccess: u32; readonly isRejected: boolean; readonly asRejected: u32; - readonly type: 'Unknown' | 'Pending' | 'Failed' | 'Success' | 'Rejected'; + readonly isLockedForExecution: boolean; + readonly type: 'Unknown' | 'Pending' | 'Failed' | 'Success' | 'Rejected' | 'LockedForExecution'; } - /** @name PolymeshPrimitivesSettlementMediatorAffirmationStatus (704) */ + /** @name PolymeshPrimitivesSettlementMediatorAffirmationStatus (686) */ interface PolymeshPrimitivesSettlementMediatorAffirmationStatus extends Enum { readonly isUnknown: boolean; readonly isPending: boolean; @@ -5321,7 +5265,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unknown' | 'Pending' | 'Affirmed'; } - /** @name PalletSettlementError (706) */ + /** @name PalletSettlementError (688) */ interface PalletSettlementError extends Enum { readonly isInvalidVenue: boolean; readonly isUnauthorized: boolean; @@ -5366,34 +5310,40 @@ declare module '@polkadot/types/lookup' { readonly isCallerIsNotAMediator: boolean; readonly isInvalidExpiryDate: boolean; readonly isMediatorAffirmationExpired: boolean; - readonly type: 'InvalidVenue' | 'Unauthorized' | 'InstructionNotAffirmed' | 'UnauthorizedSigner' | 'ReceiptAlreadyClaimed' | 'UnauthorizedVenue' | 'InstructionDatesInvalid' | 'InstructionSettleBlockPassed' | 'InvalidSignature' | 'SameSenderReceiver' | 'SettleOnPastBlock' | 'UnexpectedAffirmationStatus' | 'FailedToSchedule' | 'UnknownInstruction' | 'SignerAlreadyExists' | 'SignerDoesNotExist' | 'ZeroAmount' | 'InstructionSettleBlockNotReached' | 'CallerIsNotAParty' | 'MaxNumberOfNFTsExceeded' | 'NumberOfTransferredNFTsUnderestimated' | 'ReceiptForInvalidLegType' | 'WeightLimitExceeded' | 'MaxNumberOfFungibleAssetsExceeded' | 'MaxNumberOfOffChainAssetsExceeded' | 'NumberOfFungibleTransfersUnderestimated' | 'UnexpectedOFFChainAsset' | 'OffChainAssetCantBeLocked' | 'NumberOfOffChainTransfersUnderestimated' | 'LegNotFound' | 'InputWeightIsLessThanMinimum' | 'MaxNumberOfReceiptsExceeded' | 'NotAllAffirmationsHaveBeenReceived' | 'InvalidInstructionStatusForExecution' | 'FailedToReleaseLockOrTransferAssets' | 'DuplicateReceiptUid' | 'ReceiptInstructionIdMissmatch' | 'MultipleReceiptsForOneLeg' | 'UnexpectedLegStatus' | 'NumberOfVenueSignersExceeded' | 'CallerIsNotAMediator' | 'InvalidExpiryDate' | 'MediatorAffirmationExpired'; + readonly isOffChainAssetsMustHaveAVenue: boolean; + readonly isUnexpectedSettlementType: boolean; + readonly isInvalidInstructionStatusForRejection: boolean; + readonly isLockTimestampNotFound: boolean; + readonly isExceededMaximumLockingPeriod: boolean; + readonly isFailedAssetTransferringConditions: boolean; + readonly type: 'InvalidVenue' | 'Unauthorized' | 'InstructionNotAffirmed' | 'UnauthorizedSigner' | 'ReceiptAlreadyClaimed' | 'UnauthorizedVenue' | 'InstructionDatesInvalid' | 'InstructionSettleBlockPassed' | 'InvalidSignature' | 'SameSenderReceiver' | 'SettleOnPastBlock' | 'UnexpectedAffirmationStatus' | 'FailedToSchedule' | 'UnknownInstruction' | 'SignerAlreadyExists' | 'SignerDoesNotExist' | 'ZeroAmount' | 'InstructionSettleBlockNotReached' | 'CallerIsNotAParty' | 'MaxNumberOfNFTsExceeded' | 'NumberOfTransferredNFTsUnderestimated' | 'ReceiptForInvalidLegType' | 'WeightLimitExceeded' | 'MaxNumberOfFungibleAssetsExceeded' | 'MaxNumberOfOffChainAssetsExceeded' | 'NumberOfFungibleTransfersUnderestimated' | 'UnexpectedOFFChainAsset' | 'OffChainAssetCantBeLocked' | 'NumberOfOffChainTransfersUnderestimated' | 'LegNotFound' | 'InputWeightIsLessThanMinimum' | 'MaxNumberOfReceiptsExceeded' | 'NotAllAffirmationsHaveBeenReceived' | 'InvalidInstructionStatusForExecution' | 'FailedToReleaseLockOrTransferAssets' | 'DuplicateReceiptUid' | 'ReceiptInstructionIdMissmatch' | 'MultipleReceiptsForOneLeg' | 'UnexpectedLegStatus' | 'NumberOfVenueSignersExceeded' | 'CallerIsNotAMediator' | 'InvalidExpiryDate' | 'MediatorAffirmationExpired' | 'OffChainAssetsMustHaveAVenue' | 'UnexpectedSettlementType' | 'InvalidInstructionStatusForRejection' | 'LockTimestampNotFound' | 'ExceededMaximumLockingPeriod' | 'FailedAssetTransferringConditions'; } - /** @name PolymeshPrimitivesStatisticsStat1stKey (709) */ + /** @name PolymeshPrimitivesStatisticsStat1stKey (691) */ interface PolymeshPrimitivesStatisticsStat1stKey extends Struct { readonly assetId: PolymeshPrimitivesAssetAssetId; readonly statType: PolymeshPrimitivesStatisticsStatType; } - /** @name PolymeshPrimitivesTransferComplianceAssetTransferCompliance (710) */ + /** @name PolymeshPrimitivesTransferComplianceAssetTransferCompliance (692) */ interface PolymeshPrimitivesTransferComplianceAssetTransferCompliance extends Struct { readonly paused: bool; readonly requirements: BTreeSet; } - /** @name PalletStatisticsError (714) */ + /** @name PalletStatisticsError (696) */ interface PalletStatisticsError extends Enum { - readonly isInvalidTransfer: boolean; + readonly isInvalidTransferStatisticsFailure: boolean; readonly isStatTypeMissing: boolean; readonly isStatTypeNeededByTransferCondition: boolean; readonly isCannotRemoveStatTypeInUse: boolean; readonly isStatTypeLimitReached: boolean; readonly isTransferConditionLimitReached: boolean; readonly isWeightLimitExceeded: boolean; - readonly type: 'InvalidTransfer' | 'StatTypeMissing' | 'StatTypeNeededByTransferCondition' | 'CannotRemoveStatTypeInUse' | 'StatTypeLimitReached' | 'TransferConditionLimitReached' | 'WeightLimitExceeded'; + readonly type: 'InvalidTransferStatisticsFailure' | 'StatTypeMissing' | 'StatTypeNeededByTransferCondition' | 'CannotRemoveStatTypeInUse' | 'StatTypeLimitReached' | 'TransferConditionLimitReached' | 'WeightLimitExceeded'; } - /** @name PalletStoError (717) */ + /** @name PalletStoError (699) */ interface PalletStoError extends Enum { readonly isUnauthorized: boolean; readonly isOverflow: boolean; @@ -5407,17 +5357,19 @@ declare module '@polkadot/types/lookup' { readonly isInvalidOfferingWindow: boolean; readonly isMaxPriceExceeded: boolean; readonly isInvestmentAmountTooLow: boolean; - readonly type: 'Unauthorized' | 'Overflow' | 'InsufficientTokensRemaining' | 'FundraiserNotFound' | 'FundraiserNotLive' | 'FundraiserClosed' | 'FundraiserExpired' | 'InvalidVenue' | 'InvalidPriceTiers' | 'InvalidOfferingWindow' | 'MaxPriceExceeded' | 'InvestmentAmountTooLow'; + readonly isInvalidSignature: boolean; + readonly isOffchainFundingNotAllowed: boolean; + readonly type: 'Unauthorized' | 'Overflow' | 'InsufficientTokensRemaining' | 'FundraiserNotFound' | 'FundraiserNotLive' | 'FundraiserClosed' | 'FundraiserExpired' | 'InvalidVenue' | 'InvalidPriceTiers' | 'InvalidOfferingWindow' | 'MaxPriceExceeded' | 'InvestmentAmountTooLow' | 'InvalidSignature' | 'OffchainFundingNotAllowed'; } - /** @name PalletTreasuryError (718) */ + /** @name PalletTreasuryError (700) */ interface PalletTreasuryError extends Enum { readonly isInsufficientBalance: boolean; readonly isInvalidIdentity: boolean; readonly type: 'InsufficientBalance' | 'InvalidIdentity'; } - /** @name PalletUtilityError (719) */ + /** @name PalletUtilityError (701) */ interface PalletUtilityError extends Enum { readonly isTooManyCalls: boolean; readonly isInvalidSignature: boolean; @@ -5427,14 +5379,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'TooManyCalls' | 'InvalidSignature' | 'TargetCddMissing' | 'InvalidNonce' | 'UnableToDeriveAccountId'; } - /** @name PalletBaseError (720) */ + /** @name PalletBaseError (702) */ interface PalletBaseError extends Enum { readonly isTooLong: boolean; readonly isCounterOverflow: boolean; readonly type: 'TooLong' | 'CounterOverflow'; } - /** @name PalletExternalAgentsError (723) */ + /** @name PalletExternalAgentsError (705) */ interface PalletExternalAgentsError extends Enum { readonly isNoSuchAG: boolean; readonly isUnauthorizedAgent: boolean; @@ -5442,16 +5394,17 @@ declare module '@polkadot/types/lookup' { readonly isNotAnAgent: boolean; readonly isRemovingLastFullAgent: boolean; readonly isSecondaryKeyNotAuthorizedForAsset: boolean; - readonly type: 'NoSuchAG' | 'UnauthorizedAgent' | 'AlreadyAnAgent' | 'NotAnAgent' | 'RemovingLastFullAgent' | 'SecondaryKeyNotAuthorizedForAsset'; + readonly isBadAuthorizationType: boolean; + readonly type: 'NoSuchAG' | 'UnauthorizedAgent' | 'AlreadyAnAgent' | 'NotAnAgent' | 'RemovingLastFullAgent' | 'SecondaryKeyNotAuthorizedForAsset' | 'BadAuthorizationType'; } - /** @name PalletRelayerSubsidy (724) */ + /** @name PalletRelayerSubsidy (706) */ interface PalletRelayerSubsidy extends Struct { readonly payingKey: AccountId32; readonly remaining: u128; } - /** @name PalletRelayerError (725) */ + /** @name PalletRelayerError (707) */ interface PalletRelayerError extends Enum { readonly isUserKeyCddMissing: boolean; readonly isPayingKeyCddMissing: boolean; @@ -5460,26 +5413,20 @@ declare module '@polkadot/types/lookup' { readonly isNotAuthorizedForPayingKey: boolean; readonly isNotAuthorizedForUserKey: boolean; readonly isOverflow: boolean; - readonly type: 'UserKeyCddMissing' | 'PayingKeyCddMissing' | 'NoPayingKey' | 'NotPayingKey' | 'NotAuthorizedForPayingKey' | 'NotAuthorizedForUserKey' | 'Overflow'; - } - - /** @name PalletContractsWasmPrefabWasmModule (727) */ - interface PalletContractsWasmPrefabWasmModule extends Struct { - readonly instructionWeightsVersion: Compact; - readonly initial: Compact; - readonly maximum: Compact; - readonly code: Bytes; - readonly determinism: PalletContractsWasmDeterminism; + readonly isBadAuthorizationType: boolean; + readonly type: 'UserKeyCddMissing' | 'PayingKeyCddMissing' | 'NoPayingKey' | 'NotPayingKey' | 'NotAuthorizedForPayingKey' | 'NotAuthorizedForUserKey' | 'Overflow' | 'BadAuthorizationType'; } - /** @name PalletContractsWasmOwnerInfo (729) */ - interface PalletContractsWasmOwnerInfo extends Struct { + /** @name PalletContractsWasmCodeInfo (709) */ + interface PalletContractsWasmCodeInfo extends Struct { readonly owner: AccountId32; readonly deposit: Compact; readonly refcount: Compact; + readonly determinism: PalletContractsWasmDeterminism; + readonly codeLen: u32; } - /** @name PalletContractsStorageContractInfo (730) */ + /** @name PalletContractsStorageContractInfo (710) */ interface PalletContractsStorageContractInfo extends Struct { readonly trieId: Bytes; readonly depositAccount: AccountId32; @@ -5489,21 +5436,23 @@ declare module '@polkadot/types/lookup' { readonly storageByteDeposit: u128; readonly storageItemDeposit: u128; readonly storageBaseDeposit: u128; + readonly delegateDependencies: BTreeMap; } - /** @name PalletContractsStorageDeletedContract (733) */ - interface PalletContractsStorageDeletedContract extends Struct { - readonly trieId: Bytes; + /** @name PalletContractsStorageDeletionQueueManager (716) */ + interface PalletContractsStorageDeletionQueueManager extends Struct { + readonly insertCounter: u32; + readonly deleteCounter: u32; } - /** @name PalletContractsSchedule (735) */ + /** @name PalletContractsSchedule (718) */ interface PalletContractsSchedule extends Struct { readonly limits: PalletContractsScheduleLimits; readonly instructionWeights: PalletContractsScheduleInstructionWeights; readonly hostFnWeights: PalletContractsScheduleHostFnWeights; } - /** @name PalletContractsScheduleLimits (736) */ + /** @name PalletContractsScheduleLimits (719) */ interface PalletContractsScheduleLimits extends Struct { readonly eventTopics: u32; readonly globals: u32; @@ -5514,73 +5463,22 @@ declare module '@polkadot/types/lookup' { readonly brTableSize: u32; readonly subjectLen: u32; readonly payloadLen: u32; + readonly runtimeMemory: u32; } - /** @name PalletContractsScheduleInstructionWeights (737) */ + /** @name PalletContractsScheduleInstructionWeights (720) */ interface PalletContractsScheduleInstructionWeights extends Struct { - readonly version: u32; - readonly fallback: u32; - readonly i64const: u32; - readonly i64load: u32; - readonly i64store: u32; - readonly select: u32; - readonly r_if: u32; - readonly br: u32; - readonly brIf: u32; - readonly brTable: u32; - readonly brTablePerEntry: u32; - readonly call: u32; - readonly callIndirect: u32; - readonly callIndirectPerParam: u32; - readonly callPerLocal: u32; - readonly localGet: u32; - readonly localSet: u32; - readonly localTee: u32; - readonly globalGet: u32; - readonly globalSet: u32; - readonly memoryCurrent: u32; - readonly memoryGrow: u32; - readonly i64clz: u32; - readonly i64ctz: u32; - readonly i64popcnt: u32; - readonly i64eqz: u32; - readonly i64extendsi32: u32; - readonly i64extendui32: u32; - readonly i32wrapi64: u32; - readonly i64eq: u32; - readonly i64ne: u32; - readonly i64lts: u32; - readonly i64ltu: u32; - readonly i64gts: u32; - readonly i64gtu: u32; - readonly i64les: u32; - readonly i64leu: u32; - readonly i64ges: u32; - readonly i64geu: u32; - readonly i64add: u32; - readonly i64sub: u32; - readonly i64mul: u32; - readonly i64divs: u32; - readonly i64divu: u32; - readonly i64rems: u32; - readonly i64remu: u32; - readonly i64and: u32; - readonly i64or: u32; - readonly i64xor: u32; - readonly i64shl: u32; - readonly i64shrs: u32; - readonly i64shru: u32; - readonly i64rotl: u32; - readonly i64rotr: u32; - } - - /** @name PalletContractsScheduleHostFnWeights (738) */ + readonly base: u32; + } + + /** @name PalletContractsScheduleHostFnWeights (721) */ interface PalletContractsScheduleHostFnWeights extends Struct { readonly caller: SpWeightsWeightV2Weight; readonly isContract: SpWeightsWeightV2Weight; readonly codeHash: SpWeightsWeightV2Weight; readonly ownCodeHash: SpWeightsWeightV2Weight; readonly callerIsOrigin: SpWeightsWeightV2Weight; + readonly callerIsRoot: SpWeightsWeightV2Weight; readonly address: SpWeightsWeightV2Weight; readonly gasLeft: SpWeightsWeightV2Weight; readonly balance: SpWeightsWeightV2Weight; @@ -5589,7 +5487,6 @@ declare module '@polkadot/types/lookup' { readonly blockNumber: SpWeightsWeightV2Weight; readonly now: SpWeightsWeightV2Weight; readonly weightToFee: SpWeightsWeightV2Weight; - readonly gas: SpWeightsWeightV2Weight; readonly input: SpWeightsWeightV2Weight; readonly inputPerByte: SpWeightsWeightV2Weight; readonly r_return: SpWeightsWeightV2Weight; @@ -5632,14 +5529,18 @@ declare module '@polkadot/types/lookup' { readonly hashBlake2128PerByte: SpWeightsWeightV2Weight; readonly ecdsaRecover: SpWeightsWeightV2Weight; readonly ecdsaToEthAddress: SpWeightsWeightV2Weight; + readonly sr25519Verify: SpWeightsWeightV2Weight; + readonly sr25519VerifyPerByte: SpWeightsWeightV2Weight; readonly reentranceCount: SpWeightsWeightV2Weight; readonly accountReentranceCount: SpWeightsWeightV2Weight; readonly instantiationNonce: SpWeightsWeightV2Weight; + readonly addDelegateDependency: SpWeightsWeightV2Weight; + readonly removeDelegateDependency: SpWeightsWeightV2Weight; } - /** @name PalletContractsError (739) */ + /** @name PalletContractsError (722) */ interface PalletContractsError extends Enum { - readonly isInvalidScheduleVersion: boolean; + readonly isInvalidSchedule: boolean; readonly isInvalidCallFlags: boolean; readonly isOutOfGas: boolean; readonly isOutputBufferTooSmall: boolean; @@ -5648,6 +5549,7 @@ declare module '@polkadot/types/lookup' { readonly isContractNotFound: boolean; readonly isCodeTooLarge: boolean; readonly isCodeNotFound: boolean; + readonly isCodeInfoNotFound: boolean; readonly isOutOfBounds: boolean; readonly isDecodingFailed: boolean; readonly isContractTrapped: boolean; @@ -5657,7 +5559,6 @@ declare module '@polkadot/types/lookup' { readonly isRandomSubjectTooLong: boolean; readonly isTooManyTopics: boolean; readonly isNoChainExtension: boolean; - readonly isDeletionQueueFull: boolean; readonly isDuplicateContract: boolean; readonly isTerminatedInConstructor: boolean; readonly isReentranceDenied: boolean; @@ -5667,10 +5568,16 @@ declare module '@polkadot/types/lookup' { readonly isContractReverted: boolean; readonly isCodeRejected: boolean; readonly isIndeterministic: boolean; - readonly type: 'InvalidScheduleVersion' | 'InvalidCallFlags' | 'OutOfGas' | 'OutputBufferTooSmall' | 'TransferFailed' | 'MaxCallDepthReached' | 'ContractNotFound' | 'CodeTooLarge' | 'CodeNotFound' | 'OutOfBounds' | 'DecodingFailed' | 'ContractTrapped' | 'ValueTooLarge' | 'TerminatedWhileReentrant' | 'InputForwarded' | 'RandomSubjectTooLong' | 'TooManyTopics' | 'NoChainExtension' | 'DeletionQueueFull' | 'DuplicateContract' | 'TerminatedInConstructor' | 'ReentranceDenied' | 'StorageDepositNotEnoughFunds' | 'StorageDepositLimitExhausted' | 'CodeInUse' | 'ContractReverted' | 'CodeRejected' | 'Indeterministic'; + readonly isMigrationInProgress: boolean; + readonly isNoMigrationPerformed: boolean; + readonly isMaxDelegateDependenciesReached: boolean; + readonly isDelegateDependencyNotFound: boolean; + readonly isDelegateDependencyAlreadyExists: boolean; + readonly isCannotAddSelfAsDelegateDependency: boolean; + readonly type: 'InvalidSchedule' | 'InvalidCallFlags' | 'OutOfGas' | 'OutputBufferTooSmall' | 'TransferFailed' | 'MaxCallDepthReached' | 'ContractNotFound' | 'CodeTooLarge' | 'CodeNotFound' | 'CodeInfoNotFound' | 'OutOfBounds' | 'DecodingFailed' | 'ContractTrapped' | 'ValueTooLarge' | 'TerminatedWhileReentrant' | 'InputForwarded' | 'RandomSubjectTooLong' | 'TooManyTopics' | 'NoChainExtension' | 'DuplicateContract' | 'TerminatedInConstructor' | 'ReentranceDenied' | 'StorageDepositNotEnoughFunds' | 'StorageDepositLimitExhausted' | 'CodeInUse' | 'ContractReverted' | 'CodeRejected' | 'Indeterministic' | 'MigrationInProgress' | 'NoMigrationPerformed' | 'MaxDelegateDependenciesReached' | 'DelegateDependencyNotFound' | 'DelegateDependencyAlreadyExists' | 'CannotAddSelfAsDelegateDependency'; } - /** @name PolymeshContractsError (741) */ + /** @name PolymeshContractsError (724) */ interface PolymeshContractsError extends Enum { readonly isInvalidFuncId: boolean; readonly isInvalidRuntimeCall: boolean; @@ -5687,7 +5594,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidFuncId' | 'InvalidRuntimeCall' | 'ReadStorageFailed' | 'DataLeftAfterDecoding' | 'InLenTooLarge' | 'OutLenTooLarge' | 'InstantiatorWithNoIdentity' | 'RuntimeCallDenied' | 'CallerNotAPrimaryKey' | 'MissingKeyPermissions' | 'InvalidChainVersion' | 'NoUpgradesSupported'; } - /** @name PalletPreimageRequestStatus (742) */ + /** @name PalletPreimageRequestStatus (725) */ interface PalletPreimageRequestStatus extends Enum { readonly isUnrequested: boolean; readonly asUnrequested: { @@ -5703,7 +5610,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unrequested' | 'Requested'; } - /** @name PalletPreimageError (746) */ + /** @name PalletPreimageError (729) */ interface PalletPreimageError extends Enum { readonly isTooBig: boolean; readonly isAlreadyNoted: boolean; @@ -5714,13 +5621,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'TooBig' | 'AlreadyNoted' | 'NotAuthorized' | 'NotNoted' | 'Requested' | 'NotRequested'; } - /** @name PolymeshPrimitivesNftNftCollection (747) */ + /** @name PolymeshPrimitivesNftNftCollection (730) */ interface PolymeshPrimitivesNftNftCollection extends Struct { readonly id: u64; readonly assetId: PolymeshPrimitivesAssetAssetId; } - /** @name PalletNftError (752) */ + /** @name PalletNftError (734) */ interface PalletNftError extends Enum { readonly isBalanceOverflow: boolean; readonly isBalanceUnderflow: boolean; @@ -5749,23 +5656,25 @@ declare module '@polkadot/types/lookup' { readonly isInvalidNFTTransferInvalidReceiverCDD: boolean; readonly isInvalidNFTTransferInvalidSenderCDD: boolean; readonly isInvalidAssetId: boolean; - readonly type: 'BalanceOverflow' | 'BalanceUnderflow' | 'CollectionAlredyRegistered' | 'CollectionNotFound' | 'DuplicateMetadataKey' | 'DuplicatedNFTId' | 'InvalidAssetType' | 'InvalidMetadataAttribute' | 'InvalidNFTTransferCollectionNotFound' | 'InvalidNFTTransferSamePortfolio' | 'InvalidNFTTransferNFTNotOwned' | 'InvalidNFTTransferCountOverflow' | 'InvalidNFTTransferComplianceFailure' | 'InvalidNFTTransferFrozenAsset' | 'InvalidNFTTransferInsufficientCount' | 'MaxNumberOfKeysExceeded' | 'MaxNumberOfNFTsPerLegExceeded' | 'NftNotFound' | 'UnregisteredMetadataKey' | 'ZeroCount' | 'SupplyOverflow' | 'SupplyUnderflow' | 'InvalidNFTTransferNFTIsLocked' | 'InvalidNFTTransferSenderIdMatchesReceiverId' | 'InvalidNFTTransferInvalidReceiverCDD' | 'InvalidNFTTransferInvalidSenderCDD' | 'InvalidAssetId'; + readonly isNftIsLocked: boolean; + readonly isNumberOfKeysIsLessThanExpected: boolean; + readonly type: 'BalanceOverflow' | 'BalanceUnderflow' | 'CollectionAlredyRegistered' | 'CollectionNotFound' | 'DuplicateMetadataKey' | 'DuplicatedNFTId' | 'InvalidAssetType' | 'InvalidMetadataAttribute' | 'InvalidNFTTransferCollectionNotFound' | 'InvalidNFTTransferSamePortfolio' | 'InvalidNFTTransferNFTNotOwned' | 'InvalidNFTTransferCountOverflow' | 'InvalidNFTTransferComplianceFailure' | 'InvalidNFTTransferFrozenAsset' | 'InvalidNFTTransferInsufficientCount' | 'MaxNumberOfKeysExceeded' | 'MaxNumberOfNFTsPerLegExceeded' | 'NftNotFound' | 'UnregisteredMetadataKey' | 'ZeroCount' | 'SupplyOverflow' | 'SupplyUnderflow' | 'InvalidNFTTransferNFTIsLocked' | 'InvalidNFTTransferSenderIdMatchesReceiverId' | 'InvalidNFTTransferInvalidReceiverCDD' | 'InvalidNFTTransferInvalidSenderCDD' | 'InvalidAssetId' | 'NftIsLocked' | 'NumberOfKeysIsLessThanExpected'; } - /** @name PalletElectionProviderMultiPhaseReadySolution (753) */ + /** @name PalletElectionProviderMultiPhaseReadySolution (735) */ interface PalletElectionProviderMultiPhaseReadySolution extends Struct { readonly supports: Vec>; readonly score: SpNposElectionsElectionScore; readonly compute: PalletElectionProviderMultiPhaseElectionCompute; } - /** @name PalletElectionProviderMultiPhaseRoundSnapshot (755) */ + /** @name PalletElectionProviderMultiPhaseRoundSnapshot (737) */ interface PalletElectionProviderMultiPhaseRoundSnapshot extends Struct { readonly voters: Vec]>>; readonly targets: Vec; } - /** @name PalletElectionProviderMultiPhaseSignedSignedSubmission (761) */ + /** @name PalletElectionProviderMultiPhaseSignedSignedSubmission (743) */ interface PalletElectionProviderMultiPhaseSignedSignedSubmission extends Struct { readonly who: AccountId32; readonly deposit: u128; @@ -5773,7 +5682,7 @@ declare module '@polkadot/types/lookup' { readonly callFee: u128; } - /** @name PalletElectionProviderMultiPhaseError (762) */ + /** @name PalletElectionProviderMultiPhaseError (744) */ interface PalletElectionProviderMultiPhaseError extends Enum { readonly isPreDispatchEarlySubmission: boolean; readonly isPreDispatchWrongWinnerCount: boolean; @@ -5792,34 +5701,25 @@ declare module '@polkadot/types/lookup' { readonly type: 'PreDispatchEarlySubmission' | 'PreDispatchWrongWinnerCount' | 'PreDispatchWeakSubmission' | 'SignedQueueFull' | 'SignedCannotPayDeposit' | 'SignedInvalidWitness' | 'SignedTooMuchWeight' | 'OcwCallWrongEra' | 'MissingSnapshotMetadata' | 'InvalidSubmissionIndex' | 'CallNotAllowed' | 'FallbackFailed' | 'BoundNotMet' | 'TooManyWinners'; } - /** @name PalletTestUtilsError (763) */ - type PalletTestUtilsError = Null; - - /** @name FrameSystemExtensionsCheckSpecVersion (766) */ + /** @name FrameSystemExtensionsCheckSpecVersion (747) */ type FrameSystemExtensionsCheckSpecVersion = Null; - /** @name FrameSystemExtensionsCheckTxVersion (767) */ + /** @name FrameSystemExtensionsCheckTxVersion (748) */ type FrameSystemExtensionsCheckTxVersion = Null; - /** @name FrameSystemExtensionsCheckGenesis (768) */ + /** @name FrameSystemExtensionsCheckGenesis (749) */ type FrameSystemExtensionsCheckGenesis = Null; - /** @name FrameSystemExtensionsCheckNonce (771) */ + /** @name FrameSystemExtensionsCheckNonce (752) */ interface FrameSystemExtensionsCheckNonce extends Compact {} - /** @name PolymeshExtensionsCheckWeight (772) */ - interface PolymeshExtensionsCheckWeight extends FrameSystemExtensionsCheckWeight {} - - /** @name FrameSystemExtensionsCheckWeight (773) */ + /** @name FrameSystemExtensionsCheckWeight (753) */ type FrameSystemExtensionsCheckWeight = Null; - /** @name PalletTransactionPaymentChargeTransactionPayment (774) */ + /** @name PalletTransactionPaymentChargeTransactionPayment (754) */ interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} - /** @name PalletPermissionsStoreCallMetadata (775) */ + /** @name PalletPermissionsStoreCallMetadata (755) */ type PalletPermissionsStoreCallMetadata = Null; - /** @name PolymeshRuntimeDevelopRuntime (776) */ - type PolymeshRuntimeDevelopRuntime = Null; - } // declare module diff --git a/scripts/cli/src/util/offchain_worker_test.ts b/scripts/cli/src/util/offchain_worker_test.ts index a60760aa0e..375796207c 100644 --- a/scripts/cli/src/util/offchain_worker_test.ts +++ b/scripts/cli/src/util/offchain_worker_test.ts @@ -27,7 +27,7 @@ async function main(): Promise { // Add as secondary key to the existing did who wants to be a potential nominator await addSecondaryKeys(stash_nominators, controller_keys); await authorizeJoinToIdentities(stash_nominators, controller_keys); - await addNominator(controller_keys, stash_nominators, alice, validators_key); + await addNominator(stash_nominators, alice, validators_key); init.subscribeCddOffchainWorker(); } diff --git a/scripts/cli/util/offchain_worker_test.js b/scripts/cli/util/offchain_worker_test.js index 92aecc7daa..6a5b0d82f0 100644 --- a/scripts/cli/util/offchain_worker_test.js +++ b/scripts/cli/util/offchain_worker_test.js @@ -52,7 +52,7 @@ async function main() { await reqImports["authorizeJoinToIdentities"]( api, stash_nominators, nominator_dids, controller_keys); await reqImports["blockTillPoolEmpty"](api); - await addNominator(api, controller_keys, stash_nominators, testEntities[0], validators_key); + await addNominator(api, stash_nominators, testEntities[0], validators_key); await reqImports["blockTillPoolEmpty"](api); subscribeCddOffchainWorker(api); @@ -110,25 +110,19 @@ async function getExpiries(api, length) { return expiries; } -async function addNominator(api, controller, stash, from, validator) { +async function addNominator(api, stash, from, validator) { let transfer_amount = new BN(1).mul(new BN(10).pow(new BN(6))); let operators = [validator[0].address, validator[1].address]; let bond_amount = new BN(3).mul(new BN(10).pow(new BN(6))); // bond nominator first for (let i = 0; i < stash.length; i++) { - const tx = api.tx.staking.bond(controller[i].address, bond_amount, "Controller"); + const tx = api.tx.staking.bond(bond_amount, "Controller"); await reqImports["signAndSendTransaction"](tx, stash[i]); - } - await reqImports["blockTillPoolEmpty"](api); - // fund controller keys - await reqImports["distributePolyBatch"](api, controller, transfer_amount, from); - await reqImports["blockTillPoolEmpty"](api); - - for (let i = 0; i < controller.length; i++) { const tx = api.tx.staking.nominate(operators); - await reqImports["signAndSendTransaction"](tx, controller[i]); + await reqImports["signAndSendTransaction"](tx, stash[i]); } + await reqImports["blockTillPoolEmpty"](api); } async function subscribeCddOffchainWorker(api) { From 9a3c5ba4e9193e4af80a08eca2ccae05a67ef36c Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Tue, 7 Jan 2025 19:27:18 +0800 Subject: [PATCH 24/97] Update im-online. --- pallets/runtime/common/src/runtime.rs | 1 - pallets/runtime/develop/src/runtime.rs | 1 - pallets/runtime/mainnet/src/runtime.rs | 1 - pallets/runtime/testnet/src/runtime.rs | 1 - pallets/runtime/tests/src/storage.rs | 1 - 5 files changed, 5 deletions(-) diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 5450819ebb..d865a251a6 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -515,7 +515,6 @@ macro_rules! misc_pallet_impls { type WeightInfo = polymesh_weights::pallet_im_online::SubstrateWeight; type MaxKeys = MaxKeys; type MaxPeerInHeartbeats = MaxPeerInHeartbeats; - type MaxPeerDataEncodingSize = MaxPeerDataEncodingSize; } impl pallet_grandpa::Config for Runtime { diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index 38dfbfd48d..b210d62147 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -109,7 +109,6 @@ parameter_types! { pub const MaxAuthorities: u32 = 100_000; pub const MaxKeys: u32 = 10_000; pub const MaxPeerInHeartbeats: u32 = 10_000; - pub const MaxPeerDataEncodingSize: u32 = 1_000; // Assets: pub const AssetNameMaxLength: u32 = 128; diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index 1b91ff3672..8767bf01f7 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -106,7 +106,6 @@ parameter_types! { pub const MaxAuthorities: u32 = 100_000; pub const MaxKeys: u32 = 10_000; pub const MaxPeerInHeartbeats: u32 = 10_000; - pub const MaxPeerDataEncodingSize: u32 = 1_000; // Assets: pub const AssetNameMaxLength: u32 = 128; diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index 2352c36768..a240f7d80b 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -109,7 +109,6 @@ parameter_types! { pub const MaxAuthorities: u32 = 100_000; pub const MaxKeys: u32 = 10_000; pub const MaxPeerInHeartbeats: u32 = 10_000; - pub const MaxPeerDataEncodingSize: u32 = 1_000; // Assets: pub const AssetNameMaxLength: u32 = 128; diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index ee200a61c8..4e2fa5cd3b 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -224,7 +224,6 @@ parameter_types! { pub const MaxAuthorities: u32 = 100_000; pub const MaxKeys: u32 = 10_000; pub const MaxPeerInHeartbeats: u32 = 10_000; - pub const MaxPeerDataEncodingSize: u32 = 1_000; pub const ReportLongevity: u64 = BondingDuration::get() as u64 * SessionsPerEra::get() as u64 * EpochDuration::get(); pub const MaxNumberOfCollectionKeys: u8 = u8::MAX; From 86a02520e7a36b20ee08ef20afc02d1dadd8bb81 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Tue, 7 Jan 2025 21:35:23 +0800 Subject: [PATCH 25/97] Require serde. --- pallets/asset/src/types.rs | 6 ++--- pallets/common/Cargo.toml | 4 +-- pallets/common/src/protocol_fee.rs | 3 +-- pallets/contracts/src/chain_extension.rs | 6 ++--- pallets/corporate-actions/src/ballot/mod.rs | 19 +++++++------- .../corporate-actions/src/distribution/mod.rs | 5 ++-- pallets/group/rpc/runtime-api/Cargo.toml | 4 +-- pallets/group/rpc/runtime-api/src/lib.rs | 6 ++--- pallets/identity/src/keys.rs | 9 ++----- pallets/identity/src/types.rs | 14 +++++----- pallets/pips/src/types.rs | 17 ++++++------ .../protocol-fee/rpc/runtime-api/Cargo.toml | 4 +-- .../protocol-fee/rpc/runtime-api/src/lib.rs | 6 ++--- pallets/transaction-payment/src/lib.rs | 1 - pallets/validators/Cargo.toml | 4 +-- pallets/validators/src/types.rs | 6 ++--- primitives/Cargo.toml | 8 +++--- primitives/src/agent.rs | 7 +++-- primitives/src/asset.rs | 5 ++-- primitives/src/asset_metadata.rs | 21 +++++++-------- primitives/src/authorization.rs | 8 +++--- primitives/src/cdd_id.rs | 6 +---- primitives/src/compliance_manager.rs | 26 ++++++++++++------- primitives/src/condition.rs | 13 +++++----- primitives/src/document.rs | 14 +++++----- primitives/src/document_hash.rs | 3 --- primitives/src/event_only.rs | 5 ++-- primitives/src/identity.rs | 5 ++-- primitives/src/identity_claim.rs | 14 +++++----- primitives/src/identity_id.rs | 24 +++++++---------- primitives/src/jurisdiction.rs | 5 ++-- primitives/src/lib.rs | 15 +++++------ primitives/src/nft.rs | 5 ++-- primitives/src/secondary_key.rs | 19 +++++++------- primitives/src/settlement.rs | 11 ++++---- primitives/src/statistics.rs | 15 +++++------ primitives/src/subset.rs | 7 +++-- primitives/src/ticker.rs | 6 +---- primitives/src/transfer_compliance.rs | 7 +++-- .../src/deserialize_u8_strong_typed.rs | 2 +- rpc/Cargo.toml | 4 +-- rpc/runtime-api/Cargo.toml | 4 +-- rpc/runtime-api/src/pips.rs | 11 ++++---- src/chain_spec.rs | 5 ++-- 44 files changed, 174 insertions(+), 215 deletions(-) diff --git a/pallets/asset/src/types.rs b/pallets/asset/src/types.rs index 44534a3eee..d785a74592 100644 --- a/pallets/asset/src/types.rs +++ b/pallets/asset/src/types.rs @@ -1,8 +1,6 @@ -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; - use codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; +use serde::{Deserialize, Serialize}; use polymesh_primitives::asset::AssetType; use polymesh_primitives::{Balance, IdentityId}; @@ -64,7 +62,7 @@ pub struct TickerRegistration { } /// struct to store the ticker registration config. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive( Clone, Debug, diff --git a/pallets/common/Cargo.toml b/pallets/common/Cargo.toml index f78a935d4b..f3e67bc751 100644 --- a/pallets/common/Cargo.toml +++ b/pallets/common/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -serde = { version = "1.0.104", optional = true, default-features = false, features = ["derive"] } +serde = { version = "1.0.104", default-features = false, features = ["alloc", "derive"] } polymesh-primitives = { workspace = true, default-features = false } @@ -19,7 +19,7 @@ sp-std = { workspace = true, default-features = false } default = ["std"] std = [ - "serde", + "serde/std", "codec/std", "frame-support/std", "polymesh-primitives/std", diff --git a/pallets/common/src/protocol_fee.rs b/pallets/common/src/protocol_fee.rs index 03308f76e4..a57e9f1c23 100644 --- a/pallets/common/src/protocol_fee.rs +++ b/pallets/common/src/protocol_fee.rs @@ -16,13 +16,12 @@ use codec::{Decode, Encode, MaxEncodedLen}; use frame_support::dispatch::DispatchResult; use scale_info::TypeInfo; -#[cfg(feature = "std")] use serde::{Deserialize, Serialize}; /// Protocol fee operations. #[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub enum ProtocolOp { /// Fee charged when registering a new ticker. AssetRegisterTicker, diff --git a/pallets/contracts/src/chain_extension.rs b/pallets/contracts/src/chain_extension.rs index 42b1aee7cf..94d26f9c59 100644 --- a/pallets/contracts/src/chain_extension.rs +++ b/pallets/contracts/src/chain_extension.rs @@ -1,6 +1,3 @@ -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; - use codec::{Decode, DecodeLimit, Encode}; use frame_support::dispatch::{DispatchError, Dispatchable, GetDispatchInfo}; use frame_support::ensure; @@ -11,6 +8,7 @@ use frame_system::RawOrigin; use scale_info::prelude::format; use scale_info::prelude::string::String; use scale_info::TypeInfo; +use serde::{Deserialize, Serialize}; use sp_core::crypto::UncheckedFrom; use pallet_contracts::chain_extension as ce; @@ -27,7 +25,7 @@ const MAX_DECODE_DEPTH: u32 = 10; /// ExtrinsicId #[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct ExtrinsicId(u8, u8); diff --git a/pallets/corporate-actions/src/ballot/mod.rs b/pallets/corporate-actions/src/ballot/mod.rs index f58584a744..fbef4e637a 100644 --- a/pallets/corporate-actions/src/ballot/mod.rs +++ b/pallets/corporate-actions/src/ballot/mod.rs @@ -94,9 +94,8 @@ use polymesh_common_utilities::protocol_fee::{ChargeProtocolFee, ProtocolOp}; use polymesh_primitives::{storage_migration_ver, Balance, EventDid, IdentityId, Moment}; use polymesh_primitives_derive::VecU8StrongTyped; use scale_info::TypeInfo; +use serde::{Deserialize, Serialize}; use sp_runtime::traits::Zero; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; use sp_std::prelude::*; type Checkpoint = checkpoint::Pallet; @@ -104,25 +103,25 @@ type CA = ca::Pallet; type ExternalAgents = pallet_external_agents::Pallet; /// A wrapper for a motion title. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, PartialEq, Eq, Hash, Default, Debug)] pub struct MotionTitle(pub Vec); /// A wrapper for a motion info link. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, PartialEq, Eq, Hash, Default, Debug)] pub struct MotionInfoLink(pub Vec); /// A wrapper for a choice's title. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, PartialEq, Eq, Hash, Default, Debug)] pub struct ChoiceTitle(pub Vec); /// Details about motions -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Clone, PartialEq, Eq, Default, Debug, Encode, Decode, TypeInfo)] pub struct Motion { /// Title of the motion @@ -137,7 +136,7 @@ pub struct Motion { } /// A wrapper for a ballot's title. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, PartialEq, Eq, Hash, Debug, Default)] pub struct BallotTitle(pub Vec); @@ -149,7 +148,7 @@ pub struct BallotTitle(pub Vec); /// When the metadata has been committed to chain, /// the needed numbers aforementioned are cached away, /// and the metadata is not read on-chain again. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Clone, PartialEq, Eq, Debug, Encode, TypeInfo, Decode, Default)] pub struct BallotMeta { /// The ballot's title. @@ -168,7 +167,7 @@ impl BallotMeta { } /// Timestamp range details about vote start / end. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive( Copy, Clone, @@ -190,7 +189,7 @@ pub struct BallotTimeRange { } /// A vote cast on some choice in some motion in a ballot. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive( Copy, Clone, diff --git a/pallets/corporate-actions/src/distribution/mod.rs b/pallets/corporate-actions/src/distribution/mod.rs index 4a4100420f..b9f92cd205 100644 --- a/pallets/corporate-actions/src/distribution/mod.rs +++ b/pallets/corporate-actions/src/distribution/mod.rs @@ -81,9 +81,8 @@ use polymesh_primitives::{ EventDid, IdentityId, Moment, PortfolioId, PortfolioNumber, SecondaryKey, WeightMeter, }; use scale_info::TypeInfo; +use serde::{Deserialize, Serialize}; use sp_runtime::traits::Zero; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; use sp_std::prelude::*; storage_migration_ver!(1); @@ -101,7 +100,7 @@ pub const PER_SHARE_PRECISION: Balance = 1_000_000; /// A capital distribution's various details. /// /// All information contained is used by on-chain logic. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive( Copy, Clone, diff --git a/pallets/group/rpc/runtime-api/Cargo.toml b/pallets/group/rpc/runtime-api/Cargo.toml index 6e6acd1301..e861fd2d2f 100644 --- a/pallets/group/rpc/runtime-api/Cargo.toml +++ b/pallets/group/rpc/runtime-api/Cargo.toml @@ -12,7 +12,7 @@ targets = ["x86_64-unknown-linux-gnu"] polymesh-primitives = { workspace = true, default-features = false } # Others -serde = { version = "1.0.104", default-features = false, optional = true, features = ["derive"] } +serde = { version = "1.0.104", default-features = false, features = ["alloc", "derive"] } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } @@ -23,7 +23,7 @@ scale-info = { workspace = true, default-features = false, features = ["derive", [features] default = ["std"] std = [ - "serde", + "serde/std", "sp-api/std", "codec/std", "sp-std/std", diff --git a/pallets/group/rpc/runtime-api/src/lib.rs b/pallets/group/rpc/runtime-api/src/lib.rs index 2b448f0919..15a0cf4bce 100644 --- a/pallets/group/rpc/runtime-api/src/lib.rs +++ b/pallets/group/rpc/runtime-api/src/lib.rs @@ -6,13 +6,13 @@ use polymesh_primitives::{IdentityId, Moment}; use codec::{Decode, Encode}; use scale_info::TypeInfo; -#[cfg(feature = "std")] use serde::{Deserialize, Serialize}; use sp_std::{prelude::*, vec::Vec}; #[derive(Eq, PartialEq, Encode, Decode, TypeInfo)] -#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] -#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] pub struct Member { pub id: IdentityId, pub expiry_at: Option, diff --git a/pallets/identity/src/keys.rs b/pallets/identity/src/keys.rs index 9d63c9248e..a5b2bd2107 100644 --- a/pallets/identity/src/keys.rs +++ b/pallets/identity/src/keys.rs @@ -849,15 +849,11 @@ impl Pallet { } /// Registers the systematic issuer with its DID. - #[allow(dead_code)] - pub(crate) fn register_systematic_id(issuer: SystematicIssuers) - where - T::AccountId: core::fmt::Display, - { + pub(crate) fn register_systematic_id(issuer: SystematicIssuers) { let acc = issuer.as_pallet_id().into_account_truncating(); let id = issuer.as_id(); log::info!( - "Register Systematic id {} with account {} as {}", + "Register Systematic id {} with account {:?} as {}", issuer, acc, id @@ -867,7 +863,6 @@ impl Pallet { } /// Registers `primary_key` as `id` identity. - #[allow(dead_code)] pub(crate) fn do_register_id( primary_key: T::AccountId, id: IdentityId, diff --git a/pallets/identity/src/types.rs b/pallets/identity/src/types.rs index 6652f648ab..b7548a4211 100644 --- a/pallets/identity/src/types.rs +++ b/pallets/identity/src/types.rs @@ -3,10 +3,8 @@ use codec::{Decode, Encode, MaxEncodedLen}; use polymesh_primitives::{ClaimType, IdentityId, Permissions, Scope, SecondaryKey}; use scale_info::TypeInfo; -use sp_std::{prelude::*, vec::Vec}; - -#[cfg(feature = "std")] use serde::{Deserialize, Serialize}; +use sp_std::{prelude::*, vec::Vec}; pub type Error = Vec; pub type CddStatus = Result; @@ -18,8 +16,9 @@ pub fn zero_account_id() -> AccountId { /// A result of execution of get_votes. #[derive(Eq, PartialEq, Encode, Decode, TypeInfo)] -#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] -#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] pub enum RpcDidRecords { /// Id was found and has the following primary key and secondary keys. Success { @@ -31,7 +30,8 @@ pub enum RpcDidRecords { } #[derive(Encode, Decode, TypeInfo, MaxEncodedLen, PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] pub enum DidStatus { Unknown, Exists, @@ -40,7 +40,7 @@ pub enum DidStatus { /// Aggregate information about an `AccountId` in relation to an `IdentityId`. #[derive(Eq, PartialEq, Encode, Decode, TypeInfo)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct KeyIdentityData { /// The identity of the provided `AccountId`. pub identity: IdentityId, diff --git a/pallets/pips/src/types.rs b/pallets/pips/src/types.rs index af4fa36d6d..2f155f1c06 100644 --- a/pallets/pips/src/types.rs +++ b/pallets/pips/src/types.rs @@ -13,14 +13,12 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#[cfg(feature = "std")] -use serde::{Deserialize, Serialize}; - use codec::{Decode, Encode, MaxEncodedLen}; use core::cmp::Ordering; use frame_support::traits::schedule::{Priority, HARD_DEADLINE}; use frame_support::traits::LockIdentifier; use scale_info::TypeInfo; +use serde::{Deserialize, Serialize}; use sp_core::H256; use sp_std::convert::From; use sp_std::vec::Vec; @@ -48,7 +46,7 @@ pub(crate) const PIPS_LOCK_ID: LockIdentifier = *b"pips "; pub struct PipDescription(pub Vec); /// The global and unique identitifer of a Polymesh Improvement Proposal (PIP). -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Default, Debug)] pub struct PipId(pub u32); @@ -81,7 +79,8 @@ pub struct Pip { /// A result of execution of get_votes. -#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] #[derive(Decode, Encode, TypeInfo, MaxEncodedLen, Eq, PartialEq)] pub enum VoteCount { /// Proposal was found and has the following votes. @@ -167,7 +166,8 @@ pub struct VotingResult { } /// A "vote" or "signal" on a PIP to move it up or down the review queue. -#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] #[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Eq, PartialEq)] pub struct Vote( @@ -177,7 +177,8 @@ pub struct Vote( pub Balance, ); -#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] #[derive(Clone, Decode, Encode, Eq, PartialEq)] pub struct VoteByPip { pub pip: PipId, @@ -215,7 +216,7 @@ pub struct DepositInfo { } /// ID of the taken snapshot in a sequence. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd)] pub struct SnapshotId(pub u32); diff --git a/pallets/protocol-fee/rpc/runtime-api/Cargo.toml b/pallets/protocol-fee/rpc/runtime-api/Cargo.toml index 0b4e2a6f35..9e0e93f7c9 100644 --- a/pallets/protocol-fee/rpc/runtime-api/Cargo.toml +++ b/pallets/protocol-fee/rpc/runtime-api/Cargo.toml @@ -12,7 +12,7 @@ polymesh-common-utilities = { workspace = true, default-features = false } polymesh-primitives = { workspace = true, default-features = false } # General -serde = { version = "1.0.104", default-features = false, optional = true, features = ["derive"] } +serde = { version = "1.0.104", default-features = false, features = ["alloc", "derive"] } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } @@ -23,7 +23,7 @@ scale-info = { workspace = true, default-features = false, features = ["derive", [features] default = ["std"] std = [ - "serde", + "serde/std", "sp-api/std", "codec/std", "sp-runtime/std", diff --git a/pallets/protocol-fee/rpc/runtime-api/src/lib.rs b/pallets/protocol-fee/rpc/runtime-api/src/lib.rs index 94a98c0483..dbbe1ce6ce 100644 --- a/pallets/protocol-fee/rpc/runtime-api/src/lib.rs +++ b/pallets/protocol-fee/rpc/runtime-api/src/lib.rs @@ -20,15 +20,15 @@ use codec::{Decode, Encode}; use polymesh_common_utilities::protocol_fee::ProtocolOp; use scale_info::TypeInfo; -#[cfg(feature = "std")] use serde::{Deserialize, Serialize}; use sp_runtime::traits::{SaturatedConversion, UniqueSaturatedInto}; /// A capped version of `Balance` which is normally a `u128`, fit into `u64` which is a serializable /// type unlike `u128`. There are no fees that would not fit into `u64`. #[derive(Eq, PartialEq, Encode, Decode, TypeInfo)] -#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] -#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] pub struct CappedFee(pub u64); impl> From for CappedFee { diff --git a/pallets/transaction-payment/src/lib.rs b/pallets/transaction-payment/src/lib.rs index 2c78afb4f6..f6d8b0448d 100644 --- a/pallets/transaction-payment/src/lib.rs +++ b/pallets/transaction-payment/src/lib.rs @@ -394,7 +394,6 @@ pub mod pallet { pub _config: sp_std::marker::PhantomData, } - #[cfg(feature = "std")] impl Default for GenesisConfig { fn default() -> Self { Self { diff --git a/pallets/validators/Cargo.toml b/pallets/validators/Cargo.toml index 942f43ec88..334a54c8b1 100644 --- a/pallets/validators/Cargo.toml +++ b/pallets/validators/Cargo.toml @@ -13,7 +13,7 @@ pallet-staking = { workspace = true, default-features = false } # General static_assertions = "1.1.0" -serde = { version = "1.0.104", default-features = false, optional = true } +serde = { version = "1.0.104", default-features = false, features = ["alloc", "derive"] } log = "0.4.8" # Substrate @@ -48,7 +48,7 @@ no_std = [] std = [ "frame-benchmarking?/std", "polymesh-primitives/std", - "serde", + "serde/std", "codec/std", "sp-std/std", "sp-npos-elections/std", diff --git a/pallets/validators/src/types.rs b/pallets/validators/src/types.rs index d81d80c89f..0b45c8b8a8 100644 --- a/pallets/validators/src/types.rs +++ b/pallets/validators/src/types.rs @@ -1,9 +1,7 @@ -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; - use codec::{Decode, Encode, MaxEncodedLen}; use pallet_staking::WhoToSlash; use scale_info::TypeInfo; +use serde::{Deserialize, Serialize}; use sp_runtime::RuntimeDebug; /// Preference of an identity regarding validation. @@ -43,7 +41,7 @@ impl PermissionedIdentityPrefs { /// validators, both validators and nominators, or no-one. #[derive(Decode, Encode, MaxEncodedLen, RuntimeDebug, TypeInfo)] #[derive(Clone, Copy, Default, Eq, PartialEq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub enum SlashingSwitch { /// Allow validators but not nominators to get slashed. Validator, diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index 6537332caf..f5c5c0dc39 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -9,8 +9,8 @@ edition = "2021" [dependencies] chrono = { version = "0.4", default-features = false } -serde = { version = "1.0.104", optional = true, default-features = false, features = ["derive"] } -serde_bytes = { version = "0.11.14", optional = true, default-features = false } +serde = { version = "1.0.104", default-features = false, features = ["alloc", "derive"] } +serde_bytes = { version = "0.11.14", default-features = false, features = ["alloc"] } rand_core = { version = "0.6", default-features = false } rand = { version = "0.8", default-features = false, optional = true } rustc-hex = { version = "2.1.0", default-features = false } @@ -56,8 +56,8 @@ std = [ "codec/std", "frame-support/std", "frame-system/std", - "serde", - "serde_bytes", + "serde/std", + "serde_bytes/std", "sp-core/std", "sp-io/std", "sp-runtime-interface/std", diff --git a/primitives/src/agent.rs b/primitives/src/agent.rs index 48536de4de..b7361bd0c8 100644 --- a/primitives/src/agent.rs +++ b/primitives/src/agent.rs @@ -1,20 +1,19 @@ use crate::impl_checked_inc; use codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; /// A `Ticker`-local Agent Group ID. /// By *local*, we mean that the same number might be used for a different `Ticker` /// to uniquely identify a different Agent Group. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Debug)] pub struct AGId(pub u32); impl_checked_inc!(AGId); /// The available set of agent groups. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] pub enum AgentGroup { diff --git a/primitives/src/asset.rs b/primitives/src/asset.rs index 61906809fb..bab0fe46cb 100644 --- a/primitives/src/asset.rs +++ b/primitives/src/asset.rs @@ -13,8 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; @@ -26,7 +25,7 @@ use crate::ticker::Ticker; use polymesh_primitives_derive::VecU8StrongTyped; /// An unique asset identifier. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct AssetId([u8; 16]); diff --git a/primitives/src/asset_metadata.rs b/primitives/src/asset_metadata.rs index 9dec799470..d0bbbce78c 100644 --- a/primitives/src/asset_metadata.rs +++ b/primitives/src/asset_metadata.rs @@ -19,15 +19,14 @@ use codec::MaxEncodedLen; use codec::{Decode, DecodeAll, Encode}; use polymesh_primitives_derive::VecU8StrongTyped; use scale_info::{PortableRegistry, TypeInfo}; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use sp_std::prelude::Vec; /// Asset Metadata Name. #[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct AssetMetadataName(#[cfg_attr(feature = "std", serde(with = "serde_bytes"))] pub Vec); +#[derive(Serialize, Deserialize)] +pub struct AssetMetadataName(#[serde(with = "serde_bytes")] pub Vec); /// Asset Metadata Global Key. #[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] @@ -125,24 +124,22 @@ impl Default for AssetMetadataLockStatus { /// Asset Metadata description. #[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct AssetMetadataDescription( - #[cfg_attr(feature = "std", serde(with = "serde_bytes"))] pub Vec, -); +#[derive(Serialize, Deserialize)] +pub struct AssetMetadataDescription(#[serde(with = "serde_bytes")] pub Vec); /// Asset Metadata Specs. #[derive(Encode, Decode, TypeInfo)] #[derive(Clone, Debug, Default, PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct AssetMetadataSpec { /// Off-chain specs or documentation. - #[cfg_attr(feature = "std", serde(default))] + #[serde(default)] pub url: Option, /// Description of metadata type. - #[cfg_attr(feature = "std", serde(default))] + #[serde(default)] pub description: Option, /// Optional SCALE encoded `AssetMetadataTypeDef`. - #[cfg_attr(feature = "std", serde(with = "serde_bytes", default))] + #[serde(with = "serde_bytes", default)] pub type_def: Option>, } diff --git a/primitives/src/authorization.rs b/primitives/src/authorization.rs index 9ecbdbbf3c..e2d3e5b01f 100644 --- a/primitives/src/authorization.rs +++ b/primitives/src/authorization.rs @@ -15,7 +15,6 @@ use codec::{Decode, Encode}; use scale_info::TypeInfo; -#[cfg(feature = "std")] use serde::{Deserialize, Serialize}; use sp_std::prelude::*; @@ -27,7 +26,7 @@ use crate::{Balance, PortfolioId, Ticker}; /// Authorization data for two step processes. #[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub enum AuthorizationData { /// CDD provider's attestation to change primary key AttestPrimaryKeyRotation(IdentityId), @@ -78,7 +77,8 @@ impl AuthorizationData { /// Type of authorization. #[derive(Eq, PartialEq, Encode, Decode, TypeInfo, Clone)] -#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] pub enum AuthorizationType { /// CDD Authorization to rotate primary key. AttestPrimaryKeyRotation, @@ -104,7 +104,7 @@ pub enum AuthorizationType { /// Authorization struct #[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Debug)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct Authorization { /// Enum that contains authorization type and data pub authorization_data: AuthorizationData, diff --git a/primitives/src/cdd_id.rs b/primitives/src/cdd_id.rs index b577cb4166..f703fd3c31 100644 --- a/primitives/src/cdd_id.rs +++ b/primitives/src/cdd_id.rs @@ -1,16 +1,12 @@ use codec::{Decode, Encode}; use polymesh_primitives_derive::SliceU8StrongTyped; -#[cfg(feature = "std")] use polymesh_primitives_derive::{DeserializeU8StrongTyped, SerializeU8StrongTyped}; use scale_info::TypeInfo; /// A CDD ID only has meaning to the CDD provider that issues a CDD claim. #[derive(Encode, Decode, TypeInfo, SliceU8StrongTyped)] #[derive(Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] -#[cfg_attr( - feature = "std", - derive(SerializeU8StrongTyped, DeserializeU8StrongTyped) -)] +#[derive(SerializeU8StrongTyped, DeserializeU8StrongTyped)] pub struct CddId([u8; 32]); impl CddId { diff --git a/primitives/src/compliance_manager.rs b/primitives/src/compliance_manager.rs index b196dbed73..77c848aad2 100644 --- a/primitives/src/compliance_manager.rs +++ b/primitives/src/compliance_manager.rs @@ -16,13 +16,12 @@ use crate::condition::{conditions_total_counts, Condition}; use codec::{Decode, Encode}; use scale_info::TypeInfo; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use sp_std::prelude::*; /// A compliance requirement. /// All sender and receiver conditions of the same compliance requirement must be true in order to execute the transfer. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, Default, Clone, PartialEq, Eq, Debug)] pub struct ComplianceRequirement { /// List of sender conditions @@ -62,7 +61,8 @@ impl ComplianceRequirement { } /// A compliance requirement along with its evaluation result -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, Clone, PartialEq, Eq, Hash)] pub struct ComplianceRequirementResult { /// List of sender conditions @@ -88,7 +88,8 @@ impl From for ComplianceRequirementResult { } /// An individual condition along with its evaluation result -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, Clone, PartialEq, Eq, Hash)] pub struct ConditionResult { /// Condition being evaluated @@ -107,7 +108,8 @@ impl From for ConditionResult { } /// List of compliance requirements associated to an asset. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, Default, Clone, PartialEq, Eq)] pub struct AssetCompliance { /// This flag indicates if asset compliance should be enforced @@ -117,7 +119,8 @@ pub struct AssetCompliance { } /// Asset compliance and it's evaluation result. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, Clone, PartialEq, Eq, Hash)] pub struct AssetComplianceResult { /// This flag indicates if asset compliance should be enforced. @@ -143,7 +146,8 @@ impl From for AssetComplianceResult { } /// Holds detailed information for all asset's requirements. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo)] pub struct ComplianceReport { /// Set to `true` if any requirement is satisfied. @@ -180,7 +184,8 @@ impl ComplianceReport { } /// Holds the information for an individual asset requirement. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo)] pub struct RequirementReport { /// Set to `true` if all conditions are satisfied. @@ -226,7 +231,8 @@ impl RequirementReport { } /// Holds the information for an individual condition. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo)] pub struct ConditionReport { /// Set to `true` if the condition is satisfied. diff --git a/primitives/src/condition.rs b/primitives/src/condition.rs index 25a84acd01..1cbb41cb88 100644 --- a/primitives/src/condition.rs +++ b/primitives/src/condition.rs @@ -18,13 +18,12 @@ use codec::{Decode, Encode}; use core::iter; use either::Either; use scale_info::TypeInfo; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use sp_std::convert::TryInto; use sp_std::prelude::*; /// Defines a static / dynamic identity. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, Copy, Clone, PartialEq, Eq, Debug, Hash)] pub enum TargetIdentity { /// Matches any of the external agents of an asset. Resolved dynamically. @@ -35,7 +34,7 @@ pub enum TargetIdentity { /// It defines the type of condition supported, and the filter information we will use to evaluate as a /// predicate. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, Hash)] pub enum ConditionType { /// Condition to ensure that claim filter produces one claim. @@ -63,7 +62,7 @@ impl ConditionType { } /// Denotes the set of `ClaimType`s for which an issuer is trusted. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, Hash)] pub enum TrustedFor { /// Issuer is trusted for any `ClaimType`. @@ -73,7 +72,7 @@ pub enum TrustedFor { } /// A trusted issuer for a certain compliance `Condition` and what `ClaimType`s is trusted for. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, Hash)] pub struct TrustedIssuer { /// The issuer trusted for the `Condition` or for the `Ticker`, @@ -125,7 +124,7 @@ impl From for TrustedIssuer { } /// Type of claim requirements that a condition can have -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, Hash)] pub struct Condition { /// Type of condition. diff --git a/primitives/src/document.rs b/primitives/src/document.rs index e8e1a91e63..281bb25c78 100644 --- a/primitives/src/document.rs +++ b/primitives/src/document.rs @@ -18,38 +18,36 @@ use crate::{DocumentHash, Moment}; use codec::{Decode, Encode, MaxEncodedLen}; use polymesh_primitives_derive::VecU8StrongTyped; use scale_info::TypeInfo; -use sp_std::prelude::Vec; - -#[cfg(feature = "std")] use serde::{Deserialize, Serialize}; +use sp_std::prelude::Vec; /// The local, per-ticker, ID of an asset documentation. #[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct DocumentId(pub u32); /// A wrapper for a document name. #[derive(Decode, Encode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct DocumentName(pub Vec); /// A wrapper for a document URI. #[derive(Decode, Encode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct DocumentUri(pub Vec); /// A wrapper for a document's type. #[derive(Decode, Encode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct DocumentType(pub Vec); /// Represents a document associated with an asset #[derive(Decode, Encode, TypeInfo, Clone, Debug, Default, PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct Document { /// An URI where more details can be discovered. /// For example, this might link to an external `.pdf`. diff --git a/primitives/src/document_hash.rs b/primitives/src/document_hash.rs index 13f6585969..b24beaffbd 100644 --- a/primitives/src/document_hash.rs +++ b/primitives/src/document_hash.rs @@ -127,10 +127,8 @@ impl AsRef<[u8]> for DocumentHash { // Serde support // ====================== -#[cfg(feature = "std")] use serde::{de::Error as SerdeError, Deserialize, Deserializer, Serialize, Serializer}; -#[cfg(feature = "std")] impl Serialize for DocumentHash { #[inline] fn serialize(&self, serializer: S) -> Result @@ -141,7 +139,6 @@ impl Serialize for DocumentHash { } } -#[cfg(feature = "std")] impl<'de> Deserialize<'de> for DocumentHash { #[inline] fn deserialize(deserializer: D) -> Result diff --git a/primitives/src/event_only.rs b/primitives/src/event_only.rs index 71a4460cac..88784bd980 100644 --- a/primitives/src/event_only.rs +++ b/primitives/src/event_only.rs @@ -17,12 +17,11 @@ use codec::{Decode, Encode}; use scale_info::TypeInfo; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; /// A protective newtype around any type, /// signalling that the contained element is only for use by events. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo)] #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default, Debug)] pub struct EventOnly(T); diff --git a/primitives/src/identity.rs b/primitives/src/identity.rs index 849ae4e523..997c69cf4c 100644 --- a/primitives/src/identity.rs +++ b/primitives/src/identity.rs @@ -14,8 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; @@ -57,7 +56,7 @@ pub mod limits { /// Asset Identities don't have a primary key. #[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] #[derive(Clone, Debug, PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct DidRecord { /// The identity's primary key, if it has one. pub primary_key: Option, diff --git a/primitives/src/identity_claim.rs b/primitives/src/identity_claim.rs index 3b224f01e2..1b1a27dd56 100644 --- a/primitives/src/identity_claim.rs +++ b/primitives/src/identity_claim.rs @@ -18,20 +18,19 @@ use crate::{identity_id::IdentityId, impl_checked_inc, CddId, Moment}; use codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use sp_std::{convert::From, prelude::*}; use super::jurisdiction::CountryCode; /// The ID of a custom claim type. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Default, Clone, PartialEq, Eq, Debug, PartialOrd, Ord, Hash)] pub struct CustomClaimTypeId(pub u32); impl_checked_inc!(CustomClaimTypeId); -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo)] #[derive(Clone, PartialEq, Eq, Debug, PartialOrd, Ord, Hash)] /// The scope of a claim. @@ -74,7 +73,7 @@ impl Scope { } /// All possible claims in polymesh -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, Hash)] pub enum Claim { /// User is Accredited. @@ -139,7 +138,7 @@ impl Claim { } /// Claim type represent the claim without its data. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, PartialEq, Eq, Debug, PartialOrd, Ord, Hash)] pub enum ClaimType { @@ -166,7 +165,8 @@ pub enum ClaimType { } /// All information of a particular claim -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq)] pub struct IdentityClaim { /// Issuer of the claim diff --git a/primitives/src/identity_id.rs b/primitives/src/identity_id.rs index ee704a0c2e..653e4fec16 100644 --- a/primitives/src/identity_id.rs +++ b/primitives/src/identity_id.rs @@ -13,9 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#[cfg(feature = "std")] use polymesh_primitives_derive::{DeserializeU8StrongTyped, SerializeU8StrongTyped}; -#[cfg(feature = "std")] use serde::{Deserialize, Serialize}; use codec::{Decode, Encode, MaxEncodedLen}; @@ -36,7 +34,8 @@ const UUID_LEN: usize = 32usize; /// The record to initialize an identity in the chain spec. #[derive(Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Serialize, Deserialize)] pub struct GenesisIdentityRecord { /// Identity primary key. pub primary_key: Option, @@ -88,10 +87,7 @@ impl GenesisIdentityRecord { /// - "DID:poly:..." #[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] #[derive(Default, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)] -#[cfg_attr( - feature = "std", - derive(SerializeU8StrongTyped, DeserializeU8StrongTyped) -)] +#[derive(SerializeU8StrongTyped, DeserializeU8StrongTyped)] pub struct IdentityId(pub [u8; UUID_LEN]); /// Alias for `EventOnly`. @@ -229,13 +225,13 @@ impl Printable for IdentityId { /// default ones are nameless. #[derive(Decode, Encode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct PortfolioName(pub Vec); /// The unique ID of a non-default portfolio. #[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct PortfolioNumber(pub u64); impl Default for PortfolioNumber { @@ -253,13 +249,13 @@ impl From for PortfolioNumber { /// The kind of a portfolio. It can be either a default portfolio or a user-defined one. #[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub enum PortfolioKind { /// The default portfolio of a DID. - #[cfg_attr(feature = "std", serde(alias = "default"))] + #[serde(alias = "default")] Default, /// A user-defined portfolio of a DID. - #[cfg_attr(feature = "std", serde(alias = "user"))] + #[serde(alias = "user")] User(PortfolioNumber), } @@ -278,7 +274,7 @@ impl From> for PortfolioKind { /// The identification of a portfolio. Contains the [`IdentityId`] of the portfolio owner and the [`PortfolioKind`]. #[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct PortfolioId { /// The DID of the portfolio owner. pub did: IdentityId, @@ -325,7 +321,7 @@ impl PortfolioId { } /// Result of a portfolio validity check. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Decode, Encode, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] pub struct PortfolioValidityResult { /// Receiver portfolio is the same portfolio as the sender. diff --git a/primitives/src/jurisdiction.rs b/primitives/src/jurisdiction.rs index 5e37574919..4153ec0fe9 100644 --- a/primitives/src/jurisdiction.rs +++ b/primitives/src/jurisdiction.rs @@ -17,15 +17,14 @@ use codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use sp_std::prelude::*; macro_rules! country_codes { ( $([$discr:expr,$alpha2:ident, $alpha3:ident, $un:literal, $($extra:expr),*]),* $(,)? ) => { /// Existing country codes according to ISO-3166-1. #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Decode, Encode, MaxEncodedLen, TypeInfo, Hash)] - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + #[derive(Serialize, Deserialize)] pub enum CountryCode { $( $(#[doc=$extra])* diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index b93580f2cd..1e43a407c4 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -31,9 +31,8 @@ use frame_support::parameter_types; use frame_support::traits::Get; use polymesh_primitives_derive::{SliceU8StrongTyped, StringStrongTyped, VecU8StrongTyped}; use scale_info::TypeInfo; +use serde::{Deserialize, Serialize}; use sp_runtime::{generic, traits::BlakeTwo256, MultiSignature}; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; use sp_std::prelude::Vec; /// An index to a block. @@ -95,7 +94,7 @@ impl GetExtra for ConstSize {} TypeInfo, Debug )] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub enum MaybeBlock { /// Has a block number. Some(BlockNumber), @@ -120,7 +119,7 @@ impl> Add for MaybeBlock { } /// A positive coefficient: a pair of a numerator and a denominator. Defaults to `(1, 1)`. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] #[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] pub struct PosRatio(pub u32, pub u32); @@ -343,13 +342,13 @@ pub struct Memo(pub [u8; 32]); /// Url for linking to off-chain resources. #[derive(Decode, Encode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub struct Url(#[cfg_attr(feature = "std", serde(with = "serde_bytes"))] pub Vec); +#[derive(Serialize, Deserialize)] +pub struct Url(#[serde(with = "serde_bytes")] pub Vec); /// The name of a pallet. #[derive(Encode, Decode, TypeInfo, StringStrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct PalletName(pub String); impl PalletName { @@ -362,7 +361,7 @@ impl PalletName { /// The name of an extrinsic within a pallet. #[derive(Encode, Decode, TypeInfo, StringStrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct ExtrinsicName(pub String); impl ExtrinsicName { diff --git a/primitives/src/nft.rs b/primitives/src/nft.rs index 42512a0217..925dbac35b 100644 --- a/primitives/src/nft.rs +++ b/primitives/src/nft.rs @@ -1,5 +1,4 @@ use codec::MaxEncodedLen; -#[cfg(feature = "std")] use serde::{Deserialize, Serialize}; use codec::{Decode, Encode}; @@ -46,7 +45,7 @@ impl_checked_inc!(NFTCollectionId); PartialEq, TypeInfo )] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct NFTId(pub u64); impl_checked_inc!(NFTId); @@ -85,7 +84,7 @@ impl NFTCollection { /// Represent all NFT being transferred for a given [`AssetId`]. #[derive(Clone, Debug, Decode, Default, Encode, Eq, PartialEq, TypeInfo)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct NFTs { asset_id: AssetId, ids: Vec, diff --git a/primitives/src/secondary_key.rs b/primitives/src/secondary_key.rs index fbc49e53f9..a17a293c92 100644 --- a/primitives/src/secondary_key.rs +++ b/primitives/src/secondary_key.rs @@ -17,8 +17,7 @@ use crate::asset::AssetId; use crate::{ExtrinsicName, IdentityId, PalletName, PortfolioId, SubsetRestriction}; use codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use sp_std::{ cmp::{Ord, Ordering, PartialOrd}, collections::btree_map::BTreeMap, @@ -56,7 +55,7 @@ pub type ExtrinsicNames = SubsetRestriction; /// within a given pallet `pallet_name`. #[derive(Decode, Encode, TypeInfo)] #[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct PalletPermissions { /// A subset of function names within the pallet. pub extrinsics: ExtrinsicNames, @@ -104,7 +103,7 @@ impl PalletPermissions { /// Extrinsic permissions. #[derive(Decode, Encode, TypeInfo)] #[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub enum ExtrinsicPermissions { /// Allow the whole pallet. #[default] @@ -214,7 +213,7 @@ pub type PortfolioPermissions = SubsetRestriction; /// - `Permissions::default()`: full permissions. #[derive(Decode, Encode, TypeInfo)] #[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct Permissions { /// The subset of assets under management. pub asset: AssetPermissions, @@ -284,7 +283,7 @@ impl Permissions { /// Account key record. #[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] #[derive(Clone, Debug, PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub enum KeyRecord { /// Key is the primary key and has full permissions. /// @@ -350,11 +349,11 @@ impl KeyRecord { Debug, TypeInfo )] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub enum Signatory { - #[cfg_attr(feature = "std", serde(alias = "identity"))] + #[serde(alias = "identity")] Identity(IdentityId), - #[cfg_attr(feature = "std", serde(alias = "account"))] + #[serde(alias = "account")] Account(AccountId), } @@ -439,7 +438,7 @@ where /// A secondary key and its permissions. #[derive(Encode, Decode, TypeInfo)] #[derive(Clone, Debug, PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct SecondaryKey { /// The account key. pub key: AccountId, diff --git a/primitives/src/settlement.rs b/primitives/src/settlement.rs index 8ef3a96143..b90ac392d9 100644 --- a/primitives/src/settlement.rs +++ b/primitives/src/settlement.rs @@ -15,7 +15,6 @@ //! Shareable types. -#[cfg(feature = "std")] use serde::{Deserialize, Serialize}; use codec::alloc::string::ToString; @@ -160,7 +159,7 @@ pub struct LegId(pub u64); impl_checked_inc!(LegId); /// A global and unique instruction ID. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] #[derive(Clone, Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd)] pub struct InstructionId(pub u64); @@ -192,7 +191,7 @@ pub struct Instruction { } /// Defines a [`Leg`] (i.e the action of a settlement). -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Clone, Debug, Decode, Encode, Eq, PartialEq, TypeInfo)] pub enum Leg { /// Fungible token @@ -394,7 +393,7 @@ impl ReceiptDetails } /// Stores the number of fungible, non fungible and offchain transfers in a set of legs. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive( Clone, Copy, @@ -698,7 +697,7 @@ impl FilteredLegs { } /// Holds the [`AssetCount`] for both the sender and receiver side and the number of offchain assets. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive( Clone, Copy, @@ -759,7 +758,7 @@ impl AffirmationCount { /// Stores the number of fungible, non fungible and offchain assets in an instruction, the consumed weight for executing the instruction, /// and if executing the instruction would fail, the error thrown. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Decode, Encode, TypeInfo)] pub struct ExecuteInstructionInfo { /// Number of fungible tokens in the instruction. diff --git a/primitives/src/statistics.rs b/primitives/src/statistics.rs index e0e6153430..a4054d3cac 100644 --- a/primitives/src/statistics.rs +++ b/primitives/src/statistics.rs @@ -17,15 +17,14 @@ use crate::asset::AssetId; use crate::{Claim, ClaimType, CountryCode, IdentityId, Scope}; use codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use sp_std::{hash::Hash, hash::Hasher, ops::Deref, ops::DerefMut, prelude::*}; /// Transfer manager percentage pub type Percentage = sp_arithmetic::Permill; /// Stats Operation type. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum StatOpType { @@ -36,7 +35,7 @@ pub enum StatOpType { } /// The statistic type. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct StatType { @@ -158,7 +157,7 @@ impl From<&StatClaim> for Stat2ndKey { /// Stats supported claims. /// -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum StatClaim { @@ -212,7 +211,7 @@ pub mod v1 { pub type Percentage = HashablePermill; /// Wrapper around `sp_arithmetic::Permill` - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + #[derive(Serialize, Deserialize)] #[derive(Decode, Encode, TypeInfo)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, Ord, Default)] pub struct HashablePermill(pub sp_arithmetic::Permill); @@ -245,7 +244,7 @@ pub mod v1 { } /// Transfer managers that can be attached to a Token for compliance. - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + #[derive(Serialize, Deserialize)] #[derive(Decode, Encode, TypeInfo)] #[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] pub enum TransferManager { @@ -256,7 +255,7 @@ pub mod v1 { } /// Result of a transfer manager check. - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + #[derive(Serialize, Deserialize)] #[derive(Decode, Encode, TypeInfo)] #[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] pub struct TransferManagerResult { diff --git a/primitives/src/subset.rs b/primitives/src/subset.rs index f929629f19..d50d165955 100644 --- a/primitives/src/subset.rs +++ b/primitives/src/subset.rs @@ -16,8 +16,7 @@ use codec::{Decode, Encode}; use core::ops::Sub; use scale_info::TypeInfo; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use sp_std::{ collections::btree_set::BTreeSet, iter::{self, FromIterator}, @@ -25,7 +24,7 @@ use sp_std::{ /// Ordering in a lattice, for example, the lattice of subsets of a set. #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub enum LatticeOrdering { /// Inclusion of the first subset `A` into the second subset `B`. /// That is, `A ⊂ B`. @@ -50,7 +49,7 @@ pub trait LatticeOrd { /// considered to be bigger than any finite set of its elements. This is true for infinite /// sets. When talking about finite sets, we have to add that they are _open_. #[derive(Encode, Decode, TypeInfo, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub enum SubsetRestriction { /// No restrictions, the whole set. Whole, diff --git a/primitives/src/ticker.rs b/primitives/src/ticker.rs index d0b795bb09..d455c09ade 100644 --- a/primitives/src/ticker.rs +++ b/primitives/src/ticker.rs @@ -15,7 +15,6 @@ //! Ticker symbol use codec::{Decode, Encode, MaxEncodedLen}; -#[cfg(feature = "std")] use polymesh_primitives_derive::{DeserializeU8StrongTyped, SerializeU8StrongTyped}; use scale_info::TypeInfo; @@ -31,10 +30,7 @@ pub const TICKER_LEN: usize = 12; /// representation using [`Ticker::canonize`]. #[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr( - feature = "std", - derive(SerializeU8StrongTyped, DeserializeU8StrongTyped) -)] +#[derive(SerializeU8StrongTyped, DeserializeU8StrongTyped)] pub struct Ticker([u8; TICKER_LEN]); impl Default for Ticker { diff --git a/primitives/src/transfer_compliance.rs b/primitives/src/transfer_compliance.rs index fe92f5e08f..dc439fdabe 100644 --- a/primitives/src/transfer_compliance.rs +++ b/primitives/src/transfer_compliance.rs @@ -19,12 +19,11 @@ use crate::{ClaimType, IdentityId}; use codec::{Decode, Encode, MaxEncodedLen}; use frame_support::{pallet_prelude::Get, BoundedBTreeSet}; use scale_info::TypeInfo; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use sp_std::prelude::*; /// Transfer condition. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum TransferCondition { @@ -94,7 +93,7 @@ impl From for TransferCondition { } /// Result of a transfer condition check. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] #[derive(Decode, Encode, TypeInfo)] #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct TransferConditionResult { diff --git a/primitives_derive/src/deserialize_u8_strong_typed.rs b/primitives_derive/src/deserialize_u8_strong_typed.rs index 4b51bd5386..e87ea0b692 100644 --- a/primitives_derive/src/deserialize_u8_strong_typed.rs +++ b/primitives_derive/src/deserialize_u8_strong_typed.rs @@ -12,7 +12,7 @@ pub(crate) fn impl_deserialize_u8_strong_typed(ast: &syn::DeriveInput) -> TokenS { let r = sp_core::bytes::deserialize(deserializer)?; Decode::decode(&mut &r[..]) - .map_err(|e| serde::de::Error::custom(format!("Decode error: {}", e))) + .map_err(|e| serde::de::Error::custom(scale_info::prelude::format!("Decode error: {}", e))) } } }; diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 9ab5272b31..78b6f27b38 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -31,7 +31,7 @@ pallet-identity = { workspace = true, default-features = false } pallet-transaction-payment = { workspace = true, default-features = false } # Others -serde = { version = "1.0.104", default-features = false, optional = true, features = ["derive"] } +serde = { version = "1.0.104", default-features = false, features = ["alloc", "derive"] } [features] default = ["std"] @@ -45,7 +45,7 @@ std = [ "pallet-portfolio/std", "pallet-transaction-payment/std", "polymesh-primitives/std", - "serde", + "serde/std", "sp-api/std", "sp-core/std", "sp-runtime/std", diff --git a/rpc/runtime-api/Cargo.toml b/rpc/runtime-api/Cargo.toml index 5d3cc2abe7..fa706507b8 100644 --- a/rpc/runtime-api/Cargo.toml +++ b/rpc/runtime-api/Cargo.toml @@ -25,7 +25,7 @@ pallet-identity = { workspace = true, default-features = false } pallet-transaction-payment = { workspace = true, default-features = false } # Other -serde = { version = "1.0.104", default-features = false, optional = true, features = ["derive"] } +serde = { version = "1.0.104", default-features = false, features = ["alloc", "derive"] } [dev-dependencies] serde_json = "1.0.41" @@ -42,7 +42,7 @@ std = [ "pallet-portfolio/std", "pallet-transaction-payment/std", "polymesh-primitives/std", - "serde", + "serde/std", "sp-api/std", "sp-runtime/std", "sp-std/std", diff --git a/rpc/runtime-api/src/pips.rs b/rpc/runtime-api/src/pips.rs index 8d97279905..edd0237b07 100644 --- a/rpc/runtime-api/src/pips.rs +++ b/rpc/runtime-api/src/pips.rs @@ -27,12 +27,12 @@ pub mod capped { use codec::{Decode, Encode}; use sp_runtime::traits::SaturatedConversion; - #[cfg(feature = "std")] use serde::{Deserialize, Serialize}; #[derive(Eq, PartialEq, Encode, Decode)] - #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] - #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] + #[cfg_attr(feature = "std", derive(Debug))] + #[derive(Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] pub enum VoteCount { /// Proposal was found and has the following votes. ProposalFound { @@ -58,8 +58,9 @@ pub mod capped { } #[derive(Eq, PartialEq)] - #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] - #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] + #[cfg_attr(feature = "std", derive(Debug))] + #[derive(Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] pub enum Vote { Yes(u64), No(u64), diff --git a/src/chain_spec.rs b/src/chain_spec.rs index fdc0720878..5adf115c92 100644 --- a/src/chain_spec.rs +++ b/src/chain_spec.rs @@ -14,14 +14,13 @@ use polymesh_primitives::{ use sc_chain_spec::{ChainSpecExtension, ChainType}; use sc_service::Properties; use sc_telemetry::TelemetryEndpoints; +use serde::{Deserialize, Serialize}; use serde_json::json; use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; use sp_consensus_babe::AuthorityId as BabeId; use sp_core::{sr25519, Pair, Public}; use sp_runtime::traits::{AccountIdConversion, IdentifyAccount, Verify}; use sp_runtime::PerThing; -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; use std::convert::TryInto; // The URL for the telemetry server. @@ -147,7 +146,7 @@ fn ticker_registration_config() -> TickerRegistrationConfig { fn currency_codes() -> Vec { // Fiat Currency Struct - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + #[derive(Serialize, Deserialize)] #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] pub struct FiatCurrency { pub codes: Vec, From fb53bb4b96e43e7c3bc656c3e11c858bd65e5f56 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Tue, 7 Jan 2025 23:19:51 +0800 Subject: [PATCH 26/97] no_std GenesisConfig. --- pallets/contracts/src/lib.rs | 3 +-- pallets/group/src/lib.rs | 13 ++----------- pallets/protocol-fee/src/lib.rs | 2 +- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/pallets/contracts/src/lib.rs b/pallets/contracts/src/lib.rs index 17e88fe310..f286042239 100644 --- a/pallets/contracts/src/lib.rs +++ b/pallets/contracts/src/lib.rs @@ -65,7 +65,6 @@ use frame_support::traits::Get; use frame_support::weights::Weight; use frame_system::ensure_root; use frame_system::ensure_signed; -#[cfg(feature = "std")] use pallet_contracts::Determinism; use scale_info::TypeInfo; use sp_core::crypto::UncheckedFrom; @@ -425,7 +424,7 @@ pub mod pallet { Determinism::Enforced, ) .unwrap(); - log::info!("Uploaded upgradeable code: {}", code_result.code_hash); + log::info!("Uploaded upgradeable code: {:?}", code_result.code_hash); let api_code_hash = ApiCodeHash::new(code_result.code_hash); let api = Api::new(self.upgradable_description, self.upgradable_major); CurrentApiHash::::insert(&api, &api_code_hash); diff --git a/pallets/group/src/lib.rs b/pallets/group/src/lib.rs index 79b30a7887..ab6e6603b3 100644 --- a/pallets/group/src/lib.rs +++ b/pallets/group/src/lib.rs @@ -200,23 +200,14 @@ pub mod pallet { pub type ActiveMembersLimit, I: 'static = ()> = StorageValue<_, u32, ValueQuery>; #[pallet::genesis_config] + #[derive(frame_support::DefaultNoBound)] pub struct GenesisConfig, I: 'static = ()> { pub active_members_limit: u32, pub active_members: Vec, + #[serde(skip)] pub phantom: PhantomData<(T, I)>, } - #[cfg(feature = "std")] - impl, I: 'static> Default for GenesisConfig { - fn default() -> Self { - Self { - active_members_limit: 0, - active_members: vec![], - phantom: Default::default(), - } - } - } - #[pallet::genesis_build] impl, I: 'static> BuildGenesisConfig for GenesisConfig { fn build(&self) { diff --git a/pallets/protocol-fee/src/lib.rs b/pallets/protocol-fee/src/lib.rs index 9949a3bea0..406f11c9b5 100644 --- a/pallets/protocol-fee/src/lib.rs +++ b/pallets/protocol-fee/src/lib.rs @@ -51,7 +51,7 @@ use polymesh_primitives::{ Balance, IdentityId, PosRatio, GC_DID, }; use sp_runtime::{traits::Zero, Perbill}; -use sp_std::vec; +use sp_std::vec::Vec; type NegativeImbalanceOf = <::Currency as Currency< ::AccountId, From 8191835fab7d2695eb138a26af8e35c96bd77840 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Wed, 8 Jan 2025 01:13:42 +0800 Subject: [PATCH 27/97] Update node binary service/command code. --- node-rpc/Cargo.toml | 1 - node-rpc/src/lib.rs | 46 ++++++-------- src/command.rs | 12 +--- src/service.rs | 152 ++++++++++++++++++++++++-------------------- 4 files changed, 107 insertions(+), 104 deletions(-) diff --git a/node-rpc/Cargo.toml b/node-rpc/Cargo.toml index 85b6c48d6a..21e3f84c76 100644 --- a/node-rpc/Cargo.toml +++ b/node-rpc/Cargo.toml @@ -21,7 +21,6 @@ sc-chain-spec = { workspace = true } sc-client-api = { workspace = true } sc-consensus-babe = { workspace = true } sc-consensus-babe-rpc = { workspace = true } -sc-consensus-epochs = { workspace = true } sc-consensus-grandpa = { workspace = true } sc-consensus-grandpa-rpc = { workspace = true } sc-rpc = { workspace = true } diff --git a/node-rpc/src/lib.rs b/node-rpc/src/lib.rs index b437cc7ad3..fe66c2007b 100644 --- a/node-rpc/src/lib.rs +++ b/node-rpc/src/lib.rs @@ -35,8 +35,7 @@ use std::sync::Arc; use jsonrpsee::RpcModule; use polymesh_primitives::{AccountId, Block, BlockNumber, Hash, IdentityId, Moment, Nonce, Ticker}; use sc_client_api::AuxStore; -use sc_consensus_babe::{BabeConfiguration, Epoch}; -use sc_consensus_epochs::SharedEpochChanges; +use sc_consensus_babe::BabeWorkerHandle; use sc_consensus_grandpa::{ FinalityProofProvider, GrandpaJustificationStream, SharedAuthoritySet, SharedVoterState, }; @@ -48,16 +47,14 @@ use sp_block_builder::BlockBuilder; use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}; use sp_consensus::SelectChain; use sp_consensus_babe::BabeApi; -use sp_keystore::SyncCryptoStorePtr; +use sp_keystore::KeystorePtr; /// Extra dependencies for BABE. pub struct BabeDeps { - /// BABE protocol config. - pub babe_config: BabeConfiguration, - /// BABE pending epoch changes. - pub shared_epoch_changes: SharedEpochChanges, + /// A handle to the BABE worker for issuing requests. + pub babe_worker_handle: BabeWorkerHandle, /// The keystore that manages the keys of the node. - pub keystore: SyncCryptoStorePtr, + pub keystore: KeystorePtr, } /// Extra dependencies for GRANDPA @@ -90,12 +87,22 @@ pub struct FullDeps { pub babe: BabeDeps, /// GRANDPA specific dependencies. pub grandpa: GrandpaDeps, + /// The backend used by the node. + pub backend: Arc, } /// Instantiate all Full RPC extensions. pub fn create_full( - deps: FullDeps, - _backend: Arc, + FullDeps { + client, + pool, + select_chain, + chain_spec, + deny_unsafe, + babe, + grandpa, + backend: _, + }: FullDeps, ) -> Result, Box> where C: ProvideRuntimeApi @@ -120,7 +127,7 @@ where P: TransactionPool + 'static, SC: SelectChain + 'static, B: sc_client_api::Backend + Send + Sync + 'static, - B::State: sc_client_api::backend::StateBackend>, + B::State: sc_client_api::backend::StateBackend>, { use node_rpc::{ asset::{Asset, AssetApiServer}, @@ -140,20 +147,10 @@ where use substrate_frame_rpc_system::{System, SystemApiServer}; let mut io = RpcModule::new(()); - let FullDeps { - client, - pool, - select_chain, - chain_spec, - deny_unsafe, - babe, - grandpa, - } = deps; let BabeDeps { keystore, - babe_config, - shared_epoch_changes, + babe_worker_handle, } = babe; let GrandpaDeps { shared_voter_state, @@ -177,9 +174,8 @@ where io.merge( Babe::new( client.clone(), - shared_epoch_changes.clone(), + babe_worker_handle.clone(), keystore, - babe_config, select_chain, deny_unsafe, ) @@ -201,7 +197,7 @@ where chain_spec, client.clone(), shared_authority_set, - shared_epoch_changes, + babe_worker_handle, )? .into_rpc(), )?; diff --git a/src/command.rs b/src/command.rs index cb1b3505a5..b6d26cd122 100644 --- a/src/command.rs +++ b/src/command.rs @@ -24,7 +24,7 @@ use crate::service::{ TestnetExecutor, }; use frame_benchmarking_cli::*; -use sc_cli::{ChainSpec, Result, RuntimeVersion, SubstrateCli}; +use sc_cli::{Result, SubstrateCli}; use sc_service::{Configuration, TaskManager}; use sp_keyring::Sr25519Keyring; @@ -103,14 +103,6 @@ impl SubstrateCli for Cli { } }) } - - fn native_runtime_version(chain_spec: &Box) -> &'static RuntimeVersion { - match chain_spec.network() { - Network::Testnet => &polymesh_runtime_testnet::runtime::VERSION, - Network::Mainnet => &polymesh_runtime_mainnet::runtime::VERSION, - Network::Other => &polymesh_runtime_develop::runtime::VERSION, - } - } } /// Parses Polymesh specific CLI arguments and run the service. @@ -216,7 +208,7 @@ pub fn run() -> Result<()> { .into()); } - cmd.run::(config) + cmd.run::(config) } (BenchmarkCmd::Block(cmd), Network::Other) => { let FullServiceComponents { client, .. } = diff --git a/src/service.rs b/src/service.rs index 001e18ca48..6be6072664 100644 --- a/src/service.rs +++ b/src/service.rs @@ -1,30 +1,27 @@ //! Service and ServiceFactory implementation. Specialized wrapper over substrate service. -use futures::stream::StreamExt; +use futures::prelude::*; use polymesh_node_rpc as node_rpc; -pub use polymesh_primitives::{ - AccountId, Balance, Block, IdentityId, Nonce, Moment, Ticker, -}; +pub use polymesh_primitives::{AccountId, Balance, Block, IdentityId, Moment, Nonce, Ticker}; pub use polymesh_runtime_develop; pub use polymesh_runtime_mainnet; pub use polymesh_runtime_testnet; use prometheus_endpoint::Registry; -use sc_client_api::BlockBackend; - +use sc_client_api::{Backend, BlockBackend}; use sc_consensus_slots::SlotProportion; use sc_executor::NativeElseWasmExecutor; -pub use sc_executor::NativeExecutionDispatch; -use sc_network::NetworkService; -use sc_network_common::{protocol::event::Event, service::NetworkEventStream}; +use sc_executor::NativeExecutionDispatch; +use sc_network::{event::Event, NetworkEventStream, NetworkService}; +use sc_network_sync::SyncingService; use sc_service::{ config::Configuration, error::Error as ServiceError, RpcHandlers, TaskManager, WarpSyncParams, }; -pub use sc_service::{config::PrometheusConfig, ChainSpec, Error}; +use sc_service::{config::PrometheusConfig, ChainSpec, Error}; use sc_telemetry::{Telemetry, TelemetryWorker}; -pub use sp_api::ConstructRuntimeApi; - -pub use sp_runtime::traits::BlakeTwo256; +use sc_transaction_pool_api::OffchainTransactionPoolFactory; +use sp_api::ConstructRuntimeApi; +use sp_runtime::traits::BlakeTwo256; use sp_runtime::traits::Block as BlockT; use std::sync::Arc; @@ -70,12 +67,12 @@ macro_rules! native_executor_instance { } #[cfg(feature = "runtime-benchmarks")] -type EHF = ( +pub type EHF = ( frame_benchmarking::benchmarking::HostFunctions, polymesh_primitives::crypto::native_schnorrkel::HostFunctions, ); #[cfg(not(feature = "runtime-benchmarks"))] -type EHF = (); +pub type EHF = (); native_executor_instance!(GeneralExecutor, polymesh_runtime_develop, EHF); native_executor_instance!(TestnetExecutor, polymesh_runtime_testnet, ()); @@ -168,6 +165,10 @@ pub type FullServiceComponents = sc_service::PartialComponents< type FullBabeBlockImport = sc_consensus_babe::BabeBlockImport, FullGrandpaBlockImport>; +/// The minimum period of blocks on which justifications will be +/// imported and generated. +const GRANDPA_JUSTIFICATION_PERIOD: u32 = 512; + pub fn new_partial( config: &mut Configuration, ) -> Result< @@ -199,12 +200,7 @@ where }) .transpose()?; - let executor = NativeElseWasmExecutor::::new( - config.wasm_method, - config.default_heap_pages, - config.max_runtime_instances, - config.runtime_cache_size, - ); + let executor = sc_service::new_native_or_wasm_executor(&config); let (client, backend, keystore_container, task_manager) = sc_service::new_full_parts::>( @@ -233,6 +229,7 @@ where let (grandpa_block_import, grandpa_link) = grandpa::block_import( client.clone(), + GRANDPA_JUSTIFICATION_PERIOD, &(client.clone() as Arc<_>), select_chain.clone(), telemetry.as_ref().map(|x| x.handle()), @@ -246,32 +243,35 @@ where )?; let slot_duration = babe_link.config().slot_duration(); - let import_queue = sc_consensus_babe::import_queue( - babe_link.clone(), - block_import.clone(), - Some(Box::new(justification_import)), - client.clone(), - select_chain.clone(), - move |_, ()| async move { - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + let (import_queue, babe_worker_handle) = sc_consensus_babe::import_queue( + sc_consensus_babe::ImportQueueParams { + link: babe_link.clone(), + block_import: block_import.clone(), + justification_import: Some(Box::new(justification_import)), + client: client.clone(), + select_chain: select_chain.clone(), + create_inherent_data_providers: move |_, ()| async move { + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); - let slot = + let slot = sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration( *timestamp, slot_duration, ); - Ok((slot, timestamp)) + Ok((slot, timestamp)) + }, + spawner: &task_manager.spawn_essential_handle(), + registry: config.prometheus_registry(), + telemetry: telemetry.as_ref().map(|x| x.handle()), + offchain_tx_pool_factory: OffchainTransactionPoolFactory::new(transaction_pool.clone()), }, - &task_manager.spawn_essential_handle(), - config.prometheus_registry(), - telemetry.as_ref().map(|x| x.handle()), )?; let import_setup = (block_import, grandpa_link, babe_link); let (rpc_extensions_builder, rpc_setup) = { - let (_, grandpa_link, babe_link) = &import_setup; + let (_, grandpa_link, _) = &import_setup; let justification_stream = grandpa_link.justification_stream(); let shared_authority_set = grandpa_link.shared_authority_set().clone(); @@ -283,13 +283,10 @@ where Some(shared_authority_set.clone()), ); - let babe_config = babe_link.config().clone(); - let shared_epoch_changes = babe_link.epoch_changes().clone(); - let client = client.clone(); let pool = transaction_pool.clone(); let select_chain = select_chain.clone(); - let keystore = keystore_container.sync_keystore(); + let keystore = keystore_container.keystore(); let chain_spec = config.chain_spec.cloned_box(); let rpc_backend = backend.clone(); @@ -301,9 +298,8 @@ where chain_spec: chain_spec.cloned_box(), deny_unsafe, babe: node_rpc::BabeDeps { - babe_config: babe_config.clone(), - shared_epoch_changes: shared_epoch_changes.clone(), keystore: keystore.clone(), + babe_worker_handle: babe_worker_handle.clone(), }, grandpa: node_rpc::GrandpaDeps { shared_voter_state: shared_voter_state.clone(), @@ -312,9 +308,10 @@ where subscription_executor, finality_provider: finality_proof_provider.clone(), }, + backend: rpc_backend.clone(), }; - node_rpc::create_full(deps, rpc_backend.clone()).map_err(Into::into) + node_rpc::create_full(deps).map_err(Into::into) }; (rpc_extensions_builder, rpc_setup) @@ -345,6 +342,8 @@ where pub client: Arc>, /// The networking service of the node. pub network: Arc::Hash>>, + /// The syncing service of the node. + pub sync: Arc>, /// The transaction pool of the node. pub transaction_pool: Arc>, /// The rpc handlers of the node. @@ -375,6 +374,8 @@ where let shared_voter_state = rpc_setup; let auth_disc_publish_non_global_ips = config.network.allow_non_globals_in_dht; + let mut net_config = sc_network::config::FullNetworkConfiguration::new(&config.network); + let grandpa_protocol_name = grandpa::protocol_standard_name( &client .block_hash(0) @@ -383,22 +384,20 @@ where .expect("Genesis block exists; qed"), &config.chain_spec, ); + net_config.add_notification_protocol(grandpa::grandpa_peers_set_config( + grandpa_protocol_name.clone(), + )); - config - .network - .extra_sets - .push(grandpa::grandpa_peers_set_config( - grandpa_protocol_name.clone(), - )); let warp_sync = Arc::new(grandpa::warp_proof::NetworkProvider::new( backend.clone(), import_setup.1.shared_authority_set().clone(), Vec::default(), )); - let (network, system_rpc_tx, tx_handler_controller, network_starter) = + let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) = sc_service::build_network(sc_service::BuildNetworkParams { config: &config, + net_config, client: client.clone(), transaction_pool: transaction_pool.clone(), spawn_handle: task_manager.spawn_handle(), @@ -407,15 +406,6 @@ where warp_sync_params: Some(WarpSyncParams::WithProvider(warp_sync)), })?; - if config.offchain_worker.enabled { - sc_service::build_offchain_workers( - &config, - task_manager.spawn_handle(), - client.clone(), - network.clone(), - ); - } - let role = config.role.clone(); let force_authoring = config.force_authoring; let backoff_authoring_blocks = if false { @@ -426,18 +416,20 @@ where let name = config.network.node_name.clone(); let enable_grandpa = !config.disable_grandpa; let prometheus_registry = config.prometheus_registry().cloned(); + let enable_offchain_worker = config.offchain_worker.enabled; let rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { config, - backend, + backend: backend.clone(), client: client.clone(), - keystore: keystore_container.sync_keystore(), + keystore: keystore_container.keystore(), network: network.clone(), rpc_builder: Box::new(rpc_builder), transaction_pool: transaction_pool.clone(), task_manager: &mut task_manager, system_rpc_tx, tx_handler_controller, + sync_service: sync_service.clone(), telemetry: telemetry.as_mut(), })?; @@ -457,13 +449,13 @@ where let client_clone = client.clone(); let slot_duration = babe_link.config().slot_duration(); let babe_config = sc_consensus_babe::BabeParams { - keystore: keystore_container.sync_keystore(), + keystore: keystore_container.keystore(), client: client.clone(), select_chain, env: proposer, block_import, - sync_oracle: network.clone(), - justification_sync_link: network.clone(), + sync_oracle: sync_service.clone(), + justification_sync_link: sync_service.clone(), create_inherent_data_providers: move |parent, ()| { let client_clone = client_clone.clone(); async move { @@ -536,19 +528,19 @@ where // if the node isn't actively participating in consensus then it doesn't // need a keystore, regardless of which protocol we use below. let keystore = if role.is_authority() { - Some(keystore_container.sync_keystore()) + Some(keystore_container.keystore()) } else { None }; - let config = grandpa::Config { + let grandpa_config = grandpa::Config { // FIXME #1578 make this available through chainspec gossip_duration: std::time::Duration::from_millis(333), - justification_period: 512, + justification_generation_period: GRANDPA_JUSTIFICATION_PERIOD, name: Some(name), observer_enabled: false, keystore, - local_role: role, + local_role: role.clone(), telemetry: telemetry.as_ref().map(|x| x.handle()), protocol_name: grandpa_protocol_name, }; @@ -561,13 +553,15 @@ where // been tested extensively yet and having most nodes in a network run it // could lead to finality stalls. let grandpa_config = grandpa::GrandpaParams { - config, + config: grandpa_config, link: grandpa_link, network: network.clone(), + sync: Arc::new(sync_service.clone()), telemetry: telemetry.as_ref().map(|x| x.handle()), voting_rule: grandpa::VotingRulesBuilder::default().build(), prometheus_registry, shared_voter_state, + offchain_tx_pool_factory: OffchainTransactionPoolFactory::new(transaction_pool.clone()), }; // the GRANDPA voter task is considered infallible, i.e. @@ -579,11 +573,33 @@ where ); } + if enable_offchain_worker { + task_manager.spawn_handle().spawn( + "offchain-workers-runner", + "offchain-work", + sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions { + runtime_api_provider: client.clone(), + keystore: Some(keystore_container.keystore()), + offchain_db: backend.offchain_storage(), + transaction_pool: Some(OffchainTransactionPoolFactory::new( + transaction_pool.clone(), + )), + network_provider: network.clone(), + is_validator: role.is_authority(), + enable_http_requests: true, + custom_extensions: move |_| vec![], + }) + .run(client.clone(), task_manager.spawn_handle()) + .boxed(), + ); + } + network_starter.start_network(); Ok(NewFullBase { task_manager, client, network, + sync: sync_service, transaction_pool, rpc_handlers, }) From cb470acf899125847252dba7581ca288c838fb50 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Wed, 8 Jan 2025 03:39:07 +0800 Subject: [PATCH 28/97] Add missing runtime_version attribute. --- pallets/runtime/develop/src/runtime.rs | 1 + pallets/runtime/mainnet/src/runtime.rs | 1 + pallets/runtime/testnet/src/runtime.rs | 1 + 3 files changed, 3 insertions(+) diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index b210d62147..a19d9720aa 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -49,6 +49,7 @@ pub use pallet_timestamp::Call as TimestampCall; include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); /// Runtime version. +#[sp_version::runtime_version] pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("polymesh_dev"), impl_name: create_runtime_str!("polymesh_dev"), diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index 8767bf01f7..53218e9869 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -47,6 +47,7 @@ use crate::constants::time::*; include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); /// Runtime version. +#[sp_version::runtime_version] pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("polymesh_mainnet"), impl_name: create_runtime_str!("polymesh_mainnet"), diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index a240f7d80b..6cd795a982 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -49,6 +49,7 @@ use crate::constants::time::*; include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); /// Runtime version. +#[sp_version::runtime_version] pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("polymesh_testnet"), impl_name: create_runtime_str!("polymesh_testnet"), From 05a1224b70952c48130351237d6ec9128a5b6ea0 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Wed, 8 Jan 2025 19:15:59 +0800 Subject: [PATCH 29/97] Fix wasm-builder --- pallets/runtime/build_tool/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/runtime/build_tool/src/lib.rs b/pallets/runtime/build_tool/src/lib.rs index d7f7855247..86a7e29c23 100644 --- a/pallets/runtime/build_tool/src/lib.rs +++ b/pallets/runtime/build_tool/src/lib.rs @@ -3,7 +3,7 @@ pub fn build() { { substrate_wasm_builder::WasmBuilder::new() .with_current_project() - //.with_wasm_builder_from_git(BUILDER_REPO, BUILDER_REV) + .disable_runtime_version_section_check() .export_heap_base() .import_memory() .build() From f3e4d36785a8a71ce874cebb946f09ada3e7f599 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Wed, 8 Jan 2025 19:29:07 +0800 Subject: [PATCH 30/97] Remove old test. --- pallets/runtime/tests/Cargo.toml | 3 --- pallets/runtime/tests/src/asset_test.rs | 15 --------------- 2 files changed, 18 deletions(-) diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index 579e262986..e9eaa3e7c3 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -46,7 +46,6 @@ polymesh-exec-macro = { path = "exec_macro" } serde = { version = "1.0.104", default-features = false } rand = { version = "0.7.3", default-features = false } chrono = { version = "0.4", default-features = false } -hex-literal = "0.3.0" smallvec = "1.4.1" lazy_static = "1.4.0" parking_lot = "0.12.0" @@ -62,7 +61,6 @@ frame-executive = { workspace = true, default-features = false } frame-system = { workspace = true, default-features = false } frame-system-rpc-runtime-api = { workspace = true, default-features = false } frame-election-provider-support = { workspace = true, default-features = false } -ink_primitives = { version = "4.3.0", default-features = false } pallet-authority-discovery = { workspace = true, default-features = false } pallet-authorship = { workspace = true, default-features = false } pallet-babe = { workspace = true, default-features = false } @@ -125,7 +123,6 @@ std = [ "frame-support/std", "frame-system/std", "frame-election-provider-support/std", - "ink_primitives/std", "pallet-asset/std", "pallet-authorship/std", "pallet-base/std", diff --git a/pallets/runtime/tests/src/asset_test.rs b/pallets/runtime/tests/src/asset_test.rs index 925a7fa65e..10115fdea5 100644 --- a/pallets/runtime/tests/src/asset_test.rs +++ b/pallets/runtime/tests/src/asset_test.rs @@ -1,8 +1,6 @@ use chrono::prelude::Utc; use frame_support::dispatch::{DispatchError, DispatchResult}; use frame_support::{assert_noop, assert_ok}; -use hex_literal::hex; -use ink_primitives::hash as FunctionSelectorHasher; use rand::Rng; use sp_consensus_babe::Slot; use sp_runtime::AnySignature; @@ -205,19 +203,6 @@ pub fn check_schedules(asset_id: AssetId, schedules: &[(ScheduleId, ScheduleChec } } -#[test] -fn check_the_test_hex() { - ExtBuilder::default().build().execute_with(|| { - let selector: [u8; 4] = (FunctionSelectorHasher::keccak256("verify_transfer".as_bytes()) - [0..4]) - .try_into() - .unwrap(); - println!("{:#X}", u32::from_be_bytes(selector)); - let data = hex!("D9386E41"); - println!("{:?}", data); - }); -} - #[test] fn issuers_can_create_and_rename_tokens() { ExtBuilder::default().build().execute_with(|| { From d9030ddacee32dfa1ef4e36b35da5b5ed9eec474 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Thu, 9 Jan 2025 00:33:33 +0800 Subject: [PATCH 31/97] Fix warnings. --- pallets/runtime/tests/src/storage.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index 4e2fa5cd3b..2272a444f8 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -127,7 +127,7 @@ impl From for MockSessionKeys { type Runtime = TestStorage; // example module to test behaviors. -#[frame_support::pallet] +#[frame_support::pallet(dev_mode)] pub mod example { use frame_support::{dispatch::WithPostDispatchInfo, pallet_prelude::*}; use frame_system::pallet_prelude::*; From e70f8a57352028b277ec383ae9cd49fae012cec6 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Thu, 9 Jan 2025 18:30:45 +0800 Subject: [PATCH 32/97] Fix warnings about OldWeight. --- primitives/Cargo.toml | 1 + primitives/src/lib.rs | 24 +++++++++++++++++++++- rpc/runtime-api/src/transaction_payment.rs | 4 ++-- rpc/src/transaction_payment.rs | 24 +++++++++------------- 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index f5c5c0dc39..9c1631ed5c 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -31,6 +31,7 @@ scale-info = { workspace = true, default-features = false, features = ["derive", sp-application-crypto = { workspace = true, default-features = false, optional = true } sp-arithmetic = { workspace = true, default-features = false } sp-core = { workspace = true, default-features = false } +sp-debug-derive = { workspace = true, default-features = false } sp-io = { workspace = true, default-features = false } sp-runtime = { workspace = true, default-features = false } sp-runtime-interface = { workspace = true, default-features = false } diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index 1e43a407c4..0f7581375c 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -25,13 +25,14 @@ use alloc::{ format, string::{String, ToString}, }; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{CompactAs, Decode, Encode, MaxEncodedLen}; use core::ops::Add; use frame_support::parameter_types; use frame_support::traits::Get; use polymesh_primitives_derive::{SliceU8StrongTyped, StringStrongTyped, VecU8StrongTyped}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; +use sp_debug_derive::RuntimeDebug; use sp_runtime::{generic, traits::BlakeTwo256, MultiSignature}; use sp_std::prelude::Vec; @@ -371,6 +372,27 @@ impl ExtrinsicName { } } +/// The old weight type. +/// +/// NOTE: This type exists purely for compatibility purposes! Use [`weight_v2::Weight`] in all other +/// cases. +#[derive( + Decode, + Encode, + CompactAs, + PartialEq, + Eq, + Clone, + Copy, + RuntimeDebug, + Default, + MaxEncodedLen, + TypeInfo +)] +#[derive(Serialize, Deserialize)] +#[serde(transparent)] +pub struct OldWeight(pub u64); + /// Execute the supplied function in a new storage transaction, /// committing on `Ok(_)` and rolling back on `Err(_)`, returning the result. /// diff --git a/rpc/runtime-api/src/transaction_payment.rs b/rpc/runtime-api/src/transaction_payment.rs index a14fe1a244..57c7dda072 100644 --- a/rpc/runtime-api/src/transaction_payment.rs +++ b/rpc/runtime-api/src/transaction_payment.rs @@ -1,14 +1,14 @@ use codec::Codec; pub use pallet_transaction_payment::{FeeDetails, InclusionFee, RuntimeDispatchInfo}; -use polymesh_primitives::Balance; +use polymesh_primitives::{Balance, OldWeight}; sp_api::decl_runtime_apis! { #[api_version(2)] pub trait TransactionPaymentApi { #[changed_in(2)] - fn query_info(uxt: Block::Extrinsic, len: u32) -> RuntimeDispatchInfo; + fn query_info(uxt: Block::Extrinsic, len: u32) -> RuntimeDispatchInfo; fn query_info(uxt: Block::Extrinsic, len: u32) -> RuntimeDispatchInfo; fn query_fee_details(uxt: Block::Extrinsic, len: u32) -> FeeDetails; } diff --git a/rpc/src/transaction_payment.rs b/rpc/src/transaction_payment.rs index ec9d1adfce..1fd977c866 100644 --- a/rpc/src/transaction_payment.rs +++ b/rpc/src/transaction_payment.rs @@ -16,23 +16,21 @@ //! RPC interface for the transaction payment module. -use std::{convert::TryInto, sync::Arc}; - use codec::Decode; use jsonrpsee::core::{Error as JsonRpseeError, RpcResult}; use jsonrpsee::proc_macros::rpc; use jsonrpsee::types::error::{CallError, ErrorCode, ErrorObject}; +pub use node_rpc_runtime_api::transaction_payment::{ + FeeDetails, InclusionFee, RuntimeDispatchInfo, + TransactionPaymentApi as TransactionPaymentRuntimeApi, +}; +use polymesh_primitives::{Balance, OldWeight}; use sp_api::{ApiExt, ProvideRuntimeApi}; use sp_blockchain::HeaderBackend; use sp_core::Bytes; use sp_rpc::number::NumberOrHex; use sp_runtime::traits::Block as BlockT; - -pub use node_rpc_runtime_api::transaction_payment::{ - FeeDetails, InclusionFee, RuntimeDispatchInfo, - TransactionPaymentApi as TransactionPaymentRuntimeApi, -}; -use polymesh_primitives::Balance; +use std::{convert::TryInto, sync::Arc}; use super::Error; @@ -67,10 +65,8 @@ impl TransactionPayment { } impl - TransactionPaymentApiServer< - ::Hash, - RuntimeDispatchInfo, - > for TransactionPayment + TransactionPaymentApiServer<::Hash, RuntimeDispatchInfo> + for TransactionPayment where Block: BlockT, C: ProvideRuntimeApi + HeaderBackend + Send + Sync + 'static, @@ -80,7 +76,7 @@ where &self, encoded_xt: Bytes, at: Option<::Hash>, - ) -> RpcResult> { + ) -> RpcResult> { let api = self.client.runtime_api(); let at_hash = at.unwrap_or_else(|| { // If the block hash is not supplied assume the best block. @@ -126,7 +122,7 @@ where .map_err(|e| map_err(e, "Unable to query dispatch info."))?; Ok(RuntimeDispatchInfo { - weight: sp_weights::OldWeight(res.weight.ref_time()), + weight: OldWeight(res.weight.ref_time()), class: res.class, partial_fee: res.partial_fee, }) From 61212f7842d27bc5f1963d1e4dfe84fbd5ddcb43 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Thu, 9 Jan 2025 20:15:34 +0800 Subject: [PATCH 33/97] Fix benchmark build. --- pallets/bridge/Cargo.toml | 7 ++++--- pallets/runtime/develop/Cargo.toml | 6 +----- pallets/runtime/tests/Cargo.toml | 3 ++- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/pallets/bridge/Cargo.toml b/pallets/bridge/Cargo.toml index a4cd7a036b..399f25a745 100644 --- a/pallets/bridge/Cargo.toml +++ b/pallets/bridge/Cargo.toml @@ -22,19 +22,20 @@ frame-support = { workspace = true, default-features = false } frame-system = { workspace = true, default-features = false } pallet-scheduler = { workspace = true, default-features = false } -frame-benchmarking = { workspace = true, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } # Other serde = { version = "1.0.104", default-features = false } log = "0.4.8" [features] +default = ["std", "equalize"] + equalize = [] only-staking = [] -default = ["std", "equalize"] no_std = [] std = [ - "frame-benchmarking/std", + "frame-benchmarking?/std", "frame-support/std", "frame-system/std", "pallet-base/std", diff --git a/pallets/runtime/develop/Cargo.toml b/pallets/runtime/develop/Cargo.toml index 4e0dbce3bd..ad374f13a1 100644 --- a/pallets/runtime/develop/Cargo.toml +++ b/pallets/runtime/develop/Cargo.toml @@ -100,9 +100,6 @@ frame-benchmarking = { workspace = true, default-features = false, optional = tr frame-system-benchmarking = { workspace = true, default-features = false, optional = true } hex-literal = { version = "0.3.1", optional = true } -# Import 'getrandom' here to enable feature `getrandom/js` for wasm builds. -getrandom = { version = "0.2.6", default-features = false, optional = true } - [build-dependencies] polymesh-build-tool = { workspace = true, default-features = false } @@ -122,7 +119,7 @@ no_std = [ ] std = [ - "polymesh-build-tool/std", + "polymesh-build-tool/std", "u64_backend", "codec/std", "frame-benchmarking?/std", @@ -199,7 +196,6 @@ std = [ "polymesh-contracts/std", ] runtime-benchmarks = [ - "getrandom/js", "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system-benchmarking/runtime-benchmarks", diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index e9eaa3e7c3..905ca581bb 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -55,7 +55,7 @@ log = "0.4.8" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -frame-benchmarking = { workspace = true, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } frame-support = { workspace = true, default-features = false } frame-executive = { workspace = true, default-features = false } frame-system = { workspace = true, default-features = false } @@ -122,6 +122,7 @@ std = [ "u64_backend", "frame-support/std", "frame-system/std", + "frame-benchmarking?/std", "frame-election-provider-support/std", "pallet-asset/std", "pallet-authorship/std", From 4d7cf7fddeaa068a4ecbcf56ddd8c68f1804fa78 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Thu, 9 Jan 2025 21:00:37 +0800 Subject: [PATCH 34/97] Fix RPC port number. --- scripts/cli/chain_metadata.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cli/chain_metadata.sh b/scripts/cli/chain_metadata.sh index 3f16a2532f..02fe70b0a5 100755 --- a/scripts/cli/chain_metadata.sh +++ b/scripts/cli/chain_metadata.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash set -e -curl -H "Content-Type: application/json" -d '{"id":"1", "jsonrpc":"2.0", "method": "state_getMetadata", "params":[]}' http://localhost:9933 > polymesh-meta.json +curl -H "Content-Type: application/json" -d '{"id":"1", "jsonrpc":"2.0", "method": "state_getMetadata", "params":[]}' http://localhost:9944 > polymesh-meta.json From 98d96405e945e305591669324cddece87dd0bfee Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Fri, 10 Jan 2025 00:37:09 +0800 Subject: [PATCH 35/97] System.set_code doesn't use max block weight anymore. --- pallets/runtime/tests/src/utility_test.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pallets/runtime/tests/src/utility_test.rs b/pallets/runtime/tests/src/utility_test.rs index 39ac99a078..b0607bda22 100644 --- a/pallets/runtime/tests/src/utility_test.rs +++ b/pallets/runtime/tests/src/utility_test.rs @@ -976,15 +976,9 @@ fn batch_all_works_with_committee_origin() { #[test] fn sub_with_weight_works() { new_test_ext().execute_with(|| { - let weights = ::BlockWeights::get(); let upgrade_code_call = Box::new(RuntimeCall::System( frame_system::Call::set_code_without_checks { code: vec![] }, )); - // Weight before is max. - assert_eq!( - upgrade_code_call.get_dispatch_info().weight, - weights.max_block - ); assert_eq!( upgrade_code_call.get_dispatch_info().class, frame_support::dispatch::DispatchClass::Operational From 66ec00644cda70b1b5ad8036e94f7dc11f821007 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Fri, 10 Jan 2025 18:58:59 +0800 Subject: [PATCH 36/97] Use sensible maths for `from_rational`. https://github.com/paritytech/substrate/pull/13660 --- pallets/runtime/tests/src/staking/mod.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pallets/runtime/tests/src/staking/mod.rs b/pallets/runtime/tests/src/staking/mod.rs index feb86f1389..3a85fa8ff5 100644 --- a/pallets/runtime/tests/src/staking/mod.rs +++ b/pallets/runtime/tests/src/staking/mod.rs @@ -6164,7 +6164,7 @@ fn proportional_ledger_slash_works() { ledger.active = unit; ledger.total = unit * 4 + value; // When - assert_eq!(ledger.slash(slash, 0, 0), slash - 5); + assert_eq!(ledger.slash(slash, 0, 0), slash); // Then // The amount slashed out of `unit` let affected_balance = value + unit * 4; @@ -6180,12 +6180,12 @@ fn proportional_ledger_slash_works() { value - value_slash }; assert_eq!(ledger.active, unit_slashed); - assert_eq!(ledger.unlocking, vec![c(5, value_slashed)]); - assert_eq!(ledger.total, value_slashed); + assert_eq!(ledger.unlocking, vec![c(5, value_slashed), c(7, 32)]); + assert_eq!(ledger.total, value_slashed + 32); assert_eq!(LedgerSlashPerEra::get().0, 0); assert_eq!( LedgerSlashPerEra::get().1, - BTreeMap::from([(4, 0), (5, value_slashed), (6, 0), (7, 0)]) + BTreeMap::from([(4, 0), (5, value_slashed), (6, 0), (7, 32)]) ); } From 29ddf843faea6475dd19be49e4c13a8740c21cff Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Fri, 10 Jan 2025 20:06:58 +0800 Subject: [PATCH 37/97] Bump contract gas fees. --- integration/tests/contract_permissions.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/integration/tests/contract_permissions.rs b/integration/tests/contract_permissions.rs index 04664ae58c..5529519f40 100644 --- a/integration/tests/contract_permissions.rs +++ b/integration/tests/contract_permissions.rs @@ -49,7 +49,7 @@ async fn contract_as_secondary_key_change_identity() -> Result<()> { .polymesh_contracts() .instantiate_with_code_perms( 0, - Weight::from_parts(10_500_000_000, 0), + Weight::from_parts(10_000_000_000, 20_000), None, call_runtime_bytes.to_vec(), vec![0x9b, 0xae, 0x9d, 0x5e], // Selector for `new` constructor. @@ -134,7 +134,11 @@ async fn contract_as_secondary_key_change_identity() -> Result<()> { .call( contract.into(), 0, +<<<<<<< HEAD Weight::from_parts(10_500_000_000, 0), +======= + Weight::from_parts(19_000_000_000, 40_000), +>>>>>>> 7841af1c... Bump contract gas fees. None, encoded_call, )? From 29a059237c638c85c2a5a5c2bc61703970658386 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Sat, 25 Jan 2025 01:17:36 +0800 Subject: [PATCH 38/97] Add NoopMigration for v10 contracts pallet. --- pallets/runtime/common/src/runtime.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index d865a251a6..1a51ac9182 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -422,6 +422,8 @@ macro_rules! misc_pallet_impls { type MaxDebugBufferLen = frame_support::traits::ConstU32<{ 2 * 1024 * 1024 }>; #[cfg(not(feature = "runtime-benchmarks"))] type Migrations = ( + // Migration v9 -> v10 has already been run. + pallet_contracts::migration::NoopMigration<10>, pallet_contracts::migration::v11::Migration, pallet_contracts::migration::v12::Migration, pallet_contracts::migration::v13::Migration, From 82171de30e689e3242d71d72c2513855be96887e Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 7 Jul 2025 14:10:38 -0300 Subject: [PATCH 39/97] Add feature flag for ed; Fix tests and runtime --- Cargo.lock | 413 +++++++--------------- Cargo.toml | 4 +- pallets/runtime/common/src/runtime.rs | 4 + pallets/runtime/develop/src/runtime.rs | 2 + pallets/runtime/mainnet/src/runtime.rs | 2 + pallets/runtime/testnet/src/runtime.rs | 2 + pallets/runtime/tests/src/staking/mock.rs | 6 + pallets/runtime/tests/src/staking/mod.rs | 6 +- pallets/runtime/tests/src/storage.rs | 2 + pallets/runtime/tests/src/utility_test.rs | 24 +- 10 files changed, 170 insertions(+), 295 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 883997fb80..40b17970be 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -825,7 +825,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.1", + "strsim", ] [[package]] @@ -1268,41 +1268,6 @@ dependencies = [ "syn 2.0.101", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.109", -] - [[package]] name = "data-encoding" version = "2.9.0" @@ -1896,7 +1861,7 @@ checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", ] @@ -1919,7 +1884,7 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-support", "frame-support-procedural", @@ -1944,7 +1909,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "Inflector", "array-bytes", @@ -1992,7 +1957,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -2003,7 +1968,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2020,7 +1985,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-support", "frame-system", @@ -2049,7 +2014,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "aquamarine", "bitflags 1.3.2", @@ -2086,7 +2051,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "Inflector", "cfg-expr", @@ -2104,7 +2069,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.1.3", @@ -2116,7 +2081,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "proc-macro2", "quote", @@ -2126,7 +2091,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "cfg-if", "frame-support", @@ -2145,7 +2110,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-benchmarking", "frame-support", @@ -2160,7 +2125,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "sp-api", @@ -2169,7 +2134,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-support", "parity-scale-codec", @@ -2386,10 +2351,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] @@ -2875,12 +2838,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" version = "0.2.3" @@ -3031,30 +2988,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" -[[package]] -name = "ink_prelude" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8cfdf91d2b442f08efb34dd3780fd6fbd3d033f63b42f62684fe47534948ef6" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "ink_primitives" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6414bcad12ebf0c3abbbb192a09e4d06e22f662cf3e19545204e1b0684be12a1" -dependencies = [ - "derive_more 0.99.20", - "ink_prelude", - "parity-scale-codec", - "scale-decode", - "scale-encode", - "scale-info", - "xxhash-rust", -] - [[package]] name = "inout" version = "0.1.4" @@ -4600,7 +4533,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-support", "frame-system", @@ -4616,7 +4549,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-support", "frame-system", @@ -4630,7 +4563,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4654,7 +4587,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4739,7 +4672,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "bitflags 1.3.2", "environmental", @@ -4768,7 +4701,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "24.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -4781,7 +4714,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "proc-macro2", "quote", @@ -4822,7 +4755,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4845,7 +4778,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4879,7 +4812,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4948,6 +4881,7 @@ version = "2.0.0" dependencies = [ "parity-scale-codec", "polymesh-primitives", + "scale-info", "serde", "sp-api", "sp-std", @@ -4985,7 +4919,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-benchmarking", "frame-support", @@ -5005,7 +4939,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-benchmarking", "frame-support", @@ -5022,7 +4956,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-support", "frame-system", @@ -5077,7 +5011,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-support", "frame-system", @@ -5163,7 +5097,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-benchmarking", "frame-support", @@ -5224,6 +5158,7 @@ dependencies = [ "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", + "scale-info", "serde", "sp-api", "sp-runtime", @@ -5247,7 +5182,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-benchmarking", "frame-support", @@ -5264,7 +5199,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-support", "frame-system", @@ -5318,7 +5253,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5341,7 +5276,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -5352,7 +5287,7 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "sp-api", @@ -5432,7 +5367,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-benchmarking", "frame-support", @@ -5985,7 +5920,6 @@ dependencies = [ "sc-client-api", "sc-consensus-babe", "sc-consensus-babe-rpc", - "sc-consensus-epochs", "sc-consensus-grandpa", "sc-consensus-grandpa-rpc", "sc-rpc", @@ -6027,6 +5961,7 @@ dependencies = [ "sp-application-crypto", "sp-arithmetic", "sp-core", + "sp-debug-derive", "sp-io", "sp-runtime", "sp-runtime-interface", @@ -6079,7 +6014,6 @@ dependencies = [ "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", - "getrandom 0.2.16", "hex-literal 0.3.4", "log", "node-rpc-runtime-api", @@ -6334,8 +6268,6 @@ dependencies = [ "frame-support", "frame-system", "frame-system-rpc-runtime-api", - "hex-literal 0.3.4", - "ink_primitives", "lazy_static", "log", "node-rpc-runtime-api", @@ -7333,7 +7265,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "log", "sp-core", @@ -7344,7 +7276,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "futures", @@ -7372,7 +7304,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "futures", "futures-timer", @@ -7395,7 +7327,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -7410,7 +7342,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "memmap2", "sc-chain-spec-derive", @@ -7429,7 +7361,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -7440,7 +7372,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "array-bytes", "chrono", @@ -7479,7 +7411,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "fnv", "futures", @@ -7505,7 +7437,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "hash-db", "kvdb", @@ -7531,7 +7463,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "futures", @@ -7556,7 +7488,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "fork-tree", @@ -7592,7 +7524,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "futures", "jsonrpsee", @@ -7614,7 +7546,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "fork-tree", "parity-scale-codec", @@ -7627,7 +7559,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "ahash 0.8.12", "array-bytes", @@ -7668,7 +7600,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "finality-grandpa", "futures", @@ -7688,7 +7620,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "futures", @@ -7711,7 +7643,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", @@ -7733,7 +7665,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "sc-allocator", "sp-maybe-compressed-blob", @@ -7745,7 +7677,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "anyhow", "cfg-if", @@ -7762,7 +7694,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "ansi_term", "futures", @@ -7778,7 +7710,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "array-bytes", "parking_lot 0.12.4", @@ -7792,7 +7724,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "array-bytes", "async-channel", @@ -7835,7 +7767,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-channel", "cid", @@ -7855,7 +7787,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "bitflags 1.3.2", @@ -7872,7 +7804,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "ahash 0.8.12", "futures", @@ -7891,7 +7823,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "array-bytes", "async-channel", @@ -7912,7 +7844,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "array-bytes", "async-channel", @@ -7946,7 +7878,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "array-bytes", "futures", @@ -7964,7 +7896,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "array-bytes", "bytes", @@ -7998,7 +7930,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8007,7 +7939,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "futures", "jsonrpsee", @@ -8038,7 +7970,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -8057,7 +7989,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "http", "jsonrpsee", @@ -8072,7 +8004,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "array-bytes", "futures", @@ -8098,7 +8030,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "directories", @@ -8162,7 +8094,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "log", "parity-scale-codec", @@ -8173,7 +8105,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -8192,7 +8124,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "futures", "libc", @@ -8211,7 +8143,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "chrono", "futures", @@ -8230,7 +8162,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "ansi_term", "atty", @@ -8259,7 +8191,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -8270,7 +8202,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "futures", @@ -8296,7 +8228,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "futures", @@ -8312,7 +8244,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-channel", "futures", @@ -8324,69 +8256,6 @@ dependencies = [ "sp-arithmetic", ] -[[package]] -name = "scale-bits" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "036575c29af9b6e4866ffb7fa055dbf623fe7a9cc159b33786de6013a6969d89" -dependencies = [ - "parity-scale-codec", - "scale-info", -] - -[[package]] -name = "scale-decode" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7789f5728e4e954aaa20cadcc370b99096fb8645fca3c9333ace44bb18f30095" -dependencies = [ - "derive_more 0.99.20", - "parity-scale-codec", - "scale-bits", - "scale-decode-derive", - "scale-info", - "smallvec", -] - -[[package]] -name = "scale-decode-derive" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27873eb6005868f8cc72dcfe109fae664cf51223d35387bc2f28be4c28d94c47" -dependencies = [ - "darling", - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "scale-encode" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d70cb4b29360105483fac1ed567ff95d65224a14dd275b6303ed0a654c78de5" -dependencies = [ - "derive_more 0.99.20", - "parity-scale-codec", - "scale-encode-derive", - "scale-info", - "smallvec", -] - -[[package]] -name = "scale-encode-derive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "995491f110efdc6bea96d6a746140e32bfceb4ea47510750a5467295a4707a25" -dependencies = [ - "darling", - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "scale-info" version = "2.11.6" @@ -8868,7 +8737,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "hash-db", "log", @@ -8889,7 +8758,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "Inflector", "blake2", @@ -8903,7 +8772,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "23.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "scale-info", @@ -8916,7 +8785,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "16.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "integer-sqrt", "num-traits", @@ -8930,7 +8799,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "scale-info", @@ -8943,7 +8812,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "sp-api", "sp-inherents", @@ -8954,7 +8823,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "futures", "log", @@ -8972,7 +8841,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "futures", @@ -8987,7 +8856,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "parity-scale-codec", @@ -9006,7 +8875,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "finality-grandpa", "log", @@ -9024,7 +8893,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "scale-info", @@ -9036,7 +8905,7 @@ dependencies = [ [[package]] name = "sp-core" version = "21.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "array-bytes", "bitflags 1.3.2", @@ -9081,7 +8950,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "9.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "blake2b_simd", "byteorder", @@ -9094,7 +8963,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "9.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "quote", "sp-core-hashing", @@ -9104,7 +8973,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "kvdb", "parking_lot 0.12.4", @@ -9113,7 +8982,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "8.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "proc-macro2", "quote", @@ -9123,7 +8992,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.19.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "environmental", "parity-scale-codec", @@ -9134,7 +9003,7 @@ dependencies = [ [[package]] name = "sp-genesis-builder" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "serde_json", "sp-api", @@ -9145,7 +9014,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -9159,7 +9028,7 @@ dependencies = [ [[package]] name = "sp-io" version = "23.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "bytes", "ed25519 1.5.3", @@ -9184,7 +9053,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "24.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "lazy_static", "sp-core", @@ -9195,7 +9064,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.27.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", @@ -9207,7 +9076,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -9216,7 +9085,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-metadata", "parity-scale-codec", @@ -9227,7 +9096,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "scale-info", @@ -9241,7 +9110,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "sp-api", "sp-core", @@ -9251,7 +9120,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "8.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "backtrace", "lazy_static", @@ -9261,7 +9130,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "rustc-hash", "serde", @@ -9271,7 +9140,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "24.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "either", "hash256-std-hasher", @@ -9293,7 +9162,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "17.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -9311,7 +9180,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "11.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "Inflector", "proc-macro-crate 1.1.3", @@ -9323,7 +9192,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "scale-info", @@ -9338,7 +9207,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -9352,7 +9221,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.28.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "hash-db", "log", @@ -9373,7 +9242,7 @@ dependencies = [ [[package]] name = "sp-statement-store" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "aes-gcm", "curve25519-dalek 3.2.0", @@ -9397,12 +9266,12 @@ dependencies = [ [[package]] name = "sp-std" version = "8.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" [[package]] name = "sp-storage" version = "13.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9415,7 +9284,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "parity-scale-codec", @@ -9428,7 +9297,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "10.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "sp-std", @@ -9440,7 +9309,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "sp-api", "sp-runtime", @@ -9449,7 +9318,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "async-trait", "parity-scale-codec", @@ -9464,7 +9333,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "ahash 0.8.12", "hash-db", @@ -9487,7 +9356,7 @@ dependencies = [ [[package]] name = "sp-version" version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9504,7 +9373,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "8.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -9515,7 +9384,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -9528,7 +9397,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "20.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "parity-scale-codec", "scale-info", @@ -9617,12 +9486,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strsim" version = "0.11.1" @@ -9667,12 +9530,12 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -9691,7 +9554,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "hyper", "log", @@ -9703,7 +9566,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "futures", "substrate-test-utils-derive", @@ -9713,7 +9576,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -9724,7 +9587,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" dependencies = [ "ansi_term", "build-helper", @@ -11535,12 +11398,6 @@ dependencies = [ "time", ] -[[package]] -name = "xxhash-rust" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" - [[package]] name = "yamux" version = "0.12.1" diff --git a/Cargo.toml b/Cargo.toml index 35bc3dca36..35147f9514 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -219,7 +219,7 @@ frame-executive = { version = "4.0.0-dev", default-features = false } pallet-authority-discovery = { version = "4.0.0-dev", default-features = false } pallet-authorship = { version = "4.0.0-dev", default-features = false } pallet-babe = { version = "4.0.0-dev", default-features = false } -pallet-balances = { version = "4.0.0-dev", default-features = false } +pallet-balances = { version = "4.0.0-dev", default-features = false, features = ['insecure_zero_ed']} pallet-contracts = { version = "4.0.0-dev", default-features = false } pallet-contracts-primitives = { version = "24.0.0", default-features = false} pallet-election-provider-multi-phase = { version = "4.0.0-dev", default-features = false } @@ -305,7 +305,7 @@ rand_chacha = { version = "0.3", default-features = false } [dependencies] pallet-asset = { workspace = true } -pallet-balances = { workspace = true, default-features = false } +pallet-balances = { workspace = true, default-features = false, features = ["insecure_zero_ed"] } pallet-committee = { workspace = true, default-features = false } pallet-corporate-actions = { workspace = true, default-features = false } pallet-external-agents = { workspace = true, default-features = false } diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 1a51ac9182..41eb155c39 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -176,6 +176,10 @@ macro_rules! misc_pallet_impls { type MaxReserves = MaxReserves; type ReserveIdentifier = [u8; 8]; type Memo = polymesh_primitives::Memo; + type RuntimeHoldReason = [u8; 32]; + type FreezeIdentifier = [u8; 8]; + type MaxHolds = MaxHolds; + type MaxFreezes = MaxFreezes; } impl pallet_protocol_fee::Config for Runtime { diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index a19d9720aa..e4a2d4273b 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -85,6 +85,8 @@ parameter_types! { pub const BenchmarkEd: Balance = 1; pub const MaxLocks: u32 = 50; pub const MaxReserves: u32 = 50; + pub const MaxHolds: u32 = 32; + pub const MaxFreezes: u32 = 32; // Timestamp: diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index 53218e9869..5373cac9be 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -83,6 +83,8 @@ parameter_types! { pub const BenchmarkEd: Balance = 1; pub const MaxLocks: u32 = 50; pub const MaxReserves: u32 = 50; + pub const MaxHolds: u32 = 32; + pub const MaxFreezes: u32 = 32; // Timestamp: pub const MinimumPeriod: Moment = SLOT_DURATION / 2; diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index 6cd795a982..080eba4c94 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -86,6 +86,8 @@ parameter_types! { pub const BenchmarkEd: Balance = 1; pub const MaxLocks: u32 = 50; pub const MaxReserves: u32 = 50; + pub const MaxHolds: u32 = 32; + pub const MaxFreezes: u32 = 32; // Timestamp: pub const MinimumPeriod: Moment = SLOT_DURATION / 2; diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index bac2405697..6eea306a47 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -145,6 +145,8 @@ parameter_types! { pub const MaxLen: u32 = 256; pub const MaxLocks: u32 = 1024; + pub const MaxHolds: u32 = 32; + pub const MaxFreezes: u32 = 32; pub const MaxReserves: u32 = 50; pub const BlockHashCount: u64 = 250; pub const MaximumBlockWeight: Weight = Weight::from_parts(1024, 0); @@ -196,6 +198,10 @@ impl pallet_balances::Config for Test { type MaxReserves = MaxReserves; type ReserveIdentifier = [u8; 8]; type Memo = polymesh_primitives::Memo; + type RuntimeHoldReason = [u8; 32]; + type FreezeIdentifier = [u8; 8]; + type MaxHolds = MaxHolds; + type MaxFreezes = MaxFreezes; } sp_runtime::impl_opaque_keys! { diff --git a/pallets/runtime/tests/src/staking/mod.rs b/pallets/runtime/tests/src/staking/mod.rs index 3a85fa8ff5..e6a8918797 100644 --- a/pallets/runtime/tests/src/staking/mod.rs +++ b/pallets/runtime/tests/src/staking/mod.rs @@ -125,7 +125,7 @@ fn force_unstake_works() { // Cant transfer assert_noop!( Balances::transfer(RuntimeOrigin::signed(11), 1, 10), - BalancesError::::LiquidityRestrictions + sp_runtime::TokenError::Frozen ); // Force unstake requires root. assert_noop!( @@ -1098,7 +1098,7 @@ fn cannot_transfer_staked_balance() { // Confirm account 11 cannot transfer as a result assert_noop!( Balances::transfer(RuntimeOrigin::signed(11), 20, 1), - BalancesError::::LiquidityRestrictions + sp_runtime::TokenError::Frozen ); // Give account 11 extra free balance @@ -1123,7 +1123,7 @@ fn cannot_transfer_staked_balance_2() { // Confirm account 21 can transfer at most 1000 assert_noop!( Balances::transfer(RuntimeOrigin::signed(21), 20, 1001), - BalancesError::::LiquidityRestrictions + sp_runtime::TokenError::Frozen ); assert_ok!(Balances::transfer(RuntimeOrigin::signed(21), 20, 1000)); }); diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index 2272a444f8..b75b75a9ed 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -449,6 +449,8 @@ parameter_types! { pub const SS58Prefix: u8 = 12; pub const ExistentialDeposit: u64 = 0; pub const MaxLocks: u32 = 50; + pub const MaxHolds: u32 = 32; + pub const MaxFreezes: u32 = 32; pub const MaxReserves: u32 = 50; pub const MaxLen: u32 = 256; pub const AssetNameMaxLength: u32 = 128; diff --git a/pallets/runtime/tests/src/utility_test.rs b/pallets/runtime/tests/src/utility_test.rs index b0607bda22..f471d4bfd9 100644 --- a/pallets/runtime/tests/src/utility_test.rs +++ b/pallets/runtime/tests/src/utility_test.rs @@ -60,12 +60,6 @@ fn transfer(to: AccountId, amount: Balance) -> RuntimeCall { }) } -const ERROR: DispatchError = DispatchError::Module(sp_runtime::ModuleError { - index: 5, - error: [2, 0, 0, 0], - message: None, -}); - #[track_caller] fn assert_event(event: Event) { assert_eq!( @@ -117,7 +111,7 @@ fn batch_early_exit_works() { assert_balance(bob, 1000 + 400, 0); assert_event(Event::BatchInterrupted { index: 1, - error: ERROR, + error: sp_runtime::TokenError::FundsUnavailable.into(), }); }) } @@ -156,7 +150,9 @@ fn batch_optimistic_failures_listed() { ); assert_eq!( events.pop().unwrap().event, - EventTest::Utility(Event::ItemFailed { error: ERROR }) + EventTest::Utility(Event::ItemFailed { + error: sp_runtime::TokenError::FundsUnavailable.into() + }) ); assert_eq!( events.pop().unwrap().event, @@ -166,11 +162,15 @@ fn batch_optimistic_failures_listed() { events.pop().unwrap(); assert_eq!( events.pop().unwrap().event, - EventTest::Utility(Event::ItemFailed { error: ERROR }) + EventTest::Utility(Event::ItemFailed { + error: sp_runtime::TokenError::FundsUnavailable.into() + }) ); assert_eq!( events.pop().unwrap().event, - EventTest::Utility(Event::ItemFailed { error: ERROR }) + EventTest::Utility(Event::ItemFailed { + error: sp_runtime::TokenError::FundsUnavailable.into() + }) ); assert_eq!( events.pop().unwrap().event, @@ -202,7 +202,7 @@ fn batch_atomic_early_exit_works() { let calls = vec![trans(400), trans(900), trans(400)]; assert_storage_noop!(assert_err_ignore_postinfo!( Utility::batch_all(RuntimeOrigin::signed(alice.clone()), calls), - pallet_balances::Error::::InsufficientBalance + sp_runtime::TokenError::FundsUnavailable )); assert_balance(alice, 1000, 0); assert_balance(bob, 1000, 0); @@ -617,7 +617,7 @@ fn sub_batch_all_revert() { ), pays_fee: Pays::Yes }, - error: pallet_balances::Error::::InsufficientBalance.into() + error: sp_runtime::TokenError::FundsUnavailable.into(), } ); assert_eq!(Balances::free_balance(charlie.acc()), 10); From 1dd50cc0481cd5f6bde2543329f717a7d4ced586 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 8 Jul 2025 08:08:54 -0300 Subject: [PATCH 40/97] Update Weights --- pallets/weights/src/frame_system.rs | 22 +- pallets/weights/src/pallet_asset.rs | 701 +++++++----------- pallets/weights/src/pallet_balances.rs | 114 ++- .../src/pallet_capital_distribution.rs | 166 ++--- pallets/weights/src/pallet_checkpoint.rs | 82 +- pallets/weights/src/pallet_committee.rs | 158 ++-- .../weights/src/pallet_compliance_manager.rs | 214 ++---- .../weights/src/pallet_corporate_actions.rs | 280 +++---- .../weights/src/pallet_corporate_ballot.rs | 152 ++-- pallets/weights/src/pallet_external_agents.rs | 206 ++--- pallets/weights/src/pallet_group.rs | 94 ++- pallets/weights/src/pallet_identity.rs | 459 +++++------- pallets/weights/src/pallet_indices.rs | 26 +- pallets/weights/src/pallet_multisig.rs | 264 +++---- pallets/weights/src/pallet_nft.rs | 222 +++--- pallets/weights/src/pallet_pips.rs | 146 ++-- pallets/weights/src/pallet_portfolio.rs | 238 +++--- pallets/weights/src/pallet_preimage.rs | 64 +- pallets/weights/src/pallet_protocol_fee.rs | 18 +- pallets/weights/src/pallet_relayer.rs | 104 +-- pallets/weights/src/pallet_scheduler.rs | 78 +- pallets/weights/src/pallet_session.rs | 14 +- pallets/weights/src/pallet_settlement.rs | 542 ++++++-------- pallets/weights/src/pallet_staking.rs | 258 +++---- pallets/weights/src/pallet_statistics.rs | 182 ++--- pallets/weights/src/pallet_sto.rs | 148 ++-- pallets/weights/src/pallet_timestamp.rs | 14 +- pallets/weights/src/pallet_treasury.rs | 38 +- pallets/weights/src/pallet_utility.rs | 64 +- pallets/weights/src/polymesh_contracts.rs | 474 ++++++------ 30 files changed, 2387 insertions(+), 3155 deletions(-) diff --git a/pallets/weights/src/frame_system.rs b/pallets/weights/src/frame_system.rs index 182685ca15..833283e595 100644 --- a/pallets/weights/src/frame_system.rs +++ b/pallets/weights/src/frame_system.rs @@ -56,16 +56,16 @@ impl frame_system::WeightInfo for SubstrateWeight { /// The range of component `b` is `[0, 7864320]`. fn remark(b: u32) -> Weight { // Minimum execution time: 2_213 nanoseconds. - Weight::from_parts(12_794_737) + Weight::from_parts(12_794_737, 0) // Standard Error: 0 - .saturating_add(Weight::from_parts(346).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(346, 0).saturating_mul(b.into())) } /// The range of component `b` is `[0, 7864320]`. fn remark_with_event(b: u32) -> Weight { // Minimum execution time: 7_861 nanoseconds. - Weight::from_parts(7_881_000) + Weight::from_parts(7_881_000, 0) // Standard Error: 0 - .saturating_add(Weight::from_parts(1_288).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_288, 0).saturating_mul(b.into())) } // Storage: System Digest (r:1 w:1) // Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) @@ -73,7 +73,7 @@ impl frame_system::WeightInfo for SubstrateWeight { // Proof Skipped: unknown `0x3a686561707061676573` (r:0 w:1) fn set_heap_pages() -> Weight { // Minimum execution time: 4_276 nanoseconds. - Weight::from_parts(5_388_000) + Weight::from_parts(5_388_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -95,9 +95,9 @@ impl frame_system::WeightInfo for SubstrateWeight { /// The range of component `i` is `[0, 1000]`. fn set_storage(i: u32) -> Weight { // Minimum execution time: 2_403 nanoseconds. - Weight::from_parts(2_494_000) + Weight::from_parts(2_494_000, 0) // Standard Error: 1_536 - .saturating_add(Weight::from_parts(919_406).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(919_406, 0).saturating_mul(i.into())) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) @@ -105,9 +105,9 @@ impl frame_system::WeightInfo for SubstrateWeight { /// The range of component `i` is `[0, 1000]`. fn kill_storage(i: u32) -> Weight { // Minimum execution time: 2_384 nanoseconds. - Weight::from_parts(2_644_000) + Weight::from_parts(2_644_000, 0) // Standard Error: 1_357 - .saturating_add(Weight::from_parts(664_809).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(664_809, 0).saturating_mul(i.into())) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) @@ -115,9 +115,9 @@ impl frame_system::WeightInfo for SubstrateWeight { /// The range of component `p` is `[0, 1000]`. fn kill_prefix(p: u32) -> Weight { // Minimum execution time: 4_476 nanoseconds. - Weight::from_parts(4_787_000) + Weight::from_parts(4_787_000, 0) // Standard Error: 1_811 - .saturating_add(Weight::from_parts(1_200_907).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(1_200_907, 0).saturating_mul(p.into())) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(p.into()))) } diff --git a/pallets/weights/src/pallet_asset.rs b/pallets/weights/src/pallet_asset.rs index 8303292dca..86959ce7a0 100644 --- a/pallets/weights/src/pallet_asset.rs +++ b/pallets/weights/src/pallet_asset.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_asset //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,158 +54,131 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Asset TickerConfig (r:1 w:0) - // Proof: Asset TickerConfig (max_values: Some(1), max_size: Some(10), added: 505, mode: MaxEncodedLen) + // Proof Skipped: Asset TickerConfig (max_values: Some(1), max_size: None, mode: Measured) // Storage: Asset TickerAssetId (r:1 w:0) - // Proof: Asset TickerAssetId (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + // Proof Skipped: Asset TickerAssetId (max_values: None, max_size: None, mode: Measured) // Storage: Asset UniqueTickerRegistration (r:1 w:1) - // Proof: Asset UniqueTickerRegistration (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + // Proof Skipped: Asset UniqueTickerRegistration (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Identity CurrentPayer (r:1 w:0) - // Proof: Identity CurrentPayer (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentPayer (max_values: Some(1), max_size: None, mode: Measured) // Storage: Asset TickersOwnedByUser (r:0 w:1) - // Proof: Asset TickersOwnedByUser (max_values: None, max_size: Some(61), added: 2536, mode: MaxEncodedLen) + // Proof Skipped: Asset TickersOwnedByUser (max_values: None, max_size: None, mode: Measured) fn register_unique_ticker() -> Weight { - // Minimum execution time: 63_726 nanoseconds. - Weight::from_parts(67_341_000) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 49_124 nanoseconds. + Weight::from_parts(52_329_000, 0) + .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity Authorizations (r:1 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity OutdatedAuthorizations (r:1 w:0) - // Proof: Identity OutdatedAuthorizations (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Identity OutdatedAuthorizations (max_values: None, max_size: None, mode: Measured) // Storage: Asset TickerAssetId (r:1 w:0) - // Proof: Asset TickerAssetId (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + // Proof Skipped: Asset TickerAssetId (max_values: None, max_size: None, mode: Measured) // Storage: Asset UniqueTickerRegistration (r:1 w:1) - // Proof: Asset UniqueTickerRegistration (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + // Proof Skipped: Asset UniqueTickerRegistration (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:1) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Asset TickersOwnedByUser (r:0 w:2) - // Proof: Asset TickersOwnedByUser (max_values: None, max_size: Some(61), added: 2536, mode: MaxEncodedLen) + // Proof Skipped: Asset TickersOwnedByUser (max_values: None, max_size: None, mode: Measured) fn accept_ticker_transfer() -> Weight { - // Minimum execution time: 76_204 nanoseconds. - Weight::from_parts(87_151_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 61_791 nanoseconds. + Weight::from_parts(63_646_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(6)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity Authorizations (r:1 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity OutdatedAuthorizations (r:1 w:0) - // Proof: Identity OutdatedAuthorizations (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Identity OutdatedAuthorizations (max_values: None, max_size: None, mode: Measured) // Storage: Asset Assets (r:1 w:1) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Asset AssetIdTicker (r:1 w:0) - // Proof: Asset AssetIdTicker (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetIdTicker (max_values: None, max_size: None, mode: Measured) // Storage: Asset UniqueTickerRegistration (r:1 w:1) - // Proof: Asset UniqueTickerRegistration (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + // Proof Skipped: Asset UniqueTickerRegistration (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:1) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Asset TickersOwnedByUser (r:0 w:2) - // Proof: Asset TickersOwnedByUser (max_values: None, max_size: Some(61), added: 2536, mode: MaxEncodedLen) + // Proof Skipped: Asset TickersOwnedByUser (max_values: None, max_size: None, mode: Measured) // Storage: Asset SecurityTokensOwnedByUser (r:0 w:2) - // Proof: Asset SecurityTokensOwnedByUser (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Asset SecurityTokensOwnedByUser (max_values: None, max_size: None, mode: Measured) fn accept_asset_ownership_transfer() -> Weight { - // Minimum execution time: 98_809 nanoseconds. - Weight::from_parts(102_734_000) - .saturating_add(DbWeight::get().reads(14)) + // Minimum execution time: 89_264 nanoseconds. + Weight::from_parts(90_495_000, 0) + .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(9)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System BlockHash (r:1 w:0) // Proof: System BlockHash (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) // Storage: Asset AssetNonce (r:1 w:1) - // Proof: Asset AssetNonce (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetNonce (max_values: None, max_size: None, mode: Measured) // Storage: Asset Assets (r:1 w:1) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) + // Storage: Portfolio PortfolioCustodian (r:1 w:0) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Identity CurrentPayer (r:1 w:0) - // Proof: Identity CurrentPayer (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentPayer (max_values: Some(1), max_size: None, mode: Measured) // Storage: ExternalAgents NumFullAgents (r:1 w:1) - // Proof: ExternalAgents NumFullAgents (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents NumFullAgents (max_values: None, max_size: None, mode: Measured) // Storage: Asset FundingRound (r:0 w:1) // Proof Skipped: Asset FundingRound (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetNames (r:0 w:1) // Proof Skipped: Asset AssetNames (max_values: None, max_size: None, mode: Measured) // Storage: Asset SecurityTokensOwnedByUser (r:0 w:1) - // Proof: Asset SecurityTokensOwnedByUser (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Asset SecurityTokensOwnedByUser (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetIdentifiers (r:0 w:1) // Proof Skipped: Asset AssetIdentifiers (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents AgentOf (r:0 w:1) - // Proof: ExternalAgents AgentOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents AgentOf (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:0 w:1) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[1, 128]`. /// The range of component `i` is `[1, 512]`. /// The range of component `f` is `[1, 128]`. fn create_asset(n: u32, i: u32, f: u32) -> Weight { - // Minimum execution time: 90_306 nanoseconds. - Weight::from_parts(97_355_043) - // Standard Error: 11_077 - .saturating_add(Weight::from_parts(1_694).saturating_mul(n.into())) - // Standard Error: 2_763 - .saturating_add(Weight::from_parts(81_643).saturating_mul(i.into())) - // Standard Error: 11_077 - .saturating_add(Weight::from_parts(4_720).saturating_mul(f.into())) - .saturating_add(DbWeight::get().reads(12)) + // Minimum execution time: 79_620 nanoseconds. + Weight::from_parts(84_893_228, 0) + .saturating_add(Weight::from_parts(20_181, 0).saturating_mul(n.into())) + // Standard Error: 2_282 + .saturating_add(Weight::from_parts(66_647, 0).saturating_mul(i.into())) + // Standard Error: 9_149 + .saturating_add(Weight::from_parts(13_187, 0).saturating_mul(f.into())) + .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(9)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -213,23 +186,17 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset Assets (r:1 w:0) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Asset Frozen (r:1 w:1) - // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Asset Frozen (max_values: None, max_size: None, mode: Measured) fn freeze() -> Weight { - // Minimum execution time: 56_755 nanoseconds. - Weight::from_parts(60_942_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 40_401 nanoseconds. + Weight::from_parts(41_663_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -237,25 +204,19 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset Assets (r:1 w:0) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Asset Frozen (r:1 w:1) - // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Asset Frozen (max_values: None, max_size: None, mode: Measured) fn unfreeze() -> Weight { - // Minimum execution time: 55_072 nanoseconds. - Weight::from_parts(58_598_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 41_673 nanoseconds. + Weight::from_parts(45_007_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Asset Assets (r:1 w:0) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -264,23 +225,17 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset AssetNames (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[1, 128]`. fn rename_asset(n: u32) -> Weight { - // Minimum execution time: 51_837 nanoseconds. - Weight::from_parts(59_367_944) + // Minimum execution time: 35_943 nanoseconds. + Weight::from_parts(40_348_962, 0) // Standard Error: 5_348 - .saturating_add(Weight::from_parts(8_093).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(9)) + .saturating_add(Weight::from_parts(8_093, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -290,41 +245,35 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset Assets (r:1 w:1) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Asset BalanceOf (r:1 w:1) - // Proof: Asset BalanceOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) + // Proof Skipped: Asset BalanceOf (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CachedNextCheckpoints (r:1 w:0) // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CheckpointIdSequence (r:1 w:0) - // Proof: Checkpoint CheckpointIdSequence (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint CheckpointIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetBalances (r:1 w:1) - // Proof: Portfolio PortfolioAssetBalances (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetBalances (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetCount (r:1 w:1) - // Proof: Portfolio PortfolioAssetCount (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetCount (max_values: None, max_size: None, mode: Measured) // Storage: Statistics ActiveAssetStats (r:1 w:0) - // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) + // Proof Skipped: Statistics ActiveAssetStats (max_values: None, max_size: None, mode: Measured) // Storage: Asset FundingRound (r:1 w:0) // Proof Skipped: Asset FundingRound (max_values: None, max_size: None, mode: Measured) // Storage: Asset IssuedInFundingRound (r:1 w:1) // Proof Skipped: Asset IssuedInFundingRound (max_values: None, max_size: None, mode: Measured) fn issue() -> Weight { - // Minimum execution time: 103_145 nanoseconds. - Weight::from_parts(108_733_000) - .saturating_add(DbWeight::get().reads(20)) + // Minimum execution time: 86_960 nanoseconds. + Weight::from_parts(97_256_000, 0) + .saturating_add(DbWeight::get().reads(16)) .saturating_add(DbWeight::get().writes(5)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -332,37 +281,31 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Portfolio Portfolios (r:1 w:0) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:1 w:0) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: Asset Assets (r:1 w:1) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetBalances (r:1 w:1) - // Proof: Portfolio PortfolioAssetBalances (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetBalances (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedAssets (r:1 w:0) - // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedAssets (max_values: None, max_size: None, mode: Measured) // Storage: Asset BalanceOf (r:1 w:1) - // Proof: Asset BalanceOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) + // Proof Skipped: Asset BalanceOf (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CachedNextCheckpoints (r:1 w:0) // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CheckpointIdSequence (r:1 w:0) - // Proof: Checkpoint CheckpointIdSequence (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint CheckpointIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: Statistics ActiveAssetStats (r:1 w:0) - // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) + // Proof Skipped: Statistics ActiveAssetStats (max_values: None, max_size: None, mode: Measured) fn redeem() -> Weight { - // Minimum execution time: 92_739 nanoseconds. - Weight::from_parts(95_493_000) - .saturating_add(DbWeight::get().reads(17)) + // Minimum execution time: 77_997 nanoseconds. + Weight::from_parts(79_950_000, 0) + .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -370,53 +313,41 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset Assets (r:1 w:1) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) fn make_divisible() -> Weight { - // Minimum execution time: 51_687 nanoseconds. - Weight::from_parts(54_251_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 36_563 nanoseconds. + Weight::from_parts(37_907_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Asset AssetDocumentsIdSequence (r:1 w:1) - // Proof: Asset AssetDocumentsIdSequence (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetDocumentsIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetDocuments (r:0 w:64) // Proof Skipped: Asset AssetDocuments (max_values: None, max_size: None, mode: Measured) /// The range of component `d` is `[1, 64]`. fn add_documents(d: u32) -> Weight { - // Minimum execution time: 65_490 nanoseconds. - Weight::from_parts(66_672_016) - // Standard Error: 40_736 - .saturating_add(Weight::from_parts(11_127_312).saturating_mul(d.into())) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 49_905 nanoseconds. + Weight::from_parts(44_909_679, 0) + // Standard Error: 34_183 + .saturating_add(Weight::from_parts(11_133_100, 0).saturating_mul(d.into())) + .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(1)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(d.into()))) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -425,23 +356,17 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset AssetDocuments (max_values: None, max_size: None, mode: Measured) /// The range of component `d` is `[1, 64]`. fn remove_documents(d: u32) -> Weight { - // Minimum execution time: 38_247 nanoseconds. - Weight::from_parts(41_300_548) - // Standard Error: 23_228 - .saturating_add(Weight::from_parts(6_206_348).saturating_mul(d.into())) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 22_182 nanoseconds. + Weight::from_parts(21_595_029, 0) + // Standard Error: 21_140 + .saturating_add(Weight::from_parts(6_496_860, 0).saturating_mul(d.into())) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(d.into()))) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -450,23 +375,17 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset FundingRound (max_values: None, max_size: None, mode: Measured) /// The range of component `f` is `[1, 128]`. fn set_funding_round(f: u32) -> Weight { - // Minimum execution time: 46_250 nanoseconds. - Weight::from_parts(53_301_698) + // Minimum execution time: 30_045 nanoseconds. + Weight::from_parts(34_308_258, 0) // Standard Error: 3_823 - .saturating_add(Weight::from_parts(5_302).saturating_mul(f.into())) - .saturating_add(DbWeight::get().reads(8)) + .saturating_add(Weight::from_parts(5_302, 0).saturating_mul(f.into())) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -475,23 +394,17 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset AssetIdentifiers (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[1, 512]`. fn update_identifiers(i: u32) -> Weight { - // Minimum execution time: 48_783 nanoseconds. - Weight::from_parts(54_715_281) - // Standard Error: 2_741 - .saturating_add(Weight::from_parts(59_353).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 31_056 nanoseconds. + Weight::from_parts(34_256_155, 0) + // Standard Error: 2_248 + .saturating_add(Weight::from_parts(59_751, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -499,58 +412,46 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset Assets (r:1 w:0) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Asset BalanceOf (r:2 w:2) - // Proof: Asset BalanceOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) + // Proof Skipped: Asset BalanceOf (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetBalances (r:2 w:2) - // Proof: Portfolio PortfolioAssetBalances (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetBalances (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedAssets (r:1 w:0) - // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedAssets (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CachedNextCheckpoints (r:1 w:0) // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CheckpointIdSequence (r:1 w:0) - // Proof: Checkpoint CheckpointIdSequence (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint CheckpointIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetCount (r:1 w:1) - // Proof: Portfolio PortfolioAssetCount (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetCount (max_values: None, max_size: None, mode: Measured) // Storage: Statistics ActiveAssetStats (r:1 w:0) - // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) + // Proof Skipped: Statistics ActiveAssetStats (max_values: None, max_size: None, mode: Measured) fn controller_transfer() -> Weight { - // Minimum execution time: 130_507 nanoseconds. - Weight::from_parts(170_727_000) - .saturating_add(DbWeight::get().reads(18)) + // Minimum execution time: 94_831 nanoseconds. + Weight::from_parts(97_556_000, 0) + .saturating_add(DbWeight::get().reads(14)) .saturating_add(DbWeight::get().writes(5)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Asset CustomTypesInverse (r:1 w:1) // Proof Skipped: Asset CustomTypesInverse (max_values: None, max_size: None, mode: Measured) // Storage: Asset CustomTypeIdSequence (r:1 w:1) - // Proof: Asset CustomTypeIdSequence (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Proof Skipped: Asset CustomTypeIdSequence (max_values: Some(1), max_size: None, mode: Measured) // Storage: Asset CustomTypes (r:0 w:1) // Proof Skipped: Asset CustomTypes (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[1, 2048]`. fn register_custom_asset_type(n: u32) -> Weight { - // Minimum execution time: 45_658 nanoseconds. - Weight::from_parts(51_602_738) - // Standard Error: 702 - .saturating_add(Weight::from_parts(7_076).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 30_265 nanoseconds. + Weight::from_parts(32_957_363, 0) + // Standard Error: 406 + .saturating_add(Weight::from_parts(6_526, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -558,25 +459,19 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset AssetMetadataGlobalKeyToName (r:1 w:0) // Proof Skipped: Asset AssetMetadataGlobalKeyToName (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataValueDetails (r:1 w:1) - // Proof: Asset AssetMetadataValueDetails (max_values: None, max_size: Some(67), added: 2542, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetMetadataValueDetails (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataValues (r:0 w:1) // Proof Skipped: Asset AssetMetadataValues (max_values: None, max_size: None, mode: Measured) fn set_asset_metadata() -> Weight { - // Minimum execution time: 70_646 nanoseconds. - Weight::from_parts(76_696_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 55_263 nanoseconds. + Weight::from_parts(57_176_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -584,23 +479,19 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset AssetMetadataGlobalKeyToName (r:1 w:0) // Proof Skipped: Asset AssetMetadataGlobalKeyToName (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataValueDetails (r:1 w:1) - // Proof: Asset AssetMetadataValueDetails (max_values: None, max_size: Some(67), added: 2542, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetMetadataValueDetails (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set_asset_metadata_details() -> Weight { - // Minimum execution time: 62_383 nanoseconds. - Weight::from_parts(70_946_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 48_102 nanoseconds. + Weight::from_parts(52_127_000, 0) + .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -608,9 +499,9 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset AssetMetadataLocalNameToKey (r:1 w:1) // Proof Skipped: Asset AssetMetadataLocalNameToKey (max_values: None, max_size: None, mode: Measured) // Storage: Asset CurrentAssetMetadataLocalKey (r:1 w:1) - // Proof: Asset CurrentAssetMetadataLocalKey (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Asset CurrentAssetMetadataLocalKey (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataValueDetails (r:1 w:1) - // Proof: Asset AssetMetadataValueDetails (max_values: None, max_size: Some(67), added: 2542, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetMetadataValueDetails (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataValues (r:0 w:1) // Proof Skipped: Asset AssetMetadataValues (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataLocalKeyToName (r:0 w:1) @@ -618,21 +509,15 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset AssetMetadataLocalSpecs (r:0 w:1) // Proof Skipped: Asset AssetMetadataLocalSpecs (max_values: None, max_size: None, mode: Measured) fn register_and_set_local_asset_metadata() -> Weight { - // Minimum execution time: 100_911 nanoseconds. - Weight::from_parts(108_373_000) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 82_333 nanoseconds. + Weight::from_parts(86_209_000, 0) + .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(6)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -640,63 +525,51 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset AssetMetadataLocalNameToKey (r:1 w:1) // Proof Skipped: Asset AssetMetadataLocalNameToKey (max_values: None, max_size: None, mode: Measured) // Storage: Asset CurrentAssetMetadataLocalKey (r:1 w:1) - // Proof: Asset CurrentAssetMetadataLocalKey (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Asset CurrentAssetMetadataLocalKey (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataLocalKeyToName (r:0 w:1) // Proof Skipped: Asset AssetMetadataLocalKeyToName (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataLocalSpecs (r:0 w:1) // Proof Skipped: Asset AssetMetadataLocalSpecs (max_values: None, max_size: None, mode: Measured) fn register_asset_metadata_local_type() -> Weight { - // Minimum execution time: 75_253 nanoseconds. - Weight::from_parts(81_022_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 60_210 nanoseconds. + Weight::from_parts(61_893_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(4)) } // Storage: Asset AssetMetadataGlobalNameToKey (r:1 w:1) // Proof Skipped: Asset AssetMetadataGlobalNameToKey (max_values: None, max_size: None, mode: Measured) // Storage: Asset CurrentAssetMetadataGlobalKey (r:1 w:1) - // Proof: Asset CurrentAssetMetadataGlobalKey (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Asset CurrentAssetMetadataGlobalKey (max_values: Some(1), max_size: None, mode: Measured) // Storage: Asset AssetMetadataGlobalKeyToName (r:0 w:1) // Proof Skipped: Asset AssetMetadataGlobalKeyToName (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataGlobalSpecs (r:0 w:1) // Proof Skipped: Asset AssetMetadataGlobalSpecs (max_values: None, max_size: None, mode: Measured) fn register_asset_metadata_global_type() -> Weight { - // Minimum execution time: 34_301 nanoseconds. - Weight::from_parts(38_698_000) + // Minimum execution time: 35_473 nanoseconds. + Weight::from_parts(41_562_000, 0) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(4)) } // Storage: Asset Assets (r:1 w:1) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) fn update_asset_type() -> Weight { - // Minimum execution time: 53_871 nanoseconds. - Weight::from_parts(58_538_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 36_665 nanoseconds. + Weight::from_parts(43_065_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -704,11 +577,11 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset AssetMetadataLocalKeyToName (r:1 w:1) // Proof Skipped: Asset AssetMetadataLocalKeyToName (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataValueDetails (r:1 w:1) - // Proof: Asset AssetMetadataValueDetails (max_values: None, max_size: Some(67), added: 2542, mode: MaxEncodedLen) - // Storage: Nft CollectionAsset (r:1 w:0) - // Proof: Nft CollectionAsset (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) - // Storage: Nft CollectionKeys (r:1 w:0) - // Proof Skipped: Nft CollectionKeys (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Asset AssetMetadataValueDetails (max_values: None, max_size: None, mode: Measured) + // Storage: NFT CollectionAsset (r:1 w:0) + // Proof Skipped: NFT CollectionAsset (max_values: None, max_size: None, mode: Measured) + // Storage: NFT CollectionKeys (r:1 w:0) + // Proof Skipped: NFT CollectionKeys (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataValues (r:0 w:1) // Proof Skipped: Asset AssetMetadataValues (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataLocalNameToKey (r:0 w:1) @@ -716,21 +589,15 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset AssetMetadataLocalSpecs (r:0 w:1) // Proof Skipped: Asset AssetMetadataLocalSpecs (max_values: None, max_size: None, mode: Measured) fn remove_local_metadata_key() -> Weight { - // Minimum execution time: 78_718 nanoseconds. - Weight::from_parts(83_675_000) - .saturating_add(DbWeight::get().reads(12)) + // Minimum execution time: 65_649 nanoseconds. + Weight::from_parts(66_860_000, 0) + .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(5)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -738,197 +605,163 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset AssetMetadataLocalKeyToName (r:1 w:0) // Proof Skipped: Asset AssetMetadataLocalKeyToName (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataValueDetails (r:1 w:1) - // Proof: Asset AssetMetadataValueDetails (max_values: None, max_size: Some(67), added: 2542, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetMetadataValueDetails (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataValues (r:0 w:1) // Proof Skipped: Asset AssetMetadataValues (max_values: None, max_size: None, mode: Measured) fn remove_metadata_value() -> Weight { - // Minimum execution time: 59_940 nanoseconds. - Weight::from_parts(62_985_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 45_568 nanoseconds. + Weight::from_parts(46_749_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Asset Assets (r:1 w:0) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Asset BalanceOf (r:2 w:2) - // Proof: Asset BalanceOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) + // Proof Skipped: Asset BalanceOf (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio Portfolios (r:2 w:0) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetBalances (r:2 w:2) - // Proof: Portfolio PortfolioAssetBalances (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetBalances (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedAssets (r:1 w:0) - // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedAssets (max_values: None, max_size: None, mode: Measured) // Storage: Asset Frozen (r:1 w:0) - // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Asset Frozen (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity Claims (r:4 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetTransferCompliances (r:1 w:0) - // Proof: Statistics AssetTransferCompliances (max_values: None, max_size: Some(246), added: 2721, mode: MaxEncodedLen) + // Proof Skipped: Statistics AssetTransferCompliances (max_values: None, max_size: None, mode: Measured) // Storage: ComplianceManager AssetCompliances (r:1 w:0) // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CachedNextCheckpoints (r:1 w:0) // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CheckpointIdSequence (r:1 w:0) - // Proof: Checkpoint CheckpointIdSequence (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint CheckpointIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetCount (r:1 w:1) - // Proof: Portfolio PortfolioAssetCount (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetCount (max_values: None, max_size: None, mode: Measured) // Storage: Statistics ActiveAssetStats (r:1 w:0) - // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) + // Proof Skipped: Statistics ActiveAssetStats (max_values: None, max_size: None, mode: Measured) fn base_transfer() -> Weight { - // Minimum execution time: 161_463 nanoseconds. - Weight::from_parts(173_099_000) + // Minimum execution time: 164_396 nanoseconds. + Weight::from_parts(168_101_000, 0) .saturating_add(DbWeight::get().reads(21)) .saturating_add(DbWeight::get().writes(5)) } // Storage: Asset AssetsExemptFromAffirmation (r:0 w:1) - // Proof: Asset AssetsExemptFromAffirmation (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetsExemptFromAffirmation (max_values: None, max_size: None, mode: Measured) fn exempt_asset_affirmation() -> Weight { - // Minimum execution time: 11_076 nanoseconds. - Weight::from_parts(12_279_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 13_289 nanoseconds. + Weight::from_parts(16_024_000, 0).saturating_add(DbWeight::get().writes(1)) } // Storage: Asset AssetsExemptFromAffirmation (r:0 w:1) - // Proof: Asset AssetsExemptFromAffirmation (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetsExemptFromAffirmation (max_values: None, max_size: None, mode: Measured) fn remove_asset_affirmation_exemption() -> Weight { - // Minimum execution time: 11_106 nanoseconds. - Weight::from_parts(11_667_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 13_811 nanoseconds. + Weight::from_parts(14_711_000, 0).saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Asset PreApprovedAsset (r:0 w:1) - // Proof: Asset PreApprovedAsset (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Asset PreApprovedAsset (max_values: None, max_size: None, mode: Measured) fn pre_approve_asset() -> Weight { - // Minimum execution time: 35_714 nanoseconds. - Weight::from_parts(37_156_000) - .saturating_add(DbWeight::get().reads(5)) + // Minimum execution time: 20_762 nanoseconds. + Weight::from_parts(22_614_000, 0) + .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Asset PreApprovedAsset (r:0 w:1) - // Proof: Asset PreApprovedAsset (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Asset PreApprovedAsset (max_values: None, max_size: None, mode: Measured) fn remove_asset_pre_approval() -> Weight { - // Minimum execution time: 35_304 nanoseconds. - Weight::from_parts(39_419_000) - .saturating_add(DbWeight::get().reads(5)) + // Minimum execution time: 21_572 nanoseconds. + Weight::from_parts(23_626_000, 0) + .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Asset MandatoryMediators (r:1 w:1) - // Proof: Asset MandatoryMediators (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) + // Proof Skipped: Asset MandatoryMediators (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[1, 4]`. fn add_mandatory_mediators(n: u32) -> Weight { - // Minimum execution time: 50_326 nanoseconds. - Weight::from_parts(56_082_500) - // Standard Error: 232_681 - .saturating_add(Weight::from_parts(421_968).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 33_950 nanoseconds. + Weight::from_parts(37_383_822, 0) + // Standard Error: 148_326 + .saturating_add(Weight::from_parts(584_842, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Asset MandatoryMediators (r:1 w:1) - // Proof: Asset MandatoryMediators (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) + // Proof Skipped: Asset MandatoryMediators (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[1, 4]`. fn remove_mandatory_mediators(n: u32) -> Weight { - // Minimum execution time: 51_087 nanoseconds. - Weight::from_parts(56_207_675) - // Standard Error: 227_232 - .saturating_add(Weight::from_parts(585_583).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 35_053 nanoseconds. + Weight::from_parts(39_197_078, 0) + // Standard Error: 113_163 + .saturating_add(Weight::from_parts(169_623, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Asset UniqueTickerRegistration (r:1 w:1) - // Proof: Asset UniqueTickerRegistration (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + // Proof Skipped: Asset UniqueTickerRegistration (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Asset TickerAssetId (r:1 w:1) - // Proof: Asset TickerAssetId (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + // Proof Skipped: Asset TickerAssetId (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetIdTicker (r:1 w:1) - // Proof: Asset AssetIdTicker (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetIdTicker (max_values: None, max_size: None, mode: Measured) fn link_ticker_to_asset_id() -> Weight { - // Minimum execution time: 64_497 nanoseconds. - Weight::from_parts(65_049_000) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 50_786 nanoseconds. + Weight::from_parts(55_283_000, 0) + .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Asset UniqueTickerRegistration (r:1 w:1) - // Proof: Asset UniqueTickerRegistration (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + // Proof Skipped: Asset UniqueTickerRegistration (max_values: None, max_size: None, mode: Measured) // Storage: Asset TickerAssetId (r:1 w:1) - // Proof: Asset TickerAssetId (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + // Proof Skipped: Asset TickerAssetId (max_values: None, max_size: None, mode: Measured) // Storage: Asset TickersOwnedByUser (r:0 w:1) - // Proof: Asset TickersOwnedByUser (max_values: None, max_size: Some(61), added: 2536, mode: MaxEncodedLen) + // Proof Skipped: Asset TickersOwnedByUser (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetIdTicker (r:0 w:1) - // Proof: Asset AssetIdTicker (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetIdTicker (max_values: None, max_size: None, mode: Measured) fn unlink_ticker_from_asset_id() -> Weight { - // Minimum execution time: 65_029 nanoseconds. - Weight::from_parts(75_212_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 49_083 nanoseconds. + Weight::from_parts(52_949_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(4)) } // Storage: Asset AssetMetadataGlobalNameToKey (r:1 w:0) @@ -936,8 +769,8 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Storage: Asset AssetMetadataGlobalSpecs (r:1 w:1) // Proof Skipped: Asset AssetMetadataGlobalSpecs (max_values: None, max_size: None, mode: Measured) fn update_global_metadata_spec() -> Weight { - // Minimum execution time: 40_751 nanoseconds. - Weight::from_parts(44_277_000) + // Minimum execution time: 40_469 nanoseconds. + Weight::from_parts(40_786_000, 0) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } diff --git a/pallets/weights/src/pallet_balances.rs b/pallets/weights/src/pallet_balances.rs index dc3bcbb280..f123494c6a 100644 --- a/pallets/weights/src/pallet_balances.rs +++ b/pallets/weights/src/pallet_balances.rs @@ -53,64 +53,96 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; /// Weights for pallet_balances using the Substrate node and recommended hardware. pub struct SubstrateWeight; impl pallet_balances::WeightInfo for SubstrateWeight { - // Storage: System Account (r:2 w:2) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - // Storage: Identity KeyRecords (r:2 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - fn transfer() -> Weight { - // Minimum execution time: 41_953 nanoseconds. - Weight::from_parts(45_729_000) - .saturating_add(DbWeight::get().reads(4)) - .saturating_add(DbWeight::get().writes(2)) - } - // Storage: System Account (r:2 w:2) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - // Storage: Identity KeyRecords (r:2 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - fn force_transfer() -> Weight { - // Minimum execution time: 33_280 nanoseconds. - Weight::from_parts(36_064_000) - .saturating_add(DbWeight::get().reads(4)) - .saturating_add(DbWeight::get().writes(2)) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn transfer_allow_death() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3593` + // Minimum execution time: 58_474_000 picoseconds. + Weight::from_parts(59_117_000, 3593) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) } - /// Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn transfer_keep_alive() -> Weight { - // Minimum execution time: 28_184 nanoseconds. - Weight::from_parts(49_250_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3593` + // Minimum execution time: 44_629_000 picoseconds. + Weight::from_parts(45_798_000, 3593) .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } - /// Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - fn set_balance_creating() -> Weight { - // Minimum execution time: 17_474 nanoseconds. - Weight::from_parts(17_777_000) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn force_set_balance_creating() -> Weight { + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 16_483_000 picoseconds. + Weight::from_parts(16_939_000, 3593) .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } - /// Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - fn set_balance_killing() -> Weight { - // Minimum execution time: 20_962 nanoseconds. - Weight::from_parts(21_419_000) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn force_set_balance_killing() -> Weight { + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 24_638_000 picoseconds. + Weight::from_parts(25_487_000, 3593) .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } - // Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: `System::Account` (r:2 w:2) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn force_transfer() -> Weight { + // Proof Size summary in bytes: + // Measured: `103` + // Estimated: `6196` + // Minimum execution time: 60_041_000 picoseconds. + Weight::from_parts(63_365_000, 6196) + .saturating_add(DbWeight::get().reads(2_u64)) + .saturating_add(DbWeight::get().writes(2_u64)) + } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn transfer_all() -> Weight { - // Minimum execution time: 34_878 nanoseconds. - Weight::from_parts(35_121_000) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3593` + // Minimum execution time: 54_445_000 picoseconds. + Weight::from_parts(55_623_000, 3593) .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } - /// Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn force_unreserve() -> Weight { - // Minimum execution time: 16_790 nanoseconds. - Weight::from_parts(17_029_000) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 19_309_000 picoseconds. + Weight::from_parts(19_953_000, 3593) .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } + /// Storage: `System::Account` (r:999 w:999) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `u` is `[1, 1000]`. + fn upgrade_accounts(u: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `0 + u * (135 ±0)` + // Estimated: `990 + u * (2603 ±0)` + // Minimum execution time: 19_362_000 picoseconds. + Weight::from_parts(19_612_000, 990) + // Standard Error: 13_108 + .saturating_add(Weight::from_parts(16_444_591, 0).saturating_mul(u.into())) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(u.into()))) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(u.into()))) + .saturating_add(Weight::from_parts(0, 2603).saturating_mul(u.into())) + } } diff --git a/pallets/weights/src/pallet_capital_distribution.rs b/pallets/weights/src/pallet_capital_distribution.rs index 2b4e584f19..9c59c05c2f 100644 --- a/pallets/weights/src/pallet_capital_distribution.rs +++ b/pallets/weights/src/pallet_capital_distribution.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_capital_distribution //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,23 +54,17 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_corporate_actions::distribution::WeightInfo for SubstrateWeight { // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: CapitalDistribution Distributions (r:1 w:1) - // Proof: CapitalDistribution Distributions (max_values: None, max_size: Some(159), added: 2634, mode: MaxEncodedLen) + // Proof Skipped: CapitalDistribution Distributions (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:1 w:0) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio Portfolios (r:1 w:0) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) // Storage: CorporateAction CorporateActions (r:1 w:0) @@ -78,169 +72,161 @@ impl pallet_corporate_actions::distribution::WeightInfo for SubstrateWeight { // Storage: Asset Assets (r:1 w:0) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetBalances (r:1 w:0) - // Proof: Portfolio PortfolioAssetBalances (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetBalances (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedAssets (r:1 w:1) - // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedAssets (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) fn distribute() -> Weight { - // Minimum execution time: 100_781 nanoseconds. - Weight::from_parts(110_085_000) - .saturating_add(DbWeight::get().reads(17)) + // Minimum execution time: 81_412 nanoseconds. + Weight::from_parts(91_938_000, 0) + .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:4 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: CapitalDistribution HolderPaid (r:1 w:1) - // Proof: CapitalDistribution HolderPaid (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + // Proof Skipped: CapitalDistribution HolderPaid (max_values: None, max_size: None, mode: Measured) // Storage: CapitalDistribution Distributions (r:1 w:1) - // Proof: CapitalDistribution Distributions (max_values: None, max_size: Some(159), added: 2634, mode: MaxEncodedLen) + // Proof Skipped: CapitalDistribution Distributions (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: CorporateAction CorporateActions (r:1 w:0) // Proof Skipped: CorporateAction CorporateActions (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint SchedulePoints (r:1 w:0) // Proof Skipped: Checkpoint SchedulePoints (max_values: None, max_size: None, mode: Measured) // Storage: Asset BalanceOf (r:3 w:2) - // Proof: Asset BalanceOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) + // Proof Skipped: Asset BalanceOf (max_values: None, max_size: None, mode: Measured) // Storage: Asset Assets (r:1 w:0) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedAssets (r:1 w:1) - // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedAssets (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio Portfolios (r:1 w:0) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetBalances (r:2 w:2) - // Proof: Portfolio PortfolioAssetBalances (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetBalances (max_values: None, max_size: None, mode: Measured) // Storage: Asset Frozen (r:1 w:0) - // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Asset Frozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:4 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetTransferCompliances (r:1 w:0) - // Proof: Statistics AssetTransferCompliances (max_values: None, max_size: Some(246), added: 2721, mode: MaxEncodedLen) + // Proof Skipped: Statistics AssetTransferCompliances (max_values: None, max_size: None, mode: Measured) // Storage: ComplianceManager AssetCompliances (r:1 w:0) // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CachedNextCheckpoints (r:1 w:0) // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CheckpointIdSequence (r:1 w:0) - // Proof: Checkpoint CheckpointIdSequence (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint CheckpointIdSequence (max_values: None, max_size: None, mode: Measured) /// The range of component `t` is `[0, 1000]`. /// The range of component `w` is `[0, 1000]`. fn claim(t: u32, w: u32) -> Weight { - // Minimum execution time: 276_114 nanoseconds. - Weight::from_parts(279_222_776) - // Standard Error: 1_869 - .saturating_add(Weight::from_parts(24_532).saturating_mul(t.into())) - // Standard Error: 1_869 - .saturating_add(Weight::from_parts(15_303).saturating_mul(w.into())) + // Minimum execution time: 282_282 nanoseconds. + Weight::from_parts(295_677_207, 0) + // Standard Error: 2_270 + .saturating_add(Weight::from_parts(37_836, 0).saturating_mul(t.into())) + // Standard Error: 2_270 + .saturating_add(Weight::from_parts(13_878, 0).saturating_mul(w.into())) .saturating_add(DbWeight::get().reads(24)) .saturating_add(DbWeight::get().writes(7)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:4 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: CapitalDistribution HolderPaid (r:1 w:1) - // Proof: CapitalDistribution HolderPaid (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) + // Proof Skipped: CapitalDistribution HolderPaid (max_values: None, max_size: None, mode: Measured) // Storage: CapitalDistribution Distributions (r:1 w:1) - // Proof: CapitalDistribution Distributions (max_values: None, max_size: Some(159), added: 2634, mode: MaxEncodedLen) + // Proof Skipped: CapitalDistribution Distributions (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: CorporateAction CorporateActions (r:1 w:0) // Proof Skipped: CorporateAction CorporateActions (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint SchedulePoints (r:1 w:0) // Proof Skipped: Checkpoint SchedulePoints (max_values: None, max_size: None, mode: Measured) // Storage: Asset BalanceOf (r:3 w:2) - // Proof: Asset BalanceOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) + // Proof Skipped: Asset BalanceOf (max_values: None, max_size: None, mode: Measured) // Storage: Asset Assets (r:1 w:0) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedAssets (r:1 w:1) - // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedAssets (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio Portfolios (r:1 w:0) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetBalances (r:2 w:2) - // Proof: Portfolio PortfolioAssetBalances (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetBalances (max_values: None, max_size: None, mode: Measured) // Storage: Asset Frozen (r:1 w:0) - // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Asset Frozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:4 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetTransferCompliances (r:1 w:0) - // Proof: Statistics AssetTransferCompliances (max_values: None, max_size: Some(246), added: 2721, mode: MaxEncodedLen) + // Proof Skipped: Statistics AssetTransferCompliances (max_values: None, max_size: None, mode: Measured) // Storage: ComplianceManager AssetCompliances (r:1 w:0) // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CachedNextCheckpoints (r:1 w:0) // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CheckpointIdSequence (r:1 w:0) - // Proof: Checkpoint CheckpointIdSequence (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint CheckpointIdSequence (max_values: None, max_size: None, mode: Measured) /// The range of component `t` is `[0, 1000]`. /// The range of component `w` is `[0, 1000]`. fn push_benefit(t: u32, w: u32) -> Weight { - // Minimum execution time: 285_929 nanoseconds. - Weight::from_parts(290_297_753) - // Standard Error: 2_111 - .saturating_add(Weight::from_parts(27_742).saturating_mul(t.into())) - // Standard Error: 2_111 - .saturating_add(Weight::from_parts(19_877).saturating_mul(w.into())) + // Minimum execution time: 299_609 nanoseconds. + Weight::from_parts(292_208_631, 0) + // Standard Error: 2_178 + .saturating_add(Weight::from_parts(45_439, 0).saturating_mul(t.into())) + // Standard Error: 2_178 + .saturating_add(Weight::from_parts(29_985, 0).saturating_mul(w.into())) .saturating_add(DbWeight::get().reads(27)) .saturating_add(DbWeight::get().writes(7)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: CapitalDistribution Distributions (r:1 w:1) - // Proof: CapitalDistribution Distributions (max_values: None, max_size: Some(159), added: 2634, mode: MaxEncodedLen) + // Proof Skipped: CapitalDistribution Distributions (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Portfolio PortfolioCustodian (r:1 w:0) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedAssets (r:1 w:1) - // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedAssets (max_values: None, max_size: None, mode: Measured) fn reclaim() -> Weight { - // Minimum execution time: 72_700 nanoseconds. - Weight::from_parts(74_972_000) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 59_550 nanoseconds. + Weight::from_parts(63_365_000, 0) + .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: CapitalDistribution Distributions (r:1 w:1) - // Proof: CapitalDistribution Distributions (max_values: None, max_size: Some(159), added: 2634, mode: MaxEncodedLen) + // Proof Skipped: CapitalDistribution Distributions (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Portfolio PortfolioLockedAssets (r:1 w:1) - // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedAssets (max_values: None, max_size: None, mode: Measured) fn remove_distribution() -> Weight { - // Minimum execution time: 69_355 nanoseconds. - Weight::from_parts(70_566_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 57_575 nanoseconds. + Weight::from_parts(59_079_000, 0) + .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(2)) } } diff --git a/pallets/weights/src/pallet_checkpoint.rs b/pallets/weights/src/pallet_checkpoint.rs index f47f03a2d6..d6a187d964 100644 --- a/pallets/weights/src/pallet_checkpoint.rs +++ b/pallets/weights/src/pallet_checkpoint.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_checkpoint //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,83 +54,69 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_asset::checkpoint::WeightInfo for SubstrateWeight { // Storage: Checkpoint SchedulesMaxComplexity (r:0 w:1) - // Proof: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: None, mode: Measured) fn set_schedules_max_complexity() -> Weight { - // Minimum execution time: 8_703 nanoseconds. - Weight::from_parts(9_895_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 11_066 nanoseconds. + Weight::from_parts(11_147_000, 0).saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Checkpoint CheckpointIdSequence (r:1 w:1) - // Proof: Checkpoint CheckpointIdSequence (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint CheckpointIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: Asset Assets (r:1 w:0) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint TotalSupply (r:0 w:1) - // Proof: Checkpoint TotalSupply (max_values: None, max_size: Some(64), added: 2539, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint TotalSupply (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint Timestamps (r:0 w:1) - // Proof: Checkpoint Timestamps (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint Timestamps (max_values: None, max_size: None, mode: Measured) fn create_checkpoint() -> Weight { - // Minimum execution time: 68_784 nanoseconds. - Weight::from_parts(70_386_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 58_728 nanoseconds. + Weight::from_parts(64_186_000, 0) + .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Checkpoint SchedulesMaxComplexity (r:1 w:0) - // Proof: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: None, mode: Measured) // Storage: Checkpoint CachedNextCheckpoints (r:1 w:1) // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Checkpoint ScheduleIdSequence (r:1 w:1) - // Proof: Checkpoint ScheduleIdSequence (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduledCheckpoints (r:0 w:1) // Proof Skipped: Checkpoint ScheduledCheckpoints (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduleRefCount (r:0 w:1) - // Proof: Checkpoint ScheduleRefCount (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleRefCount (max_values: None, max_size: None, mode: Measured) fn create_schedule() -> Weight { - // Minimum execution time: 88_713 nanoseconds. - Weight::from_parts(93_971_000) - .saturating_add(DbWeight::get().reads(13)) + // Minimum execution time: 81_152 nanoseconds. + Weight::from_parts(97_196_000, 0) + .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(4)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -138,13 +124,13 @@ impl pallet_asset::checkpoint::WeightInfo for SubstrateWeight { // Storage: Checkpoint ScheduledCheckpoints (r:1 w:1) // Proof Skipped: Checkpoint ScheduledCheckpoints (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduleRefCount (r:1 w:1) - // Proof: Checkpoint ScheduleRefCount (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleRefCount (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint CachedNextCheckpoints (r:1 w:1) // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) fn remove_schedule() -> Weight { - // Minimum execution time: 82_724 nanoseconds. - Weight::from_parts(85_929_000) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 69_505 nanoseconds. + Weight::from_parts(72_329_000, 0) + .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(3)) } } diff --git a/pallets/weights/src/pallet_committee.rs b/pallets/weights/src/pallet_committee.rs index 56ccbaf48f..d60732e164 100644 --- a/pallets/weights/src/pallet_committee.rs +++ b/pallets/weights/src/pallet_committee.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_committee //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -53,116 +53,92 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; /// Weights for pallet_committee using the Substrate node and recommended hardware. pub struct SubstrateWeight; impl pallet_committee::WeightInfo for SubstrateWeight { - // Storage: PolymeshCommittee VoteThreshold (r:0 w:1) - // Proof: PolymeshCommittee VoteThreshold (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Instance1Committee VoteThreshold (r:0 w:1) + // Proof Skipped: Instance1Committee VoteThreshold (max_values: Some(1), max_size: None, mode: Measured) fn set_vote_threshold() -> Weight { - // Minimum execution time: 7_591 nanoseconds. - Weight::from_parts(9_164_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 10_135 nanoseconds. + Weight::from_parts(11_227_000, 0).saturating_add(DbWeight::get().writes(1)) } - // Storage: PolymeshCommittee Members (r:1 w:0) - // Proof Skipped: PolymeshCommittee Members (max_values: Some(1), max_size: None, mode: Measured) - // Storage: PolymeshCommittee ReleaseCoordinator (r:0 w:1) - // Proof: PolymeshCommittee ReleaseCoordinator (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + // Storage: Instance1Committee Members (r:1 w:0) + // Proof Skipped: Instance1Committee Members (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance1Committee ReleaseCoordinator (r:0 w:1) + // Proof Skipped: Instance1Committee ReleaseCoordinator (max_values: Some(1), max_size: None, mode: Measured) fn set_release_coordinator() -> Weight { - // Minimum execution time: 39_479 nanoseconds. - Weight::from_parts(42_193_000) + // Minimum execution time: 48_141 nanoseconds. + Weight::from_parts(53_229_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } - // Storage: PolymeshCommittee ExpiresAfter (r:0 w:1) - // Proof: PolymeshCommittee ExpiresAfter (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) + // Storage: Instance1Committee ExpiresAfter (r:0 w:1) + // Proof Skipped: Instance1Committee ExpiresAfter (max_values: Some(1), max_size: None, mode: Measured) fn set_expires_after() -> Weight { - // Minimum execution time: 7_782 nanoseconds. - Weight::from_parts(8_012_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 9_975 nanoseconds. + Weight::from_parts(11_197_000, 0).saturating_add(DbWeight::get().writes(1)) } - // Storage: PolymeshCommittee Voting (r:1 w:1) - // Proof Skipped: PolymeshCommittee Voting (max_values: None, max_size: None, mode: Measured) + // Storage: Instance1Committee Voting (r:1 w:1) + // Proof Skipped: Instance1Committee Voting (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: PolymeshCommittee Members (r:1 w:0) - // Proof Skipped: PolymeshCommittee Members (max_values: Some(1), max_size: None, mode: Measured) - // Storage: PolymeshCommittee ProposalCount (r:1 w:1) - // Proof: PolymeshCommittee ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) - // Storage: PolymeshCommittee ProposalOf (r:1 w:1) - // Proof Skipped: PolymeshCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) - // Storage: PolymeshCommittee Proposals (r:1 w:1) - // Proof Skipped: PolymeshCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) - // Storage: PolymeshCommittee ExpiresAfter (r:1 w:0) - // Proof: PolymeshCommittee ExpiresAfter (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Instance1Committee Members (r:1 w:0) + // Proof Skipped: Instance1Committee Members (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance1Committee ProposalCount (r:1 w:1) + // Proof Skipped: Instance1Committee ProposalCount (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance1Committee ProposalOf (r:1 w:1) + // Proof Skipped: Instance1Committee ProposalOf (max_values: None, max_size: None, mode: Measured) + // Storage: Instance1Committee Proposals (r:1 w:1) + // Proof Skipped: Instance1Committee Proposals (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance1Committee ExpiresAfter (r:1 w:0) + // Proof Skipped: Instance1Committee ExpiresAfter (max_values: Some(1), max_size: None, mode: Measured) fn vote_or_propose_new_proposal() -> Weight { - // Minimum execution time: 175_102 nanoseconds. - Weight::from_parts(187_271_000) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 149_715 nanoseconds. + Weight::from_parts(156_454_000, 0) + .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(4)) } - // Storage: PolymeshCommittee Voting (r:1 w:1) - // Proof Skipped: PolymeshCommittee Voting (max_values: None, max_size: None, mode: Measured) + // Storage: Instance1Committee Voting (r:1 w:1) + // Proof Skipped: Instance1Committee Voting (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: PolymeshCommittee Members (r:1 w:0) - // Proof Skipped: PolymeshCommittee Members (max_values: Some(1), max_size: None, mode: Measured) - // Storage: PolymeshCommittee VoteThreshold (r:1 w:0) - // Proof: PolymeshCommittee VoteThreshold (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Instance1Committee Members (r:1 w:0) + // Proof Skipped: Instance1Committee Members (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance1Committee VoteThreshold (r:1 w:0) + // Proof Skipped: Instance1Committee VoteThreshold (max_values: Some(1), max_size: None, mode: Measured) fn vote_or_propose_existing_proposal() -> Weight { - // Minimum execution time: 148_123 nanoseconds. - Weight::from_parts(167_150_000) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 119_660 nanoseconds. + Weight::from_parts(135_473_000, 0) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: PolymeshCommittee Members (r:1 w:0) - // Proof Skipped: PolymeshCommittee Members (max_values: Some(1), max_size: None, mode: Measured) - // Storage: PolymeshCommittee Voting (r:1 w:1) - // Proof Skipped: PolymeshCommittee Voting (max_values: None, max_size: None, mode: Measured) - // Storage: PolymeshCommittee VoteThreshold (r:1 w:0) - // Proof: PolymeshCommittee VoteThreshold (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: PolymeshCommittee ProposalOf (r:1 w:1) - // Proof Skipped: PolymeshCommittee ProposalOf (max_values: None, max_size: None, mode: Measured) - // Storage: PolymeshCommittee Proposals (r:1 w:1) - // Proof Skipped: PolymeshCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Instance1Committee Members (r:1 w:0) + // Proof Skipped: Instance1Committee Members (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance1Committee Voting (r:1 w:1) + // Proof Skipped: Instance1Committee Voting (max_values: None, max_size: None, mode: Measured) + // Storage: Instance1Committee VoteThreshold (r:1 w:0) + // Proof Skipped: Instance1Committee VoteThreshold (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance1Committee ProposalOf (r:1 w:1) + // Proof Skipped: Instance1Committee ProposalOf (max_values: None, max_size: None, mode: Measured) + // Storage: Instance1Committee Proposals (r:1 w:1) + // Proof Skipped: Instance1Committee Proposals (max_values: Some(1), max_size: None, mode: Measured) fn vote_aye() -> Weight { - // Minimum execution time: 277_426 nanoseconds. - Weight::from_parts(283_316_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 266_349 nanoseconds. + Weight::from_parts(275_382_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: PolymeshCommittee Members (r:1 w:0) - // Proof Skipped: PolymeshCommittee Members (max_values: Some(1), max_size: None, mode: Measured) - // Storage: PolymeshCommittee Voting (r:1 w:1) - // Proof Skipped: PolymeshCommittee Voting (max_values: None, max_size: None, mode: Measured) - // Storage: PolymeshCommittee VoteThreshold (r:1 w:0) - // Proof: PolymeshCommittee VoteThreshold (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Instance1Committee Members (r:1 w:0) + // Proof Skipped: Instance1Committee Members (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance1Committee Voting (r:1 w:1) + // Proof Skipped: Instance1Committee Voting (max_values: None, max_size: None, mode: Measured) + // Storage: Instance1Committee VoteThreshold (r:1 w:0) + // Proof Skipped: Instance1Committee VoteThreshold (max_values: Some(1), max_size: None, mode: Measured) fn vote_nay() -> Weight { - // Minimum execution time: 128_122 nanoseconds. - Weight::from_parts(135_624_000) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 107_030 nanoseconds. + Weight::from_parts(109_584_000, 0) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(1)) } } diff --git a/pallets/weights/src/pallet_compliance_manager.rs b/pallets/weights/src/pallet_compliance_manager.rs index 700e5ec40e..74f0efdff3 100644 --- a/pallets/weights/src/pallet_compliance_manager.rs +++ b/pallets/weights/src/pallet_compliance_manager.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_compliance_manager //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -58,27 +58,21 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { /// The range of component `c` is `[1, 10]`. /// The range of component `d` is `[1, 10]`. fn condition_costs(a: u32, b: u32, c: u32, d: u32) -> Weight { - // Minimum execution time: 9_404 nanoseconds. - Weight::from_parts(10_015_000) - // Standard Error: 64_392 - .saturating_add(Weight::from_parts(4_291_077).saturating_mul(a.into())) - // Standard Error: 64_392 - .saturating_add(Weight::from_parts(312_778).saturating_mul(b.into())) - // Standard Error: 64_392 - .saturating_add(Weight::from_parts(1_280_895).saturating_mul(c.into())) + // Minimum execution time: 10_175 nanoseconds. + Weight::from_parts(10_696_000, 0) + // Standard Error: 62_942 + .saturating_add(Weight::from_parts(4_457_478, 0).saturating_mul(a.into())) + // Standard Error: 62_942 + .saturating_add(Weight::from_parts(496_104, 0).saturating_mul(b.into())) + // Standard Error: 62_942 + .saturating_add(Weight::from_parts(1_188_416, 0).saturating_mul(c.into())) // Manually set for `d` .saturating_add(Weight::from_parts(721_394, 0).saturating_mul(d.into())) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -88,28 +82,22 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Storage: ComplianceManager TrustedClaimIssuer (r:1 w:0) // Proof Skipped: ComplianceManager TrustedClaimIssuer (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 6]`. fn add_compliance_requirement(c: u32) -> Weight { - // Minimum execution time: 71_377 nanoseconds. - Weight::from_parts(76_477_459) - // Standard Error: 117_286 - .saturating_add(Weight::from_parts(1_396_847).saturating_mul(c.into())) - .saturating_add(DbWeight::get().reads(12)) + // Minimum execution time: 56_464 nanoseconds. + Weight::from_parts(61_594_226, 0) + // Standard Error: 149_493 + .saturating_add(Weight::from_parts(1_040_910, 0).saturating_mul(c.into())) + .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -117,21 +105,15 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Storage: ComplianceManager AssetCompliances (r:1 w:1) // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) fn remove_compliance_requirement() -> Weight { - // Minimum execution time: 59_800 nanoseconds. - Weight::from_parts(61_332_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 42_534 nanoseconds. + Weight::from_parts(45_248_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -139,21 +121,15 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Storage: ComplianceManager AssetCompliances (r:1 w:1) // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) fn pause_asset_compliance() -> Weight { - // Minimum execution time: 61_663 nanoseconds. - Weight::from_parts(62_814_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 45_218 nanoseconds. + Weight::from_parts(48_943_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -161,47 +137,35 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Storage: ComplianceManager AssetCompliances (r:1 w:1) // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) fn resume_asset_compliance() -> Weight { - // Minimum execution time: 57_146 nanoseconds. - Weight::from_parts(64_276_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 40_681 nanoseconds. + Weight::from_parts(41_382_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity DidRecords (r:1 w:0) - // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity DidRecords (max_values: None, max_size: None, mode: Measured) // Storage: ComplianceManager TrustedClaimIssuer (r:1 w:1) // Proof Skipped: ComplianceManager TrustedClaimIssuer (max_values: None, max_size: None, mode: Measured) // Storage: ComplianceManager AssetCompliances (r:1 w:0) // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) fn add_default_trusted_claim_issuer() -> Weight { - // Minimum execution time: 65_829 nanoseconds. - Weight::from_parts(68_463_000) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 55_262 nanoseconds. + Weight::from_parts(56_735_000, 0) + .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -209,21 +173,15 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Storage: ComplianceManager TrustedClaimIssuer (r:1 w:1) // Proof Skipped: ComplianceManager TrustedClaimIssuer (max_values: None, max_size: None, mode: Measured) fn remove_default_trusted_claim_issuer() -> Weight { - // Minimum execution time: 58_889 nanoseconds. - Weight::from_parts(59_650_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 39_650 nanoseconds. + Weight::from_parts(41_631_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -234,23 +192,17 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Proof Skipped: ComplianceManager TrustedClaimIssuer (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[1, 6]`. fn change_compliance_requirement(c: u32) -> Weight { - // Minimum execution time: 65_488 nanoseconds. - Weight::from_parts(71_228_943) - // Standard Error: 70_542 - .saturating_add(Weight::from_parts(1_162_894).saturating_mul(c.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 50_094 nanoseconds. + Weight::from_parts(53_594_702, 0) + // Standard Error: 148_982 + .saturating_add(Weight::from_parts(1_820_606, 0).saturating_mul(c.into())) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -261,23 +213,17 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 2]`. fn replace_asset_compliance(c: u32) -> Weight { - // Minimum execution time: 61_573 nanoseconds. - Weight::from_parts(67_872_363) - // Standard Error: 193_486 - .saturating_add(Weight::from_parts(10_857_275).saturating_mul(c.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 47_191 nanoseconds. + Weight::from_parts(51_858_764, 0) + // Standard Error: 325_921 + .saturating_add(Weight::from_parts(10_811_499, 0).saturating_mul(c.into())) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -285,9 +231,9 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Storage: ComplianceManager AssetCompliances (r:0 w:1) // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) fn reset_asset_compliance() -> Weight { - // Minimum execution time: 51_877 nanoseconds. - Weight::from_parts(54_132_000) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 34_480 nanoseconds. + Weight::from_parts(36_745_000, 0) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(1)) } // Storage: ComplianceManager TrustedClaimIssuer (r:1 w:0) @@ -299,31 +245,31 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { /// The range of component `c` is `[1, 400]`. /// The range of component `t` is `[0, 1]`. fn is_condition_satisfied(c: u32, t: u32) -> Weight { - // Minimum execution time: 18_308 nanoseconds. - Weight::from_parts(18_378_000) - // Standard Error: 1_968 - .saturating_add(Weight::from_parts(4_064_708).saturating_mul(c.into())) - // Standard Error: 848_942 - .saturating_add(Weight::from_parts(12_185_068).saturating_mul(t.into())) + // Minimum execution time: 19_079 nanoseconds. + Weight::from_parts(19_800_000, 0) + // Standard Error: 2_678 + .saturating_add(Weight::from_parts(4_485_426, 0).saturating_mul(c.into())) + // Standard Error: 1_155_484 + .saturating_add(Weight::from_parts(13_588_582, 0).saturating_mul(t.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(t.into()))) } // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) /// The range of component `e` is `[0, 1]`. fn is_identity_condition(e: u32) -> Weight { - // Minimum execution time: 781 nanoseconds. - Weight::from_parts(1_025_807) - // Standard Error: 54_026 - .saturating_add(Weight::from_parts(8_552_192).saturating_mul(e.into())) + // Minimum execution time: 600 nanoseconds. + Weight::from_parts(1_073_485, 0) + // Standard Error: 57_226 + .saturating_add(Weight::from_parts(9_208_847, 0).saturating_mul(e.into())) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(e.into()))) } /// The range of component `i` is `[0, 10000]`. fn is_any_requirement_compliant(i: u32) -> Weight { - // Minimum execution time: 541 nanoseconds. - Weight::from_parts(1_639_578) - // Standard Error: 168 - .saturating_add(Weight::from_parts(106_858).saturating_mul(i.into())) + // Minimum execution time: 611 nanoseconds. + Weight::from_parts(4_210_562, 0) + // Standard Error: 197 + .saturating_add(Weight::from_parts(111_013, 0).saturating_mul(i.into())) } } diff --git a/pallets/weights/src/pallet_corporate_actions.rs b/pallets/weights/src/pallet_corporate_actions.rs index 31bfac19ba..19452b3ffe 100644 --- a/pallets/weights/src/pallet_corporate_actions.rs +++ b/pallets/weights/src/pallet_corporate_actions.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_corporate_actions //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,21 +54,15 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Storage: CorporateAction MaxDetailsLength (r:0 w:1) - // Proof: CorporateAction MaxDetailsLength (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Proof Skipped: CorporateAction MaxDetailsLength (max_values: Some(1), max_size: None, mode: Measured) fn set_max_details_length() -> Weight { - // Minimum execution time: 7_852 nanoseconds. - Weight::from_parts(8_353_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 9_604 nanoseconds. + Weight::from_parts(10_586_000, 0).saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -77,45 +71,33 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Proof Skipped: CorporateAction DefaultTargetIdentities (max_values: None, max_size: None, mode: Measured) /// The range of component `t` is `[0, 500]`. fn set_default_targets(t: u32) -> Weight { - // Minimum execution time: 53_280 nanoseconds. - Weight::from_parts(64_817_391) - // Standard Error: 2_790 - .saturating_add(Weight::from_parts(310_282).saturating_mul(t.into())) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 34_903 nanoseconds. + Weight::from_parts(43_628_601, 0) + // Standard Error: 2_349 + .saturating_add(Weight::from_parts(313_974, 0).saturating_mul(t.into())) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: CorporateAction DefaultWithholdingTax (r:1 w:1) - // Proof: CorporateAction DefaultWithholdingTax (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: CorporateAction DefaultWithholdingTax (max_values: None, max_size: None, mode: Measured) fn set_default_withholding_tax() -> Weight { - // Minimum execution time: 53_320 nanoseconds. - Weight::from_parts(57_887_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 35_834 nanoseconds. + Weight::from_parts(40_821_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -124,51 +106,47 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Proof Skipped: CorporateAction DidWithholdingTax (max_values: None, max_size: None, mode: Measured) /// The range of component `w` is `[0, 999]`. fn set_did_withholding_tax(w: u32) -> Weight { - // Minimum execution time: 57_666 nanoseconds. - Weight::from_parts(74_073_885) - // Standard Error: 1_775 - .saturating_add(Weight::from_parts(91_435).saturating_mul(w.into())) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 37_276 nanoseconds. + Weight::from_parts(58_202_009, 0) + // Standard Error: 1_772 + .saturating_add(Weight::from_parts(68_189, 0).saturating_mul(w.into())) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: CorporateAction MaxDetailsLength (r:1 w:0) - // Proof: CorporateAction MaxDetailsLength (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Proof Skipped: CorporateAction MaxDetailsLength (max_values: Some(1), max_size: None, mode: Measured) // Storage: CorporateAction CAIdSequence (r:1 w:1) - // Proof: CorporateAction CAIdSequence (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: CorporateAction CAIdSequence (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Checkpoint SchedulesMaxComplexity (r:1 w:0) - // Proof: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: None, mode: Measured) // Storage: Checkpoint CachedNextCheckpoints (r:1 w:1) // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduleIdSequence (r:1 w:1) - // Proof: Checkpoint ScheduleIdSequence (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: CorporateAction DefaultTargetIdentities (r:1 w:0) // Proof Skipped: CorporateAction DefaultTargetIdentities (max_values: None, max_size: None, mode: Measured) // Storage: CorporateAction DefaultWithholdingTax (r:1 w:0) - // Proof: CorporateAction DefaultWithholdingTax (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: CorporateAction DefaultWithholdingTax (max_values: None, max_size: None, mode: Measured) // Storage: CorporateAction DidWithholdingTax (r:1 w:0) // Proof Skipped: CorporateAction DidWithholdingTax (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduledCheckpoints (r:0 w:1) // Proof Skipped: Checkpoint ScheduledCheckpoints (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduleRefCount (r:0 w:1) - // Proof: Checkpoint ScheduleRefCount (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleRefCount (max_values: None, max_size: None, mode: Measured) // Storage: CorporateAction CorporateActions (r:0 w:1) // Proof Skipped: CorporateAction CorporateActions (max_values: None, max_size: None, mode: Measured) // Storage: CorporateAction Details (r:0 w:1) @@ -176,47 +154,43 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { /// The range of component `w` is `[0, 1000]`. /// The range of component `t` is `[0, 500]`. fn initiate_corporate_action_use_defaults(w: u32, t: u32) -> Weight { - // Minimum execution time: 178_668 nanoseconds. - Weight::from_parts(181_321_577) - // Standard Error: 1_851 - .saturating_add(Weight::from_parts(52_142).saturating_mul(w.into())) - // Standard Error: 3_702 - .saturating_add(Weight::from_parts(35_107).saturating_mul(t.into())) - .saturating_add(DbWeight::get().reads(18)) + // Minimum execution time: 164_487 nanoseconds. + Weight::from_parts(132_794_590, 0) + // Standard Error: 1_984 + .saturating_add(Weight::from_parts(71_890, 0).saturating_mul(w.into())) + // Standard Error: 3_966 + .saturating_add(Weight::from_parts(72_435, 0).saturating_mul(t.into())) + .saturating_add(DbWeight::get().reads(15)) .saturating_add(DbWeight::get().writes(7)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: CorporateAction MaxDetailsLength (r:1 w:0) - // Proof: CorporateAction MaxDetailsLength (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Proof Skipped: CorporateAction MaxDetailsLength (max_values: Some(1), max_size: None, mode: Measured) // Storage: CorporateAction CAIdSequence (r:1 w:1) - // Proof: CorporateAction CAIdSequence (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: CorporateAction CAIdSequence (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Checkpoint SchedulesMaxComplexity (r:1 w:0) - // Proof: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: None, mode: Measured) // Storage: Checkpoint CachedNextCheckpoints (r:1 w:1) // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduleIdSequence (r:1 w:1) - // Proof: Checkpoint ScheduleIdSequence (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduledCheckpoints (r:0 w:1) // Proof Skipped: Checkpoint ScheduledCheckpoints (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduleRefCount (r:0 w:1) - // Proof: Checkpoint ScheduleRefCount (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleRefCount (max_values: None, max_size: None, mode: Measured) // Storage: CorporateAction CorporateActions (r:0 w:1) // Proof Skipped: CorporateAction CorporateActions (max_values: None, max_size: None, mode: Measured) // Storage: CorporateAction Details (r:0 w:1) @@ -224,25 +198,19 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { /// The range of component `w` is `[0, 1000]`. /// The range of component `t` is `[0, 500]`. fn initiate_corporate_action_provided(w: u32, t: u32) -> Weight { - // Minimum execution time: 262_914 nanoseconds. - Weight::from_parts(161_394_546) - // Standard Error: 2_122 - .saturating_add(Weight::from_parts(132_270).saturating_mul(w.into())) - // Standard Error: 4_243 - .saturating_add(Weight::from_parts(236_032).saturating_mul(t.into())) - .saturating_add(DbWeight::get().reads(15)) + // Minimum execution time: 268_151 nanoseconds. + Weight::from_parts(140_602_268, 0) + // Standard Error: 2_141 + .saturating_add(Weight::from_parts(140_908, 0).saturating_mul(w.into())) + // Standard Error: 4_281 + .saturating_add(Weight::from_parts(278_367, 0).saturating_mul(t.into())) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(7)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -255,24 +223,18 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Proof Skipped: CorporateAction CADocLink (max_values: None, max_size: None, mode: Measured) /// The range of component `d` is `[0, 1000]`. fn link_ca_doc(d: u32) -> Weight { - // Minimum execution time: 57_256 nanoseconds. - Weight::from_parts(61_102_000) - // Standard Error: 7_645 - .saturating_add(Weight::from_parts(3_833_168).saturating_mul(d.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 42_243 nanoseconds. + Weight::from_parts(42_443_000, 0) + // Standard Error: 7_796 + .saturating_add(Weight::from_parts(4_013_372, 0).saturating_mul(d.into())) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(d.into()))) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -280,9 +242,11 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Storage: CorporateAction CorporateActions (r:1 w:1) // Proof Skipped: CorporateAction CorporateActions (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot TimeRanges (r:1 w:1) - // Proof: CorporateBallot TimeRanges (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: CorporateBallot TimeRanges (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Checkpoint ScheduleRefCount (r:1 w:1) - // Proof: Checkpoint ScheduleRefCount (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleRefCount (max_values: None, max_size: None, mode: Measured) // Storage: CorporateAction Details (r:0 w:1) // Proof Skipped: CorporateAction Details (max_values: None, max_size: None, mode: Measured) // Storage: CorporateAction CADocLink (r:0 w:1) @@ -292,23 +256,17 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Storage: CorporateBallot Metas (r:0 w:1) // Proof Skipped: CorporateBallot Metas (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot RCV (r:0 w:1) - // Proof: CorporateBallot RCV (max_values: None, max_size: Some(37), added: 2512, mode: MaxEncodedLen) + // Proof Skipped: CorporateBallot RCV (max_values: None, max_size: None, mode: Measured) fn remove_ca_with_ballot() -> Weight { - // Minimum execution time: 86_390 nanoseconds. - Weight::from_parts(89_073_000) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 87_891 nanoseconds. + Weight::from_parts(107_050_000, 0) + .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(8)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -316,31 +274,27 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Storage: CorporateAction CorporateActions (r:1 w:1) // Proof Skipped: CorporateAction CorporateActions (max_values: None, max_size: None, mode: Measured) // Storage: CapitalDistribution Distributions (r:1 w:1) - // Proof: CapitalDistribution Distributions (max_values: None, max_size: Some(159), added: 2634, mode: MaxEncodedLen) + // Proof Skipped: CapitalDistribution Distributions (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Portfolio PortfolioLockedAssets (r:1 w:1) - // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedAssets (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduleRefCount (r:1 w:1) - // Proof: Checkpoint ScheduleRefCount (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleRefCount (max_values: None, max_size: None, mode: Measured) // Storage: CorporateAction Details (r:0 w:1) // Proof Skipped: CorporateAction Details (max_values: None, max_size: None, mode: Measured) // Storage: CorporateAction CADocLink (r:0 w:1) // Proof Skipped: CorporateAction CADocLink (max_values: None, max_size: None, mode: Measured) fn remove_ca_with_dist() -> Weight { - // Minimum execution time: 91_487 nanoseconds. - Weight::from_parts(97_416_000) - .saturating_add(DbWeight::get().reads(12)) + // Minimum execution time: 80_921 nanoseconds. + Weight::from_parts(85_537_000, 0) + .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(6)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -348,37 +302,33 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Storage: CorporateAction CorporateActions (r:1 w:1) // Proof Skipped: CorporateAction CorporateActions (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduleRefCount (r:1 w:2) - // Proof: Checkpoint ScheduleRefCount (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleRefCount (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint SchedulesMaxComplexity (r:1 w:0) - // Proof: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: None, mode: Measured) // Storage: Checkpoint CachedNextCheckpoints (r:1 w:1) // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Checkpoint ScheduleIdSequence (r:1 w:1) - // Proof: Checkpoint ScheduleIdSequence (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot TimeRanges (r:1 w:0) - // Proof: CorporateBallot TimeRanges (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: CorporateBallot TimeRanges (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduledCheckpoints (r:0 w:1) // Proof Skipped: Checkpoint ScheduledCheckpoints (max_values: None, max_size: None, mode: Measured) fn change_record_date_with_ballot() -> Weight { - // Minimum execution time: 104_287 nanoseconds. - Weight::from_parts(105_128_000) - .saturating_add(DbWeight::get().reads(16)) + // Minimum execution time: 99_510 nanoseconds. + Weight::from_parts(102_093_000, 0) + .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().writes(6)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -386,25 +336,27 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Storage: CorporateAction CorporateActions (r:1 w:1) // Proof Skipped: CorporateAction CorporateActions (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduleRefCount (r:1 w:2) - // Proof: Checkpoint ScheduleRefCount (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleRefCount (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint SchedulesMaxComplexity (r:1 w:0) - // Proof: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: None, mode: Measured) // Storage: Checkpoint CachedNextCheckpoints (r:1 w:1) // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Checkpoint ScheduleIdSequence (r:1 w:1) - // Proof: Checkpoint ScheduleIdSequence (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Checkpoint ScheduleIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: CapitalDistribution Distributions (r:1 w:0) - // Proof: CapitalDistribution Distributions (max_values: None, max_size: Some(159), added: 2634, mode: MaxEncodedLen) + // Proof Skipped: CapitalDistribution Distributions (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint ScheduledCheckpoints (r:0 w:1) // Proof Skipped: Checkpoint ScheduledCheckpoints (max_values: None, max_size: None, mode: Measured) fn change_record_date_with_dist() -> Weight { - // Minimum execution time: 107_101 nanoseconds. - Weight::from_parts(114_512_000) - .saturating_add(DbWeight::get().reads(16)) + // Minimum execution time: 100_200 nanoseconds. + Weight::from_parts(101_983_000, 0) + .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().writes(6)) } } diff --git a/pallets/weights/src/pallet_corporate_ballot.rs b/pallets/weights/src/pallet_corporate_ballot.rs index c653469c74..68b5dd2794 100644 --- a/pallets/weights/src/pallet_corporate_ballot.rs +++ b/pallets/weights/src/pallet_corporate_ballot.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_corporate_ballot //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,62 +54,54 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_corporate_actions::ballot::WeightInfo for SubstrateWeight { // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: CorporateAction CorporateActions (r:1 w:0) // Proof Skipped: CorporateAction CorporateActions (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: CorporateBallot TimeRanges (r:1 w:1) - // Proof: CorporateBallot TimeRanges (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: CorporateBallot TimeRanges (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot MotionNumChoices (r:0 w:1) // Proof Skipped: CorporateBallot MotionNumChoices (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot Metas (r:0 w:1) // Proof Skipped: CorporateBallot Metas (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot RCV (r:0 w:1) - // Proof: CorporateBallot RCV (max_values: None, max_size: Some(37), added: 2512, mode: MaxEncodedLen) + // Proof Skipped: CorporateBallot RCV (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 1000]`. fn attach_ballot(c: u32) -> Weight { - // Minimum execution time: 78_287 nanoseconds. - Weight::from_parts(87_972_593) - // Standard Error: 1_544 - .saturating_add(Weight::from_parts(36_165).saturating_mul(c.into())) - .saturating_add(DbWeight::get().reads(12)) + // Minimum execution time: 67_091 nanoseconds. + Weight::from_parts(74_961_125, 0) + // Standard Error: 1_675 + .saturating_add(Weight::from_parts(38_276, 0).saturating_mul(c.into())) + .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(4)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: CorporateBallot TimeRanges (r:1 w:0) + // Proof Skipped: CorporateBallot TimeRanges (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: CorporateBallot TimeRanges (r:1 w:0) - // Proof: CorporateBallot TimeRanges (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) // Storage: CorporateAction CorporateActions (r:1 w:0) // Proof Skipped: CorporateAction CorporateActions (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot MotionNumChoices (r:1 w:0) // Proof Skipped: CorporateBallot MotionNumChoices (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot RCV (r:1 w:0) - // Proof: CorporateBallot RCV (max_values: None, max_size: Some(37), added: 2512, mode: MaxEncodedLen) + // Proof Skipped: CorporateBallot RCV (max_values: None, max_size: None, mode: Measured) // Storage: Checkpoint SchedulePoints (r:1 w:0) // Proof Skipped: Checkpoint SchedulePoints (max_values: None, max_size: None, mode: Measured) // Storage: Asset BalanceOf (r:1 w:0) - // Proof: Asset BalanceOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) + // Proof Skipped: Asset BalanceOf (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot Votes (r:1 w:1) // Proof Skipped: CorporateBallot Votes (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot Results (r:1 w:1) @@ -117,116 +109,100 @@ impl pallet_corporate_actions::ballot::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 1000]`. /// The range of component `t` is `[0, 1000]`. fn vote(c: u32, t: u32) -> Weight { - // Minimum execution time: 134_542 nanoseconds. - Weight::from_parts(95_233_256) - // Standard Error: 2_013 - .saturating_add(Weight::from_parts(60_260).saturating_mul(c.into())) - // Standard Error: 2_013 - .saturating_add(Weight::from_parts(81_807).saturating_mul(t.into())) - .saturating_add(DbWeight::get().reads(13)) + // Minimum execution time: 119_479 nanoseconds. + Weight::from_parts(80_064_182, 0) + // Standard Error: 1_740 + .saturating_add(Weight::from_parts(65_826, 0).saturating_mul(c.into())) + // Standard Error: 1_740 + .saturating_add(Weight::from_parts(80_482, 0).saturating_mul(t.into())) + .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: CorporateBallot TimeRanges (r:1 w:1) - // Proof: CorporateBallot TimeRanges (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: CorporateBallot TimeRanges (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn change_end() -> Weight { - // Minimum execution time: 57_697 nanoseconds. - Weight::from_parts(59_990_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 44_336 nanoseconds. + Weight::from_parts(46_128_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: CorporateBallot TimeRanges (r:1 w:0) - // Proof: CorporateBallot TimeRanges (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: CorporateBallot TimeRanges (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: CorporateBallot MotionNumChoices (r:0 w:1) // Proof Skipped: CorporateBallot MotionNumChoices (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot Metas (r:0 w:1) // Proof Skipped: CorporateBallot Metas (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 1000]`. fn change_meta(c: u32) -> Weight { - // Minimum execution time: 63_245 nanoseconds. - Weight::from_parts(70_199_311) - // Standard Error: 1_741 - .saturating_add(Weight::from_parts(39_413).saturating_mul(c.into())) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 47_822 nanoseconds. + Weight::from_parts(54_981_701, 0) + // Standard Error: 1_669 + .saturating_add(Weight::from_parts(39_212, 0).saturating_mul(c.into())) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: CorporateBallot TimeRanges (r:1 w:0) - // Proof: CorporateBallot TimeRanges (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: CorporateBallot TimeRanges (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: CorporateBallot RCV (r:0 w:1) - // Proof: CorporateBallot RCV (max_values: None, max_size: Some(37), added: 2512, mode: MaxEncodedLen) + // Proof Skipped: CorporateBallot RCV (max_values: None, max_size: None, mode: Measured) fn change_rcv() -> Weight { - // Minimum execution time: 58_017 nanoseconds. - Weight::from_parts(61_943_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 43_334 nanoseconds. + Weight::from_parts(46_760_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: CorporateBallot TimeRanges (r:1 w:1) - // Proof: CorporateBallot TimeRanges (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) + // Proof Skipped: CorporateBallot TimeRanges (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: CorporateBallot MotionNumChoices (r:0 w:1) // Proof Skipped: CorporateBallot MotionNumChoices (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot Metas (r:0 w:1) // Proof Skipped: CorporateBallot Metas (max_values: None, max_size: None, mode: Measured) // Storage: CorporateBallot RCV (r:0 w:1) - // Proof: CorporateBallot RCV (max_values: None, max_size: Some(37), added: 2512, mode: MaxEncodedLen) + // Proof Skipped: CorporateBallot RCV (max_values: None, max_size: None, mode: Measured) fn remove_ballot() -> Weight { - // Minimum execution time: 62_794 nanoseconds. - Weight::from_parts(64_177_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 48_623 nanoseconds. + Weight::from_parts(50_136_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(4)) } } diff --git a/pallets/weights/src/pallet_external_agents.rs b/pallets/weights/src/pallet_external_agents.rs index f02ca462a4..8d53db1ff7 100644 --- a/pallets/weights/src/pallet_external_agents.rs +++ b/pallets/weights/src/pallet_external_agents.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_external_agents //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,243 +54,189 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_external_agents::WeightInfo for SubstrateWeight { // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: ExternalAgents AGIdSequence (r:1 w:1) - // Proof: ExternalAgents AGIdSequence (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents AGIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupPermissions (r:0 w:1) // Proof Skipped: ExternalAgents GroupPermissions (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[0, 19]`. fn create_group(p: u32) -> Weight { - // Minimum execution time: 51_438 nanoseconds. - Weight::from_parts(55_558_001) - // Standard Error: 42_354 - .saturating_add(Weight::from_parts(683_925).saturating_mul(p.into())) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 35_183 nanoseconds. + Weight::from_parts(39_772_344, 0) + // Standard Error: 28_474 + .saturating_add(Weight::from_parts(569_661, 0).saturating_mul(p.into())) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: ExternalAgents AGIdSequence (r:1 w:0) - // Proof: ExternalAgents AGIdSequence (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents AGIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupPermissions (r:0 w:1) // Proof Skipped: ExternalAgents GroupPermissions (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[0, 19]`. fn set_group_permissions(p: u32) -> Weight { - // Minimum execution time: 52_149 nanoseconds. - Weight::from_parts(57_330_424) - // Standard Error: 26_026 - .saturating_add(Weight::from_parts(694_412).saturating_mul(p.into())) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 35_944 nanoseconds. + Weight::from_parts(39_599_164, 0) + // Standard Error: 18_415 + .saturating_add(Weight::from_parts(653_565, 0).saturating_mul(p.into())) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:2 w:1) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: ExternalAgents NumFullAgents (r:1 w:1) - // Proof: ExternalAgents NumFullAgents (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents NumFullAgents (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents AgentOf (r:0 w:1) - // Proof: ExternalAgents AgentOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents AgentOf (max_values: None, max_size: None, mode: Measured) fn remove_agent() -> Weight { - // Minimum execution time: 59_811 nanoseconds. - Weight::from_parts(61_432_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 44_916 nanoseconds. + Weight::from_parts(45_919_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:1) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents NumFullAgents (r:1 w:1) - // Proof: ExternalAgents NumFullAgents (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents NumFullAgents (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents AgentOf (r:0 w:1) - // Proof: ExternalAgents AgentOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents AgentOf (max_values: None, max_size: None, mode: Measured) fn abdicate() -> Weight { - // Minimum execution time: 53_360 nanoseconds. - Weight::from_parts(58_438_000) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 35_794 nanoseconds. + Weight::from_parts(39_620_000, 0) + .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:2 w:1) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: ExternalAgents AGIdSequence (r:1 w:0) - // Proof: ExternalAgents AGIdSequence (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents AGIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents NumFullAgents (r:1 w:1) - // Proof: ExternalAgents NumFullAgents (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents NumFullAgents (max_values: None, max_size: None, mode: Measured) fn change_group_custom() -> Weight { - // Minimum execution time: 60_671 nanoseconds. - Weight::from_parts(64_366_000) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 46_660 nanoseconds. + Weight::from_parts(50_255_000, 0) + .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:2 w:1) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: ExternalAgents NumFullAgents (r:1 w:1) - // Proof: ExternalAgents NumFullAgents (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents NumFullAgents (max_values: None, max_size: None, mode: Measured) fn change_group_builtin() -> Weight { - // Minimum execution time: 58_098 nanoseconds. - Weight::from_parts(60_962_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 42_934 nanoseconds. + Weight::from_parts(43_255_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity Authorizations (r:1 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity OutdatedAuthorizations (r:1 w:0) - // Proof: Identity OutdatedAuthorizations (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Identity OutdatedAuthorizations (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:2 w:1) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: ExternalAgents NumFullAgents (r:1 w:1) - // Proof: ExternalAgents NumFullAgents (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents NumFullAgents (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:1) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents AgentOf (r:0 w:1) - // Proof: ExternalAgents AgentOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents AgentOf (max_values: None, max_size: None, mode: Measured) fn accept_become_agent() -> Weight { - // Minimum execution time: 80_001 nanoseconds. - Weight::from_parts(86_710_000) - .saturating_add(DbWeight::get().reads(13)) + // Minimum execution time: 69_164 nanoseconds. + Weight::from_parts(71_556_000, 0) + .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(6)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: ExternalAgents AGIdSequence (r:1 w:1) - // Proof: ExternalAgents AGIdSequence (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents AGIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity CurrentAuthId (r:1 w:1) - // Proof: Identity CurrentAuthId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentAuthId (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:1) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Identity Authorizations (r:0 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupPermissions (r:0 w:1) // Proof Skipped: ExternalAgents GroupPermissions (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[0, 19]`. fn create_group_and_add_auth(p: u32) -> Weight { - // Minimum execution time: 65_478 nanoseconds. - Weight::from_parts(72_292_155) - // Standard Error: 36_641 - .saturating_add(Weight::from_parts(601_196).saturating_mul(p.into())) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 52_729 nanoseconds. + Weight::from_parts(57_036_314, 0) + // Standard Error: 26_050 + .saturating_add(Weight::from_parts(570_204, 0).saturating_mul(p.into())) + .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(6)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:2 w:1) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: ExternalAgents AGIdSequence (r:1 w:1) - // Proof: ExternalAgents AGIdSequence (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents AGIdSequence (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents NumFullAgents (r:1 w:1) - // Proof: ExternalAgents NumFullAgents (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents NumFullAgents (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupPermissions (r:0 w:1) // Proof Skipped: ExternalAgents GroupPermissions (max_values: None, max_size: None, mode: Measured) /// The range of component `p` is `[0, 19]`. fn create_and_change_custom_group(p: u32) -> Weight { - // Minimum execution time: 69_945 nanoseconds. - Weight::from_parts(76_145_423) - // Standard Error: 30_749 - .saturating_add(Weight::from_parts(510_945).saturating_mul(p.into())) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 60_300 nanoseconds. + Weight::from_parts(63_331_883, 0) + // Standard Error: 32_956 + .saturating_add(Weight::from_parts(563_391, 0).saturating_mul(p.into())) + .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(4)) } } diff --git a/pallets/weights/src/pallet_group.rs b/pallets/weights/src/pallet_group.rs index 920af5074e..0edd835308 100644 --- a/pallets/weights/src/pallet_group.rs +++ b/pallets/weights/src/pallet_group.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_group //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -53,97 +53,95 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; /// Weights for pallet_group using the Substrate node and recommended hardware. pub struct SubstrateWeight; impl pallet_group::WeightInfo for SubstrateWeight { - // Storage: CddServiceProviders ActiveMembersLimit (r:1 w:1) - // Proof: CddServiceProviders ActiveMembersLimit (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Instance2Group ActiveMembersLimit (r:1 w:1) + // Proof Skipped: Instance2Group ActiveMembersLimit (max_values: Some(1), max_size: None, mode: Measured) fn set_active_members_limit() -> Weight { - // Minimum execution time: 11_367 nanoseconds. - Weight::from_parts(12_679_000) + // Minimum execution time: 14_232 nanoseconds. + Weight::from_parts(15_674_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } - // Storage: CddServiceProviders ActiveMembers (r:1 w:1) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: CddServiceProviders ActiveMembersLimit (r:1 w:0) - // Proof: CddServiceProviders ActiveMembersLimit (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Instance2Group ActiveMembers (r:1 w:1) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembersLimit (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembersLimit (max_values: Some(1), max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Identity Claims (r:1 w:1) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) fn add_member() -> Weight { - // Minimum execution time: 90_075 nanoseconds. - Weight::from_parts(93_540_000) + // Minimum execution time: 102_413 nanoseconds. + Weight::from_parts(108_412_000, 0) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(2)) } - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: CddServiceProviders InactiveMembers (r:1 w:1) - // Proof Skipped: CddServiceProviders InactiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group InactiveMembers (r:1 w:1) + // Proof Skipped: Instance2Group InactiveMembers (max_values: Some(1), max_size: None, mode: Measured) fn remove_member() -> Weight { - // Minimum execution time: 73_841 nanoseconds. - Weight::from_parts(87_891_000) + // Minimum execution time: 78_647 nanoseconds. + Weight::from_parts(80_401_000, 0) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } - // Storage: CddServiceProviders ActiveMembers (r:1 w:1) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:1) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity Claims (r:1 w:1) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders InactiveMembers (r:1 w:1) - // Proof Skipped: CddServiceProviders InactiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group InactiveMembers (r:1 w:1) + // Proof Skipped: Instance2Group InactiveMembers (max_values: Some(1), max_size: None, mode: Measured) fn disable_member() -> Weight { - // Minimum execution time: 96_736 nanoseconds. - Weight::from_parts(104_937_000) + // Minimum execution time: 107_641 nanoseconds. + Weight::from_parts(113_250_000, 0) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } - // Storage: CddServiceProviders ActiveMembers (r:1 w:1) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:1) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Identity Claims (r:2 w:2) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) fn swap_member() -> Weight { - // Minimum execution time: 116_275 nanoseconds. - Weight::from_parts(123_114_000) + // Minimum execution time: 125_188 nanoseconds. + Weight::from_parts(136_303_000, 0) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } - // Storage: CddServiceProviders ActiveMembersLimit (r:1 w:0) - // Proof: CddServiceProviders ActiveMembersLimit (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:1) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembersLimit (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembersLimit (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:1) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Identity Claims (r:1001 w:1001) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) /// The range of component `m` is `[1, 1000]`. fn reset_members(m: u32) -> Weight { - // Minimum execution time: 43_455 nanoseconds. - Weight::from_parts(46_159_000) - // Standard Error: 18_045 - .saturating_add(Weight::from_parts(13_558_073).saturating_mul(m.into())) + // Minimum execution time: 47_890 nanoseconds. + Weight::from_parts(53_350_000, 0) + // Standard Error: 37_131 + .saturating_add(Weight::from_parts(14_607_210, 0).saturating_mul(m.into())) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(m.into()))) .saturating_add(DbWeight::get().writes(2)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(m.into()))) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:1) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:3 w:1) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidRecords (r:1 w:0) - // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity DidRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:1) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:1 w:1) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) fn abdicate_membership() -> Weight { - // Minimum execution time: 139_349 nanoseconds. - Weight::from_parts(143_084_000) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 108_652 nanoseconds. + Weight::from_parts(120_459_000, 0) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(2)) } } diff --git a/pallets/weights/src/pallet_identity.rs b/pallets/weights/src/pallet_identity.rs index cfadd32939..6e74672249 100644 --- a/pallets/weights/src/pallet_identity.rs +++ b/pallets/weights/src/pallet_identity.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_identity //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,29 +54,23 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_identity::WeightInfo for SubstrateWeight { // Storage: Identity KeyRecords (r:2 w:1) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity ParentDid (r:1 w:1) - // Proof: Identity ParentDid (max_values: None, max_size: Some(64), added: 2539, mode: MaxEncodedLen) + // Proof Skipped: Identity ParentDid (max_values: None, max_size: None, mode: Measured) // Storage: Identity AccountKeyRefCount (r:1 w:0) - // Proof: Identity AccountKeyRefCount (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + // Proof Skipped: Identity AccountKeyRefCount (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Identity MultiPurposeNonce (r:1 w:1) - // Proof: Identity MultiPurposeNonce (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity MultiPurposeNonce (max_values: Some(1), max_size: None, mode: Measured) // Storage: System ParentHash (r:1 w:0) // Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) // Storage: Identity DidRecords (r:1 w:1) - // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity DidRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:2) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyPortfolioPermissions (r:0 w:1) // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyExtrinsicPermissions (r:0 w:1) @@ -84,134 +78,115 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Storage: Identity KeyAssetPermissions (r:0 w:1) // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) // Storage: Identity ChildDid (r:0 w:1) - // Proof: Identity ChildDid (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity ChildDid (max_values: None, max_size: None, mode: Measured) fn create_child_identity() -> Weight { - // Minimum execution time: 90_245 nanoseconds. - Weight::from_parts(93_110_000) - .saturating_add(DbWeight::get().reads(13)) + // Minimum execution time: 75_032 nanoseconds. + Weight::from_parts(77_236_000, 0) + .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(10)) } // Storage: Identity KeyRecords (r:100 w:99) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Identity ParentDid (r:1 w:99) + // Proof Skipped: Identity ParentDid (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: Identity ParentDid (r:1 w:99) - // Proof: Identity ParentDid (max_values: None, max_size: Some(64), added: 2539, mode: MaxEncodedLen) // Storage: Identity OffChainAuthorizationNonce (r:1 w:1) - // Proof: Identity OffChainAuthorizationNonce (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Identity OffChainAuthorizationNonce (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Identity MultiPurposeNonce (r:1 w:1) - // Proof: Identity MultiPurposeNonce (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity MultiPurposeNonce (max_values: Some(1), max_size: None, mode: Measured) // Storage: System ParentHash (r:1 w:0) // Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) // Storage: Identity DidRecords (r:99 w:99) - // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity DidRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:99) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) // Storage: Identity ChildDid (r:0 w:99) - // Proof: Identity ChildDid (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity ChildDid (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 100]`. fn create_child_identities(i: u32) -> Weight { - // Minimum execution time: 42_053 nanoseconds. - Weight::from_parts(89_970_948) - // Standard Error: 110_748 - .saturating_add(Weight::from_parts(144_106_906).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 28_963 nanoseconds. + Weight::from_parts(56_653_013, 0) + // Standard Error: 56_157 + .saturating_add(Weight::from_parts(83_550_764, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(i.into()))) .saturating_add(DbWeight::get().writes(2)) .saturating_add(DbWeight::get().writes((5_u64).saturating_mul(i.into()))) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity ParentDid (r:1 w:1) - // Proof: Identity ParentDid (max_values: None, max_size: Some(64), added: 2539, mode: MaxEncodedLen) + // Proof Skipped: Identity ParentDid (max_values: None, max_size: None, mode: Measured) // Storage: Identity ChildDid (r:0 w:1) - // Proof: Identity ChildDid (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity ChildDid (max_values: None, max_size: None, mode: Measured) fn unlink_child_identity() -> Weight { - // Minimum execution time: 42_594 nanoseconds. - Weight::from_parts(46_139_000) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 26_710 nanoseconds. + Weight::from_parts(28_303_000, 0) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } - // Storage: Identity KeyRecords (r:2 w:1) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:201 w:1) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity MultiPurposeNonce (r:1 w:1) - // Proof: Identity MultiPurposeNonce (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity MultiPurposeNonce (max_values: Some(1), max_size: None, mode: Measured) // Storage: System ParentHash (r:1 w:0) // Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) // Storage: Identity DidRecords (r:1 w:1) - // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity DidRecords (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity CurrentAuthId (r:1 w:1) - // Proof: Identity CurrentAuthId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentAuthId (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:199) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:1) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) // Storage: Identity Authorizations (r:0 w:199) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 200]`. fn cdd_register_did(i: u32) -> Weight { - // Minimum execution time: 61_382 nanoseconds. - Weight::from_parts(90_535_438) - // Standard Error: 24_037 - .saturating_add(Weight::from_parts(12_786_370).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(13)) + // Minimum execution time: 46_980 nanoseconds. + Weight::from_parts(74_450_297, 0) + // Standard Error: 37_790 + .saturating_add(Weight::from_parts(15_103_103, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(10)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(i.into()))) .saturating_add(DbWeight::get().writes(6)) .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(i.into()))) } // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:1) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: CddServiceProviders InactiveMembers (r:1 w:1) - // Proof Skipped: CddServiceProviders InactiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:1) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group InactiveMembers (r:1 w:1) + // Proof Skipped: Instance2Group InactiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity Claims (r:1 w:1) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) fn invalidate_cdd_claims() -> Weight { - // Minimum execution time: 44_958 nanoseconds. - Weight::from_parts(45_719_000) + // Minimum execution time: 49_044 nanoseconds. + Weight::from_parts(52_138_000, 0) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Identity KeyRecords (r:200 w:199) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity AccountKeyRefCount (r:199 w:0) - // Proof: Identity AccountKeyRefCount (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + // Proof Skipped: Identity AccountKeyRefCount (max_values: None, max_size: None, mode: Measured) // Storage: Identity CurrentAuthId (r:1 w:0) - // Proof: Identity CurrentAuthId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentAuthId (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:199) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyPortfolioPermissions (r:0 w:199) // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyExtrinsicPermissions (r:0 w:199) @@ -219,61 +194,61 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Storage: Identity KeyAssetPermissions (r:0 w:199) // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) // Storage: Identity OutdatedAuthorizations (r:0 w:199) - // Proof: Identity OutdatedAuthorizations (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Identity OutdatedAuthorizations (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 200]`. fn remove_secondary_keys(i: u32) -> Weight { - // Minimum execution time: 34_331 nanoseconds. - Weight::from_parts(47_714_873) - // Standard Error: 42_063 - .saturating_add(Weight::from_parts(17_971_373).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 17_726 nanoseconds. + Weight::from_parts(18_758_000, 0) + // Standard Error: 18_807 + .saturating_add(Weight::from_parts(20_191_800, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(i.into()))) .saturating_add(DbWeight::get().writes((6_u64).saturating_mul(i.into()))) } // Storage: Identity Authorizations (r:2 w:2) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity OutdatedAuthorizations (r:1 w:0) - // Proof: Identity OutdatedAuthorizations (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Identity OutdatedAuthorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidRecords (r:1 w:1) - // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity DidRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:2 w:2) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity AccountKeyRefCount (r:1 w:0) - // Proof: Identity AccountKeyRefCount (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + // Proof Skipped: Identity AccountKeyRefCount (max_values: None, max_size: None, mode: Measured) // Storage: Identity CddAuthForPrimaryKeyRotation (r:1 w:0) - // Proof: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Proof Skipped: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:2 w:2) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:2) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:2) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) fn accept_primary_key() -> Weight { - // Minimum execution time: 89_375 nanoseconds. - Weight::from_parts(102_884_000) + // Minimum execution time: 94_412 nanoseconds. + Weight::from_parts(95_482_000, 0) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(11)) } // Storage: Identity Authorizations (r:2 w:2) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity OutdatedAuthorizations (r:1 w:0) - // Proof: Identity OutdatedAuthorizations (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Identity OutdatedAuthorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidRecords (r:1 w:1) - // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity DidRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:2) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity CddAuthForPrimaryKeyRotation (r:1 w:0) - // Proof: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Proof Skipped: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:2 w:2) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:2) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:1) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyPortfolioPermissions (r:0 w:1) // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyExtrinsicPermissions (r:0 w:1) @@ -281,41 +256,41 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Storage: Identity KeyAssetPermissions (r:0 w:1) // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) fn rotate_primary_key_to_secondary() -> Weight { - // Minimum execution time: 88_903 nanoseconds. - Weight::from_parts(90_485_000) + // Minimum execution time: 94_401 nanoseconds. + Weight::from_parts(97_495_000, 0) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(13)) } // Storage: Identity CddAuthForPrimaryKeyRotation (r:0 w:1) - // Proof: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + // Proof Skipped: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: None, mode: Measured) fn change_cdd_requirement_for_mk_rotation() -> Weight { - // Minimum execution time: 7_832 nanoseconds. - Weight::from_parts(9_915_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 9_873 nanoseconds. + Weight::from_parts(10_345_000, 0).saturating_add(DbWeight::get().writes(1)) } // Storage: Identity Authorizations (r:1 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity OutdatedAuthorizations (r:1 w:0) - // Proof: Identity OutdatedAuthorizations (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Identity OutdatedAuthorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidRecords (r:1 w:0) - // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity DidRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:1) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity Claims (r:2 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:1) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:1) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyPortfolioPermissions (r:0 w:1) // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyExtrinsicPermissions (r:0 w:1) @@ -323,25 +298,19 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Storage: Identity KeyAssetPermissions (r:0 w:1) // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) fn join_identity_as_key() -> Weight { - // Minimum execution time: 81_021 nanoseconds. - Weight::from_parts(98_688_000) + // Minimum execution time: 85_988 nanoseconds. + Weight::from_parts(90_807_000, 0) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(8)) } // Storage: Identity KeyRecords (r:1 w:1) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: Identity AccountKeyRefCount (r:1 w:0) - // Proof: Identity AccountKeyRefCount (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + // Proof Skipped: Identity AccountKeyRefCount (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:1) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyPortfolioPermissions (r:0 w:1) // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyExtrinsicPermissions (r:0 w:1) @@ -349,67 +318,51 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Storage: Identity KeyAssetPermissions (r:0 w:1) // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) fn leave_identity_as_key() -> Weight { - // Minimum execution time: 53_390 nanoseconds. - Weight::from_parts(55_673_000) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 37_647 nanoseconds. + Weight::from_parts(38_818_000, 0) + .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(5)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:3 w:1) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidRecords (r:1 w:0) - // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity DidRecords (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity Claims (r:1 w:1) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) fn add_claim() -> Weight { - // Minimum execution time: 55_724 nanoseconds. - Weight::from_parts(58_708_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 42_213 nanoseconds. + Weight::from_parts(44_476_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:3 w:1) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Identity Claims (r:1 w:1) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) fn revoke_claim() -> Weight { - // Minimum execution time: 37_626 nanoseconds. - Weight::from_parts(39_549_000) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 25_428 nanoseconds. + Weight::from_parts(25_869_000, 0) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:3 w:1) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Identity Claims (r:1 w:1) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) fn revoke_claim_by_index() -> Weight { - // Minimum execution time: 38_788 nanoseconds. - Weight::from_parts(41_122_000) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 25_438 nanoseconds. + Weight::from_parts(27_070_000, 0) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:2 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyAssetPermissions (r:1 w:1) // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyExtrinsicPermissions (r:1 w:1) @@ -417,9 +370,9 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Storage: Identity KeyPortfolioPermissions (r:1 w:1) // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) fn set_secondary_key_permissions() -> Weight { - // Minimum execution time: 61_172 nanoseconds. - Weight::from_parts(68_212_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 43_335 nanoseconds. + Weight::from_parts(44_738_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(3)) } /// The range of component `a` is `[0, 2000]`. @@ -427,109 +380,81 @@ impl pallet_identity::WeightInfo for SubstrateWeight { /// The range of component `l` is `[0, 80]`. /// The range of component `e` is `[0, 80]`. fn permissions_cost(a: u32, p: u32, l: u32, e: u32) -> Weight { - // Minimum execution time: 227_893 nanoseconds. - Weight::from_parts(228_884_000) + // Minimum execution time: 236_785 nanoseconds. + Weight::from_parts(239_349_000, 0) // Manually set for `a` .saturating_add(Weight::from_parts(100_000, 0).saturating_mul(a.into())) // Manually set for `p` - .saturating_add(Weight::from_parts(100_000).saturating_mul(p.into())) - // Standard Error: 179_834 - .saturating_add(Weight::from_parts(15_417_476).saturating_mul(l.into())) - // Standard Error: 179_834 - .saturating_add(Weight::from_parts(14_255_820).saturating_mul(e.into())) + .saturating_add(Weight::from_parts(100_000, 0).saturating_mul(p.into())) + // Standard Error: 191_296 + .saturating_add(Weight::from_parts(16_520_754, 0).saturating_mul(l.into())) + // Standard Error: 191_296 + .saturating_add(Weight::from_parts(15_479_353, 0).saturating_mul(e.into())) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:0 w:1) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) fn freeze_secondary_keys() -> Weight { - // Minimum execution time: 33_650 nanoseconds. - Weight::from_parts(36_594_000) - .saturating_add(DbWeight::get().reads(5)) + // Minimum execution time: 18_638 nanoseconds. + Weight::from_parts(23_155_000, 0) + .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:0 w:1) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) fn unfreeze_secondary_keys() -> Weight { - // Minimum execution time: 32_278 nanoseconds. - Weight::from_parts(33_901_000) - .saturating_add(DbWeight::get().reads(5)) + // Minimum execution time: 19_509 nanoseconds. + Weight::from_parts(21_011_000, 0) + .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity CurrentAuthId (r:1 w:1) - // Proof: Identity CurrentAuthId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentAuthId (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:1) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Identity Authorizations (r:0 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) fn add_authorization() -> Weight { - // Minimum execution time: 44_296 nanoseconds. - Weight::from_parts(46_550_000) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 28_182 nanoseconds. + Weight::from_parts(30_175_000, 0) + .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(4)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity Authorizations (r:1 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity OutdatedAuthorizations (r:1 w:0) - // Proof: Identity OutdatedAuthorizations (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Identity OutdatedAuthorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:1) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) fn remove_authorization() -> Weight { - // Minimum execution time: 51_007 nanoseconds. - Weight::from_parts(53_551_000) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 36_194 nanoseconds. + Weight::from_parts(36_805_000, 0) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Identity KeyRecords (r:200 w:199) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity OffChainAuthorizationNonce (r:1 w:1) + // Proof Skipped: Identity OffChainAuthorizationNonce (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) - // Storage: Identity OffChainAuthorizationNonce (r:1 w:1) - // Proof: Identity OffChainAuthorizationNonce (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:199) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyPortfolioPermissions (r:0 w:199) // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyExtrinsicPermissions (r:0 w:199) @@ -538,36 +463,30 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 200]`. fn add_secondary_keys_with_authorization(i: u32) -> Weight { - // Minimum execution time: 47_481 nanoseconds. - Weight::from_parts(57_963_316) - // Standard Error: 40_840 - .saturating_add(Weight::from_parts(132_436_689).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 32_549 nanoseconds. + Weight::from_parts(59_806_284, 0) + // Standard Error: 46_061 + .saturating_add(Weight::from_parts(71_476_387, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(i.into()))) .saturating_add(DbWeight::get().writes(1)) .saturating_add(DbWeight::get().writes((5_u64).saturating_mul(i.into()))) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity CustomClaimsInverse (r:1 w:1) // Proof Skipped: Identity CustomClaimsInverse (max_values: None, max_size: None, mode: Measured) // Storage: Identity CustomClaimIdSequence (r:1 w:1) - // Proof: Identity CustomClaimIdSequence (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Proof Skipped: Identity CustomClaimIdSequence (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity CustomClaims (r:0 w:1) // Proof Skipped: Identity CustomClaims (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[1, 2048]`. fn register_custom_claim_type(n: u32) -> Weight { - // Minimum execution time: 41_543 nanoseconds. - Weight::from_parts(47_530_945) - // Standard Error: 631 - .saturating_add(Weight::from_parts(6_764).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 26_490 nanoseconds. + Weight::from_parts(31_039_092, 0) + // Standard Error: 342 + .saturating_add(Weight::from_parts(5_119, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(3)) } } diff --git a/pallets/weights/src/pallet_indices.rs b/pallets/weights/src/pallet_indices.rs index a10b95d05c..4ea26be861 100644 --- a/pallets/weights/src/pallet_indices.rs +++ b/pallets/weights/src/pallet_indices.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_indices //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -56,8 +56,8 @@ impl pallet_indices::WeightInfo for SubstrateWeight { // Storage: Indices Accounts (r:1 w:1) // Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn claim() -> Weight { - // Minimum execution time: 21_533 nanoseconds. - Weight::from_parts(23_345_000) + // Minimum execution time: 22_144 nanoseconds. + Weight::from_parts(24_166_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -66,16 +66,16 @@ impl pallet_indices::WeightInfo for SubstrateWeight { // Storage: System Account (r:1 w:1) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer() -> Weight { - // Minimum execution time: 27_992 nanoseconds. - Weight::from_parts(28_453_000) + // Minimum execution time: 28_173 nanoseconds. + Weight::from_parts(32_519_000, 0) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Indices Accounts (r:1 w:1) // Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn free() -> Weight { - // Minimum execution time: 22_544 nanoseconds. - Weight::from_parts(23_596_000) + // Minimum execution time: 24_186 nanoseconds. + Weight::from_parts(31_498_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -84,16 +84,16 @@ impl pallet_indices::WeightInfo for SubstrateWeight { // Storage: System Account (r:1 w:1) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_transfer() -> Weight { - // Minimum execution time: 25_859 nanoseconds. - Weight::from_parts(27_191_000) + // Minimum execution time: 26_850 nanoseconds. + Weight::from_parts(28_423_000, 0) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Indices Accounts (r:1 w:1) // Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn freeze() -> Weight { - // Minimum execution time: 21_382 nanoseconds. - Weight::from_parts(22_584_000) + // Minimum execution time: 21_212 nanoseconds. + Weight::from_parts(22_885_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } diff --git a/pallets/weights/src/pallet_multisig.rs b/pallets/weights/src/pallet_multisig.rs index f789b85389..ef7a63a6ac 100644 --- a/pallets/weights/src/pallet_multisig.rs +++ b/pallets/weights/src/pallet_multisig.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_multisig //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,17 +54,17 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: Identity KeyRecords (r:2 w:1) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig MultiSigNonce (r:1 w:1) // Proof Skipped: MultiSig MultiSigNonce (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity CurrentAuthId (r:1 w:1) - // Proof: Identity CurrentAuthId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentAuthId (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:50) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:1) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyPortfolioPermissions (r:0 w:1) // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyExtrinsicPermissions (r:0 w:1) @@ -79,10 +79,10 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[1, 50]`. fn create_multisig(i: u32) -> Weight { - // Minimum execution time: 67_080 nanoseconds. - Weight::from_parts(59_790_135) - // Standard Error: 33_166 - .saturating_add(Weight::from_parts(12_485_379).saturating_mul(i.into())) + // Minimum execution time: 67_951 nanoseconds. + Weight::from_parts(66_528_129, 0) + // Standard Error: 38_800 + .saturating_add(Weight::from_parts(13_064_257, 0).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(10)) .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(i.into()))) @@ -92,9 +92,9 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig NextProposalId (r:1 w:1) // Proof Skipped: MultiSig NextProposalId (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) @@ -110,8 +110,8 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig ProposalStates (r:0 w:1) // Proof Skipped: MultiSig ProposalStates (max_values: None, max_size: None, mode: Measured) fn create_proposal() -> Weight { - // Minimum execution time: 76_304 nanoseconds. - Weight::from_parts(77_606_000) + // Minimum execution time: 80_460 nanoseconds. + Weight::from_parts(85_689_000, 0) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(5)) } @@ -124,9 +124,9 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig Votes (r:1 w:1) // Proof Skipped: MultiSig Votes (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig Proposals (r:1 w:0) @@ -134,8 +134,8 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig ProposalVoteCounts (r:1 w:1) // Proof Skipped: MultiSig ProposalVoteCounts (max_values: None, max_size: None, mode: Measured) fn approve() -> Weight { - // Minimum execution time: 63_044 nanoseconds. - Weight::from_parts(73_911_000) + // Minimum execution time: 69_423 nanoseconds. + Weight::from_parts(74_581_000, 0) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(2)) } @@ -150,8 +150,8 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig ProposalStates (r:0 w:1) // Proof Skipped: MultiSig ProposalStates (max_values: None, max_size: None, mode: Measured) fn execute_proposal() -> Weight { - // Minimum execution time: 40_591 nanoseconds. - Weight::from_parts(41_422_000) + // Minimum execution time: 43_335 nanoseconds. + Weight::from_parts(46_059_000, 0) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(5)) } @@ -164,9 +164,9 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig ProposalVoteCounts (r:1 w:1) // Proof Skipped: MultiSig ProposalVoteCounts (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig Votes (r:1 w:1) @@ -176,23 +176,23 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig Proposals (r:0 w:1) // Proof Skipped: MultiSig Proposals (max_values: None, max_size: None, mode: Measured) fn reject() -> Weight { - // Minimum execution time: 68_843 nanoseconds. - Weight::from_parts(78_089_000) + // Minimum execution time: 77_705 nanoseconds. + Weight::from_parts(84_526_000, 0) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(4)) } // Storage: Identity Authorizations (r:1 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity OutdatedAuthorizations (r:1 w:0) - // Proof: Identity OutdatedAuthorizations (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Identity OutdatedAuthorizations (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig MultiSigSignsRequired (r:2 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:2 w:1) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: Identity CddAuthForPrimaryKeyRotation (r:1 w:0) - // Proof: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + // Proof Skipped: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: None, mode: Measured) // Storage: MultiSig MultiSigSigners (r:1 w:1) // Proof Skipped: MultiSig MultiSigSigners (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig NextProposalId (r:1 w:0) @@ -200,37 +200,37 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig NumberOfSigners (r:1 w:1) // Proof Skipped: MultiSig NumberOfSigners (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:1) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) fn accept_multisig_signer() -> Weight { - // Minimum execution time: 77_706 nanoseconds. - Weight::from_parts(81_572_000) + // Minimum execution time: 87_010 nanoseconds. + Weight::from_parts(91_728_000, 0) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(6)) } // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig NumberOfSigners (r:1 w:0) // Proof Skipped: MultiSig NumberOfSigners (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity CurrentAuthId (r:1 w:1) - // Proof: Identity CurrentAuthId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentAuthId (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:49) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Identity Authorizations (r:0 w:49) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[1, 49]`. fn add_multisig_signers(i: u32) -> Weight { - // Minimum execution time: 52_038 nanoseconds. - Weight::from_parts(43_503_720) - // Standard Error: 35_256 - .saturating_add(Weight::from_parts(12_462_676).saturating_mul(i.into())) + // Minimum execution time: 53_981 nanoseconds. + Weight::from_parts(44_757_621, 0) + // Standard Error: 46_317 + .saturating_add(Weight::from_parts(13_288_505, 0).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(2)) .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(i.into()))) @@ -238,11 +238,11 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:50 w:49) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: Identity CddAuthForPrimaryKeyRotation (r:1 w:0) - // Proof: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + // Proof Skipped: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: None, mode: Measured) // Storage: MultiSig NumberOfSigners (r:1 w:1) // Proof Skipped: MultiSig NumberOfSigners (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig MultiSigSigners (r:49 w:49) @@ -251,65 +251,53 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig NextProposalId (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[2, 50]`. fn remove_multisig_signers(i: u32) -> Weight { - // Minimum execution time: 54_512 nanoseconds. - Weight::from_parts(34_575_871) - // Standard Error: 44_875 - .saturating_add(Weight::from_parts(11_108_190).saturating_mul(i.into())) + // Minimum execution time: 63_505 nanoseconds. + Weight::from_parts(49_344_283, 0) + // Standard Error: 38_046 + .saturating_add(Weight::from_parts(11_866_085, 0).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(i.into()))) .saturating_add(DbWeight::get().writes(3)) .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(i.into()))) } // Storage: Identity KeyRecords (r:2 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig AdminDid (r:1 w:0) // Proof Skipped: MultiSig AdminDid (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig NumberOfSigners (r:1 w:0) // Proof Skipped: MultiSig NumberOfSigners (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity CurrentAuthId (r:1 w:1) - // Proof: Identity CurrentAuthId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentAuthId (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:49) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Identity Authorizations (r:0 w:49) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[1, 49]`. fn add_multisig_signers_via_admin(i: u32) -> Weight { - // Minimum execution time: 77_166 nanoseconds. - Weight::from_parts(72_214_755) - // Standard Error: 40_115 - .saturating_add(Weight::from_parts(12_569_732).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(12)) + // Minimum execution time: 69_765 nanoseconds. + Weight::from_parts(63_090_803, 0) + // Standard Error: 32_773 + .saturating_add(Weight::from_parts(13_322_994, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(2)) .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(i.into()))) } // Storage: Identity KeyRecords (r:51 w:49) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig AdminDid (r:1 w:0) // Proof Skipped: MultiSig AdminDid (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: Identity CddAuthForPrimaryKeyRotation (r:1 w:0) - // Proof: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + // Proof Skipped: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: None, mode: Measured) // Storage: MultiSig NumberOfSigners (r:1 w:1) // Proof Skipped: MultiSig NumberOfSigners (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig MultiSigSigners (r:49 w:49) @@ -318,11 +306,11 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig NextProposalId (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[2, 50]`. fn remove_multisig_signers_via_admin(i: u32) -> Weight { - // Minimum execution time: 80_220 nanoseconds. - Weight::from_parts(64_554_566) - // Standard Error: 39_706 - .saturating_add(Weight::from_parts(10_922_191).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 71_507 nanoseconds. + Weight::from_parts(56_681_928, 0) + // Standard Error: 35_587 + .saturating_add(Weight::from_parts(11_972_501, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(i.into()))) .saturating_add(DbWeight::get().writes(3)) .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(i.into()))) @@ -330,105 +318,87 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig MultiSigSignsRequired (r:1 w:1) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig NumberOfSigners (r:1 w:0) // Proof Skipped: MultiSig NumberOfSigners (max_values: None, max_size: None, mode: Measured) // Storage: Identity CddAuthForPrimaryKeyRotation (r:1 w:0) - // Proof: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + // Proof Skipped: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: None, mode: Measured) // Storage: MultiSig NextProposalId (r:1 w:0) // Proof Skipped: MultiSig NextProposalId (max_values: None, max_size: None, mode: Measured) fn change_sigs_required() -> Weight { - // Minimum execution time: 39_129 nanoseconds. - Weight::from_parts(40_912_000) + // Minimum execution time: 43_505 nanoseconds. + Weight::from_parts(55_693_000, 0) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:2 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig AdminDid (r:1 w:0) // Proof Skipped: MultiSig AdminDid (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig MultiSigSignsRequired (r:1 w:1) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig NumberOfSigners (r:1 w:0) // Proof Skipped: MultiSig NumberOfSigners (max_values: None, max_size: None, mode: Measured) // Storage: Identity CddAuthForPrimaryKeyRotation (r:1 w:0) - // Proof: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + // Proof Skipped: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: None, mode: Measured) // Storage: MultiSig NextProposalId (r:1 w:0) // Proof Skipped: MultiSig NextProposalId (max_values: None, max_size: None, mode: Measured) fn change_sigs_required_via_admin() -> Weight { - // Minimum execution time: 67_421 nanoseconds. - Weight::from_parts(71_037_000) - .saturating_add(DbWeight::get().reads(12)) + // Minimum execution time: 59_249 nanoseconds. + Weight::from_parts(62_192_000, 0) + .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(1)) } // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig AdminDid (r:0 w:1) // Proof Skipped: MultiSig AdminDid (max_values: None, max_size: None, mode: Measured) fn add_admin() -> Weight { - // Minimum execution time: 29_464 nanoseconds. - Weight::from_parts(30_346_000) + // Minimum execution time: 30_275 nanoseconds. + Weight::from_parts(32_309_000, 0) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig AdminDid (r:1 w:1) // Proof Skipped: MultiSig AdminDid (max_values: None, max_size: None, mode: Measured) fn remove_admin_via_admin() -> Weight { - // Minimum execution time: 49_955 nanoseconds. - Weight::from_parts(51_347_000) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 31_397 nanoseconds. + Weight::from_parts(32_168_000, 0) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig PayingDid (r:1 w:1) // Proof Skipped: MultiSig PayingDid (max_values: None, max_size: None, mode: Measured) fn remove_payer() -> Weight { - // Minimum execution time: 30_626 nanoseconds. - Weight::from_parts(32_809_000) + // Minimum execution time: 31_638 nanoseconds. + Weight::from_parts(33_621_000, 0) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig PayingDid (r:1 w:1) // Proof Skipped: MultiSig PayingDid (max_values: None, max_size: None, mode: Measured) fn remove_payer_via_payer() -> Weight { - // Minimum execution time: 47_130 nanoseconds. - Weight::from_parts(52_589_000) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 30_997 nanoseconds. + Weight::from_parts(32_099_000, 0) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) @@ -436,27 +406,27 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: Identity Authorizations (r:1 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity OutdatedAuthorizations (r:1 w:0) - // Proof: Identity OutdatedAuthorizations (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Identity OutdatedAuthorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidRecords (r:1 w:0) - // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity DidRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:1) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity Claims (r:2 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:1) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:1) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyPortfolioPermissions (r:0 w:1) // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyExtrinsicPermissions (r:0 w:1) @@ -466,8 +436,8 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig AuthToProposalId (r:0 w:1) // Proof Skipped: MultiSig AuthToProposalId (max_values: None, max_size: None, mode: Measured) fn join_identity() -> Weight { - // Minimum execution time: 95_955 nanoseconds. - Weight::from_parts(97_166_000) + // Minimum execution time: 110_895 nanoseconds. + Weight::from_parts(125_979_000, 0) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(9)) } @@ -480,7 +450,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig LastInvalidProposal (r:1 w:0) // Proof Skipped: MultiSig LastInvalidProposal (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig Votes (r:1 w:1) @@ -492,8 +462,8 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig ProposalStates (r:0 w:1) // Proof Skipped: MultiSig ProposalStates (max_values: None, max_size: None, mode: Measured) fn create_join_identity() -> Weight { - // Minimum execution time: 73_149 nanoseconds. - Weight::from_parts(76_575_000) + // Minimum execution time: 78_387 nanoseconds. + Weight::from_parts(81_713_000, 0) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(6)) } @@ -508,7 +478,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig Votes (r:1 w:1) // Proof Skipped: MultiSig Votes (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig Proposals (r:1 w:0) @@ -516,22 +486,22 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Storage: MultiSig ProposalVoteCounts (r:1 w:1) // Proof Skipped: MultiSig ProposalVoteCounts (max_values: None, max_size: None, mode: Measured) fn approve_join_identity() -> Weight { - // Minimum execution time: 65_428 nanoseconds. - Weight::from_parts(66_780_000) + // Minimum execution time: 73_511 nanoseconds. + Weight::from_parts(76_465_000, 0) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(2)) } // Storage: MultiSig MultiSigSignsRequired (r:1 w:0) // Proof Skipped: MultiSig MultiSigSignsRequired (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) // Storage: MultiSig AdminDid (r:1 w:1) // Proof Skipped: MultiSig AdminDid (max_values: None, max_size: None, mode: Measured) fn remove_admin() -> Weight { - // Minimum execution time: 29_254 nanoseconds. - Weight::from_parts(31_998_000) + // Minimum execution time: 32_839 nanoseconds. + Weight::from_parts(33_820_000, 0) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(1)) } diff --git a/pallets/weights/src/pallet_nft.rs b/pallets/weights/src/pallet_nft.rs index a56ddbd6ec..369fb79f6a 100644 --- a/pallets/weights/src/pallet_nft.rs +++ b/pallets/weights/src/pallet_nft.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_nft //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,179 +54,157 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_nft::WeightInfo for SubstrateWeight { // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System BlockHash (r:1 w:0) // Proof: System BlockHash (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) // Storage: Asset AssetNonce (r:1 w:1) - // Proof: Asset AssetNonce (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) - // Storage: Nft CollectionAsset (r:1 w:1) - // Proof: Nft CollectionAsset (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetNonce (max_values: None, max_size: None, mode: Measured) + // Storage: NFT CollectionAsset (r:1 w:1) + // Proof Skipped: NFT CollectionAsset (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetMetadataGlobalKeyToName (r:255 w:0) // Proof Skipped: Asset AssetMetadataGlobalKeyToName (max_values: None, max_size: None, mode: Measured) // Storage: Asset Assets (r:1 w:1) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) + // Storage: Portfolio PortfolioCustodian (r:1 w:0) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Identity CurrentPayer (r:1 w:0) - // Proof: Identity CurrentPayer (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentPayer (max_values: Some(1), max_size: None, mode: Measured) // Storage: ExternalAgents NumFullAgents (r:1 w:1) - // Proof: ExternalAgents NumFullAgents (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) - // Storage: Nft CurrentCollectionId (r:1 w:1) - // Proof: Nft CurrentCollectionId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents NumFullAgents (max_values: None, max_size: None, mode: Measured) + // Storage: NFT CurrentCollectionId (r:1 w:1) + // Proof Skipped: NFT CurrentCollectionId (max_values: Some(1), max_size: None, mode: Measured) + // Storage: NFT Collection (r:0 w:1) + // Proof Skipped: NFT Collection (max_values: None, max_size: None, mode: Measured) + // Storage: NFT CollectionKeys (r:0 w:1) + // Proof Skipped: NFT CollectionKeys (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetNames (r:0 w:1) // Proof Skipped: Asset AssetNames (max_values: None, max_size: None, mode: Measured) // Storage: Asset SecurityTokensOwnedByUser (r:0 w:1) - // Proof: Asset SecurityTokensOwnedByUser (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Asset SecurityTokensOwnedByUser (max_values: None, max_size: None, mode: Measured) // Storage: Asset AssetIdentifiers (r:0 w:1) // Proof Skipped: Asset AssetIdentifiers (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents AgentOf (r:0 w:1) - // Proof: ExternalAgents AgentOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents AgentOf (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:0 w:1) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) - // Storage: Nft Collection (r:0 w:1) - // Proof: Nft Collection (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) - // Storage: Nft CollectionKeys (r:0 w:1) - // Proof Skipped: Nft CollectionKeys (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[1, 255]`. fn create_nft_collection(n: u32) -> Weight { - // Minimum execution time: 129_685 nanoseconds. - Weight::from_parts(137_525_691) - // Standard Error: 10_618 - .saturating_add(Weight::from_parts(2_504_965).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(14)) + // Minimum execution time: 112_277 nanoseconds. + Weight::from_parts(116_687_560, 0) + // Standard Error: 12_225 + .saturating_add(Weight::from_parts(2_590_390, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(12)) } - // Storage: Nft CollectionAsset (r:1 w:0) - // Proof: Nft CollectionAsset (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Storage: NFT CollectionAsset (r:1 w:0) + // Proof Skipped: NFT CollectionAsset (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Nft CollectionKeys (r:1 w:0) - // Proof Skipped: Nft CollectionKeys (max_values: None, max_size: None, mode: Measured) - // Storage: Nft NFTsInCollection (r:1 w:1) - // Proof: Nft NFTsInCollection (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) - // Storage: Nft NumberOfNFTs (r:1 w:1) - // Proof: Nft NumberOfNFTs (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) - // Storage: Nft CurrentNFTId (r:1 w:1) - // Proof: Nft CurrentNFTId (max_values: None, max_size: Some(32), added: 2507, mode: MaxEncodedLen) + // Storage: NFT CollectionKeys (r:1 w:0) + // Proof Skipped: NFT CollectionKeys (max_values: None, max_size: None, mode: Measured) + // Storage: NFT NFTsInCollection (r:1 w:1) + // Proof Skipped: NFT NFTsInCollection (max_values: None, max_size: None, mode: Measured) + // Storage: NFT NumberOfNFTs (r:1 w:1) + // Proof Skipped: NFT NumberOfNFTs (max_values: None, max_size: None, mode: Measured) + // Storage: NFT CurrentNFTId (r:1 w:1) + // Proof Skipped: NFT CurrentNFTId (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioNFT (r:0 w:1) - // Proof: Portfolio PortfolioNFT (max_values: None, max_size: Some(90), added: 2565, mode: MaxEncodedLen) - // Storage: Nft MetadataValue (r:0 w:255) - // Proof Skipped: Nft MetadataValue (max_values: None, max_size: None, mode: Measured) - // Storage: Nft NFTOwner (r:0 w:1) - // Proof: Nft NFTOwner (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioNFT (max_values: None, max_size: None, mode: Measured) + // Storage: NFT MetadataValue (r:0 w:255) + // Proof Skipped: NFT MetadataValue (max_values: None, max_size: None, mode: Measured) + // Storage: NFT NFTOwner (r:0 w:1) + // Proof Skipped: NFT NFTOwner (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[1, 255]`. fn issue_nft(n: u32) -> Weight { - // Minimum execution time: 78_757 nanoseconds. - Weight::from_parts(82_036_303) - // Standard Error: 10_808 - .saturating_add(Weight::from_parts(3_094_813).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(13)) + // Minimum execution time: 63_275 nanoseconds. + Weight::from_parts(65_757_843, 0) + // Standard Error: 10_580 + .saturating_add(Weight::from_parts(3_304_052, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(5)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(n.into()))) } - // Storage: Nft CollectionAsset (r:1 w:0) - // Proof: Nft CollectionAsset (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Storage: NFT CollectionAsset (r:1 w:0) + // Proof Skipped: NFT CollectionAsset (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:1 w:0) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioNFT (r:1 w:1) - // Proof: Portfolio PortfolioNFT (max_values: None, max_size: Some(90), added: 2565, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioNFT (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedNFT (r:1 w:0) - // Proof: Portfolio PortfolioLockedNFT (max_values: None, max_size: Some(90), added: 2565, mode: MaxEncodedLen) - // Storage: Nft NFTsInCollection (r:1 w:1) - // Proof: Nft NFTsInCollection (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) - // Storage: Nft NumberOfNFTs (r:1 w:1) - // Proof: Nft NumberOfNFTs (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) - // Storage: Nft MetadataValue (r:256 w:255) - // Proof Skipped: Nft MetadataValue (max_values: None, max_size: None, mode: Measured) - // Storage: Nft NFTOwner (r:0 w:1) - // Proof: Nft NFTOwner (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedNFT (max_values: None, max_size: None, mode: Measured) + // Storage: NFT NFTsInCollection (r:1 w:1) + // Proof Skipped: NFT NFTsInCollection (max_values: None, max_size: None, mode: Measured) + // Storage: NFT NumberOfNFTs (r:1 w:1) + // Proof Skipped: NFT NumberOfNFTs (max_values: None, max_size: None, mode: Measured) + // Storage: NFT MetadataValue (r:256 w:255) + // Proof Skipped: NFT MetadataValue (max_values: None, max_size: None, mode: Measured) + // Storage: NFT NFTOwner (r:1 w:1) + // Proof Skipped: NFT NFTOwner (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[1, 255]`. fn redeem_nft(n: u32) -> Weight { - // Minimum execution time: 94_061 nanoseconds. - Weight::from_parts(87_454_675) - // Standard Error: 8_486 - .saturating_add(Weight::from_parts(4_722_602).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(15)) + // Minimum execution time: 83_425 nanoseconds. + Weight::from_parts(79_468_509, 0) + // Standard Error: 9_091 + .saturating_add(Weight::from_parts(4_986_847, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(4)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(n.into()))) } - // Storage: Nft CollectionAsset (r:1 w:0) - // Proof: Nft CollectionAsset (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) - // Storage: Nft NumberOfNFTs (r:2 w:2) - // Proof: Nft NumberOfNFTs (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + // Storage: NFT CollectionAsset (r:1 w:0) + // Proof Skipped: NFT CollectionAsset (max_values: None, max_size: None, mode: Measured) + // Storage: NFT NumberOfNFTs (r:2 w:2) + // Proof Skipped: NFT NumberOfNFTs (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioNFT (r:10 w:20) - // Proof: Portfolio PortfolioNFT (max_values: None, max_size: Some(90), added: 2565, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioNFT (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedNFT (r:10 w:0) - // Proof: Portfolio PortfolioLockedNFT (max_values: None, max_size: Some(90), added: 2565, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedNFT (max_values: None, max_size: None, mode: Measured) // Storage: Asset Frozen (r:1 w:0) - // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Asset Frozen (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity Claims (r:4 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: ComplianceManager AssetCompliances (r:1 w:0) // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) - // Storage: Nft NFTOwner (r:0 w:10) - // Proof: Nft NFTOwner (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Storage: NFT NFTOwner (r:0 w:10) + // Proof Skipped: NFT NFTOwner (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[1, 10]`. fn base_nft_transfer(n: u32) -> Weight { - // Minimum execution time: 125_458 nanoseconds. - Weight::from_parts(119_702_844) - // Standard Error: 99_329 - .saturating_add(Weight::from_parts(13_378_308).saturating_mul(n.into())) + // Minimum execution time: 132_779 nanoseconds. + Weight::from_parts(127_076_178, 0) + // Standard Error: 135_156 + .saturating_add(Weight::from_parts(14_141_631, 0).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(2)) .saturating_add(DbWeight::get().writes((3_u64).saturating_mul(n.into()))) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -234,24 +212,24 @@ impl pallet_nft::WeightInfo for SubstrateWeight { // Storage: Portfolio Portfolios (r:1 w:0) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:1 w:0) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) - // Storage: Nft CollectionAsset (r:1 w:0) - // Proof: Nft CollectionAsset (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) - // Storage: Nft NumberOfNFTs (r:2 w:2) - // Proof: Nft NumberOfNFTs (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) + // Storage: NFT CollectionAsset (r:1 w:0) + // Proof Skipped: NFT CollectionAsset (max_values: None, max_size: None, mode: Measured) + // Storage: NFT NumberOfNFTs (r:2 w:2) + // Proof Skipped: NFT NumberOfNFTs (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioNFT (r:10 w:20) - // Proof: Portfolio PortfolioNFT (max_values: None, max_size: Some(90), added: 2565, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioNFT (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedNFT (r:10 w:0) - // Proof: Portfolio PortfolioLockedNFT (max_values: None, max_size: Some(90), added: 2565, mode: MaxEncodedLen) - // Storage: Nft NFTOwner (r:0 w:10) - // Proof: Nft NFTOwner (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedNFT (max_values: None, max_size: None, mode: Measured) + // Storage: NFT NFTOwner (r:0 w:10) + // Proof Skipped: NFT NFTOwner (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[1, 10]`. fn controller_transfer(n: u32) -> Weight { - // Minimum execution time: 93_139 nanoseconds. - Weight::from_parts(85_640_069) - // Standard Error: 91_703 - .saturating_add(Weight::from_parts(13_802_261).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(13)) + // Minimum execution time: 79_298 nanoseconds. + Weight::from_parts(70_256_608, 0) + // Standard Error: 122_051 + .saturating_add(Weight::from_parts(14_678_121, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(2)) .saturating_add(DbWeight::get().writes((3_u64).saturating_mul(n.into()))) diff --git a/pallets/weights/src/pallet_pips.rs b/pallets/weights/src/pallet_pips.rs index fe9064d671..6ea71f690e 100644 --- a/pallets/weights/src/pallet_pips.rs +++ b/pallets/weights/src/pallet_pips.rs @@ -18,19 +18,19 @@ //! Autogenerated weights for pallet_pips //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2025-01-20, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `HNDesktop`, CPU: `Intel(R) Core(TM) i5-10600K CPU @ 4.10GHz` // Executed Command: -// ./polymesh +// ./target/release/polymesh // benchmark // pallet // -s // 100 // -r // 5 -// -p=* +// -p=pallet_pips // -e=* // --heap-pages // 4096 @@ -41,7 +41,7 @@ // --wasm-execution // compiled // --output -// ./Polymesh/pallets/weights/src/ +// ./pallets/weights/src/ // --template // ./.maintain/frame-weight-template.hbs @@ -56,59 +56,53 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Storage: Pips PruneHistoricalPips (r:1 w:1) // Proof: Pips PruneHistoricalPips (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn set_prune_historical_pips() -> Weight { - // Minimum execution time: 11_087 nanoseconds. - Weight::from_parts(11_717_000) + // Minimum execution time: 17_519 nanoseconds. + Weight::from_parts(17_652_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Pips MinimumProposalDeposit (r:1 w:1) // Proof: Pips MinimumProposalDeposit (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_min_proposal_deposit() -> Weight { - // Minimum execution time: 14_181 nanoseconds. - Weight::from_parts(16_195_000) + // Minimum execution time: 20_637 nanoseconds. + Weight::from_parts(21_244_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Pips DefaultEnactmentPeriod (r:1 w:1) // Proof: Pips DefaultEnactmentPeriod (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_default_enactment_period() -> Weight { - // Minimum execution time: 14_462 nanoseconds. - Weight::from_parts(16_305_000) + // Minimum execution time: 20_395 nanoseconds. + Weight::from_parts(20_535_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Pips PendingPipExpiry (r:1 w:1) // Proof Skipped: Pips PendingPipExpiry (max_values: Some(1), max_size: None, mode: Measured) fn set_pending_pip_expiry() -> Weight { - // Minimum execution time: 13_811 nanoseconds. - Weight::from_parts(14_993_000) + // Minimum execution time: 21_154 nanoseconds. + Weight::from_parts(21_741_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Pips MaxPipSkipCount (r:1 w:1) // Proof: Pips MaxPipSkipCount (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn set_max_pip_skip_count() -> Weight { - // Minimum execution time: 10_996 nanoseconds. - Weight::from_parts(11_467_000) + // Minimum execution time: 17_035 nanoseconds. + Weight::from_parts(17_344_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Pips ActivePipLimit (r:1 w:1) // Proof: Pips ActivePipLimit (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_active_pip_limit() -> Weight { - // Minimum execution time: 12_869 nanoseconds. - Weight::from_parts(15_353_000) + // Minimum execution time: 19_938 nanoseconds. + Weight::from_parts(20_366_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Pips PipIdSequence (r:1 w:1) // Proof: Pips PipIdSequence (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Pips ActivePipLimit (r:1 w:0) @@ -142,9 +136,9 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Storage: Pips ProposalStates (r:0 w:1) // Proof: Pips ProposalStates (max_values: None, max_size: Some(13), added: 2488, mode: MaxEncodedLen) fn propose_from_community() -> Weight { - // Minimum execution time: 124_157 nanoseconds. - Weight::from_parts(134_491_000) - .saturating_add(DbWeight::get().reads(17)) + // Minimum execution time: 129_932 nanoseconds. + Weight::from_parts(130_345_000, 0) + .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().writes(11)) } // Storage: Pips PipIdSequence (r:1 w:1) @@ -166,19 +160,13 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Storage: Pips ProposalStates (r:0 w:1) // Proof: Pips ProposalStates (max_values: None, max_size: Some(13), added: 2488, mode: MaxEncodedLen) fn propose_from_committee() -> Weight { - // Minimum execution time: 50_636 nanoseconds. - Weight::from_parts(53_931_000) + // Minimum execution time: 65_140 nanoseconds. + Weight::from_parts(65_704_000, 0) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(6)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Pips Proposals (r:1 w:0) // Proof Skipped: Pips Proposals (max_values: None, max_size: None, mode: Measured) // Storage: Pips ProposalStates (r:1 w:0) @@ -192,9 +180,9 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Storage: Pips LiveQueue (r:1 w:1) // Proof Skipped: Pips LiveQueue (max_values: Some(1), max_size: None, mode: Measured) fn vote() -> Weight { - // Minimum execution time: 118_989 nanoseconds. - Weight::from_parts(134_702_000) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 108_219 nanoseconds. + Weight::from_parts(115_627_000, 0) + .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(4)) } // Storage: Pips ProposalStates (r:1 w:1) @@ -210,8 +198,8 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Storage: Pips PipToSchedule (r:0 w:1) // Proof: Pips PipToSchedule (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) fn approve_committee_proposal() -> Weight { - // Minimum execution time: 46_921 nanoseconds. - Weight::from_parts(49_374_000) + // Minimum execution time: 65_605 nanoseconds. + Weight::from_parts(67_197_000, 0) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(4)) } @@ -238,8 +226,8 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Storage: Pips ProposalResult (r:0 w:1) // Proof: Pips ProposalResult (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) fn reject_proposal() -> Weight { - // Minimum execution time: 69_755 nanoseconds. - Weight::from_parts(74_191_000) + // Minimum execution time: 85_835 nanoseconds. + Weight::from_parts(87_787_000, 0) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(9)) } @@ -258,19 +246,13 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Storage: Pips ProposalResult (r:0 w:1) // Proof: Pips ProposalResult (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) fn prune_proposal() -> Weight { - // Minimum execution time: 44_968 nanoseconds. - Weight::from_parts(46_269_000) + // Minimum execution time: 61_597 nanoseconds. + Weight::from_parts(62_681_000, 0) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(7)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: PolymeshCommittee ReleaseCoordinator (r:1 w:0) // Proof: PolymeshCommittee ReleaseCoordinator (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) // Storage: Pips ProposalStates (r:1 w:0) @@ -282,19 +264,13 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Storage: Pips PipToSchedule (r:0 w:1) // Proof: Pips PipToSchedule (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) fn reschedule_execution() -> Weight { - // Minimum execution time: 85_239 nanoseconds. - Weight::from_parts(93_881_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 77_090 nanoseconds. + Weight::from_parts(77_456_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(4)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: PolymeshCommittee Members (r:1 w:0) // Proof Skipped: PolymeshCommittee Members (max_values: Some(1), max_size: None, mode: Measured) // Storage: Pips SnapshotMeta (r:1 w:1) @@ -302,19 +278,13 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Storage: Pips SnapshotQueue (r:0 w:1) // Proof Skipped: Pips SnapshotQueue (max_values: Some(1), max_size: None, mode: Measured) fn clear_snapshot() -> Weight { - // Minimum execution time: 50_476 nanoseconds. - Weight::from_parts(54_622_000) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 39_778 nanoseconds. + Weight::from_parts(40_192_000, 0) + .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: PolymeshCommittee Members (r:1 w:0) // Proof Skipped: PolymeshCommittee Members (max_values: Some(1), max_size: None, mode: Measured) // Storage: Pips SnapshotIdSequence (r:1 w:1) @@ -326,9 +296,9 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Storage: Pips SnapshotMeta (r:0 w:1) // Proof: Pips SnapshotMeta (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) fn snapshot() -> Weight { - // Minimum execution time: 70_968 nanoseconds. - Weight::from_parts(72_548_000) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 62_355 nanoseconds. + Weight::from_parts(70_260_000, 0) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Pips MaxPipSkipCount (r:1 w:0) @@ -361,14 +331,14 @@ impl pallet_pips::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 33]`. /// The range of component `s` is `[0, 33]`. fn enact_snapshot_results(a: u32, r: u32, s: u32) -> Weight { - // Minimum execution time: 876_216 nanoseconds. - Weight::from_parts(150_324_091) - // Standard Error: 103_895 - .saturating_add(Weight::from_parts(34_756_262).saturating_mul(a.into())) - // Standard Error: 103_895 - .saturating_add(Weight::from_parts(15_591_440).saturating_mul(r.into())) - // Standard Error: 103_895 - .saturating_add(Weight::from_parts(6_671_231).saturating_mul(s.into())) + // Minimum execution time: 977_352 nanoseconds. + Weight::from_parts(159_135_641, 0) + // Standard Error: 45_263 + .saturating_add(Weight::from_parts(38_431_937, 0).saturating_mul(a.into())) + // Standard Error: 45_263 + .saturating_add(Weight::from_parts(16_926_524, 0).saturating_mul(r.into())) + // Standard Error: 45_263 + .saturating_add(Weight::from_parts(7_970_390, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(a.into()))) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) @@ -399,8 +369,8 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Storage: Pips ProposalResult (r:0 w:1) // Proof: Pips ProposalResult (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) fn execute_scheduled_pip() -> Weight { - // Minimum execution time: 120_390 nanoseconds. - Weight::from_parts(122_634_000) + // Minimum execution time: 110_098 nanoseconds. + Weight::from_parts(111_819_000, 0) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(9)) } @@ -429,8 +399,8 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Storage: Pips ProposalResult (r:0 w:1) // Proof: Pips ProposalResult (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) fn expire_scheduled_pip() -> Weight { - // Minimum execution time: 143_155 nanoseconds. - Weight::from_parts(148_643_000) + // Minimum execution time: 128_188 nanoseconds. + Weight::from_parts(129_249_000, 0) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(10)) } @@ -449,12 +419,12 @@ impl pallet_pips::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 128]`. /// The range of component `v` is `[0, 128]`. fn remove_pending_storage(r: u32, v: u32) -> Weight { - // Minimum execution time: 655_515 nanoseconds. - Weight::from_parts(81_639_463) - // Standard Error: 39_969 - .saturating_add(Weight::from_parts(21_271_082).saturating_mul(r.into())) - // Standard Error: 39_969 - .saturating_add(Weight::from_parts(4_999_901).saturating_mul(v.into())) + // Minimum execution time: 739_279 nanoseconds. + Weight::from_parts(63_144_485, 0) + // Standard Error: 18_226 + .saturating_add(Weight::from_parts(24_421_417, 0).saturating_mul(r.into())) + // Standard Error: 18_226 + .saturating_add(Weight::from_parts(5_613_829, 0).saturating_mul(v.into())) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(v.into()))) diff --git a/pallets/weights/src/pallet_portfolio.rs b/pallets/weights/src/pallet_portfolio.rs index ba9aa05bac..7a4c63cde6 100644 --- a/pallets/weights/src/pallet_portfolio.rs +++ b/pallets/weights/src/pallet_portfolio.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_portfolio //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,157 +54,121 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_portfolio::WeightInfo for SubstrateWeight { // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio NameToNumber (r:1 w:1) // Proof Skipped: Portfolio NameToNumber (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio NextPortfolioNumber (r:1 w:1) - // Proof: Portfolio NextPortfolioNumber (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Portfolio NextPortfolioNumber (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio Portfolios (r:0 w:1) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) /// The range of component `l` is `[1, 500]`. fn create_portfolio(l: u32) -> Weight { - // Minimum execution time: 44_907 nanoseconds. - Weight::from_parts(53_645_608) - // Standard Error: 3_075 - .saturating_add(Weight::from_parts(9_707).saturating_mul(l.into())) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 29_945 nanoseconds. + Weight::from_parts(37_050_913, 0) + // Standard Error: 2_500 + .saturating_add(Weight::from_parts(8_946, 0).saturating_mul(l.into())) + .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetCount (r:1 w:1) - // Proof: Portfolio PortfolioAssetCount (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetCount (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioNFT (r:1 w:0) - // Proof: Portfolio PortfolioNFT (max_values: None, max_size: Some(90), added: 2565, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioNFT (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedNFT (r:1 w:0) - // Proof: Portfolio PortfolioLockedNFT (max_values: None, max_size: Some(90), added: 2565, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedNFT (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio Portfolios (r:1 w:1) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:1 w:1) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfoliosInCustody (r:0 w:1) - // Proof: Portfolio PortfoliosInCustody (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfoliosInCustody (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio NameToNumber (r:0 w:1) // Proof Skipped: Portfolio NameToNumber (max_values: None, max_size: None, mode: Measured) fn delete_portfolio() -> Weight { - // Minimum execution time: 72_729 nanoseconds. - Weight::from_parts(77_356_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 61_051 nanoseconds. + Weight::from_parts(69_163_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(5)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio Portfolios (r:1 w:1) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio NameToNumber (r:1 w:2) // Proof Skipped: Portfolio NameToNumber (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[1, 500]`. fn rename_portfolio(i: u32) -> Weight { - // Minimum execution time: 51_658 nanoseconds. - Weight::from_parts(59_738_619) - // Standard Error: 3_135 - .saturating_add(Weight::from_parts(13_609).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 36_695 nanoseconds. + Weight::from_parts(41_059_117, 0) + // Standard Error: 1_347 + .saturating_add(Weight::from_parts(20_675, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:1 w:1) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfoliosInCustody (r:0 w:1) - // Proof: Portfolio PortfoliosInCustody (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfoliosInCustody (max_values: None, max_size: None, mode: Measured) fn quit_portfolio_custody() -> Weight { - // Minimum execution time: 51_737 nanoseconds. - Weight::from_parts(52_108_000) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 36_354 nanoseconds. + Weight::from_parts(40_070_000, 0) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity Authorizations (r:1 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity OutdatedAuthorizations (r:1 w:0) - // Proof: Identity OutdatedAuthorizations (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Identity OutdatedAuthorizations (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:1 w:1) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfoliosInCustody (r:0 w:2) - // Proof: Portfolio PortfoliosInCustody (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfoliosInCustody (max_values: None, max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:1) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) fn accept_portfolio_custody() -> Weight { - // Minimum execution time: 73_401 nanoseconds. - Weight::from_parts(76_475_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 59_127 nanoseconds. + Weight::from_parts(59_309_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(6)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio Portfolios (r:1 w:0) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:1 w:0) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioNFT (r:100 w:200) - // Proof: Portfolio PortfolioNFT (max_values: None, max_size: Some(90), added: 2565, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioNFT (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedNFT (r:100 w:0) - // Proof: Portfolio PortfolioLockedNFT (max_values: None, max_size: Some(90), added: 2565, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedNFT (max_values: None, max_size: None, mode: Measured) // Storage: Asset Assets (r:10 w:0) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetBalances (r:20 w:20) - // Proof: Portfolio PortfolioAssetBalances (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetBalances (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedAssets (r:10 w:0) - // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedAssets (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetCount (r:1 w:1) - // Proof: Portfolio PortfolioAssetCount (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) - // Storage: Nft NFTOwner (r:0 w:100) - // Proof: Nft NFTOwner (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetCount (max_values: None, max_size: None, mode: Measured) + // Storage: NFT NFTOwner (r:0 w:100) + // Proof Skipped: NFT NFTOwner (max_values: None, max_size: None, mode: Measured) /// The range of component `f` is `[1, 10]`. /// The range of component `n` is `[1, 100]`. fn move_portfolio_funds(f: u32, n: u32) -> Weight { - // Minimum execution time: 379_240 nanoseconds. - Weight::from_parts(64_725_812) - // Standard Error: 296_727 - .saturating_add(Weight::from_parts(31_588_542).saturating_mul(f.into())) - // Standard Error: 27_882 - .saturating_add(Weight::from_parts(13_745_446).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 324_106 nanoseconds. + Weight::from_parts(69_877_225, 0) + // Standard Error: 363_511 + .saturating_add(Weight::from_parts(24_738_302, 0).saturating_mul(f.into())) + // Standard Error: 34_158 + .saturating_add(Weight::from_parts(14_948_726, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().reads((4_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(1)) @@ -212,101 +176,71 @@ impl pallet_portfolio::WeightInfo for SubstrateWeight { .saturating_add(DbWeight::get().writes((3_u64).saturating_mul(n.into()))) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio Portfolios (r:1 w:0) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:1 w:0) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PreApprovedPortfolios (r:0 w:1) - // Proof: Portfolio PreApprovedPortfolios (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PreApprovedPortfolios (max_values: None, max_size: None, mode: Measured) fn pre_approve_portfolio() -> Weight { - // Minimum execution time: 45_107 nanoseconds. - Weight::from_parts(60_301_000) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 28_823 nanoseconds. + Weight::from_parts(34_331_000, 0) + .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio Portfolios (r:1 w:0) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:1 w:0) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PreApprovedPortfolios (r:0 w:1) - // Proof: Portfolio PreApprovedPortfolios (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PreApprovedPortfolios (max_values: None, max_size: None, mode: Measured) fn remove_portfolio_pre_approval() -> Weight { - // Minimum execution time: 45_328 nanoseconds. - Weight::from_parts(48_192_000) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 28_793 nanoseconds. + Weight::from_parts(30_766_000, 0) + .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio AllowedCustodians (r:0 w:1) - // Proof: Portfolio AllowedCustodians (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Portfolio AllowedCustodians (max_values: None, max_size: None, mode: Measured) fn allow_identity_to_create_portfolios() -> Weight { - // Minimum execution time: 35_834 nanoseconds. - Weight::from_parts(40_391_000) - .saturating_add(DbWeight::get().reads(5)) + // Minimum execution time: 15_053 nanoseconds. + Weight::from_parts(16_504_000, 0) + .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio AllowedCustodians (r:0 w:1) - // Proof: Portfolio AllowedCustodians (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Portfolio AllowedCustodians (max_values: None, max_size: None, mode: Measured) fn revoke_create_portfolios_permission() -> Weight { - // Minimum execution time: 35_373 nanoseconds. - Weight::from_parts(38_498_000) - .saturating_add(DbWeight::get().reads(5)) + // Minimum execution time: 15_784 nanoseconds. + Weight::from_parts(17_936_000, 0) + .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio AllowedCustodians (r:1 w:0) - // Proof: Portfolio AllowedCustodians (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Portfolio AllowedCustodians (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio NextPortfolioNumber (r:1 w:1) - // Proof: Portfolio NextPortfolioNumber (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Portfolio NextPortfolioNumber (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio NameToNumber (r:1 w:1) // Proof Skipped: Portfolio NameToNumber (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:0 w:1) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfoliosInCustody (r:0 w:1) - // Proof: Portfolio PortfoliosInCustody (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfoliosInCustody (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio Portfolios (r:0 w:1) // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) fn create_custody_portfolio() -> Weight { - // Minimum execution time: 63_256 nanoseconds. - Weight::from_parts(66_940_000) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 46_910 nanoseconds. + Weight::from_parts(48_954_000, 0) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(5)) } } diff --git a/pallets/weights/src/pallet_preimage.rs b/pallets/weights/src/pallet_preimage.rs index 332f63cfdf..744a72e4aa 100644 --- a/pallets/weights/src/pallet_preimage.rs +++ b/pallets/weights/src/pallet_preimage.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_preimage //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -59,10 +59,10 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_preimage(s: u32) -> Weight { - // Minimum execution time: 28_203 nanoseconds. - Weight::from_parts(28_254_999) - // Standard Error: 2 - .saturating_add(Weight::from_parts(1_501).saturating_mul(s.into())) + // Minimum execution time: 29_554 nanoseconds. + Weight::from_parts(22_909_597, 0) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_370, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -72,10 +72,10 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_requested_preimage(s: u32) -> Weight { - // Minimum execution time: 17_937 nanoseconds. - Weight::from_parts(1_683_598) - // Standard Error: 4 - .saturating_add(Weight::from_parts(1_510).saturating_mul(s.into())) + // Minimum execution time: 18_909 nanoseconds. + Weight::from_parts(19_329_000, 0) + // Standard Error: 2 + .saturating_add(Weight::from_parts(1_372, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -85,10 +85,10 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) /// The range of component `s` is `[0, 4194304]`. fn note_no_deposit_preimage(s: u32) -> Weight { - // Minimum execution time: 17_246 nanoseconds. - Weight::from_parts(9_678_129) + // Minimum execution time: 18_167 nanoseconds. + Weight::from_parts(18_468_000, 0) // Standard Error: 1 - .saturating_add(Weight::from_parts(1_499).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_362, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -97,8 +97,8 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Storage: Preimage PreimageFor (r:0 w:1) // Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unnote_preimage() -> Weight { - // Minimum execution time: 45_098 nanoseconds. - Weight::from_parts(46_080_000) + // Minimum execution time: 55_824 nanoseconds. + Weight::from_parts(57_286_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -107,40 +107,40 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Storage: Preimage PreimageFor (r:0 w:1) // Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unnote_no_deposit_preimage() -> Weight { - // Minimum execution time: 33_671 nanoseconds. - Weight::from_parts(37_296_000) + // Minimum execution time: 35_714 nanoseconds. + Weight::from_parts(37_967_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Preimage StatusFor (r:1 w:1) // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_preimage() -> Weight { - // Minimum execution time: 34_522 nanoseconds. - Weight::from_parts(37_426_000) + // Minimum execution time: 32_498 nanoseconds. + Weight::from_parts(38_387_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Preimage StatusFor (r:1 w:1) // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_no_deposit_preimage() -> Weight { - // Minimum execution time: 25_468 nanoseconds. - Weight::from_parts(27_331_000) + // Minimum execution time: 19_108 nanoseconds. + Weight::from_parts(21_673_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Preimage StatusFor (r:1 w:1) // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_unnoted_preimage() -> Weight { - // Minimum execution time: 18_768 nanoseconds. - Weight::from_parts(22_253_000) + // Minimum execution time: 19_580 nanoseconds. + Weight::from_parts(21_141_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Preimage StatusFor (r:1 w:1) // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_requested_preimage() -> Weight { - // Minimum execution time: 12_048 nanoseconds. - Weight::from_parts(13_801_000) + // Minimum execution time: 10_837 nanoseconds. + Weight::from_parts(11_948_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -149,24 +149,24 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Storage: Preimage PreimageFor (r:0 w:1) // Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unrequest_preimage() -> Weight { - // Minimum execution time: 42_694 nanoseconds. - Weight::from_parts(43_585_000) + // Minimum execution time: 31_718 nanoseconds. + Weight::from_parts(34_052_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Preimage StatusFor (r:1 w:1) // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn unrequest_unnoted_preimage() -> Weight { - // Minimum execution time: 10_756 nanoseconds. - Weight::from_parts(12_919_000) + // Minimum execution time: 10_776 nanoseconds. + Weight::from_parts(11_267_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Preimage StatusFor (r:1 w:1) // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn unrequest_multi_referenced_preimage() -> Weight { - // Minimum execution time: 9_925 nanoseconds. - Weight::from_parts(11_037_000) + // Minimum execution time: 11_066 nanoseconds. + Weight::from_parts(11_577_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } diff --git a/pallets/weights/src/pallet_protocol_fee.rs b/pallets/weights/src/pallet_protocol_fee.rs index 058da84617..6c1426f0f7 100644 --- a/pallets/weights/src/pallet_protocol_fee.rs +++ b/pallets/weights/src/pallet_protocol_fee.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_protocol_fee //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,15 +54,15 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_protocol_fee::WeightInfo for SubstrateWeight { // Storage: ProtocolFee Coefficient (r:0 w:1) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) fn change_coefficient() -> Weight { - // Minimum execution time: 7_911 nanoseconds. - Weight::from_parts(8_202_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 10_466 nanoseconds. + Weight::from_parts(10_776_000, 0).saturating_add(DbWeight::get().writes(1)) } // Storage: ProtocolFee BaseFees (r:0 w:1) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) fn change_base_fee() -> Weight { - // Minimum execution time: 8_643 nanoseconds. - Weight::from_parts(10_145_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 10_476 nanoseconds. + Weight::from_parts(12_649_000, 0).saturating_add(DbWeight::get().writes(1)) } } diff --git a/pallets/weights/src/pallet_relayer.rs b/pallets/weights/src/pallet_relayer.rs index e152026d3f..55cadb84a6 100644 --- a/pallets/weights/src/pallet_relayer.rs +++ b/pallets/weights/src/pallet_relayer.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_relayer //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,111 +54,87 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_relayer::WeightInfo for SubstrateWeight { // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity CurrentAuthId (r:1 w:1) - // Proof: Identity CurrentAuthId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentAuthId (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:1) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) // Storage: Identity Authorizations (r:0 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) fn set_paying_key() -> Weight { - // Minimum execution time: 31_176 nanoseconds. - Weight::from_parts(34_031_000) + // Minimum execution time: 34_151 nanoseconds. + Weight::from_parts(35_943_000, 0) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(4)) } // Storage: Identity KeyRecords (r:2 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity Authorizations (r:1 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) // Storage: Identity OutdatedAuthorizations (r:1 w:0) - // Proof: Identity OutdatedAuthorizations (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Proof Skipped: Identity OutdatedAuthorizations (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity Claims (r:4 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Relayer Subsidies (r:1 w:1) - // Proof: Relayer Subsidies (max_values: None, max_size: Some(96), added: 2571, mode: MaxEncodedLen) + // Proof Skipped: Relayer Subsidies (max_values: None, max_size: None, mode: Measured) // Storage: Identity AccountKeyRefCount (r:2 w:2) - // Proof: Identity AccountKeyRefCount (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + // Proof Skipped: Identity AccountKeyRefCount (max_values: None, max_size: None, mode: Measured) // Storage: Identity NumberOfGivenAuths (r:1 w:1) - // Proof: Identity NumberOfGivenAuths (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) + // Proof Skipped: Identity NumberOfGivenAuths (max_values: None, max_size: None, mode: Measured) // Storage: Identity AuthorizationsGiven (r:0 w:1) - // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Identity AuthorizationsGiven (max_values: None, max_size: None, mode: Measured) fn accept_paying_key() -> Weight { - // Minimum execution time: 84_136 nanoseconds. - Weight::from_parts(90_736_000) + // Minimum execution time: 93_059 nanoseconds. + Weight::from_parts(94_542_000, 0) .saturating_add(DbWeight::get().reads(14)) .saturating_add(DbWeight::get().writes(6)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Relayer Subsidies (r:1 w:1) - // Proof: Relayer Subsidies (max_values: None, max_size: Some(96), added: 2571, mode: MaxEncodedLen) + // Proof Skipped: Relayer Subsidies (max_values: None, max_size: None, mode: Measured) // Storage: Identity AccountKeyRefCount (r:2 w:2) - // Proof: Identity AccountKeyRefCount (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + // Proof Skipped: Identity AccountKeyRefCount (max_values: None, max_size: None, mode: Measured) fn remove_paying_key() -> Weight { - // Minimum execution time: 50_606 nanoseconds. - Weight::from_parts(52_769_000) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 36_174 nanoseconds. + Weight::from_parts(38_248_000, 0) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Relayer Subsidies (r:1 w:1) - // Proof: Relayer Subsidies (max_values: None, max_size: Some(96), added: 2571, mode: MaxEncodedLen) + // Proof Skipped: Relayer Subsidies (max_values: None, max_size: None, mode: Measured) fn update_polyx_limit() -> Weight { - // Minimum execution time: 42_553 nanoseconds. - Weight::from_parts(44_527_000) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 26_390 nanoseconds. + Weight::from_parts(28_032_000, 0) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Relayer Subsidies (r:1 w:1) - // Proof: Relayer Subsidies (max_values: None, max_size: Some(96), added: 2571, mode: MaxEncodedLen) + // Proof Skipped: Relayer Subsidies (max_values: None, max_size: None, mode: Measured) fn increase_polyx_limit() -> Weight { - // Minimum execution time: 42_513 nanoseconds. - Weight::from_parts(47_992_000) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 26_720 nanoseconds. + Weight::from_parts(27_942_000, 0) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Relayer Subsidies (r:1 w:1) - // Proof: Relayer Subsidies (max_values: None, max_size: Some(96), added: 2571, mode: MaxEncodedLen) + // Proof Skipped: Relayer Subsidies (max_values: None, max_size: None, mode: Measured) fn decrease_polyx_limit() -> Weight { - // Minimum execution time: 42_264 nanoseconds. - Weight::from_parts(47_942_000) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 26_670 nanoseconds. + Weight::from_parts(28_093_000, 0) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } } diff --git a/pallets/weights/src/pallet_scheduler.rs b/pallets/weights/src/pallet_scheduler.rs index 05725a5b8d..78f0927ec2 100644 --- a/pallets/weights/src/pallet_scheduler.rs +++ b/pallets/weights/src/pallet_scheduler.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_scheduler //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -56,8 +56,8 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { // Storage: Scheduler IncompleteSince (r:1 w:1) // Proof: Scheduler IncompleteSince (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn service_agendas_base() -> Weight { - // Minimum execution time: 3_956 nanoseconds. - Weight::from_parts(4_306_000) + // Minimum execution time: 4_257 nanoseconds. + Weight::from_parts(4_717_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -65,56 +65,56 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { // Proof: Scheduler Agenda (max_values: None, max_size: Some(10463), added: 12938, mode: MaxEncodedLen) /// The range of component `s` is `[0, 50]`. fn service_agenda_base(s: u32) -> Weight { - // Minimum execution time: 3_926 nanoseconds. - Weight::from_parts(8_734_086) - // Standard Error: 13_013 - .saturating_add(Weight::from_parts(446_332).saturating_mul(s.into())) + // Minimum execution time: 4_056 nanoseconds. + Weight::from_parts(8_535_926, 0) + // Standard Error: 8_884 + .saturating_add(Weight::from_parts(452_167, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } fn service_task_base() -> Weight { - // Minimum execution time: 5_499 nanoseconds. - Weight::from_parts(5_678_000) + // Minimum execution time: 5_879 nanoseconds. + Weight::from_parts(6_429_000, 0) } // Storage: Preimage PreimageFor (r:1 w:1) - // Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) + // Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured) // Storage: Preimage StatusFor (r:1 w:1) // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) /// The range of component `s` is `[128, 4194304]`. fn service_task_fetched(s: u32) -> Weight { - // Minimum execution time: 23_065 nanoseconds. - Weight::from_parts(23_075_000) + // Minimum execution time: 23_575 nanoseconds. + Weight::from_parts(24_257_000, 0) // Standard Error: 1 - .saturating_add(Weight::from_parts(862).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(730, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Scheduler Lookup (r:0 w:1) // Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) fn service_task_named() -> Weight { - // Minimum execution time: 6_971 nanoseconds. - Weight::from_parts(8_844_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 7_281 nanoseconds. + Weight::from_parts(7_652_000, 0).saturating_add(DbWeight::get().writes(1)) } fn service_task_periodic() -> Weight { - // Minimum execution time: 4_987 nanoseconds. - Weight::from_parts(5_399_000) + // Minimum execution time: 5_848 nanoseconds. + Weight::from_parts(6_821_000, 0) } fn execute_dispatch_signed() -> Weight { - // Minimum execution time: 2_434 nanoseconds. - Weight::from_parts(2_754_000) + // Minimum execution time: 2_534 nanoseconds. + Weight::from_parts(3_205_000, 0) } fn execute_dispatch_unsigned() -> Weight { - // Minimum execution time: 2_464 nanoseconds. - Weight::from_parts(2_604_000) + // Minimum execution time: 2_704 nanoseconds. + Weight::from_parts(4_746_000, 0) } // Storage: Scheduler Agenda (r:1 w:1) // Proof: Scheduler Agenda (max_values: None, max_size: Some(10463), added: 12938, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. fn schedule(s: u32) -> Weight { - // Minimum execution time: 12_970 nanoseconds. - Weight::from_parts(19_761_302) - // Standard Error: 18_907 - .saturating_add(Weight::from_parts(485_529).saturating_mul(s.into())) + // Minimum execution time: 13_140 nanoseconds. + Weight::from_parts(19_895_615, 0) + // Standard Error: 17_756 + .saturating_add(Weight::from_parts(475_043, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -124,10 +124,10 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { // Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) /// The range of component `s` is `[1, 50]`. fn cancel(s: u32) -> Weight { - // Minimum execution time: 17_356 nanoseconds. - Weight::from_parts(20_145_881) - // Standard Error: 18_316 - .saturating_add(Weight::from_parts(728_665).saturating_mul(s.into())) + // Minimum execution time: 17_917 nanoseconds. + Weight::from_parts(21_643_727, 0) + // Standard Error: 13_734 + .saturating_add(Weight::from_parts(682_001, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -137,10 +137,10 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { // Proof: Scheduler Agenda (max_values: None, max_size: Some(10463), added: 12938, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. fn schedule_named(s: u32) -> Weight { - // Minimum execution time: 16_064 nanoseconds. - Weight::from_parts(24_948_406) - // Standard Error: 19_234 - .saturating_add(Weight::from_parts(508_630).saturating_mul(s.into())) + // Minimum execution time: 16_564 nanoseconds. + Weight::from_parts(25_137_587, 0) + // Standard Error: 17_033 + .saturating_add(Weight::from_parts(508_209, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } @@ -150,10 +150,10 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { // Proof: Scheduler Agenda (max_values: None, max_size: Some(10463), added: 12938, mode: MaxEncodedLen) /// The range of component `s` is `[1, 50]`. fn cancel_named(s: u32) -> Weight { - // Minimum execution time: 19_559 nanoseconds. - Weight::from_parts(23_742_763) - // Standard Error: 19_014 - .saturating_add(Weight::from_parts(741_496).saturating_mul(s.into())) + // Minimum execution time: 19_960 nanoseconds. + Weight::from_parts(24_138_408, 0) + // Standard Error: 16_466 + .saturating_add(Weight::from_parts(713_572, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } diff --git a/pallets/weights/src/pallet_session.rs b/pallets/weights/src/pallet_session.rs index 80015dc14c..baf8e4cb7b 100644 --- a/pallets/weights/src/pallet_session.rs +++ b/pallets/weights/src/pallet_session.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_session //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -60,8 +60,8 @@ impl pallet_session::WeightInfo for SubstrateWeight { // Storage: Session KeyOwner (r:4 w:4) // Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured) fn set_keys() -> Weight { - // Minimum execution time: 58_137 nanoseconds. - Weight::from_parts(58_958_000) + // Minimum execution time: 60_480 nanoseconds. + Weight::from_parts(61_743_000, 0) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(5)) } @@ -72,8 +72,8 @@ impl pallet_session::WeightInfo for SubstrateWeight { // Storage: Session KeyOwner (r:0 w:4) // Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured) fn purge_keys() -> Weight { - // Minimum execution time: 41_422 nanoseconds. - Weight::from_parts(42_874_000) + // Minimum execution time: 42_173 nanoseconds. + Weight::from_parts(45_859_000, 0) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(5)) } diff --git a/pallets/weights/src/pallet_settlement.rs b/pallets/weights/src/pallet_settlement.rs index 3990682953..27ef5d5c42 100644 --- a/pallets/weights/src/pallet_settlement.rs +++ b/pallets/weights/src/pallet_settlement.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_settlement //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -55,12 +55,6 @@ pub struct SubstrateWeight; impl pallet_settlement::WeightInfo for SubstrateWeight { // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement VenueCounter (r:1 w:1) // Proof: Settlement VenueCounter (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Settlement VenueInfo (r:0 w:1) @@ -76,61 +70,43 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `d` is `[1, 2048]`. /// The range of component `s` is `[0, 50]`. fn create_venue(d: u32, s: u32) -> Weight { - // Minimum execution time: 48_974 nanoseconds. - Weight::from_parts(57_830_988) - // Standard Error: 628 - .saturating_add(Weight::from_parts(2_082).saturating_mul(d.into())) - // Standard Error: 25_526 - .saturating_add(Weight::from_parts(2_134_048).saturating_mul(s.into())) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 38_007 nanoseconds. + Weight::from_parts(43_823_114, 0) + // Standard Error: 328 + .saturating_add(Weight::from_parts(338, 0).saturating_mul(d.into())) + // Standard Error: 13_352 + .saturating_add(Weight::from_parts(2_337_555, 0).saturating_mul(s.into())) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(5)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(s.into()))) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement VenueInfo (r:1 w:0) // Proof: Settlement VenueInfo (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) // Storage: Settlement Details (r:0 w:1) // Proof Skipped: Settlement Details (max_values: None, max_size: None, mode: Measured) /// The range of component `d` is `[1, 2048]`. fn update_venue_details(d: u32) -> Weight { - // Minimum execution time: 44_337 nanoseconds. - Weight::from_parts(51_844_276) - // Standard Error: 618 - .saturating_add(Weight::from_parts(1_286).saturating_mul(d.into())) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 27_702 nanoseconds. + Weight::from_parts(34_850_082, 0) + // Standard Error: 450 + .saturating_add(Weight::from_parts(2_322, 0).saturating_mul(d.into())) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement VenueInfo (r:1 w:1) // Proof: Settlement VenueInfo (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) fn update_venue_type() -> Weight { - // Minimum execution time: 43_295 nanoseconds. - Weight::from_parts(46_730_000) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 27_330 nanoseconds. + Weight::from_parts(28_732_000, 0) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement VenueInfo (r:1 w:0) // Proof: Settlement VenueInfo (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) // Storage: Settlement NumberOfVenueSigners (r:1 w:1) @@ -139,23 +115,17 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Settlement VenueSigners (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) /// The range of component `s` is `[0, 50]`. fn update_venue_signers(s: u32) -> Weight { - // Minimum execution time: 46_891 nanoseconds. - Weight::from_parts(59_156_481) - // Standard Error: 30_755 - .saturating_add(Weight::from_parts(4_205_735).saturating_mul(s.into())) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 29_644 nanoseconds. + Weight::from_parts(41_178_975, 0) + // Standard Error: 25_032 + .saturating_add(Weight::from_parts(4_526_473, 0).saturating_mul(s.into())) + .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(s.into()))) .saturating_add(DbWeight::get().writes(1)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(s.into()))) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) // Storage: Permissions CurrentPalletName (r:1 w:0) @@ -165,19 +135,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Storage: Settlement VenueFiltering (r:0 w:1) // Proof: Settlement VenueFiltering (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) fn set_venue_filtering() -> Weight { - // Minimum execution time: 50_646 nanoseconds. - Weight::from_parts(58_017_000) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 33_059 nanoseconds. + Weight::from_parts(34_743_000, 0) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) // Storage: Permissions CurrentPalletName (r:1 w:0) @@ -188,21 +152,15 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Settlement VenueAllowList (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) /// The range of component `v` is `[0, 100]`. fn allow_venues(v: u32) -> Weight { - // Minimum execution time: 51_297 nanoseconds. - Weight::from_parts(52_344_917) - // Standard Error: 20_629 - .saturating_add(Weight::from_parts(2_228_588).saturating_mul(v.into())) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 29_734 nanoseconds. + Weight::from_parts(34_041_969, 0) + // Standard Error: 18_920 + .saturating_add(Weight::from_parts(2_558_029, 0).saturating_mul(v.into())) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(v.into()))) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) // Storage: Permissions CurrentPalletName (r:1 w:0) @@ -213,21 +171,15 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Settlement VenueAllowList (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) /// The range of component `v` is `[0, 100]`. fn disallow_venues(v: u32) -> Weight { - // Minimum execution time: 49_534 nanoseconds. - Weight::from_parts(51_584_159) - // Standard Error: 18_159 - .saturating_add(Weight::from_parts(2_206_981).saturating_mul(v.into())) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 32_018 nanoseconds. + Weight::from_parts(35_158_836, 0) + // Standard Error: 18_808 + .saturating_add(Weight::from_parts(2_479_690, 0).saturating_mul(v.into())) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(v.into()))) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionDetails (r:1 w:0) // Proof: Settlement InstructionDetails (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) // Storage: Settlement InstructionStatuses (r:1 w:0) @@ -264,15 +216,15 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn affirm_with_receipts(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 1_859_762 nanoseconds. - Weight::from_parts(77_278_928) - // Standard Error: 489_520 - .saturating_add(Weight::from_parts(39_661_165).saturating_mul(f.into())) - // Standard Error: 45_281 - .saturating_add(Weight::from_parts(32_229_661).saturating_mul(n.into())) - // Standard Error: 443_430 - .saturating_add(Weight::from_parts(141_115_891).saturating_mul(o.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 1_362_039 nanoseconds. + Weight::from_parts(30_752_065, 0) + // Standard Error: 920_495 + .saturating_add(Weight::from_parts(50_145_102, 0).saturating_mul(f.into())) + // Standard Error: 85_148 + .saturating_add(Weight::from_parts(37_317_225, 0).saturating_mul(n.into())) + // Standard Error: 833_827 + .saturating_add(Weight::from_parts(84_072_250, 0).saturating_mul(o.into())) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(o.into()))) @@ -283,12 +235,6 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:207 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionLegs (r:121 w:120) // Proof Skipped: Settlement InstructionLegs (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionDetails (r:1 w:1) @@ -301,6 +247,8 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Settlement InstructionStatuses (max_values: None, max_size: Some(21), added: 2496, mode: MaxEncodedLen) // Storage: Settlement InstructionAffirmsPending (r:1 w:1) // Proof: Settlement InstructionAffirmsPending (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Settlement InstructionLegStatus (r:120 w:120) // Proof: Settlement InstructionLegStatus (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) // Storage: Settlement OffChainAffirmations (r:10 w:10) @@ -327,6 +275,10 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Portfolio PortfolioAssetBalances (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) // Storage: Asset Frozen (r:110 w:0) // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Storage: CddServiceProviders ActiveMembers (r:1 w:0) + // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:205 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetTransferCompliances (r:10 w:0) // Proof: Statistics AssetTransferCompliances (max_values: None, max_size: Some(246), added: 2721, mode: MaxEncodedLen) // Storage: Statistics AssetStats (r:140 w:100) @@ -355,13 +307,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn execute_manual_instruction(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 4_052_202 nanoseconds. - Weight::from_parts(4_061_556_000) - // Standard Error: 4_422_165 - .saturating_add(Weight::from_parts(243_990_566).saturating_mul(f.into())) - // Standard Error: 443_980 - .saturating_add(Weight::from_parts(165_926_396).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(21)) + // Minimum execution time: 4_326_122 nanoseconds. + Weight::from_parts(4_334_153_000, 0) + // Standard Error: 5_116_456 + .saturating_add(Weight::from_parts(248_402_942, 0).saturating_mul(f.into())) + // Standard Error: 494_029 + .saturating_add(Weight::from_parts(179_827_924, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(19)) .saturating_add(DbWeight::get().reads((60_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((18_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(o.into()))) @@ -372,12 +324,6 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement VenueInfo (r:1 w:0) // Proof: Settlement VenueInfo (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) // Storage: Asset Assets (r:110 w:0) @@ -400,6 +346,8 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Asset MandatoryMediators (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: Settlement InstructionCounter (r:1 w:1) // Proof: Settlement InstructionCounter (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Scheduler Lookup (r:1 w:1) // Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) // Storage: Scheduler Agenda (r:1 w:1) @@ -426,15 +374,15 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn add_instruction(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 597_207 nanoseconds. - Weight::from_parts(174_188_376) - // Standard Error: 687_005 - .saturating_add(Weight::from_parts(42_537_717).saturating_mul(f.into())) - // Standard Error: 63_549 - .saturating_add(Weight::from_parts(45_247_302).saturating_mul(n.into())) - // Standard Error: 622_320 - .saturating_add(Weight::from_parts(1_330_592).saturating_mul(o.into())) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 649_862 nanoseconds. + Weight::from_parts(181_103_629, 0) + // Standard Error: 859_961 + .saturating_add(Weight::from_parts(49_562_998, 0).saturating_mul(f.into())) + // Standard Error: 79_548 + .saturating_add(Weight::from_parts(50_371_349, 0).saturating_mul(n.into())) + // Standard Error: 778_992 + .saturating_add(Weight::from_parts(377_069, 0).saturating_mul(o.into())) + .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().reads((9_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((9_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(8)) @@ -444,12 +392,6 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement VenueInfo (r:1 w:0) // Proof: Settlement VenueInfo (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) // Storage: Asset Assets (r:110 w:0) @@ -472,6 +414,8 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Asset MandatoryMediators (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: Settlement InstructionCounter (r:1 w:1) // Proof: Settlement InstructionCounter (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Scheduler Lookup (r:1 w:1) // Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) // Storage: Scheduler Agenda (r:1 w:1) @@ -510,15 +454,15 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn add_and_affirm_instruction(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 984_434 nanoseconds. - Weight::from_parts(227_269_495) - // Standard Error: 910_292 - .saturating_add(Weight::from_parts(67_029_389).saturating_mul(f.into())) - // Standard Error: 84_204 - .saturating_add(Weight::from_parts(73_771_559).saturating_mul(n.into())) - // Standard Error: 824_584 - .saturating_add(Weight::from_parts(6_324_027).saturating_mul(o.into())) - .saturating_add(DbWeight::get().reads(12)) + // Minimum execution time: 1_044_625 nanoseconds. + Weight::from_parts(35_687_014, 0) + // Standard Error: 1_353_987 + .saturating_add(Weight::from_parts(88_363_287, 0).saturating_mul(f.into())) + // Standard Error: 125_247 + .saturating_add(Weight::from_parts(84_907_864, 0).saturating_mul(n.into())) + // Standard Error: 1_226_503 + .saturating_add(Weight::from_parts(10_688_477, 0).saturating_mul(o.into())) + .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().reads((13_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((13_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(o.into()))) @@ -529,12 +473,6 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionDetails (r:1 w:0) // Proof: Settlement InstructionDetails (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) // Storage: Settlement InstructionStatuses (r:1 w:0) @@ -564,13 +502,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `f` is `[1, 10]`. /// The range of component `n` is `[1, 100]`. fn affirm_instruction(f: u32, n: u32) -> Weight { - // Minimum execution time: 526_480 nanoseconds. - Weight::from_parts(151_967_401) - // Standard Error: 453_636 - .saturating_add(Weight::from_parts(33_811_412).saturating_mul(f.into())) - // Standard Error: 42_627 - .saturating_add(Weight::from_parts(31_910_436).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(19)) + // Minimum execution time: 573_378 nanoseconds. + Weight::from_parts(227_742_958, 0) + // Standard Error: 621_956 + .saturating_add(Weight::from_parts(33_924_547, 0).saturating_mul(f.into())) + // Standard Error: 58_443 + .saturating_add(Weight::from_parts(36_201_669, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(15)) .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(1)) @@ -579,12 +517,6 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionDetails (r:1 w:0) // Proof: Settlement InstructionDetails (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) // Storage: Settlement InstructionStatuses (r:1 w:0) @@ -609,15 +541,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn withdraw_affirmation(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 448_342 nanoseconds. - Weight::from_parts(88_480_002) - // Standard Error: 415_073 - .saturating_add(Weight::from_parts(30_175_775).saturating_mul(f.into())) - // Standard Error: 38_395 - .saturating_add(Weight::from_parts(32_651_548).saturating_mul(n.into())) - // Standard Error: 375_992 - .saturating_add(Weight::from_parts(5_106_412).saturating_mul(o.into())) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 472_688 nanoseconds. + Weight::from_parts(149_586_656, 0) + // Standard Error: 627_411 + .saturating_add(Weight::from_parts(35_874_804, 0).saturating_mul(f.into())) + // Standard Error: 58_037 + .saturating_add(Weight::from_parts(37_322_729, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().reads((5_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(o.into()))) @@ -693,12 +623,12 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn execute_instruction_paused(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 2_282_727 nanoseconds. - Weight::from_parts(2_290_609_000) - // Standard Error: 3_059_483 - .saturating_add(Weight::from_parts(121_354_879).saturating_mul(f.into())) - // Standard Error: 295_414 - .saturating_add(Weight::from_parts(165_005_345).saturating_mul(n.into())) + // Minimum execution time: 2_385_781 nanoseconds. + Weight::from_parts(2_426_592_000, 0) + // Standard Error: 3_430_970 + .saturating_add(Weight::from_parts(118_611_412, 0).saturating_mul(f.into())) + // Standard Error: 331_283 + .saturating_add(Weight::from_parts(176_390_618, 0).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(16)) .saturating_add(DbWeight::get().reads((26_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((18_u64).saturating_mul(n.into()))) @@ -778,12 +708,12 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn execute_scheduled_instruction(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 4_022_317 nanoseconds. - Weight::from_parts(4_023_859_000) - // Standard Error: 4_531_167 - .saturating_add(Weight::from_parts(225_266_267).saturating_mul(f.into())) - // Standard Error: 437_515 - .saturating_add(Weight::from_parts(163_641_362).saturating_mul(n.into())) + // Minimum execution time: 4_243_219 nanoseconds. + Weight::from_parts(4_250_300_000, 0) + // Standard Error: 4_870_147 + .saturating_add(Weight::from_parts(258_973_141, 0).saturating_mul(f.into())) + // Standard Error: 470_246 + .saturating_add(Weight::from_parts(175_126_988, 0).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(17)) .saturating_add(DbWeight::get().reads((60_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((18_u64).saturating_mul(n.into()))) @@ -795,16 +725,10 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } fn ensure_root_origin() -> Weight { // Minimum execution time: 591 nanoseconds. - Weight::from_parts(641_000) + Weight::from_parts(651_000, 0) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionDetails (r:1 w:0) // Proof: Settlement InstructionDetails (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) // Storage: Settlement InstructionStatuses (r:1 w:0) @@ -831,15 +755,15 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn affirm_with_receipts_rcv(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 1_689_174 nanoseconds. - Weight::from_parts(125_184_104) - // Standard Error: 349_599 - .saturating_add(Weight::from_parts(20_098_108).saturating_mul(f.into())) - // Standard Error: 32_338 - .saturating_add(Weight::from_parts(19_767_832).saturating_mul(n.into())) - // Standard Error: 316_682 - .saturating_add(Weight::from_parts(140_312_288).saturating_mul(o.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 1_165_554 nanoseconds. + Weight::from_parts(152_923_311, 0) + // Standard Error: 520_828 + .saturating_add(Weight::from_parts(21_184_928, 0).saturating_mul(f.into())) + // Standard Error: 48_178 + .saturating_add(Weight::from_parts(21_625_684, 0).saturating_mul(n.into())) + // Standard Error: 471_790 + .saturating_add(Weight::from_parts(85_672_760, 0).saturating_mul(o.into())) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(o.into()))) @@ -850,12 +774,6 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionDetails (r:1 w:0) // Proof: Settlement InstructionDetails (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) // Storage: Settlement InstructionStatuses (r:1 w:0) @@ -873,13 +791,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `f` is `[1, 10]`. /// The range of component `n` is `[1, 100]`. fn affirm_instruction_rcv(f: u32, n: u32) -> Weight { - // Minimum execution time: 351_617 nanoseconds. - Weight::from_parts(152_725_030) - // Standard Error: 405_442 - .saturating_add(Weight::from_parts(19_430_316).saturating_mul(f.into())) - // Standard Error: 38_098 - .saturating_add(Weight::from_parts(19_529_520).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(19)) + // Minimum execution time: 366_979 nanoseconds. + Weight::from_parts(152_848_331, 0) + // Standard Error: 572_932 + .saturating_add(Weight::from_parts(23_592_317, 0).saturating_mul(f.into())) + // Standard Error: 53_837 + .saturating_add(Weight::from_parts(21_858_616, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(15)) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(1)) @@ -888,12 +806,6 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionDetails (r:1 w:0) // Proof: Settlement InstructionDetails (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) // Storage: Settlement InstructionStatuses (r:1 w:0) @@ -912,15 +824,15 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn withdraw_affirmation_rcv(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 322_773 nanoseconds. - Weight::from_parts(90_513_094) - // Standard Error: 293_344 - .saturating_add(Weight::from_parts(20_333_788).saturating_mul(f.into())) - // Standard Error: 27_135 - .saturating_add(Weight::from_parts(19_564_050).saturating_mul(n.into())) - // Standard Error: 265_725 - .saturating_add(Weight::from_parts(4_641_820).saturating_mul(o.into())) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 334_761 nanoseconds. + Weight::from_parts(135_422_202, 0) + // Standard Error: 432_167 + .saturating_add(Weight::from_parts(21_839_953, 0).saturating_mul(f.into())) + // Standard Error: 39_976 + .saturating_add(Weight::from_parts(21_464_027, 0).saturating_mul(n.into())) + // Standard Error: 391_476 + .saturating_add(Weight::from_parts(1_853_671, 0).saturating_mul(o.into())) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(o.into()))) @@ -930,12 +842,6 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement VenueInfo (r:1 w:0) // Proof: Settlement VenueInfo (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) // Storage: Asset Assets (r:110 w:0) @@ -958,6 +864,8 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Asset MandatoryMediators (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: Settlement InstructionCounter (r:1 w:1) // Proof: Settlement InstructionCounter (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Scheduler Lookup (r:1 w:1) // Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) // Storage: Scheduler Agenda (r:1 w:1) @@ -985,17 +893,15 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. /// The range of component `m` is `[0, 4]`. fn add_instruction_with_mediators(f: u32, n: u32, o: u32, m: u32) -> Weight { - // Minimum execution time: 593_100 nanoseconds. - Weight::from_parts(85_814_205) - // Standard Error: 608_044 - .saturating_add(Weight::from_parts(44_550_478).saturating_mul(f.into())) - // Standard Error: 56_109 - .saturating_add(Weight::from_parts(45_044_729).saturating_mul(n.into())) - // Standard Error: 550_973 - .saturating_add(Weight::from_parts(4_861_695).saturating_mul(o.into())) - // Standard Error: 1_275_849 - .saturating_add(Weight::from_parts(4_451_723).saturating_mul(m.into())) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 633_118 nanoseconds. + Weight::from_parts(167_302_584, 0) + // Standard Error: 809_143 + .saturating_add(Weight::from_parts(50_685_362, 0).saturating_mul(f.into())) + // Standard Error: 74_667 + .saturating_add(Weight::from_parts(50_629_572, 0).saturating_mul(n.into())) + // Standard Error: 733_198 + .saturating_add(Weight::from_parts(3_558_326, 0).saturating_mul(o.into())) + .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().reads((9_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((9_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(8)) @@ -1006,12 +912,6 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement VenueInfo (r:1 w:0) // Proof: Settlement VenueInfo (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) // Storage: Asset Assets (r:110 w:0) @@ -1034,6 +934,8 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Asset MandatoryMediators (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: Settlement InstructionCounter (r:1 w:1) // Proof: Settlement InstructionCounter (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Scheduler Lookup (r:1 w:1) // Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) // Storage: Scheduler Agenda (r:1 w:1) @@ -1073,17 +975,15 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. /// The range of component `m` is `[0, 4]`. fn add_and_affirm_with_mediators(f: u32, n: u32, o: u32, m: u32) -> Weight { - // Minimum execution time: 991_648 nanoseconds. - Weight::from_parts(120_646_133) - // Standard Error: 1_065_648 - .saturating_add(Weight::from_parts(80_464_049).saturating_mul(f.into())) - // Standard Error: 98_337 - .saturating_add(Weight::from_parts(74_208_129).saturating_mul(n.into())) - // Standard Error: 965_627 - .saturating_add(Weight::from_parts(3_657_355).saturating_mul(o.into())) - // Standard Error: 2_236_032 - .saturating_add(Weight::from_parts(3_432_237).saturating_mul(m.into())) - .saturating_add(DbWeight::get().reads(12)) + // Minimum execution time: 1_081_398 nanoseconds. + Weight::from_parts(102_620_422, 0) + // Standard Error: 1_211_850 + .saturating_add(Weight::from_parts(79_234_687, 0).saturating_mul(f.into())) + // Standard Error: 111_828 + .saturating_add(Weight::from_parts(85_074_081, 0).saturating_mul(n.into())) + // Standard Error: 1_098_106 + .saturating_add(Weight::from_parts(13_898_085, 0).saturating_mul(o.into())) + .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().reads((13_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((13_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(o.into()))) @@ -1095,12 +995,6 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionDetails (r:1 w:0) // Proof: Settlement InstructionDetails (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) // Storage: Settlement InstructionStatuses (r:1 w:0) @@ -1110,19 +1004,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Storage: Settlement InstructionAffirmsPending (r:1 w:1) // Proof: Settlement InstructionAffirmsPending (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) fn affirm_instruction_as_mediator() -> Weight { - // Minimum execution time: 109_785 nanoseconds. - Weight::from_parts(121_202_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 97_645 nanoseconds. + Weight::from_parts(104_767_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionDetails (r:1 w:0) // Proof: Settlement InstructionDetails (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) // Storage: Settlement InstructionStatuses (r:1 w:0) @@ -1132,25 +1020,19 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Storage: Settlement InstructionAffirmsPending (r:1 w:1) // Proof: Settlement InstructionAffirmsPending (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) fn withdraw_affirmation_as_mediator() -> Weight { - // Minimum execution time: 107_733 nanoseconds. - Weight::from_parts(119_860_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 100_541 nanoseconds. + Weight::from_parts(107_081_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionLegs (r:121 w:120) // Proof Skipped: Settlement InstructionLegs (max_values: None, max_size: None, mode: Measured) - // Storage: Settlement InstructionDetails (r:1 w:1) - // Proof: Settlement InstructionDetails (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) // Storage: Settlement InstructionStatuses (r:1 w:1) // Proof: Settlement InstructionStatuses (max_values: None, max_size: Some(21), added: 2496, mode: MaxEncodedLen) + // Storage: Settlement InstructionDetails (r:1 w:1) + // Proof: Settlement InstructionDetails (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) // Storage: Settlement VenueInfo (r:1 w:0) // Proof: Settlement VenueInfo (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) // Storage: Settlement InstructionMediatorsAffirmations (r:444 w:444) @@ -1177,15 +1059,15 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn base_reject_instruction(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 512_760 nanoseconds. - Weight::from_parts(130_587_142) - // Standard Error: 375_315 - .saturating_add(Weight::from_parts(29_222_837).saturating_mul(f.into())) - // Standard Error: 38_330 - .saturating_add(Weight::from_parts(28_681_658).saturating_mul(n.into())) - // Standard Error: 375_315 - .saturating_add(Weight::from_parts(11_897_129).saturating_mul(o.into())) - .saturating_add(DbWeight::get().reads(14)) + // Minimum execution time: 545_769 nanoseconds. + Weight::from_parts(57_609_468, 0) + // Standard Error: 175_623 + .saturating_add(Weight::from_parts(33_741_621, 0).saturating_mul(f.into())) + // Standard Error: 17_936 + .saturating_add(Weight::from_parts(32_236_704, 0).saturating_mul(n.into())) + // Standard Error: 175_623 + .saturating_add(Weight::from_parts(13_428_424, 0).saturating_mul(o.into())) + .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(o.into()))) @@ -1196,12 +1078,6 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:6 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionMediatorsAffirmations (r:445 w:0) // Proof: Settlement InstructionMediatorsAffirmations (max_values: None, max_size: Some(58), added: 2533, mode: MaxEncodedLen) // Storage: Settlement InstructionDetails (r:1 w:0) @@ -1212,6 +1088,8 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Settlement InstructionStatuses (max_values: None, max_size: Some(21), added: 2496, mode: MaxEncodedLen) // Storage: Settlement InstructionAffirmsPending (r:1 w:0) // Proof: Settlement InstructionAffirmsPending (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Settlement InstructionLegStatus (r:120 w:0) // Proof: Settlement InstructionLegStatus (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) // Storage: Settlement OffChainAffirmations (r:10 w:0) @@ -1238,6 +1116,10 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Portfolio PortfolioAssetBalances (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) // Storage: Asset Frozen (r:110 w:0) // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Storage: CddServiceProviders ActiveMembers (r:1 w:0) + // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:4 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetTransferCompliances (r:10 w:0) // Proof: Statistics AssetTransferCompliances (max_values: None, max_size: Some(246), added: 2721, mode: MaxEncodedLen) // Storage: ComplianceManager AssetCompliances (r:110 w:0) @@ -1262,13 +1144,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn lock_instruction_extrinsic(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 2_079_000 nanoseconds. - Weight::from_parts(2_089_416_000) - // Standard Error: 2_597_622 - .saturating_add(Weight::from_parts(114_580_394).saturating_mul(f.into())) - // Standard Error: 260_798 - .saturating_add(Weight::from_parts(145_115_677).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(19)) + // Minimum execution time: 2_304_759 nanoseconds. + Weight::from_parts(2_306_732_000, 0) + // Standard Error: 2_531_717 + .saturating_add(Weight::from_parts(127_090_962, 0).saturating_mul(f.into())) + // Standard Error: 254_181 + .saturating_add(Weight::from_parts(160_208_420, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(17)) .saturating_add(DbWeight::get().reads((26_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((18_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(o.into()))) @@ -1276,22 +1158,20 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:202 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionLegs (r:121 w:120) // Proof Skipped: Settlement InstructionLegs (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionDetails (r:1 w:1) // Proof: Settlement InstructionDetails (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) - // Storage: Settlement InstructionStatuses (r:1 w:1) - // Proof: Settlement InstructionStatuses (max_values: None, max_size: Some(21), added: 2496, mode: MaxEncodedLen) + // Storage: Settlement VenueInfo (r:1 w:0) + // Proof: Settlement VenueInfo (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) // Storage: Settlement InstructionMediatorsAffirmations (r:444 w:444) // Proof: Settlement InstructionMediatorsAffirmations (max_values: None, max_size: Some(58), added: 2533, mode: MaxEncodedLen) + // Storage: Settlement InstructionStatuses (r:1 w:1) + // Proof: Settlement InstructionStatuses (max_values: None, max_size: Some(21), added: 2496, mode: MaxEncodedLen) // Storage: Settlement LockedTimestamp (r:1 w:0) // Proof: Settlement LockedTimestamp (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Settlement InstructionLegStatus (r:120 w:120) // Proof: Settlement InstructionLegStatus (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) // Storage: Portfolio PortfolioLockedNFT (r:100 w:100) @@ -1320,6 +1200,8 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Portfolio PortfolioAssetCount (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Statistics ActiveAssetStats (r:10 w:0) // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) + // Storage: Identity Claims (r:200 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetStats (r:100 w:100) // Proof: Statistics AssetStats (max_values: None, max_size: Some(107), added: 2582, mode: MaxEncodedLen) // Storage: Settlement UserAffirmations (r:0 w:220) @@ -1338,13 +1220,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn execute_locked_instruction(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 2_338_088 nanoseconds. - Weight::from_parts(2_345_368_000) - // Standard Error: 2_575_462 - .saturating_add(Weight::from_parts(138_468_439).saturating_mul(f.into())) - // Standard Error: 258_573 - .saturating_add(Weight::from_parts(54_883_779).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(14)) + // Minimum execution time: 2_551_296 nanoseconds. + Weight::from_parts(2_553_993_000, 0) + // Standard Error: 2_755_470 + .saturating_add(Weight::from_parts(148_087_830, 0).saturating_mul(f.into())) + // Standard Error: 276_646 + .saturating_add(Weight::from_parts(55_665_624, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().reads((47_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((11_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(o.into()))) @@ -1355,12 +1237,6 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:6 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionLegs (r:121 w:120) // Proof Skipped: Settlement InstructionLegs (max_values: None, max_size: None, mode: Measured) // Storage: Settlement InstructionDetails (r:1 w:1) @@ -1373,6 +1249,8 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Settlement InstructionStatuses (max_values: None, max_size: Some(21), added: 2496, mode: MaxEncodedLen) // Storage: Settlement InstructionAffirmsPending (r:1 w:1) // Proof: Settlement InstructionAffirmsPending (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Settlement InstructionLegStatus (r:120 w:120) // Proof: Settlement InstructionLegStatus (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) // Storage: Settlement OffChainAffirmations (r:10 w:10) @@ -1399,6 +1277,10 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Portfolio PortfolioAssetBalances (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) // Storage: Asset Frozen (r:110 w:0) // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Storage: CddServiceProviders ActiveMembers (r:1 w:0) + // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:4 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetTransferCompliances (r:10 w:0) // Proof: Statistics AssetTransferCompliances (max_values: None, max_size: Some(246), added: 2721, mode: MaxEncodedLen) // Storage: ComplianceManager AssetCompliances (r:110 w:0) @@ -1425,13 +1307,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. /// The range of component `o` is `[0, 10]`. fn execute_manual_instruction_paused(f: u32, n: u32, o: u32) -> Weight { - // Minimum execution time: 2_407_883 nanoseconds. - Weight::from_parts(2_424_538_000) - // Standard Error: 2_747_969 - .saturating_add(Weight::from_parts(126_016_154).saturating_mul(f.into())) - // Standard Error: 275_893 - .saturating_add(Weight::from_parts(167_212_024).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(20)) + // Minimum execution time: 2_610_539 nanoseconds. + Weight::from_parts(2_619_700_000, 0) + // Standard Error: 2_902_849 + .saturating_add(Weight::from_parts(137_575_439, 0).saturating_mul(f.into())) + // Standard Error: 291_442 + .saturating_add(Weight::from_parts(180_560_856, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(18)) .saturating_add(DbWeight::get().reads((26_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((18_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(o.into()))) diff --git a/pallets/weights/src/pallet_staking.rs b/pallets/weights/src/pallet_staking.rs index c4a0273056..360c26ade5 100644 --- a/pallets/weights/src/pallet_staking.rs +++ b/pallets/weights/src/pallet_staking.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_staking //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-12-02, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -30,7 +30,7 @@ // 100 // -r // 5 -// -p=* +// -p=pallet_staking // -e=* // --heap-pages // 4096 @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -60,14 +60,14 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking CurrentEra (r:1 w:0) // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Balances Locks (r:1 w:1) // Proof Skipped: Balances Locks (max_values: None, max_size: None, mode: Measured) // Storage: Staking Payee (r:0 w:1) // Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn bond() -> Weight { - // Minimum execution time: 59_860 nanoseconds. - Weight::from_parts(64_396_000) + // Minimum execution time: 60_331 nanoseconds. + Weight::from_parts(70_966_000, 0) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(4)) } @@ -82,10 +82,10 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking Validators (r:1 w:0) // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) fn bond_extra() -> Weight { - // Minimum execution time: 60_591 nanoseconds. - Weight::from_parts(61_042_000) + // Minimum execution time: 57_987 nanoseconds. + Weight::from_parts(62_364_000, 0) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(2)) } @@ -102,12 +102,12 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: System Account (r:1 w:1) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) fn unbond() -> Weight { - // Minimum execution time: 62_253 nanoseconds. - Weight::from_parts(62_904_000) + // Minimum execution time: 61_993 nanoseconds. + Weight::from_parts(65_178_000, 0) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(3)) } @@ -121,10 +121,10 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32) -> Weight { - // Minimum execution time: 39_810 nanoseconds. - Weight::from_parts(43_042_160) - // Standard Error: 5_821 - .saturating_add(Weight::from_parts(26_306).saturating_mul(s.into())) + // Minimum execution time: 39_089 nanoseconds. + Weight::from_parts(43_312_712, 0) + // Standard Error: 9_035 + .saturating_add(Weight::from_parts(23_827, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } @@ -150,10 +150,10 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_kill(s: u32) -> Weight { - // Minimum execution time: 64_186 nanoseconds. - Weight::from_parts(70_313_581) - // Standard Error: 13_114 - .saturating_add(Weight::from_parts(1_596_521).saturating_mul(s.into())) + // Minimum execution time: 65_528 nanoseconds. + Weight::from_parts(70_402_882, 0) + // Standard Error: 20_479 + .saturating_add(Weight::from_parts(1_555_243, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(6)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -167,7 +167,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking ValidatorCommissionCap (r:1 w:0) // Proof: Staking ValidatorCommissionCap (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Staking PermissionedIdentity (r:1 w:1) // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) // Storage: Staking Validators (r:1 w:1) @@ -175,7 +175,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking MaxValidatorsCount (r:1 w:0) // Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Identity AccountKeyRefCount (r:1 w:1) - // Proof: Identity AccountKeyRefCount (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + // Proof Skipped: Identity AccountKeyRefCount (max_values: None, max_size: None, mode: Measured) // Storage: Staking Nominators (r:1 w:0) // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) // Storage: Staking Bonded (r:1 w:0) @@ -183,8 +183,8 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking CounterForValidators (r:1 w:1) // Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn validate() -> Weight { - // Minimum execution time: 68_553 nanoseconds. - Weight::from_parts(70_997_000) + // Minimum execution time: 67_872 nanoseconds. + Weight::from_parts(71_938_000, 0) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(4)) } @@ -194,10 +194,10 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) /// The range of component `k` is `[1, 128]`. fn kick(k: u32) -> Weight { - // Minimum execution time: 35_423 nanoseconds. - Weight::from_parts(33_436_546) - // Standard Error: 30_431 - .saturating_add(Weight::from_parts(8_873_265).saturating_mul(k.into())) + // Minimum execution time: 34_292 nanoseconds. + Weight::from_parts(33_550_562, 0) + // Standard Error: 22_924 + .saturating_add(Weight::from_parts(8_737_552, 0).saturating_mul(k.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(k.into()))) @@ -213,7 +213,13 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking Validators (r:17 w:0) // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Staking CurrentEra (r:1 w:0) // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking Bonded (r:1 w:0) @@ -222,11 +228,11 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) /// The range of component `n` is `[1, 16]`. fn nominate(n: u32) -> Weight { - // Minimum execution time: 66_289 nanoseconds. - Weight::from_parts(68_503_326) - // Standard Error: 60_462 - .saturating_add(Weight::from_parts(4_268_999).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 83_956 nanoseconds. + Weight::from_parts(86_634_894, 0) + // Standard Error: 69_456 + .saturating_add(Weight::from_parts(4_443_175, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(2)) } @@ -235,18 +241,18 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking Validators (r:1 w:1) // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Staking PermissionedIdentity (r:1 w:1) // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) // Storage: Identity AccountKeyRefCount (r:1 w:1) - // Proof: Identity AccountKeyRefCount (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + // Proof Skipped: Identity AccountKeyRefCount (max_values: None, max_size: None, mode: Measured) // Storage: Staking CounterForValidators (r:1 w:1) // Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking Nominators (r:1 w:0) // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) fn chill() -> Weight { - // Minimum execution time: 58_167 nanoseconds. - Weight::from_parts(61_642_000) + // Minimum execution time: 56_475 nanoseconds. + Weight::from_parts(57_165_000, 0) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(4)) } @@ -255,8 +261,8 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking Payee (r:0 w:1) // Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn set_payee() -> Weight { - // Minimum execution time: 17_957 nanoseconds. - Weight::from_parts(20_240_000) + // Minimum execution time: 17_556 nanoseconds. + Weight::from_parts(17_957_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -265,43 +271,43 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking Ledger (r:3 w:2) // Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) fn set_controller() -> Weight { - // Minimum execution time: 29_935 nanoseconds. - Weight::from_parts(31_848_000) + // Minimum execution time: 29_294 nanoseconds. + Weight::from_parts(31_197_000, 0) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } // Storage: Staking ValidatorCount (r:0 w:1) // Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_validator_count() -> Weight { - // Minimum execution time: 3_366 nanoseconds. - Weight::from_parts(4_146_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 3_065 nanoseconds. + Weight::from_parts(3_475_000, 0).saturating_add(DbWeight::get().writes(1)) } // Storage: Staking ForceEra (r:0 w:1) // Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_no_eras() -> Weight { - // Minimum execution time: 11_317 nanoseconds. - Weight::from_parts(14_843_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 12_188 nanoseconds. + Weight::from_parts(18_618_000, 0).saturating_add(DbWeight::get().writes(1)) } // Storage: Staking ForceEra (r:0 w:1) // Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_new_era() -> Weight { - // Minimum execution time: 11_768 nanoseconds. - Weight::from_parts(16_796_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 10_927 nanoseconds. + Weight::from_parts(11_928_000, 0).saturating_add(DbWeight::get().writes(1)) } // Storage: Staking ForceEra (r:0 w:1) // Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_new_era_always() -> Weight { - // Minimum execution time: 11_858 nanoseconds. - Weight::from_parts(16_284_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 10_716 nanoseconds. + Weight::from_parts(11_498_000, 0).saturating_add(DbWeight::get().writes(1)) } // Storage: Staking Invulnerables (r:0 w:1) // Proof Skipped: Staking Invulnerables (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[0, 100]`. fn set_invulnerables(v: u32) -> Weight { - // Minimum execution time: 3_304 nanoseconds. - Weight::from_parts(4_493_658) - // Standard Error: 4_058 - .saturating_add(Weight::from_parts(17_700).saturating_mul(v.into())) + // Minimum execution time: 3_135 nanoseconds. + Weight::from_parts(5_195_193, 0) + // Standard Error: 4_599 + .saturating_add(Weight::from_parts(4_304, 0).saturating_mul(v.into())) .saturating_add(DbWeight::get().writes(1)) } // Storage: Staking Bonded (r:1 w:1) @@ -326,10 +332,10 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) /// The range of component `s` is `[0, 100]`. fn force_unstake(s: u32) -> Weight { - // Minimum execution time: 54_412 nanoseconds. - Weight::from_parts(62_917_979) - // Standard Error: 13_753 - .saturating_add(Weight::from_parts(1_588_061).saturating_mul(s.into())) + // Minimum execution time: 53_891 nanoseconds. + Weight::from_parts(61_359_846, 0) + // Standard Error: 14_648 + .saturating_add(Weight::from_parts(1_530_947, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(8)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -338,10 +344,10 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof Skipped: Staking UnappliedSlashes (max_values: None, max_size: None, mode: Measured) /// The range of component `s` is `[1, 1000]`. fn cancel_deferred_slash(s: u32) -> Weight { - // Minimum execution time: 116_665 nanoseconds. - Weight::from_parts(807_594_238) - // Standard Error: 61_663 - .saturating_add(Weight::from_parts(4_030_193).saturating_mul(s.into())) + // Minimum execution time: 113_771 nanoseconds. + Weight::from_parts(1_128_694_838, 0) + // Standard Error: 90_787 + .saturating_add(Weight::from_parts(5_999_718, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -364,15 +370,15 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: System Account (r:1026 w:1026) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Identity KeyRecords (r:2050 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity IsDidFrozen (r:1024 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[0, 1024]`. fn payout_stakers_dead_controller(n: u32) -> Weight { - // Minimum execution time: 193_310 nanoseconds. - Weight::from_parts(368_075_766) - // Standard Error: 60_365 - .saturating_add(Weight::from_parts(41_699_846).saturating_mul(n.into())) + // Minimum execution time: 179_739 nanoseconds. + Weight::from_parts(384_202_178, 0) + // Standard Error: 54_301 + .saturating_add(Weight::from_parts(41_015_005, 0).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -399,13 +405,13 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Balances Locks (r:1025 w:1025) // Proof Skipped: Balances Locks (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1026 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[0, 1024]`. fn payout_stakers_alive_staked(n: u32) -> Weight { - // Minimum execution time: 222_113 nanoseconds. - Weight::from_parts(269_725_573) - // Standard Error: 75_987 - .saturating_add(Weight::from_parts(49_684_473).saturating_mul(n.into())) + // Minimum execution time: 220_430 nanoseconds. + Weight::from_parts(367_311_716, 0) + // Standard Error: 54_323 + .saturating_add(Weight::from_parts(48_316_458, 0).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(4)) @@ -423,10 +429,10 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) /// The range of component `l` is `[1, 32]`. fn rebond(l: u32) -> Weight { - // Minimum execution time: 44_557 nanoseconds. - Weight::from_parts(49_453_802) - // Standard Error: 21_032 - .saturating_add(Weight::from_parts(54_407).saturating_mul(l.into())) + // Minimum execution time: 43_566 nanoseconds. + Weight::from_parts(47_774_541, 0) + // Standard Error: 22_727 + .saturating_add(Weight::from_parts(83_350, 0).saturating_mul(l.into())) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(3)) } @@ -445,7 +451,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Balances Locks (r:1 w:1) // Proof Skipped: Balances Locks (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Staking Ledger (r:0 w:1) // Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) // Storage: Staking Payee (r:0 w:1) @@ -454,10 +460,10 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) /// The range of component `s` is `[1, 100]`. fn reap_stash(s: u32) -> Weight { - // Minimum execution time: 79_430 nanoseconds. - Weight::from_parts(83_274_719) - // Standard Error: 15_369 - .saturating_add(Weight::from_parts(1_545_269).saturating_mul(s.into())) + // Minimum execution time: 75_182 nanoseconds. + Weight::from_parts(78_034_699, 0) + // Standard Error: 13_681 + .saturating_add(Weight::from_parts(1_564_606, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(8)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -482,13 +488,13 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: Staking Nominators (r:110 w:0) // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) - // Storage: Identity KeyRecords (r:10 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Storage: Identity KeyRecords (r:109 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:20 w:0) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:218 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Staking PermissionedIdentity (r:10 w:0) // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) @@ -527,15 +533,15 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `v` is `[1, 10]`. /// The range of component `n` is `[0, 100]`. fn new_era(v: u32, n: u32) -> Weight { - // Minimum execution time: 852_690 nanoseconds. - Weight::from_parts(862_584_000) - // Standard Error: 3_049_255 - .saturating_add(Weight::from_parts(72_802_433).saturating_mul(v.into())) - // Standard Error: 314_509 - .saturating_add(Weight::from_parts(16_351_842).saturating_mul(n.into())) + // Minimum execution time: 837_364 nanoseconds. + Weight::from_parts(838_106_000, 0) + // Standard Error: 2_993_345 + .saturating_add(Weight::from_parts(70_132_293, 0).saturating_mul(v.into())) + // Standard Error: 308_742 + .saturating_add(Weight::from_parts(34_964_910, 0).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(18)) .saturating_add(DbWeight::get().reads((8_u64).saturating_mul(v.into()))) - .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(n.into()))) + .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(12)) .saturating_add(DbWeight::get().writes((3_u64).saturating_mul(v.into()))) } @@ -547,13 +553,13 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: Staking Nominators (r:201 w:0) // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) - // Storage: Identity KeyRecords (r:100 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Storage: Identity KeyRecords (r:200 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:200 w:0) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:400 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Staking PermissionedIdentity (r:100 w:0) // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) @@ -570,13 +576,15 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `v` is `[50, 100]`. /// The range of component `n` is `[50, 100]`. fn get_npos_voters(v: u32, n: u32) -> Weight { - // Minimum execution time: 3_798_638 nanoseconds. - Weight::from_parts(3_849_676_000) - // Standard Error: 475_063 - .saturating_add(Weight::from_parts(23_030_380).saturating_mul(v.into())) + // Minimum execution time: 5_694_021 nanoseconds. + Weight::from_parts(5_725_067_000, 0) + // Standard Error: 703_888 + .saturating_add(Weight::from_parts(12_221_363, 0).saturating_mul(v.into())) + // Standard Error: 703_888 + .saturating_add(Weight::from_parts(3_495_830, 0).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().reads((8_u64).saturating_mul(v.into()))) - .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(n.into()))) + .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(2)) } // Storage: Staking CounterForValidators (r:1 w:0) @@ -584,11 +592,11 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking Validators (r:101 w:0) // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: Identity KeyRecords (r:100 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity Claims (r:200 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Staking PermissionedIdentity (r:100 w:0) @@ -603,10 +611,10 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: System BlockWeight (max_values: Some(1), max_size: Some(48), added: 543, mode: MaxEncodedLen) /// The range of component `v` is `[50, 100]`. fn get_npos_targets(v: u32) -> Weight { - // Minimum execution time: 2_014_703 nanoseconds. - Weight::from_parts(108_451_555) - // Standard Error: 152_719 - .saturating_add(Weight::from_parts(38_793_995).saturating_mul(v.into())) + // Minimum execution time: 1_999_726 nanoseconds. + Weight::from_parts(59_228_490, 0) + // Standard Error: 120_461 + .saturating_add(Weight::from_parts(39_021_437, 0).saturating_mul(v.into())) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(v.into()))) .saturating_add(DbWeight::get().writes(1)) @@ -624,8 +632,8 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking MinNominatorBond (r:0 w:1) // Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_staking_configs_all_set() -> Weight { - // Minimum execution time: 7_361 nanoseconds. - Weight::from_parts(7_872_000).saturating_add(DbWeight::get().writes(6)) + // Minimum execution time: 7_441 nanoseconds. + Weight::from_parts(8_243_000, 0).saturating_add(DbWeight::get().writes(6)) } // Storage: Staking MinCommission (r:0 w:1) // Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) @@ -640,8 +648,8 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking MinNominatorBond (r:0 w:1) // Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_staking_configs_all_remove() -> Weight { - // Minimum execution time: 7_111 nanoseconds. - Weight::from_parts(7_902_000).saturating_add(DbWeight::get().writes(6)) + // Minimum execution time: 6_690 nanoseconds. + Weight::from_parts(15_123_000, 0).saturating_add(DbWeight::get().writes(6)) } // Storage: Staking Ledger (r:1 w:0) // Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) @@ -658,14 +666,14 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking MinValidatorBond (r:1 w:0) // Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Staking PermissionedIdentity (r:1 w:1) // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) // Storage: Identity AccountKeyRefCount (r:1 w:1) - // Proof: Identity AccountKeyRefCount (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + // Proof Skipped: Identity AccountKeyRefCount (max_values: None, max_size: None, mode: Measured) fn chill_other() -> Weight { - // Minimum execution time: 71_247 nanoseconds. - Weight::from_parts(73_691_000) + // Minimum execution time: 74_131 nanoseconds. + Weight::from_parts(75_763_000, 0) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(4)) } @@ -674,15 +682,15 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Storage: Staking Validators (r:1 w:1) // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) fn force_apply_min_commission() -> Weight { - // Minimum execution time: 17_426 nanoseconds. - Weight::from_parts(17_746_000) + // Minimum execution time: 16_385 nanoseconds. + Weight::from_parts(18_157_000, 0) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Staking MinCommission (r:0 w:1) // Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_min_commission() -> Weight { - // Minimum execution time: 3_406 nanoseconds. - Weight::from_parts(4_727_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 3_144 nanoseconds. + Weight::from_parts(3_806_000, 0).saturating_add(DbWeight::get().writes(1)) } } diff --git a/pallets/weights/src/pallet_statistics.rs b/pallets/weights/src/pallet_statistics.rs index 7ae9b68749..95437068ef 100644 --- a/pallets/weights/src/pallet_statistics.rs +++ b/pallets/weights/src/pallet_statistics.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_statistics //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,124 +54,100 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_statistics::WeightInfo for SubstrateWeight { // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Statistics AssetTransferCompliances (r:1 w:0) - // Proof: Statistics AssetTransferCompliances (max_values: None, max_size: Some(246), added: 2721, mode: MaxEncodedLen) + // Proof Skipped: Statistics AssetTransferCompliances (max_values: None, max_size: None, mode: Measured) // Storage: Statistics ActiveAssetStats (r:1 w:1) - // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) + // Proof Skipped: Statistics ActiveAssetStats (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[1, 9]`. fn set_active_asset_stats(i: u32) -> Weight { - // Minimum execution time: 54_773 nanoseconds. - Weight::from_parts(60_412_581) - // Standard Error: 93_344 - .saturating_add(Weight::from_parts(297_243).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 39_780 nanoseconds. + Weight::from_parts(44_031_265, 0) + // Standard Error: 77_955 + .saturating_add(Weight::from_parts(330_085, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Statistics ActiveAssetStats (r:1 w:0) - // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) + // Proof Skipped: Statistics ActiveAssetStats (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetStats (r:0 w:250) - // Proof: Statistics AssetStats (max_values: None, max_size: Some(107), added: 2582, mode: MaxEncodedLen) + // Proof Skipped: Statistics AssetStats (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[1, 250]`. fn batch_update_asset_stats(i: u32) -> Weight { - // Minimum execution time: 56_975 nanoseconds. - Weight::from_parts(63_445_374) - // Standard Error: 10_644 - .saturating_add(Weight::from_parts(2_887_056).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 42_724 nanoseconds. + Weight::from_parts(39_205_484, 0) + // Standard Error: 10_917 + .saturating_add(Weight::from_parts(3_180_085, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Statistics ActiveAssetStats (r:1 w:0) - // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) + // Proof Skipped: Statistics ActiveAssetStats (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetTransferCompliances (r:1 w:1) - // Proof: Statistics AssetTransferCompliances (max_values: None, max_size: Some(246), added: 2721, mode: MaxEncodedLen) + // Proof Skipped: Statistics AssetTransferCompliances (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[1, 3]`. fn set_asset_transfer_compliance(i: u32) -> Weight { - // Minimum execution time: 56_575 nanoseconds. - Weight::from_parts(60_699_067) - // Standard Error: 475_866 - .saturating_add(Weight::from_parts(3_176_895).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 42_233 nanoseconds. + Weight::from_parts(41_799_979, 0) + // Standard Error: 257_984 + .saturating_add(Weight::from_parts(4_691_354, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Statistics TransferConditionExemptEntities (r:0 w:1000) - // Proof: Statistics TransferConditionExemptEntities (max_values: None, max_size: Some(88), added: 2563, mode: MaxEncodedLen) + // Proof Skipped: Statistics TransferConditionExemptEntities (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[0, 1000]`. fn set_entities_exempt(i: u32) -> Weight { - // Minimum execution time: 46_289 nanoseconds. - Weight::from_parts(53_881_786) - // Standard Error: 4_804 - .saturating_add(Weight::from_parts(2_797_955).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(8)) + // Minimum execution time: 28_813 nanoseconds. + Weight::from_parts(28_545_771, 0) + // Standard Error: 5_396 + .saturating_add(Weight::from_parts(3_090_924, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Statistics AssetStats (r:1 w:0) - // Proof: Statistics AssetStats (max_values: None, max_size: Some(107), added: 2582, mode: MaxEncodedLen) + // Proof Skipped: Statistics AssetStats (max_values: None, max_size: None, mode: Measured) /// The range of component `a` is `[0, 1]`. fn max_investor_count_restriction(a: u32) -> Weight { - // Minimum execution time: 421 nanoseconds. - Weight::from_parts(752_702) - // Standard Error: 50_612 - .saturating_add(Weight::from_parts(5_369_963).saturating_mul(a.into())) + // Minimum execution time: 541 nanoseconds. + Weight::from_parts(805_566, 0) + // Standard Error: 43_814 + .saturating_add(Weight::from_parts(7_416_767, 0).saturating_mul(a.into())) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(a.into()))) } fn max_investor_ownership_restriction() -> Weight { - // Minimum execution time: 671 nanoseconds. - Weight::from_parts(931_000) + // Minimum execution time: 861 nanoseconds. + Weight::from_parts(1_092_000, 0) } // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) @@ -179,10 +155,10 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) /// The range of component `c` is `[0, 1]`. fn claim_count_restriction_no_stats(c: u32) -> Weight { - // Minimum execution time: 510 nanoseconds. - Weight::from_parts(924_277) - // Standard Error: 66_047 - .saturating_add(Weight::from_parts(15_527_056).saturating_mul(c.into())) + // Minimum execution time: 571 nanoseconds. + Weight::from_parts(912_176, 0) + // Standard Error: 229_762 + .saturating_add(Weight::from_parts(18_293_823, 0).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(c.into()))) } // Storage: Timestamp Now (r:1 w:0) @@ -190,23 +166,23 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { // Storage: Identity Claims (r:2 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetStats (r:1 w:0) - // Proof: Statistics AssetStats (max_values: None, max_size: Some(107), added: 2582, mode: MaxEncodedLen) + // Proof Skipped: Statistics AssetStats (max_values: None, max_size: None, mode: Measured) fn claim_count_restriction_with_stats() -> Weight { - // Minimum execution time: 19_779 nanoseconds. - Weight::from_parts(20_110_000).saturating_add(DbWeight::get().reads(4)) + // Minimum execution time: 21_162 nanoseconds. + Weight::from_parts(22_164_000, 0).saturating_add(DbWeight::get().reads(4)) } // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Identity Claims (r:2 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetStats (r:1 w:0) - // Proof: Statistics AssetStats (max_values: None, max_size: Some(107), added: 2582, mode: MaxEncodedLen) + // Proof Skipped: Statistics AssetStats (max_values: None, max_size: None, mode: Measured) /// The range of component `a` is `[0, 1]`. fn claim_ownership_restriction(a: u32) -> Weight { - // Minimum execution time: 14_401 nanoseconds. - Weight::from_parts(16_077_361) - // Standard Error: 358_477 - .saturating_add(Weight::from_parts(8_556_638).saturating_mul(a.into())) + // Minimum execution time: 14_992 nanoseconds. + Weight::from_parts(16_782_771, 0) + // Standard Error: 400_993 + .saturating_add(Weight::from_parts(7_463_562, 0).saturating_mul(a.into())) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(a.into()))) } @@ -215,13 +191,13 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { // Storage: Identity Claims (r:2 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetStats (r:2 w:2) - // Proof: Statistics AssetStats (max_values: None, max_size: Some(107), added: 2582, mode: MaxEncodedLen) + // Proof Skipped: Statistics AssetStats (max_values: None, max_size: None, mode: Measured) /// The range of component `a` is `[0, 2]`. fn update_asset_count_stats(a: u32) -> Weight { - // Minimum execution time: 14_221 nanoseconds. - Weight::from_parts(15_655_190) - // Standard Error: 124_036 - .saturating_add(Weight::from_parts(6_442_240).saturating_mul(a.into())) + // Minimum execution time: 15_353 nanoseconds. + Weight::from_parts(16_605_847, 0) + // Standard Error: 101_131 + .saturating_add(Weight::from_parts(6_846_034, 0).saturating_mul(a.into())) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(a.into()))) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(a.into()))) @@ -231,38 +207,38 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { // Storage: Identity Claims (r:2 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetStats (r:2 w:2) - // Proof: Statistics AssetStats (max_values: None, max_size: Some(107), added: 2582, mode: MaxEncodedLen) + // Proof Skipped: Statistics AssetStats (max_values: None, max_size: None, mode: Measured) /// The range of component `a` is `[0, 2]`. fn update_asset_balance_stats(a: u32) -> Weight { - // Minimum execution time: 14_571 nanoseconds. - Weight::from_parts(16_317_347) - // Standard Error: 182_341 - .saturating_add(Weight::from_parts(7_302_297).saturating_mul(a.into())) + // Minimum execution time: 15_252 nanoseconds. + Weight::from_parts(16_650_158, 0) + // Standard Error: 90_168 + .saturating_add(Weight::from_parts(7_750_425, 0).saturating_mul(a.into())) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(a.into()))) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(a.into()))) } /// The range of component `i` is `[0, 4]`. fn verify_requirements(i: u32) -> Weight { - // Minimum execution time: 311 nanoseconds. - Weight::from_parts(623_352) - // Standard Error: 9_519 - .saturating_add(Weight::from_parts(130_016).saturating_mul(i.into())) + // Minimum execution time: 421 nanoseconds. + Weight::from_parts(737_345, 0) + // Standard Error: 20_511 + .saturating_add(Weight::from_parts(162_577, 0).saturating_mul(i.into())) } // Storage: Statistics ActiveAssetStats (r:1 w:0) - // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) + // Proof Skipped: Statistics ActiveAssetStats (max_values: None, max_size: None, mode: Measured) /// The range of component `a` is `[1, 10]`. fn active_asset_statistics_load(a: u32) -> Weight { - // Minimum execution time: 6_510 nanoseconds. - Weight::from_parts(7_441_567) - // Standard Error: 21_090 - .saturating_add(Weight::from_parts(33_402).saturating_mul(a.into())) + // Minimum execution time: 7_381 nanoseconds. + Weight::from_parts(8_385_558, 0) + // Standard Error: 24_708 + .saturating_add(Weight::from_parts(23_673, 0).saturating_mul(a.into())) .saturating_add(DbWeight::get().reads(1)) } // Storage: Statistics TransferConditionExemptEntities (r:1 w:0) - // Proof: Statistics TransferConditionExemptEntities (max_values: None, max_size: Some(88), added: 2563, mode: MaxEncodedLen) + // Proof Skipped: Statistics TransferConditionExemptEntities (max_values: None, max_size: None, mode: Measured) fn is_exempt() -> Weight { - // Minimum execution time: 7_501 nanoseconds. - Weight::from_parts(8_302_000).saturating_add(DbWeight::get().reads(1)) + // Minimum execution time: 8_683 nanoseconds. + Weight::from_parts(8_954_000, 0).saturating_add(DbWeight::get().reads(1)) } } diff --git a/pallets/weights/src/pallet_sto.rs b/pallets/weights/src/pallet_sto.rs index 648c94aea9..4c3659ce93 100644 --- a/pallets/weights/src/pallet_sto.rs +++ b/pallets/weights/src/pallet_sto.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_sto //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,56 +54,48 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_sto::WeightInfo for SubstrateWeight { // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Settlement VenueInfo (r:1 w:0) - // Proof: Settlement VenueInfo (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) + // Proof Skipped: Settlement VenueInfo (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:2 w:0) - // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioCustodian (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Sto FundraiserCount (r:1 w:1) - // Proof: Sto FundraiserCount (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Sto FundraiserCount (max_values: None, max_size: None, mode: Measured) // Storage: Asset Assets (r:1 w:0) // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioAssetBalances (r:1 w:0) - // Proof: Portfolio PortfolioAssetBalances (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioAssetBalances (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioLockedAssets (r:1 w:1) - // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) + // Proof Skipped: Portfolio PortfolioLockedAssets (max_values: None, max_size: None, mode: Measured) // Storage: Sto FundraiserNames (r:0 w:1) // Proof Skipped: Sto FundraiserNames (max_values: None, max_size: None, mode: Measured) // Storage: Sto Fundraisers (r:0 w:1) // Proof Skipped: Sto Fundraisers (max_values: None, max_size: None, mode: Measured) /// The range of component `i` is `[1, 10]`. fn create_fundraiser(i: u32) -> Weight { - // Minimum execution time: 100_200 nanoseconds. - Weight::from_parts(104_033_945) - // Standard Error: 60_435 - .saturating_add(Weight::from_parts(189_009).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(15)) + // Minimum execution time: 92_389 nanoseconds. + Weight::from_parts(96_229_792, 0) + // Standard Error: 44_701 + .saturating_add(Weight::from_parts(91_319, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(4)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:46 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:4 w:0) // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: Sto Fundraisers (r:1 w:1) // Proof Skipped: Sto Fundraisers (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Portfolio PortfolioLockedAssets (r:2 w:2) // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) // Storage: Settlement VenueInfo (r:1 w:0) @@ -138,6 +130,10 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Proof: Asset BalanceOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) // Storage: Asset Frozen (r:2 w:0) // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Storage: CddServiceProviders ActiveMembers (r:1 w:0) + // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:46 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetTransferCompliances (r:2 w:0) // Proof: Statistics AssetTransferCompliances (max_values: None, max_size: Some(246), added: 2721, mode: MaxEncodedLen) // Storage: Statistics AssetStats (r:28 w:20) @@ -167,23 +163,19 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Storage: Settlement InstructionLegStatus (r:0 w:2) // Proof: Settlement InstructionLegStatus (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn invest_onchain() -> Weight { - // Minimum execution time: 1_025_889 nanoseconds. - Weight::from_parts(1_045_578_000) + // Minimum execution time: 286_101 nanoseconds. + Weight::from_parts(301_972_000, 0) .saturating_add(DbWeight::get().reads(131)) .saturating_add(DbWeight::get().writes(50)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:25 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Portfolio PortfolioCustodian (r:2 w:0) // Proof: Portfolio PortfolioCustodian (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: Sto Fundraisers (r:1 w:1) // Proof Skipped: Sto Fundraisers (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Sto FundraiserOffchainAsset (r:1 w:0) // Proof: Sto FundraiserOffchainAsset (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) // Storage: Settlement VenueSigners (r:1 w:0) @@ -224,6 +216,10 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Proof: Asset BalanceOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) // Storage: Asset Frozen (r:1 w:0) // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Storage: CddServiceProviders ActiveMembers (r:1 w:0) + // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:25 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Statistics AssetTransferCompliances (r:1 w:0) // Proof: Statistics AssetTransferCompliances (max_values: None, max_size: Some(246), added: 2721, mode: MaxEncodedLen) // Storage: Statistics AssetStats (r:14 w:10) @@ -253,21 +249,15 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Storage: Settlement InstructionLegStatus (r:0 w:1) // Proof: Settlement InstructionLegStatus (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn invest_offchain() -> Weight { - // Minimum execution time: 698_206 nanoseconds. - Weight::from_parts(702_534_000) + // Minimum execution time: 222_178 nanoseconds. + Weight::from_parts(230_675_000, 0) .saturating_add(DbWeight::get().reads(76)) .saturating_add(DbWeight::get().writes(29)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -275,21 +265,15 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Storage: Sto Fundraisers (r:1 w:1) // Proof Skipped: Sto Fundraisers (max_values: None, max_size: None, mode: Measured) fn freeze_fundraiser() -> Weight { - // Minimum execution time: 65_638 nanoseconds. - Weight::from_parts(66_220_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 45_648 nanoseconds. + Weight::from_parts(46_720_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) @@ -297,67 +281,53 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Storage: Sto Fundraisers (r:1 w:1) // Proof Skipped: Sto Fundraisers (max_values: None, max_size: None, mode: Measured) fn unfreeze_fundraiser() -> Weight { - // Minimum execution time: 64_406 nanoseconds. - Weight::from_parts(65_198_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 45_308 nanoseconds. + Weight::from_parts(46_350_000, 0) + .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: ExternalAgents GroupOfAgent (r:1 w:0) - // Proof: ExternalAgents GroupOfAgent (max_values: None, max_size: Some(77), added: 2552, mode: MaxEncodedLen) + // Proof Skipped: ExternalAgents GroupOfAgent (max_values: None, max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:0) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:0) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Sto Fundraisers (r:1 w:1) // Proof Skipped: Sto Fundraisers (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn modify_fundraiser_window() -> Weight { - // Minimum execution time: 65_438 nanoseconds. - Weight::from_parts(66_710_000) - .saturating_add(DbWeight::get().reads(9)) + // Minimum execution time: 53_299 nanoseconds. + Weight::from_parts(53_841_000, 0) + .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } // Storage: Sto Fundraisers (r:1 w:1) // Proof Skipped: Sto Fundraisers (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Portfolio PortfolioLockedAssets (r:1 w:1) + // Proof Skipped: Portfolio PortfolioLockedAssets (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: Portfolio PortfolioLockedAssets (r:1 w:1) - // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) fn stop() -> Weight { - // Minimum execution time: 65_128 nanoseconds. - Weight::from_parts(66_179_000) - .saturating_add(DbWeight::get().reads(7)) + // Minimum execution time: 48_333 nanoseconds. + Weight::from_parts(48_753_000, 0) + .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: Sto Fundraisers (r:1 w:0) // Proof Skipped: Sto Fundraisers (max_values: None, max_size: None, mode: Measured) // Storage: Sto FundraiserOffchainAsset (r:0 w:1) // Proof: Sto FundraiserOffchainAsset (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) fn enable_offchain_funding() -> Weight { - // Minimum execution time: 52_299 nanoseconds. - Weight::from_parts(54_763_000) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 9_769 nanoseconds. + Weight::from_parts(10_771_000, 0) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } } diff --git a/pallets/weights/src/pallet_timestamp.rs b/pallets/weights/src/pallet_timestamp.rs index d42cdbc067..a3b023c326 100644 --- a/pallets/weights/src/pallet_timestamp.rs +++ b/pallets/weights/src/pallet_timestamp.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_timestamp //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -58,13 +58,13 @@ impl pallet_timestamp::WeightInfo for SubstrateWeight { // Storage: Babe CurrentSlot (r:1 w:0) // Proof: Babe CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set() -> Weight { - // Minimum execution time: 10_857 nanoseconds. - Weight::from_parts(11_727_000) + // Minimum execution time: 11_897 nanoseconds. + Weight::from_parts(14_401_000, 0) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } fn on_finalize() -> Weight { - // Minimum execution time: 6_660 nanoseconds. - Weight::from_parts(7_100_000) + // Minimum execution time: 6_981 nanoseconds. + Weight::from_parts(7_231_000, 0) } } diff --git a/pallets/weights/src/pallet_treasury.rs b/pallets/weights/src/pallet_treasury.rs index e4c2a3261f..a7a8e51e8c 100644 --- a/pallets/weights/src/pallet_treasury.rs +++ b/pallets/weights/src/pallet_treasury.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_treasury //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -54,35 +54,41 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; pub struct SubstrateWeight; impl pallet_treasury::WeightInfo for SubstrateWeight { // Storage: Identity DidRecords (r:128 w:0) - // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity DidRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:129 w:129) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Identity KeyRecords (r:129 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:256 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) /// The range of component `b` is `[1, 128]`. fn disbursement(b: u32) -> Weight { - // Minimum execution time: 48_413 nanoseconds. - Weight::from_parts(1_635_177) - // Standard Error: 40_618 - .saturating_add(Weight::from_parts(29_261_008).saturating_mul(b.into())) - .saturating_add(DbWeight::get().reads(2)) - .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(b.into()))) + // Minimum execution time: 74_051 nanoseconds. + Weight::from_parts(74_122_000, 0) + // Standard Error: 52_798 + .saturating_add(Weight::from_parts(43_799_861, 0).saturating_mul(b.into())) + .saturating_add(DbWeight::get().reads(4)) + .saturating_add(DbWeight::get().reads((5_u64).saturating_mul(b.into()))) .saturating_add(DbWeight::get().writes(1)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(b.into()))) } // Storage: Identity KeyRecords (r:2 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) // Storage: Identity Claims (r:2 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:2 w:2) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn reimbursement() -> Weight { - // Minimum execution time: 60_631 nanoseconds. - Weight::from_parts(64_196_000) + // Minimum execution time: 65_007 nanoseconds. + Weight::from_parts(71_107_000, 0) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(2)) } diff --git a/pallets/weights/src/pallet_utility.rs b/pallets/weights/src/pallet_utility.rs index f6ee08dfa4..8d282536a9 100644 --- a/pallets/weights/src/pallet_utility.rs +++ b/pallets/weights/src/pallet_utility.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for pallet_utility //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -59,10 +59,10 @@ impl pallet_utility::WeightInfo for SubstrateWeight { // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `c` is `[0, 1000]`. fn batch(c: u32) -> Weight { - // Minimum execution time: 7_120 nanoseconds. - Weight::from_parts(40_789_048) - // Standard Error: 6_442 - .saturating_add(Weight::from_parts(11_967_780).saturating_mul(c.into())) + // Minimum execution time: 7_891 nanoseconds. + Weight::from_parts(42_204_836, 0) + // Standard Error: 6_633 + .saturating_add(Weight::from_parts(12_620_887, 0).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } @@ -72,22 +72,22 @@ impl pallet_utility::WeightInfo for SubstrateWeight { // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32) -> Weight { - // Minimum execution time: 7_411 nanoseconds. - Weight::from_parts(30_708_916) - // Standard Error: 7_425 - .saturating_add(Weight::from_parts(12_017_560).saturating_mul(c.into())) + // Minimum execution time: 7_631 nanoseconds. + Weight::from_parts(52_382_563, 0) + // Standard Error: 12_704 + .saturating_add(Weight::from_parts(12_660_162, 0).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity CurrentPayer (r:1 w:1) - // Proof: Identity CurrentPayer (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentPayer (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:1) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:1) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) fn dispatch_as() -> Weight { - // Minimum execution time: 22_684 nanoseconds. - Weight::from_parts(23_825_000) + // Minimum execution time: 24_366 nanoseconds. + Weight::from_parts(27_251_000, 0) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(3)) } @@ -97,46 +97,46 @@ impl pallet_utility::WeightInfo for SubstrateWeight { // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32) -> Weight { - // Minimum execution time: 7_602 nanoseconds. - Weight::from_parts(37_888_291) - // Standard Error: 7_863 - .saturating_add(Weight::from_parts(12_095_202).saturating_mul(c.into())) + // Minimum execution time: 7_992 nanoseconds. + Weight::from_parts(49_345_801, 0) + // Standard Error: 10_338 + .saturating_add(Weight::from_parts(12_648_281, 0).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } // Storage: Identity KeyRecords (r:2 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Utility Nonces (r:1 w:1) + // Proof: Utility Nonces (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:4 w:0) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: Utility Nonces (r:1 w:1) - // Proof: Utility Nonces (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) // Storage: Permissions CurrentPalletName (r:1 w:1) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:1) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) fn relay_tx() -> Weight { - // Minimum execution time: 189_003 nanoseconds. - Weight::from_parts(196_184_000) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 128_001 nanoseconds. + Weight::from_parts(138_117_000, 0) + .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(3)) } fn ensure_root() -> Weight { - // Minimum execution time: 671 nanoseconds. - Weight::from_parts(841_000) + // Minimum execution time: 631 nanoseconds. + Weight::from_parts(711_000, 0) } // Storage: Identity CurrentPayer (r:1 w:1) - // Proof: Identity CurrentPayer (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentPayer (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:1) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:1) // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) fn as_derivative() -> Weight { - // Minimum execution time: 19_970 nanoseconds. - Weight::from_parts(23_145_000) + // Minimum execution time: 20_030 nanoseconds. + Weight::from_parts(22_474_000, 0) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(3)) } diff --git a/pallets/weights/src/polymesh_contracts.rs b/pallets/weights/src/polymesh_contracts.rs index fbe5d448d5..7b94582545 100644 --- a/pallets/weights/src/polymesh_contracts.rs +++ b/pallets/weights/src/polymesh_contracts.rs @@ -18,9 +18,9 @@ //! Autogenerated weights for polymesh_contracts //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2025-06-11, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2024-11-03, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 -//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC Processor` +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` // Executed Command: // ./polymesh @@ -43,7 +43,7 @@ // --output // ./Polymesh/pallets/weights/src/ // --template -// ./.maintain/frame-weight-template.hbs +// ./Polymesh/.maintain/frame-weight-template.hbs #![allow(unused_parens)] #![allow(unused_imports)] @@ -53,20 +53,22 @@ use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; /// Weights for polymesh_contracts using the Substrate node and recommended hardware. pub struct SubstrateWeight; impl polymesh_contracts::WeightInfo for SubstrateWeight { - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: unknown `0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f` (r:1 w:0) // Proof Skipped: unknown `0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f` (r:1 w:0) // Storage: System EventTopics (r:2 w:2) @@ -76,236 +78,252 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `k` is `[1, 8192]`. /// The range of component `v` is `[1, 8192]`. fn chain_extension_read_storage(k: u32, v: u32) -> Weight { - // Minimum execution time: 560_641 nanoseconds. - Weight::from_parts(568_884_097) - // Standard Error: 295 - .saturating_add(Weight::from_parts(5_537).saturating_mul(k.into())) - // Standard Error: 295 - .saturating_add(Weight::from_parts(1_239).saturating_mul(v.into())) - .saturating_add(DbWeight::get().reads(11)) + // Minimum execution time: 420_509 nanoseconds. + Weight::from_parts(441_154_010, 0) + // Standard Error: 270 + .saturating_add(Weight::from_parts(4_894, 0).saturating_mul(k.into())) + // Standard Error: 270 + .saturating_add(Weight::from_parts(980, 0).saturating_mul(v.into())) + .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().writes(3)) } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: System EventTopics (r:2 w:2) // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[0, 20]`. fn chain_extension_get_version(r: u32) -> Weight { - // Minimum execution time: 547_351 nanoseconds. - Weight::from_parts(570_291_478) - // Standard Error: 143_016 - .saturating_add(Weight::from_parts(57_355_066).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 404_026 nanoseconds. + Weight::from_parts(430_717_810, 0) + // Standard Error: 116_585 + .saturating_add(Weight::from_parts(57_558_916, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(3)) } - // Storage: Identity KeyRecords (r:2001 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2002 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) - // Storage: Identity IsDidFrozen (r:2000 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:2001 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: System EventTopics (r:2 w:2) // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[1, 20]`. fn chain_extension_get_key_did(r: u32) -> Weight { - // Minimum execution time: 1_305_758 nanoseconds. - Weight::from_parts(193_392_872) - // Standard Error: 2_272_956 - .saturating_add(Weight::from_parts(823_214_072).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 1_221_859 nanoseconds. + Weight::from_parts(23_864_904, 0) + // Standard Error: 2_525_338 + .saturating_add(Weight::from_parts(870_955_515, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().reads((200_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: System EventTopics (r:2 w:2) // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[0, 20]`. fn chain_extension_hash_twox_64(r: u32) -> Weight { - // Minimum execution time: 531_227 nanoseconds. - Weight::from_parts(574_503_627) - // Standard Error: 130_828 - .saturating_add(Weight::from_parts(74_434_324).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 407_721 nanoseconds. + Weight::from_parts(436_149_077, 0) + // Standard Error: 136_925 + .saturating_add(Weight::from_parts(78_627_903, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(3)) } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: System EventTopics (r:2 w:2) // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[0, 64]`. fn chain_extension_hash_twox_64_per_kb(n: u32) -> Weight { - // Minimum execution time: 626_971 nanoseconds. - Weight::from_parts(669_184_963) - // Standard Error: 79_245 - .saturating_add(Weight::from_parts(40_113_729).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 493_259 nanoseconds. + Weight::from_parts(545_127_910, 0) + // Standard Error: 65_828 + .saturating_add(Weight::from_parts(27_618_039, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(3)) } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: System EventTopics (r:2 w:2) // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[0, 20]`. fn chain_extension_hash_twox_128(r: u32) -> Weight { - // Minimum execution time: 537_786 nanoseconds. - Weight::from_parts(569_946_926) - // Standard Error: 134_509 - .saturating_add(Weight::from_parts(76_678_500).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 403_573 nanoseconds. + Weight::from_parts(444_653_976, 0) + // Standard Error: 133_724 + .saturating_add(Weight::from_parts(78_972_384, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(3)) } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: System EventTopics (r:2 w:2) // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[0, 64]`. fn chain_extension_hash_twox_128_per_kb(n: u32) -> Weight { - // Minimum execution time: 625_068 nanoseconds. - Weight::from_parts(665_884_874) - // Standard Error: 63_098 - .saturating_add(Weight::from_parts(47_295_181).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 490_355 nanoseconds. + Weight::from_parts(549_217_273, 0) + // Standard Error: 60_751 + .saturating_add(Weight::from_parts(34_565_161, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(3)) } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: System EventTopics (r:2 w:2) // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[0, 20]`. fn chain_extension_hash_twox_256(r: u32) -> Weight { - // Minimum execution time: 532_639 nanoseconds. - Weight::from_parts(572_339_483) - // Standard Error: 152_653 - .saturating_add(Weight::from_parts(81_070_860).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 412_718 nanoseconds. + Weight::from_parts(440_860_388, 0) + // Standard Error: 110_188 + .saturating_add(Weight::from_parts(85_042_455, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(3)) } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: System EventTopics (r:2 w:2) // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[0, 64]`. fn chain_extension_hash_twox_256_per_kb(n: u32) -> Weight { - // Minimum execution time: 630_515 nanoseconds. - Weight::from_parts(675_775_349) - // Standard Error: 63_761 - .saturating_add(Weight::from_parts(61_308_678).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 498_587 nanoseconds. + Weight::from_parts(553_931_299, 0) + // Standard Error: 63_823 + .saturating_add(Weight::from_parts(48_829_146, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(3)) } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: PolymeshContracts CallRuntimeWhitelist (r:1 w:0) - // Proof: PolymeshContracts CallRuntimeWhitelist (max_values: None, max_size: Some(3), added: 2478, mode: MaxEncodedLen) + // Proof Skipped: PolymeshContracts CallRuntimeWhitelist (max_values: None, max_size: None, mode: Measured) // Storage: Identity CurrentPayer (r:1 w:1) - // Proof: Identity CurrentPayer (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + // Proof Skipped: Identity CurrentPayer (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentPalletName (r:1 w:1) // Proof Skipped: Permissions CurrentPalletName (max_values: Some(1), max_size: None, mode: Measured) // Storage: Permissions CurrentDispatchableName (r:1 w:1) @@ -314,83 +332,79 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) /// The range of component `n` is `[1, 8188]`. fn chain_extension_call_runtime(n: u32) -> Weight { - // Minimum execution time: 569_483 nanoseconds. - Weight::from_parts(596_615_721) - // Standard Error: 372 - .saturating_add(Weight::from_parts(2_316).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(14)) + // Minimum execution time: 445_737 nanoseconds. + Weight::from_parts(480_099_782, 0) + // Standard Error: 375 + .saturating_add(Weight::from_parts(555, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(16)) .saturating_add(DbWeight::get().writes(6)) } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: System EventTopics (r:2 w:2) // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) fn dummy_contract() -> Weight { - // Minimum execution time: 229_474 nanoseconds. - Weight::from_parts(250_526_000) - .saturating_add(DbWeight::get().reads(10)) + // Minimum execution time: 242_023 nanoseconds. + Weight::from_parts(246_270_000, 0) + .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(3)) } /// The range of component `n` is `[1, 8188]`. fn basic_runtime_call(_n: u32) -> Weight { - // Minimum execution time: 2_003 nanoseconds. - Weight::from_parts(3_338_377) + // Minimum execution time: 1_963 nanoseconds. + Weight::from_parts(3_024_347, 0) } /// The range of component `i` is `[0, 1048576]`. /// The range of component `s` is `[0, 1048576]`. fn base_weight_with_hash(i: u32, s: u32) -> Weight { - // Minimum execution time: 1_259_419 nanoseconds. - Weight::from_parts(49_636_467) - // Standard Error: 4 - .saturating_add(Weight::from_parts(1_166).saturating_mul(i.into())) - // Standard Error: 4 - .saturating_add(Weight::from_parts(1_246).saturating_mul(s.into())) + // Minimum execution time: 1_154_999 nanoseconds. + Weight::from_parts(73_388_718, 0) + // Standard Error: 10 + .saturating_add(Weight::from_parts(1_019, 0).saturating_mul(i.into())) + // Standard Error: 10 + .saturating_add(Weight::from_parts(1_157, 0).saturating_mul(s.into())) } /// The range of component `c` is `[0, 61717]`. /// The range of component `i` is `[0, 1048576]`. /// The range of component `s` is `[0, 1048576]`. fn base_weight_with_code(c: u32, i: u32, s: u32) -> Weight { - // Minimum execution time: 1_332_498 nanoseconds. - Weight::from_parts(22_375_295) - // Standard Error: 70 - .saturating_add(Weight::from_parts(1_421).saturating_mul(c.into())) - // Standard Error: 4 - .saturating_add(Weight::from_parts(1_163).saturating_mul(i.into())) - // Standard Error: 4 - .saturating_add(Weight::from_parts(1_244).saturating_mul(s.into())) + // Minimum execution time: 1_206_667 nanoseconds. + Weight::from_parts(67_372_302, 0) + // Standard Error: 167 + .saturating_add(Weight::from_parts(1_447, 0).saturating_mul(c.into())) + // Standard Error: 9 + .saturating_add(Weight::from_parts(996, 0).saturating_mul(i.into())) + // Standard Error: 9 + .saturating_add(Weight::from_parts(1_137, 0).saturating_mul(s.into())) } // Storage: PolymeshContracts CallRuntimeWhitelist (r:0 w:2000) - // Proof: PolymeshContracts CallRuntimeWhitelist (max_values: None, max_size: Some(3), added: 2478, mode: MaxEncodedLen) + // Proof Skipped: PolymeshContracts CallRuntimeWhitelist (max_values: None, max_size: None, mode: Measured) /// The range of component `u` is `[0, 2000]`. fn update_call_runtime_whitelist(u: u32) -> Weight { - // Minimum execution time: 2_583 nanoseconds. - Weight::from_parts(2_614_000) - // Standard Error: 1_438 - .saturating_add(Weight::from_parts(1_376_360).saturating_mul(u.into())) + // Minimum execution time: 3_936 nanoseconds. + Weight::from_parts(4_167_000, 0) + // Standard Error: 2_190 + .saturating_add(Weight::from_parts(1_653_031, 0).saturating_mul(u.into())) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(u.into()))) } // Storage: Identity KeyRecords (r:2 w:1) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:1) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyPortfolioPermissions (r:0 w:1) // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) // Storage: Identity KeyExtrinsicPermissions (r:0 w:1) @@ -398,103 +412,101 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { // Storage: Identity KeyAssetPermissions (r:0 w:1) // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) fn link_contract_as_secondary_key() -> Weight { - // Minimum execution time: 43_004 nanoseconds. - Weight::from_parts(45_399_000) - .saturating_add(DbWeight::get().reads(6)) + // Minimum execution time: 26_339 nanoseconds. + Weight::from_parts(28_423_000, 0) + .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(5)) } // Storage: Identity KeyRecords (r:2 w:1) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity ParentDid (r:1 w:1) - // Proof: Identity ParentDid (max_values: None, max_size: Some(64), added: 2539, mode: MaxEncodedLen) + // Proof Skipped: Identity ParentDid (max_values: None, max_size: None, mode: Measured) // Storage: ProtocolFee Coefficient (r:1 w:0) - // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee Coefficient (max_values: Some(1), max_size: None, mode: Measured) // Storage: ProtocolFee BaseFees (r:1 w:0) - // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) + // Proof Skipped: ProtocolFee BaseFees (max_values: None, max_size: None, mode: Measured) // Storage: Identity MultiPurposeNonce (r:1 w:1) - // Proof: Identity MultiPurposeNonce (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Proof Skipped: Identity MultiPurposeNonce (max_values: Some(1), max_size: None, mode: Measured) // Storage: System ParentHash (r:1 w:0) // Proof: System ParentHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) // Storage: Identity DidRecords (r:1 w:1) - // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity DidRecords (max_values: None, max_size: None, mode: Measured) // Storage: Identity DidKeys (r:0 w:1) - // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Proof Skipped: Identity DidKeys (max_values: None, max_size: None, mode: Measured) // Storage: Identity ChildDid (r:0 w:1) - // Proof: Identity ChildDid (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) + // Proof Skipped: Identity ChildDid (max_values: None, max_size: None, mode: Measured) fn link_contract_as_primary_key() -> Weight { - // Minimum execution time: 64_366 nanoseconds. - Weight::from_parts(68_192_000) - .saturating_add(DbWeight::get().reads(12)) + // Minimum execution time: 47_721 nanoseconds. + Weight::from_parts(52_568_000, 0) + .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(6)) } // Storage: PolymeshContracts ApiNextUpgrade (r:0 w:1) - // Proof: PolymeshContracts ApiNextUpgrade (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + // Proof Skipped: PolymeshContracts ApiNextUpgrade (max_values: None, max_size: None, mode: Measured) fn upgrade_api() -> Weight { - // Minimum execution time: 9_955 nanoseconds. - Weight::from_parts(11_416_000).saturating_add(DbWeight::get().writes(1)) + // Minimum execution time: 12_098 nanoseconds. + Weight::from_parts(13_571_000, 0).saturating_add(DbWeight::get().writes(1)) } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: PolymeshContracts CurrentApiHash (r:1 w:1) - // Proof: PolymeshContracts CurrentApiHash (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + // Proof Skipped: PolymeshContracts CurrentApiHash (max_values: None, max_size: None, mode: Measured) // Storage: PolymeshContracts ApiNextUpgrade (r:1 w:1) - // Proof: PolymeshContracts ApiNextUpgrade (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + // Proof Skipped: PolymeshContracts ApiNextUpgrade (max_values: None, max_size: None, mode: Measured) // Storage: System EventTopics (r:2 w:2) // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[0, 20]`. fn chain_extension_get_latest_api_upgrade(r: u32) -> Weight { - // Minimum execution time: 528_352 nanoseconds. - Weight::from_parts(571_012_568) - // Standard Error: 283_679 - .saturating_add(Weight::from_parts(342_166_548).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(12)) + // Minimum execution time: 402_874 nanoseconds. + Weight::from_parts(468_862_333, 0) + // Standard Error: 1_989_018 + .saturating_add(Weight::from_parts(376_144_330, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(14)) .saturating_add(DbWeight::get().writes(5)) } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity KeyRecords (r:2 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) // Storage: System Account (r:1 w:0) // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Contracts ContractInfoOf (r:1 w:1) // Proof: Contracts ContractInfoOf (max_values: None, max_size: Some(290), added: 2765, mode: MaxEncodedLen) // Storage: Contracts CodeStorage (r:1 w:0) // Proof: Contracts CodeStorage (max_values: None, max_size: Some(126001), added: 128476, mode: MaxEncodedLen) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) // Storage: System BlockHash (r:1 w:0) // Proof: System BlockHash (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) // Storage: Asset AssetNonce (r:1 w:0) - // Proof: Asset AssetNonce (max_values: None, max_size: Some(40), added: 2515, mode: MaxEncodedLen) + // Proof Skipped: Asset AssetNonce (max_values: None, max_size: None, mode: Measured) // Storage: System EventTopics (r:2 w:2) // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) /// The range of component `r` is `[0, 20]`. fn chain_extension_get_next_asset_id(r: u32) -> Weight { - // Minimum execution time: 536_154 nanoseconds. - Weight::from_parts(599_143_461) - // Standard Error: 567_627 - .saturating_add(Weight::from_parts(401_571_182).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(12)) + // Minimum execution time: 413_229 nanoseconds. + Weight::from_parts(437_313_575, 0) + // Standard Error: 863_761 + .saturating_add(Weight::from_parts(428_114_434, 0).saturating_mul(r.into())) + .saturating_add(DbWeight::get().reads(14)) .saturating_add(DbWeight::get().writes(3)) } } From 03a5a667251c6292f4a77e80cb18823ed9859496 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 8 Jul 2025 08:20:34 -0300 Subject: [PATCH 41/97] Fix integration tests --- integration/tests/contract_permissions.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/integration/tests/contract_permissions.rs b/integration/tests/contract_permissions.rs index 5529519f40..7e5b42f773 100644 --- a/integration/tests/contract_permissions.rs +++ b/integration/tests/contract_permissions.rs @@ -134,11 +134,7 @@ async fn contract_as_secondary_key_change_identity() -> Result<()> { .call( contract.into(), 0, -<<<<<<< HEAD Weight::from_parts(10_500_000_000, 0), -======= - Weight::from_parts(19_000_000_000, 40_000), ->>>>>>> 7841af1c... Bump contract gas fees. None, encoded_call, )? From 936e3b7a0acc28d56ec73a5bc42bda62c49975a7 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Thu, 17 Jul 2025 14:49:08 -0300 Subject: [PATCH 42/97] Update .toml and .lock; Update rustc --version; Remove old testing feature --- Cargo.lock | 6747 +++++++++++++++++++++--------- Cargo.toml | 371 +- pallets/runtime/tests/Cargo.toml | 5 +- rust-toolchain.toml | 2 +- 4 files changed, 5022 insertions(+), 2103 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 40b17970be..50214fbeaa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -32,9 +32,9 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aead" @@ -53,7 +53,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", - "cipher", + "cipher 0.4.4", "cpufeatures", ] @@ -65,21 +65,10 @@ checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" dependencies = [ "aead", "aes", - "cipher", + "cipher 0.4.4", "ctr", "ghash", - "subtle", -] - -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom 0.2.16", - "once_cell", - "version_check", + "subtle 2.6.1", ] [[package]] @@ -125,20 +114,11 @@ dependencies = [ "libc", ] -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" dependencies = [ "anstyle", "anstyle-parse", @@ -151,33 +131,33 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.8" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6680de5231bd6ee4c6191b8a1325daa282b415391ec9d3a37bd34f2060dc73fa" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" dependencies = [ "anstyle", "once_cell_polyfill", @@ -201,18 +181,317 @@ dependencies = [ [[package]] name = "aquamarine" -version = "0.3.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1da02abba9f9063d786eab1509833ebb2fac0f966862ca59439c76b9c566760" +checksum = "21cc1548309245035eb18aa7f0967da6bc65587005170c56e6ef2788a4cf3f4e" dependencies = [ "include_dir", - "itertools", + "itertools 0.10.5", "proc-macro-error", "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "ark-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-381" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df4dcc01ff89867cd86b0da835f23c3f02738353aaee7dde7495af71363b8d5" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff 0.4.2", + "ark-poly 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.4", + "itertools 0.13.0", + "num-bigint", + "num-integer", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1786b2e3832f6f0f7c8d62d5d5a282f6952a1ab99981c54cd52b6ac1d8f02df5" +dependencies = [ + "ark-bls12-381 0.5.0", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.1", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec 0.7.6", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint", + "num-traits", + "paste", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ "quote", "syn 1.0.109", ] +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.104", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.4", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive 0.4.2", + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-serialize-derive 0.5.0", + "ark-std 0.5.0", + "arrayvec 0.7.6", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-transcript" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47c1c928edb9d8ff24cb5dcb7651d3a98494fff3099eee95c2404cd813a9139f" +dependencies = [ + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "digest 0.10.7", + "rand_core 0.6.4", + "sha3", +] + +[[package]] +name = "ark-vrf" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9501da18569b2afe0eb934fb7afd5a247d238b94116155af4dd068f319adfe6d" +dependencies = [ + "ark-bls12-381 0.5.0", + "ark-ec 0.5.0", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "digest 0.10.7", + "rand_chacha 0.3.1", + "sha2 0.10.9", + "w3f-ring-proof", + "zeroize", +] + [[package]] name = "array-bytes" version = "6.2.3" @@ -225,6 +504,15 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + [[package]] name = "arrayvec" version = "0.5.2" @@ -239,11 +527,11 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "asn1-rs" -version = "0.5.2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" dependencies = [ - "asn1-rs-derive", + "asn1-rs-derive 0.5.1", "asn1-rs-impl", "displaydoc", "nom", @@ -253,27 +541,55 @@ dependencies = [ "time", ] +[[package]] +name = "asn1-rs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" +dependencies = [ + "asn1-rs-derive 0.6.0", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 2.0.12", + "time", +] + [[package]] name = "asn1-rs-derive" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "synstructure 0.12.6", + "syn 2.0.104", + "synstructure 0.13.2", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "synstructure 0.13.2", ] [[package]] name = "asn1-rs-impl" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.104", ] [[package]] @@ -296,6 +612,43 @@ dependencies = [ "futures-core", ] +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + [[package]] name = "async-io" version = "2.4.1" @@ -309,7 +662,7 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix 1.0.7", + "rustix 1.0.8", "slab", "tracing", "windows-sys 0.59.0", @@ -326,6 +679,60 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-net" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" +dependencies = [ + "async-io", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-process" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" +dependencies = [ + "async-channel 2.5.0", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener 5.4.0", + "futures-lite", + "rustix 1.0.8", + "tracing", +] + +[[package]] +name = "async-signal" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 1.0.8", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + [[package]] name = "async-trait" version = "0.1.88" @@ -334,7 +741,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -350,6 +757,42 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "asynchronous-codec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" +dependencies = [ + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite", +] + +[[package]] +name = "atomic-take" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "attohttpc" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2" +dependencies = [ + "http 0.2.12", + "log", + "url", +] + [[package]] name = "atty" version = "0.2.14" @@ -363,9 +806,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" @@ -394,6 +837,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base58" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" + [[package]] name = "base64" version = "0.13.1" @@ -410,51 +859,120 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +dependencies = [ + "serde", +] + +[[package]] +name = "binary-merkle-tree" +version = "16.0.0" +dependencies = [ + "hash-db", + "log", + "parity-scale-codec", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.104", +] + +[[package]] +name = "bip32" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" +dependencies = [ + "bs58", + "hmac 0.12.1", + "k256", + "rand_core 0.6.4", + "ripemd", + "secp256k1 0.27.0", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "bip39" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" +dependencies = [ + "bitcoin_hashes 0.13.0", + "serde", + "unicode-normalization", +] [[package]] -name = "base64ct" -version = "1.7.3" +name = "bitcoin-internals" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" [[package]] -name = "beef" -version = "0.5.2" +name = "bitcoin-io" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" -dependencies = [ - "serde", -] +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" [[package]] -name = "bincode" -version = "1.3.3" +name = "bitcoin_hashes" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" dependencies = [ - "serde", + "bitcoin-internals", + "hex-conservative 0.1.2", ] [[package]] -name = "bindgen" -version = "0.65.1" +name = "bitcoin_hashes" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" dependencies = [ - "bitflags 1.3.2", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "peeking_take_while", - "prettyplease 0.2.33", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn 2.0.101", + "bitcoin-io", + "hex-conservative 0.2.1", ] [[package]] @@ -477,10 +995,23 @@ checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", + "serde", "tap", "wyz", ] +[[package]] +name = "blake2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" +dependencies = [ + "byte-tools", + "crypto-mac 0.7.0", + "digest 0.8.1", + "opaque-debug 0.2.3", +] + [[package]] name = "blake2" version = "0.10.6" @@ -490,6 +1021,16 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + [[package]] name = "blake2b_simd" version = "1.0.3" @@ -498,7 +1039,7 @@ checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" dependencies = [ "arrayref", "arrayvec 0.7.6", - "constant_time_eq", + "constant_time_eq 0.3.1", ] [[package]] @@ -509,7 +1050,7 @@ checksum = "e90f7deecfac93095eb874a40febd69427776e24e1bd7f87f33ac62d6f0174df" dependencies = [ "arrayref", "arrayvec 0.7.6", - "constant_time_eq", + "constant_time_eq 0.3.1", ] [[package]] @@ -522,7 +1063,7 @@ dependencies = [ "arrayvec 0.7.6", "cc", "cfg-if", - "constant_time_eq", + "constant_time_eq 0.3.1", ] [[package]] @@ -564,11 +1105,35 @@ dependencies = [ "byte-tools", ] +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel 2.5.0", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + [[package]] name = "bounded-collections" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca548b6163b872067dc5eb82fd130c56881435e30367d2073594a3d9744120dd" +dependencies = [ + "log", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "bounded-collections" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ad8a0bed7827f0b07a5d23cec2e58cc02038a99e4ca81616cb2bb2025f804d" dependencies = [ "log", "parity-scale-codec", @@ -577,10 +1142,13 @@ dependencies = [ ] [[package]] -name = "bs58" -version = "0.4.0" +name = "bounded-vec" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +checksum = "68534a48cbf63a4b1323c433cf21238c9ec23711e0df13b08c33e5c2082663ce" +dependencies = [ + "thiserror 1.0.69", +] [[package]] name = "bs58" @@ -588,6 +1156,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ + "sha2 0.10.9", "tinyvec", ] @@ -612,9 +1181,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "byte-slice-cast" @@ -630,9 +1199,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.23.0" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" +checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" [[package]] name = "byteorder" @@ -656,6 +1225,16 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "c2-chacha" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27dae93fe7b1e0424dc57179ac396908c26b035a87234809f5c4dfd1b47dc80" +dependencies = [ + "cipher 0.2.5", + "ppv-lite86", +] + [[package]] name = "camino" version = "1.1.10" @@ -690,15 +1269,21 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.25" +version = "1.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" +checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" dependencies = [ "jobserver", "libc", "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cexpr" version = "0.6.0" @@ -719,9 +1304,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "cfg_aliases" @@ -735,6 +1320,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" +dependencies = [ + "byteorder", + "keystream", +] + [[package]] name = "chacha20" version = "0.9.1" @@ -742,7 +1337,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ "cfg-if", - "cipher", + "cipher 0.4.4", "cpufeatures", ] @@ -754,7 +1349,7 @@ checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ "aead", "chacha20", - "cipher", + "cipher 0.4.4", "poly1305", "zeroize", ] @@ -767,7 +1362,9 @@ checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", + "js-sys", "num-traits", + "wasm-bindgen", "windows-link", ] @@ -784,6 +1381,27 @@ dependencies = [ "unsigned-varint 0.7.2", ] +[[package]] +name = "cid" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a" +dependencies = [ + "core2", + "multibase", + "multihash 0.19.3", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array 0.14.7", +] + [[package]] name = "cipher" version = "0.4.4" @@ -808,9 +1426,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.39" +version = "4.5.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" +checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" dependencies = [ "clap_builder", "clap_derive", @@ -818,33 +1436,45 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.39" +version = "4.5.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" +checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" dependencies = [ "anstream", "anstyle", "clap_lex", "strsim", + "terminal_size", ] [[package]] name = "clap_derive" -version = "4.5.32" +version = "4.5.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" + +[[package]] +name = "coarsetime" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" +dependencies = [ + "libc", + "wasix", + "wasm-bindgen", +] [[package]] name = "codespan-reporting" @@ -854,14 +1484,24 @@ checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" dependencies = [ "serde", "termcolor", - "unicode-width 0.2.0", + "unicode-width", ] [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "combine" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] [[package]] name = "comfy-table" @@ -870,9 +1510,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" dependencies = [ "unicode-segmentation", - "unicode-width 0.2.0", + "unicode-width", ] +[[package]] +name = "common-path" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -882,6 +1528,19 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "console" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width", + "windows-sys 0.59.0", +] + [[package]] name = "const-oid" version = "0.9.6" @@ -908,6 +1567,32 @@ dependencies = [ "tiny-keccak", ] +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "constant_time_eq" version = "0.3.1" @@ -924,6 +1609,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -981,7 +1676,7 @@ dependencies = [ "gimli 0.27.3", "hashbrown 0.13.2", "log", - "regalloc2", + "regalloc2 0.6.1", "smallvec", "target-lexicon", ] @@ -1048,7 +1743,7 @@ dependencies = [ "cranelift-codegen", "cranelift-entity", "cranelift-frontend", - "itertools", + "itertools 0.10.5", "log", "smallvec", "wasmparser 0.102.0", @@ -1057,13 +1752,28 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -1083,6 +1793,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -1091,9 +1810,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" @@ -1103,57 +1822,158 @@ checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array 0.14.7", "rand_core 0.6.4", - "subtle", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" +dependencies = [ + "generic-array 0.12.4", + "subtle 1.0.0", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array 0.14.7", + "subtle 2.6.1", +] + +[[package]] +name = "crypto_secretbox" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d6cf87adf719ddf43a805e92c6870a531aedda35ff640442cbaf8674e141e1" +dependencies = [ + "aead", + "cipher 0.4.4", + "generic-array 0.14.7", + "poly1305", + "salsa20", + "subtle 2.6.1", "zeroize", ] [[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher 0.3.0", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", +] + +[[package]] +name = "cumulus-client-parachain-inherent" +version = "0.17.0" +dependencies = [ + "async-trait", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-relay-chain-interface", + "cumulus-test-relay-sproof-builder", + "parity-scale-codec", + "sc-client-api", + "sp-crypto-hashing 0.1.0", + "sp-inherents", + "sp-runtime 41.1.0", + "sp-state-machine", + "sp-storage 22.0.0", + "tracing", +] + +[[package]] +name = "cumulus-primitives-core" +version = "0.18.1" dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", - "typenum", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "polkadot-primitives", + "scale-info", + "sp-api", + "sp-runtime 41.1.0", + "sp-trie", + "staging-xcm", ] [[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +name = "cumulus-primitives-parachain-inherent" +version = "0.18.1" dependencies = [ - "generic-array 0.14.7", - "subtle", + "async-trait", + "cumulus-primitives-core", + "parity-scale-codec", + "scale-info", + "sp-core 36.1.0", + "sp-inherents", + "sp-trie", ] [[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +name = "cumulus-primitives-proof-size-hostfunction" +version = "0.12.0" dependencies = [ - "generic-array 0.14.7", - "subtle", + "sp-externalities 0.30.0", + "sp-runtime-interface 29.0.1", + "sp-trie", ] [[package]] -name = "ctr" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +name = "cumulus-relay-chain-interface" +version = "0.23.0" dependencies = [ - "cipher 0.3.0", + "async-trait", + "cumulus-primitives-core", + "futures", + "jsonrpsee-core 0.24.9", + "parity-scale-codec", + "polkadot-overseer", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-state-machine", + "sp-version", + "thiserror 1.0.69", ] [[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +name = "cumulus-test-relay-sproof-builder" +version = "0.19.0" dependencies = [ - "cipher", + "cumulus-primitives-core", + "parity-scale-codec", + "polkadot-primitives", + "sp-runtime 41.1.0", + "sp-state-machine", + "sp-trie", ] [[package]] @@ -1165,20 +1985,7 @@ dependencies = [ "byteorder", "digest 0.8.1", "rand_core 0.5.1", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", + "subtle 2.6.1", "zeroize", ] @@ -1194,7 +2001,7 @@ dependencies = [ "digest 0.10.7", "fiat-crypto", "rustc_version 0.4.1", - "subtle", + "subtle 2.6.1", "zeroize", ] @@ -1206,14 +2013,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "cxx" -version = "1.0.158" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a71ea7f29c73f7ffa64c50b83c9fe4d3a6d4be89a86b009eb80d5a6d3429d741" +checksum = "be1149bab7a5580cb267215751389597c021bfad13c0bb00c54e19559333764c" dependencies = [ "cc", "cxxbridge-cmd", @@ -1225,47 +2032,98 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.158" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36a8232661d66dcf713394726157d3cfe0a89bfc85f52d6e9f9bbc2306797fe7" +checksum = "6aeeaf1aefae8e0f5141920a7ecbc64a22ab038d4b4ac59f2d19e0effafd5b53" dependencies = [ "cc", "codespan-reporting", + "indexmap 2.10.0", "proc-macro2", "quote", "scratch", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "cxxbridge-cmd" -version = "1.0.158" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f44296c8693e9ea226a48f6a122727f77aa9e9e338380cb021accaeeb7ee279" +checksum = "c36ac1f9a72064b1f41fd7b49a4c1b3bf33b9ccb1274874dda6d264f57c55964" dependencies = [ "clap", "codespan-reporting", + "indexmap 2.10.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "cxxbridge-flags" -version = "1.0.158" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f69c181c176981ae44ba9876e2ea41ce8e574c296b38d06925ce9214fb8e4" +checksum = "170c6ff5d009663866857a91ebee55b98ea4d4b34e7d7aba6dc4a4c95cc7b748" [[package]] name = "cxxbridge-macro" -version = "1.0.158" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8faff5d4467e0709448187df29ccbf3b0982cc426ee444a193f87b11afb565a8" +checksum = "4984a142211026786011a7e79fa22faa1eca1e9cbf0e60bffecfd57fd3db88f1" dependencies = [ + "indexmap 2.10.0", "proc-macro2", "quote", "rustversion", - "syn 2.0.101", + "syn 2.0.104", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.104", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core 0.9.11", ] [[package]] @@ -1291,7 +2149,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" dependencies = [ "data-encoding", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1306,11 +2164,25 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.2.0" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs 0.6.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "10.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" dependencies = [ - "asn1-rs", + "asn1-rs 0.7.1", "displaydoc", "nom", "num-bigint", @@ -1328,16 +2200,38 @@ dependencies = [ ] [[package]] -name = "derive-syn-parse" -version = "0.1.5" +name = "derivative" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "derive-syn-parse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "derive-where" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "510c292c8cf384b1a340b816a9a6cf2599eb8f566a44949024af88418000c50b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "derive_more" version = "0.99.20" @@ -1348,7 +2242,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1371,12 +2265,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "difflib" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" - [[package]] name = "digest" version = "0.8.1" @@ -1404,14 +2292,14 @@ dependencies = [ "block-buffer 0.10.4", "const-oid", "crypto-common", - "subtle", + "subtle 2.6.1", ] [[package]] name = "directories" -version = "4.0.1" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" dependencies = [ "dirs-sys", ] @@ -1426,15 +2314,25 @@ dependencies = [ "dirs-sys-next", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs-sys" -version = "0.3.7" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", + "option-ext", "redox_users", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -1456,7 +2354,34 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", +] + +[[package]] +name = "docify" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a772b62b1837c8f060432ddcc10b17aae1453ef17617a99bc07789252d2a5896" +dependencies = [ + "docify_macros", +] + +[[package]] +name = "docify_macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60e6be249b0a462a14784a99b19bf35a667bb5e09de611738bb7362fa4c95ff7" +dependencies = [ + "common-path", + "derive-syn-parse", + "once_cell", + "proc-macro2", + "quote", + "regex", + "syn 2.0.104", + "termcolor", + "toml 0.8.23", + "walkdir", ] [[package]] @@ -1495,7 +2420,7 @@ checksum = "7e8671d54058979a37a26f3511fbf8d198ba1aa35ffb202c42587d918d77213a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1514,19 +2439,11 @@ dependencies = [ "digest 0.10.7", "elliptic-curve", "rfc6979", - "signature 2.2.0", + "serdect", + "signature", "spki", ] -[[package]] -name = "ed25519" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" -dependencies = [ - "signature 1.6.4", -] - [[package]] name = "ed25519" version = "2.2.3" @@ -1534,50 +2451,49 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ "pkcs8", - "signature 2.2.0", + "signature", ] [[package]] name = "ed25519-dalek" -version = "1.0.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ - "curve25519-dalek 3.2.0", - "ed25519 1.5.3", - "rand 0.7.3", + "curve25519-dalek 4.1.3", + "ed25519", + "rand_core 0.6.4", "serde", - "sha2 0.9.9", + "sha2 0.10.9", + "subtle 2.6.1", "zeroize", ] [[package]] -name = "ed25519-dalek" -version = "2.1.1" +name = "ed25519-zebra" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" dependencies = [ "curve25519-dalek 4.1.3", - "ed25519 2.2.3", + "ed25519", + "hashbrown 0.14.5", + "hex", "rand_core 0.6.4", - "serde", "sha2 0.10.9", - "subtle", "zeroize", ] [[package]] -name = "ed25519-zebra" -version = "3.1.0" +name = "educe" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" dependencies = [ - "curve25519-dalek 3.2.0", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] @@ -1601,32 +2517,47 @@ dependencies = [ "pkcs8", "rand_core 0.6.4", "sec1", - "subtle", + "serdect", + "subtle 2.6.1", "zeroize", ] +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + [[package]] name = "enum-as-inner" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.104", ] [[package]] -name = "enum-as-inner" -version = "0.6.1" +name = "enum-ordinalize" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ - "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1669,12 +2600,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -1719,13 +2650,13 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2c470c71d91ecbd179935b24170459e926382eaaa86b590b78814e180d8a8e2" dependencies = [ - "blake2", + "blake2 0.10.6", "file-guard", "fs-err", - "prettyplease 0.2.33", + "prettyplease", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1740,19 +2671,50 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + [[package]] name = "fastrand" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "fatality" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec6f82451ff7f0568c6181287189126d492b5654e30a788add08027b6363d019" +dependencies = [ + "fatality-proc-macro", + "thiserror 1.0.69", +] + +[[package]] +name = "fatality-proc-macro" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb42427514b063d97ce21d5199f36c0c307d981434a6be32582bc79fe5bd2303" +dependencies = [ + "expander", + "indexmap 2.10.0", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "fdlimit" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b" +checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5" dependencies = [ "libc", + "thiserror 1.0.69", ] [[package]] @@ -1762,7 +2724,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ "rand_core 0.6.4", - "subtle", + "subtle 2.6.1", ] [[package]] @@ -1805,9 +2767,9 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" +checksum = "b4f8f43dc520133541781ec03a8cab158ae8b7f7169cdf22e9050aa6cf0fbdfc" dependencies = [ "either", "futures", @@ -1838,13 +2800,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] -name = "float-cmp" -version = "0.9.0" +name = "fixedbitset" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "fnv" @@ -1860,8 +2819,7 @@ checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "fork-tree" -version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "13.0.1" dependencies = [ "parity-scale-codec", ] @@ -1875,6 +2833,16 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "forwarded-header-value" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" +dependencies = [ + "nonempty", + "thiserror 1.0.69", +] + [[package]] name = "fragile" version = "2.0.1" @@ -1883,8 +2851,7 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.2.0" dependencies = [ "frame-support", "frame-support-procedural", @@ -1896,114 +2863,147 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-std", - "sp-storage", + "sp-application-crypto 40.1.0", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-runtime-interface 29.0.1", + "sp-storage 22.0.0", "static_assertions", ] [[package]] name = "frame-benchmarking-cli" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "48.0.0" dependencies = [ "Inflector", "array-bytes", "chrono", "clap", "comfy-table", + "cumulus-client-parachain-inherent", + "cumulus-primitives-proof-size-hostfunction", "frame-benchmarking", "frame-support", "frame-system", "gethostname", "handlebars", - "itertools", - "lazy_static", + "itertools 0.11.0", "linked-hash-map", "log", "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives", "rand 0.8.5", "rand_pcg", "sc-block-builder", + "sc-chain-spec", "sc-cli", "sc-client-api", "sc-client-db", "sc-executor", + "sc-runtime-utilities", "sc-service", "sc-sysinfo", "serde", "serde_json", "sp-api", + "sp-block-builder", "sp-blockchain", - "sp-core", + "sp-core 36.1.0", "sp-database", - "sp-externalities", + "sp-externalities 0.30.0", + "sp-genesis-builder", "sp-inherents", - "sp-io", + "sp-io 40.0.1", "sp-keystore", - "sp-runtime", + "sp-runtime 41.1.0", "sp-state-machine", - "sp-storage", + "sp-storage 22.0.0", + "sp-timestamp", + "sp-transaction-pool", "sp-trie", - "sp-wasm-interface", + "sp-version", + "sp-wasm-interface 21.0.1", + "subxt", + "subxt-signer", "thiserror 1.0.69", "thousands", ] +[[package]] +name = "frame-decode" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6027a409bac4fe95b4d107f965fcdbc252fc89d884a360d076b3070b6128c094" +dependencies = [ + "frame-metadata 17.0.0", + "parity-scale-codec", + "scale-decode", + "scale-info", + "scale-type-resolver", + "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "frame-election-provider-solution-type" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "16.1.1" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "frame-election-provider-support" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.1.1" dependencies = [ "frame-election-provider-solution-type", "frame-support", "frame-system", "parity-scale-codec", "scale-info", - "sp-arithmetic", - "sp-core", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", "sp-npos-elections", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", ] [[package]] name = "frame-executive" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.0.1" dependencies = [ + "aquamarine", "frame-support", "frame-system", "frame-try-runtime", + "log", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-tracing 17.1.0", ] [[package]] name = "frame-metadata" -version = "16.0.0" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "701bac17e9b55e0f95067c428ebcb46496587f08e8cf4ccc0fe5903bea10dbb8" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "frame-metadata" +version = "20.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +checksum = "26de808fa6461f2485dc51811aefed108850064994fb4a62b3ac21ffa62ac8df" dependencies = [ "cfg-if", "parity-scale-codec", @@ -2013,13 +3013,15 @@ dependencies = [ [[package]] name = "frame-support" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.1.0" dependencies = [ "aquamarine", + "array-bytes", + "binary-merkle-tree", "bitflags 1.3.2", + "docify", "environmental", - "frame-metadata", + "frame-metadata 20.0.0", "frame-support-procedural", "impl-trait-for-tuples", "k256", @@ -2030,117 +3032,112 @@ dependencies = [ "scale-info", "serde", "serde_json", - "smallvec", "sp-api", - "sp-arithmetic", - "sp-core", - "sp-core-hashing-proc-macro", - "sp-debug-derive", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", + "sp-crypto-hashing-proc-macro", + "sp-debug-derive 14.0.0", "sp-genesis-builder", "sp-inherents", - "sp-io", - "sp-runtime", + "sp-io 40.0.1", + "sp-metadata-ir", + "sp-runtime 41.1.0", "sp-staking", "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-weights", + "sp-std 14.0.0", + "sp-tracing 17.1.0", + "sp-trie", + "sp-weights 31.1.0", "tt-call", ] [[package]] name = "frame-support-procedural" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "33.0.1" dependencies = [ "Inflector", "cfg-expr", "derive-syn-parse", + "docify", "expander", "frame-support-procedural-tools", - "itertools", + "itertools 0.11.0", "macro_magic", "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.101", + "sp-crypto-hashing 0.1.0", + "syn 2.0.104", ] [[package]] name = "frame-support-procedural-tools" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "13.0.1" dependencies = [ "frame-support-procedural-tools-derive", - "proc-macro-crate 1.1.3", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "frame-support-procedural-tools-derive" -version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "12.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "frame-system" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.2.0" dependencies = [ "cfg-if", + "docify", "frame-support", "log", "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", "sp-version", - "sp-weights", + "sp-weights 31.1.0", ] [[package]] name = "frame-system-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.0.1" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "parity-scale-codec", "scale-info", - "sp-core", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-runtime 41.1.0", ] [[package]] name = "frame-system-rpc-runtime-api" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "36.0.0" dependencies = [ + "docify", "parity-scale-codec", "sp-api", ] [[package]] name = "frame-try-runtime" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.46.0" dependencies = [ "frame-support", "parity-scale-codec", "sp-api", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", ] [[package]] @@ -2185,9 +3182,9 @@ dependencies = [ [[package]] name = "futures-bounded" -version = "0.1.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b07bbbe7d7e78809544c6f718d875627addc73a7c3582447abc052cd3dc67e0" +checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" dependencies = [ "futures-timer", "futures-util", @@ -2233,7 +3230,10 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ + "fastrand", "futures-core", + "futures-io", + "parking", "pin-project-lite", ] @@ -2245,17 +3245,18 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "futures-rustls" -version = "0.24.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd3cf68c183738046838e300353e4716c674dc5e56890de4826801a6622a28" +checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" dependencies = [ "futures-io", "rustls", + "rustls-pki-types", ] [[package]] @@ -2303,6 +3304,20 @@ dependencies = [ "byteorder", ] +[[package]] +name = "generator" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" +dependencies = [ + "cc", + "cfg-if", + "libc", + "log", + "rustversion", + "windows 0.61.3", +] + [[package]] name = "generic-array" version = "0.12.4" @@ -2351,8 +3366,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -2362,9 +3379,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi", "wasi 0.14.2+wasi-0.2.4", + "wasm-bindgen", ] [[package]] @@ -2393,7 +3412,7 @@ version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" dependencies = [ - "fallible-iterator", + "fallible-iterator 0.2.0", "indexmap 1.9.3", "stable_deref_trait", ] @@ -2403,6 +3422,10 @@ name = "gimli" version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +dependencies = [ + "fallible-iterator 0.3.0", + "stable_deref_trait", +] [[package]] name = "glob" @@ -2423,6 +3446,26 @@ dependencies = [ "regex-syntax 0.8.5", ] +[[package]] +name = "governor" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b" +dependencies = [ + "cfg-if", + "dashmap", + "futures", + "futures-timer", + "no-std-compat", + "nonzero_ext", + "parking_lot 0.12.4", + "portable-atomic", + "quanta", + "rand 0.8.5", + "smallvec", + "spinning_top", +] + [[package]] name = "group" version = "0.13.0" @@ -2431,22 +3474,41 @@ checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core 0.6.4", - "subtle", + "subtle 2.6.1", ] [[package]] name = "h2" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" dependencies = [ "bytes", "fnv", "futures-core", "futures-sink", "futures-util", - "http", - "indexmap 2.9.0", + "http 0.2.12", + "indexmap 2.10.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap 2.10.0", "slab", "tokio", "tokio-util", @@ -2455,9 +3517,9 @@ dependencies = [ [[package]] name = "handlebars" -version = "4.5.0" +version = "5.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" +checksum = "d08485b96a0e6393e9e4d1b8d48cf74ad6c063cd905eb33f42c1ce3f0377539b" dependencies = [ "log", "pest", @@ -2487,9 +3549,6 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] [[package]] name = "hashbrown" @@ -2497,20 +3556,40 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.12", + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", + "serde", ] [[package]] name = "hashbrown" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.5", +] + [[package]] name = "heck" version = "0.4.1" @@ -2540,9 +3619,9 @@ checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hermit-abi" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -2550,6 +3629,21 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + +[[package]] +name = "hex-conservative" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +dependencies = [ + "arrayvec 0.7.6", +] + [[package]] name = "hex-literal" version = "0.2.2" @@ -2566,6 +3660,12 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + [[package]] name = "hex-literal-impl" version = "0.2.3" @@ -2575,6 +3675,98 @@ dependencies = [ "proc-macro-hack", ] +[[package]] +name = "hickory-proto" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna", + "ipnet", + "once_cell", + "rand 0.8.5", + "socket2", + "thiserror 1.0.69", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-proto" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna", + "ipnet", + "once_cell", + "rand 0.9.1", + "ring 0.17.14", + "thiserror 2.0.12", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto 0.24.4", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot 0.12.4", + "rand 0.8.5", + "resolv-conf", + "smallvec", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "hickory-resolver" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto 0.25.2", + "ipconfig", + "moka", + "once_cell", + "parking_lot 0.12.4", + "rand 0.9.1", + "resolv-conf", + "smallvec", + "thiserror 2.0.12", + "tokio", + "tracing", +] + [[package]] name = "hkdf" version = "0.12.4" @@ -2594,16 +3786,6 @@ dependencies = [ "digest 0.9.0", ] -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac 0.11.1", - "digest 0.9.0", -] - [[package]] name = "hmac" version = "0.12.1" @@ -2644,6 +3826,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.15", +] + [[package]] name = "http-body" version = "0.4.6" @@ -2651,15 +3844,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.12", "pin-project-lite", ] [[package]] -name = "http-range-header" -version = "0.3.1" +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.3.1", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", + "pin-project-lite", +] [[package]] name = "httparse" @@ -2698,9 +3908,9 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2", - "http", - "http-body", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", "httparse", "httpdate", "itoa", @@ -2713,19 +3923,63 @@ dependencies = [ ] [[package]] -name = "hyper-rustls" -version = "0.24.2" +name = "hyper" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ + "bytes", + "futures-channel", "futures-util", - "http", - "hyper", + "h2 0.4.11", + "http 1.3.1", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa 1.0.15", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http 1.3.1", + "hyper 1.6.0", + "hyper-util", "log", "rustls", "rustls-native-certs", + "rustls-pki-types", "tokio", "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.6.0", + "libc", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", ] [[package]] @@ -2839,25 +4093,10 @@ dependencies = [ ] [[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "0.4.0" +name = "ident_case" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" @@ -2897,7 +4136,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" dependencies = [ "async-io", - "core-foundation", + "core-foundation 0.9.4", "fnv", "futures", "if-addrs", @@ -2910,7 +4149,26 @@ dependencies = [ "rtnetlink", "system-configuration", "tokio", - "windows", + "windows 0.53.0", +] + +[[package]] +name = "igd-next" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064d90fec10d541084e7b39ead8875a5a80d9114a2b18791565253bae25f49e4" +dependencies = [ + "async-trait", + "attohttpc", + "bytes", + "futures", + "http 0.2.12", + "hyper 0.14.32", + "log", + "rand 0.8.5", + "tokio", + "url", + "xmltree", ] [[package]] @@ -2922,11 +4180,31 @@ dependencies = [ "parity-scale-codec", ] +[[package]] +name = "impl-codec" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d40b9d5e17727407e55028eafc22b2dc68781786e6d7eb8a21103f5058e3a14" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-num-traits" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "803d15461ab0dcc56706adf266158acbc44ccf719bf7d0af30705f58b90a4b8c" +dependencies = [ + "integer-sqrt", + "num-traits", + "uint 0.10.0", +] + [[package]] name = "impl-serde" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +checksum = "4a143eada6a1ec4aefa5049037a26a6d597bfd64f8c026d07b77133e02b7dd0b" dependencies = [ "serde", ] @@ -2939,7 +4217,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2974,12 +4252,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.3", + "hashbrown 0.15.4", ] [[package]] @@ -3015,12 +4293,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "intx" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f38a50a899dc47a6d0ed5508e7f601a2e34c3a85303514b5d137f3c10a0c75" - [[package]] name = "io-lifetimes" version = "1.0.11" @@ -3032,6 +4304,17 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "io-uring" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "libc", +] + [[package]] name = "ip_network" version = "0.4.1" @@ -3044,7 +4327,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2 0.5.10", + "socket2", "widestring", "windows-sys 0.48.0", "winreg", @@ -3062,7 +4345,7 @@ version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ - "hermit-abi 0.5.1", + "hermit-abi 0.5.2", "libc", "windows-sys 0.59.0", ] @@ -3082,12 +4365,70 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + [[package]] name = "jobserver" version = "0.1.33" @@ -3114,11 +4455,50 @@ version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "367a292944c07385839818bb71c8d76611138e2dedb0677d035b8da21d29c78b" dependencies = [ - "jsonrpsee-core", - "jsonrpsee-proc-macros", - "jsonrpsee-server", - "jsonrpsee-types", + "jsonrpsee-core 0.16.3", + "jsonrpsee-proc-macros 0.16.3", + "jsonrpsee-server 0.16.3", + "jsonrpsee-types 0.16.3", + "tracing", +] + +[[package]] +name = "jsonrpsee" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b26c20e2178756451cfeb0661fb74c47dd5988cb7e3939de7e9241fd604d42" +dependencies = [ + "jsonrpsee-client-transport", + "jsonrpsee-core 0.24.9", + "jsonrpsee-proc-macros 0.24.9", + "jsonrpsee-server 0.24.9", + "jsonrpsee-types 0.24.9", + "jsonrpsee-ws-client", + "tokio", + "tracing", +] + +[[package]] +name = "jsonrpsee-client-transport" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bacb85abf4117092455e1573625e21b8f8ef4dec8aff13361140b2dc266cdff2" +dependencies = [ + "base64 0.22.1", + "futures-util", + "http 1.3.1", + "jsonrpsee-core 0.24.9", + "pin-project", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", + "soketto 0.8.1", + "thiserror 1.0.69", + "tokio", + "tokio-rustls", + "tokio-util", "tracing", + "url", ] [[package]] @@ -3134,11 +4514,11 @@ dependencies = [ "futures-channel", "futures-util", "globset", - "hyper", - "jsonrpsee-types", + "hyper 0.14.32", + "jsonrpsee-types 0.16.3", "parking_lot 0.12.4", "rand 0.8.5", - "rustc-hash", + "rustc-hash 1.1.0", "serde", "serde_json", "soketto 0.7.1", @@ -3147,6 +4527,32 @@ dependencies = [ "tracing", ] +[[package]] +name = "jsonrpsee-core" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456196007ca3a14db478346f58c7238028d55ee15c1df15115596e411ff27925" +dependencies = [ + "async-trait", + "bytes", + "futures-timer", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "jsonrpsee-types 0.24.9", + "parking_lot 0.12.4", + "pin-project", + "rand 0.8.5", + "rustc-hash 2.1.1", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tracing", +] + [[package]] name = "jsonrpsee-proc-macros" version = "0.16.3" @@ -3160,6 +4566,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "jsonrpsee-proc-macros" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e65763c942dfc9358146571911b0cd1c361c2d63e2d2305622d40d36376ca80" +dependencies = [ + "heck 0.5.0", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "jsonrpsee-server" version = "0.16.3" @@ -3168,10 +4587,10 @@ checksum = "cf4d945a6008c9b03db3354fb3c83ee02d2faa9f2e755ec1dfb69c3551b8f4ba" dependencies = [ "futures-channel", "futures-util", - "http", - "hyper", - "jsonrpsee-core", - "jsonrpsee-types", + "http 0.2.12", + "hyper 0.14.32", + "jsonrpsee-core 0.16.3", + "jsonrpsee-types 0.16.3", "serde", "serde_json", "soketto 0.7.1", @@ -3182,6 +4601,33 @@ dependencies = [ "tracing", ] +[[package]] +name = "jsonrpsee-server" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55e363146da18e50ad2b51a0a7925fc423137a0b1371af8235b1c231a0647328" +dependencies = [ + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "jsonrpsee-core 0.24.9", + "jsonrpsee-types 0.24.9", + "pin-project", + "route-recognizer", + "serde", + "serde_json", + "soketto 0.8.1", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tracing", +] + [[package]] name = "jsonrpsee-types" version = "0.16.3" @@ -3196,6 +4642,31 @@ dependencies = [ "tracing", ] +[[package]] +name = "jsonrpsee-types" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a8e70baf945b6b5752fc8eb38c918a48f1234daf11355e07106d963f860089" +dependencies = [ + "http 1.3.1", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonrpsee-ws-client" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01b3323d890aa384f12148e8d2a1fd18eb66e9e7e825f9de4fa53bcc19b93eef" +dependencies = [ + "http 1.3.1", + "jsonrpsee-client-transport", + "jsonrpsee-core 0.24.9", + "jsonrpsee-types 0.24.9", + "url", +] + [[package]] name = "k256" version = "0.13.4" @@ -3206,6 +4677,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "once_cell", + "serdect", "sha2 0.10.9", ] @@ -3218,6 +4690,22 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "keccak-hash" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e1b8590eb6148af2ea2d75f38e7d29f5ca970d5a4df456b3ef19b8b415d0264" +dependencies = [ + "primitive-types 0.13.1", + "tiny-keccak", +] + +[[package]] +name = "keystream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" + [[package]] name = "kvdb" version = "0.13.0" @@ -3271,9 +4759,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.172" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "libloading" @@ -3282,7 +4770,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.53.0", + "windows-targets 0.53.2", ] [[package]] @@ -3293,15 +4781,15 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libp2p" -version = "0.52.3" +version = "0.54.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d07d1502a027366d55afe187621c2d7895dc111a3df13b35fed698049681d7" +checksum = "bbbe80f9c7e00526cd6b838075b9c171919404a4732cb2fa8ece0a093223bfc4" dependencies = [ "bytes", + "either", "futures", "futures-timer", "getrandom 0.2.16", - "instant", "libp2p-allow-block-list", "libp2p-connection-limits", "libp2p-core", @@ -3317,18 +4805,20 @@ dependencies = [ "libp2p-request-response", "libp2p-swarm", "libp2p-tcp", - "libp2p-wasm-ext", + "libp2p-upnp", "libp2p-websocket", "libp2p-yamux", - "multiaddr", + "multiaddr 0.18.2", "pin-project", + "rw-stream-sink", + "thiserror 1.0.69", ] [[package]] name = "libp2p-allow-block-list" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55b46558c5c0bf99d3e2a1a38fd54ff5476ca66dd1737b12466a1824dd219311" +checksum = "d1027ccf8d70320ed77e984f273bc8ce952f623762cb9bf2d126df73caef8041" dependencies = [ "libp2p-core", "libp2p-identity", @@ -3338,9 +4828,9 @@ dependencies = [ [[package]] name = "libp2p-connection-limits" -version = "0.2.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f5107ad45cb20b2f6c3628c7b6014b996fcb13a88053f4569c872c6e30abf58" +checksum = "8d003540ee8baef0d254f7b6bfd79bac3ddf774662ca0abf69186d517ef82ad8" dependencies = [ "libp2p-core", "libp2p-identity", @@ -3350,18 +4840,16 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.40.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd44289ab25e4c9230d9246c475a22241e301b23e8f4061d3bdef304a1a99713" +checksum = "a61f26c83ed111104cd820fe9bc3aaabbac5f1652a1d213ed6e900b7918a1298" dependencies = [ "either", "fnv", "futures", "futures-timer", - "instant", "libp2p-identity", - "log", - "multiaddr", + "multiaddr 0.18.2", "multihash 0.19.3", "multistream-select", "once_cell", @@ -3372,33 +4860,35 @@ dependencies = [ "rw-stream-sink", "smallvec", "thiserror 1.0.69", - "unsigned-varint 0.7.2", + "tracing", + "unsigned-varint 0.8.0", "void", + "web-time", ] [[package]] name = "libp2p-dns" -version = "0.40.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a18db73084b4da2871438f6239fef35190b05023de7656e877c18a00541a3b" +checksum = "97f37f30d5c7275db282ecd86e54f29dd2176bd3ac656f06abf43bedb21eb8bd" dependencies = [ "async-trait", "futures", + "hickory-resolver 0.24.4", "libp2p-core", "libp2p-identity", - "log", "parking_lot 0.12.4", "smallvec", - "trust-dns-resolver", + "tracing", ] [[package]] name = "libp2p-identify" -version = "0.43.1" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a96638a0a176bec0a4bcaebc1afa8cf909b114477209d7456ade52c61cd9cd" +checksum = "1711b004a273be4f30202778856368683bd9a83c4c7dcc8f848847606831a4e3" dependencies = [ - "asynchronous-codec", + "asynchronous-codec 0.7.0", "either", "futures", "futures-bounded", @@ -3406,23 +4896,23 @@ dependencies = [ "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "lru", "quick-protobuf", "quick-protobuf-codec", "smallvec", "thiserror 1.0.69", + "tracing", "void", ] [[package]] name = "libp2p-identity" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb68ea10844211a59ce46230909fd0ea040e8a192454d4cc2ee0d53e12280eb" +checksum = "3104e13b51e4711ff5738caa1fb54467c8604c2e94d607e27745bcf709068774" dependencies = [ - "bs58 0.5.1", - "ed25519-dalek 2.1.1", + "bs58", + "ed25519-dalek", "hkdf", "multihash 0.19.3", "quick-protobuf", @@ -3435,84 +4925,85 @@ dependencies = [ [[package]] name = "libp2p-kad" -version = "0.44.6" +version = "0.46.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ea178dabba6dde6ffc260a8e0452ccdc8f79becf544946692fff9d412fc29d" +checksum = "ced237d0bd84bbebb7c2cad4c073160dacb4fe40534963c32ed6d4c6bb7702a3" dependencies = [ "arrayvec 0.7.6", - "asynchronous-codec", + "asynchronous-codec 0.7.0", "bytes", "either", "fnv", "futures", + "futures-bounded", "futures-timer", - "instant", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "quick-protobuf", "quick-protobuf-codec", "rand 0.8.5", "sha2 0.10.9", "smallvec", "thiserror 1.0.69", - "uint", - "unsigned-varint 0.7.2", + "tracing", + "uint 0.9.5", "void", + "web-time", ] [[package]] name = "libp2p-mdns" -version = "0.44.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a2567c305232f5ef54185e9604579a894fd0674819402bb0ac0246da82f52a" +checksum = "14b8546b6644032565eb29046b42744aee1e9f261ed99671b2c93fb140dba417" dependencies = [ "data-encoding", "futures", + "hickory-proto 0.24.4", "if-watch", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "rand 0.8.5", "smallvec", - "socket2 0.5.10", + "socket2", "tokio", - "trust-dns-proto 0.22.0", + "tracing", "void", ] [[package]] name = "libp2p-metrics" -version = "0.13.1" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239ba7d28f8d0b5d77760dc6619c05c7e88e74ec8fbbe97f856f20a56745e620" +checksum = "77ebafa94a717c8442d8db8d3ae5d1c6a15e30f2d347e0cd31d057ca72e42566" dependencies = [ - "instant", + "futures", "libp2p-core", "libp2p-identify", "libp2p-identity", "libp2p-kad", "libp2p-ping", "libp2p-swarm", - "once_cell", + "pin-project", "prometheus-client", + "web-time", ] [[package]] name = "libp2p-noise" -version = "0.43.1" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71ce70757f2c0d82e9a3ef738fb10ea0723d16cec37f078f719e2c247704c1bb" +checksum = "36b137cb1ae86ee39f8e5d6245a296518912014eaa87427d24e6ff58cfc1b28c" dependencies = [ + "asynchronous-codec 0.7.0", "bytes", "curve25519-dalek 4.1.3", "futures", "libp2p-core", "libp2p-identity", - "log", - "multiaddr", + "multiaddr 0.18.2", "multihash 0.19.3", "once_cell", "quick-protobuf", @@ -3521,33 +5012,34 @@ dependencies = [ "snow", "static_assertions", "thiserror 1.0.69", - "x25519-dalek 1.1.1", + "tracing", + "x25519-dalek", "zeroize", ] [[package]] name = "libp2p-ping" -version = "0.43.1" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e702d75cd0827dfa15f8fd92d15b9932abe38d10d21f47c50438c71dd1b5dae3" +checksum = "005a34420359223b974ee344457095f027e51346e992d1e0dcd35173f4cdd422" dependencies = [ "either", "futures", "futures-timer", - "instant", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "rand 0.8.5", + "tracing", "void", + "web-time", ] [[package]] name = "libp2p-quic" -version = "0.9.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "130d451d83f21b81eb7b35b360bc7972aeafb15177784adc56528db082e6b927" +checksum = "46352ac5cd040c70e88e7ff8257a2ae2f891a4076abad2c439584a31c15fd24e" dependencies = [ "bytes", "futures", @@ -3556,76 +5048,78 @@ dependencies = [ "libp2p-core", "libp2p-identity", "libp2p-tls", - "log", "parking_lot 0.12.4", "quinn", "rand 0.8.5", - "ring 0.16.20", + "ring 0.17.14", "rustls", - "socket2 0.5.10", + "socket2", "thiserror 1.0.69", "tokio", + "tracing", ] [[package]] name = "libp2p-request-response" -version = "0.25.3" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e3b4d67870478db72bac87bfc260ee6641d0734e0e3e275798f089c3fecfd4" +checksum = "1356c9e376a94a75ae830c42cdaea3d4fe1290ba409a22c809033d1b7dcab0a6" dependencies = [ "async-trait", "futures", - "instant", + "futures-bounded", + "futures-timer", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "rand 0.8.5", "smallvec", + "tracing", "void", + "web-time", ] [[package]] name = "libp2p-swarm" -version = "0.43.7" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "580189e0074af847df90e75ef54f3f30059aedda37ea5a1659e8b9fca05c0141" +checksum = "d7dd6741793d2c1fb2088f67f82cf07261f25272ebe3c0b0c311e0c6b50e851a" dependencies = [ "either", "fnv", "futures", "futures-timer", - "instant", "libp2p-core", "libp2p-identity", "libp2p-swarm-derive", - "log", + "lru", "multistream-select", "once_cell", "rand 0.8.5", "smallvec", "tokio", + "tracing", "void", + "web-time", ] [[package]] name = "libp2p-swarm-derive" -version = "0.33.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4d5ec2a3df00c7836d7696c136274c9c59705bac69133253696a6c932cd1d74" +checksum = "206e0aa0ebe004d778d79fb0966aa0de996c19894e2c0605ba2f8524dd4443d8" dependencies = [ - "heck 0.4.1", - "proc-macro-warning", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "libp2p-tcp" -version = "0.40.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b558dd40d1bcd1aaaed9de898e9ec6a436019ecc2420dd0016e712fbb61c5508" +checksum = "ad964f312c59dcfcac840acd8c555de8403e295d39edf96f5240048b5fcaa314" dependencies = [ "futures", "futures-timer", @@ -3633,87 +5127,91 @@ dependencies = [ "libc", "libp2p-core", "libp2p-identity", - "log", - "socket2 0.5.10", + "socket2", "tokio", + "tracing", ] [[package]] name = "libp2p-tls" -version = "0.2.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8218d1d5482b122ccae396bbf38abdcb283ecc96fa54760e1dfd251f0546ac61" +checksum = "47b23dddc2b9c355f73c1e36eb0c3ae86f7dc964a3715f0731cfad352db4d847" dependencies = [ "futures", "futures-rustls", "libp2p-core", "libp2p-identity", "rcgen", - "ring 0.16.20", + "ring 0.17.14", "rustls", - "rustls-webpki", + "rustls-webpki 0.101.7", "thiserror 1.0.69", - "x509-parser", + "x509-parser 0.16.0", "yasna", ] [[package]] -name = "libp2p-wasm-ext" -version = "0.40.0" +name = "libp2p-upnp" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e5d8e3a9e07da0ef5b55a9f26c009c8fb3c725d492d8bb4b431715786eea79c" +checksum = "01bf2d1b772bd3abca049214a3304615e6a36fa6ffc742bdd1ba774486200b8f" dependencies = [ "futures", - "js-sys", - "libp2p-core", - "send_wrapper", - "wasm-bindgen", - "wasm-bindgen-futures", + "futures-timer", + "igd-next", + "libp2p-core", + "libp2p-swarm", + "tokio", + "tracing", + "void", ] [[package]] name = "libp2p-websocket" -version = "0.42.2" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "004ee9c4a4631435169aee6aad2f62e3984dc031c43b6d29731e8e82a016c538" +checksum = "888b2ff2e5d8dcef97283daab35ad1043d18952b65e05279eecbe02af4c6e347" dependencies = [ "either", "futures", "futures-rustls", "libp2p-core", "libp2p-identity", - "log", "parking_lot 0.12.4", "pin-project-lite", "rw-stream-sink", "soketto 0.8.1", "thiserror 1.0.69", + "tracing", "url", "webpki-roots", ] [[package]] name = "libp2p-yamux" -version = "0.44.1" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eedcb62824c4300efb9cfd4e2a6edaf3ca097b9e68b36dabe45a44469fd6a85" +checksum = "788b61c80789dba9760d8c669a5bedb642c8267555c803fabd8396e4ca5c5882" dependencies = [ + "either", "futures", "libp2p-core", - "log", "thiserror 1.0.69", - "yamux", + "tracing", + "yamux 0.12.1", + "yamux 0.13.5", ] [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" dependencies = [ "bitflags 2.9.1", "libc", - "redox_syscall 0.5.12", + "redox_syscall 0.5.13", ] [[package]] @@ -3758,7 +5256,7 @@ checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" dependencies = [ "crunchy", "digest 0.9.0", - "subtle", + "subtle 2.6.1", ] [[package]] @@ -3841,12 +5339,71 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +[[package]] +name = "lioness" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" +dependencies = [ + "arrayref", + "blake2 0.8.1", + "chacha", + "keystream", +] + [[package]] name = "litemap" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +[[package]] +name = "litep2p" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14fb10e63363204b89d91e1292df83322fd9de5d7fa76c3d5c78ddc2f8f3efa9" +dependencies = [ + "async-trait", + "bs58", + "bytes", + "cid 0.11.1", + "ed25519-dalek", + "futures", + "futures-timer", + "hickory-resolver 0.25.2", + "indexmap 2.10.0", + "libc", + "mockall", + "multiaddr 0.17.1", + "multihash 0.17.0", + "network-interface", + "parking_lot 0.12.4", + "pin-project", + "prost 0.13.5", + "prost-build", + "rand 0.8.5", + "serde", + "sha2 0.10.9", + "simple-dns", + "smallvec", + "snow", + "socket2", + "thiserror 2.0.12", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tracing", + "uint 0.10.0", + "unsigned-varint 0.8.0", + "url", + "x25519-dalek", + "x509-parser 0.17.0", + "yamux 0.13.5", + "yasna", + "zeroize", +] + [[package]] name = "lock_api" version = "0.4.13" @@ -3863,13 +5420,26 @@ version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + [[package]] name = "lru" version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.3", + "hashbrown 0.15.4", ] [[package]] @@ -3881,6 +5451,12 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "lz4" version = "1.28.1" @@ -3917,9 +5493,9 @@ checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" [[package]] name = "matchers" -version = "0.0.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ "regex-automata 0.1.10", ] @@ -3942,9 +5518,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memfd" @@ -3964,6 +5540,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memmap2" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" +dependencies = [ + "libc", +] + [[package]] name = "memoffset" version = "0.8.0" @@ -4014,9 +5599,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] @@ -4028,20 +5613,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.59.0", ] +[[package]] +name = "mixnet" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a" +dependencies = [ + "arrayref", + "arrayvec 0.7.6", + "bitflags 1.3.2", + "blake2 0.10.6", + "c2-chacha", + "curve25519-dalek 4.1.3", + "either", + "hashlink", + "lioness", + "log", + "parking_lot 0.12.4", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_distr", + "subtle 2.6.1", + "thiserror 1.0.69", + "zeroize", +] + [[package]] name = "mockall" -version = "0.11.4" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" +checksum = "39a6bfcc6c8c7eed5ee98b9c3e33adc726054389233e201c95dab2d41a3839d2" dependencies = [ "cfg-if", "downcast", "fragile", - "lazy_static", "mockall_derive", "predicates", "predicates-tree", @@ -4049,14 +5658,58 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.11.4" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" +checksum = "25ca3004c2efe9011bd4e461bd8256445052b9615405b4f7ea43fc8ca5c20898" dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.104", +] + +[[package]] +name = "moka" +version = "0.12.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +dependencies = [ + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "loom", + "parking_lot 0.12.4", + "portable-atomic", + "rustc_version 0.4.1", + "smallvec", + "tagptr", + "thiserror 1.0.69", + "uuid", +] + +[[package]] +name = "multi-stash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685a9ac4b61f4e728e1d2c6a7844609c16527aeb5e6c865915c08e619c16410f" + +[[package]] +name = "multiaddr" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "log", + "multibase", + "multihash 0.17.0", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint 0.7.2", + "url", ] [[package]] @@ -4100,7 +5753,7 @@ dependencies = [ "blake3", "core2", "digest 0.10.7", - "multihash-derive 0.8.1", + "multihash-derive", "sha2 0.10.9", "sha3", "unsigned-varint 0.7.2", @@ -4116,25 +5769,6 @@ dependencies = [ "unsigned-varint 0.8.0", ] -[[package]] -name = "multihash-codetable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6d815ecb3c8238d00647f8630ede7060a642c9f704761cd6082cb4028af6935" -dependencies = [ - "blake2b_simd", - "blake2s_simd", - "blake3", - "core2", - "digest 0.10.7", - "multihash-derive 0.9.1", - "ripemd", - "sha1", - "sha2 0.10.9", - "sha3", - "strobe-rs", -] - [[package]] name = "multihash-derive" version = "0.8.1" @@ -4149,35 +5783,11 @@ dependencies = [ "synstructure 0.12.6", ] -[[package]] -name = "multihash-derive" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f1b7edab35d920890b88643a765fc9bd295cf0201f4154dda231bef9b8404eb" -dependencies = [ - "core2", - "multihash 0.19.3", - "multihash-derive-impl", -] - -[[package]] -name = "multihash-derive-impl" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3dc7141bd06405929948754f0628d247f5ca1865be745099205e5086da957cb" -dependencies = [ - "proc-macro-crate 3.3.0", - "proc-macro2", - "quote", - "syn 2.0.101", - "synstructure 0.13.2", -] - [[package]] name = "multimap" -version = "0.8.3" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" [[package]] name = "multistream-select" @@ -4210,13 +5820,19 @@ dependencies = [ [[package]] name = "names" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146" +checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" dependencies = [ "rand 0.8.5", ] +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" + [[package]] name = "netlink-packet-core" version = "0.7.0" @@ -4292,29 +5908,35 @@ dependencies = [ "libc", ] +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + [[package]] name = "node-rpc" version = "0.1.0" dependencies = [ "frame-support", "frame-system", - "jsonrpsee", + "jsonrpsee 0.16.3", "node-rpc-runtime-api", "pallet-compliance-manager", "pallet-identity", "pallet-pips", "pallet-portfolio", - "pallet-transaction-payment", + "pallet-transaction-payment 2.0.0", "parity-scale-codec", "polymesh-primitives", "serde", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 36.1.0", "sp-rpc", - "sp-runtime", - "sp-std", - "sp-weights", + "sp-runtime 41.1.0", + "sp-std 14.0.0", + "sp-weights 31.1.0", ] [[package]] @@ -4327,15 +5949,15 @@ dependencies = [ "pallet-identity", "pallet-pips", "pallet-portfolio", - "pallet-transaction-payment", + "pallet-transaction-payment 2.0.0", "parity-scale-codec", "polymesh-primitives", "serde", "serde_json", "sp-api", - "sp-runtime", - "sp-std", - "sp-weights", + "sp-runtime 41.1.0", + "sp-std 14.0.0", + "sp-weights 31.1.0", ] [[package]] @@ -4355,10 +5977,26 @@ dependencies = [ ] [[package]] -name = "normalize-line-endings" +name = "nonempty" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" + +[[package]] +name = "nonzero_ext" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" +checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] [[package]] name = "num-bigint" @@ -4385,6 +6023,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "num-format" version = "0.4.4" @@ -4422,6 +6071,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -4430,7 +6080,7 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "hermit-abi 0.5.1", + "hermit-abi 0.5.2", "libc", ] @@ -4457,11 +6107,20 @@ dependencies = [ [[package]] name = "oid-registry" -version = "0.6.1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +dependencies = [ + "asn1-rs 0.6.2", +] + +[[package]] +name = "oid-registry" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" dependencies = [ - "asn1-rs", + "asn1-rs 0.7.1", ] [[package]] @@ -4469,6 +6128,10 @@ name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +dependencies = [ + "critical-section", + "portable-atomic", +] [[package]] name = "once_cell_polyfill" @@ -4494,6 +6157,51 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "orchestra" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19051f0b0512402f5d52d6776999f55996f01887396278aeeccbbdfbc83eef2d" +dependencies = [ + "async-trait", + "dyn-clonable", + "futures", + "futures-timer", + "orchestra-proc-macro", + "pin-project", + "prioritized-metered-channel", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "orchestra-proc-macro" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43dfaf083aef571385fccfdc3a2f8ede8d0a1863160455d4f2b014d8f7d04a3f" +dependencies = [ + "expander", + "indexmap 2.10.0", + "itertools 0.11.0", + "petgraph 0.6.5", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "pallet-asset" version = "0.1.0" @@ -4512,58 +6220,70 @@ dependencies = [ "pallet-statistics", "pallet-timestamp", "parity-scale-codec", - "polymesh-common-utilities", - "polymesh-primitives", - "polymesh-primitives-derive", - "polymesh-runtime-common", - "rustc-hex", + "polymesh-common-utilities", + "polymesh-primitives", + "polymesh-primitives-derive", + "polymesh-runtime-common", + "rustc-hex", + "scale-info", + "serde", + "serde_derive", + "serde_json", + "sp-api", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", + "sp-version", +] + +[[package]] +name = "pallet-asset-conversion" +version = "22.0.0" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", "scale-info", - "serde", - "serde_derive", - "serde_json", "sp-api", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-version", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", ] [[package]] name = "pallet-authority-discovery" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.0.0" dependencies = [ "frame-support", "frame-system", "pallet-session", "parity-scale-codec", "scale-info", - "sp-application-crypto", + "sp-application-crypto 40.1.0", "sp-authority-discovery", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", ] [[package]] name = "pallet-authorship" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.0.0" dependencies = [ "frame-support", "frame-system", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", ] [[package]] name = "pallet-babe" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.0.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -4574,29 +6294,28 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-application-crypto", + "sp-application-crypto 40.1.0", "sp-consensus-babe", - "sp-core", - "sp-io", - "sp-runtime", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", "sp-session", "sp-staking", - "sp-std", ] [[package]] name = "pallet-balances" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "41.1.1" dependencies = [ + "docify", "frame-benchmarking", "frame-support", "frame-system", "log", "parity-scale-codec", "scale-info", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-runtime 41.1.0", ] [[package]] @@ -4611,10 +6330,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "sp-version", ] @@ -4634,10 +6353,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "sp-version", ] @@ -4662,63 +6381,74 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "sp-version", ] [[package]] name = "pallet-contracts" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.1.0" dependencies = [ - "bitflags 1.3.2", "environmental", "frame-benchmarking", "frame-support", "frame-system", "impl-trait-for-tuples", "log", - "pallet-contracts-primitives", + "pallet-balances", "pallet-contracts-proc-macro", + "pallet-contracts-uapi", "parity-scale-codec", + "paste", "rand 0.8.5", "rand_pcg", "scale-info", "serde", "smallvec", "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "staging-xcm", + "staging-xcm-builder", "wasm-instrument 0.4.0", "wasmi", ] [[package]] name = "pallet-contracts-primitives" -version = "24.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "29.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31e55b0b8df678f94af4b12bee8b3367d4217f4c5d90b2e531ec9bc15dfc39b" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", "scale-info", - "sp-runtime", - "sp-std", - "sp-weights", + "sp-runtime 29.0.0", + "sp-std 12.0.0", + "sp-weights 25.0.0", ] [[package]] name = "pallet-contracts-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "23.0.3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", +] + +[[package]] +name = "pallet-contracts-uapi" +version = "14.0.0" +dependencies = [ + "bitflags 1.3.2", + "parity-scale-codec", + "paste", + "scale-info", ] [[package]] @@ -4744,18 +6474,17 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "sp-version", ] [[package]] name = "pallet-election-provider-multi-phase" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "39.2.0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4766,26 +6495,24 @@ dependencies = [ "parity-scale-codec", "rand 0.8.5", "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", + "sp-io 40.0.1", "sp-npos-elections", - "sp-runtime", - "sp-std", - "strum", + "sp-runtime 41.1.0", + "strum 0.26.3", ] [[package]] name = "pallet-election-provider-support-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "39.0.0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", "frame-system", "parity-scale-codec", "sp-npos-elections", - "sp-runtime", + "sp-runtime 41.1.0", ] [[package]] @@ -4805,14 +6532,13 @@ dependencies = [ "scale-info", "serde", "serde_derive", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", + "sp-std 14.0.0", ] [[package]] name = "pallet-grandpa" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.0.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -4822,14 +6548,13 @@ dependencies = [ "pallet-session", "parity-scale-codec", "scale-info", - "sp-application-crypto", + "sp-application-crypto 40.1.0", "sp-consensus-grandpa", - "sp-core", - "sp-io", - "sp-runtime", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", "sp-session", "sp-staking", - "sp-std", ] [[package]] @@ -4848,10 +6573,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "sp-version", ] @@ -4861,7 +6586,7 @@ version = "2.0.0" dependencies = [ "frame-support", "frame-system", - "jsonrpsee", + "jsonrpsee 0.16.3", "node-rpc", "pallet-group-rpc-runtime-api", "parity-scale-codec", @@ -4869,10 +6594,10 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 36.1.0", "sp-rpc", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", + "sp-std 14.0.0", ] [[package]] @@ -4884,7 +6609,7 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-std", + "sp-std 14.0.0", ] [[package]] @@ -4905,21 +6630,20 @@ dependencies = [ "polymesh-common-utilities", "polymesh-primitives", "scale-info", - "schnorrkel 0.11.4", + "schnorrkel 0.11.5", "serde", "serde_derive", "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "sp-version", ] [[package]] name = "pallet-im-online" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "39.1.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -4928,43 +6652,35 @@ dependencies = [ "pallet-authorship", "parity-scale-codec", "scale-info", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-runtime", + "sp-application-crypto 40.1.0", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", "sp-staking", - "sp-std", ] [[package]] name = "pallet-indices" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.0.0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", ] [[package]] name = "pallet-insecure-randomness-collective-flip" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "28.0.0" dependencies = [ - "frame-support", - "frame-system", "parity-scale-codec", + "polkadot-sdk-frame", "safe-mix", "scale-info", - "sp-runtime", - "sp-std", ] [[package]] @@ -4982,9 +6698,9 @@ dependencies = [ "polymesh-primitives", "scale-info", "serde", - "sp-core", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "sp-version", ] @@ -5004,25 +6720,22 @@ dependencies = [ "parity-scale-codec", "polymesh-primitives", "scale-info", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", + "sp-std 14.0.0", ] [[package]] name = "pallet-offences" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "39.0.0" dependencies = [ "frame-support", "frame-system", "log", - "pallet-balances", "parity-scale-codec", "scale-info", "serde", - "sp-runtime", + "sp-runtime 41.1.0", "sp-staking", - "sp-std", ] [[package]] @@ -5036,8 +6749,8 @@ dependencies = [ "polymesh-primitives", "scale-info", "serde", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", + "sp-std 14.0.0", ] [[package]] @@ -5067,10 +6780,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "sp-version", ] @@ -5089,15 +6802,14 @@ dependencies = [ "polymesh-primitives", "scale-info", "serde", - "sp-arithmetic", - "sp-runtime", - "sp-std", + "sp-arithmetic 26.1.0", + "sp-runtime 41.1.0", + "sp-std 14.0.0", ] [[package]] name = "pallet-preimage" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.0.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -5105,10 +6817,9 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", ] [[package]] @@ -5124,10 +6835,10 @@ dependencies = [ "polymesh-primitives", "scale-info", "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", ] [[package]] @@ -5136,7 +6847,7 @@ version = "0.1.0" dependencies = [ "frame-support", "frame-system", - "jsonrpsee", + "jsonrpsee 0.16.3", "node-rpc", "pallet-protocol-fee-rpc-runtime-api", "parity-scale-codec", @@ -5145,10 +6856,10 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 36.1.0", "sp-rpc", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", + "sp-std 14.0.0", ] [[package]] @@ -5161,7 +6872,7 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-runtime", + "sp-runtime 41.1.0", ] [[package]] @@ -5175,31 +6886,29 @@ dependencies = [ "parity-scale-codec", "polymesh-primitives", "scale-info", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", + "sp-std 14.0.0", ] [[package]] name = "pallet-scheduler" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "41.2.0" dependencies = [ + "docify", "frame-benchmarking", "frame-support", "frame-system", "log", "parity-scale-codec", "scale-info", - "sp-io", - "sp-runtime", - "sp-std", - "sp-weights", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-weights 31.1.0", ] [[package]] name = "pallet-session" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.0.1" dependencies = [ "frame-support", "frame-system", @@ -5208,12 +6917,12 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", - "sp-runtime", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", "sp-session", "sp-staking", - "sp-std", + "sp-state-machine", "sp-trie", ] @@ -5243,17 +6952,16 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "sp-version", ] [[package]] name = "pallet-staking" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.1.1" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5263,34 +6971,32 @@ dependencies = [ "pallet-authorship", "pallet-session", "parity-scale-codec", - "rand_chacha 0.2.2", + "rand_chacha 0.3.1", "scale-info", "serde", - "sp-application-crypto", - "sp-io", - "sp-runtime", + "sp-application-crypto 40.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", "sp-staking", - "sp-std", ] [[package]] name = "pallet-staking-reward-curve" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "12.0.0" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "pallet-staking-runtime-api" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "26.0.0" dependencies = [ "parity-scale-codec", "sp-api", + "sp-staking", ] [[package]] @@ -5311,11 +7017,11 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", ] [[package]] @@ -5343,10 +7049,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "sp-version", ] @@ -5358,17 +7064,17 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", ] [[package]] name = "pallet-timestamp" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "39.0.0" dependencies = [ + "docify", "frame-benchmarking", "frame-support", "frame-system", @@ -5376,9 +7082,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-inherents", - "sp-io", - "sp-runtime", - "sp-std", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-storage 22.0.0", "sp-timestamp", ] @@ -5395,9 +7101,24 @@ dependencies = [ "serde", "serde_json", "sp-api", - "sp-io", - "sp-runtime", - "sp-std", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", +] + +[[package]] +name = "pallet-transaction-payment" +version = "40.0.0" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", ] [[package]] @@ -5416,10 +7137,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "sp-version", ] @@ -5437,10 +7158,10 @@ dependencies = [ "polymesh-common-utilities", "polymesh-primitives", "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", ] [[package]] @@ -5463,31 +7184,44 @@ dependencies = [ "rand_chacha 0.2.2", "scale-info", "serde", - "sp-arithmetic", - "sp-core", - "sp-io", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", + "sp-io 40.0.1", "sp-npos-elections", - "sp-runtime", + "sp-runtime 41.1.0", "sp-staking", - "sp-std", - "sp-tracing", + "sp-std 14.0.0", + "sp-tracing 17.1.0", "static_assertions", ] +[[package]] +name = "parity-bip39" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" +dependencies = [ + "bitcoin_hashes 0.13.0", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "unicode-normalization", +] + [[package]] name = "parity-db" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "592a28a24b09c9dc20ac8afaa6839abc417c720afe42c12e1e4a9d6aa2508d2e" dependencies = [ - "blake2", + "blake2 0.10.6", "crc32fast", "fs2", "hex", "libc", "log", "lz4", - "memmap2", + "memmap2 0.5.10", "parking_lot 0.12.4", "rand 0.8.5", "siphasher 0.3.11", @@ -5497,29 +7231,31 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.12" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" dependencies = [ "arrayvec 0.7.6", "bitvec", "byte-slice-cast", "bytes", + "const_format", "impl-trait-for-tuples", "parity-scale-codec-derive", + "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.12" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.104", ] [[package]] @@ -5577,7 +7313,7 @@ checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.12", + "redox_syscall 0.5.13", "smallvec", "windows-targets 0.52.6", ] @@ -5589,27 +7325,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" [[package]] -name = "paste" -version = "1.0.15" +name = "password-hash" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle 2.6.1", +] [[package]] -name = "pbkdf2" -version = "0.8.0" +name = "paste" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" -dependencies = [ - "crypto-mac 0.11.1", -] +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pbkdf2" -version = "0.11.0" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", + "hmac 0.12.1", + "password-hash", ] [[package]] @@ -5620,11 +7360,12 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pem" -version = "1.1.1" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" dependencies = [ - "base64 0.13.1", + "base64 0.22.1", + "serde", ] [[package]] @@ -5635,9 +7376,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" +checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" dependencies = [ "memchr", "thiserror 2.0.12", @@ -5646,9 +7387,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5" +checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" dependencies = [ "pest", "pest_generator", @@ -5656,24 +7397,23 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841" +checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "pest_meta" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0" +checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" dependencies = [ - "once_cell", "pest", "sha2 0.10.9", ] @@ -5684,57 +7424,72 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ - "fixedbitset", - "indexmap 2.9.0", + "fixedbitset 0.4.2", + "indexmap 2.10.0", ] [[package]] -name = "pin-project" -version = "1.1.10" +name = "petgraph" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ - "pin-project-internal", + "fixedbitset 0.5.7", + "indexmap 2.10.0", ] [[package]] -name = "pin-project-internal" +name = "pin-project" version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "c2eb703f3b6404c13228402e98a5eae063fd16b8f58afe334073ec105ee4117e" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", + "polkavm-derive-impl-macro", ] [[package]] -name = "pin-project-lite" -version = "0.2.16" +name = "polkavm-derive-impl" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "2f2116a92e6e96220a398930f4c8a6cda1264206f3e2034fc9982bfd93f261f7" +dependencies = [ + "polkavm-common", + "proc-macro2", + "quote", + "syn 2.0.104", +] [[package]] -name = "pin-utils" -version = "0.1.0" +name = "polkavm-derive-impl-macro" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "48c16669ddc7433e34c1007d31080b80901e3e8e523cb9d4b441c3910cf9294b" +dependencies = [ + "polkavm-derive-impl", + "syn 2.0.104", +] [[package]] -name = "pkcs8" -version = "0.10.2" +name = "polkavm-linker" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "e9bfe793b094d9ea5c99b7c43ba46e277b0f8f48f4bbfdbabf8d3ebf701a4bd3" dependencies = [ - "der", - "spki", + "dirs", + "gimli 0.31.1", + "hashbrown 0.14.5", + "log", + "object 0.36.7", + "polkavm-common", + "regalloc2 0.9.3", + "rustc-demangle", ] [[package]] -name = "pkg-config" -version = "0.3.32" +name = "polkavm-linux-raw" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "23eff02c070c70f31878a3d915e88a914ecf3e153741e2fb572dde28cce20fde" [[package]] name = "polling" @@ -5744,9 +7499,9 @@ checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.5.1", + "hermit-abi 0.5.2", "pin-project-lite", - "rustix 1.0.7", + "rustix 1.0.8", "tracing", "windows-sys 0.59.0", ] @@ -5773,7 +7528,7 @@ dependencies = [ "frame-system", "frame-system-rpc-runtime-api", "futures", - "jsonrpsee", + "jsonrpsee 0.16.3", "log", "node-rpc", "node-rpc-runtime-api", @@ -5799,7 +7554,7 @@ dependencies = [ "pallet-staking", "pallet-staking-runtime-api", "pallet-sudo", - "pallet-transaction-payment", + "pallet-transaction-payment 2.0.0", "pallet-validators", "parity-scale-codec", "polymesh-common-utilities", @@ -5841,11 +7596,11 @@ dependencies = [ "sp-consensus", "sp-consensus-babe", "sp-consensus-slots", - "sp-core", + "sp-core 36.1.0", "sp-inherents", "sp-keyring", "sp-offchain", - "sp-runtime", + "sp-runtime 41.1.0", "sp-session", "sp-timestamp", "sp-transaction-pool", @@ -5870,8 +7625,8 @@ dependencies = [ "polymesh-primitives", "scale-info", "serde", - "sp-core", - "sp-std", + "sp-core 36.1.0", + "sp-std 14.0.0", ] [[package]] @@ -5891,10 +7646,10 @@ dependencies = [ "polymesh-primitives", "scale-info", "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "wasm-instrument 0.3.0", ] @@ -5911,7 +7666,7 @@ dependencies = [ name = "polymesh-node-rpc" version = "0.1.0" dependencies = [ - "jsonrpsee", + "jsonrpsee 0.16.3", "node-rpc", "pallet-group-rpc", "pallet-protocol-fee-rpc", @@ -5933,7 +7688,7 @@ dependencies = [ "sp-consensus", "sp-consensus-babe", "sp-keystore", - "sp-runtime", + "sp-runtime 41.1.0", "substrate-frame-rpc-system", ] @@ -5954,18 +7709,18 @@ dependencies = [ "rand_core 0.6.4", "rustc-hex", "scale-info", - "schnorrkel 0.11.4", + "schnorrkel 0.11.5", "serde", "serde_bytes", "serde_json", - "sp-application-crypto", - "sp-arithmetic", - "sp-core", - "sp-debug-derive", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-std", + "sp-application-crypto 40.1.0", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", + "sp-debug-derive 14.0.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-runtime-interface 29.0.1", + "sp-std 14.0.0", "sp-version", ] @@ -5998,9 +7753,9 @@ dependencies = [ "polymesh-common-utilities", "polymesh-primitives", "smallvec", - "sp-io", - "sp-runtime", - "sp-std", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-std 14.0.0", ] [[package]] @@ -6057,7 +7812,7 @@ dependencies = [ "pallet-sto", "pallet-sudo", "pallet-timestamp", - "pallet-transaction-payment", + "pallet-transaction-payment 2.0.0", "pallet-treasury", "pallet-utility", "pallet-validators", @@ -6071,19 +7826,19 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-arithmetic", + "sp-arithmetic 26.1.0", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", "sp-consensus-grandpa", - "sp-core", + "sp-core 36.1.0", "sp-inherents", - "sp-io", + "sp-io 40.0.1", "sp-offchain", - "sp-runtime", + "sp-runtime 41.1.0", "sp-session", "sp-staking", - "sp-std", + "sp-std 14.0.0", "sp-transaction-pool", "sp-version", ] @@ -6139,7 +7894,7 @@ dependencies = [ "pallet-sto", "pallet-sudo", "pallet-timestamp", - "pallet-transaction-payment", + "pallet-transaction-payment 2.0.0", "pallet-treasury", "pallet-utility", "pallet-validators", @@ -6155,19 +7910,19 @@ dependencies = [ "serde_derive", "smallvec", "sp-api", - "sp-arithmetic", + "sp-arithmetic 26.1.0", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", "sp-consensus-grandpa", - "sp-core", + "sp-core 36.1.0", "sp-inherents", - "sp-io", + "sp-io 40.0.1", "sp-offchain", - "sp-runtime", + "sp-runtime 41.1.0", "sp-session", "sp-staking", - "sp-std", + "sp-std 14.0.0", "sp-transaction-pool", "sp-version", ] @@ -6223,7 +7978,7 @@ dependencies = [ "pallet-sto", "pallet-sudo", "pallet-timestamp", - "pallet-transaction-payment", + "pallet-transaction-payment 2.0.0", "pallet-treasury", "pallet-utility", "pallet-validators", @@ -6239,19 +7994,19 @@ dependencies = [ "serde_derive", "smallvec", "sp-api", - "sp-arithmetic", + "sp-arithmetic 26.1.0", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", "sp-consensus-grandpa", - "sp-core", + "sp-core 36.1.0", "sp-inherents", - "sp-io", + "sp-io 40.0.1", "sp-offchain", - "sp-runtime", + "sp-runtime 41.1.0", "sp-session", "sp-staking", - "sp-std", + "sp-std 14.0.0", "sp-transaction-pool", "sp-version", ] @@ -6311,7 +8066,7 @@ dependencies = [ "pallet-sto", "pallet-sudo", "pallet-timestamp", - "pallet-transaction-payment", + "pallet-transaction-payment 2.0.0", "pallet-treasury", "pallet-utility", "pallet-validators", @@ -6330,22 +8085,22 @@ dependencies = [ "serde_json", "smallvec", "sp-api", - "sp-arithmetic", + "sp-arithmetic 26.1.0", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", "sp-consensus-grandpa", - "sp-core", + "sp-core 36.1.0", "sp-inherents", - "sp-io", + "sp-io 40.0.1", "sp-keyring", "sp-npos-elections", "sp-offchain", - "sp-runtime", + "sp-runtime 41.1.0", "sp-session", "sp-staking", - "sp-std", - "sp-tracing", + "sp-std 14.0.0", + "sp-tracing 17.1.0", "sp-transaction-pool", "sp-version", "substrate-test-utils", @@ -6390,7 +8145,7 @@ dependencies = [ "pallet-validators", "polymesh-contracts", "polymesh-primitives", - "sp-std", + "sp-std 14.0.0", ] [[package]] @@ -6405,6 +8160,12 @@ dependencies = [ "universal-hash", ] +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + [[package]] name = "potential_utf" version = "0.1.2" @@ -6431,16 +8192,12 @@ dependencies = [ [[package]] name = "predicates" -version = "2.1.5" +version = "3.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" +checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" dependencies = [ - "difflib", - "float-cmp", - "itertools", - "normalize-line-endings", + "anstyle", "predicates-core", - "regex", ] [[package]] @@ -6461,35 +8218,54 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.25" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a" dependencies = [ "proc-macro2", - "syn 1.0.109", + "syn 2.0.104", ] [[package]] -name = "prettyplease" -version = "0.2.33" +name = "primitive-types" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ - "proc-macro2", - "syn 2.0.101", + "fixed-hash", + "impl-codec 0.6.0", + "scale-info", + "uint 0.9.5", ] [[package]] name = "primitive-types" -version = "0.12.2" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" dependencies = [ "fixed-hash", - "impl-codec", + "impl-codec 0.7.1", + "impl-num-traits", "impl-serde", "scale-info", - "uint", + "uint 0.10.0", +] + +[[package]] +name = "prioritized-metered-channel" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a172e6cc603231f2cf004232eabcecccc0da53ba576ab286ef7baa0cfc7927ad" +dependencies = [ + "coarsetime", + "crossbeam-queue", + "derive_more 0.99.20", + "futures", + "futures-timer", + "nanorand", + "thiserror 1.0.69", + "tracing", ] [[package]] @@ -6508,7 +8284,7 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit 0.22.26", + "toml_edit", ] [[package]] @@ -6535,6 +8311,28 @@ dependencies = [ "version_check", ] +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "proc-macro-hack" version = "0.5.20+deprecated" @@ -6543,13 +8341,13 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro-warning" -version = "0.4.2" +version = "1.84.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" +checksum = "75eea531cfcd120e0851a3f8aed42c4841f78c889eefafd96339c72677ae42c3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -6577,9 +8375,9 @@ dependencies = [ [[package]] name = "prometheus-client" -version = "0.21.2" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c99afa9a01501019ac3a14d71d9f94050346f55ca471ce90c799a15c58f61e2" +checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" dependencies = [ "dtoa", "itoa", @@ -6595,61 +8393,82 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "prost" -version = "0.11.9" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", - "prost-derive", + "prost-derive 0.12.6", ] [[package]] -name = "prost-build" -version = "0.11.9" +name = "prost" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" dependencies = [ "bytes", - "heck 0.4.1", - "itertools", - "lazy_static", + "prost-derive 0.13.5", +] + +[[package]] +name = "prost-build" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" +dependencies = [ + "heck 0.5.0", + "itertools 0.14.0", "log", "multimap", - "petgraph", - "prettyplease 0.1.25", - "prost", + "once_cell", + "petgraph 0.7.1", + "prettyplease", + "prost 0.13.5", "prost-types", "regex", - "syn 1.0.109", + "syn 2.0.104", "tempfile", - "which", ] [[package]] name = "prost-derive" -version = "0.11.9" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools", + "itertools 0.12.1", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.104", +] + +[[package]] +name = "prost-derive" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] name = "prost-types" -version = "0.11.9" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" dependencies = [ - "prost", + "prost 0.13.5", ] [[package]] @@ -6661,6 +8480,21 @@ dependencies = [ "cc", ] +[[package]] +name = "quanta" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" +dependencies = [ + "crossbeam-utils", + "libc", + "once_cell", + "raw-cpuid", + "wasi 0.11.1+wasi-snapshot-preview1", + "web-sys", + "winapi", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -6678,63 +8512,71 @@ dependencies = [ [[package]] name = "quick-protobuf-codec" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98" +checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" dependencies = [ - "asynchronous-codec", + "asynchronous-codec 0.7.0", "bytes", "quick-protobuf", "thiserror 1.0.69", - "unsigned-varint 0.7.2", + "unsigned-varint 0.8.0", ] [[package]] name = "quinn" -version = "0.10.2" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" +checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" dependencies = [ "bytes", + "cfg_aliases 0.2.1", "futures-io", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash", + "rustc-hash 2.1.1", "rustls", - "thiserror 1.0.69", + "socket2", + "thiserror 2.0.12", "tokio", "tracing", + "web-time", ] [[package]] name = "quinn-proto" -version = "0.10.6" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" +checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" dependencies = [ "bytes", - "rand 0.8.5", - "ring 0.16.20", - "rustc-hash", + "getrandom 0.3.3", + "lru-slab", + "rand 0.9.1", + "ring 0.17.14", + "rustc-hash 2.1.1", "rustls", + "rustls-pki-types", "slab", - "thiserror 1.0.69", + "thiserror 2.0.12", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.4.1" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" +checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" dependencies = [ - "bytes", + "cfg_aliases 0.2.1", "libc", - "socket2 0.5.10", + "once_cell", + "socket2", "tracing", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -6748,9 +8590,9 @@ dependencies = [ [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "radium" @@ -6782,6 +8624,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -6802,6 +8654,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + [[package]] name = "rand_core" version = "0.5.1" @@ -6820,6 +8682,25 @@ dependencies = [ "getrandom 0.2.16", ] +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + [[package]] name = "rand_hc" version = "0.2.0" @@ -6838,6 +8719,15 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "raw-cpuid" +version = "11.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" +dependencies = [ + "bitflags 2.9.1", +] + [[package]] name = "rawpointer" version = "0.2.1" @@ -6866,9 +8756,9 @@ dependencies = [ [[package]] name = "rcgen" -version = "0.10.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6" dependencies = [ "pem", "ring 0.16.20", @@ -6887,9 +8777,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ "bitflags 2.9.1", ] @@ -6922,17 +8812,30 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "regalloc2" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" +checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" +dependencies = [ + "fxhash", + "log", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regalloc2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6" dependencies = [ - "fxhash", + "hashbrown 0.13.2", "log", + "rustc-hash 1.1.0", "slice-group-by", "smallvec", ] @@ -6994,7 +8897,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ "hmac 0.12.1", - "subtle", + "subtle 2.6.1", ] [[package]] @@ -7045,6 +8948,12 @@ dependencies = [ "librocksdb-sys", ] +[[package]] +name = "route-recognizer" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" + [[package]] name = "rpassword" version = "7.4.0" @@ -7086,9 +8995,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" [[package]] name = "rustc-hash" @@ -7096,6 +9005,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -7158,50 +9073,81 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ "bitflags 2.9.1", "errno", "libc", "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "rustls" -version = "0.21.12" +version = "0.23.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" dependencies = [ "log", + "once_cell", "ring 0.17.14", - "rustls-webpki", - "sct", + "rustls-pki-types", + "rustls-webpki 0.103.4", + "subtle 2.6.1", + "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.6.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ "openssl-probe", - "rustls-pemfile", + "rustls-pki-types", "schannel", "security-framework", ] [[package]] -name = "rustls-pemfile" -version = "1.0.4" +name = "rustls-pki-types" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ - "base64 0.21.7", + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-platform-verifier" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19787cda76408ec5404443dc8b31795c87cd8fec49762dc75fa727740d34acc1" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki 0.103.4", + "security-framework", + "security-framework-sys", + "webpki-root-certs 0.26.11", + "windows-sys 0.59.0", ] +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.101.7" @@ -7212,12 +9158,33 @@ dependencies = [ "untrusted 0.9.0", ] +[[package]] +name = "rustls-webpki" +version = "0.103.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +dependencies = [ + "ring 0.17.14", + "rustls-pki-types", + "untrusted 0.9.0", +] + [[package]] name = "rustversion" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +[[package]] +name = "ruzstd" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5174a470eeb535a721ae9fdd6e291c2411a906b96592182d05217591d5c5cf7b" +dependencies = [ + "byteorder", + "derive_more 0.99.20", +] + [[package]] name = "rw-stream-sink" version = "0.4.0" @@ -7253,6 +9220,15 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher 0.4.4", +] + [[package]] name = "same-file" version = "1.0.6" @@ -7264,87 +9240,83 @@ dependencies = [ [[package]] name = "sc-allocator" -version = "4.1.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "31.0.0" dependencies = [ "log", - "sp-core", - "sp-wasm-interface", + "sp-core 36.1.0", + "sp-wasm-interface 21.0.1", "thiserror 1.0.69", ] [[package]] name = "sc-authority-discovery" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.50.0" dependencies = [ "async-trait", "futures", "futures-timer", "ip_network", - "libp2p", + "linked_hash_set", "log", - "multihash-codetable", "parity-scale-codec", - "prost", + "prost 0.12.6", "prost-build", "rand 0.8.5", "sc-client-api", "sc-network", + "sc-network-types", "sp-api", "sp-authority-discovery", "sp-blockchain", - "sp-core", + "sp-core 36.1.0", "sp-keystore", - "sp-runtime", + "sp-runtime 41.1.0", "substrate-prometheus-endpoint", "thiserror 1.0.69", ] [[package]] name = "sc-basic-authorship" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.49.0" dependencies = [ "futures", - "futures-timer", "log", "parity-scale-codec", "sc-block-builder", - "sc-client-api", "sc-proposer-metrics", "sc-telemetry", "sc-transaction-pool-api", "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 36.1.0", "sp-inherents", - "sp-runtime", + "sp-runtime 41.1.0", "substrate-prometheus-endpoint", ] [[package]] name = "sc-block-builder" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.44.0" dependencies = [ "parity-scale-codec", - "sc-client-api", "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core", + "sp-core 36.1.0", "sp-inherents", - "sp-runtime", + "sp-runtime 41.1.0", + "sp-trie", ] [[package]] name = "sc-chain-spec" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "43.0.0" dependencies = [ - "memmap2", + "array-bytes", + "docify", + "memmap2 0.9.7", + "parity-scale-codec", "sc-chain-spec-derive", "sc-client-api", "sc-executor", @@ -7353,35 +9325,39 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-core", - "sp-runtime", + "sp-core 36.1.0", + "sp-crypto-hashing 0.1.0", + "sp-genesis-builder", + "sp-io 40.0.1", + "sp-runtime 41.1.0", "sp-state-machine", + "sp-tracing 17.1.0", ] [[package]] name = "sc-chain-spec-derive" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "12.0.0" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "sc-cli" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.52.0" dependencies = [ "array-bytes", "chrono", "clap", "fdlimit", "futures", + "itertools 0.11.0", "libp2p-identity", "log", "names", + "parity-bip39", "parity-scale-codec", "rand 0.8.5", "regex", @@ -7389,29 +9365,29 @@ dependencies = [ "sc-client-api", "sc-client-db", "sc-keystore", + "sc-mixnet", "sc-network", "sc-service", "sc-telemetry", "sc-tracing", + "sc-transaction-pool", "sc-utils", "serde", "serde_json", "sp-blockchain", - "sp-core", + "sp-core 36.1.0", "sp-keyring", "sp-keystore", "sp-panic-handler", - "sp-runtime", + "sp-runtime 41.1.0", "sp-version", "thiserror 1.0.69", - "tiny-bip39", "tokio", ] [[package]] name = "sc-client-api" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "39.0.0" dependencies = [ "fnv", "futures", @@ -7424,20 +9400,19 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 36.1.0", "sp-database", - "sp-externalities", - "sp-runtime", + "sp-externalities 0.30.0", + "sp-runtime 41.1.0", "sp-state-machine", - "sp-statement-store", - "sp-storage", + "sp-storage 22.0.0", + "sp-trie", "substrate-prometheus-endpoint", ] [[package]] name = "sc-client-db" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.46.0" dependencies = [ "hash-db", "kvdb", @@ -7451,35 +9426,32 @@ dependencies = [ "sc-client-api", "sc-state-db", "schnellru", - "sp-arithmetic", + "sp-arithmetic 26.1.0", "sp-blockchain", - "sp-core", + "sp-core 36.1.0", "sp-database", - "sp-runtime", + "sp-runtime 41.1.0", "sp-state-machine", "sp-trie", ] [[package]] name = "sc-consensus" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.49.0" dependencies = [ "async-trait", "futures", - "futures-timer", - "libp2p-identity", "log", "mockall", "parking_lot 0.12.4", "sc-client-api", + "sc-network-types", "sc-utils", "serde", - "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", - "sp-runtime", + "sp-core 36.1.0", + "sp-runtime 41.1.0", "sp-state-machine", "substrate-prometheus-endpoint", "thiserror 1.0.69", @@ -7487,8 +9459,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.50.0" dependencies = [ "async-trait", "fork-tree", @@ -7505,63 +9476,60 @@ dependencies = [ "sc-consensus-slots", "sc-telemetry", "sc-transaction-pool-api", - "scale-info", "sp-api", - "sp-application-crypto", + "sp-application-crypto 40.1.0", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", "sp-consensus-slots", - "sp-core", + "sp-core 36.1.0", + "sp-crypto-hashing 0.1.0", "sp-inherents", "sp-keystore", - "sp-runtime", + "sp-runtime 41.1.0", "substrate-prometheus-endpoint", "thiserror 1.0.69", ] [[package]] name = "sc-consensus-babe-rpc" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.50.0" dependencies = [ "futures", - "jsonrpsee", + "jsonrpsee 0.24.9", "sc-consensus-babe", "sc-consensus-epochs", "sc-rpc-api", "serde", "sp-api", - "sp-application-crypto", + "sp-application-crypto 40.1.0", "sp-blockchain", "sp-consensus", "sp-consensus-babe", - "sp-core", + "sp-core 36.1.0", "sp-keystore", - "sp-runtime", + "sp-runtime 41.1.0", "thiserror 1.0.69", ] [[package]] name = "sc-consensus-epochs" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.49.0" dependencies = [ "fork-tree", "parity-scale-codec", "sc-client-api", "sc-consensus", "sp-blockchain", - "sp-runtime", + "sp-runtime 41.1.0", ] [[package]] name = "sc-consensus-grandpa" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.35.0" dependencies = [ - "ahash 0.8.12", + "ahash", "array-bytes", "async-trait", "dyn-clone", @@ -7580,31 +9548,33 @@ dependencies = [ "sc-network", "sc-network-common", "sc-network-gossip", + "sc-network-sync", + "sc-network-types", "sc-telemetry", "sc-transaction-pool-api", "sc-utils", "serde_json", "sp-api", - "sp-application-crypto", - "sp-arithmetic", + "sp-application-crypto 40.1.0", + "sp-arithmetic 26.1.0", "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", - "sp-core", + "sp-core 36.1.0", + "sp-crypto-hashing 0.1.0", "sp-keystore", - "sp-runtime", + "sp-runtime 41.1.0", "substrate-prometheus-endpoint", "thiserror 1.0.69", ] [[package]] name = "sc-consensus-grandpa-rpc" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.35.0" dependencies = [ "finality-grandpa", "futures", - "jsonrpsee", + "jsonrpsee 0.24.9", "log", "parity-scale-codec", "sc-client-api", @@ -7612,15 +9582,14 @@ dependencies = [ "sc-rpc", "serde", "sp-blockchain", - "sp-core", - "sp-runtime", + "sp-core 36.1.0", + "sp-runtime 41.1.0", "thiserror 1.0.69", ] [[package]] name = "sc-consensus-slots" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.49.0" dependencies = [ "async-trait", "futures", @@ -7630,307 +9599,332 @@ dependencies = [ "sc-client-api", "sc-consensus", "sc-telemetry", - "sp-arithmetic", + "sp-arithmetic 26.1.0", "sp-blockchain", "sp-consensus", "sp-consensus-slots", - "sp-core", + "sp-core 36.1.0", "sp-inherents", - "sp-runtime", + "sp-runtime 41.1.0", "sp-state-machine", ] [[package]] name = "sc-executor" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.42.0" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", "sc-executor-common", + "sc-executor-polkavm", "sc-executor-wasmtime", "schnellru", "sp-api", - "sp-core", - "sp-externalities", - "sp-io", + "sp-core 36.1.0", + "sp-externalities 0.30.0", + "sp-io 40.0.1", "sp-panic-handler", - "sp-runtime-interface", + "sp-runtime-interface 29.0.1", "sp-trie", "sp-version", - "sp-wasm-interface", + "sp-wasm-interface 21.0.1", "tracing", ] [[package]] name = "sc-executor-common" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.38.0" dependencies = [ + "polkavm", "sc-allocator", "sp-maybe-compressed-blob", - "sp-wasm-interface", + "sp-wasm-interface 21.0.1", "thiserror 1.0.69", - "wasm-instrument 0.3.0", + "wasm-instrument 0.4.0", +] + +[[package]] +name = "sc-executor-polkavm" +version = "0.35.0" +dependencies = [ + "log", + "polkavm", + "sc-executor-common", + "sp-wasm-interface 21.0.1", ] [[package]] name = "sc-executor-wasmtime" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.38.0" dependencies = [ "anyhow", - "cfg-if", - "libc", "log", + "parking_lot 0.12.4", "rustix 0.36.17", "sc-allocator", "sc-executor-common", - "sp-runtime-interface", - "sp-wasm-interface", + "sp-runtime-interface 29.0.1", + "sp-wasm-interface 21.0.1", "wasmtime", ] [[package]] name = "sc-informant" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.49.0" dependencies = [ - "ansi_term", + "console", "futures", "futures-timer", "log", "sc-client-api", "sc-network", - "sc-network-common", + "sc-network-sync", "sp-blockchain", - "sp-runtime", + "sp-runtime 41.1.0", ] [[package]] name = "sc-keystore" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "35.0.0" dependencies = [ "array-bytes", "parking_lot 0.12.4", "serde_json", - "sp-application-crypto", - "sp-core", + "sp-application-crypto 40.1.0", + "sp-core 36.1.0", + "sp-keystore", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-mixnet" +version = "0.20.0" +dependencies = [ + "array-bytes", + "arrayvec 0.7.6", + "blake2 0.10.6", + "bytes", + "futures", + "futures-timer", + "log", + "mixnet", + "parity-scale-codec", + "parking_lot 0.12.4", + "sc-client-api", + "sc-network", + "sc-network-types", + "sc-transaction-pool-api", + "sp-api", + "sp-consensus", + "sp-core 36.1.0", "sp-keystore", + "sp-mixnet", + "sp-runtime 41.1.0", "thiserror 1.0.69", ] [[package]] name = "sc-network" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.50.0" dependencies = [ "array-bytes", - "async-channel", + "async-channel 1.9.0", "async-trait", - "asynchronous-codec", + "asynchronous-codec 0.6.2", "bytes", + "cid 0.9.0", "either", "fnv", "futures", "futures-timer", "ip_network", "libp2p", - "libp2p-kad", "linked_hash_set", + "litep2p", "log", "mockall", "parity-scale-codec", "parking_lot 0.12.4", "partial_sort", "pin-project", + "prost 0.12.6", + "prost-build", "rand 0.8.5", "sc-client-api", "sc-network-common", + "sc-network-types", "sc-utils", + "schnellru", "serde", "serde_json", "smallvec", - "sp-arithmetic", + "sp-arithmetic 26.1.0", "sp-blockchain", - "sp-core", - "sp-runtime", + "sp-core 36.1.0", + "sp-runtime 41.1.0", "substrate-prometheus-endpoint", "thiserror 1.0.69", + "tokio", + "tokio-stream", "unsigned-varint 0.7.2", "void", "wasm-timer", "zeroize", ] -[[package]] -name = "sc-network-bitswap" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" -dependencies = [ - "async-channel", - "cid", - "futures", - "libp2p-identity", - "log", - "prost", - "prost-build", - "sc-client-api", - "sc-network", - "sp-blockchain", - "sp-runtime", - "thiserror 1.0.69", - "unsigned-varint 0.7.2", -] - [[package]] name = "sc-network-common" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.48.0" dependencies = [ - "async-trait", "bitflags 1.3.2", - "futures", - "libp2p-identity", "parity-scale-codec", - "prost-build", - "sc-consensus", - "sp-consensus", - "sp-consensus-grandpa", - "sp-runtime", + "sp-runtime 41.1.0", ] [[package]] name = "sc-network-gossip" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.50.0" dependencies = [ - "ahash 0.8.12", + "ahash", "futures", "futures-timer", - "libp2p-identity", "log", - "multiaddr", "sc-network", "sc-network-common", + "sc-network-sync", + "sc-network-types", "schnellru", - "sp-runtime", + "sp-runtime 41.1.0", "substrate-prometheus-endpoint", "tracing", ] [[package]] name = "sc-network-light" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.49.0" dependencies = [ "array-bytes", - "async-channel", + "async-channel 1.9.0", "futures", - "libp2p-identity", "log", "parity-scale-codec", - "prost", + "prost 0.12.6", "prost-build", "sc-client-api", "sc-network", + "sc-network-types", "sp-blockchain", - "sp-core", - "sp-runtime", + "sp-core 36.1.0", + "sp-runtime 41.1.0", "thiserror 1.0.69", ] [[package]] name = "sc-network-sync" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.49.0" dependencies = [ "array-bytes", - "async-channel", + "async-channel 1.9.0", "async-trait", "fork-tree", "futures", - "futures-timer", - "libp2p", "log", "mockall", "parity-scale-codec", - "prost", + "prost 0.12.6", "prost-build", "sc-client-api", "sc-consensus", "sc-network", "sc-network-common", + "sc-network-types", "sc-utils", "schnellru", "smallvec", - "sp-arithmetic", + "sp-arithmetic 26.1.0", "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", - "sp-core", - "sp-runtime", + "sp-core 36.1.0", + "sp-runtime 41.1.0", "substrate-prometheus-endpoint", "thiserror 1.0.69", + "tokio", + "tokio-stream", ] [[package]] name = "sc-network-transactions" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.49.0" dependencies = [ "array-bytes", "futures", - "libp2p", "log", "parity-scale-codec", "sc-network", "sc-network-common", + "sc-network-sync", + "sc-network-types", "sc-utils", "sp-consensus", - "sp-runtime", + "sp-runtime 41.1.0", "substrate-prometheus-endpoint", ] +[[package]] +name = "sc-network-types" +version = "0.16.0" +dependencies = [ + "bs58", + "bytes", + "ed25519-dalek", + "libp2p-identity", + "libp2p-kad", + "litep2p", + "log", + "multiaddr 0.18.2", + "multihash 0.19.3", + "rand 0.8.5", + "thiserror 1.0.69", + "zeroize", +] + [[package]] name = "sc-offchain" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "45.0.0" dependencies = [ - "array-bytes", "bytes", "fnv", "futures", "futures-timer", - "hyper", + "http-body-util", + "hyper 1.6.0", "hyper-rustls", - "libp2p", - "log", + "hyper-util", "num_cpus", "once_cell", "parity-scale-codec", "parking_lot 0.12.4", "rand 0.8.5", + "rustls", "sc-client-api", "sc-network", - "sc-network-common", + "sc-network-types", "sc-transaction-pool-api", "sc-utils", "sp-api", - "sp-core", - "sp-externalities", + "sp-core 36.1.0", + "sp-externalities 0.30.0", "sp-keystore", "sp-offchain", - "sp-runtime", + "sp-runtime 41.1.0", "threadpool", "tracing", ] [[package]] name = "sc-proposer-metrics" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.20.0" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7938,17 +9932,17 @@ dependencies = [ [[package]] name = "sc-rpc" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "45.0.0" dependencies = [ "futures", - "jsonrpsee", + "jsonrpsee 0.24.9", "log", "parity-scale-codec", "parking_lot 0.12.4", "sc-block-builder", "sc-chain-spec", "sc-client-api", + "sc-mixnet", "sc-rpc-api", "sc-tracing", "sc-transaction-pool-api", @@ -7956,11 +9950,11 @@ dependencies = [ "serde_json", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 36.1.0", "sp-keystore", "sp-offchain", "sp-rpc", - "sp-runtime", + "sp-runtime 41.1.0", "sp-session", "sp-statement-store", "sp-version", @@ -7969,31 +9963,39 @@ dependencies = [ [[package]] name = "sc-rpc-api" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.49.0" dependencies = [ - "jsonrpsee", + "jsonrpsee 0.24.9", "parity-scale-codec", "sc-chain-spec", + "sc-mixnet", "sc-transaction-pool-api", "scale-info", "serde", "serde_json", - "sp-core", + "sp-core 36.1.0", "sp-rpc", - "sp-runtime", + "sp-runtime 41.1.0", "sp-version", "thiserror 1.0.69", ] [[package]] name = "sc-rpc-server" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "22.0.0" dependencies = [ - "http", - "jsonrpsee", + "dyn-clone", + "forwarded-header-value", + "futures", + "governor", + "http 1.3.1", + "http-body-util", + "hyper 1.6.0", + "ip_network", + "jsonrpsee 0.24.9", "log", + "sc-rpc-api", + "serde", "serde_json", "substrate-prometheus-endpoint", "tokio", @@ -8003,47 +10005,65 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.50.0" dependencies = [ "array-bytes", "futures", "futures-util", "hex", - "jsonrpsee", + "itertools 0.11.0", + "jsonrpsee 0.24.9", "log", "parity-scale-codec", "parking_lot 0.12.4", + "rand 0.8.5", "sc-chain-spec", "sc-client-api", + "sc-rpc", "sc-transaction-pool-api", + "schnellru", "serde", "sp-api", "sp-blockchain", - "sp-core", - "sp-runtime", + "sp-core 36.1.0", + "sp-rpc", + "sp-runtime 41.1.0", "sp-version", + "substrate-prometheus-endpoint", "thiserror 1.0.69", + "tokio", "tokio-stream", ] +[[package]] +name = "sc-runtime-utilities" +version = "0.2.0" +dependencies = [ + "parity-scale-codec", + "sc-executor", + "sc-executor-common", + "sp-core 36.1.0", + "sp-crypto-hashing 0.1.0", + "sp-state-machine", + "sp-wasm-interface 21.0.1", + "thiserror 1.0.69", +] + [[package]] name = "sc-service" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.51.0" dependencies = [ "async-trait", "directories", "exit-future", "futures", "futures-timer", - "jsonrpsee", + "jsonrpsee 0.24.9", "log", "parity-scale-codec", "parking_lot 0.12.4", "pin-project", "rand 0.8.5", - "sc-block-builder", "sc-chain-spec", "sc-client-api", "sc-client-db", @@ -8052,11 +10072,11 @@ dependencies = [ "sc-informant", "sc-keystore", "sc-network", - "sc-network-bitswap", "sc-network-common", "sc-network-light", "sc-network-sync", "sc-network-transactions", + "sc-network-types", "sc-rpc", "sc-rpc-server", "sc-rpc-spec-v2", @@ -8066,18 +10086,19 @@ dependencies = [ "sc-transaction-pool", "sc-transaction-pool-api", "sc-utils", + "schnellru", "serde", "serde_json", "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", - "sp-externalities", + "sp-core 36.1.0", + "sp-externalities 0.30.0", "sp-keystore", - "sp-runtime", + "sp-runtime 41.1.0", "sp-session", "sp-state-machine", - "sp-storage", + "sp-storage 22.0.0", "sp-transaction-pool", "sp-transaction-storage-proof", "sp-trie", @@ -8093,21 +10114,19 @@ dependencies = [ [[package]] name = "sc-state-db" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.38.0" dependencies = [ "log", "parity-scale-codec", "parking_lot 0.12.4", - "sp-core", + "sp-core 36.1.0", ] [[package]] name = "sc-sync-state-rpc" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.50.0" dependencies = [ - "jsonrpsee", + "jsonrpsee 0.24.9", "parity-scale-codec", "sc-chain-spec", "sc-client-api", @@ -8117,15 +10136,15 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-runtime", + "sp-runtime 41.1.0", "thiserror 1.0.69", ] [[package]] name = "sc-sysinfo" -version = "6.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "42.0.0" dependencies = [ + "derive_more 0.99.20", "futures", "libc", "log", @@ -8135,15 +10154,14 @@ dependencies = [ "sc-telemetry", "serde", "serde_json", - "sp-core", - "sp-io", - "sp-std", + "sp-core 36.1.0", + "sp-crypto-hashing 0.1.0", + "sp-io 40.0.1", ] [[package]] name = "sc-telemetry" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "28.1.0" dependencies = [ "chrono", "futures", @@ -8161,27 +10179,25 @@ dependencies = [ [[package]] name = "sc-tracing" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "39.0.0" dependencies = [ - "ansi_term", - "atty", "chrono", - "lazy_static", + "console", + "is-terminal", "libc", "log", + "parity-scale-codec", "parking_lot 0.12.4", - "regex", - "rustc-hash", + "rustc-hash 1.1.0", "sc-client-api", "sc-tracing-proc-macro", "serde", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 36.1.0", "sp-rpc", - "sp-runtime", - "sp-tracing", + "sp-runtime 41.1.0", + "sp-tracing 17.1.0", "thiserror 1.0.69", "tracing", "tracing-log", @@ -8190,70 +10206,139 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "11.1.0" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "sc-transaction-pool" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "39.0.0" dependencies = [ "async-trait", "futures", "futures-timer", + "indexmap 2.10.0", + "itertools 0.11.0", "linked-hash-map", "log", "parity-scale-codec", - "parking_lot 0.12.4", - "sc-client-api", - "sc-transaction-pool-api", - "sc-utils", - "serde", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-runtime", - "sp-tracing", - "sp-transaction-pool", - "substrate-prometheus-endpoint", - "thiserror 1.0.69", + "parking_lot 0.12.4", + "sc-client-api", + "sc-transaction-pool-api", + "sc-utils", + "serde", + "sp-api", + "sp-blockchain", + "sp-core 36.1.0", + "sp-crypto-hashing 0.1.0", + "sp-runtime 41.1.0", + "sp-tracing 17.1.0", + "sp-transaction-pool", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "sc-transaction-pool-api" +version = "39.0.0" +dependencies = [ + "async-trait", + "futures", + "indexmap 2.10.0", + "log", + "parity-scale-codec", + "serde", + "sp-blockchain", + "sp-core 36.1.0", + "sp-runtime 41.1.0", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-utils" +version = "18.0.1" +dependencies = [ + "async-channel 1.9.0", + "futures", + "futures-timer", + "log", + "parking_lot 0.12.4", + "prometheus", + "sp-arithmetic 26.1.0", +] + +[[package]] +name = "scale-bits" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57b1e7f6b65ed1f04e79a85a57d755ad56d76fdf1e9bddcc9ae14f71fcdcf54" +dependencies = [ + "parity-scale-codec", + "scale-info", + "scale-type-resolver", + "serde", +] + +[[package]] +name = "scale-decode" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ae9cc099ae85ff28820210732b00f019546f36f33225f509fe25d5816864a0" +dependencies = [ + "derive_more 1.0.0", + "parity-scale-codec", + "primitive-types 0.13.1", + "scale-bits", + "scale-decode-derive", + "scale-type-resolver", + "smallvec", ] [[package]] -name = "sc-transaction-pool-api" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +name = "scale-decode-derive" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ed9401effa946b493f9f84dc03714cca98119b230497df6f3df6b84a2b03648" dependencies = [ - "async-trait", - "futures", - "log", + "darling", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "scale-encode" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f9271284d05d0749c40771c46180ce89905fd95aa72a2a2fddb4b7c0aa424db" +dependencies = [ + "derive_more 1.0.0", "parity-scale-codec", - "serde", - "sp-blockchain", - "sp-core", - "sp-runtime", - "thiserror 1.0.69", + "primitive-types 0.13.1", + "scale-bits", + "scale-encode-derive", + "scale-type-resolver", + "smallvec", ] [[package]] -name = "sc-utils" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +name = "scale-encode-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "102fbc6236de6c53906c0b262f12c7aa69c2bdc604862c12728f5f4d370bc137" dependencies = [ - "async-channel", - "futures", - "futures-timer", - "lazy_static", - "log", - "parking_lot 0.12.4", - "prometheus", - "sp-arithmetic", + "darling", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] @@ -8279,7 +10364,50 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", +] + +[[package]] +name = "scale-type-resolver" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0cded6518aa0bd6c1be2b88ac81bf7044992f0f154bfbabd5ad34f43512abcb" +dependencies = [ + "scale-info", + "smallvec", +] + +[[package]] +name = "scale-typegen" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc4c70c7fea2eef1740f0081d3fe385d8bee1eef11e9272d3bec7dc8e5438e0" +dependencies = [ + "proc-macro2", + "quote", + "scale-info", + "syn 2.0.104", + "thiserror 1.0.69", +] + +[[package]] +name = "scale-value" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e0ef2a0ee1e02a69ada37feb87ea1616ce9808aca072befe2d3131bf28576e" +dependencies = [ + "base58", + "blake2 0.10.6", + "derive_more 1.0.0", + "either", + "parity-scale-codec", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "scale-type-resolver", + "serde", + "yap", ] [[package]] @@ -8297,7 +10425,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "356285bbf17bea63d9e52e96bd18f039672ac92b55b8cb997d6162a2a37d1649" dependencies = [ - "ahash 0.8.12", + "ahash", "cfg-if", "hashbrown 0.13.2", ] @@ -8311,20 +10439,18 @@ dependencies = [ "arrayref", "arrayvec 0.5.2", "curve25519-dalek 2.1.3", - "getrandom 0.1.16", "merlin 2.0.1", - "rand 0.7.3", "rand_core 0.5.1", "sha2 0.8.2", - "subtle", + "subtle 2.6.1", "zeroize", ] [[package]] name = "schnorrkel" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" +checksum = "6e9fcb6c2e176e86ec703e22560d99d65a5ee9056ae45a08e13e84ebf796296f" dependencies = [ "aead", "arrayref", @@ -8335,10 +10461,16 @@ dependencies = [ "rand_core 0.6.4", "serde_bytes", "sha2 0.10.9", - "subtle", + "subtle 2.6.1", "zeroize", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" @@ -8352,13 +10484,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f6280af86e5f559536da57a45ebc84948833b3bee313a7dd25232e09c878a52" [[package]] -name = "sct" -version = "0.7.1" +name = "scrypt" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" dependencies = [ - "ring 0.17.14", - "untrusted 0.9.0", + "password-hash", + "pbkdf2", + "salsa20", + "sha2 0.10.9", ] [[package]] @@ -8371,24 +10505,63 @@ dependencies = [ "der", "generic-array 0.14.7", "pkcs8", - "subtle", + "serdect", + "subtle 2.6.1", "zeroize", ] [[package]] name = "secp256k1" -version = "0.24.3" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +dependencies = [ + "secp256k1-sys 0.8.2", +] + +[[package]] +name = "secp256k1" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +dependencies = [ + "secp256k1-sys 0.9.2", +] + +[[package]] +name = "secp256k1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" dependencies = [ - "secp256k1-sys", + "bitcoin_hashes 0.14.0", + "rand 0.8.5", + "secp256k1-sys 0.10.1", ] [[package]] name = "secp256k1-sys" -version = "0.6.1" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" +dependencies = [ + "cc", +] + +[[package]] +name = "secp256k1-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +dependencies = [ + "cc", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" dependencies = [ "cc", ] @@ -8402,14 +10575,23 @@ dependencies = [ "zeroize", ] +[[package]] +name = "secrecy" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" +dependencies = [ + "zeroize", +] + [[package]] name = "security-framework" -version = "2.11.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ "bitflags 2.9.1", - "core-foundation", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -8458,12 +10640,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -[[package]] -name = "send_wrapper" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" - [[package]] name = "serde" version = "1.0.219" @@ -8490,7 +10666,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -8598,12 +10774,6 @@ dependencies = [ "libc", ] -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" - [[package]] name = "signature" version = "2.2.0" @@ -8627,6 +10797,21 @@ dependencies = [ "wide", ] +[[package]] +name = "simple-dns" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dee851d0e5e7af3721faea1843e8015e820a234f81fda3dea9247e15bac9a86a" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "simple-mermaid" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" + [[package]] name = "siphasher" version = "0.3.11" @@ -8641,12 +10826,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" [[package]] name = "slice-group-by" @@ -8656,9 +10838,116 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "smallvec" -version = "1.15.0" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "smol" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" +dependencies = [ + "async-channel 2.5.0", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-net", + "async-process", + "blocking", + "futures-lite", +] + +[[package]] +name = "smoldot" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "966e72d77a3b2171bb7461d0cb91f43670c63558c62d7cf42809cae6c8b6b818" +dependencies = [ + "arrayvec 0.7.6", + "async-lock", + "atomic-take", + "base64 0.22.1", + "bip39", + "blake2-rfc", + "bs58", + "chacha20", + "crossbeam-queue", + "derive_more 0.99.20", + "ed25519-zebra", + "either", + "event-listener 5.4.0", + "fnv", + "futures-lite", + "futures-util", + "hashbrown 0.14.5", + "hex", + "hmac 0.12.1", + "itertools 0.13.0", + "libm", + "libsecp256k1", + "merlin 3.0.0", + "nom", + "num-bigint", + "num-rational", + "num-traits", + "pbkdf2", + "pin-project", + "poly1305", + "rand 0.8.5", + "rand_chacha 0.3.1", + "ruzstd", + "schnorrkel 0.11.5", + "serde", + "serde_json", + "sha2 0.10.9", + "sha3", + "siphasher 1.0.1", + "slab", + "smallvec", + "soketto 0.8.1", + "twox-hash", + "wasmi", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "smoldot-light" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "2a33b06891f687909632ce6a4e3fd7677b24df930365af3d0bcb078310129f3f" +dependencies = [ + "async-channel 2.5.0", + "async-lock", + "base64 0.22.1", + "blake2-rfc", + "bs58", + "derive_more 0.99.20", + "either", + "event-listener 5.4.0", + "fnv", + "futures-channel", + "futures-lite", + "futures-util", + "hashbrown 0.14.5", + "hex", + "itertools 0.13.0", + "log", + "lru", + "parking_lot 0.12.4", + "pin-project", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "siphasher 1.0.1", + "slab", + "smol", + "smoldot", + "zeroize", +] [[package]] name = "snap" @@ -8673,24 +10962,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" dependencies = [ "aes-gcm", - "blake2", + "blake2 0.10.6", "chacha20poly1305", "curve25519-dalek 4.1.3", "rand_core 0.6.4", "ring 0.17.14", "rustc_version 0.4.1", "sha2 0.10.9", - "subtle", -] - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", + "subtle 2.6.1", ] [[package]] @@ -8712,7 +10991,7 @@ dependencies = [ "base64 0.13.1", "bytes", "futures", - "http", + "http 0.2.12", "httparse", "log", "rand 0.8.5", @@ -8728,6 +11007,7 @@ dependencies = [ "base64 0.22.1", "bytes", "futures", + "http 1.3.1", "httparse", "log", "rand 0.8.5", @@ -8736,20 +11016,20 @@ dependencies = [ [[package]] name = "sp-api" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "36.0.1" dependencies = [ + "docify", "hash-db", "log", "parity-scale-codec", "scale-info", "sp-api-proc-macro", - "sp-core", - "sp-externalities", + "sp-core 36.1.0", + "sp-externalities 0.30.0", "sp-metadata-ir", - "sp-runtime", + "sp-runtime 41.1.0", + "sp-runtime-interface 29.0.1", "sp-state-machine", - "sp-std", "sp-trie", "sp-version", "thiserror 1.0.69", @@ -8757,125 +11037,154 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "22.0.1" dependencies = [ "Inflector", - "blake2", + "blake2 0.10.6", "expander", - "proc-macro-crate 1.1.3", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", +] + +[[package]] +name = "sp-application-crypto" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23030de8eae0272c705cf3e2ce0523a64708a6b53aa23f3cf9053ca63abd08d7" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core 26.0.0", + "sp-io 28.0.0", + "sp-std 12.0.0", ] [[package]] name = "sp-application-crypto" -version = "23.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "40.1.0" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 36.1.0", + "sp-io 40.0.1", +] + +[[package]] +name = "sp-arithmetic" +version = "21.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cf6e5c0c7c2e7be3a4a10af5316d2d40182915509a70f632a66c238a05c37b" dependencies = [ + "integer-sqrt", + "num-traits", "parity-scale-codec", "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-std", + "sp-std 12.0.0", + "static_assertions", ] [[package]] name = "sp-arithmetic" -version = "16.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "26.1.0" dependencies = [ + "docify", "integer-sqrt", "num-traits", "parity-scale-codec", "scale-info", "serde", - "sp-std", "static_assertions", ] [[package]] name = "sp-authority-discovery" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "36.0.0" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-application-crypto", - "sp-runtime", - "sp-std", + "sp-application-crypto 40.1.0", + "sp-runtime 41.1.0", ] [[package]] name = "sp-block-builder" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "36.0.0" dependencies = [ "sp-api", "sp-inherents", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", ] [[package]] name = "sp-blockchain" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "39.0.0" dependencies = [ "futures", - "log", "parity-scale-codec", "parking_lot 0.12.4", "schnellru", "sp-api", "sp-consensus", + "sp-core 36.1.0", "sp-database", - "sp-runtime", + "sp-runtime 41.1.0", "sp-state-machine", "thiserror 1.0.69", + "tracing", ] [[package]] name = "sp-consensus" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.42.0" dependencies = [ "async-trait", "futures", "log", - "sp-core", "sp-inherents", - "sp-runtime", + "sp-runtime 41.1.0", "sp-state-machine", "thiserror 1.0.69", ] +[[package]] +name = "sp-consensus-aura" +version = "0.42.0" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto 40.1.0", + "sp-consensus-slots", + "sp-inherents", + "sp-runtime 41.1.0", + "sp-timestamp", +] + [[package]] name = "sp-consensus-babe" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.42.1" dependencies = [ "async-trait", "parity-scale-codec", "scale-info", "serde", "sp-api", - "sp-application-crypto", + "sp-application-crypto 40.1.0", "sp-consensus-slots", - "sp-core", + "sp-core 36.1.0", "sp-inherents", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", "sp-timestamp", ] [[package]] name = "sp-consensus-grandpa" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "23.1.0" dependencies = [ "finality-grandpa", "log", @@ -8883,74 +11192,98 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-application-crypto", - "sp-core", + "sp-application-crypto 40.1.0", + "sp-core 36.1.0", "sp-keystore", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", ] [[package]] name = "sp-consensus-slots" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.42.1" dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-std", "sp-timestamp", ] [[package]] name = "sp-core" -version = "21.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0db34a19be2efa0398a9506a365392d93a85220856d55e0eb78165ad2e1bedc" +dependencies = [ + "bip39", + "bitflags 1.3.2", + "bounded-collections 0.1.9", + "hash-db", + "hash256-std-hasher", + "log", + "merlin 2.0.1", + "parity-scale-codec", + "paste", + "primitive-types 0.12.2", + "scale-info", + "schnorrkel 0.9.1", + "secrecy 0.8.0", + "sp-debug-derive 12.0.0", + "sp-runtime-interface 22.0.0", + "sp-std 12.0.0", + "sp-storage 17.0.0", + "ss58-registry", + "zeroize", +] + +[[package]] +name = "sp-core" +version = "36.1.0" dependencies = [ + "ark-vrf", "array-bytes", "bitflags 1.3.2", - "blake2", - "bounded-collections", - "bs58 0.4.0", + "blake2 0.10.6", + "bounded-collections 0.2.4", + "bs58", "dyn-clonable", "ed25519-zebra", "futures", "hash-db", "hash256-std-hasher", "impl-serde", - "lazy_static", + "itertools 0.11.0", + "k256", "libsecp256k1", "log", - "merlin 2.0.1", + "merlin 3.0.0", + "parity-bip39", "parity-scale-codec", "parking_lot 0.12.4", "paste", - "primitive-types", + "primitive-types 0.13.1", "rand 0.8.5", - "regex", "scale-info", - "schnorrkel 0.9.1", - "secp256k1", - "secrecy", - "serde", - "sp-core-hashing", - "sp-debug-derive", - "sp-externalities", - "sp-runtime-interface", - "sp-std", - "sp-storage", + "schnorrkel 0.11.5", + "secp256k1 0.28.2", + "secrecy 0.8.0", + "serde", + "sp-crypto-hashing 0.1.0", + "sp-debug-derive 14.0.0", + "sp-externalities 0.30.0", + "sp-runtime-interface 29.0.1", + "sp-std 14.0.0", + "sp-storage 22.0.0", "ss58-registry", "substrate-bip39", "thiserror 1.0.69", - "tiny-bip39", "tracing", + "w3f-bls", "zeroize", ] [[package]] -name = "sp-core-hashing" -version = "9.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +name = "sp-crypto-hashing" +version = "0.1.0" dependencies = [ "blake2b_simd", "byteorder", @@ -8961,19 +11294,31 @@ dependencies = [ ] [[package]] -name = "sp-core-hashing-proc-macro" -version = "9.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +name = "sp-crypto-hashing" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9927a7f81334ed5b8a98a4a978c81324d12bd9713ec76b5c68fd410174c5eb" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest 0.10.7", + "sha2 0.10.9", + "sha3", + "twox-hash", +] + +[[package]] +name = "sp-crypto-hashing-proc-macro" +version = "0.1.0" dependencies = [ "quote", - "sp-core-hashing", - "syn 2.0.101", + "sp-crypto-hashing 0.1.0", + "syn 2.0.104", ] [[package]] name = "sp-database" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "10.0.0" dependencies = [ "kvdb", "parking_lot 0.12.4", @@ -8981,70 +11326,106 @@ dependencies = [ [[package]] name = "sp-debug-derive" -version = "8.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "12.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50535e1a5708d3ba5c1195b59ebefac61cc8679c2c24716b87a86e8b7ed2e4a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "sp-debug-derive" +version = "14.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "sp-externalities" -version = "0.19.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884d05160bc89d0943d1c9fb8006c3d44b80f37f8af607aeff8d4d9cc82e279a" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-std 12.0.0", + "sp-storage 17.0.0", +] + +[[package]] +name = "sp-externalities" +version = "0.30.0" dependencies = [ "environmental", "parity-scale-codec", - "sp-std", - "sp-storage", + "sp-storage 22.0.0", ] [[package]] name = "sp-genesis-builder" -version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.17.0" dependencies = [ + "parity-scale-codec", + "scale-info", "serde_json", "sp-api", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", ] [[package]] name = "sp-inherents" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "36.0.0" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", "thiserror 1.0.69", ] [[package]] name = "sp-io" -version = "23.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301c0ce94f80b324465a6f6173183aa07b26bd71d67f94a44de1fd11dea4a7cb" +dependencies = [ + "bytes", + "parity-scale-codec", + "rustversion", + "sp-core 26.0.0", + "sp-externalities 0.23.0", + "sp-runtime-interface 22.0.0", + "sp-std 12.0.0", + "sp-tracing 14.0.0", + "tracing", + "tracing-core", +] + +[[package]] +name = "sp-io" +version = "40.0.1" dependencies = [ "bytes", - "ed25519 1.5.3", - "ed25519-dalek 1.0.1", + "docify", + "ed25519-dalek", "libsecp256k1", "log", "parity-scale-codec", + "polkavm-derive", "rustversion", - "secp256k1", - "sp-core", - "sp-externalities", + "secp256k1 0.28.2", + "sp-core 36.1.0", + "sp-crypto-hashing 0.1.0", + "sp-externalities 0.30.0", "sp-keystore", - "sp-runtime-interface", + "sp-runtime-interface 29.0.1", "sp-state-machine", - "sp-std", - "sp-tracing", + "sp-tracing 17.1.0", "sp-trie", "tracing", "tracing-core", @@ -9052,31 +11433,26 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "24.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "41.0.0" dependencies = [ - "lazy_static", - "sp-core", - "sp-runtime", - "strum", + "sp-core 36.1.0", + "sp-runtime 41.1.0", + "strum 0.26.3", ] [[package]] name = "sp-keystore" -version = "0.27.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.42.0" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", - "sp-core", - "sp-externalities", - "thiserror 1.0.69", + "sp-core 36.1.0", + "sp-externalities 0.30.0", ] [[package]] name = "sp-maybe-compressed-blob" -version = "4.1.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "11.0.0" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -9084,144 +11460,200 @@ dependencies = [ [[package]] name = "sp-metadata-ir" -version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.10.0" +dependencies = [ + "frame-metadata 20.0.0", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "sp-mixnet" +version = "0.14.0" dependencies = [ - "frame-metadata", "parity-scale-codec", "scale-info", - "sp-std", + "sp-api", + "sp-application-crypto 40.1.0", ] [[package]] name = "sp-npos-elections" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "36.2.0" dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-arithmetic", - "sp-core", - "sp-runtime", - "sp-std", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", + "sp-runtime 41.1.0", ] [[package]] name = "sp-offchain" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "36.0.0" dependencies = [ "sp-api", - "sp-core", - "sp-runtime", + "sp-core 36.1.0", + "sp-runtime 41.1.0", ] [[package]] name = "sp-panic-handler" -version = "8.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "13.0.2" dependencies = [ "backtrace", - "lazy_static", "regex", ] [[package]] name = "sp-rpc" -version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "34.0.0" dependencies = [ - "rustc-hash", + "rustc-hash 1.1.0", "serde", - "sp-core", + "sp-core 36.1.0", +] + +[[package]] +name = "sp-runtime" +version = "29.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "082bae4a164b8b629ce9cee79ff3c6b20e66d11d8ef37398796567d616325da4" +dependencies = [ + "either", + "hash256-std-hasher", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "paste", + "scale-info", + "sp-application-crypto 28.0.0", + "sp-arithmetic 21.0.0", + "sp-core 26.0.0", + "sp-io 28.0.0", + "sp-std 12.0.0", + "sp-weights 25.0.0", ] [[package]] name = "sp-runtime" -version = "24.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "41.1.0" dependencies = [ + "binary-merkle-tree", + "docify", "either", "hash256-std-hasher", "impl-trait-for-tuples", "log", + "num-traits", "parity-scale-codec", "paste", "rand 0.8.5", "scale-info", "serde", - "sp-application-crypto", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-std", - "sp-weights", + "simple-mermaid", + "sp-application-crypto 40.1.0", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-std 14.0.0", + "sp-trie", + "sp-weights 31.1.0", + "tracing", + "tuplex", ] [[package]] name = "sp-runtime-interface" -version = "17.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "695bba5d981a6fd3131b098d65f620601bd822501612bfb65897d4bb660762b1" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "primitive-types 0.12.2", + "sp-externalities 0.23.0", + "sp-runtime-interface-proc-macro 15.0.0", + "sp-std 12.0.0", + "sp-storage 17.0.0", + "sp-tracing 14.0.0", + "sp-wasm-interface 18.0.0", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface" +version = "29.0.1" dependencies = [ "bytes", "impl-trait-for-tuples", "parity-scale-codec", - "primitive-types", - "sp-externalities", - "sp-runtime-interface-proc-macro", - "sp-std", - "sp-storage", - "sp-tracing", - "sp-wasm-interface", + "polkavm-derive", + "primitive-types 0.13.1", + "sp-externalities 0.30.0", + "sp-runtime-interface-proc-macro 18.0.0", + "sp-std 14.0.0", + "sp-storage 22.0.0", + "sp-tracing 17.1.0", + "sp-wasm-interface 21.0.1", "static_assertions", ] [[package]] name = "sp-runtime-interface-proc-macro" -version = "11.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "15.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2afcbd1bd18d323371111b66b7ac2870bdc1c86c3d7b0dae67b112ca52b4d8" dependencies = [ "Inflector", "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "18.0.0" +dependencies = [ + "Inflector", + "expander", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] name = "sp-session" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "38.1.0" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-core", + "sp-core 36.1.0", "sp-keystore", - "sp-runtime", + "sp-runtime 41.1.0", "sp-staking", - "sp-std", ] [[package]] name = "sp-staking" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "38.0.0" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-runtime", - "sp-std", + "sp-core 36.1.0", + "sp-runtime 41.1.0", ] [[package]] name = "sp-state-machine" -version = "0.28.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.45.0" dependencies = [ "hash-db", "log", @@ -9229,10 +11661,9 @@ dependencies = [ "parking_lot 0.12.4", "rand 0.8.5", "smallvec", - "sp-core", - "sp-externalities", + "sp-core 36.1.0", + "sp-externalities 0.30.0", "sp-panic-handler", - "sp-std", "sp-trie", "thiserror 1.0.69", "tracing", @@ -9241,66 +11672,88 @@ dependencies = [ [[package]] name = "sp-statement-store" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "20.1.0" dependencies = [ "aes-gcm", - "curve25519-dalek 3.2.0", - "ed25519-dalek 1.0.1", + "curve25519-dalek 4.1.3", + "ed25519-dalek", "hkdf", "parity-scale-codec", "rand 0.8.5", "scale-info", "sha2 0.10.9", "sp-api", - "sp-application-crypto", - "sp-core", - "sp-externalities", - "sp-runtime", - "sp-runtime-interface", - "sp-std", + "sp-application-crypto 40.1.0", + "sp-core 36.1.0", + "sp-crypto-hashing 0.1.0", + "sp-externalities 0.30.0", + "sp-runtime 41.1.0", + "sp-runtime-interface 29.0.1", "thiserror 1.0.69", - "x25519-dalek 2.0.0-pre.1", + "x25519-dalek", ] [[package]] name = "sp-std" -version = "8.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "12.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54c78c5a66682568cc7b153603c5d01a2cc8f5c221c7b1e921517a0eef18ae05" + +[[package]] +name = "sp-std" +version = "14.0.0" + +[[package]] +name = "sp-storage" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016f20812cc51bd479cc88d048c35d44cd3adde4accdb159d49d6050f2953595" +dependencies = [ + "parity-scale-codec", + "ref-cast", + "sp-debug-derive 12.0.0", + "sp-std 12.0.0", +] [[package]] name = "sp-storage" -version = "13.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "22.0.0" dependencies = [ "impl-serde", "parity-scale-codec", "ref-cast", "serde", - "sp-debug-derive", - "sp-std", + "sp-debug-derive 14.0.0", ] [[package]] name = "sp-timestamp" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "36.0.0" dependencies = [ "async-trait", "parity-scale-codec", "sp-inherents", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", "thiserror 1.0.69", ] [[package]] name = "sp-tracing" -version = "10.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "14.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d727cb5265641ffbb7d4e42c18b63e29f6cfdbd240aae3bcf093c3d6eb29a19" +dependencies = [ + "parity-scale-codec", + "sp-std 12.0.0", + "tracing", + "tracing-core", +] + +[[package]] +name = "sp-tracing" +version = "17.1.0" dependencies = [ "parity-scale-codec", - "sp-std", "tracing", "tracing-core", "tracing-subscriber", @@ -9308,45 +11761,40 @@ dependencies = [ [[package]] name = "sp-transaction-pool" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "36.0.0" dependencies = [ "sp-api", - "sp-runtime", + "sp-runtime 41.1.0", ] [[package]] name = "sp-transaction-storage-proof" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "36.1.0" dependencies = [ "async-trait", "parity-scale-codec", "scale-info", - "sp-core", + "sp-core 36.1.0", "sp-inherents", - "sp-runtime", - "sp-std", + "sp-runtime 41.1.0", "sp-trie", ] [[package]] name = "sp-trie" -version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "39.1.0" dependencies = [ - "ahash 0.8.12", + "ahash", "hash-db", - "hashbrown 0.13.2", - "lazy_static", "memory-db", "nohash-hasher", "parity-scale-codec", "parking_lot 0.12.4", + "rand 0.8.5", "scale-info", "schnellru", - "sp-core", - "sp-std", + "sp-core 36.1.0", + "sp-externalities 0.30.0", "thiserror 1.0.69", "tracing", "trie-db", @@ -9355,58 +11803,79 @@ dependencies = [ [[package]] name = "sp-version" -version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "39.0.0" dependencies = [ "impl-serde", "parity-scale-codec", "parity-wasm", "scale-info", "serde", - "sp-core-hashing-proc-macro", - "sp-runtime", - "sp-std", + "sp-crypto-hashing-proc-macro", + "sp-runtime 41.1.0", + "sp-std 14.0.0", "sp-version-proc-macro", "thiserror 1.0.69", ] [[package]] name = "sp-version-proc-macro" -version = "8.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "15.0.0" dependencies = [ "parity-scale-codec", + "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "sp-wasm-interface" -version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5d85813d46a22484cdf5e5afddbbe85442dd1b4d84d67a8c7792f92f9f93607" +dependencies = [ + "impl-trait-for-tuples", + "parity-scale-codec", + "sp-std 12.0.0", +] + +[[package]] +name = "sp-wasm-interface" +version = "21.0.1" dependencies = [ "anyhow", "impl-trait-for-tuples", "log", "parity-scale-codec", - "sp-std", "wasmtime", ] [[package]] name = "sp-weights" -version = "20.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1689f9594c2c4d09ede3d8a991a9eb900654e424fb00b62f2b370170af347acd" +dependencies = [ + "parity-scale-codec", + "scale-info", + "smallvec", + "sp-arithmetic 21.0.0", + "sp-core 26.0.0", + "sp-debug-derive 12.0.0", + "sp-std 12.0.0", +] + +[[package]] +name = "sp-weights" +version = "31.1.0" dependencies = [ + "bounded-collections 0.2.4", "parity-scale-codec", "scale-info", "serde", "smallvec", - "sp-arithmetic", - "sp-core", - "sp-debug-derive", - "sp-std", + "sp-arithmetic 26.1.0", + "sp-debug-derive 14.0.0", ] [[package]] @@ -9421,6 +11890,15 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "spinning_top" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" +dependencies = [ + "lock_api", +] + [[package]] name = "spki" version = "0.7.3" @@ -9452,6 +11930,68 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +[[package]] +name = "staging-xcm" +version = "16.2.0" +dependencies = [ + "array-bytes", + "bounded-collections 0.2.4", + "derive-where", + "environmental", + "frame-support", + "hex-literal 0.4.1", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-runtime 41.1.0", + "sp-weights 31.1.0", + "xcm-procedural", +] + +[[package]] +name = "staging-xcm-builder" +version = "20.1.1" +dependencies = [ + "environmental", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "pallet-asset-conversion", + "pallet-transaction-payment 40.0.0", + "parity-scale-codec", + "polkadot-parachain-primitives", + "scale-info", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-weights 31.1.0", + "staging-xcm", + "staging-xcm-executor", + "tracing", +] + +[[package]] +name = "staging-xcm-executor" +version = "19.1.2" +dependencies = [ + "environmental", + "frame-benchmarking", + "frame-support", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-arithmetic 26.1.0", + "sp-core 36.1.0", + "sp-io 40.0.1", + "sp-runtime 41.1.0", + "sp-weights 31.1.0", + "staging-xcm", + "tracing", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -9497,8 +12037,14 @@ name = "strum" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "strum_macros", + "strum_macros 0.26.4", ] [[package]] @@ -9515,31 +12061,41 @@ dependencies = [ ] [[package]] -name = "substrate-bip39" -version = "0.4.6" +name = "strum_macros" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a7590dc041b9bc2825e52ce5af8416c73dbe9d0654402bfd4b4941938b94d8f" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.104", +] + +[[package]] +name = "substrate-bip39" +version = "0.6.0" dependencies = [ - "hmac 0.11.0", - "pbkdf2 0.8.0", - "schnorrkel 0.11.4", - "sha2 0.9.9", + "hmac 0.12.1", + "pbkdf2", + "schnorrkel 0.11.5", + "sha2 0.10.9", "zeroize", ] [[package]] name = "substrate-build-script-utils" -version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "11.0.0" [[package]] name = "substrate-frame-rpc-system" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "44.0.0" dependencies = [ + "docify", "frame-system-rpc-runtime-api", "futures", - "jsonrpsee", + "jsonrpsee 0.24.9", "log", "parity-scale-codec", "sc-rpc-api", @@ -9547,16 +12103,17 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core", - "sp-runtime", + "sp-core 36.1.0", + "sp-runtime 41.1.0", ] [[package]] name = "substrate-prometheus-endpoint" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "0.17.2" dependencies = [ - "hyper", + "http-body-util", + "hyper 1.6.0", + "hyper-util", "log", "prometheus", "thiserror 1.0.69", @@ -9565,48 +12122,208 @@ dependencies = [ [[package]] name = "substrate-test-utils" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" -dependencies = [ - "futures", - "substrate-test-utils-derive", - "tokio", -] - -[[package]] -name = "substrate-test-utils-derive" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" -dependencies = [ - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn 2.0.101", -] +version = "3.0.0" [[package]] name = "substrate-wasm-builder" -version = "5.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#2d1d63e12ae5e7fab8a51172026823a4913bdac7" +version = "26.0.1" dependencies = [ - "ansi_term", "build-helper", "cargo_metadata", + "console", "filetime", + "jobserver", "parity-wasm", + "polkavm-linker", + "shlex", "sp-maybe-compressed-blob", - "strum", + "strum 0.26.3", "tempfile", - "toml 0.7.8", + "toml 0.8.23", "walkdir", "wasm-opt", ] [[package]] name = "subtle" -version = "2.4.1" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "subxt" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c17d7ec2359d33133b63c97e28c8b7cd3f0a5bc6ce567ae3aef9d9e85be3433" +dependencies = [ + "async-trait", + "derive-where", + "either", + "frame-metadata 17.0.0", + "futures", + "hex", + "impl-serde", + "jsonrpsee 0.24.9", + "parity-scale-codec", + "polkadot-sdk", + "primitive-types 0.13.1", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "scale-value", + "serde", + "serde_json", + "subxt-core", + "subxt-lightclient", + "subxt-macro", + "subxt-metadata", + "thiserror 1.0.69", + "tokio", + "tokio-util", + "tracing", + "url", + "web-time", +] + +[[package]] +name = "subxt-codegen" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6550ef451c77db6e3bc7c56fb6fe1dca9398a2c8fc774b127f6a396a769b9c5b" +dependencies = [ + "heck 0.5.0", + "parity-scale-codec", + "proc-macro2", + "quote", + "scale-info", + "scale-typegen", + "subxt-metadata", + "syn 2.0.104", + "thiserror 1.0.69", +] + +[[package]] +name = "subxt-core" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7a1bc6c9c1724971636a66e3225a7253cdb35bb6efb81524a6c71c04f08c59" +dependencies = [ + "base58", + "blake2 0.10.6", + "derive-where", + "frame-decode", + "frame-metadata 17.0.0", + "hashbrown 0.14.5", + "hex", + "impl-serde", + "keccak-hash", + "parity-scale-codec", + "polkadot-sdk", + "primitive-types 0.13.1", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "scale-value", + "serde", + "serde_json", + "subxt-metadata", + "tracing", +] + +[[package]] +name = "subxt-lightclient" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ebc9131da4d0ba1f7814495b8cc79698798ccd52cacd7bcefe451e415bd945" +dependencies = [ + "futures", + "futures-util", + "serde", + "serde_json", + "smoldot-light", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "subxt-macro" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7819c5e09aae0319981ee853869f2fcd1fac4db8babd0d004c17161297aadc05" +dependencies = [ + "darling", + "parity-scale-codec", + "proc-macro-error2", + "quote", + "scale-typegen", + "subxt-codegen", + "subxt-utils-fetchmetadata", + "syn 2.0.104", +] + +[[package]] +name = "subxt-metadata" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aacd4e7484fef58deaa2dcb32d94753a864b208a668c0dd0c28be1d8abeeadb2" +dependencies = [ + "frame-decode", + "frame-metadata 17.0.0", + "hashbrown 0.14.5", + "parity-scale-codec", + "polkadot-sdk", + "scale-info", +] + +[[package]] +name = "subxt-signer" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d680352d04665b1e4eb6f9d2a54b800c4d8e1b20478e69be1b7d975b08d9fc34" +dependencies = [ + "base64 0.22.1", + "bip32", + "bip39", + "cfg-if", + "crypto_secretbox", + "hex", + "hmac 0.12.1", + "keccak-hash", + "parity-scale-codec", + "pbkdf2", + "polkadot-sdk", + "regex", + "schnorrkel 0.11.5", + "scrypt", + "secp256k1 0.30.0", + "secrecy 0.10.3", + "serde", + "serde_json", + "sha2 0.10.9", + "subxt-core", + "zeroize", +] + +[[package]] +name = "subxt-utils-fetchmetadata" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "a3c53bc3eeaacc143a2f29ace4082edd2edaccab37b69ad20befba9fb00fdb3d" +dependencies = [ + "hex", + "parity-scale-codec", + "thiserror 1.0.69", +] [[package]] name = "syn" @@ -9621,9 +12338,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.101" +version = "2.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ "proc-macro2", "quote", @@ -9650,7 +12367,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -9660,7 +12377,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags 2.9.1", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys", ] @@ -9674,6 +12391,12 @@ dependencies = [ "libc", ] +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + [[package]] name = "tap" version = "1.0.1" @@ -9695,7 +12418,7 @@ dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix 1.0.7", + "rustix 1.0.8", "windows-sys 0.59.0", ] @@ -9708,6 +12431,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "terminal_size" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" +dependencies = [ + "rustix 1.0.8", + "windows-sys 0.59.0", +] + [[package]] name = "termtree" version = "0.5.1" @@ -9740,7 +12473,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -9751,7 +12484,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -9762,12 +12495,11 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] @@ -9779,6 +12511,17 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "tikv-jemalloc-ctl" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619bfed27d807b54f7f776b9430d4f8060e66ee138a28632ca898584d462c31c" +dependencies = [ + "libc", + "paste", + "tikv-jemalloc-sys", +] + [[package]] name = "tikv-jemalloc-sys" version = "0.5.4+5.3.0-patched" @@ -9819,25 +12562,6 @@ dependencies = [ "time-core", ] -[[package]] -name = "tiny-bip39" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" -dependencies = [ - "anyhow", - "hmac 0.12.1", - "once_cell", - "pbkdf2 0.11.0", - "rand 0.8.5", - "rustc-hash", - "sha2 0.10.9", - "thiserror 1.0.69", - "unicode-normalization", - "wasm-bindgen", - "zeroize", -] - [[package]] name = "tiny-keccak" version = "2.0.2" @@ -9874,18 +12598,20 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.1" +version = "1.46.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", "parking_lot 0.12.4", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.10", + "slab", + "socket2", "tokio-macros", "windows-sys 0.52.0", ] @@ -9898,14 +12624,14 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ "rustls", "tokio", @@ -9923,6 +12649,22 @@ dependencies = [ "tokio-util", ] +[[package]] +name = "tokio-tungstenite" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" +dependencies = [ + "futures-util", + "log", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tungstenite", +] + [[package]] name = "tokio-util" version = "0.7.15" @@ -9948,48 +12690,44 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.8" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.19.15", + "toml_edit", ] [[package]] name = "toml_datetime" -version = "0.6.9" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.5.40", + "toml_write", + "winnow", ] [[package]] -name = "toml_edit" -version = "0.22.26" +name = "toml_write" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" -dependencies = [ - "indexmap 2.9.0", - "toml_datetime", - "winnow 0.7.10", -] +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "tower" @@ -9997,6 +12735,10 @@ version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", "tower-layer", "tower-service", "tracing", @@ -10004,17 +12746,15 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.4.4" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "bitflags 2.9.1", "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", "pin-project-lite", "tower-layer", "tower-service", @@ -10046,20 +12786,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", @@ -10076,141 +12816,76 @@ dependencies = [ ] [[package]] -name = "tracing-log" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +name = "tracing-gum" +version = "19.0.0" dependencies = [ - "log", - "once_cell", - "tracing-core", + "coarsetime", + "polkadot-primitives", + "tracing", + "tracing-gum-proc-macro", ] [[package]] -name = "tracing-serde" -version = "0.1.3" +name = "tracing-gum-proc-macro" +version = "5.0.0" +dependencies = [ + "expander", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "serde", + "log", + "once_cell", "tracing-core", ] [[package]] name = "tracing-subscriber" -version = "0.2.25" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ - "ansi_term", - "chrono", - "lazy_static", "matchers", - "parking_lot 0.11.2", + "nu-ansi-term", + "once_cell", + "parking_lot 0.12.4", "regex", - "serde", - "serde_json", "sharded-slab", "smallvec", "thread_local", + "time", "tracing", - "tracing-core", - "tracing-log", - "tracing-serde", -] - -[[package]] -name = "trie-db" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85" -dependencies = [ - "hash-db", - "hashbrown 0.13.2", - "log", - "rustc-hex", - "smallvec", -] - -[[package]] -name = "trie-root" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" -dependencies = [ - "hash-db", -] - -[[package]] -name = "trust-dns-proto" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner 0.5.1", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.2.3", - "ipnet", - "lazy_static", - "rand 0.8.5", - "smallvec", - "socket2 0.4.10", - "thiserror 1.0.69", - "tinyvec", - "tokio", - "tracing", - "url", + "tracing-core", + "tracing-log", ] [[package]] -name = "trust-dns-proto" -version = "0.23.2" +name = "trie-db" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374" +checksum = "6c0670ab45a6b7002c7df369fee950a27cf29ae0474343fd3a15aa15f691e7a6" dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner 0.6.1", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.4.0", - "ipnet", - "once_cell", - "rand 0.8.5", + "hash-db", + "log", + "rustc-hex", "smallvec", - "thiserror 1.0.69", - "tinyvec", - "tokio", - "tracing", - "url", ] [[package]] -name = "trust-dns-resolver" -version = "0.23.2" +name = "trie-root" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6" +checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lru-cache", - "once_cell", - "parking_lot 0.12.4", - "rand 0.8.5", - "resolv-conf", - "smallvec", - "thiserror 1.0.69", - "tokio", - "tracing", - "trust-dns-proto 0.23.2", + "hash-db", ] [[package]] @@ -10225,6 +12900,32 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" +[[package]] +name = "tungstenite" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" +dependencies = [ + "bytes", + "data-encoding", + "http 1.3.1", + "httparse", + "log", + "rand 0.9.1", + "rustls", + "rustls-pki-types", + "sha1", + "thiserror 2.0.12", + "url", + "utf-8", +] + +[[package]] +name = "tuplex" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "676ac81d5454c4dcf37955d34fa8626ede3490f744b86ca14a7b90168d2a08aa" + [[package]] name = "twox-hash" version = "1.6.3" @@ -10262,10 +12963,16 @@ dependencies = [ ] [[package]] -name = "unicode-bidi" -version = "0.3.18" +name = "uint" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" +checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] [[package]] name = "unicode-ident" @@ -10275,9 +12982,9 @@ checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-normalization" -version = "0.1.24" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] @@ -10290,15 +12997,9 @@ checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[package]] -name = "unicode-width" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] name = "unicode-xid" @@ -10313,7 +13014,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common", - "subtle", + "subtle 2.6.1", ] [[package]] @@ -10322,7 +13023,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" dependencies = [ - "asynchronous-codec", + "asynchronous-codec 0.6.2", "bytes", "futures-io", "futures-util", @@ -10333,6 +13034,10 @@ name = "unsigned-varint" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" +dependencies = [ + "bytes", + "tokio-util", +] [[package]] name = "untrusted" @@ -10353,7 +13058,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", - "idna 1.0.3", + "idna", "percent-encoding", ] @@ -10369,6 +13074,17 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +dependencies = [ + "getrandom 0.3.3", + "js-sys", + "wasm-bindgen", +] + [[package]] name = "valuable" version = "0.1.1" @@ -10393,6 +13109,74 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +[[package]] +name = "w3f-bls" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6bfb937b3d12077654a9e43e32a4e9c20177dd9fea0f3aba673e7840bb54f32" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381 0.4.0", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-serialize-derive 0.4.2", + "arrayref", + "digest 0.10.7", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "sha2 0.10.9", + "sha3", + "zeroize", +] + +[[package]] +name = "w3f-pcs" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbe7a8d5c914b69392ab3b267f679a2e546fe29afaddce47981772ac71bd02e1" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "merlin 3.0.0", +] + +[[package]] +name = "w3f-plonk-common" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aca389e494fe08c5c108b512e2328309036ee1c0bc7bdfdb743fef54d448c8c" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "getrandom_or_panic", + "rand_core 0.6.4", + "w3f-pcs", +] + +[[package]] +name = "w3f-ring-proof" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a639379402ad51504575dbd258740383291ac8147d3b15859bdf1ea48c677de" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "ark-transcript", + "w3f-pcs", + "w3f-plonk-common", +] + [[package]] name = "walkdir" version = "2.5.0" @@ -10420,9 +13204,9 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" @@ -10433,6 +13217,15 @@ dependencies = [ "wit-bindgen-rt", ] +[[package]] +name = "wasix" +version = "0.12.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" +dependencies = [ + "wasi 0.11.1+wasi-snapshot-preview1", +] + [[package]] name = "wasm-bindgen" version = "0.2.100" @@ -10455,7 +13248,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", "wasm-bindgen-shared", ] @@ -10490,7 +13283,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -10506,12 +13299,12 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.233.0" +version = "0.235.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9679ae3cf7cfa2ca3a327f7fab97f27f3294d402fd1a76ca8ab514e17973e4d3" +checksum = "b3bc393c395cb621367ff02d854179882b9a351b4e0c93d1397e6090b53a5c2a" dependencies = [ "leb128fmt", - "wasmparser 0.233.0", + "wasmparser 0.235.0", ] [[package]] @@ -10534,14 +13327,14 @@ dependencies = [ [[package]] name = "wasm-opt" -version = "0.112.0" +version = "0.116.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fef6d0d508f08334e0ab0e6877feb4c0ecb3956bcf2cb950699b22fedf3e9c" +checksum = "2fd87a4c135535ffed86123b6fb0f0a5a0bc89e50416c942c5f0662c645f679c" dependencies = [ "anyhow", "libc", - "strum", - "strum_macros", + "strum 0.24.1", + "strum_macros 0.24.3", "tempfile", "thiserror 1.0.69", "wasm-opt-cxx-sys", @@ -10550,9 +13343,9 @@ dependencies = [ [[package]] name = "wasm-opt-cxx-sys" -version = "0.112.0" +version = "0.116.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc816bbc1596c8f2e8127e137a760c798023ef3d378f2ae51f0f1840e2dfa445" +checksum = "8c57b28207aa724318fcec6575fe74803c23f6f266fce10cbc9f3f116762f12e" dependencies = [ "anyhow", "cxx", @@ -10562,9 +13355,9 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.112.0" +version = "0.116.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40199e4f68ef1071b3c6d0bd8026a12b481865d4b9e49c156932ea9a6234dd14" +checksum = "8a1cce564dc768dacbdb718fc29df2dba80bd21cb47d8f77ae7e3d95ceb98cbe" dependencies = [ "anyhow", "cc", @@ -10589,29 +13382,37 @@ dependencies = [ [[package]] name = "wasmi" -version = "0.30.0" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51fb5c61993e71158abf5bb863df2674ca3ec39ed6471c64f07aeaf751d67b4" +checksum = "50386c99b9c32bd2ed71a55b6dd4040af2580530fae8bdb9a6576571a80d0cca" dependencies = [ - "intx", + "arrayvec 0.7.6", + "multi-stash", + "num-derive", + "num-traits", "smallvec", "spin 0.9.8", - "wasmi_arena", + "wasmi_collections", "wasmi_core", "wasmparser-nostd", ] [[package]] -name = "wasmi_arena" -version = "0.4.1" +name = "wasmi_collections" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" +checksum = "9c128c039340ffd50d4195c3f8ce31aac357f06804cfc494c8b9508d4b30dca4" +dependencies = [ + "ahash", + "hashbrown 0.14.5", + "string-interner", +] [[package]] name = "wasmi_core" -version = "0.12.0" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624e6333e861ef49095d2d678b76ebf30b06bf37effca845be7e5b87c90071b7" +checksum = "a23b3a7f6c8c3ceeec6b83531ee61f0013c56e51cbf2b14b0f213548b23a4b41" dependencies = [ "downcast-rs", "libm", @@ -10631,12 +13432,12 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.233.0" +version = "0.235.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b51cb03afce7964bbfce46602d6cb358726f36430b6ba084ac6020d8ce5bc102" +checksum = "161296c618fa2d63f6ed5fffd1112937e803cb9ec71b32b01a76321555660917" dependencies = [ "bitflags 2.9.1", - "indexmap 2.9.0", + "indexmap 2.10.0", "semver 1.0.26", ] @@ -10846,22 +13647,22 @@ dependencies = [ [[package]] name = "wast" -version = "233.0.0" +version = "235.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eaf4099d8d0c922b83bf3c90663f5666f0769db9e525184284ebbbdb1dd2180" +checksum = "1eda4293f626c99021bb3a6fbe4fbbe90c0e31a5ace89b5f620af8925de72e13" dependencies = [ "bumpalo", "leb128fmt", "memchr", - "unicode-width 0.2.0", + "unicode-width", "wasm-encoder", ] [[package]] name = "wat" -version = "1.233.0" +version = "1.235.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d9bc80f5e4b25ea086ef41b91ccd244adde45d931c384d94a8ff64ab8bd7d87" +checksum = "e777e0327115793cb96ab220b98f85327ec3d11f34ec9e8d723264522ef206aa" dependencies = [ "wast", ] @@ -10877,28 +13678,44 @@ dependencies = [ ] [[package]] -name = "webpki-roots" -version = "0.25.4" +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] -name = "which" -version = "4.4.2" +name = "webpki-root-certs" +version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.44", + "webpki-root-certs 1.0.1", +] + +[[package]] +name = "webpki-root-certs" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86138b15b2b7d561bc4469e77027b8dd005a43dc502e9031d1f5afc8ce1f280e" +dependencies = [ + "rustls-pki-types", ] +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "wide" -version = "0.7.32" +version = "0.7.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" dependencies = [ "bytemuck", "safe_arch", @@ -10951,6 +13768,28 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + [[package]] name = "windows-core" version = "0.53.0" @@ -10974,6 +13813,17 @@ dependencies = [ "windows-strings", ] +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link", + "windows-threading", +] + [[package]] name = "windows-implement" version = "0.60.0" @@ -10982,7 +13832,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -10993,14 +13843,24 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-numerics" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link", +] [[package]] name = "windows-result" @@ -11065,6 +13925,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.2", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -11113,9 +13982,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.0" +version = "0.53.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" dependencies = [ "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", @@ -11127,6 +13996,15 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -11309,18 +14187,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "0.7.10" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" +checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" dependencies = [ "memchr", ] @@ -11361,43 +14230,75 @@ dependencies = [ [[package]] name = "x25519-dalek" -version = "1.1.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ - "curve25519-dalek 3.2.0", - "rand_core 0.5.1", + "curve25519-dalek 4.1.3", + "rand_core 0.6.4", + "serde", "zeroize", ] [[package]] -name = "x25519-dalek" -version = "2.0.0-pre.1" +name = "x509-parser" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" dependencies = [ - "curve25519-dalek 3.2.0", - "rand_core 0.6.4", - "zeroize", + "asn1-rs 0.6.2", + "data-encoding", + "der-parser 9.0.0", + "lazy_static", + "nom", + "oid-registry 0.7.1", + "rusticata-macros", + "thiserror 1.0.69", + "time", ] [[package]] name = "x509-parser" -version = "0.15.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da" +checksum = "4569f339c0c402346d4a75a9e39cf8dad310e287eef1ff56d4c68e5067f53460" dependencies = [ - "asn1-rs", + "asn1-rs 0.7.1", "data-encoding", - "der-parser", + "der-parser 10.0.0", "lazy_static", "nom", - "oid-registry", + "oid-registry 0.8.1", "rusticata-macros", - "thiserror 1.0.69", + "thiserror 2.0.12", "time", ] +[[package]] +name = "xcm-procedural" +version = "11.0.2" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "xml-rs" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" + +[[package]] +name = "xmltree" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +dependencies = [ + "xml-rs", +] + [[package]] name = "yamux" version = "0.12.1" @@ -11413,6 +14314,28 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "yamux" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da1acad1c2dc53f0dde419115a38bd8221d8c3e47ae9aeceaf453266d29307e" +dependencies = [ + "futures", + "log", + "nohash-hasher", + "parking_lot 0.12.4", + "pin-project", + "rand 0.9.1", + "static_assertions", + "web-time", +] + +[[package]] +name = "yap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" + [[package]] name = "yasna" version = "0.5.2" @@ -11442,28 +14365,28 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", "synstructure 0.13.2", ] [[package]] name = "zerocopy" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -11483,7 +14406,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", "synstructure 0.13.2", ] @@ -11504,7 +14427,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -11537,7 +14460,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 35147f9514..da2843dc24 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,100 +11,99 @@ path = "src/main.rs" # Path build to use our Substrate version from github, `branch = "polymesh-v8-monthly-2023-08"`. [patch.crates-io] -frame-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -frame-benchmarking-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -frame-executive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -frame-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -frame-election-provider-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -frame-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -frame-system-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -frame-system-rpc-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-balances = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-contracts = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-contracts-primitives = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-election-provider-multi-phase = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-im-online = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-indices = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-offences = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-preimage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-insecure-randomness-collective-flip = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-scheduler = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-staking-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-staking-reward-curve = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -pallet-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-basic-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-chain-spec = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-client-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-client-db = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-consensus-babe-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-consensus-epochs = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-executor = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-consensus-grandpa-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-network = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-network-common = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-network-sync = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-rpc-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-rpc-spec-v2 = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-service = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-telemetry = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-transaction-pool-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-sync-state-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sc-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-application-crypto = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-arithmetic = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-blockchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-core = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-debug-derive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-externalities = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-inherents = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-io = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-keyring = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-npos-elections = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-runtime = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-weights = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-runtime-interface = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-state-machine = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-std = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-storage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-tracing = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-transaction-storage-proof = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-trie = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -sp-version = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -substrate-frame-rpc-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -substrate-prometheus-endpoint = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -substrate-build-script-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -substrate-wasm-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } -substrate-test-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +frame-benchmarking = { path = "../polkadot-sdk/substrate/frame/benchmarking" } +frame-benchmarking-cli = { path = "../polkadot-sdk/substrate/utils/frame/benchmarking-cli" } +frame-executive = { path = "../polkadot-sdk/substrate/frame/executive" } +frame-support = { path = "../polkadot-sdk/substrate/frame/support" } +frame-election-provider-support = { path = "../polkadot-sdk/substrate/frame/election-provider-support" } +frame-system = { path = "../polkadot-sdk/substrate/frame/system" } +frame-system-benchmarking = { path = "../polkadot-sdk/substrate/frame/system/benchmarking" } +frame-system-rpc-runtime-api = { path = "../polkadot-sdk/substrate/frame/system/rpc/runtime-api" } +pallet-authority-discovery = { path = "../polkadot-sdk/substrate/frame/authority-discovery" } +pallet-authorship = { path = "../polkadot-sdk/substrate/frame/authorship" } +pallet-babe = { path = "../polkadot-sdk/substrate/frame/babe" } +pallet-balances = { path = "../polkadot-sdk/substrate/frame/balances" } +pallet-contracts = { path = "../polkadot-sdk/substrate/frame/contracts" } +pallet-election-provider-multi-phase = { path = "../polkadot-sdk/substrate/frame/election-provider-multi-phase" } +pallet-grandpa = { path = "../polkadot-sdk/substrate/frame/grandpa" } +pallet-im-online = { path = "../polkadot-sdk/substrate/frame/im-online" } +pallet-indices = { path = "../polkadot-sdk/substrate/frame/indices" } +pallet-offences = { path = "../polkadot-sdk/substrate/frame/offences" } +pallet-preimage = { path = "../polkadot-sdk/substrate/frame/preimage" } +pallet-insecure-randomness-collective-flip = { path = "../polkadot-sdk/substrate/frame/insecure-randomness-collective-flip" } +pallet-scheduler = { path = "../polkadot-sdk/substrate/frame/scheduler" } +pallet-session = { path = "../polkadot-sdk/substrate/frame/session" } +pallet-staking = { path = "../polkadot-sdk/substrate/frame/staking" } +pallet-staking-runtime-api = { path = "../polkadot-sdk/substrate/frame/staking/runtime-api" } +pallet-staking-reward-curve = { path = "../polkadot-sdk/substrate/frame/staking/reward-curve" } +pallet-timestamp = { path = "../polkadot-sdk/substrate/frame/timestamp" } +sc-authority-discovery = { path = "../polkadot-sdk/substrate/client/authority-discovery" } +sc-basic-authorship = { path = "../polkadot-sdk/substrate/client/basic-authorship" } +sc-block-builder = { path = "../polkadot-sdk/substrate/client/block-builder" } +sc-chain-spec = { path = "../polkadot-sdk/substrate/client/chain-spec" } +sc-cli = { path = "../polkadot-sdk/substrate/client/cli" } +sc-client-api = { path = "../polkadot-sdk/substrate/client/api" } +sc-client-db = { path = "../polkadot-sdk/substrate/client/db" } +sc-consensus = { path = "../polkadot-sdk/substrate/client/consensus/common" } +sc-consensus-babe = { path = "../polkadot-sdk/substrate/client/consensus/babe" } +sc-consensus-babe-rpc = { path = "../polkadot-sdk/substrate/client/consensus/babe/rpc" } +sc-consensus-epochs = { path = "../polkadot-sdk/substrate/client/consensus/epochs" } +sc-consensus-slots = { path = "../polkadot-sdk/substrate/client/consensus/slots" } +sc-executor = { path = "../polkadot-sdk/substrate/client/executor" } +sc-consensus-grandpa = { path = "../polkadot-sdk/substrate/client/consensus/grandpa" } +sc-consensus-grandpa-rpc = { path = "../polkadot-sdk/substrate/client/consensus/grandpa/rpc" } +sc-keystore = { path = "../polkadot-sdk/substrate/client/keystore" } +sc-network = { path = "../polkadot-sdk/substrate/client/network" } +sc-network-common = { path = "../polkadot-sdk/substrate/client/network/common" } +sc-network-sync = { path = "../polkadot-sdk/substrate/client/network/sync" } +sc-rpc = { path = "../polkadot-sdk/substrate/client/rpc" } +sc-rpc-api = { path = "../polkadot-sdk/substrate/client/rpc-api" } +sc-rpc-spec-v2 = { path = "../polkadot-sdk/substrate/client/rpc-spec-v2" } +sc-service = { path = "../polkadot-sdk/substrate/client/service" } +sc-telemetry = { path = "../polkadot-sdk/substrate/client/telemetry" } +sc-transaction-pool = { path = "../polkadot-sdk/substrate/client/transaction-pool" } +sc-transaction-pool-api = { path = "../polkadot-sdk/substrate/client/transaction-pool/api" } +sc-sync-state-rpc = { path = "../polkadot-sdk/substrate/client/sync-state-rpc" } +sc-offchain = { path = "../polkadot-sdk/substrate/client/offchain" } +sp-api = { path = "../polkadot-sdk/substrate/primitives/api" } +sp-application-crypto = { path = "../polkadot-sdk/substrate/primitives/application-crypto" } +sp-arithmetic = { path = "../polkadot-sdk/substrate/primitives/arithmetic" } +sp-authority-discovery = { path = "../polkadot-sdk/substrate/primitives/authority-discovery" } +sp-block-builder = { path = "../polkadot-sdk/substrate/primitives/block-builder" } +sp-blockchain = { path = "../polkadot-sdk/substrate/primitives/blockchain" } +sp-consensus = { path = "../polkadot-sdk/substrate/primitives/consensus/common" } +sp-consensus-babe = { path = "../polkadot-sdk/substrate/primitives/consensus/babe" } +sp-consensus-slots = { path = "../polkadot-sdk/substrate/primitives/consensus/slots" } +sp-core = { path = "../polkadot-sdk/substrate/primitives/core" } +sp-debug-derive = { path = "../polkadot-sdk/substrate/primitives/debug-derive" } +sp-externalities = { path = "../polkadot-sdk/substrate/primitives/externalities" } +sp-consensus-grandpa = { path = "../polkadot-sdk/substrate/primitives/consensus/grandpa" } +sp-inherents = { path = "../polkadot-sdk/substrate/primitives/inherents" } +sp-io = { path = "../polkadot-sdk/substrate/primitives/io" } +sp-keystore = { path = "../polkadot-sdk/substrate/primitives/keystore" } +sp-keyring = { path = "../polkadot-sdk/substrate/primitives/keyring" } +sp-npos-elections = { path = "../polkadot-sdk/substrate/primitives/npos-elections" } +sp-offchain = { path = "../polkadot-sdk/substrate/primitives/offchain" } +sp-rpc = { path = "../polkadot-sdk/substrate/primitives/rpc" } +sp-runtime = { path = "../polkadot-sdk/substrate/primitives/runtime" } +sp-weights = { path = "../polkadot-sdk/substrate/primitives/weights" } +sp-runtime-interface = { path = "../polkadot-sdk/substrate/primitives/runtime-interface" } +sp-session = { path = "../polkadot-sdk/substrate/primitives/session" } +sp-staking = { path = "../polkadot-sdk/substrate/primitives/staking" } +sp-state-machine = { path = "../polkadot-sdk/substrate/primitives/state-machine" } +sp-std = { path = "../polkadot-sdk/substrate/primitives/std" } +sp-storage = { path = "../polkadot-sdk/substrate/primitives/storage" } +sp-timestamp = { path = "../polkadot-sdk/substrate/primitives/timestamp" } +sp-tracing = { path = "../polkadot-sdk/substrate/primitives/tracing" } +sp-transaction-pool = { path = "../polkadot-sdk/substrate/primitives/transaction-pool" } +sp-transaction-storage-proof = { path = "../polkadot-sdk/substrate/primitives/transaction-storage-proof" } +sp-trie = { path = "../polkadot-sdk/substrate/primitives/trie" } +sp-version = { path = "../polkadot-sdk/substrate/primitives/version" } +substrate-frame-rpc-system = { path = "../polkadot-sdk/substrate/utils/frame/rpc/system" } +substrate-prometheus-endpoint = { path = "../polkadot-sdk/substrate/utils/prometheus" } +substrate-build-script-utils = { path = "../polkadot-sdk/substrate/utils/build-script-utils" } +substrate-wasm-builder = { path = "../polkadot-sdk/substrate/utils/wasm-builder" } +substrate-test-utils = { path = "../polkadot-sdk/substrate/test-utils" } [workspace] members = [ @@ -207,96 +206,96 @@ polymesh-runtime-testnet = { path = "pallets/runtime/testnet" } polymesh-build-tool = { path = "pallets/runtime/build_tool", default-features = false } # Substrate -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-system-benchmarking = { version = "4.0.0-dev", default-features = false } -frame-system-rpc-runtime-api = { version = "4.0.0-dev", default-features = false } -frame-election-provider-support = { version = "4.0.0-dev", default-features = false } -frame-benchmarking = { version = "4.0.0-dev", default-features = false } -frame-benchmarking-cli = { version = "4.0.0-dev", default-features = false } -frame-executive = { version = "4.0.0-dev", default-features = false } -pallet-authority-discovery = { version = "4.0.0-dev", default-features = false } -pallet-authorship = { version = "4.0.0-dev", default-features = false } -pallet-babe = { version = "4.0.0-dev", default-features = false } -pallet-balances = { version = "4.0.0-dev", default-features = false, features = ['insecure_zero_ed']} -pallet-contracts = { version = "4.0.0-dev", default-features = false } -pallet-contracts-primitives = { version = "24.0.0", default-features = false} -pallet-election-provider-multi-phase = { version = "4.0.0-dev", default-features = false } -pallet-grandpa = { version = "4.0.0-dev", default-features = false } -pallet-im-online = { version = "4.0.0-dev", default-features = false } -pallet-indices = { version = "4.0.0-dev", default-features = false } -pallet-offences = { version = "4.0.0-dev", default-features = false } -pallet-preimage = { version = "4.0.0-dev", default-features = false } -pallet-insecure-randomness-collective-flip = { version = "4.0.0-dev", default-features = false } -pallet-scheduler = { version = "4.0.0-dev", default-features = false } -pallet-session = { version = "4.0.0-dev", default-features = false } -pallet-staking = { version = "4.0.0-dev", default-features = false } -pallet-staking-runtime-api = { version = "4.0.0-dev", default-features = false } -pallet-staking-reward-curve = { version = "4.0.0-dev", default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } -scale-info = { version = "2.5.0", default-features = false, features = ["derive"] } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-application-crypto = { version = "23.0.0", default-features = false } -sp-arithmetic = { version = "16.0.0", default-features = false } -sp-authority-discovery = { version = "4.0.0-dev", default-features = false } -sp-block-builder = { version = "4.0.0-dev", default-features = false } -sp-blockchain = { version = "4.0.0-dev", default-features = false } -sp-consensus = { version = "0.10.0-dev", default-features = false } -sp-consensus-babe = { version = "0.10.0-dev", default-features = false } -sp-consensus-grandpa = { version = "4.0.0-dev", default-features = false } -sp-consensus-slots = { version = "0.10.0-dev", default-features = false } -sp-core = { version = "21.0.0", default-features = false } -sp-debug-derive = { version = "8.0.0", default-features = false } -sp-inherents = { version = "4.0.0-dev", default-features = false } -sp-io = { version = "23.0.0", default-features = false } -sp-keyring = { version = "24.0.0", default-features = false } -sp-keystore = { version = "0.27.0", default-features = false } -sp-npos-elections = { version = "4.0.0-dev", default-features = false } -sp-offchain = { version = "4.0.0-dev", default-features = false } -sp-rpc = { version = "6.0.0", default-features = false } -sp-runtime = { version = "24.0.0", default-features = false } -sp-runtime-interface = { version = "17.0.0", default-features = false } -sp-session = { version = "4.0.0-dev", default-features = false } -sp-staking = { version = "4.0.0-dev", default-features = false } -sp-std = { version = "8.0.0", default-features = false } -sp-timestamp = { version = "4.0.0-dev", default-features = false } -sp-tracing = { version = "10.0.0", default-features = false } -sp-transaction-storage-proof = { version = "4.0.0-dev", default-features = false } -sp-transaction-pool = { version = "4.0.0-dev", default-features = false } -sp-weights = { version = "20.0.0", default-features = false } -sp-version = { version = "22.0.0", default-features = false } -substrate-test-utils = { version = "4.0.0-dev", default-features = false } -substrate-wasm-builder = { version = "5.0.0-dev", default-features = false } -substrate-frame-rpc-system = { version = "4.0.0-dev", default-features = false } +codec = { package = "parity-scale-codec", version = "3.7.4", default-features = false, features = ["derive", "max-encoded-len"] } +frame-support = { version = "40.1.0", default-features = false } +frame-system = { version = "40.2.0", default-features = false } +frame-system-benchmarking = { version = "40.0.1", default-features = false } +frame-system-rpc-runtime-api = { version = "36.0.0", default-features = false } +frame-election-provider-support = { version = "40.1.1", default-features = false } +frame-benchmarking = { version = "40.2.0", default-features = false } +frame-benchmarking-cli = { version = "48.0.0", default-features = false } +frame-executive = { version = "40.0.1", default-features = false } +pallet-authority-discovery = { version = "40.0.0", default-features = false } +pallet-authorship = { version = "40.0.0", default-features = false } +pallet-babe = { version = "40.0.0", default-features = false } +pallet-balances = { version = "41.1.1", default-features = false, features = ['insecure_zero_ed']} +pallet-contracts = { version = "40.1.0", default-features = false } +pallet-contracts-primitives = { version = "29.0.0", default-features = false} +pallet-election-provider-multi-phase = { version = "39.2.0", default-features = false } +pallet-grandpa = { version = "40.0.0", default-features = false } +pallet-im-online = { version = "39.1.0", default-features = false } +pallet-indices = { version = "40.0.0", default-features = false } +pallet-offences = { version = "39.0.0", default-features = false } +pallet-preimage = { version = "40.0.0", default-features = false } +pallet-insecure-randomness-collective-flip = { version = "28.0.0", default-features = false } +pallet-scheduler = { version = "41.2.0", default-features = false } +pallet-session = { version = "40.0.1", default-features = false } +pallet-staking = { version = "40.1.1", default-features = false } +pallet-staking-runtime-api = { version = "26.0.0", default-features = false } +pallet-staking-reward-curve = { version = "12.0.0", default-features = false } +pallet-timestamp = { version = "39.0.0", default-features = false } +scale-info = { version = "2.11.6", default-features = false, features = ["derive"] } +sp-api = { version = "36.0.1", default-features = false } +sp-application-crypto = { version = "40.1.0", default-features = false } +sp-arithmetic = { version = "26.1.0", default-features = false } +sp-authority-discovery = { version = "36.0.0", default-features = false } +sp-block-builder = { version = "36.0.0", default-features = false } +sp-blockchain = { version = "39.0.0", default-features = false } +sp-consensus = { version = "0.42.0", default-features = false } +sp-consensus-babe = { version = "0.42.1", default-features = false } +sp-consensus-grandpa = { version = "23.1.0", default-features = false } +sp-consensus-slots = { version = "0.42.1", default-features = false } +sp-core = { version = "36.1.0", default-features = false } +sp-debug-derive = { version = "14.0.0", default-features = false } +sp-inherents = { version = "36.0.0", default-features = false } +sp-io = { version = "40.0.1", default-features = false } +sp-keyring = { version = "41.0.0", default-features = false } +sp-keystore = { version = "0.42.0", default-features = false } +sp-npos-elections = { version = "36.2.0", default-features = false } +sp-offchain = { version = "36.0.0", default-features = false } +sp-rpc = { version = "34.0.0", default-features = false } +sp-runtime = { version = "41.1.0", default-features = false } +sp-runtime-interface = { version = "29.0.1", default-features = false } +sp-session = { version = "38.1.0", default-features = false } +sp-staking = { version = "38.0.0", default-features = false } +sp-std = { version = "14.0.0", default-features = false } +sp-timestamp = { version = "36.0.0", default-features = false } +sp-tracing = { version = "17.1.0", default-features = false } +sp-transaction-storage-proof = { version = "36.1.0", default-features = false } +sp-transaction-pool = { version = "36.0.0", default-features = false } +sp-weights = { version = "31.1.0", default-features = false } +sp-version = { version = "39.0.0", default-features = false } +substrate-test-utils = { version = "3.0.0", default-features = false } +substrate-wasm-builder = { version = "26.0.1", default-features = false } +substrate-frame-rpc-system = { version = "44.0.0", default-features = false } # Substrate client deps. -sc-authority-discovery = "0.10.0-dev" -sc-basic-authorship = "0.10.0-dev" -sc-chain-spec = "4.0.0-dev" -sc-cli = { version = "0.10.0-dev" } -sc-client-api = "4.0.0-dev" -sc-client-db = { version = "0.10.0-dev", default-features = false } -sc-consensus = "0.10.0-dev" -sc-consensus-babe = "0.10.0-dev" -sc-consensus-babe-rpc = "0.10.0-dev" -sc-consensus-epochs = { version = "0.10.0-dev" } -sc-consensus-grandpa = "0.10.0-dev" -sc-consensus-grandpa-rpc = "0.10.0-dev" -sc-consensus-slots = "0.10.0-dev" -sc-executor = { version = "0.10.0-dev" } -sc-network = "0.10.0-dev" -sc-network-common = { version = "0.10.0-dev" } -sc-network-sync = { version = "0.10.0-dev" } -sc-rpc = "4.0.0-dev" -sc-rpc-api = { version = "0.10.0-dev" } -sc-rpc-spec-v2 = { version = "0.10.0-dev" } -sc-service = { version = "0.10.0-dev" } -sc-telemetry = "4.0.0-dev" -sc-transaction-pool = "4.0.0-dev" -sc-transaction-pool-api = { version = "4.0.0-dev" } -sc-sync-state-rpc = { version = "0.10.0-dev" } -sc-offchain = { version = "4.0.0-dev" } +sc-authority-discovery = "0.50.0" +sc-basic-authorship = "0.49.0" +sc-chain-spec = "43.0.0" +sc-cli = { version = "0.52.0" } +sc-client-api = "39.0.0" +sc-client-db = { version = "0.46.0", default-features = false } +sc-consensus = "0.49.0" +sc-consensus-babe = "0.50.0" +sc-consensus-babe-rpc = "0.50.0" +sc-consensus-epochs = { version = "0.49.0" } +sc-consensus-grandpa = "0.35.0" +sc-consensus-grandpa-rpc = "0.35.0" +sc-consensus-slots = "0.49.0" +sc-executor = { version = "0.42.0" } +sc-network = "0.50.0" +sc-network-common = { version = "0.48.0" } +sc-network-sync = { version = "0.49.0" } +sc-rpc = "45.0.0" +sc-rpc-api = { version = "0.49.0" } +sc-rpc-spec-v2 = { version = "0.50.0" } +sc-service = { version = "0.51.0" } +sc-telemetry = "28.1.0" +sc-transaction-pool = "39.0.0" +sc-transaction-pool-api = { version = "39.0.0" } +sc-sync-state-rpc = { version = "0.50.0" } +sc-offchain = { version = "45.0.0" } # Crypto rand = { version = "0.8", default-features = false } @@ -369,10 +368,10 @@ sc-transaction-pool = { workspace = true } sc-transaction-pool-api = { workspace = true } sc-sync-state-rpc = { workspace = true } sc-offchain = { workspace = true } -grandpa = { package = "sc-consensus-grandpa", version = "0.10.0-dev" } +grandpa = { package = "sc-consensus-grandpa", version = "0.35.0" } # Substrate -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } +codec = { package = "parity-scale-codec", version = "3.7.4", default-features = false, features = ["derive", "max-encoded-len"] } frame-support = { workspace = true } frame-system = { workspace = true } frame-system-rpc-runtime-api = { workspace = true } @@ -380,7 +379,7 @@ pallet-babe = { workspace = true } pallet-im-online = { workspace = true } pallet-indices = { workspace = true } pallet-session = { workspace = true } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.17.2" } sp-api = { workspace = true } sp-authority-discovery = { workspace = true } sp-block-builder = { workspace = true } @@ -403,7 +402,7 @@ frame-benchmarking = { workspace = true } frame-benchmarking-cli = { workspace = true } [build-dependencies] -substrate-build-script-utils = { version = "3.0.0" } +substrate-build-script-utils = { version = "11.0.0" } [features] default = ["std"] diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index 905ca581bb..1d447e739e 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -103,11 +103,8 @@ wat = "1.0" sp-tracing = { workspace = true, default-features = false, features = ["std"] } [features] -default = ["std", "testing", "equalize"] +default = ["std", "equalize"] -testing = [ - "pallet-staking/testing", -] equalize = [] only-staking = [] diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 712eb00290..459f4102d6 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] -channel = "nightly-2024-11-14" +channel = "nightly-2025-07-16" targets = [ "wasm32-unknown-unknown" ] components = [ "rustfmt" ] profile = "minimal" From 2e6fd73e772910cfd453d552033fab8772d261f0 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 1 Aug 2025 18:09:02 -0300 Subject: [PATCH 43/97] Fix compilation errors - part I --- Cargo.lock | 1319 ++++++----------- Cargo.toml | 4 +- pallets/asset/src/lib.rs | 3 +- pallets/base/src/lib.rs | 4 +- pallets/committee/src/lib.rs | 33 +- pallets/common/src/protocol_fee.rs | 4 +- pallets/common/src/traits/checkpoint.rs | 18 +- pallets/compliance-manager/src/lib.rs | 6 +- pallets/contracts/Cargo.toml | 2 +- pallets/contracts/src/chain_extension.rs | 42 +- pallets/corporate-actions/src/ballot/mod.rs | 77 +- .../corporate-actions/src/distribution/mod.rs | 29 +- pallets/corporate-actions/src/lib.rs | 110 +- pallets/identity/src/claims.rs | 23 +- pallets/identity/src/lib.rs | 6 +- pallets/multisig/src/lib.rs | 14 +- pallets/nft/src/lib.rs | 7 +- pallets/permissions/src/lib.rs | 25 +- pallets/pips/Cargo.toml | 1 + pallets/pips/src/lib.rs | 3 +- pallets/pips/src/types.rs | 20 +- pallets/portfolio/src/lib.rs | 14 +- pallets/protocol-fee/src/lib.rs | 20 +- pallets/relayer/src/lib.rs | 22 +- pallets/runtime/common/src/lib.rs | 23 +- pallets/runtime/develop/Cargo.toml | 2 +- pallets/runtime/mainnet/Cargo.toml | 2 +- pallets/runtime/testnet/Cargo.toml | 2 +- pallets/runtime/tests/Cargo.toml | 2 +- pallets/settlement/src/lib.rs | 5 +- pallets/sudo/src/extension.rs | 16 +- pallets/sudo/src/lib.rs | 4 +- pallets/transaction-payment/src/lib.rs | 152 +- pallets/transaction-payment/src/payment.rs | 5 +- pallets/treasury/src/lib.rs | 16 +- pallets/utility/src/lib.rs | 14 +- pallets/validators/src/lib.rs | 15 +- pallets/validators/src/permissioned.rs | 9 +- pallets/validators/src/types.rs | 8 +- primitives/src/agent.rs | 6 +- primitives/src/asset.rs | 54 +- primitives/src/asset_identifier.rs | 5 +- primitives/src/asset_metadata.rs | 25 +- primitives/src/cdd_id.rs | 4 +- primitives/src/compliance_manager.rs | 10 +- primitives/src/condition.rs | 26 +- primitives/src/document.rs | 28 +- primitives/src/document_hash.rs | 5 +- primitives/src/event_only.rs | 6 +- primitives/src/identity_claim.rs | 16 +- primitives/src/identity_id.rs | 12 +- primitives/src/jurisdiction.rs | 4 +- primitives/src/lib.rs | 19 +- primitives/src/nft.rs | 54 +- primitives/src/portfolio.rs | 11 +- primitives/src/secondary_key.rs | 8 +- primitives/src/settlement.rs | 137 +- primitives/src/statistics.rs | 22 +- primitives/src/subset.rs | 11 +- primitives/src/ticker.rs | 4 +- primitives/src/traits.rs | 3 +- primitives/src/traits/asset.rs | 12 +- primitives/src/transfer_compliance.rs | 13 +- primitives/src/weight_meter.rs | 8 +- rpc/runtime-api/src/compliance.rs | 2 +- rpc/runtime-api/src/nft.rs | 2 +- rpc/runtime-api/src/settlement.rs | 2 +- rpc/runtime-api/src/statistics.rs | 2 +- rpc/src/compliance.rs | 2 +- rpc/src/nft.rs | 2 +- rpc/src/settlement.rs | 2 +- 71 files changed, 1017 insertions(+), 1581 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 50214fbeaa..2a5e2f775c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -513,12 +513,6 @@ dependencies = [ "nodrop", ] -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - [[package]] name = "arrayvec" version = "0.7.6" @@ -640,9 +634,9 @@ dependencies = [ [[package]] name = "async-fs" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +checksum = "09f7e37c0ed80b2a977691c47dae8625cfb21e205827106c64f7c588766b2e50" dependencies = [ "async-lock", "blocking", @@ -651,9 +645,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" +checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" dependencies = [ "async-lock", "cfg-if", @@ -664,8 +658,7 @@ dependencies = [ "polling", "rustix 1.0.8", "slab", - "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -692,9 +685,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" +checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" dependencies = [ "async-channel 2.5.0", "async-io", @@ -706,14 +699,13 @@ dependencies = [ "event-listener 5.4.0", "futures-lite", "rustix 1.0.8", - "tracing", ] [[package]] name = "async-signal" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" +checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" dependencies = [ "async-io", "async-lock", @@ -724,7 +716,7 @@ dependencies = [ "rustix 1.0.8", "signal-hook-registry", "slab", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -1066,18 +1058,6 @@ dependencies = [ "constant_time_eq 0.3.1", ] -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -dependencies = [ - "block-padding", - "byte-tools", - "byteorder", - "generic-array 0.12.4", -] - [[package]] name = "block-buffer" version = "0.9.0" @@ -1096,15 +1076,6 @@ dependencies = [ "generic-array 0.14.7", ] -[[package]] -name = "block-padding" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" -dependencies = [ - "byte-tools", -] - [[package]] name = "blocking" version = "1.6.2" @@ -1118,17 +1089,6 @@ dependencies = [ "piper", ] -[[package]] -name = "bounded-collections" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca548b6163b872067dc5eb82fd130c56881435e30367d2073594a3d9744120dd" -dependencies = [ - "log", - "parity-scale-codec", - "scale-info", -] - [[package]] name = "bounded-collections" version = "0.2.4" @@ -1269,9 +1229,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.29" +version = "1.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" dependencies = [ "jobserver", "libc", @@ -1903,9 +1863,9 @@ dependencies = [ "sc-client-api", "sp-crypto-hashing 0.1.0", "sp-inherents", - "sp-runtime 41.1.0", + "sp-runtime", "sp-state-machine", - "sp-storage 22.0.0", + "sp-storage", "tracing", ] @@ -1919,7 +1879,7 @@ dependencies = [ "polkadot-primitives", "scale-info", "sp-api", - "sp-runtime 41.1.0", + "sp-runtime", "sp-trie", "staging-xcm", ] @@ -1932,7 +1892,7 @@ dependencies = [ "cumulus-primitives-core", "parity-scale-codec", "scale-info", - "sp-core 36.1.0", + "sp-core", "sp-inherents", "sp-trie", ] @@ -1941,8 +1901,8 @@ dependencies = [ name = "cumulus-primitives-proof-size-hostfunction" version = "0.12.0" dependencies = [ - "sp-externalities 0.30.0", - "sp-runtime-interface 29.0.1", + "sp-externalities", + "sp-runtime-interface", "sp-trie", ] @@ -1971,24 +1931,11 @@ dependencies = [ "cumulus-primitives-core", "parity-scale-codec", "polkadot-primitives", - "sp-runtime 41.1.0", + "sp-runtime", "sp-state-machine", "sp-trie", ] -[[package]] -name = "curve25519-dalek" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" -dependencies = [ - "byteorder", - "digest 0.8.1", - "rand_core 0.5.1", - "subtle 2.6.1", - "zeroize", -] - [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -2018,9 +1965,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.160" +version = "1.0.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1149bab7a5580cb267215751389597c021bfad13c0bb00c54e19559333764c" +checksum = "a3523cc02ad831111491dd64b27ad999f1ae189986728e477604e61b81f828df" dependencies = [ "cc", "cxxbridge-cmd", @@ -2032,9 +1979,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.160" +version = "1.0.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aeeaf1aefae8e0f5141920a7ecbc64a22ab038d4b4ac59f2d19e0effafd5b53" +checksum = "212b754247a6f07b10fa626628c157593f0abf640a3dd04cce2760eca970f909" dependencies = [ "cc", "codespan-reporting", @@ -2047,9 +1994,9 @@ dependencies = [ [[package]] name = "cxxbridge-cmd" -version = "1.0.160" +version = "1.0.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c36ac1f9a72064b1f41fd7b49a4c1b3bf33b9ccb1274874dda6d264f57c55964" +checksum = "f426a20413ec2e742520ba6837c9324b55ffac24ead47491a6e29f933c5b135a" dependencies = [ "clap", "codespan-reporting", @@ -2061,15 +2008,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.160" +version = "1.0.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "170c6ff5d009663866857a91ebee55b98ea4d4b34e7d7aba6dc4a4c95cc7b748" +checksum = "a258b6069020b4e5da6415df94a50ee4f586a6c38b037a180e940a43d06a070d" [[package]] name = "cxxbridge-macro" -version = "1.0.160" +version = "1.0.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4984a142211026786011a7e79fa22faa1eca1e9cbf0e60bffecfd57fd3db88f1" +checksum = "e8dec184b52be5008d6eaf7e62fc1802caf1ad1227d11b3b7df2c409c7ffc3f4" dependencies = [ "indexmap 2.10.0", "proc-macro2", @@ -2460,7 +2407,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ - "curve25519-dalek 4.1.3", + "curve25519-dalek", "ed25519", "rand_core 0.6.4", "serde", @@ -2475,7 +2422,7 @@ version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" dependencies = [ - "curve25519-dalek 4.1.3", + "curve25519-dalek", "ed25519", "hashbrown 0.14.5", "hex", @@ -2659,12 +2606,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" - [[package]] name = "fallible-iterator" version = "0.2.0" @@ -2863,12 +2804,12 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-application-crypto 40.1.0", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-runtime-interface 29.0.1", - "sp-storage 22.0.0", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-storage", "static_assertions", ] @@ -2910,21 +2851,21 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-database", - "sp-externalities 0.30.0", + "sp-externalities", "sp-genesis-builder", "sp-inherents", - "sp-io 40.0.1", + "sp-io", "sp-keystore", - "sp-runtime 41.1.0", + "sp-runtime", "sp-state-machine", - "sp-storage 22.0.0", + "sp-storage", "sp-timestamp", "sp-transaction-pool", "sp-trie", "sp-version", - "sp-wasm-interface 21.0.1", + "sp-wasm-interface", "subxt", "subxt-signer", "thiserror 1.0.69", @@ -2964,10 +2905,10 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", + "sp-arithmetic", + "sp-core", "sp-npos-elections", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -2981,10 +2922,10 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-tracing 17.1.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-tracing", ] [[package]] @@ -3033,21 +2974,21 @@ dependencies = [ "serde", "serde_json", "sp-api", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", + "sp-arithmetic", + "sp-core", "sp-crypto-hashing-proc-macro", - "sp-debug-derive 14.0.0", + "sp-debug-derive", "sp-genesis-builder", "sp-inherents", - "sp-io 40.0.1", + "sp-io", "sp-metadata-ir", - "sp-runtime 41.1.0", + "sp-runtime", "sp-staking", "sp-state-machine", - "sp-std 14.0.0", - "sp-tracing 17.1.0", + "sp-std", + "sp-tracing", "sp-trie", - "sp-weights 31.1.0", + "sp-weights", "tt-call", ] @@ -3101,11 +3042,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", + "sp-core", + "sp-io", + "sp-runtime", "sp-version", - "sp-weights 31.1.0", + "sp-weights", ] [[package]] @@ -3117,8 +3058,8 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-core", + "sp-runtime", ] [[package]] @@ -3137,7 +3078,7 @@ dependencies = [ "frame-support", "parity-scale-codec", "sp-api", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -3716,7 +3657,7 @@ dependencies = [ "idna", "ipnet", "once_cell", - "rand 0.9.1", + "rand 0.9.2", "ring 0.17.14", "thiserror 2.0.12", "tinyvec", @@ -3759,7 +3700,7 @@ dependencies = [ "moka", "once_cell", "parking_lot 0.12.4", - "rand 0.9.1", + "rand 0.9.2", "resolv-conf", "smallvec", "thiserror 2.0.12", @@ -4171,15 +4112,6 @@ dependencies = [ "xmltree", ] -[[package]] -name = "impl-codec" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" -dependencies = [ - "parity-scale-codec", -] - [[package]] name = "impl-codec" version = "0.7.1" @@ -4696,7 +4628,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e1b8590eb6148af2ea2d75f38e7d29f5ca970d5a4df456b3ef19b8b415d0264" dependencies = [ - "primitive-types 0.13.1", + "primitive-types", "tiny-keccak", ] @@ -4999,7 +4931,7 @@ checksum = "36b137cb1ae86ee39f8e5d6245a296518912014eaa87427d24e6ff58cfc1b28c" dependencies = [ "asynchronous-codec 0.7.0", "bytes", - "curve25519-dalek 4.1.3", + "curve25519-dalek", "futures", "libp2p-core", "libp2p-identity", @@ -5205,13 +5137,13 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" +checksum = "4488594b9328dee448adb906d8b126d9b7deb7cf5c22161ee591610bb1be83c0" dependencies = [ "bitflags 2.9.1", "libc", - "redox_syscall 0.5.13", + "redox_syscall 0.5.15", ] [[package]] @@ -5567,18 +5499,6 @@ dependencies = [ "hash-db", ] -[[package]] -name = "merlin" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.5.1", - "zeroize", -] - [[package]] name = "merlin" version = "3.0.0" @@ -5628,7 +5548,7 @@ dependencies = [ "bitflags 1.3.2", "blake2 0.10.6", "c2-chacha", - "curve25519-dalek 4.1.3", + "curve25519-dalek", "either", "hashlink", "lioness", @@ -5932,11 +5852,11 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-rpc", - "sp-runtime 41.1.0", - "sp-std 14.0.0", - "sp-weights 31.1.0", + "sp-runtime", + "sp-std", + "sp-weights", ] [[package]] @@ -5955,9 +5875,9 @@ dependencies = [ "serde", "serde_json", "sp-api", - "sp-runtime 41.1.0", - "sp-std 14.0.0", - "sp-weights 31.1.0", + "sp-runtime", + "sp-std", + "sp-weights", ] [[package]] @@ -6230,11 +6150,11 @@ dependencies = [ "serde_derive", "serde_json", "sp-api", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "sp-version", ] @@ -6249,10 +6169,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] @@ -6264,9 +6184,9 @@ dependencies = [ "pallet-session", "parity-scale-codec", "scale-info", - "sp-application-crypto 40.1.0", + "sp-application-crypto", "sp-authority-discovery", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -6278,7 +6198,7 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -6294,11 +6214,11 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-application-crypto 40.1.0", + "sp-application-crypto", "sp-consensus-babe", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", + "sp-core", + "sp-io", + "sp-runtime", "sp-session", "sp-staking", ] @@ -6314,8 +6234,8 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-core", + "sp-runtime", ] [[package]] @@ -6330,10 +6250,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "sp-version", ] @@ -6353,10 +6273,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "sp-version", ] @@ -6381,10 +6301,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "sp-version", ] @@ -6409,29 +6329,15 @@ dependencies = [ "serde", "smallvec", "sp-api", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", + "sp-core", + "sp-io", + "sp-runtime", "staging-xcm", "staging-xcm-builder", "wasm-instrument 0.4.0", "wasmi", ] -[[package]] -name = "pallet-contracts-primitives" -version = "29.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31e55b0b8df678f94af4b12bee8b3367d4217f4c5d90b2e531ec9bc15dfc39b" -dependencies = [ - "bitflags 1.3.2", - "parity-scale-codec", - "scale-info", - "sp-runtime 29.0.0", - "sp-std 12.0.0", - "sp-weights 25.0.0", -] - [[package]] name = "pallet-contracts-proc-macro" version = "23.0.3" @@ -6474,11 +6380,11 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "sp-version", ] @@ -6495,11 +6401,11 @@ dependencies = [ "parity-scale-codec", "rand 0.8.5", "scale-info", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", - "sp-io 40.0.1", + "sp-arithmetic", + "sp-core", + "sp-io", "sp-npos-elections", - "sp-runtime 41.1.0", + "sp-runtime", "strum 0.26.3", ] @@ -6512,7 +6418,7 @@ dependencies = [ "frame-system", "parity-scale-codec", "sp-npos-elections", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -6532,8 +6438,8 @@ dependencies = [ "scale-info", "serde", "serde_derive", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-runtime", + "sp-std", ] [[package]] @@ -6548,11 +6454,11 @@ dependencies = [ "pallet-session", "parity-scale-codec", "scale-info", - "sp-application-crypto 40.1.0", + "sp-application-crypto", "sp-consensus-grandpa", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", + "sp-core", + "sp-io", + "sp-runtime", "sp-session", "sp-staking", ] @@ -6573,10 +6479,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "sp-version", ] @@ -6594,10 +6500,10 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-rpc", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-runtime", + "sp-std", ] [[package]] @@ -6609,7 +6515,7 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-std 14.0.0", + "sp-std", ] [[package]] @@ -6630,14 +6536,14 @@ dependencies = [ "polymesh-common-utilities", "polymesh-primitives", "scale-info", - "schnorrkel 0.11.5", + "schnorrkel", "serde", "serde_derive", "sp-api", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "sp-version", ] @@ -6652,10 +6558,10 @@ dependencies = [ "pallet-authorship", "parity-scale-codec", "scale-info", - "sp-application-crypto 40.1.0", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", "sp-staking", ] @@ -6668,9 +6574,9 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] @@ -6698,9 +6604,9 @@ dependencies = [ "polymesh-primitives", "scale-info", "serde", - "sp-core 36.1.0", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-runtime", + "sp-std", "sp-version", ] @@ -6720,8 +6626,8 @@ dependencies = [ "parity-scale-codec", "polymesh-primitives", "scale-info", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-runtime", + "sp-std", ] [[package]] @@ -6734,7 +6640,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-runtime 41.1.0", + "sp-runtime", "sp-staking", ] @@ -6749,8 +6655,8 @@ dependencies = [ "polymesh-primitives", "scale-info", "serde", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-runtime", + "sp-std", ] [[package]] @@ -6780,10 +6686,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "sp-version", ] @@ -6802,9 +6708,9 @@ dependencies = [ "polymesh-primitives", "scale-info", "serde", - "sp-arithmetic 26.1.0", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-arithmetic", + "sp-runtime", + "sp-std", ] [[package]] @@ -6817,9 +6723,9 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] @@ -6835,10 +6741,10 @@ dependencies = [ "polymesh-primitives", "scale-info", "serde", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -6856,10 +6762,10 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-rpc", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-runtime", + "sp-std", ] [[package]] @@ -6872,7 +6778,7 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -6886,8 +6792,8 @@ dependencies = [ "parity-scale-codec", "polymesh-primitives", "scale-info", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-runtime", + "sp-std", ] [[package]] @@ -6901,9 +6807,9 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-weights 31.1.0", + "sp-io", + "sp-runtime", + "sp-weights", ] [[package]] @@ -6917,9 +6823,9 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", + "sp-core", + "sp-io", + "sp-runtime", "sp-session", "sp-staking", "sp-state-machine", @@ -6952,10 +6858,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "sp-version", ] @@ -6974,9 +6880,9 @@ dependencies = [ "rand_chacha 0.3.1", "scale-info", "serde", - "sp-application-crypto 40.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", + "sp-application-crypto", + "sp-io", + "sp-runtime", "sp-staking", ] @@ -7017,11 +6923,11 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -7049,10 +6955,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "sp-version", ] @@ -7064,10 +6970,10 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -7082,9 +6988,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-inherents", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-storage 22.0.0", + "sp-io", + "sp-runtime", + "sp-storage", "sp-timestamp", ] @@ -7101,9 +7007,9 @@ dependencies = [ "serde", "serde_json", "sp-api", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -7116,9 +7022,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] @@ -7137,10 +7043,10 @@ dependencies = [ "serde", "serde_derive", "sp-api", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "sp-version", ] @@ -7158,10 +7064,10 @@ dependencies = [ "polymesh-common-utilities", "polymesh-primitives", "scale-info", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -7184,14 +7090,14 @@ dependencies = [ "rand_chacha 0.2.2", "scale-info", "serde", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", - "sp-io 40.0.1", + "sp-arithmetic", + "sp-core", + "sp-io", "sp-npos-elections", - "sp-runtime 41.1.0", + "sp-runtime", "sp-staking", - "sp-std 14.0.0", - "sp-tracing 17.1.0", + "sp-std", + "sp-tracing", "static_assertions", ] @@ -7313,7 +7219,7 @@ checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.13", + "redox_syscall 0.5.15", "smallvec", "windows-targets 0.52.6", ] @@ -7528,7 +7434,7 @@ dependencies = [ "frame-system", "frame-system-rpc-runtime-api", "futures", - "jsonrpsee 0.16.3", + "jsonrpsee 0.24.9", "log", "node-rpc", "node-rpc-runtime-api", @@ -7596,11 +7502,11 @@ dependencies = [ "sp-consensus", "sp-consensus-babe", "sp-consensus-slots", - "sp-core 36.1.0", + "sp-core", "sp-inherents", "sp-keyring", "sp-offchain", - "sp-runtime 41.1.0", + "sp-runtime", "sp-session", "sp-timestamp", "sp-transaction-pool", @@ -7625,8 +7531,8 @@ dependencies = [ "polymesh-primitives", "scale-info", "serde", - "sp-core 36.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-std", ] [[package]] @@ -7639,17 +7545,16 @@ dependencies = [ "log", "pallet-base", "pallet-contracts", - "pallet-contracts-primitives", "pallet-identity", "pallet-permissions", "parity-scale-codec", "polymesh-primitives", "scale-info", "serde", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "wasm-instrument 0.3.0", ] @@ -7688,7 +7593,7 @@ dependencies = [ "sp-consensus", "sp-consensus-babe", "sp-keystore", - "sp-runtime 41.1.0", + "sp-runtime", "substrate-frame-rpc-system", ] @@ -7709,18 +7614,18 @@ dependencies = [ "rand_core 0.6.4", "rustc-hex", "scale-info", - "schnorrkel 0.11.5", + "schnorrkel", "serde", "serde_bytes", "serde_json", - "sp-application-crypto 40.1.0", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", - "sp-debug-derive 14.0.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-runtime-interface 29.0.1", - "sp-std 14.0.0", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-debug-derive", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-std", "sp-version", ] @@ -7753,9 +7658,9 @@ dependencies = [ "polymesh-common-utilities", "polymesh-primitives", "smallvec", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -7781,7 +7686,6 @@ dependencies = [ "pallet-committee", "pallet-compliance-manager", "pallet-contracts", - "pallet-contracts-primitives", "pallet-corporate-actions", "pallet-election-provider-multi-phase", "pallet-external-agents", @@ -7826,19 +7730,19 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-arithmetic 26.1.0", + "sp-arithmetic", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", "sp-consensus-grandpa", - "sp-core 36.1.0", + "sp-core", "sp-inherents", - "sp-io 40.0.1", + "sp-io", "sp-offchain", - "sp-runtime 41.1.0", + "sp-runtime", "sp-session", "sp-staking", - "sp-std 14.0.0", + "sp-std", "sp-transaction-pool", "sp-version", ] @@ -7863,7 +7767,6 @@ dependencies = [ "pallet-committee", "pallet-compliance-manager", "pallet-contracts", - "pallet-contracts-primitives", "pallet-corporate-actions", "pallet-election-provider-multi-phase", "pallet-external-agents", @@ -7910,19 +7813,19 @@ dependencies = [ "serde_derive", "smallvec", "sp-api", - "sp-arithmetic 26.1.0", + "sp-arithmetic", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", "sp-consensus-grandpa", - "sp-core 36.1.0", + "sp-core", "sp-inherents", - "sp-io 40.0.1", + "sp-io", "sp-offchain", - "sp-runtime 41.1.0", + "sp-runtime", "sp-session", "sp-staking", - "sp-std 14.0.0", + "sp-std", "sp-transaction-pool", "sp-version", ] @@ -7947,7 +7850,6 @@ dependencies = [ "pallet-committee", "pallet-compliance-manager", "pallet-contracts", - "pallet-contracts-primitives", "pallet-corporate-actions", "pallet-election-provider-multi-phase", "pallet-external-agents", @@ -7994,19 +7896,19 @@ dependencies = [ "serde_derive", "smallvec", "sp-api", - "sp-arithmetic 26.1.0", + "sp-arithmetic", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", "sp-consensus-grandpa", - "sp-core 36.1.0", + "sp-core", "sp-inherents", - "sp-io 40.0.1", + "sp-io", "sp-offchain", - "sp-runtime 41.1.0", + "sp-runtime", "sp-session", "sp-staking", - "sp-std 14.0.0", + "sp-std", "sp-transaction-pool", "sp-version", ] @@ -8035,7 +7937,6 @@ dependencies = [ "pallet-committee", "pallet-compliance-manager", "pallet-contracts", - "pallet-contracts-primitives", "pallet-corporate-actions", "pallet-election-provider-multi-phase", "pallet-external-agents", @@ -8085,22 +7986,22 @@ dependencies = [ "serde_json", "smallvec", "sp-api", - "sp-arithmetic 26.1.0", + "sp-arithmetic", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", "sp-consensus-grandpa", - "sp-core 36.1.0", + "sp-core", "sp-inherents", - "sp-io 40.0.1", + "sp-io", "sp-keyring", "sp-npos-elections", "sp-offchain", - "sp-runtime 41.1.0", + "sp-runtime", "sp-session", "sp-staking", - "sp-std 14.0.0", - "sp-tracing 17.1.0", + "sp-std", + "sp-tracing", "sp-transaction-pool", "sp-version", "substrate-test-utils", @@ -8145,7 +8046,7 @@ dependencies = [ "pallet-validators", "polymesh-contracts", "polymesh-primitives", - "sp-std 14.0.0", + "sp-std", ] [[package]] @@ -8226,18 +8127,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "primitive-types" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" -dependencies = [ - "fixed-hash", - "impl-codec 0.6.0", - "scale-info", - "uint 0.9.5", -] - [[package]] name = "primitive-types" version = "0.13.1" @@ -8245,7 +8134,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" dependencies = [ "fixed-hash", - "impl-codec 0.7.1", + "impl-codec", "impl-num-traits", "impl-serde", "scale-info", @@ -8553,7 +8442,7 @@ dependencies = [ "bytes", "getrandom 0.3.3", "lru-slab", - "rand 0.9.1", + "rand 0.9.2", "ring 0.17.14", "rustc-hash 2.1.1", "rustls", @@ -8626,9 +8515,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -8777,9 +8666,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec" dependencies = [ "bitflags 2.9.1", ] @@ -9243,8 +9132,8 @@ name = "sc-allocator" version = "31.0.0" dependencies = [ "log", - "sp-core 36.1.0", - "sp-wasm-interface 21.0.1", + "sp-core", + "sp-wasm-interface", "thiserror 1.0.69", ] @@ -9268,9 +9157,9 @@ dependencies = [ "sp-api", "sp-authority-discovery", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-keystore", - "sp-runtime 41.1.0", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror 1.0.69", ] @@ -9289,9 +9178,9 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 36.1.0", + "sp-core", "sp-inherents", - "sp-runtime 41.1.0", + "sp-runtime", "substrate-prometheus-endpoint", ] @@ -9303,9 +9192,9 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-inherents", - "sp-runtime 41.1.0", + "sp-runtime", "sp-trie", ] @@ -9325,13 +9214,13 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-crypto-hashing 0.1.0", "sp-genesis-builder", - "sp-io 40.0.1", - "sp-runtime 41.1.0", + "sp-io", + "sp-runtime", "sp-state-machine", - "sp-tracing 17.1.0", + "sp-tracing", ] [[package]] @@ -9375,11 +9264,11 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-keyring", "sp-keystore", "sp-panic-handler", - "sp-runtime 41.1.0", + "sp-runtime", "sp-version", "thiserror 1.0.69", "tokio", @@ -9400,12 +9289,12 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 36.1.0", + "sp-core", "sp-database", - "sp-externalities 0.30.0", - "sp-runtime 41.1.0", + "sp-externalities", + "sp-runtime", "sp-state-machine", - "sp-storage 22.0.0", + "sp-storage", "sp-trie", "substrate-prometheus-endpoint", ] @@ -9426,11 +9315,11 @@ dependencies = [ "sc-client-api", "sc-state-db", "schnellru", - "sp-arithmetic 26.1.0", + "sp-arithmetic", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-database", - "sp-runtime 41.1.0", + "sp-runtime", "sp-state-machine", "sp-trie", ] @@ -9450,8 +9339,8 @@ dependencies = [ "serde", "sp-blockchain", "sp-consensus", - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-core", + "sp-runtime", "sp-state-machine", "substrate-prometheus-endpoint", "thiserror 1.0.69", @@ -9477,17 +9366,17 @@ dependencies = [ "sc-telemetry", "sc-transaction-pool-api", "sp-api", - "sp-application-crypto 40.1.0", + "sp-application-crypto", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", "sp-consensus-slots", - "sp-core 36.1.0", + "sp-core", "sp-crypto-hashing 0.1.0", "sp-inherents", "sp-keystore", - "sp-runtime 41.1.0", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror 1.0.69", ] @@ -9503,13 +9392,13 @@ dependencies = [ "sc-rpc-api", "serde", "sp-api", - "sp-application-crypto 40.1.0", + "sp-application-crypto", "sp-blockchain", "sp-consensus", "sp-consensus-babe", - "sp-core 36.1.0", + "sp-core", "sp-keystore", - "sp-runtime 41.1.0", + "sp-runtime", "thiserror 1.0.69", ] @@ -9522,7 +9411,7 @@ dependencies = [ "sc-client-api", "sc-consensus", "sp-blockchain", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -9555,15 +9444,15 @@ dependencies = [ "sc-utils", "serde_json", "sp-api", - "sp-application-crypto 40.1.0", - "sp-arithmetic 26.1.0", + "sp-application-crypto", + "sp-arithmetic", "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", - "sp-core 36.1.0", + "sp-core", "sp-crypto-hashing 0.1.0", "sp-keystore", - "sp-runtime 41.1.0", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror 1.0.69", ] @@ -9582,8 +9471,8 @@ dependencies = [ "sc-rpc", "serde", "sp-blockchain", - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-core", + "sp-runtime", "thiserror 1.0.69", ] @@ -9599,13 +9488,13 @@ dependencies = [ "sc-client-api", "sc-consensus", "sc-telemetry", - "sp-arithmetic 26.1.0", + "sp-arithmetic", "sp-blockchain", "sp-consensus", "sp-consensus-slots", - "sp-core 36.1.0", + "sp-core", "sp-inherents", - "sp-runtime 41.1.0", + "sp-runtime", "sp-state-machine", ] @@ -9620,14 +9509,14 @@ dependencies = [ "sc-executor-wasmtime", "schnellru", "sp-api", - "sp-core 36.1.0", - "sp-externalities 0.30.0", - "sp-io 40.0.1", + "sp-core", + "sp-externalities", + "sp-io", "sp-panic-handler", - "sp-runtime-interface 29.0.1", + "sp-runtime-interface", "sp-trie", "sp-version", - "sp-wasm-interface 21.0.1", + "sp-wasm-interface", "tracing", ] @@ -9638,7 +9527,7 @@ dependencies = [ "polkavm", "sc-allocator", "sp-maybe-compressed-blob", - "sp-wasm-interface 21.0.1", + "sp-wasm-interface", "thiserror 1.0.69", "wasm-instrument 0.4.0", ] @@ -9650,7 +9539,7 @@ dependencies = [ "log", "polkavm", "sc-executor-common", - "sp-wasm-interface 21.0.1", + "sp-wasm-interface", ] [[package]] @@ -9663,8 +9552,8 @@ dependencies = [ "rustix 0.36.17", "sc-allocator", "sc-executor-common", - "sp-runtime-interface 29.0.1", - "sp-wasm-interface 21.0.1", + "sp-runtime-interface", + "sp-wasm-interface", "wasmtime", ] @@ -9680,7 +9569,7 @@ dependencies = [ "sc-network", "sc-network-sync", "sp-blockchain", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -9690,8 +9579,8 @@ dependencies = [ "array-bytes", "parking_lot 0.12.4", "serde_json", - "sp-application-crypto 40.1.0", - "sp-core 36.1.0", + "sp-application-crypto", + "sp-core", "sp-keystore", "thiserror 1.0.69", ] @@ -9716,10 +9605,10 @@ dependencies = [ "sc-transaction-pool-api", "sp-api", "sp-consensus", - "sp-core 36.1.0", + "sp-core", "sp-keystore", "sp-mixnet", - "sp-runtime 41.1.0", + "sp-runtime", "thiserror 1.0.69", ] @@ -9758,10 +9647,10 @@ dependencies = [ "serde", "serde_json", "smallvec", - "sp-arithmetic 26.1.0", + "sp-arithmetic", "sp-blockchain", - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-core", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror 1.0.69", "tokio", @@ -9778,7 +9667,7 @@ version = "0.48.0" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -9794,7 +9683,7 @@ dependencies = [ "sc-network-sync", "sc-network-types", "schnellru", - "sp-runtime 41.1.0", + "sp-runtime", "substrate-prometheus-endpoint", "tracing", ] @@ -9814,8 +9703,8 @@ dependencies = [ "sc-network", "sc-network-types", "sp-blockchain", - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-core", + "sp-runtime", "thiserror 1.0.69", ] @@ -9841,12 +9730,12 @@ dependencies = [ "sc-utils", "schnellru", "smallvec", - "sp-arithmetic 26.1.0", + "sp-arithmetic", "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-core", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror 1.0.69", "tokio", @@ -9867,7 +9756,7 @@ dependencies = [ "sc-network-types", "sc-utils", "sp-consensus", - "sp-runtime 41.1.0", + "sp-runtime", "substrate-prometheus-endpoint", ] @@ -9913,11 +9802,11 @@ dependencies = [ "sc-transaction-pool-api", "sc-utils", "sp-api", - "sp-core 36.1.0", - "sp-externalities 0.30.0", + "sp-core", + "sp-externalities", "sp-keystore", "sp-offchain", - "sp-runtime 41.1.0", + "sp-runtime", "threadpool", "tracing", ] @@ -9950,11 +9839,11 @@ dependencies = [ "serde_json", "sp-api", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-keystore", "sp-offchain", "sp-rpc", - "sp-runtime 41.1.0", + "sp-runtime", "sp-session", "sp-statement-store", "sp-version", @@ -9973,9 +9862,9 @@ dependencies = [ "scale-info", "serde", "serde_json", - "sp-core 36.1.0", + "sp-core", "sp-rpc", - "sp-runtime 41.1.0", + "sp-runtime", "sp-version", "thiserror 1.0.69", ] @@ -10025,9 +9914,9 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-rpc", - "sp-runtime 41.1.0", + "sp-runtime", "sp-version", "substrate-prometheus-endpoint", "thiserror 1.0.69", @@ -10042,10 +9931,10 @@ dependencies = [ "parity-scale-codec", "sc-executor", "sc-executor-common", - "sp-core 36.1.0", + "sp-core", "sp-crypto-hashing 0.1.0", "sp-state-machine", - "sp-wasm-interface 21.0.1", + "sp-wasm-interface", "thiserror 1.0.69", ] @@ -10092,13 +9981,13 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 36.1.0", - "sp-externalities 0.30.0", + "sp-core", + "sp-externalities", "sp-keystore", - "sp-runtime 41.1.0", + "sp-runtime", "sp-session", "sp-state-machine", - "sp-storage 22.0.0", + "sp-storage", "sp-transaction-pool", "sp-transaction-storage-proof", "sp-trie", @@ -10119,7 +10008,7 @@ dependencies = [ "log", "parity-scale-codec", "parking_lot 0.12.4", - "sp-core 36.1.0", + "sp-core", ] [[package]] @@ -10136,7 +10025,7 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-runtime 41.1.0", + "sp-runtime", "thiserror 1.0.69", ] @@ -10154,9 +10043,9 @@ dependencies = [ "sc-telemetry", "serde", "serde_json", - "sp-core 36.1.0", + "sp-core", "sp-crypto-hashing 0.1.0", - "sp-io 40.0.1", + "sp-io", ] [[package]] @@ -10194,10 +10083,10 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-rpc", - "sp-runtime 41.1.0", - "sp-tracing 17.1.0", + "sp-runtime", + "sp-tracing", "thiserror 1.0.69", "tracing", "tracing-log", @@ -10233,10 +10122,10 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core 36.1.0", + "sp-core", "sp-crypto-hashing 0.1.0", - "sp-runtime 41.1.0", - "sp-tracing 17.1.0", + "sp-runtime", + "sp-tracing", "sp-transaction-pool", "substrate-prometheus-endpoint", "thiserror 1.0.69", @@ -10256,8 +10145,8 @@ dependencies = [ "parity-scale-codec", "serde", "sp-blockchain", - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-core", + "sp-runtime", "thiserror 1.0.69", ] @@ -10271,7 +10160,7 @@ dependencies = [ "log", "parking_lot 0.12.4", "prometheus", - "sp-arithmetic 26.1.0", + "sp-arithmetic", ] [[package]] @@ -10294,7 +10183,7 @@ checksum = "f8ae9cc099ae85ff28820210732b00f019546f36f33225f509fe25d5816864a0" dependencies = [ "derive_more 1.0.0", "parity-scale-codec", - "primitive-types 0.13.1", + "primitive-types", "scale-bits", "scale-decode-derive", "scale-type-resolver", @@ -10321,7 +10210,7 @@ checksum = "5f9271284d05d0749c40771c46180ce89905fd95aa72a2a2fddb4b7c0aa424db" dependencies = [ "derive_more 1.0.0", "parity-scale-codec", - "primitive-types 0.13.1", + "primitive-types", "scale-bits", "scale-encode-derive", "scale-type-resolver", @@ -10430,22 +10319,6 @@ dependencies = [ "hashbrown 0.13.2", ] -[[package]] -name = "schnorrkel" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" -dependencies = [ - "arrayref", - "arrayvec 0.5.2", - "curve25519-dalek 2.1.3", - "merlin 2.0.1", - "rand_core 0.5.1", - "sha2 0.8.2", - "subtle 2.6.1", - "zeroize", -] - [[package]] name = "schnorrkel" version = "0.11.5" @@ -10455,9 +10328,9 @@ dependencies = [ "aead", "arrayref", "arrayvec 0.7.6", - "curve25519-dalek 4.1.3", + "curve25519-dalek", "getrandom_or_panic", - "merlin 3.0.0", + "merlin", "rand_core 0.6.4", "serde_bytes", "sha2 0.10.9", @@ -10671,9 +10544,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" dependencies = [ "itoa", "ryu", @@ -10704,18 +10577,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "sha2" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", -] - [[package]] name = "sha2" version = "0.9.9" @@ -10887,7 +10748,7 @@ dependencies = [ "itertools 0.13.0", "libm", "libsecp256k1", - "merlin 3.0.0", + "merlin", "nom", "num-bigint", "num-rational", @@ -10898,7 +10759,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "ruzstd", - "schnorrkel 0.11.5", + "schnorrkel", "serde", "serde_json", "sha2 0.10.9", @@ -10964,7 +10825,7 @@ dependencies = [ "aes-gcm", "blake2 0.10.6", "chacha20poly1305", - "curve25519-dalek 4.1.3", + "curve25519-dalek", "rand_core 0.6.4", "ring 0.17.14", "rustc_version 0.4.1", @@ -11024,11 +10885,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api-proc-macro", - "sp-core 36.1.0", - "sp-externalities 0.30.0", + "sp-core", + "sp-externalities", "sp-metadata-ir", - "sp-runtime 41.1.0", - "sp-runtime-interface 29.0.1", + "sp-runtime", + "sp-runtime-interface", "sp-state-machine", "sp-trie", "sp-version", @@ -11048,19 +10909,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "sp-application-crypto" -version = "28.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23030de8eae0272c705cf3e2ce0523a64708a6b53aa23f3cf9053ca63abd08d7" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-core 26.0.0", - "sp-io 28.0.0", - "sp-std 12.0.0", -] - [[package]] name = "sp-application-crypto" version = "40.1.0" @@ -11068,22 +10916,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 36.1.0", - "sp-io 40.0.1", -] - -[[package]] -name = "sp-arithmetic" -version = "21.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cf6e5c0c7c2e7be3a4a10af5316d2d40182915509a70f632a66c238a05c37b" -dependencies = [ - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "scale-info", - "sp-std 12.0.0", - "static_assertions", + "sp-core", + "sp-io", ] [[package]] @@ -11106,8 +10940,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-application-crypto 40.1.0", - "sp-runtime 41.1.0", + "sp-application-crypto", + "sp-runtime", ] [[package]] @@ -11116,7 +10950,7 @@ version = "36.0.0" dependencies = [ "sp-api", "sp-inherents", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -11129,9 +10963,9 @@ dependencies = [ "schnellru", "sp-api", "sp-consensus", - "sp-core 36.1.0", + "sp-core", "sp-database", - "sp-runtime 41.1.0", + "sp-runtime", "sp-state-machine", "thiserror 1.0.69", "tracing", @@ -11145,7 +10979,7 @@ dependencies = [ "futures", "log", "sp-inherents", - "sp-runtime 41.1.0", + "sp-runtime", "sp-state-machine", "thiserror 1.0.69", ] @@ -11158,10 +10992,10 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-application-crypto 40.1.0", + "sp-application-crypto", "sp-consensus-slots", "sp-inherents", - "sp-runtime 41.1.0", + "sp-runtime", "sp-timestamp", ] @@ -11174,11 +11008,11 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-application-crypto 40.1.0", + "sp-application-crypto", "sp-consensus-slots", - "sp-core 36.1.0", + "sp-core", "sp-inherents", - "sp-runtime 41.1.0", + "sp-runtime", "sp-timestamp", ] @@ -11192,10 +11026,10 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-application-crypto 40.1.0", - "sp-core 36.1.0", + "sp-application-crypto", + "sp-core", "sp-keystore", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -11208,33 +11042,6 @@ dependencies = [ "sp-timestamp", ] -[[package]] -name = "sp-core" -version = "26.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0db34a19be2efa0398a9506a365392d93a85220856d55e0eb78165ad2e1bedc" -dependencies = [ - "bip39", - "bitflags 1.3.2", - "bounded-collections 0.1.9", - "hash-db", - "hash256-std-hasher", - "log", - "merlin 2.0.1", - "parity-scale-codec", - "paste", - "primitive-types 0.12.2", - "scale-info", - "schnorrkel 0.9.1", - "secrecy 0.8.0", - "sp-debug-derive 12.0.0", - "sp-runtime-interface 22.0.0", - "sp-std 12.0.0", - "sp-storage 17.0.0", - "ss58-registry", - "zeroize", -] - [[package]] name = "sp-core" version = "36.1.0" @@ -11243,7 +11050,7 @@ dependencies = [ "array-bytes", "bitflags 1.3.2", "blake2 0.10.6", - "bounded-collections 0.2.4", + "bounded-collections", "bs58", "dyn-clonable", "ed25519-zebra", @@ -11255,24 +11062,24 @@ dependencies = [ "k256", "libsecp256k1", "log", - "merlin 3.0.0", + "merlin", "parity-bip39", "parity-scale-codec", "parking_lot 0.12.4", "paste", - "primitive-types 0.13.1", + "primitive-types", "rand 0.8.5", "scale-info", - "schnorrkel 0.11.5", + "schnorrkel", "secp256k1 0.28.2", "secrecy 0.8.0", "serde", "sp-crypto-hashing 0.1.0", - "sp-debug-derive 14.0.0", - "sp-externalities 0.30.0", - "sp-runtime-interface 29.0.1", - "sp-std 14.0.0", - "sp-storage 22.0.0", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", + "sp-std", + "sp-storage", "ss58-registry", "substrate-bip39", "thiserror 1.0.69", @@ -11324,17 +11131,6 @@ dependencies = [ "parking_lot 0.12.4", ] -[[package]] -name = "sp-debug-derive" -version = "12.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50535e1a5708d3ba5c1195b59ebefac61cc8679c2c24716b87a86e8b7ed2e4a1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "sp-debug-derive" version = "14.0.0" @@ -11344,25 +11140,13 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "sp-externalities" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884d05160bc89d0943d1c9fb8006c3d44b80f37f8af607aeff8d4d9cc82e279a" -dependencies = [ - "environmental", - "parity-scale-codec", - "sp-std 12.0.0", - "sp-storage 17.0.0", -] - [[package]] name = "sp-externalities" version = "0.30.0" dependencies = [ "environmental", "parity-scale-codec", - "sp-storage 22.0.0", + "sp-storage", ] [[package]] @@ -11373,7 +11157,7 @@ dependencies = [ "scale-info", "serde_json", "sp-api", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -11384,28 +11168,10 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-runtime 41.1.0", + "sp-runtime", "thiserror 1.0.69", ] -[[package]] -name = "sp-io" -version = "28.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301c0ce94f80b324465a6f6173183aa07b26bd71d67f94a44de1fd11dea4a7cb" -dependencies = [ - "bytes", - "parity-scale-codec", - "rustversion", - "sp-core 26.0.0", - "sp-externalities 0.23.0", - "sp-runtime-interface 22.0.0", - "sp-std 12.0.0", - "sp-tracing 14.0.0", - "tracing", - "tracing-core", -] - [[package]] name = "sp-io" version = "40.0.1" @@ -11419,13 +11185,13 @@ dependencies = [ "polkavm-derive", "rustversion", "secp256k1 0.28.2", - "sp-core 36.1.0", + "sp-core", "sp-crypto-hashing 0.1.0", - "sp-externalities 0.30.0", + "sp-externalities", "sp-keystore", - "sp-runtime-interface 29.0.1", + "sp-runtime-interface", "sp-state-machine", - "sp-tracing 17.1.0", + "sp-tracing", "sp-trie", "tracing", "tracing-core", @@ -11435,8 +11201,8 @@ dependencies = [ name = "sp-keyring" version = "41.0.0" dependencies = [ - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-core", + "sp-runtime", "strum 0.26.3", ] @@ -11446,8 +11212,8 @@ version = "0.42.0" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", - "sp-core 36.1.0", - "sp-externalities 0.30.0", + "sp-core", + "sp-externalities", ] [[package]] @@ -11474,7 +11240,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-application-crypto 40.1.0", + "sp-application-crypto", ] [[package]] @@ -11484,9 +11250,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-arithmetic", + "sp-core", + "sp-runtime", ] [[package]] @@ -11494,8 +11260,8 @@ name = "sp-offchain" version = "36.0.0" dependencies = [ "sp-api", - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-core", + "sp-runtime", ] [[package]] @@ -11512,28 +11278,7 @@ version = "34.0.0" dependencies = [ "rustc-hash 1.1.0", "serde", - "sp-core 36.1.0", -] - -[[package]] -name = "sp-runtime" -version = "29.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "082bae4a164b8b629ce9cee79ff3c6b20e66d11d8ef37398796567d616325da4" -dependencies = [ - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "paste", - "scale-info", - "sp-application-crypto 28.0.0", - "sp-arithmetic 21.0.0", - "sp-core 26.0.0", - "sp-io 28.0.0", - "sp-std 12.0.0", - "sp-weights 25.0.0", + "sp-core", ] [[package]] @@ -11553,36 +11298,17 @@ dependencies = [ "scale-info", "serde", "simple-mermaid", - "sp-application-crypto 40.1.0", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-std 14.0.0", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-std", "sp-trie", - "sp-weights 31.1.0", + "sp-weights", "tracing", "tuplex", ] -[[package]] -name = "sp-runtime-interface" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "695bba5d981a6fd3131b098d65f620601bd822501612bfb65897d4bb660762b1" -dependencies = [ - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types 0.12.2", - "sp-externalities 0.23.0", - "sp-runtime-interface-proc-macro 15.0.0", - "sp-std 12.0.0", - "sp-storage 17.0.0", - "sp-tracing 14.0.0", - "sp-wasm-interface 18.0.0", - "static_assertions", -] - [[package]] name = "sp-runtime-interface" version = "29.0.1" @@ -11591,29 +11317,16 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "polkavm-derive", - "primitive-types 0.13.1", - "sp-externalities 0.30.0", - "sp-runtime-interface-proc-macro 18.0.0", - "sp-std 14.0.0", - "sp-storage 22.0.0", - "sp-tracing 17.1.0", - "sp-wasm-interface 21.0.1", + "primitive-types", + "sp-externalities", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-storage", + "sp-tracing", + "sp-wasm-interface", "static_assertions", ] -[[package]] -name = "sp-runtime-interface-proc-macro" -version = "15.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2afcbd1bd18d323371111b66b7ac2870bdc1c86c3d7b0dae67b112ca52b4d8" -dependencies = [ - "Inflector", - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn 2.0.104", -] - [[package]] name = "sp-runtime-interface-proc-macro" version = "18.0.0" @@ -11633,9 +11346,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-core 36.1.0", + "sp-core", "sp-keystore", - "sp-runtime 41.1.0", + "sp-runtime", "sp-staking", ] @@ -11647,8 +11360,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-core", + "sp-runtime", ] [[package]] @@ -11661,8 +11374,8 @@ dependencies = [ "parking_lot 0.12.4", "rand 0.8.5", "smallvec", - "sp-core 36.1.0", - "sp-externalities 0.30.0", + "sp-core", + "sp-externalities", "sp-panic-handler", "sp-trie", "thiserror 1.0.69", @@ -11675,7 +11388,7 @@ name = "sp-statement-store" version = "20.1.0" dependencies = [ "aes-gcm", - "curve25519-dalek 4.1.3", + "curve25519-dalek", "ed25519-dalek", "hkdf", "parity-scale-codec", @@ -11683,38 +11396,20 @@ dependencies = [ "scale-info", "sha2 0.10.9", "sp-api", - "sp-application-crypto 40.1.0", - "sp-core 36.1.0", + "sp-application-crypto", + "sp-core", "sp-crypto-hashing 0.1.0", - "sp-externalities 0.30.0", - "sp-runtime 41.1.0", - "sp-runtime-interface 29.0.1", + "sp-externalities", + "sp-runtime", + "sp-runtime-interface", "thiserror 1.0.69", "x25519-dalek", ] -[[package]] -name = "sp-std" -version = "12.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c78c5a66682568cc7b153603c5d01a2cc8f5c221c7b1e921517a0eef18ae05" - [[package]] name = "sp-std" version = "14.0.0" -[[package]] -name = "sp-storage" -version = "17.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016f20812cc51bd479cc88d048c35d44cd3adde4accdb159d49d6050f2953595" -dependencies = [ - "parity-scale-codec", - "ref-cast", - "sp-debug-derive 12.0.0", - "sp-std 12.0.0", -] - [[package]] name = "sp-storage" version = "22.0.0" @@ -11723,7 +11418,7 @@ dependencies = [ "parity-scale-codec", "ref-cast", "serde", - "sp-debug-derive 14.0.0", + "sp-debug-derive", ] [[package]] @@ -11733,22 +11428,10 @@ dependencies = [ "async-trait", "parity-scale-codec", "sp-inherents", - "sp-runtime 41.1.0", + "sp-runtime", "thiserror 1.0.69", ] -[[package]] -name = "sp-tracing" -version = "14.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d727cb5265641ffbb7d4e42c18b63e29f6cfdbd240aae3bcf093c3d6eb29a19" -dependencies = [ - "parity-scale-codec", - "sp-std 12.0.0", - "tracing", - "tracing-core", -] - [[package]] name = "sp-tracing" version = "17.1.0" @@ -11764,7 +11447,7 @@ name = "sp-transaction-pool" version = "36.0.0" dependencies = [ "sp-api", - "sp-runtime 41.1.0", + "sp-runtime", ] [[package]] @@ -11774,9 +11457,9 @@ dependencies = [ "async-trait", "parity-scale-codec", "scale-info", - "sp-core 36.1.0", + "sp-core", "sp-inherents", - "sp-runtime 41.1.0", + "sp-runtime", "sp-trie", ] @@ -11793,8 +11476,8 @@ dependencies = [ "rand 0.8.5", "scale-info", "schnellru", - "sp-core 36.1.0", - "sp-externalities 0.30.0", + "sp-core", + "sp-externalities", "thiserror 1.0.69", "tracing", "trie-db", @@ -11811,8 +11494,8 @@ dependencies = [ "scale-info", "serde", "sp-crypto-hashing-proc-macro", - "sp-runtime 41.1.0", - "sp-std 14.0.0", + "sp-runtime", + "sp-std", "sp-version-proc-macro", "thiserror 1.0.69", ] @@ -11828,17 +11511,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "sp-wasm-interface" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d85813d46a22484cdf5e5afddbbe85442dd1b4d84d67a8c7792f92f9f93607" -dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", - "sp-std 12.0.0", -] - [[package]] name = "sp-wasm-interface" version = "21.0.1" @@ -11850,32 +11522,17 @@ dependencies = [ "wasmtime", ] -[[package]] -name = "sp-weights" -version = "25.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1689f9594c2c4d09ede3d8a991a9eb900654e424fb00b62f2b370170af347acd" -dependencies = [ - "parity-scale-codec", - "scale-info", - "smallvec", - "sp-arithmetic 21.0.0", - "sp-core 26.0.0", - "sp-debug-derive 12.0.0", - "sp-std 12.0.0", -] - [[package]] name = "sp-weights" version = "31.1.0" dependencies = [ - "bounded-collections 0.2.4", + "bounded-collections", "parity-scale-codec", "scale-info", "serde", "smallvec", - "sp-arithmetic 26.1.0", - "sp-debug-derive 14.0.0", + "sp-arithmetic", + "sp-debug-derive", ] [[package]] @@ -11935,7 +11592,7 @@ name = "staging-xcm" version = "16.2.0" dependencies = [ "array-bytes", - "bounded-collections 0.2.4", + "bounded-collections", "derive-where", "environmental", "frame-support", @@ -11945,8 +11602,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-runtime 41.1.0", - "sp-weights 31.1.0", + "sp-runtime", + "sp-weights", "xcm-procedural", ] @@ -11963,11 +11620,11 @@ dependencies = [ "parity-scale-codec", "polkadot-parachain-primitives", "scale-info", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-weights 31.1.0", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-weights", "staging-xcm", "staging-xcm-executor", "tracing", @@ -11983,11 +11640,11 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-arithmetic 26.1.0", - "sp-core 36.1.0", - "sp-io 40.0.1", - "sp-runtime 41.1.0", - "sp-weights 31.1.0", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-weights", "staging-xcm", "tracing", ] @@ -12079,7 +11736,7 @@ version = "0.6.0" dependencies = [ "hmac 0.12.1", "pbkdf2", - "schnorrkel 0.11.5", + "schnorrkel", "sha2 0.10.9", "zeroize", ] @@ -12103,8 +11760,8 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 36.1.0", - "sp-runtime 41.1.0", + "sp-core", + "sp-runtime", ] [[package]] @@ -12172,7 +11829,7 @@ dependencies = [ "jsonrpsee 0.24.9", "parity-scale-codec", "polkadot-sdk", - "primitive-types 0.13.1", + "primitive-types", "scale-bits", "scale-decode", "scale-encode", @@ -12226,7 +11883,7 @@ dependencies = [ "keccak-hash", "parity-scale-codec", "polkadot-sdk", - "primitive-types 0.13.1", + "primitive-types", "scale-bits", "scale-decode", "scale-encode", @@ -12303,7 +11960,7 @@ dependencies = [ "pbkdf2", "polkadot-sdk", "regex", - "schnorrkel 0.11.5", + "schnorrkel", "scrypt", "secp256k1 0.30.0", "secrecy 0.10.3", @@ -12911,7 +12568,7 @@ dependencies = [ "http 1.3.1", "httparse", "log", - "rand 0.9.1", + "rand 0.9.2", "rustls", "rustls-pki-types", "sha1", @@ -13142,7 +12799,7 @@ dependencies = [ "ark-poly 0.5.0", "ark-serialize 0.5.0", "ark-std 0.5.0", - "merlin 3.0.0", + "merlin", ] [[package]] @@ -13693,14 +13350,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" dependencies = [ - "webpki-root-certs 1.0.1", + "webpki-root-certs 1.0.2", ] [[package]] name = "webpki-root-certs" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86138b15b2b7d561bc4469e77027b8dd005a43dc502e9031d1f5afc8ce1f280e" +checksum = "4e4ffd8df1c57e87c325000a3d6ef93db75279dc3a231125aac571650f22b12a" dependencies = [ "rustls-pki-types", ] @@ -14234,7 +13891,7 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ - "curve25519-dalek 4.1.3", + "curve25519-dalek", "rand_core 0.6.4", "serde", "zeroize", @@ -14325,7 +13982,7 @@ dependencies = [ "nohash-hasher", "parking_lot 0.12.4", "pin-project", - "rand 0.9.1", + "rand 0.9.2", "static_assertions", "web-time", ] diff --git a/Cargo.toml b/Cargo.toml index da2843dc24..d707a19142 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -220,7 +220,7 @@ pallet-authorship = { version = "40.0.0", default-features = false } pallet-babe = { version = "40.0.0", default-features = false } pallet-balances = { version = "41.1.1", default-features = false, features = ['insecure_zero_ed']} pallet-contracts = { version = "40.1.0", default-features = false } -pallet-contracts-primitives = { version = "29.0.0", default-features = false} +#pallet-contracts-primitives = { version = "29.0.0", default-features = false} pallet-election-provider-multi-phase = { version = "39.2.0", default-features = false } pallet-grandpa = { version = "40.0.0", default-features = false } pallet-im-online = { version = "39.1.0", default-features = false } @@ -340,7 +340,7 @@ polymesh-runtime-testnet = { workspace = true } ## General futures = "0.3.21" -jsonrpsee = { version = "0.16.2", features = ["server"] } +jsonrpsee = { version = "0.24.9", features = ["server"] } log = "0.4" serde = { version = "1.0.136", default-features = false, features = ["alloc", "derive"] } serde_json = { version = "1.0", features = ["arbitrary_precision"] } diff --git a/pallets/asset/src/lib.rs b/pallets/asset/src/lib.rs index 507ed92557..211ee756dc 100644 --- a/pallets/asset/src/lib.rs +++ b/pallets/asset/src/lib.rs @@ -89,8 +89,9 @@ mod types; use codec::{Decode, Encode}; use core::mem; use currency::*; -use frame_support::dispatch::{DispatchError, DispatchResult}; +use frame_support::dispatch::DispatchResult; use frame_support::ensure; +use frame_support::pallet_prelude::DispatchError; use frame_support::traits::{Currency, Get, UnixTime}; use frame_support::weights::Weight; use frame_support::BoundedBTreeSet; diff --git a/pallets/base/src/lib.rs b/pallets/base/src/lib.rs index 55768e8a13..585600d1c3 100644 --- a/pallets/base/src/lib.rs +++ b/pallets/base/src/lib.rs @@ -25,9 +25,11 @@ #![cfg_attr(not(feature = "std"), no_std)] use core::mem; -use frame_support::dispatch::{DispatchError, DispatchResult}; +use frame_support::dispatch::DispatchResult; use frame_support::ensure; +use frame_support::pallet_prelude::DispatchError; use frame_support::traits::Get; + use polymesh_primitives::checked_inc::CheckedInc; pub use pallet::*; diff --git a/pallets/committee/src/lib.rs b/pallets/committee/src/lib.rs index 45dfd313f2..67126effa6 100644 --- a/pallets/committee/src/lib.rs +++ b/pallets/committee/src/lib.rs @@ -58,28 +58,24 @@ #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; +use codec::{Decode, Encode, MaxEncodedLen}; use core::marker::PhantomData; use core::mem; -use frame_support::{ - codec::{Decode, Encode, MaxEncodedLen}, - dispatch::{ - DispatchClass, DispatchError, DispatchResult, Dispatchable, GetDispatchInfo, Parameter, - PostDispatchInfo, Weight, - }, - ensure, - traits::{ChangeMembers, EnsureOrigin, InitializeMembers}, -}; -use polymesh_primitives::{ - traits::{ - group::{GroupTrait, InactiveMember, MemberCount}, - GovernanceGroupTrait, - }, - IdentityId, MaybeBlock, SystematicIssuers, GC_DID, +use frame_support::dispatch::{ + DispatchClass, DispatchResult, GetDispatchInfo, Parameter, PostDispatchInfo, }; +use frame_support::ensure; +use frame_support::pallet_prelude::DispatchError; +use frame_support::traits::{ChangeMembers, EnsureOrigin, InitializeMembers}; +use frame_support::weights::Weight; use scale_info::TypeInfo; -use sp_runtime::traits::Hash; +use sp_runtime::traits::{Dispatchable, Hash}; use sp_std::{prelude::*, vec}; +use polymesh_primitives::traits::group::{GroupTrait, InactiveMember, MemberCount}; +use polymesh_primitives::traits::GovernanceGroupTrait; +use polymesh_primitives::{IdentityId, MaybeBlock, SystematicIssuers, GC_DID}; + type IdentityPallet = pallet_identity::Pallet; /// The maximum number of concurrently active proposals defined for the sake of weight computation. @@ -407,7 +403,10 @@ pub mod pallet { /// # Errors /// * `FirstVoteReject`, if `call` hasn't been proposed and `approve == false`. /// * `NotAMember`, if the `origin` is not a member of this committee. - #[pallet::weight((>::WeightInfo::vote_or_propose_new_proposal().saturating_add(call.get_dispatch_info().weight), DispatchClass::Operational))] + #[pallet::weight((>::WeightInfo::vote_or_propose_new_proposal() + .saturating_add(call.get_dispatch_info().total_weight()), + DispatchClass::Operational + ))] #[pallet::call_index(3)] pub fn vote_or_propose( origin: OriginFor, diff --git a/pallets/common/src/protocol_fee.rs b/pallets/common/src/protocol_fee.rs index a57e9f1c23..5d1c721b97 100644 --- a/pallets/common/src/protocol_fee.rs +++ b/pallets/common/src/protocol_fee.rs @@ -13,13 +13,13 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use frame_support::dispatch::DispatchResult; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; /// Protocol fee operations. -#[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] #[derive(Serialize, Deserialize)] pub enum ProtocolOp { diff --git a/pallets/common/src/traits/checkpoint.rs b/pallets/common/src/traits/checkpoint.rs index 64d3dca277..3e40aba228 100644 --- a/pallets/common/src/traits/checkpoint.rs +++ b/pallets/common/src/traits/checkpoint.rs @@ -1,6 +1,6 @@ #![allow(missing_docs)] -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_std::collections::btree_map::BTreeMap; use sp_std::collections::btree_set::BTreeSet; @@ -10,13 +10,23 @@ use polymesh_primitives::calendar::{CalendarPeriod, CheckpointSchedule}; use polymesh_primitives::{impl_checked_inc, Moment}; /// ID of a `StoredSchedule`. -#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] -#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Default)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Copy, Clone, Debug, Default, Eq, Ord, PartialEq, PartialOrd)] pub struct ScheduleId(pub u64); impl_checked_inc!(ScheduleId); /// One or more scheduled checkpoints in the future. -#[derive(Encode, Decode, TypeInfo, Clone, Debug, Default, PartialEq, Eq)] +#[derive( + Encode, + Decode, + DecodeWithMemTracking, + TypeInfo, + Clone, + Debug, + Default, + PartialEq, + Eq +)] pub struct ScheduleCheckpoints { /// The timestamps of the scheduled checkpoints. pub pending: BTreeSet, diff --git a/pallets/compliance-manager/src/lib.rs b/pallets/compliance-manager/src/lib.rs index 71761f854b..26169b61ee 100644 --- a/pallets/compliance-manager/src/lib.rs +++ b/pallets/compliance-manager/src/lib.rs @@ -77,11 +77,14 @@ pub mod benchmarking; use codec::{Decode, Encode}; use core::result::Result; -use frame_support::dispatch::{DispatchError, DispatchResult}; +use frame_support::dispatch::DispatchResult; use frame_support::ensure; +use frame_support::pallet_prelude::DispatchError; use frame_support::traits::Get; use frame_support::weights::Weight; use frame_system::pallet_prelude::OriginFor; +use sp_std::{convert::From, prelude::*}; + use pallet_base::ensure_length_ok; use pallet_external_agents::{Config as EAConfig, GroupOfAgent}; use polymesh_common_utilities::protocol_fee::{ChargeProtocolFee, ProtocolOp}; @@ -96,7 +99,6 @@ use polymesh_primitives::{ proposition, storage_migration_ver, Claim, ConditionType, Context, IdentityId, TargetIdentity, TrustedFor, TrustedIssuer, WeightMeter, }; -use sp_std::{convert::From, prelude::*}; type ExternalAgents = pallet_external_agents::Pallet; type Identity = pallet_identity::Pallet; diff --git a/pallets/contracts/Cargo.toml b/pallets/contracts/Cargo.toml index 9f235876fb..35e8002cd4 100644 --- a/pallets/contracts/Cargo.toml +++ b/pallets/contracts/Cargo.toml @@ -13,7 +13,7 @@ codec = { workspace = true, default-features = false, features = ["derive"] } frame-system = { workspace = true, default-features = false } frame-support = { workspace = true, default-features = false } pallet-contracts = { workspace = true, default-features = false } -pallet-contracts-primitives = { workspace = true, default-features = false } +#pallet-contracts-primitives = { workspace = true, default-features = false } scale-info = { workspace = true, default-features = false, features = ["derive"] } sp-core = { workspace = true, default-features = false } sp-io = { workspace = true, default-features = false } diff --git a/pallets/contracts/src/chain_extension.rs b/pallets/contracts/src/chain_extension.rs index 94d26f9c59..8b8b1b1cc2 100644 --- a/pallets/contracts/src/chain_extension.rs +++ b/pallets/contracts/src/chain_extension.rs @@ -1,15 +1,17 @@ use codec::{Decode, DecodeLimit, Encode}; -use frame_support::dispatch::{DispatchError, Dispatchable, GetDispatchInfo}; +use frame_support::dispatch::GetDispatchInfo; use frame_support::ensure; -use frame_support::log::trace; +use frame_support::pallet_prelude::DispatchError; use frame_support::storage::unhashed; use frame_support::traits::{Get, GetCallMetadata}; +use frame_support::LOG_TARGET; use frame_system::RawOrigin; use scale_info::prelude::format; use scale_info::prelude::string::String; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_core::crypto::UncheckedFrom; +use sp_runtime::traits::Dispatchable; use pallet_contracts::chain_extension as ce; use pallet_contracts::Config as BConfig; @@ -166,14 +168,14 @@ where env.charge_weight(::WeightInfo::read_storage(key_len, max_len))?; let key = env.read(key_len)?; - trace!( + log::trace!( target: "runtime", "PolymeshExtension contract ReadStorage: key={:x?}", key ); let value = unhashed::get_raw(key.as_slice()); let value_len = value.as_ref().map(|v| v.len() as u32).unwrap_or_default(); - trace!( + log::trace!( target: "runtime", "PolymeshExtension contract ReadStorage: value length={:?}", value_len @@ -193,14 +195,14 @@ where ); } - trace!( + log::trace!( target: "runtime", "PolymeshExtension contract ReadStorage: value={:x?}", value ); let encoded = value.encode(); env.write(&encoded, false, None).map_err(|err| { - trace!( + log::trace!( target: "runtime", "PolymeshExtension failed to write storage value into contract memory:{:?}", err @@ -233,7 +235,7 @@ where } .encode(); env.write(&version, false, None).map_err(|err| { - trace!( + log::trace!( target: "runtime", "PolymeshExtension failed to write value into contract memory:{:?}", err @@ -256,18 +258,18 @@ where env.charge_weight(::WeightInfo::get_key_did())?; let key: T::AccountId = env.read_as()?; - trace!( + log::trace!( target: "runtime", "PolymeshExtension contract GetKeyDid: key={key:?}", ); let did = Identity::::get_identity(&key); - trace!( + log::trace!( target: "runtime", "PolymeshExtension contract GetKeyDid: did={did:?}", ); let encoded = did.encode(); env.write(&encoded, false, None).map_err(|err| { - trace!( + log::trace!( target: "runtime", "PolymeshExtension failed to write identity value into contract memory:{:?}", err @@ -306,12 +308,12 @@ where (KeyHasher::Twox, HashSize::B128) => hashing::twox_128(data.as_slice()).encode(), (KeyHasher::Twox, HashSize::B256) => hashing::twox_256(data.as_slice()).encode(), }; - trace!( + log::trace!( target: "runtime", "PolymeshExtension contract KeyHasher: hash={hash:x?}", ); env.write(&hash, false, None).map_err(|err| { - trace!( + log::trace!( target: "runtime", "PolymeshExtension failed to write hash into contract memory:{:?}", err @@ -358,13 +360,13 @@ where return Err(Error::::NoUpgradesSupported.into()); } - trace!( + log::trace!( target: "runtime", "PolymeshExtension contract GetLatestApiUpgrade: {latest_api_hash:?}", ); let encoded_api_hash = latest_api_hash.unwrap_or_default().encode(); env.write(&encoded_api_hash, false, None).map_err(|err| { - trace!( + log::trace!( target: "runtime", "PolymeshExtension failed to write api code hash value into contract memory:{err:?}", ); @@ -472,18 +474,18 @@ where env.charge_weight(::WeightInfo::get_next_asset_id())?; let caller_account: T::AccountId = env.read_as()?; - trace!( + log::trace!( target: "runtime", "PolymeshExtension contract GetNextAssetId: caller_account={caller_account:?}", ); let asset_id = T::AssetFn::generate_asset_id(caller_account); - trace!( + log::trace!( target: "runtime", "PolymeshExtension contract GetNextAssetId: asset_id={asset_id:?}", ); let encoded = asset_id.encode(); env.write(&encoded, false, None).map_err(|err| { - trace!( + log::trace!( target: "runtime", "PolymeshExtension failed to write asset_id value into contract memory:{:?}", err @@ -517,7 +519,7 @@ where // Decode chain extension id. let func_id = FuncId::try_from(ext_id); - trace!( + log::trace!( target: "runtime", "PolymeshExtension contract calling: {func_id:?}", ); @@ -540,7 +542,7 @@ where Some(FuncId::CallRuntimeWithError) => call_runtime(env, true), Some(FuncId::GetNextAssetId) => get_next_asset_id(env), None => { - trace!( + log::trace!( target: "runtime", "PolymeshExtension contract calling invalid ext_id={ext_id:?}", ); @@ -548,7 +550,7 @@ where } }; if let Err(err) = &res { - trace!( + log::trace!( target: "runtime", "PolymeshExtension: err={err:?}", ); diff --git a/pallets/corporate-actions/src/ballot/mod.rs b/pallets/corporate-actions/src/ballot/mod.rs index fbef4e637a..0848c17e20 100644 --- a/pallets/corporate-actions/src/ballot/mod.rs +++ b/pallets/corporate-actions/src/ballot/mod.rs @@ -77,51 +77,52 @@ #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; -use crate as ca; -use ca::{CAId, CAKind, CorporateAction}; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use core::convert::TryInto; use core::mem; -use frame_support::{ - dispatch::{DispatchError, DispatchResult}, - ensure, - traits::Get, - weights::Weight, -}; +use frame_support::dispatch::DispatchResult; +use frame_support::ensure; +use frame_support::pallet_prelude::DispatchError; +use frame_support::traits::Get; +use frame_support::weights::Weight; +use scale_info::TypeInfo; +use serde::{Deserialize, Serialize}; +use sp_runtime::traits::Zero; +use sp_std::prelude::*; + use pallet_asset::checkpoint; use pallet_base::ensure_string_limited; use polymesh_common_utilities::protocol_fee::{ChargeProtocolFee, ProtocolOp}; use polymesh_primitives::{storage_migration_ver, Balance, EventDid, IdentityId, Moment}; use polymesh_primitives_derive::VecU8StrongTyped; -use scale_info::TypeInfo; -use serde::{Deserialize, Serialize}; -use sp_runtime::traits::Zero; -use sp_std::prelude::*; + +use crate as ca; +use ca::{CAId, CAKind, CorporateAction}; type Checkpoint = checkpoint::Pallet; type CA = ca::Pallet; type ExternalAgents = pallet_external_agents::Pallet; /// A wrapper for a motion title. -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, DecodeWithMemTracking)] #[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, PartialEq, Eq, Hash, Default, Debug)] pub struct MotionTitle(pub Vec); /// A wrapper for a motion info link. -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, DecodeWithMemTracking)] #[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, PartialEq, Eq, Hash, Default, Debug)] pub struct MotionInfoLink(pub Vec); /// A wrapper for a choice's title. -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, DecodeWithMemTracking)] #[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, PartialEq, Eq, Hash, Default, Debug)] pub struct ChoiceTitle(pub Vec); /// Details about motions -#[derive(Serialize, Deserialize)] +#[derive(Deserialize, DecodeWithMemTracking, Serialize)] #[derive(Clone, PartialEq, Eq, Default, Debug, Encode, Decode, TypeInfo)] pub struct Motion { /// Title of the motion @@ -135,10 +136,10 @@ pub struct Motion { pub choices: Vec, } -/// A wrapper for a ballot's title. -#[derive(Serialize, Deserialize)] +/// A wrapper for a ballot's title.] #[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] -#[derive(Clone, PartialEq, Eq, Hash, Debug, Default)] +#[derive(PartialEq, Eq, Hash, Debug, DecodeWithMemTracking)] +#[derive(Clone, Default, Deserialize, Serialize)] pub struct BallotTitle(pub Vec); /// Metadata about a ballot. @@ -148,8 +149,8 @@ pub struct BallotTitle(pub Vec); /// When the metadata has been committed to chain, /// the needed numbers aforementioned are cached away, /// and the metadata is not read on-chain again. -#[derive(Serialize, Deserialize)] -#[derive(Clone, PartialEq, Eq, Debug, Encode, TypeInfo, Decode, Default)] +#[derive(Debug, Decode, DecodeWithMemTracking, Eq, Encode, PartialEq, TypeInfo)] +#[derive(Clone, Default, Deserialize, Serialize)] pub struct BallotMeta { /// The ballot's title. pub title: BallotTitle, @@ -167,19 +168,9 @@ impl BallotMeta { } /// Timestamp range details about vote start / end. -#[derive(Serialize, Deserialize)] -#[derive( - Copy, - Clone, - PartialEq, - Eq, - Default, - Debug, - Encode, - Decode, - TypeInfo, - MaxEncodedLen -)] +#[derive(Encode, Decode, DecodeWithMemTracking, MaxEncodedLen)] +#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, TypeInfo)] +#[derive(Deserialize, Serialize)] pub struct BallotTimeRange { /// Timestamp at which voting starts. pub start: Moment, @@ -189,19 +180,9 @@ pub struct BallotTimeRange { } /// A vote cast on some choice in some motion in a ballot. -#[derive(Serialize, Deserialize)] -#[derive( - Copy, - Clone, - PartialEq, - Eq, - Default, - Debug, - Encode, - Decode, - TypeInfo, - MaxEncodedLen -)] +#[derive(Encode, Decode, DecodeWithMemTracking, MaxEncodedLen)] +#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, TypeInfo)] +#[derive(Deserialize, Serialize)] pub struct BallotVote { /// The weight / voting power assigned to this vote. pub power: Balance, diff --git a/pallets/corporate-actions/src/distribution/mod.rs b/pallets/corporate-actions/src/distribution/mod.rs index b9f92cd205..8e3a51a279 100644 --- a/pallets/corporate-actions/src/distribution/mod.rs +++ b/pallets/corporate-actions/src/distribution/mod.rs @@ -64,15 +64,17 @@ #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; -use crate as ca; -use ca::{CAId, Tax}; -use codec::{Decode, Encode, MaxEncodedLen}; -use frame_support::{ - dispatch::{DispatchError, DispatchResult}, - ensure, - traits::Get, - weights::Weight, -}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; +use frame_support::dispatch::DispatchResult; +use frame_support::ensure; +use frame_support::pallet_prelude::DispatchError; +use frame_support::traits::Get; +use frame_support::weights::Weight; +use scale_info::TypeInfo; +use serde::{Deserialize, Serialize}; +use sp_runtime::traits::Zero; +use sp_std::prelude::*; + use pallet_identity::PermissionedCallOriginData; use polymesh_common_utilities::protocol_fee::{ChargeProtocolFee, ProtocolOp}; use polymesh_primitives::asset::AssetId; @@ -80,10 +82,9 @@ use polymesh_primitives::{ constants::currency::ONE_UNIT, storage_migration_ver, traits::PortfolioSubTrait, Balance, EventDid, IdentityId, Moment, PortfolioId, PortfolioNumber, SecondaryKey, WeightMeter, }; -use scale_info::TypeInfo; -use serde::{Deserialize, Serialize}; -use sp_runtime::traits::Zero; -use sp_std::prelude::*; + +use crate as ca; +use ca::{CAId, Tax}; storage_migration_ver!(1); @@ -100,7 +101,7 @@ pub const PER_SHARE_PRECISION: Balance = 1_000_000; /// A capital distribution's various details. /// /// All information contained is used by on-chain logic. -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, DecodeWithMemTracking)] #[derive( Copy, Clone, diff --git a/pallets/corporate-actions/src/lib.rs b/pallets/corporate-actions/src/lib.rs index e9a3c789a5..332299d916 100644 --- a/pallets/corporate-actions/src/lib.rs +++ b/pallets/corporate-actions/src/lib.rs @@ -91,9 +91,10 @@ pub mod benchmarking; pub mod ballot; pub mod distribution; -use codec::{Decode, Encode, MaxEncodedLen}; -use frame_support::dispatch::{DispatchError, DispatchResult}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; +use frame_support::dispatch::DispatchResult; use frame_support::ensure; +use frame_support::pallet_prelude::DispatchError; use frame_support::traits::Get; use frame_support::weights::Weight; use frame_system::ensure_root; @@ -125,17 +126,8 @@ impl CAConfig for T {} pub type Tax = Permill; /// How should `identities` in `TargetIdentities` be used? -#[derive( - Clone, - Copy, - PartialEq, - Eq, - Encode, - Decode, - TypeInfo, - MaxEncodedLen, - Debug -)] +#[derive(Decode, Encode, Eq, PartialEq, TypeInfo, MaxEncodedLen)] +#[derive(Copy, Clone, Debug, DecodeWithMemTracking)] pub enum TargetTreatment { /// Only those identities should be included. Include, @@ -161,7 +153,8 @@ impl TargetTreatment { } /// A description of which identities that a CA will apply to. -#[derive(Clone, PartialEq, Eq, Encode, Decode, TypeInfo, Default, Debug)] +#[derive(Decode, Default, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Clone, Debug, DecodeWithMemTracking)] pub struct TargetIdentities { /// The specified identities either relevant or irrelevant, depending on `treatment`, for CAs. pub identities: Vec, @@ -186,17 +179,8 @@ impl TargetIdentities { } /// The kind of a `CorporateAction`. -#[derive( - Copy, - Clone, - PartialEq, - Eq, - Encode, - Decode, - TypeInfo, - MaxEncodedLen, - Debug -)] +#[derive(Copy, Debug, Decode, Encode, TypeInfo, MaxEncodedLen)] +#[derive(Clone, DecodeWithMemTracking, Eq, PartialEq)] pub enum CAKind { /// A predictable benefit. /// These are known at the time the asset is created. @@ -227,22 +211,13 @@ impl CAKind { } } -#[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] -#[derive(Clone, PartialEq, Eq, Default, Debug)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, VecU8StrongTyped)] +#[derive(Clone, Debug, Default, Eq, PartialEq)] pub struct CADetails(pub Vec); /// Defines how to identify a CA's associated checkpoint, if any. -#[derive( - Copy, - Clone, - PartialEq, - Eq, - Encode, - Decode, - TypeInfo, - MaxEncodedLen, - Debug -)] +#[derive(Copy, Debug, Decode, Encode, TypeInfo, MaxEncodedLen)] +#[derive(Clone, DecodeWithMemTracking, Eq, PartialEq)] pub enum CACheckpoint { /// CA uses a record date scheduled to occur in the future. /// Checkpoint ID will be taken after the record date. @@ -257,17 +232,8 @@ pub enum CACheckpoint { /// Defines the record date, at which impact should be calculated, /// along with checkpoint info to assess the impact at the date. -#[derive( - Copy, - Clone, - PartialEq, - Eq, - Encode, - Decode, - TypeInfo, - MaxEncodedLen, - Debug -)] +#[derive(Copy, Debug, Decode, Encode, TypeInfo, MaxEncodedLen)] +#[derive(Clone, DecodeWithMemTracking, Eq, PartialEq)] pub struct RecordDate { /// When the impact should be calculated, or already has. pub date: Moment, @@ -276,17 +242,8 @@ pub struct RecordDate { } /// Input specification of the record date used to derive impact for a CA. -#[derive( - Copy, - Clone, - PartialEq, - Eq, - Encode, - Decode, - TypeInfo, - MaxEncodedLen, - Debug -)] +#[derive(Decode, Encode, Eq, MaxEncodedLen, PartialEq, TypeInfo)] +#[derive(Clone, Copy, Debug, DecodeWithMemTracking)] pub enum RecordDateSpec { /// Record date is in the future. /// A checkpoint should be created. @@ -299,7 +256,8 @@ pub enum RecordDateSpec { /// Details of a generic CA. /// The `(AssetId, ID)` denoting a unique identifier for the CA is stored as a key outside. -#[derive(Clone, PartialEq, Eq, Encode, Decode, TypeInfo, Debug)] +#[derive(Debug, Decode, Encode, TypeInfo)] +#[derive(Clone, DecodeWithMemTracking, Eq, PartialEq)] pub struct CorporateAction { /// The kind of CA that this is. pub kind: CAKind, @@ -330,33 +288,14 @@ impl CorporateAction { /// A `AssetId`-local CA ID. /// By *local*, we mean that the same number might be used for a different `AssetId` /// to uniquely identify a different CA. -#[derive( - Copy, - Clone, - PartialEq, - Eq, - Encode, - Decode, - TypeInfo, - MaxEncodedLen, - Default, - Debug -)] +#[derive(Decode, Encode, Eq, MaxEncodedLen, PartialEq, TypeInfo)] +#[derive(Clone, Copy, Debug, Default, DecodeWithMemTracking)] pub struct LocalCAId(pub u32); impl_checked_inc!(LocalCAId); /// A unique global identifier for a CA. -#[derive( - Copy, - Clone, - PartialEq, - Eq, - Encode, - Decode, - TypeInfo, - MaxEncodedLen, - Debug -)] +#[derive(Decode, Encode, Eq, MaxEncodedLen, PartialEq, TypeInfo)] +#[derive(Clone, Copy, Debug, DecodeWithMemTracking)] pub struct CAId { /// The `[`AssetId`]` component used to disambiguate the `local` one. pub asset_id: AssetId, @@ -364,7 +303,8 @@ pub struct CAId { pub local_id: LocalCAId, } -#[derive(Clone, PartialEq, Eq, Encode, Decode, TypeInfo, Debug)] +#[derive(Decode, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Clone, Debug, DecodeWithMemTracking)] pub struct InitiateCorporateActionArgs { asset_id: AssetId, kind: CAKind, diff --git a/pallets/identity/src/claims.rs b/pallets/identity/src/claims.rs index fe479d1b80..a09e6d119c 100644 --- a/pallets/identity/src/claims.rs +++ b/pallets/identity/src/claims.rs @@ -13,25 +13,24 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use crate::{ - Claim1stKey, Claim2ndKey, Claims, Config, CustomClaimIdSequence, CustomClaims, - CustomClaimsInverse, DidRecords, Error, Event, Pallet, ParentDid, -}; -use frame_support::{ - dispatch::{DispatchError, DispatchResult}, - ensure, -}; +use frame_support::ensure; +use frame_support::pallet_prelude::{DispatchError, DispatchResult}; use frame_system::ensure_root; -use pallet_base::{ensure_string_limited, try_next_pre}; +use sp_runtime::traits::{CheckedAdd, SaturatedConversion, Zero}; +use sp_std::prelude::*; +use pallet_base::{ensure_string_limited, try_next_pre}; use polymesh_common_utilities::protocol_fee::ProtocolOp; use polymesh_primitives::identity_claim::CustomClaimTypeId; +use polymesh_primitives::traits::group::{GroupTrait, InactiveMember}; use polymesh_primitives::{ - traits::group::{GroupTrait, InactiveMember}, CddId, Claim, ClaimType, IdentityClaim, IdentityId, Scope, SecondaryKey, SystematicIssuers, }; -use sp_runtime::traits::{CheckedAdd, SaturatedConversion, Zero}; -use sp_std::prelude::*; + +use crate::{ + Claim1stKey, Claim2ndKey, Claims, Config, CustomClaimIdSequence, CustomClaims, + CustomClaimsInverse, DidRecords, Error, Event, Pallet, ParentDid, +}; struct CddClaimChecker { filter_cdd_id: Option, diff --git a/pallets/identity/src/lib.rs b/pallets/identity/src/lib.rs index 5ca69cb3a4..cea2cfed2f 100644 --- a/pallets/identity/src/lib.rs +++ b/pallets/identity/src/lib.rs @@ -94,12 +94,12 @@ pub use types::{Claim1stKey, Claim2ndKey, DidStatus, PermissionedCallOriginData, use codec::{Decode, Encode}; use core::convert::From; use frame_support::dispatch::DispatchClass::{Normal, Operational}; -use frame_support::dispatch::{ - DispatchError, DispatchResult, GetDispatchInfo, Pays, PostDispatchInfo, Weight, -}; +use frame_support::dispatch::{DispatchResult, GetDispatchInfo, Pays, PostDispatchInfo}; +use frame_support::pallet_prelude::DispatchError; use frame_support::traits::{ ChangeMembers, Currency, EnsureOrigin, Get, GetCallMetadata, InitializeMembers, }; +use frame_support::weights::Weight; use frame_support::Parameter; use frame_system::ensure_root; use polymesh_common_utilities::{ diff --git a/pallets/multisig/src/lib.rs b/pallets/multisig/src/lib.rs index 68192a3490..bb8e071062 100644 --- a/pallets/multisig/src/lib.rs +++ b/pallets/multisig/src/lib.rs @@ -72,12 +72,12 @@ pub mod benchmarking; use codec::{Decode, Encode}; use core::convert::From; use frame_support::dispatch::{ - DispatchError, DispatchResult, DispatchResultWithPostInfo, GetDispatchInfo, PostDispatchInfo, - Weight, + DispatchResult, DispatchResultWithPostInfo, GetDispatchInfo, PostDispatchInfo, }; -use frame_support::ensure; +use frame_support::pallet_prelude::DispatchError; use frame_support::traits::{Get, GetCallMetadata, IsSubType, UnfilteredDispatchable}; -use frame_support::BoundedVec; +use frame_support::weights::Weight; +use frame_support::{ensure, BoundedVec}; use frame_system::ensure_signed; use sp_runtime::traits::{Dispatchable, Hash}; use sp_std::convert::TryFrom; @@ -260,7 +260,7 @@ pub mod pallet { #[pallet::weight({ ::WeightInfo::create_proposal() .saturating_add(::WeightInfo::execute_proposal()) - .saturating_add(proposal.get_dispatch_info().weight) + .saturating_add(proposal.get_dispatch_info().total_weight()) })] pub fn create_proposal( origin: OriginFor, @@ -1047,7 +1047,7 @@ impl Pallet { expiry: Option, ) -> DispatchResultWithPostInfo { Self::ensure_ms_signer(multisig, &signer)?; - let max_weight = proposal.get_dispatch_info().weight; + let max_weight = proposal.get_dispatch_info().total_weight(); let caller_did = Self::ensure_ms_get_did(multisig)?; let proposal_id = NextProposalId::::get(multisig); Self::ensure_valid_expiry(&expiry)?; @@ -1126,7 +1126,7 @@ impl Pallet { .ok_or_else(|| Error::::ProposalMissing)?; // Ensure `max_weight` was enough to cover the worst-case weight. - let proposal_weight = proposal.get_dispatch_info().weight; + let proposal_weight = proposal.get_dispatch_info().total_weight(); ensure!( proposal_weight.all_lte(max_weight), Error::::MaxWeightTooLow diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 6517349864..b45cf834e4 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1,8 +1,7 @@ #![cfg_attr(not(feature = "std"), no_std)] -use frame_support::dispatch::{ - DispatchError, DispatchResult, DispatchResultWithPostInfo, PostDispatchInfo, -}; +use frame_support::dispatch::{DispatchResult, DispatchResultWithPostInfo, PostDispatchInfo}; +use frame_support::pallet_prelude::DispatchError; use frame_support::traits::Get; use frame_support::weights::Weight; use frame_support::{ensure, require_transactional}; @@ -19,8 +18,8 @@ use polymesh_primitives::nft::{ NFTCollection, NFTCollectionId, NFTCollectionKeys, NFTCount, NFTId, NFTMetadataAttribute, NFTs, }; use polymesh_primitives::settlement::InstructionId; +use polymesh_primitives::traits::{ComplianceFnConfig, NFTTrait}; use polymesh_primitives::{ - traits::{ComplianceFnConfig, NFTTrait}, IdentityId, Memo, PortfolioId, PortfolioKind, PortfolioUpdateReason, WeightMeter, }; diff --git a/pallets/permissions/src/lib.rs b/pallets/permissions/src/lib.rs index 570cf223c6..7ed62d3c50 100644 --- a/pallets/permissions/src/lib.rs +++ b/pallets/permissions/src/lib.rs @@ -25,21 +25,21 @@ extern crate alloc; #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use core::mem; -use frame_support::{ - dispatch::{DispatchError, DispatchResult}, - traits::{CallMetadata, GetCallMetadata}, -}; -use polymesh_primitives::{ExtrinsicName, IdentityId, PalletName, SecondaryKey}; +use frame_support::dispatch::DispatchResult; +use frame_support::pallet_prelude::*; +use frame_support::traits::{CallMetadata, GetCallMetadata}; use scale_info::TypeInfo; -use sp_runtime::{ - traits::{DispatchInfoOf, PostDispatchInfoOf, SignedExtension}, - transaction_validity::{TransactionValidity, TransactionValidityError, ValidTransaction}, +use sp_runtime::traits::{DispatchInfoOf, PostDispatchInfoOf, SignedExtension}; +use sp_runtime::transaction_validity::{ + TransactionValidity, TransactionValidityError, ValidTransaction, }; -use sp_std::{fmt, marker::PhantomData, result::Result, vec}; +use sp_std::marker::PhantomData; +use sp_std::result::Result; +use sp_std::{fmt, vec}; -use frame_support::pallet_prelude::*; +use polymesh_primitives::{ExtrinsicName, IdentityId, PalletName, SecondaryKey}; pub use pallet::*; @@ -152,7 +152,8 @@ pub mod pallet { } /// A signed extension used in checking call permissions. -#[derive(Encode, Decode, TypeInfo, Clone, Eq, PartialEq, Default)] +#[derive(Decode, DecodeWithMemTracking, Encode)] +#[derive(Clone, Default, Eq, PartialEq, TypeInfo)] #[scale_info(skip_type_params(T))] pub struct StoreCallMetadata(PhantomData); diff --git a/pallets/pips/Cargo.toml b/pallets/pips/Cargo.toml index 9ecbca393d..f92e90ab33 100644 --- a/pallets/pips/Cargo.toml +++ b/pallets/pips/Cargo.toml @@ -56,6 +56,7 @@ std = [ "frame-system/std", "pallet-base/std", "pallet-balances/std", + "pallet-committee/std", "pallet-group/std", "pallet-identity/std", "pallet-timestamp/std", diff --git a/pallets/pips/src/lib.rs b/pallets/pips/src/lib.rs index 1518b9824c..5c2f9e7290 100644 --- a/pallets/pips/src/lib.rs +++ b/pallets/pips/src/lib.rs @@ -74,12 +74,13 @@ mod types; use codec::{Decode, Encode}; use frame_support::dispatch::DispatchClass::Operational; -use frame_support::dispatch::{DispatchResult, DispatchResultWithPostInfo, Weight}; +use frame_support::dispatch::{DispatchResult, DispatchResultWithPostInfo}; use frame_support::ensure; use frame_support::pallet_prelude::*; use frame_support::storage::types::StorageValue; use frame_support::traits::schedule::{DispatchTime, Named}; use frame_support::traits::{Currency, EnsureOrigin, Get, WithdrawReasons}; +use frame_support::weights::Weight; use frame_system::pallet_prelude::*; use frame_system::{ensure_root, ensure_signed, RawOrigin}; use sp_runtime::traits::{BlakeTwo256, Dispatchable, Hash, One, Saturating, Zero}; diff --git a/pallets/pips/src/types.rs b/pallets/pips/src/types.rs index 2f155f1c06..f5c961d3a5 100644 --- a/pallets/pips/src/types.rs +++ b/pallets/pips/src/types.rs @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use core::cmp::Ordering; use frame_support::traits::schedule::{Priority, HARD_DEADLINE}; use frame_support::traits::LockIdentifier; @@ -41,13 +41,13 @@ pub const MAX_NORMAL_PRIORITY: Priority = HARD_DEADLINE + 1; pub(crate) const PIPS_LOCK_ID: LockIdentifier = *b"pips "; /// A wrapper for a proposal description. -#[derive(Decode, Encode, TypeInfo, VecU8StrongTyped)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] pub struct PipDescription(pub Vec); /// The global and unique identitifer of a Polymesh Improvement Proposal (PIP). #[derive(Serialize, Deserialize)] -#[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Default, Debug)] pub struct PipId(pub u32); impl_checked_inc!(PipId); @@ -96,7 +96,7 @@ pub enum VoteCount { /// Either the entire proposal encoded as a byte vector or its hash. The latter represents large /// proposals. -#[derive(Decode, Encode, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] #[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] pub enum ProposalData { /// The hash of the proposal. @@ -186,7 +186,7 @@ pub struct VoteByPip { } /// The state a PIP is in. -#[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] pub enum ProposalState { /// Initial state. Proposal is open to voting. @@ -217,7 +217,7 @@ pub struct DepositInfo { /// ID of the taken snapshot in a sequence. #[derive(Serialize, Deserialize)] -#[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd)] pub struct SnapshotId(pub u32); impl_checked_inc!(SnapshotId); @@ -237,9 +237,8 @@ pub struct SnapshotMetadata { } /// A PIP in the snapshot's priority queue for consideration by the GC. -#[cfg_attr(feature = "std", derive(Debug))] -#[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] -#[derive(Clone, Copy, Eq, PartialEq)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, MaxEncodedLen)] +#[derive(Clone, Copy, Debug, Eq, PartialEq)] pub struct SnapshottedPip { /// Identifies the PIP this refers to. pub id: PipId, @@ -269,7 +268,8 @@ pub(crate) fn compare_spip(l: &SnapshottedPip, r: &SnapshottedPip) -> Ordering { /// A result to enact for one or many PIPs in the snapshot queue. // This type is only here due to `enact_snapshot_results`. -#[derive(Clone, Copy, Debug, Decode, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Clone, Copy, Debug)] pub enum SnapshotResult { /// Approve the PIP and move it to the execution queue. Approve, diff --git a/pallets/portfolio/src/lib.rs b/pallets/portfolio/src/lib.rs index 2e59de1b20..362aa8b1fd 100644 --- a/pallets/portfolio/src/lib.rs +++ b/pallets/portfolio/src/lib.rs @@ -47,9 +47,9 @@ pub mod benchmarking; use codec::{Decode, Encode}; use core::{iter, mem}; -use frame_support::dispatch::{DispatchError, DispatchResult}; +use frame_support::dispatch::DispatchResult; use frame_support::ensure; -use frame_support::pallet_prelude::Get; +use frame_support::pallet_prelude::{DispatchError, Get}; use frame_support::weights::Weight; use sp_arithmetic::traits::Zero; use sp_std::collections::btree_set::BTreeSet; @@ -57,13 +57,11 @@ use sp_std::prelude::*; use pallet_identity::PermissionedCallOriginData; use polymesh_primitives::asset::AssetId; +use polymesh_primitives::identity_id::PortfolioValidityResult; +use polymesh_primitives::traits::{AssetFnConfig, AssetFnTrait, NFTTrait, PortfolioSubTrait}; use polymesh_primitives::{ - extract_auth, - identity_id::PortfolioValidityResult, - storage_migration_ver, - traits::{AssetFnConfig, AssetFnTrait, NFTTrait, PortfolioSubTrait}, - Balance, Fund, FundDescription, IdentityId, Memo, NFTId, PortfolioId, PortfolioKind, - PortfolioName, PortfolioNumber, SecondaryKey, + extract_auth, storage_migration_ver, Balance, Fund, FundDescription, IdentityId, Memo, NFTId, + PortfolioId, PortfolioKind, PortfolioName, PortfolioNumber, SecondaryKey, }; fn count_token_moves(funds: &[Fund]) -> (u32, u32) { diff --git a/pallets/protocol-fee/src/lib.rs b/pallets/protocol-fee/src/lib.rs index 406f11c9b5..4fd039c791 100644 --- a/pallets/protocol-fee/src/lib.rs +++ b/pallets/protocol-fee/src/lib.rs @@ -38,20 +38,18 @@ #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; -use frame_support::{ - dispatch::{DispatchError, DispatchResult}, - traits::{Currency, ExistenceRequirement, OnUnbalanced, WithdrawReasons}, - weights::Weight, -}; +use frame_support::dispatch::DispatchResult; +use frame_support::pallet_prelude::DispatchError; +use frame_support::traits::{Currency, ExistenceRequirement, OnUnbalanced, WithdrawReasons}; +use frame_support::weights::Weight; +use sp_runtime::{traits::Zero, Perbill}; +use sp_std::vec::Vec; + use frame_system::ensure_root; use pallet_identity::Config as IdentityConfig; use polymesh_common_utilities::protocol_fee::{ChargeProtocolFee, ProtocolOp}; -use polymesh_primitives::{ - traits::{CddAndFeeDetails, SubsidiserTrait}, - Balance, IdentityId, PosRatio, GC_DID, -}; -use sp_runtime::{traits::Zero, Perbill}; -use sp_std::vec::Vec; +use polymesh_primitives::traits::{CddAndFeeDetails, SubsidiserTrait}; +use polymesh_primitives::{Balance, IdentityId, PosRatio, GC_DID}; type NegativeImbalanceOf = <::Currency as Currency< ::AccountId, diff --git a/pallets/relayer/src/lib.rs b/pallets/relayer/src/lib.rs index 416b513a34..b88d2428e8 100644 --- a/pallets/relayer/src/lib.rs +++ b/pallets/relayer/src/lib.rs @@ -44,22 +44,22 @@ pub mod benchmarking; use codec::{Decode, Encode, MaxEncodedLen}; -use frame_support::{ - dispatch::{DispatchError, DispatchResult}, - ensure, fail, - traits::{Contains, GetCallMetadata}, - weights::Weight, -}; +use frame_support::dispatch::DispatchResult; +use frame_support::pallet_prelude::DispatchError; +use frame_support::traits::{Contains, GetCallMetadata}; +use frame_support::weights::Weight; +use frame_support::{ensure, fail}; use frame_system::ensure_signed; -use pallet_identity::PermissionedCallOriginData; -use polymesh_primitives::{ - extract_auth, traits::SubsidiserTrait, AuthorizationData, Balance, EventDid, IdentityId, - Signatory, TransactionError, -}; use scale_info::TypeInfo; use sp_runtime::transaction_validity::InvalidTransaction; use sp_std::vec; +use pallet_identity::PermissionedCallOriginData; +use polymesh_primitives::traits::SubsidiserTrait; +use polymesh_primitives::{ + extract_auth, AuthorizationData, Balance, EventDid, IdentityId, Signatory, TransactionError, +}; + type Identity = pallet_identity::Pallet; pub trait WeightInfo { diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index 62a7615f4b..d84aad3221 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -22,30 +22,27 @@ pub mod impls; pub mod migration; pub mod runtime; -pub use frame_support::{ - dispatch::{DispatchClass, GetDispatchInfo, Weight}, - parameter_types, - traits::{Currency, Get}, - weights::{ - constants::{ - WEIGHT_REF_TIME_PER_MICROS, WEIGHT_REF_TIME_PER_MILLIS, WEIGHT_REF_TIME_PER_NANOS, - WEIGHT_REF_TIME_PER_SECOND, - }, - RuntimeDbWeight, WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, - }, +pub use frame_support::dispatch::{DispatchClass, GetDispatchInfo}; +pub use frame_support::parameter_types; +pub use frame_support::traits::{Currency, Get}; +pub use frame_support::weights::constants::{ + WEIGHT_REF_TIME_PER_MICROS, WEIGHT_REF_TIME_PER_MILLIS, WEIGHT_REF_TIME_PER_NANOS, + WEIGHT_REF_TIME_PER_SECOND, +}; +pub use frame_support::weights::{ + RuntimeDbWeight, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, }; use frame_system::limits::{BlockLength, BlockWeights}; use smallvec::smallvec; pub use sp_runtime::transaction_validity::TransactionPriority; pub use sp_runtime::{Perbill, Permill}; +pub use impls::Author; use pallet_balances as balances; use polymesh_primitives::constants::currency::*; pub use polymesh_primitives::RocksDbWeight; use polymesh_primitives::{Balance, BlockNumber, IdentityId, Moment}; -pub use impls::Author; - pub type NegativeImbalance = as Currency<::AccountId>>::NegativeImbalance; diff --git a/pallets/runtime/develop/Cargo.toml b/pallets/runtime/develop/Cargo.toml index ad374f13a1..e7f294d863 100644 --- a/pallets/runtime/develop/Cargo.toml +++ b/pallets/runtime/develop/Cargo.toml @@ -69,7 +69,7 @@ sp-arithmetic = { workspace = true, default-features = false } # pallet-authorship = { workspace = true, default-features = false } pallet-contracts = { workspace = true, default-features = false } -pallet-contracts-primitives = { workspace = true, default-features = false } +#pallet-contracts-primitives = { workspace = true, default-features = false } pallet-election-provider-multi-phase = { workspace = true, default-features = false } pallet-grandpa = { workspace = true, default-features = false } pallet-im-online = { workspace = true, default-features = false } diff --git a/pallets/runtime/mainnet/Cargo.toml b/pallets/runtime/mainnet/Cargo.toml index 04b5a508d4..e0166e4c75 100644 --- a/pallets/runtime/mainnet/Cargo.toml +++ b/pallets/runtime/mainnet/Cargo.toml @@ -65,7 +65,7 @@ pallet-authority-discovery = { workspace = true, default-features = false } pallet-authorship = { workspace = true, default-features = false } pallet-babe = { workspace = true, default-features = false } pallet-contracts = { workspace = true, default-features = false } -pallet-contracts-primitives = { workspace = true, default-features = false} +#pallet-contracts-primitives = { workspace = true, default-features = false} pallet-election-provider-multi-phase = { workspace = true, default-features = false } pallet-grandpa = { workspace = true, default-features = false } pallet-im-online = { workspace = true, default-features = false } diff --git a/pallets/runtime/testnet/Cargo.toml b/pallets/runtime/testnet/Cargo.toml index 71711e0b25..a6f7c2df08 100644 --- a/pallets/runtime/testnet/Cargo.toml +++ b/pallets/runtime/testnet/Cargo.toml @@ -76,7 +76,7 @@ sp-arithmetic = { workspace = true, default-features = false } pallet-authorship = { workspace = true, default-features = false } pallet-contracts = { workspace = true, default-features = false } -pallet-contracts-primitives = { workspace = true, default-features = false} +#pallet-contracts-primitives = { workspace = true, default-features = false} pallet-election-provider-multi-phase = { workspace = true, default-features = false } pallet-grandpa = { workspace = true, default-features = false } pallet-im-online = { workspace = true, default-features = false } diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index 1d447e739e..f407e6fab8 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -65,7 +65,7 @@ pallet-authority-discovery = { workspace = true, default-features = false } pallet-authorship = { workspace = true, default-features = false } pallet-babe = { workspace = true, default-features = false } pallet-contracts = { workspace = true, default-features = false } -pallet-contracts-primitives = { workspace = true, default-features = false } +#pallet-contracts-primitives = { workspace = true, default-features = false } pallet-election-provider-multi-phase = { workspace = true, default-features = false } pallet-grandpa = { workspace = true, default-features = false } pallet-im-online = { workspace = true, default-features = false } diff --git a/pallets/settlement/src/lib.rs b/pallets/settlement/src/lib.rs index 5435ab99e8..54db8fe2bb 100644 --- a/pallets/settlement/src/lib.rs +++ b/pallets/settlement/src/lib.rs @@ -51,8 +51,7 @@ pub mod benchmarking; use codec::{Decode, Encode}; use frame_support::dispatch::{ - DispatchError, DispatchErrorWithPostInfo, DispatchResult, DispatchResultWithPostInfo, - PostDispatchInfo, + DispatchErrorWithPostInfo, DispatchResult, DispatchResultWithPostInfo, PostDispatchInfo, }; use frame_support::pallet_prelude::*; use frame_support::storage::with_transaction as frame_support_with_transaction; @@ -2991,7 +2990,7 @@ impl Pallet { minimum_weight: Weight, weight_limit: Weight, ) -> Result { - WeightMeter::from_limit(minimum_weight, weight_limit).map_err(|_| { + WeightMeter::with_limit(minimum_weight, weight_limit).map_err(|_| { DispatchErrorWithPostInfo { post_info: Some(weight_limit).into(), error: Error::::InputWeightIsLessThanMinimum.into(), diff --git a/pallets/sudo/src/extension.rs b/pallets/sudo/src/extension.rs index 6eccb0146c..dc24efbba5 100644 --- a/pallets/sudo/src/extension.rs +++ b/pallets/sudo/src/extension.rs @@ -15,15 +15,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::{dispatch::DispatchInfo, ensure}; use scale_info::TypeInfo; -use sp_runtime::{ - traits::{DispatchInfoOf, Dispatchable, SignedExtension}, - transaction_validity::{ - InvalidTransaction, TransactionPriority, TransactionValidity, TransactionValidityError, - UnknownTransaction, ValidTransaction, - }, +use sp_runtime::traits::{DispatchInfoOf, Dispatchable, SignedExtension}; +use sp_runtime::transaction_validity::{ + InvalidTransaction, TransactionPriority, TransactionValidity, TransactionValidityError, + UnknownTransaction, ValidTransaction, }; use sp_std::{fmt, marker::PhantomData}; @@ -37,7 +35,7 @@ use crate::{Config, Key}; /// fail on applying them as they are not allowed/disabled/whatever. This would be some huge dos /// vector to any kind of chain. This extension solves the dos vector by preventing any kind of /// transaction entering the pool as long as it is not signed by the sudo account. -#[derive(Clone, Eq, PartialEq, Encode, Decode, TypeInfo)] +#[derive(Clone, Eq, PartialEq, Encode, Decode, DecodeWithMemTracking, TypeInfo)] #[scale_info(skip_type_params(T))] pub struct CheckOnlySudoAccount(PhantomData); @@ -91,7 +89,7 @@ where ensure!(*who == sudo_key, InvalidTransaction::BadSigner); Ok(ValidTransaction { - priority: info.weight.ref_time() as TransactionPriority, + priority: info.total_weight().ref_time() as TransactionPriority, ..Default::default() }) } diff --git a/pallets/sudo/src/lib.rs b/pallets/sudo/src/lib.rs index d58f955aef..05ff5b6d8a 100644 --- a/pallets/sudo/src/lib.rs +++ b/pallets/sudo/src/lib.rs @@ -151,7 +151,7 @@ pub mod pallet { #[pallet::call_index(0)] #[pallet::weight({ let dispatch_info = call.get_dispatch_info(); - (dispatch_info.weight.max(MIN_WEIGHT), dispatch_info.class) + (dispatch_info.total_weight().max(MIN_WEIGHT), dispatch_info.class) })] pub fn sudo( origin: OriginFor, @@ -227,7 +227,7 @@ pub mod pallet { #[pallet::weight({ let dispatch_info = call.get_dispatch_info(); ( - dispatch_info.weight.max(MIN_WEIGHT) + dispatch_info.total_weight().max(MIN_WEIGHT) // AccountData for inner call origin accountdata. .saturating_add(T::DbWeight::get().reads_writes(1, 1)), dispatch_info.class, diff --git a/pallets/transaction-payment/src/lib.rs b/pallets/transaction-payment/src/lib.rs index f6d8b0448d..4c7c5c4893 100644 --- a/pallets/transaction-payment/src/lib.rs +++ b/pallets/transaction-payment/src/lib.rs @@ -50,35 +50,29 @@ #![cfg_attr(not(feature = "std"), no_std)] -use codec::{Decode, Encode, MaxEncodedLen}; -use frame_support::{ - dispatch::{ - DispatchClass, DispatchInfo, DispatchResult, GetDispatchInfo, Pays, PostDispatchInfo, - Weight, - }, - pallet_prelude::*, - traits::{Currency, Get, GetCallMetadata}, - weights::{WeightToFee, WeightToFeeCoefficient, WeightToFeePolynomial}, +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; +use frame_support::dispatch::{ + DispatchClass, DispatchInfo, DispatchResult, GetDispatchInfo, Pays, PostDispatchInfo, }; +use frame_support::pallet_prelude::*; +use frame_support::traits::{Currency, Get, GetCallMetadata}; +use frame_support::weights::{Weight, WeightToFee, WeightToFeeCoefficient, WeightToFeePolynomial}; use frame_system::pallet_prelude::{BlockNumberFor, OriginFor}; -use polymesh_primitives::{ - traits::{group::GroupTrait, CddAndFeeDetails, IdentityFnTrait, SubsidiserTrait}, - TransactionError, +use sp_runtime::traits::{ + Convert, DispatchInfoOf, Dispatchable, PostDispatchInfoOf, SaturatedConversion, Saturating, + SignedExtension, Zero, }; -use scale_info::TypeInfo; -use sp_runtime::{ - traits::{ - Convert, DispatchInfoOf, Dispatchable, PostDispatchInfoOf, SaturatedConversion, Saturating, - SignedExtension, Zero, - }, - transaction_validity::{ - InvalidTransaction, TransactionPriority, TransactionValidity, TransactionValidityError, - ValidTransaction, - }, - FixedPointNumber, FixedPointOperand, FixedU128, Perquintill, RuntimeDebug, +use sp_runtime::transaction_validity::{ + InvalidTransaction, TransactionPriority, TransactionValidity, TransactionValidityError, + ValidTransaction, }; +use sp_runtime::{FixedPointNumber, FixedPointOperand, FixedU128, Perquintill, RuntimeDebug}; use sp_std::prelude::*; +use polymesh_primitives::traits::group::GroupTrait; +use polymesh_primitives::traits::{CddAndFeeDetails, IdentityFnTrait, SubsidiserTrait}; +use polymesh_primitives::TransactionError; + mod payment; mod types; @@ -509,24 +503,25 @@ where // `Extra`. Alternatively, we could actually execute the tx's per-dispatch and record the // balance of the sender before and after the pipeline.. but this is way too much hassle for // a very very little potential gain in the future. - let mut dispatch_info = - ::get_dispatch_info(&unchecked_extrinsic); - if let Some(weight) = actual { - dispatch_info.weight = weight; - } - let partial_fee = if unchecked_extrinsic.is_signed().unwrap_or(false) { - Self::compute_fee(len, &dispatch_info, 0u32.into()) - } else { - // Unsigned extrinsics have no partial fee. - 0u32.into() - }; + let dispatch_info = ::get_dispatch_info(&unchecked_extrinsic); - let DispatchInfo { weight, class, .. } = dispatch_info; + let tip = 0u32.into(); + let tx_class = dispatch_info.class; + let weight = actual.unwrap_or(dispatch_info.total_weight()); + + let partial_fee = { + if unchecked_extrinsic.is_signed().unwrap_or(false) { + Self::compute_fee_raw(len, weight, tip, dispatch_info.pays_fee, tx_class) + .final_fee() + } else { + 0u32.into() + } + }; RuntimeDispatchInfo { weight, - class, + class: tx_class, partial_fee, } } @@ -540,22 +535,20 @@ where where T::RuntimeCall: Dispatchable, { - let mut dispatch_info = - ::get_dispatch_info(&unchecked_extrinsic); - if let Some(weight) = actual { - dispatch_info.weight = weight; - } + let dispatch_info = ::get_dispatch_info(&unchecked_extrinsic); let tip = 0u32.into(); + let tx_class = dispatch_info.class; + let weight = actual.unwrap_or(dispatch_info.total_weight()); if unchecked_extrinsic.is_signed().unwrap_or(false) { - Self::compute_fee_details(len, &dispatch_info, tip) - } else { - // Unsigned extrinsics have no inclusion fee. - FeeDetails { - inclusion_fee: None, - tip, - } + return Self::compute_fee_raw(len, weight, tip, dispatch_info.pays_fee, tx_class); + } + + // Unsigned extrinsics have no inclusion fee. + FeeDetails { + inclusion_fee: None, + tip: 0u32.into(), } } @@ -568,16 +561,18 @@ where where T::RuntimeCall: Dispatchable + GetDispatchInfo, { - let mut dispatch_info = ::get_dispatch_info(&call); - if let Some(weight) = actual { - dispatch_info.weight = weight; - } - let DispatchInfo { weight, class, .. } = dispatch_info; + let dispatch_info = ::get_dispatch_info(&call); + + let tip = 0u32.into(); + let tx_class = dispatch_info.class; + let weight = actual.unwrap_or(dispatch_info.total_weight()); + let partial_fee = + Self::compute_fee_raw(len, weight, tip, dispatch_info.pays_fee, tx_class).final_fee(); RuntimeDispatchInfo { weight, - class, - partial_fee: Self::compute_fee(len, &dispatch_info, 0u32.into()), + class: tx_class, + partial_fee, } } @@ -590,37 +585,11 @@ where where T::RuntimeCall: Dispatchable + GetDispatchInfo, { - let mut dispatch_info = ::get_dispatch_info(&call); - if let Some(weight) = actual { - dispatch_info.weight = weight; - } + let dispatch_info = ::get_dispatch_info(&call); let tip = 0u32.into(); - - Self::compute_fee_details(len, &dispatch_info, tip) - } - - /// Compute the final fee value for a particular transaction. - pub fn compute_fee( - len: u32, - info: &DispatchInfoOf, - tip: BalanceOf, - ) -> BalanceOf - where - T::RuntimeCall: Dispatchable, - { - Self::compute_fee_details(len, info, tip).final_fee() - } - - /// Compute the fee details for a particular transaction. - pub fn compute_fee_details( - len: u32, - info: &DispatchInfoOf, - tip: BalanceOf, - ) -> FeeDetails> - where - T::RuntimeCall: Dispatchable, - { - Self::compute_fee_raw(len, info.weight, tip, info.pays_fee, info.class) + let tx_class = dispatch_info.class; + let weight = actual.unwrap_or(dispatch_info.total_weight()); + Self::compute_fee_raw(len, weight, tip, dispatch_info.pays_fee, tx_class) } /// Compute the actual post dispatch fee for a particular transaction. @@ -745,9 +714,9 @@ pub type WithdrawFeeInfo = ( /// Require the transactor pay for themselves and maybe include a tip to gain additional priority /// in the queue. -#[derive(Encode, Decode, TypeInfo, Clone, Eq, PartialEq)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, Clone, Eq, PartialEq)] #[scale_info(skip_type_params(T))] -pub struct ChargeTransactionPayment(#[codec(compact)] BalanceOf); +pub struct ChargeTransactionPayment(BalanceOf); impl ChargeTransactionPayment where @@ -768,7 +737,14 @@ where len: usize, ) -> Result, TransactionValidityError> { let tip = self.0; - let fee = Pallet::::compute_fee(len as u32, info, tip); + let fee = Pallet::::compute_fee_raw( + len as u32, + info.total_weight(), + tip, + info.pays_fee, + info.class, + ) + .final_fee(); // Polymesh: Changed how the tx fee payer is selected. diff --git a/pallets/transaction-payment/src/payment.rs b/pallets/transaction-payment/src/payment.rs index bb9f99d3bb..689797e4cf 100644 --- a/pallets/transaction-payment/src/payment.rs +++ b/pallets/transaction-payment/src/payment.rs @@ -1,7 +1,7 @@ /// ! Traits and default implementation for paying transaction fees. use crate::pallet::Config; -use codec::FullCodec; +use codec::{DecodeWithMemTracking, FullCodec}; use sp_runtime::{ traits::{ AtLeast32BitUnsigned, DispatchInfoOf, MaybeSerializeDeserialize, PostDispatchInfoOf, @@ -28,7 +28,8 @@ pub trait OnChargeTransaction { + MaybeSerializeDeserialize + Debug + Default - + scale_info::TypeInfo; + + scale_info::TypeInfo + + DecodeWithMemTracking; type LiquidityInfo: Default; /// Before the transaction is executed the payment of the transaction fees diff --git a/pallets/treasury/src/lib.rs b/pallets/treasury/src/lib.rs index 7aa2c01ff3..d9383d88fb 100644 --- a/pallets/treasury/src/lib.rs +++ b/pallets/treasury/src/lib.rs @@ -36,18 +36,18 @@ #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; -use frame_support::{ - dispatch::{DispatchError, DispatchResult}, - ensure, - traits::{Currency, ExistenceRequirement, Imbalance, OnUnbalanced}, - weights::Weight, -}; +use frame_support::dispatch::DispatchResult; +use frame_support::ensure; +use frame_support::pallet_prelude::DispatchError; +use frame_support::traits::{Currency, ExistenceRequirement, Imbalance, OnUnbalanced}; +use frame_support::weights::Weight; use frame_system::ensure_root; -use pallet_identity as identity; -use polymesh_primitives::{constants::TREASURY_PALLET_ID, Beneficiary, IdentityId, GC_DID}; use sp_runtime::traits::{AccountIdConversion, Saturating}; use sp_std::prelude::*; +use pallet_identity as identity; +use polymesh_primitives::{constants::TREASURY_PALLET_ID, Beneficiary, IdentityId, GC_DID}; + pub type ProposalIndex = u32; type Identity = identity::Pallet; diff --git a/pallets/utility/src/lib.rs b/pallets/utility/src/lib.rs index 7f669c3604..724ccde9c1 100644 --- a/pallets/utility/src/lib.rs +++ b/pallets/utility/src/lib.rs @@ -71,10 +71,10 @@ mod benchmarking; use codec::{Decode, Encode}; use frame_support::dispatch::DispatchClass; use frame_support::dispatch::{extract_actual_weight, GetDispatchInfo, PostDispatchInfo}; -use frame_support::dispatch::{DispatchErrorWithPostInfo, DispatchResultWithPostInfo, Weight}; +use frame_support::dispatch::{DispatchErrorWithPostInfo, DispatchResultWithPostInfo}; use frame_support::ensure; -use frame_support::traits::GetCallMetadata; -use frame_support::traits::{IsSubType, OriginTrait, UnfilteredDispatchable}; +use frame_support::traits::{GetCallMetadata, IsSubType, OriginTrait, UnfilteredDispatchable}; +use frame_support::weights::Weight; use frame_system::{ensure_root, ensure_signed, RawOrigin}; use scale_info::TypeInfo; use sp_core::Get; @@ -340,7 +340,7 @@ pub mod pallet { let dispatch_info = call.call.get_dispatch_info(); ( ::WeightInfo::relay_tx() - .saturating_add(dispatch_info.weight), + .saturating_add(dispatch_info.total_weight()), dispatch_info.class, ) })] @@ -463,7 +463,7 @@ pub mod pallet { let dispatch_info = call.get_dispatch_info(); ( ::WeightInfo::dispatch_as() - .saturating_add(dispatch_info.weight), + .saturating_add(dispatch_info.total_weight()), dispatch_info.class, ) })] @@ -567,7 +567,7 @@ pub mod pallet { ( ::WeightInfo::as_derivative() .saturating_add(T::DbWeight::get().reads_writes(1, 1)) - .saturating_add(dispatch_info.weight), + .saturating_add(dispatch_info.total_weight()), dispatch_info.class, ) })] @@ -589,7 +589,7 @@ impl Pallet { (Weight::zero(), DispatchClass::Operational), |(total_weight, dispatch_class): (Weight, DispatchClass), di| { ( - total_weight.saturating_add(di.weight), + total_weight.saturating_add(di.total_weight()), // If not all are `Operational`, we want to use `DispatchClass::Normal`. if di.class == DispatchClass::Normal { di.class diff --git a/pallets/validators/src/lib.rs b/pallets/validators/src/lib.rs index 8a374f04ee..d238066df1 100644 --- a/pallets/validators/src/lib.rs +++ b/pallets/validators/src/lib.rs @@ -29,16 +29,13 @@ pub mod permissioned; pub use permissioned::PolymeshConvertCurve; pub mod types; -pub use pallet_staking::PermissionedStaking; +pub use pallet_staking::permissioned_staking::PermissionedStaking; +use frame_support::pallet_prelude::*; use frame_support::traits::schedule::Anon; +use frame_support::traits::Get; use frame_support::traits::IsSubType; -use frame_support::{ - dispatch::{DispatchError, DispatchResult}, - pallet_prelude::*, - traits::Get, - weights::Weight, -}; +use frame_support::weights::Weight; use frame_system::pallet_prelude::*; use sp_runtime::traits::Dispatchable; use sp_runtime::{curve::PiecewiseLinear, traits::AtLeast32BitUnsigned, Perbill, Permill}; @@ -319,9 +316,7 @@ pub mod pallet { } #[pallet::call_index(2)] - #[pallet::weight(::WeightInfo::payout_stakers_alive_staked( - T::MaxNominatorRewardedPerValidator::get() - ))] + #[pallet::weight(::WeightInfo::payout_stakers_alive_staked(T::MaxExposurePageSize::get()))] pub fn payout_stakers_by_system( origin: OriginFor, validator_stash: T::AccountId, diff --git a/pallets/validators/src/permissioned.rs b/pallets/validators/src/permissioned.rs index debbd85e56..1514ddc975 100644 --- a/pallets/validators/src/permissioned.rs +++ b/pallets/validators/src/permissioned.rs @@ -1,19 +1,18 @@ +use frame_support::traits::fungible::Inspect; +use frame_support::traits::schedule::Anon; +use frame_support::traits::schedule::{DispatchTime, HIGHEST_PRIORITY}; use frame_support::{pallet_prelude::*, traits::Get}; use frame_system::RawOrigin; use frame_system::{ensure_root, pallet_prelude::*}; use sp_runtime::traits::SaturatedConversion; use sp_std::prelude::*; -use frame_support::traits::schedule::Anon; -use frame_support::traits::schedule::{DispatchTime, HIGHEST_PRIORITY}; -use frame_support::traits::Currency; - use polymesh_primitives::IdentityId; use polymesh_primitives::GC_DID; #[cfg(feature = "runtime-benchmarks")] use polymesh_primitives::{traits::IdentityFnTrait, AuthorizationData, Permissions, Signatory}; -use pallet_staking::{PermissionedStaking, WhoToSlash}; +use pallet_staking::permissioned_staking::{PermissionedStaking, WhoToSlash}; use crate::types::{PermissionedIdentityPrefs, SlashingSwitch}; use crate::*; diff --git a/pallets/validators/src/types.rs b/pallets/validators/src/types.rs index 0b45c8b8a8..bc5012218a 100644 --- a/pallets/validators/src/types.rs +++ b/pallets/validators/src/types.rs @@ -1,5 +1,5 @@ -use codec::{Decode, Encode, MaxEncodedLen}; -use pallet_staking::WhoToSlash; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; +use pallet_staking::permissioned_staking::WhoToSlash; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_runtime::RuntimeDebug; @@ -39,8 +39,8 @@ impl PermissionedIdentityPrefs { /// Switch used to change the "victim" for slashing. Victims can be /// validators, both validators and nominators, or no-one. -#[derive(Decode, Encode, MaxEncodedLen, RuntimeDebug, TypeInfo)] -#[derive(Clone, Copy, Default, Eq, PartialEq)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, RuntimeDebug)] +#[derive(Clone, Copy, Default, Eq, PartialEq, TypeInfo)] #[derive(Serialize, Deserialize)] pub enum SlashingSwitch { /// Allow validators but not nominators to get slashed. diff --git a/primitives/src/agent.rs b/primitives/src/agent.rs index b7361bd0c8..27db09d3d1 100644 --- a/primitives/src/agent.rs +++ b/primitives/src/agent.rs @@ -1,5 +1,5 @@ use crate::impl_checked_inc; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; @@ -7,14 +7,14 @@ use serde::{Deserialize, Serialize}; /// By *local*, we mean that the same number might be used for a different `Ticker` /// to uniquely identify a different Agent Group. #[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, MaxEncodedLen)] #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Debug)] pub struct AGId(pub u32); impl_checked_inc!(AGId); /// The available set of agent groups. #[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, MaxEncodedLen)] #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] pub enum AgentGroup { /// Has all permissions. diff --git a/primitives/src/asset.rs b/primitives/src/asset.rs index bab0fe46cb..b82dedcc84 100644 --- a/primitives/src/asset.rs +++ b/primitives/src/asset.rs @@ -15,7 +15,7 @@ use serde::{Deserialize, Serialize}; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_io::hashing::blake2_128; use sp_std::prelude::Vec; @@ -26,7 +26,7 @@ use polymesh_primitives_derive::VecU8StrongTyped; /// An unique asset identifier. #[derive(Serialize, Deserialize)] -#[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct AssetId([u8; 16]); @@ -59,44 +59,25 @@ impl From for AssetId { } /// A per-asset checkpoint ID. -#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] -#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Copy, Clone, Debug, Default, Eq, Ord, PartialEq, PartialOrd)] pub struct CheckpointId(pub u64); impl_checked_inc!(CheckpointId); /// A wrapper for a token name. -#[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] pub struct AssetName(pub Vec); /// The ID of a custom asset type. -#[derive( - Encode, - Decode, - TypeInfo, - MaxEncodedLen, - Copy, - Clone, - Default, - Debug, - PartialEq, - Eq -)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Copy, Clone, Debug, Default, Eq, PartialEq)] pub struct CustomAssetTypeId(pub u32); impl_checked_inc!(CustomAssetTypeId); /// The type of security represented by a token. -#[derive( - Encode, - Decode, - TypeInfo, - MaxEncodedLen, - Copy, - Clone, - Debug, - PartialEq, - Eq -)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Copy, Clone, Debug, Eq, PartialEq)] pub enum AssetType { /// Common stock - a security that represents ownership in a corporation. EquityCommon, @@ -138,17 +119,8 @@ pub enum AssetType { } /// Defines all non-fungible variants. -#[derive( - Encode, - Decode, - TypeInfo, - MaxEncodedLen, - Copy, - Clone, - Debug, - PartialEq, - Eq -)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum NonFungibleType { /// Derivative contract - a contract between two parties for buying or selling a security at a /// predetermined price within a specific time period. @@ -199,6 +171,6 @@ impl AssetType { } /// A wrapper for a funding round name. -#[derive(Decode, Encode, TypeInfo, VecU8StrongTyped)] -#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Default)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, VecU8StrongTyped)] +#[derive(Clone, Debug, Default, Eq, Hash, PartialEq, PartialOrd, Ord)] pub struct FundingRoundName(pub Vec); diff --git a/primitives/src/asset_identifier.rs b/primitives/src/asset_identifier.rs index f1dd83eba9..7541521049 100644 --- a/primitives/src/asset_identifier.rs +++ b/primitives/src/asset_identifier.rs @@ -1,11 +1,12 @@ -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use core::convert::{TryFrom, TryInto}; use scale_info::TypeInfo; use sp_std::prelude::Vec; /// Implementation of common asset identifiers. /// https://www.cusip.com/identifiers.html. -#[derive(Encode, Decode, TypeInfo, Clone, Debug, PartialEq, Eq)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, PartialEq, Eq)] +#[derive(Clone, Debug)] pub enum AssetIdentifier { /// Universally recognized identifier for financial instruments. /// Example: Amazon.com Inc - Common Stock diff --git a/primitives/src/asset_metadata.rs b/primitives/src/asset_metadata.rs index d0bbbce78c..fbd9fa9f3e 100644 --- a/primitives/src/asset_metadata.rs +++ b/primitives/src/asset_metadata.rs @@ -13,35 +13,36 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use crate::impl_checked_inc; -use crate::Url; use codec::MaxEncodedLen; -use codec::{Decode, DecodeAll, Encode}; -use polymesh_primitives_derive::VecU8StrongTyped; +use codec::{Decode, DecodeAll, DecodeWithMemTracking, Encode}; use scale_info::{PortableRegistry, TypeInfo}; use serde::{Deserialize, Serialize}; use sp_std::prelude::Vec; +use polymesh_primitives_derive::VecU8StrongTyped; + +use crate::{impl_checked_inc, Url}; + /// Asset Metadata Name. -#[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq)] #[derive(Serialize, Deserialize)] pub struct AssetMetadataName(#[serde(with = "serde_bytes")] pub Vec); /// Asset Metadata Global Key. -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] +#[derive(Encode, Decode, DecodeWithMemTracking, MaxEncodedLen, TypeInfo)] #[derive(Clone, Copy, Debug, Default, Hash, PartialEq, Eq, Ord, PartialOrd)] pub struct AssetMetadataGlobalKey(pub u64); impl_checked_inc!(AssetMetadataGlobalKey); /// Asset Metadata Local Key. -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] +#[derive(Encode, Decode, DecodeWithMemTracking, MaxEncodedLen, TypeInfo)] #[derive(Clone, Copy, Debug, Default, Hash, PartialEq, Eq, Ord, PartialOrd)] pub struct AssetMetadataLocalKey(pub u64); impl_checked_inc!(AssetMetadataLocalKey); /// Asset Metadata Key. -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] +#[derive(Encode, Decode, DecodeWithMemTracking, MaxEncodedLen, TypeInfo)] #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, Ord, PartialOrd)] pub enum AssetMetadataKey { /// Global Metadata Key. @@ -63,8 +64,8 @@ impl From for AssetMetadataKey { } /// Asset Metadata Value. -#[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] -#[derive(Clone, Debug, Default, PartialEq, Eq)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, VecU8StrongTyped)] +#[derive(Clone, Debug, Default, Eq, PartialEq)] pub struct AssetMetadataValue(pub Vec); /// Asset Metadata Value details. @@ -122,13 +123,13 @@ impl Default for AssetMetadataLockStatus { } /// Asset Metadata description. -#[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, PartialEq, Eq)] #[derive(Serialize, Deserialize)] pub struct AssetMetadataDescription(#[serde(with = "serde_bytes")] pub Vec); /// Asset Metadata Specs. -#[derive(Encode, Decode, TypeInfo)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo)] #[derive(Clone, Debug, Default, PartialEq, Eq)] #[derive(Serialize, Deserialize)] pub struct AssetMetadataSpec { diff --git a/primitives/src/cdd_id.rs b/primitives/src/cdd_id.rs index f703fd3c31..27413d9cd8 100644 --- a/primitives/src/cdd_id.rs +++ b/primitives/src/cdd_id.rs @@ -1,10 +1,10 @@ -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use polymesh_primitives_derive::SliceU8StrongTyped; use polymesh_primitives_derive::{DeserializeU8StrongTyped, SerializeU8StrongTyped}; use scale_info::TypeInfo; /// A CDD ID only has meaning to the CDD provider that issues a CDD claim. -#[derive(Encode, Decode, TypeInfo, SliceU8StrongTyped)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, SliceU8StrongTyped)] #[derive(Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] #[derive(SerializeU8StrongTyped, DeserializeU8StrongTyped)] pub struct CddId([u8; 32]); diff --git a/primitives/src/compliance_manager.rs b/primitives/src/compliance_manager.rs index 77c848aad2..60c7ea5169 100644 --- a/primitives/src/compliance_manager.rs +++ b/primitives/src/compliance_manager.rs @@ -13,16 +13,18 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use crate::condition::{conditions_total_counts, Condition}; -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_std::prelude::*; +use crate::condition::{conditions_total_counts, Condition}; + /// A compliance requirement. /// All sender and receiver conditions of the same compliance requirement must be true in order to execute the transfer. -#[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo, Default, Clone, PartialEq, Eq, Debug)] + +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, PartialEq, Eq, Debug)] +#[derive(Clone, Default, Deserialize, Serialize)] pub struct ComplianceRequirement { /// List of sender conditions pub sender_conditions: Vec, diff --git a/primitives/src/condition.rs b/primitives/src/condition.rs index 1cbb41cb88..2e15d000cd 100644 --- a/primitives/src/condition.rs +++ b/primitives/src/condition.rs @@ -13,8 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use crate::{Claim, ClaimType, IdentityId}; -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use core::iter; use either::Either; use scale_info::TypeInfo; @@ -22,9 +21,12 @@ use serde::{Deserialize, Serialize}; use sp_std::convert::TryInto; use sp_std::prelude::*; +use crate::{Claim, ClaimType, IdentityId}; + /// Defines a static / dynamic identity. -#[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo, Copy, Clone, PartialEq, Eq, Debug, Hash)] +#[derive(Deserialize, Serialize)] +#[derive(Decode, DecodeWithMemTracking, Encode)] +#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, TypeInfo)] pub enum TargetIdentity { /// Matches any of the external agents of an asset. Resolved dynamically. ExternalAgent, @@ -34,8 +36,8 @@ pub enum TargetIdentity { /// It defines the type of condition supported, and the filter information we will use to evaluate as a /// predicate. -#[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, Hash)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, PartialEq, Eq, Hash)] +#[derive(Clone, Debug, Deserialize, Serialize)] pub enum ConditionType { /// Condition to ensure that claim filter produces one claim. IsPresent(Claim), @@ -62,8 +64,8 @@ impl ConditionType { } /// Denotes the set of `ClaimType`s for which an issuer is trusted. -#[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, Hash)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, PartialEq, Eq, Hash)] +#[derive(Clone, Debug, Deserialize, Serialize)] pub enum TrustedFor { /// Issuer is trusted for any `ClaimType`. Any, @@ -72,8 +74,8 @@ pub enum TrustedFor { } /// A trusted issuer for a certain compliance `Condition` and what `ClaimType`s is trusted for. -#[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, Hash)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, PartialEq, Eq, Hash)] +#[derive(Clone, Debug, Deserialize, Serialize)] pub struct TrustedIssuer { /// The issuer trusted for the `Condition` or for the `Ticker`, /// depending on where `TrustedClaimIssuer` is included. @@ -124,8 +126,8 @@ impl From for TrustedIssuer { } /// Type of claim requirements that a condition can have -#[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, Hash)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, PartialEq, Eq, Hash)] +#[derive(Clone, Debug, Deserialize, Serialize)] pub struct Condition { /// Type of condition. pub condition_type: ConditionType, diff --git a/primitives/src/document.rs b/primitives/src/document.rs index 281bb25c78..f29653d3ad 100644 --- a/primitives/src/document.rs +++ b/primitives/src/document.rs @@ -14,39 +14,43 @@ // along with this program. If not, see . //! Document type -use crate::{DocumentHash, Moment}; -use codec::{Decode, Encode, MaxEncodedLen}; -use polymesh_primitives_derive::VecU8StrongTyped; + +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_std::prelude::Vec; +use polymesh_primitives_derive::VecU8StrongTyped; + +use crate::{DocumentHash, Moment}; + /// The local, per-ticker, ID of an asset documentation. -#[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] -#[derive(Copy, Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Copy, Clone, Debug, Default, Eq, Hash, PartialEq, PartialOrd, Ord)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] #[derive(Serialize, Deserialize)] pub struct DocumentId(pub u32); /// A wrapper for a document name. -#[derive(Decode, Encode, TypeInfo, VecU8StrongTyped)] -#[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, VecU8StrongTyped)] +#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] #[derive(Serialize, Deserialize)] pub struct DocumentName(pub Vec); /// A wrapper for a document URI. -#[derive(Decode, Encode, TypeInfo, VecU8StrongTyped)] -#[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, VecU8StrongTyped)] +#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] #[derive(Serialize, Deserialize)] pub struct DocumentUri(pub Vec); /// A wrapper for a document's type. -#[derive(Decode, Encode, TypeInfo, VecU8StrongTyped)] -#[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, VecU8StrongTyped)] +#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] #[derive(Serialize, Deserialize)] pub struct DocumentType(pub Vec); /// Represents a document associated with an asset -#[derive(Decode, Encode, TypeInfo, Clone, Debug, Default, PartialEq, Eq)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] +#[derive(Clone, Debug, Default, Eq, PartialEq)] #[derive(Serialize, Deserialize)] pub struct Document { /// An URI where more details can be discovered. diff --git a/primitives/src/document_hash.rs b/primitives/src/document_hash.rs index b24beaffbd..d6dd1007bb 100644 --- a/primitives/src/document_hash.rs +++ b/primitives/src/document_hash.rs @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use scale_info::TypeInfo; use sp_std::{ convert::{TryFrom, TryInto}, @@ -22,7 +22,8 @@ use sp_std::{ }; /// A wrapper for a document hash. -#[derive(Clone, Copy, PartialEq, Eq, Debug, Encode, Decode, TypeInfo)] +#[derive(Copy, DecodeWithMemTracking, PartialEq, Eq, Encode, Decode, TypeInfo)] +#[derive(Clone, Debug)] pub enum DocumentHash { /// No hash None, diff --git a/primitives/src/event_only.rs b/primitives/src/event_only.rs index 88784bd980..426c1fdfd9 100644 --- a/primitives/src/event_only.rs +++ b/primitives/src/event_only.rs @@ -15,15 +15,15 @@ //! Provides a for-events-only protector newtype for arbitrary objects. -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; /// A protective newtype around any type, /// signalling that the contained element is only for use by events. -#[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo)] #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default, Debug)] +#[derive(Deserialize, Serialize)] pub struct EventOnly(T); impl EventOnly { diff --git a/primitives/src/identity_claim.rs b/primitives/src/identity_claim.rs index 1b1a27dd56..24a22d388c 100644 --- a/primitives/src/identity_claim.rs +++ b/primitives/src/identity_claim.rs @@ -16,7 +16,7 @@ use crate::asset::AssetId; use crate::{identity_id::IdentityId, impl_checked_inc, CddId, Moment}; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_std::{convert::From, prelude::*}; @@ -25,13 +25,13 @@ use super::jurisdiction::CountryCode; /// The ID of a custom claim type. #[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] +#[derive(Encode, Decode, DecodeWithMemTracking, MaxEncodedLen, TypeInfo)] #[derive(Copy, Default, Clone, PartialEq, Eq, Debug, PartialOrd, Ord, Hash)] pub struct CustomClaimTypeId(pub u32); impl_checked_inc!(CustomClaimTypeId); #[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo)] #[derive(Clone, PartialEq, Eq, Debug, PartialOrd, Ord, Hash)] /// The scope of a claim. pub enum Scope { @@ -74,7 +74,8 @@ impl Scope { /// All possible claims in polymesh #[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, Hash)] +#[derive(Encode, Decode, DecodeWithMemTracking)] +#[derive(TypeInfo, Clone, PartialEq, Eq, Debug, Hash)] pub enum Claim { /// User is Accredited. Accredited(Scope), @@ -139,7 +140,7 @@ impl Claim { /// Claim type represent the claim without its data. #[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] +#[derive(Encode, Decode, DecodeWithMemTracking, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, PartialEq, Eq, Debug, PartialOrd, Ord, Hash)] pub enum ClaimType { /// User is Accredited. @@ -165,9 +166,8 @@ pub enum ClaimType { } /// All information of a particular claim -#[cfg_attr(feature = "std", derive(Debug))] -#[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq)] +#[derive(Decode, DecodeWithMemTracking, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Clone, Debug, Deserialize, Serialize)] pub struct IdentityClaim { /// Issuer of the claim pub claim_issuer: IdentityId, diff --git a/primitives/src/identity_id.rs b/primitives/src/identity_id.rs index 653e4fec16..63f440b269 100644 --- a/primitives/src/identity_id.rs +++ b/primitives/src/identity_id.rs @@ -16,7 +16,7 @@ use polymesh_primitives_derive::{DeserializeU8StrongTyped, SerializeU8StrongTyped}; use serde::{Deserialize, Serialize}; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use core::fmt::{Display, Formatter}; use core::str; use scale_info::TypeInfo; @@ -85,7 +85,7 @@ impl GenesisIdentityRecord { /// - "did:poly:ab01" /// - "did:poly:1" /// - "DID:poly:..." -#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, MaxEncodedLen)] #[derive(Default, PartialOrd, Ord, PartialEq, Eq, Clone, Copy, Hash)] #[derive(SerializeU8StrongTyped, DeserializeU8StrongTyped)] pub struct IdentityId(pub [u8; UUID_LEN]); @@ -223,13 +223,13 @@ impl Printable for IdentityId { /// A wrapper for a portfolio name. It is used for non-default (aka "user") portfolios only since /// default ones are nameless. -#[derive(Decode, Encode, TypeInfo, VecU8StrongTyped)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] #[derive(Serialize, Deserialize)] pub struct PortfolioName(pub Vec); /// The unique ID of a non-default portfolio. -#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] #[derive(Serialize, Deserialize)] pub struct PortfolioNumber(pub u64); @@ -247,7 +247,7 @@ impl From for PortfolioNumber { } /// The kind of a portfolio. It can be either a default portfolio or a user-defined one. -#[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] #[derive(Serialize, Deserialize)] pub enum PortfolioKind { @@ -272,7 +272,7 @@ impl From> for PortfolioKind { } /// The identification of a portfolio. Contains the [`IdentityId`] of the portfolio owner and the [`PortfolioKind`]. -#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] #[derive(Serialize, Deserialize)] pub struct PortfolioId { diff --git a/primitives/src/jurisdiction.rs b/primitives/src/jurisdiction.rs index 4153ec0fe9..543c51733a 100644 --- a/primitives/src/jurisdiction.rs +++ b/primitives/src/jurisdiction.rs @@ -15,7 +15,7 @@ //! Data types and definitions of jurisdictions. -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_std::prelude::*; @@ -23,7 +23,7 @@ use sp_std::prelude::*; macro_rules! country_codes { ( $([$discr:expr,$alpha2:ident, $alpha3:ident, $un:literal, $($extra:expr),*]),* $(,)? ) => { /// Existing country codes according to ISO-3166-1. - #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Decode, Encode, MaxEncodedLen, TypeInfo, Hash)] + #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo, Hash)] #[derive(Serialize, Deserialize)] pub enum CountryCode { $( diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index 0f7581375c..7917cb3620 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -25,7 +25,7 @@ use alloc::{ format, string::{String, ToString}, }; -use codec::{CompactAs, Decode, Encode, MaxEncodedLen}; +use codec::{CompactAs, Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use core::ops::Add; use frame_support::parameter_types; use frame_support::traits::Get; @@ -120,9 +120,9 @@ impl> Add for MaybeBlock { } /// A positive coefficient: a pair of a numerator and a denominator. Defaults to `(1, 1)`. -#[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, MaxEncodedLen)] #[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Serialize, Deserialize)] pub struct PosRatio(pub u32, pub u32); impl Default for PosRatio { @@ -336,18 +336,19 @@ pub struct Beneficiary { } /// A short on-chain memo for POLYX transfer, asset transfer and portfolio moves. -#[derive(Decode, Encode, MaxEncodedLen, TypeInfo, SliceU8StrongTyped)] -#[derive(Clone, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Hash, PartialEq, Eq, PartialOrd, Ord, SliceU8StrongTyped)] +#[derive(Clone, Default)] pub struct Memo(pub [u8; 32]); /// Url for linking to off-chain resources. -#[derive(Decode, Encode, TypeInfo, VecU8StrongTyped)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] #[derive(Serialize, Deserialize)] pub struct Url(#[serde(with = "serde_bytes")] pub Vec); /// The name of a pallet. -#[derive(Encode, Decode, TypeInfo, StringStrongTyped)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, StringStrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] #[derive(Serialize, Deserialize)] pub struct PalletName(pub String); @@ -360,7 +361,7 @@ impl PalletName { } /// The name of an extrinsic within a pallet. -#[derive(Encode, Decode, TypeInfo, StringStrongTyped)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, StringStrongTyped)] #[derive(Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)] #[derive(Serialize, Deserialize)] pub struct ExtrinsicName(pub String); @@ -397,7 +398,7 @@ pub struct OldWeight(pub u64); /// committing on `Ok(_)` and rolling back on `Err(_)`, returning the result. /// /// Transactions can be arbitrarily nested with commits happening to the parent. -pub fn with_transaction>( +pub fn with_transaction>( tx: impl FnOnce() -> Result, ) -> Result { use frame_support::storage::{with_transaction, TransactionOutcome}; diff --git a/primitives/src/nft.rs b/primitives/src/nft.rs index 925dbac35b..b2c3550ffd 100644 --- a/primitives/src/nft.rs +++ b/primitives/src/nft.rs @@ -1,4 +1,4 @@ -use codec::MaxEncodedLen; +use codec::{DecodeWithMemTracking, MaxEncodedLen}; use serde::{Deserialize, Serialize}; use codec::{Decode, Encode}; @@ -15,51 +15,21 @@ use crate::impl_checked_inc; pub type NFTCount = u64; /// Controls the next available id for an NFT collection. -#[derive( - Clone, - Copy, - Debug, - Decode, - MaxEncodedLen, - Default, - Eq, - Encode, - PartialEq, - TypeInfo -)] +#[derive(Decode, DecodeWithMemTracking, Default, Encode, TypeInfo)] +#[derive(Clone, Copy, Debug, Eq, MaxEncodedLen, PartialEq)] pub struct NFTCollectionId(pub u64); impl_checked_inc!(NFTCollectionId); /// Controls the next available id for an NFT within a collection. -#[derive( - Clone, - Copy, - Debug, - Decode, - Default, - Encode, - MaxEncodedLen, - Eq, - Ord, - PartialOrd, - PartialEq, - TypeInfo -)] +#[derive(Decode, DecodeWithMemTracking, Default, Encode, TypeInfo)] +#[derive(Clone, Copy, Debug, MaxEncodedLen, Eq, Ord, PartialOrd, PartialEq)] #[derive(Serialize, Deserialize)] pub struct NFTId(pub u64); impl_checked_inc!(NFTId); /// Defines an NFT collection. -#[derive( - Clone, - Debug, - Decode, - Default, - Encode, - MaxEncodedLen, - PartialEq, - TypeInfo -)] +#[derive(Decode, Default, Encode, MaxEncodedLen, PartialEq, TypeInfo)] +#[derive(Clone, Debug)] pub struct NFTCollection { id: NFTCollectionId, asset_id: AssetId, @@ -83,8 +53,8 @@ impl NFTCollection { } /// Represent all NFT being transferred for a given [`AssetId`]. -#[derive(Clone, Debug, Decode, Default, Encode, Eq, PartialEq, TypeInfo)] -#[derive(Serialize, Deserialize)] +#[derive(Decode, DecodeWithMemTracking, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Clone, Debug, Default, Deserialize, Serialize)] pub struct NFTs { asset_id: AssetId, ids: Vec, @@ -122,7 +92,8 @@ impl NFTs { } /// The metadata keys for the NFT collection. -#[derive(Clone, Debug, Decode, Default, Encode, PartialEq, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, PartialEq, TypeInfo)] +#[derive(Clone, Debug, Default)] pub struct NFTCollectionKeys(Vec); impl NFTCollectionKeys { @@ -149,7 +120,8 @@ impl From> for NFTCollectionKeys { } /// Defines a metadata attribute which is a composed of a key and a value. -#[derive(Clone, Debug, Decode, Encode, PartialEq, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, PartialEq, TypeInfo)] +#[derive(Clone, Debug)] pub struct NFTMetadataAttribute { /// The metadata key. pub key: AssetMetadataKey, diff --git a/primitives/src/portfolio.rs b/primitives/src/portfolio.rs index f4bb9cbf0d..f16068f470 100644 --- a/primitives/src/portfolio.rs +++ b/primitives/src/portfolio.rs @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use scale_info::TypeInfo; use crate::asset::{AssetId, FundingRoundName}; @@ -21,7 +21,8 @@ use crate::settlement::InstructionId; use crate::{Balance, Memo, NFTs}; /// Describes what should be moved between portfolios. It can be either fungible or non-fungible tokens. -#[derive(Clone, Debug, Decode, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Clone, Debug)] pub struct Fund { /// The type of token being moved. pub description: FundDescription, @@ -30,7 +31,8 @@ pub struct Fund { } /// Defines the types of tokens that can be moved. -#[derive(Clone, Debug, Decode, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Clone, Debug)] pub enum FundDescription { /// Fungible token. Fungible { @@ -44,7 +46,8 @@ pub enum FundDescription { } /// Reason for the portfolio update. -#[derive(Clone, Debug, Decode, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Clone, Debug)] pub enum PortfolioUpdateReason { /// Tokens were issued. Issued { diff --git a/primitives/src/secondary_key.rs b/primitives/src/secondary_key.rs index a17a293c92..f84dde1abd 100644 --- a/primitives/src/secondary_key.rs +++ b/primitives/src/secondary_key.rs @@ -15,7 +15,7 @@ use crate::asset::AssetId; use crate::{ExtrinsicName, IdentityId, PalletName, PortfolioId, SubsetRestriction}; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_std::{ @@ -53,7 +53,7 @@ pub type ExtrinsicNames = SubsetRestriction; /// A permission to call a set of functions, as described by `extrinsics`, /// within a given pallet `pallet_name`. -#[derive(Decode, Encode, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] #[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)] #[derive(Serialize, Deserialize)] pub struct PalletPermissions { @@ -101,7 +101,7 @@ impl PalletPermissions { } /// Extrinsic permissions. -#[derive(Decode, Encode, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] #[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)] #[derive(Serialize, Deserialize)] pub enum ExtrinsicPermissions { @@ -211,7 +211,7 @@ pub type PortfolioPermissions = SubsetRestriction; /// Common cases of permissions: /// - `Permissions::empty()`: no permissions, /// - `Permissions::default()`: full permissions. -#[derive(Decode, Encode, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] #[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)] #[derive(Serialize, Deserialize)] pub struct Permissions { diff --git a/primitives/src/settlement.rs b/primitives/src/settlement.rs index b90ac392d9..e6e0e7383d 100644 --- a/primitives/src/settlement.rs +++ b/primitives/src/settlement.rs @@ -18,7 +18,7 @@ use serde::{Deserialize, Serialize}; use codec::alloc::string::ToString; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use frame_support::weights::Weight; use scale_info::prelude::string::String; use scale_info::TypeInfo; @@ -32,13 +32,13 @@ use crate::constants::SETTLEMENT_INSTRUCTION_EXECUTION; use crate::{impl_checked_inc, Balance, IdentityId, NFTs, PortfolioId, Ticker}; /// A global and unique venue ID. -#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, MaxEncodedLen)] #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Debug)] pub struct VenueId(pub u64); impl_checked_inc!(VenueId); /// A wrapper for VenueDetails -#[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)] pub struct VenueDetails(Vec); @@ -62,20 +62,8 @@ pub enum InstructionStatus { } /// Type of the venue. Used for offchain filtering. -#[derive( - Copy, - Clone, - Debug, - Decode, - Default, - Encode, - MaxEncodedLen, - Eq, - Ord, - PartialEq, - PartialOrd, - TypeInfo -)] +#[derive(Clone, Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd)] pub enum VenueType { /// Default type - used for mixed and unknown types #[default] @@ -89,20 +77,8 @@ pub enum VenueType { } /// Status of a leg -#[derive( - Copy, - Clone, - Debug, - Decode, - Default, - Encode, - MaxEncodedLen, - Eq, - Ord, - PartialEq, - PartialOrd, - TypeInfo -)] +#[derive(Copy, Clone, Decode, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Debug, Default, Eq, Ord, PartialEq, PartialOrd)] pub enum LegStatus { /// It is waiting for affirmation #[default] @@ -114,19 +90,8 @@ pub enum LegStatus { } /// Status of an affirmation -#[derive( - Clone, - Debug, - Decode, - Default, - Encode, - MaxEncodedLen, - Eq, - Ord, - PartialEq, - PartialOrd, - TypeInfo -)] +#[derive(Clone, Decode, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Debug, Default, Eq, Ord, PartialEq, PartialOrd)] pub enum AffirmationStatus { /// Invalid affirmation #[default] @@ -153,15 +118,15 @@ pub enum SettlementType { } /// A per-Instruction leg ID. -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] +#[derive(Encode, Decode, DecodeWithMemTracking, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Debug)] pub struct LegId(pub u64); impl_checked_inc!(LegId); /// A global and unique instruction ID. -#[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] #[derive(Clone, Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd)] +#[derive(Deserialize, Serialize)] pub struct InstructionId(pub u64); impl_checked_inc!(InstructionId); @@ -191,8 +156,8 @@ pub struct Instruction { } /// Defines a [`Leg`] (i.e the action of a settlement). -#[derive(Serialize, Deserialize)] -#[derive(Clone, Debug, Decode, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Clone, Debug, Deserialize, Serialize)] pub enum Leg { /// Fungible token Fungible { @@ -257,17 +222,8 @@ pub struct Venue { } /// An offchain transaction receipt. -#[derive( - Encode, - Decode, - MaxEncodedLen, - Clone, - PartialEq, - Eq, - Debug, - PartialOrd, - Ord -)] +#[derive(Decode, DecodeWithMemTracking, Encode, Eq, PartialEq)] +#[derive(Clone, Debug, MaxEncodedLen, Ord, PartialOrd)] pub struct Receipt { /// Unique receipt number set by the signer for their receipts. uid: u64, @@ -309,23 +265,13 @@ impl Receipt { } /// A wrapper of [`[u8; 32]`] that can be used for generic messages. -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo, SliceU8StrongTyped)] -#[derive(Clone, Default, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Decode, DecodeWithMemTracking, MaxEncodedLen, SliceU8StrongTyped)] +#[derive(Clone, Default, Encode, Eq, Ord, PartialEq, PartialOrd, TypeInfo)] pub struct ReceiptMetadata([u8; 32]); /// Details about an offchain transaction receipt. -#[derive( - Encode, - Decode, - MaxEncodedLen, - TypeInfo, - Clone, - PartialEq, - Eq, - Debug, - PartialOrd, - Ord -)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] pub struct ReceiptDetails { /// Unique receipt number set by the signer for their receipts uid: u64, @@ -393,19 +339,8 @@ impl ReceiptDetails } /// Stores the number of fungible, non fungible and offchain transfers in a set of legs. -#[derive(Serialize, Deserialize)] -#[derive( - Clone, - Copy, - Debug, - Decode, - MaxEncodedLen, - Default, - Encode, - Eq, - PartialEq, - TypeInfo -)] +#[derive(Clone, Copy, Debug, Deserialize, Serialize, MaxEncodedLen, TypeInfo)] +#[derive(Decode, Default, DecodeWithMemTracking, Encode, Eq, PartialEq)] pub struct AssetCount { fungible: u32, non_fungible: u32, @@ -697,19 +632,8 @@ impl FilteredLegs { } /// Holds the [`AssetCount`] for both the sender and receiver side and the number of offchain assets. -#[derive(Serialize, Deserialize)] -#[derive( - Clone, - Copy, - Debug, - Decode, - Default, - Encode, - MaxEncodedLen, - Eq, - PartialEq, - TypeInfo -)] +#[derive(Clone, Copy, Debug, Deserialize, Serialize, MaxEncodedLen, TypeInfo)] +#[derive(Decode, Default, DecodeWithMemTracking, Encode, Eq, PartialEq)] pub struct AffirmationCount { /// The [`AssetCount`] for sender side. sender_asset_count: AssetCount, @@ -798,17 +722,8 @@ impl ExecuteInstructionInfo { } /// The status of the mediator's affirmation. -#[derive( - Clone, - Debug, - Decode, - Default, - Encode, - MaxEncodedLen, - Eq, - PartialEq, - TypeInfo -)] +#[derive(Clone, Debug, Decode, Default, Encode, Eq)] +#[derive(MaxEncodedLen, PartialEq, TypeInfo)] pub enum MediatorAffirmationStatus { /// Invalid affirmation status #[default] diff --git a/primitives/src/statistics.rs b/primitives/src/statistics.rs index a4054d3cac..19a21f341e 100644 --- a/primitives/src/statistics.rs +++ b/primitives/src/statistics.rs @@ -13,19 +13,20 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use crate::asset::AssetId; -use crate::{Claim, ClaimType, CountryCode, IdentityId, Scope}; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_std::{hash::Hash, hash::Hasher, ops::Deref, ops::DerefMut, prelude::*}; +use crate::asset::AssetId; +use crate::{Claim, ClaimType, CountryCode, IdentityId, Scope}; + /// Transfer manager percentage pub type Percentage = sp_arithmetic::Permill; /// Stats Operation type. #[derive(Serialize, Deserialize)] -#[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum StatOpType { /// Count - Investor count stats. @@ -36,7 +37,7 @@ pub enum StatOpType { /// The statistic type. #[derive(Serialize, Deserialize)] -#[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct StatType { /// The [`StatOpType`] of the statistic. @@ -65,7 +66,7 @@ impl StatType { } /// First stats key in double map. -#[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub struct Stat1stKey { /// The [`AssetId`] of the token. @@ -91,7 +92,7 @@ impl Stat1stKey { } /// Second stats key in double map. -#[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum Stat2ndKey { /// For `MaxInvestorCount` and `MaxInvestorOwnership` transfer rules. @@ -156,10 +157,9 @@ impl From<&StatClaim> for Stat2ndKey { } /// Stats supported claims. -/// -#[derive(Serialize, Deserialize)] -#[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Serialize, Deserialize)] pub enum StatClaim { /// User is Accredited or non-Accredited. Accredited(bool), @@ -192,7 +192,7 @@ impl StatClaim { } /// Stats update. -#[derive(Encode, Decode, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct StatUpdate { /// Stat key to update. (Claim or NoClaim) diff --git a/primitives/src/subset.rs b/primitives/src/subset.rs index d50d165955..a01af79fb3 100644 --- a/primitives/src/subset.rs +++ b/primitives/src/subset.rs @@ -13,14 +13,12 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use core::ops::Sub; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; -use sp_std::{ - collections::btree_set::BTreeSet, - iter::{self, FromIterator}, -}; +use sp_std::collections::btree_set::BTreeSet; +use sp_std::iter::{self, FromIterator}; /// Ordering in a lattice, for example, the lattice of subsets of a set. #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] @@ -48,7 +46,8 @@ pub trait LatticeOrd { /// The type of subsets of an open set of elements of type `A` where the whole set is always /// considered to be bigger than any finite set of its elements. This is true for infinite /// sets. When talking about finite sets, we have to add that they are _open_. -#[derive(Encode, Decode, TypeInfo, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Decode, DecodeWithMemTracking, Encode)] +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd, TypeInfo)] #[derive(Serialize, Deserialize)] pub enum SubsetRestriction { /// No restrictions, the whole set. diff --git a/primitives/src/ticker.rs b/primitives/src/ticker.rs index d455c09ade..5421816bb3 100644 --- a/primitives/src/ticker.rs +++ b/primitives/src/ticker.rs @@ -14,7 +14,7 @@ // along with this program. If not, see . //! Ticker symbol -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use polymesh_primitives_derive::{DeserializeU8StrongTyped, SerializeU8StrongTyped}; use scale_info::TypeInfo; @@ -28,7 +28,7 @@ pub const TICKER_LEN: usize = 12; /// This type stores fixed-length case-sensitive byte strings. Any value of this type that is /// received by a Substrate module call method has to be converted to canonical uppercase /// representation using [`Ticker::canonize`]. -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] +#[derive(Encode, Decode, DecodeWithMemTracking, MaxEncodedLen, TypeInfo)] #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] #[derive(SerializeU8StrongTyped, DeserializeU8StrongTyped)] pub struct Ticker([u8; TICKER_LEN]); diff --git a/primitives/src/traits.rs b/primitives/src/traits.rs index 7f92eb084f..3c33e77a56 100644 --- a/primitives/src/traits.rs +++ b/primitives/src/traits.rs @@ -14,7 +14,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use frame_support::dispatch::{DispatchError, DispatchResult}; +use frame_support::dispatch::DispatchResult; +use frame_support::pallet_prelude::DispatchError; use sp_runtime::transaction_validity::InvalidTransaction; use crate::{ diff --git a/primitives/src/traits/asset.rs b/primitives/src/traits/asset.rs index 588dc8cd61..537d93af0b 100644 --- a/primitives/src/traits/asset.rs +++ b/primitives/src/traits/asset.rs @@ -1,14 +1,18 @@ +#[cfg(feature = "runtime-benchmarks")] +use sp_std::{collections::btree_set::BTreeSet, prelude::Vec}; + +use frame_support::dispatch::DispatchResult; +use frame_support::pallet_prelude::DispatchError; + #[cfg(feature = "runtime-benchmarks")] use crate::{ asset::{AssetName, AssetType, FundingRoundName}, asset_metadata::{AssetMetadataName, AssetMetadataSpec}, AssetIdentifier, PortfolioKind, Ticker, }; -#[cfg(feature = "runtime-benchmarks")] -use sp_std::{collections::btree_set::BTreeSet, prelude::Vec}; -use crate::{asset::AssetId, Balance, IdentityId}; -use frame_support::dispatch::{DispatchError, DispatchResult}; +use crate::asset::AssetId; +use crate::{Balance, IdentityId}; pub trait AssetFnConfig: frame_system::Config { type AssetFn: AssetFnTrait; diff --git a/primitives/src/transfer_compliance.rs b/primitives/src/transfer_compliance.rs index dc439fdabe..75d42567d0 100644 --- a/primitives/src/transfer_compliance.rs +++ b/primitives/src/transfer_compliance.rs @@ -13,18 +13,19 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use crate::asset::AssetId; -use crate::statistics::{v1, Percentage, StatClaim, StatOpType, StatType}; -use crate::{ClaimType, IdentityId}; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use frame_support::{pallet_prelude::Get, BoundedBTreeSet}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_std::prelude::*; +use crate::asset::AssetId; +use crate::statistics::{v1, Percentage, StatClaim, StatOpType, StatType}; +use crate::{ClaimType, IdentityId}; + /// Transfer condition. #[derive(Serialize, Deserialize)] -#[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum TransferCondition { /// Maximum investor count. @@ -113,7 +114,7 @@ impl From for TransferConditionResult { } /// Transfer Condition Exempt key. -#[derive(Decode, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub struct TransferConditionExemptKey { /// The [`AssetId`] of the token. diff --git a/primitives/src/weight_meter.rs b/primitives/src/weight_meter.rs index bb64e93010..fd95f4ba69 100644 --- a/primitives/src/weight_meter.rs +++ b/primitives/src/weight_meter.rs @@ -25,7 +25,7 @@ pub struct WeightMeter { impl WeightMeter { /// Creates [`Self`] from a limit for the maximal consumable weight and a minimum charge of `minimum_charge`. - pub fn from_limit(minimum_charge: Weight, limit: Weight) -> Result { + pub fn with_limit(minimum_charge: Weight, limit: Weight) -> Result { if limit.ref_time() < minimum_charge.ref_time() { return Err(String::from( "The limit must be higher than the minimum_charge", @@ -34,7 +34,7 @@ impl WeightMeter { Ok(Self { minimum_charge, - meter: FrameWeightMeter::from_limit(limit), + meter: FrameWeightMeter::with_limit(limit), }) } @@ -42,7 +42,7 @@ impl WeightMeter { pub fn max_limit(minimum_charge: Weight) -> Self { Self { minimum_charge, - meter: FrameWeightMeter::max_limit(), + meter: FrameWeightMeter::new(), } } @@ -50,7 +50,7 @@ impl WeightMeter { pub fn max_limit_no_minimum() -> Self { Self { minimum_charge: Weight::zero(), - meter: FrameWeightMeter::max_limit(), + meter: FrameWeightMeter::new(), } } diff --git a/rpc/runtime-api/src/compliance.rs b/rpc/runtime-api/src/compliance.rs index e9ce8a4b4f..4a3ef9edd0 100644 --- a/rpc/runtime-api/src/compliance.rs +++ b/rpc/runtime-api/src/compliance.rs @@ -15,7 +15,7 @@ //! Runtime API definition for Compliance module. -use frame_support::dispatch::DispatchError; +use frame_support::pallet_prelude::DispatchError; use polymesh_primitives::asset::AssetId; use polymesh_primitives::compliance_manager::ComplianceReport; diff --git a/rpc/runtime-api/src/nft.rs b/rpc/runtime-api/src/nft.rs index b906acaefd..111d2e28b4 100644 --- a/rpc/runtime-api/src/nft.rs +++ b/rpc/runtime-api/src/nft.rs @@ -15,7 +15,7 @@ //! Runtime API definition for NFT module. -use frame_support::dispatch::DispatchError; +use frame_support::pallet_prelude::DispatchError; use sp_std::vec::Vec; use polymesh_primitives::{NFTs, PortfolioId}; diff --git a/rpc/runtime-api/src/settlement.rs b/rpc/runtime-api/src/settlement.rs index ab4b400c7e..2d5db14f46 100644 --- a/rpc/runtime-api/src/settlement.rs +++ b/rpc/runtime-api/src/settlement.rs @@ -15,7 +15,7 @@ //! Runtime API definition for Settlement module. -use frame_support::dispatch::DispatchError; +use frame_support::pallet_prelude::DispatchError; use frame_support::weights::Weight; use sp_std::vec::Vec; diff --git a/rpc/runtime-api/src/statistics.rs b/rpc/runtime-api/src/statistics.rs index 7be59a1460..fcc9acebf5 100644 --- a/rpc/runtime-api/src/statistics.rs +++ b/rpc/runtime-api/src/statistics.rs @@ -15,7 +15,7 @@ //! Runtime API definition for the Statistics module. -use frame_support::dispatch::DispatchError; +use frame_support::pallet_prelude::DispatchError; use sp_std::vec::Vec; use polymesh_primitives::asset::AssetId; diff --git a/rpc/src/compliance.rs b/rpc/src/compliance.rs index 131be1e441..6eebb8a348 100644 --- a/rpc/src/compliance.rs +++ b/rpc/src/compliance.rs @@ -15,7 +15,7 @@ use std::sync::Arc; -use frame_support::dispatch::DispatchError; +use frame_support::pallet_prelude::DispatchError; use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; use jsonrpsee::types::error::{CallError, ErrorObject}; diff --git a/rpc/src/nft.rs b/rpc/src/nft.rs index f0859789cf..4123d68be6 100644 --- a/rpc/src/nft.rs +++ b/rpc/src/nft.rs @@ -15,7 +15,7 @@ use std::sync::Arc; -use frame_support::dispatch::DispatchError; +use frame_support::pallet_prelude::DispatchError; use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; use jsonrpsee::types::error::{CallError, ErrorObject}; diff --git a/rpc/src/settlement.rs b/rpc/src/settlement.rs index a0432b2039..33a737d54d 100644 --- a/rpc/src/settlement.rs +++ b/rpc/src/settlement.rs @@ -16,7 +16,7 @@ use sp_std::vec::Vec; use std::sync::Arc; -use frame_support::dispatch::DispatchError; +use frame_support::pallet_prelude::DispatchError; use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; use jsonrpsee::types::error::{CallError, ErrorObject}; From 46ef2037f27479ec6a51cf24ad6282c83e12232e Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Wed, 6 Aug 2025 10:55:59 -0300 Subject: [PATCH 44/97] Fix compilation errors - part II --- Cargo.lock | 202 +- Cargo.toml | 1 - node-rpc/Cargo.toml | 2 +- pallets/asset/Cargo.toml | 1 + pallets/contracts/Cargo.toml | 1 - pallets/contracts/src/chain_extension.rs | 9 +- pallets/contracts/src/lib.rs | 41 +- pallets/group/rpc/Cargo.toml | 2 +- pallets/group/rpc/runtime-api/src/lib.rs | 4 +- pallets/group/rpc/src/lib.rs | 22 +- pallets/identity/src/lib.rs | 6 +- pallets/identity/src/types.rs | 12 +- pallets/protocol-fee/rpc/Cargo.toml | 2 +- pallets/runtime/common/Cargo.toml | 1 + pallets/settlement/Cargo.toml | 1 + pallets/sto/src/lib.rs | 46 +- pallets/weights/src/frame_system.rs | 24 + pallets/weights/src/pallet_balances.rs | 21 + pallets/weights/src/pallet_contracts.rs | 2186 +++++++--------------- pallets/weights/src/pallet_indices.rs | 11 + pallets/weights/src/pallet_preimage.rs | 24 + pallets/weights/src/pallet_scheduler.rs | 72 + pallets/weights/src/pallet_staking.rs | 138 +- primitives/src/compliance_manager.rs | 6 +- primitives/src/settlement.rs | 4 +- primitives/src/sto.rs | 4 +- rpc/Cargo.toml | 2 +- rpc/runtime-api/src/pips.rs | 2 +- rpc/src/asset.rs | 37 +- rpc/src/compliance.rs | 30 +- rpc/src/identity.rs | 130 +- rpc/src/lib.rs | 4 +- rpc/src/nft.rs | 35 +- rpc/src/pips.rs | 2 +- rpc/src/settlement.rs | 92 +- rpc/src/transaction_payment.rs | 39 +- 36 files changed, 1163 insertions(+), 2053 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2a5e2f775c..7e8abf48fd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -835,12 +835,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.21.7" @@ -859,15 +853,6 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" -[[package]] -name = "beef" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" -dependencies = [ - "serde", -] - [[package]] name = "binary-merkle-tree" version = "16.0.0" @@ -1120,16 +1105,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "bstr" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "build-helper" version = "0.1.1" @@ -1913,7 +1888,7 @@ dependencies = [ "async-trait", "cumulus-primitives-core", "futures", - "jsonrpsee-core 0.24.9", + "jsonrpsee-core", "parity-scale-codec", "polkadot-overseer", "sc-client-api", @@ -3374,19 +3349,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" -[[package]] -name = "globset" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" -dependencies = [ - "aho-corasick", - "bstr", - "log", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - [[package]] name = "governor" version = "0.6.3" @@ -4381,19 +4343,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jsonrpsee" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "367a292944c07385839818bb71c8d76611138e2dedb0677d035b8da21d29c78b" -dependencies = [ - "jsonrpsee-core 0.16.3", - "jsonrpsee-proc-macros 0.16.3", - "jsonrpsee-server 0.16.3", - "jsonrpsee-types 0.16.3", - "tracing", -] - [[package]] name = "jsonrpsee" version = "0.24.9" @@ -4401,10 +4350,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37b26c20e2178756451cfeb0661fb74c47dd5988cb7e3939de7e9241fd604d42" dependencies = [ "jsonrpsee-client-transport", - "jsonrpsee-core 0.24.9", - "jsonrpsee-proc-macros 0.24.9", - "jsonrpsee-server 0.24.9", - "jsonrpsee-types 0.24.9", + "jsonrpsee-core", + "jsonrpsee-proc-macros", + "jsonrpsee-server", + "jsonrpsee-types", "jsonrpsee-ws-client", "tokio", "tracing", @@ -4419,12 +4368,12 @@ dependencies = [ "base64 0.22.1", "futures-util", "http 1.3.1", - "jsonrpsee-core 0.24.9", + "jsonrpsee-core", "pin-project", "rustls", "rustls-pki-types", "rustls-platform-verifier", - "soketto 0.8.1", + "soketto", "thiserror 1.0.69", "tokio", "tokio-rustls", @@ -4433,32 +4382,6 @@ dependencies = [ "url", ] -[[package]] -name = "jsonrpsee-core" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5dde66c53d6dcdc8caea1874a45632ec0fcf5b437789f1e45766a1512ce803" -dependencies = [ - "anyhow", - "arrayvec 0.7.6", - "async-trait", - "beef", - "futures-channel", - "futures-util", - "globset", - "hyper 0.14.32", - "jsonrpsee-types 0.16.3", - "parking_lot 0.12.4", - "rand 0.8.5", - "rustc-hash 1.1.0", - "serde", - "serde_json", - "soketto 0.7.1", - "thiserror 1.0.69", - "tokio", - "tracing", -] - [[package]] name = "jsonrpsee-core" version = "0.24.9" @@ -4472,7 +4395,7 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "http-body-util", - "jsonrpsee-types 0.24.9", + "jsonrpsee-types", "parking_lot 0.12.4", "pin-project", "rand 0.8.5", @@ -4485,19 +4408,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "jsonrpsee-proc-macros" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44e8ab85614a08792b9bff6c8feee23be78c98d0182d4c622c05256ab553892a" -dependencies = [ - "heck 0.4.1", - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "jsonrpsee-proc-macros" version = "0.24.9" @@ -4511,28 +4421,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "jsonrpsee-server" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4d945a6008c9b03db3354fb3c83ee02d2faa9f2e755ec1dfb69c3551b8f4ba" -dependencies = [ - "futures-channel", - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "jsonrpsee-core 0.16.3", - "jsonrpsee-types 0.16.3", - "serde", - "serde_json", - "soketto 0.7.1", - "tokio", - "tokio-stream", - "tokio-util", - "tower", - "tracing", -] - [[package]] name = "jsonrpsee-server" version = "0.24.9" @@ -4545,13 +4433,13 @@ dependencies = [ "http-body-util", "hyper 1.6.0", "hyper-util", - "jsonrpsee-core 0.24.9", - "jsonrpsee-types 0.24.9", + "jsonrpsee-core", + "jsonrpsee-types", "pin-project", "route-recognizer", "serde", "serde_json", - "soketto 0.8.1", + "soketto", "thiserror 1.0.69", "tokio", "tokio-stream", @@ -4560,20 +4448,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "jsonrpsee-types" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245ba8e5aa633dd1c1e4fae72bce06e71f42d34c14a2767c6b4d173b57bee5e5" -dependencies = [ - "anyhow", - "beef", - "serde", - "serde_json", - "thiserror 1.0.69", - "tracing", -] - [[package]] name = "jsonrpsee-types" version = "0.24.9" @@ -4594,8 +4468,8 @@ checksum = "01b3323d890aa384f12148e8d2a1fd18eb66e9e7e825f9de4fa53bcc19b93eef" dependencies = [ "http 1.3.1", "jsonrpsee-client-transport", - "jsonrpsee-core 0.24.9", - "jsonrpsee-types 0.24.9", + "jsonrpsee-core", + "jsonrpsee-types", "url", ] @@ -5113,7 +4987,7 @@ dependencies = [ "parking_lot 0.12.4", "pin-project-lite", "rw-stream-sink", - "soketto 0.8.1", + "soketto", "thiserror 1.0.69", "tracing", "url", @@ -5840,7 +5714,7 @@ version = "0.1.0" dependencies = [ "frame-support", "frame-system", - "jsonrpsee 0.16.3", + "jsonrpsee", "node-rpc-runtime-api", "pallet-compliance-manager", "pallet-identity", @@ -6492,7 +6366,7 @@ version = "2.0.0" dependencies = [ "frame-support", "frame-system", - "jsonrpsee 0.16.3", + "jsonrpsee", "node-rpc", "pallet-group-rpc-runtime-api", "parity-scale-codec", @@ -6753,7 +6627,7 @@ version = "0.1.0" dependencies = [ "frame-support", "frame-system", - "jsonrpsee 0.16.3", + "jsonrpsee", "node-rpc", "pallet-protocol-fee-rpc-runtime-api", "parity-scale-codec", @@ -7434,7 +7308,7 @@ dependencies = [ "frame-system", "frame-system-rpc-runtime-api", "futures", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "node-rpc", "node-rpc-runtime-api", @@ -7571,7 +7445,7 @@ dependencies = [ name = "polymesh-node-rpc" version = "0.1.0" dependencies = [ - "jsonrpsee 0.16.3", + "jsonrpsee", "node-rpc", "pallet-group-rpc", "pallet-protocol-fee-rpc", @@ -9386,7 +9260,7 @@ name = "sc-consensus-babe-rpc" version = "0.50.0" dependencies = [ "futures", - "jsonrpsee 0.24.9", + "jsonrpsee", "sc-consensus-babe", "sc-consensus-epochs", "sc-rpc-api", @@ -9463,7 +9337,7 @@ version = "0.35.0" dependencies = [ "finality-grandpa", "futures", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "sc-client-api", @@ -9824,7 +9698,7 @@ name = "sc-rpc" version = "45.0.0" dependencies = [ "futures", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.4", @@ -9854,7 +9728,7 @@ dependencies = [ name = "sc-rpc-api" version = "0.49.0" dependencies = [ - "jsonrpsee 0.24.9", + "jsonrpsee", "parity-scale-codec", "sc-chain-spec", "sc-mixnet", @@ -9881,7 +9755,7 @@ dependencies = [ "http-body-util", "hyper 1.6.0", "ip_network", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "sc-rpc-api", "serde", @@ -9901,7 +9775,7 @@ dependencies = [ "futures-util", "hex", "itertools 0.11.0", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.4", @@ -9947,7 +9821,7 @@ dependencies = [ "exit-future", "futures", "futures-timer", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.4", @@ -10015,7 +9889,7 @@ dependencies = [ name = "sc-sync-state-rpc" version = "0.50.0" dependencies = [ - "jsonrpsee 0.24.9", + "jsonrpsee", "parity-scale-codec", "sc-chain-spec", "sc-client-api", @@ -10767,7 +10641,7 @@ dependencies = [ "siphasher 1.0.1", "slab", "smallvec", - "soketto 0.8.1", + "soketto", "twox-hash", "wasmi", "x25519-dalek", @@ -10843,22 +10717,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "soketto" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" -dependencies = [ - "base64 0.13.1", - "bytes", - "futures", - "http 0.2.12", - "httparse", - "log", - "rand 0.8.5", - "sha-1", -] - [[package]] name = "soketto" version = "0.8.1" @@ -11752,7 +11610,7 @@ dependencies = [ "docify", "frame-system-rpc-runtime-api", "futures", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "sc-rpc-api", @@ -11826,7 +11684,7 @@ dependencies = [ "futures", "hex", "impl-serde", - "jsonrpsee 0.24.9", + "jsonrpsee", "parity-scale-codec", "polkadot-sdk", "primitive-types", diff --git a/Cargo.toml b/Cargo.toml index d707a19142..2e0a13ec77 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -220,7 +220,6 @@ pallet-authorship = { version = "40.0.0", default-features = false } pallet-babe = { version = "40.0.0", default-features = false } pallet-balances = { version = "41.1.1", default-features = false, features = ['insecure_zero_ed']} pallet-contracts = { version = "40.1.0", default-features = false } -#pallet-contracts-primitives = { version = "29.0.0", default-features = false} pallet-election-provider-multi-phase = { version = "39.2.0", default-features = false } pallet-grandpa = { version = "40.0.0", default-features = false } pallet-im-online = { version = "39.1.0", default-features = false } diff --git a/node-rpc/Cargo.toml b/node-rpc/Cargo.toml index 21e3f84c76..f2506d312e 100644 --- a/node-rpc/Cargo.toml +++ b/node-rpc/Cargo.toml @@ -10,7 +10,7 @@ repository = "https://github.com/PolymeshAssociation/substrate" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -jsonrpsee = { version = "0.16.2", features = ["server"] } +jsonrpsee = { version = "0.24.8", features = ["server"] } polymesh-primitives = { workspace = true, default-features = false } pallet-group-rpc = { workspace = true } diff --git a/pallets/asset/Cargo.toml b/pallets/asset/Cargo.toml index b7e0aea9c0..9b84d720d4 100644 --- a/pallets/asset/Cargo.toml +++ b/pallets/asset/Cargo.toml @@ -57,6 +57,7 @@ std = [ "pallet-portfolio/std", "pallet-timestamp/std", "pallet-external-agents/std", + "pallet-statistics/std", "polymesh-primitives/std", "polymesh-common-utilities/std", "polymesh-runtime-common/std", diff --git a/pallets/contracts/Cargo.toml b/pallets/contracts/Cargo.toml index 35e8002cd4..2af66f4bbc 100644 --- a/pallets/contracts/Cargo.toml +++ b/pallets/contracts/Cargo.toml @@ -13,7 +13,6 @@ codec = { workspace = true, default-features = false, features = ["derive"] } frame-system = { workspace = true, default-features = false } frame-support = { workspace = true, default-features = false } pallet-contracts = { workspace = true, default-features = false } -#pallet-contracts-primitives = { workspace = true, default-features = false } scale-info = { workspace = true, default-features = false, features = ["derive"] } sp-core = { workspace = true, default-features = false } sp-io = { workspace = true, default-features = false } diff --git a/pallets/contracts/src/chain_extension.rs b/pallets/contracts/src/chain_extension.rs index 8b8b1b1cc2..b3b4ed9899 100644 --- a/pallets/contracts/src/chain_extension.rs +++ b/pallets/contracts/src/chain_extension.rs @@ -4,7 +4,6 @@ use frame_support::ensure; use frame_support::pallet_prelude::DispatchError; use frame_support::storage::unhashed; use frame_support::traits::{Get, GetCallMetadata}; -use frame_support::LOG_TARGET; use frame_system::RawOrigin; use scale_info::prelude::format; use scale_info::prelude::string::String; @@ -26,9 +25,9 @@ type Identity = pallet_identity::Pallet; const MAX_DECODE_DEPTH: u32 = 10; /// ExtrinsicId -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] -#[derive(Serialize, Deserialize)] -#[derive(Clone, Copy, Debug, PartialEq, Eq)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Copy, Clone, Debug, Eq, PartialEq)] +#[derive(Deserialize, Serialize)] pub struct ExtrinsicId(u8, u8); impl From for [u8; 2] { @@ -418,7 +417,7 @@ where // Charge weight for the call. let di = call.get_dispatch_info(); - let charged_amount = env.charge_weight(di.weight)?; + let charged_amount = env.charge_weight(di.total_weight())?; // Execute call requested by contract, with current DID set to the contract owner. let addr = env.ext().address().clone(); diff --git a/pallets/contracts/src/lib.rs b/pallets/contracts/src/lib.rs index f286042239..37fe053be7 100644 --- a/pallets/contracts/src/lib.rs +++ b/pallets/contracts/src/lib.rs @@ -55,7 +55,7 @@ pub mod benchmarking; pub mod chain_extension; -use codec::{Compact, Decode, Encode}; +use codec::{Compact, Decode, DecodeWithMemTracking, Encode}; use frame_support::dispatch::{ DispatchErrorWithPostInfo, DispatchResult, DispatchResultWithPostInfo, }; @@ -73,8 +73,8 @@ use sp_std::{vec, vec::Vec}; pub use chain_extension::{ExtrinsicId, PolymeshExtension}; use pallet_contracts::weights::WeightInfo as FrameWeightInfo; -use pallet_contracts::Config as BConfig; -use pallet_contracts_primitives::Code; +use pallet_contracts::Code; +use pallet_contracts::Config as ContractsConfig; use pallet_identity::{Config as IdentityConfig, ParentDid, WeightInfo as IdentityWeightInfo}; use polymesh_primitives::traits::{AssetFnConfig, AssetFnTrait}; use polymesh_primitives::{storage_migration_ver, Balance, Permissions}; @@ -86,7 +86,8 @@ type CodeHash = ::Hash; pub struct ContractPolymeshHooks; -#[derive(Clone, Debug, Decode, Encode, Eq, MaxEncodedLen, PartialEq, TypeInfo)] +#[derive(Clone, Debug, Eq, MaxEncodedLen, PartialEq, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode)] pub struct Api { desc: [u8; 4], major: u32, @@ -98,7 +99,8 @@ impl Api { } } -#[derive(Clone, Decode, Encode, MaxEncodedLen, Eq, PartialEq, TypeInfo)] +#[derive(Clone, MaxEncodedLen, Eq, PartialEq, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode)] #[scale_info(skip_type_params(T))] pub struct ApiCodeHash { pub hash: CodeHash, @@ -124,18 +126,8 @@ impl sp_std::fmt::Debug for ApiCodeHash { } } -#[derive( - Clone, - Debug, - Decode, - Encode, - MaxEncodedLen, - Eq, - Ord, - PartialOrd, - PartialEq, - TypeInfo -)] +#[derive(MaxEncodedLen, Eq, Ord, PartialOrd, PartialEq, TypeInfo)] +#[derive(Clone, Debug, Decode, DecodeWithMemTracking, Encode)] pub struct ChainVersion { spec_version: u32, tx_version: u32, @@ -319,7 +311,10 @@ pub mod pallet { /// The `Config` trait for the smart contracts pallet. #[pallet::config] pub trait Config: - IdentityConfig + BConfig + frame_system::Config + AssetFnConfig + IdentityConfig + + ContractsConfig + + frame_system::Config + + AssetFnConfig { /// The overarching event type. type RuntimeEvent: From> + IsType<::RuntimeEvent>; @@ -686,7 +681,7 @@ where perms: Option<&Permissions>, ) -> Weight { let instantiate_weight = - ::WeightInfo::instantiate_with_code(code_len, data_len, salt_len) + ::WeightInfo::instantiate_with_code(code_len, data_len, salt_len) .saturating_add(::WeightInfo::base_weight_with_code( code_len, data_len, salt_len, )); @@ -699,10 +694,10 @@ where salt_len: u32, perms: Option<&Permissions>, ) -> Weight { - let instantiate_weight = ::WeightInfo::instantiate(data_len, salt_len) - .saturating_add(::WeightInfo::base_weight_with_hash( - data_len, salt_len, - )); + let instantiate_weight = + ::WeightInfo::instantiate(data_len, salt_len).saturating_add( + ::WeightInfo::base_weight_with_hash(data_len, salt_len), + ); instantiate_weight.saturating_add(Self::weight_link_contract_to_did(perms)) } diff --git a/pallets/group/rpc/Cargo.toml b/pallets/group/rpc/Cargo.toml index cdf29dc3b3..6086deef87 100644 --- a/pallets/group/rpc/Cargo.toml +++ b/pallets/group/rpc/Cargo.toml @@ -9,7 +9,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { workspace = true, default-features = false, features = ["derive"] } -jsonrpsee = { version = "0.16.2", features = ["server", "macros"] } +jsonrpsee = { version = "0.24.8", features = ["server-core", "client-core", "macros"] } sp-api = { workspace = true, default-features = false } sp-blockchain = { workspace = true } sp-core = { workspace = true, default-features = false } diff --git a/pallets/group/rpc/runtime-api/src/lib.rs b/pallets/group/rpc/runtime-api/src/lib.rs index 15a0cf4bce..e82d032f55 100644 --- a/pallets/group/rpc/runtime-api/src/lib.rs +++ b/pallets/group/rpc/runtime-api/src/lib.rs @@ -9,9 +9,9 @@ use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_std::{prelude::*, vec::Vec}; -#[derive(Eq, PartialEq, Encode, Decode, TypeInfo)] +#[derive(Clone, Decode, Encode, Eq, PartialEq, TypeInfo)] #[cfg_attr(feature = "std", derive(Debug))] -#[derive(Serialize, Deserialize)] +#[derive(Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct Member { pub id: IdentityId, diff --git a/pallets/group/rpc/src/lib.rs b/pallets/group/rpc/src/lib.rs index 9b05f06e6c..3f947527b7 100644 --- a/pallets/group/rpc/src/lib.rs +++ b/pallets/group/rpc/src/lib.rs @@ -1,18 +1,16 @@ -pub use pallet_group_rpc_runtime_api::{GroupApi as GroupRuntimeApi, Member}; - use std::{marker::PhantomData, sync::Arc}; -use jsonrpsee::{ - core::RpcResult, - proc_macros::rpc, - types::error::{CallError, ErrorObject}, -}; +use jsonrpsee:: core::RpcResult; +use jsonrpsee::proc_macros::rpc; +use jsonrpsee::types::error::{ErrorObject}; use node_rpc::Error; use sp_api::ProvideRuntimeApi; use sp_blockchain::HeaderBackend; use sp_runtime::traits::Block as BlockT; use sp_std::prelude::*; +pub use pallet_group_rpc_runtime_api::{GroupApi as GroupRuntimeApi, Member}; + /// Group RPC methods. #[rpc(client, server)] pub trait GroupApi { @@ -48,12 +46,11 @@ where let api = self.client.runtime_api(); let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); api.get_cdd_valid_members(at_hash).map_err(|e| { - CallError::Custom(ErrorObject::owned( + ErrorObject::owned( Error::RuntimeError.into(), "Unable to fetch CDD providers.", Some(e.to_string()), - )) - .into() + ) }) } @@ -61,12 +58,11 @@ where let api = self.client.runtime_api(); let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); api.get_gc_valid_members(at_hash).map_err(|e| { - CallError::Custom(ErrorObject::owned( + ErrorObject::owned( Error::RuntimeError.into(), "Unable to fetch Governance Committee members.", Some(e.to_string()), - )) - .into() + ) }) } } diff --git a/pallets/identity/src/lib.rs b/pallets/identity/src/lib.rs index cea2cfed2f..5a9428ac89 100644 --- a/pallets/identity/src/lib.rs +++ b/pallets/identity/src/lib.rs @@ -96,6 +96,7 @@ use core::convert::From; use frame_support::dispatch::DispatchClass::{Normal, Operational}; use frame_support::dispatch::{DispatchResult, GetDispatchInfo, Pays, PostDispatchInfo}; use frame_support::pallet_prelude::DispatchError; +use frame_support::traits::tokens::fungible::{Inspect, Mutate, MutateHold}; use frame_support::traits::{ ChangeMembers, Currency, EnsureOrigin, Get, GetCallMetadata, InitializeMembers, }; @@ -239,7 +240,10 @@ pub mod pallet { /// Group module type CddServiceProviders: GroupTrait; /// Balances module - type Balances: Currency; + type Balances: Currency + + Inspect + + Mutate + + MutateHold; /// Used to check and update CDD type CddHandler: CddAndFeeDetails< Self::AccountId, diff --git a/pallets/identity/src/types.rs b/pallets/identity/src/types.rs index b7548a4211..f54297a050 100644 --- a/pallets/identity/src/types.rs +++ b/pallets/identity/src/types.rs @@ -15,9 +15,9 @@ pub fn zero_account_id() -> AccountId { } /// A result of execution of get_votes. -#[derive(Eq, PartialEq, Encode, Decode, TypeInfo)] +#[derive(Clone, Decode, Encode, Eq, PartialEq, TypeInfo)] #[cfg_attr(feature = "std", derive(Debug))] -#[derive(Serialize, Deserialize)] +#[derive(Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub enum RpcDidRecords { /// Id was found and has the following primary key and secondary keys. @@ -29,9 +29,9 @@ pub enum RpcDidRecords { IdNotFound, } -#[derive(Encode, Decode, TypeInfo, MaxEncodedLen, PartialEq, Eq)] +#[derive(Clone, Decode, Encode, Eq, MaxEncodedLen, PartialEq, TypeInfo)] #[cfg_attr(feature = "std", derive(Debug))] -#[derive(Serialize, Deserialize)] +#[derive(Deserialize, Serialize)] pub enum DidStatus { Unknown, Exists, @@ -39,8 +39,8 @@ pub enum DidStatus { } /// Aggregate information about an `AccountId` in relation to an `IdentityId`. -#[derive(Eq, PartialEq, Encode, Decode, TypeInfo)] -#[derive(Serialize, Deserialize)] +#[derive(Clone, Decode, Encode, Eq, PartialEq, TypeInfo)] +#[derive(Deserialize, Serialize)] pub struct KeyIdentityData { /// The identity of the provided `AccountId`. pub identity: IdentityId, diff --git a/pallets/protocol-fee/rpc/Cargo.toml b/pallets/protocol-fee/rpc/Cargo.toml index d1314702b9..ef821fd438 100644 --- a/pallets/protocol-fee/rpc/Cargo.toml +++ b/pallets/protocol-fee/rpc/Cargo.toml @@ -9,7 +9,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { workspace = true, default-features = false, features = ["derive"] } -jsonrpsee = { version = "0.16.2", features = ["server", "macros"] } +jsonrpsee = { version = "0.24.8", features = ["server", "macros"] } sp-api = { workspace = true, default-features = false } sp-blockchain = { workspace = true } sp-core = { workspace = true, default-features = false } diff --git a/pallets/runtime/common/Cargo.toml b/pallets/runtime/common/Cargo.toml index 43b92a314b..fb008410c5 100644 --- a/pallets/runtime/common/Cargo.toml +++ b/pallets/runtime/common/Cargo.toml @@ -46,6 +46,7 @@ std = [ "pallet-group-rpc-runtime-api/std", "pallet-identity/std", "pallet-multisig/std", + "pallet-committee/std", "polymesh-primitives/std", "polymesh-common-utilities/std", "sp-runtime/std", diff --git a/pallets/settlement/Cargo.toml b/pallets/settlement/Cargo.toml index c8d60a00e0..c9f354b4c2 100644 --- a/pallets/settlement/Cargo.toml +++ b/pallets/settlement/Cargo.toml @@ -53,6 +53,7 @@ std = [ "pallet-timestamp/std", "pallet-permissions/std", "pallet-compliance-manager/std", + "pallet-nft/std", "polymesh-primitives/std", "serde/std", "serde_derive", diff --git a/pallets/sto/src/lib.rs b/pallets/sto/src/lib.rs index 1841cc5781..b63a6f2e44 100644 --- a/pallets/sto/src/lib.rs +++ b/pallets/sto/src/lib.rs @@ -54,12 +54,11 @@ #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use frame_support::dispatch::DispatchResult; use frame_support::ensure; use frame_support::weights::Weight; use frame_system::pallet_prelude::OriginFor; -use polymesh_primitives::crypto::verify_signature; use scale_info::TypeInfo; use sp_runtime::DispatchError; use sp_std::collections::btree_set::BTreeSet; @@ -69,11 +68,12 @@ use pallet_base::try_next_post; use pallet_identity::PermissionedCallOriginData; use pallet_settlement::VenueInfo; use polymesh_primitives::asset::AssetId; +use polymesh_primitives::crypto::verify_signature; use polymesh_primitives::settlement::{Leg, SettlementType, VenueId, VenueType}; use polymesh_primitives::sto::{FundraiserId, FundraiserReceipt, FundraiserReceiptDetails}; +use polymesh_primitives::traits::PortfolioSubTrait; use polymesh_primitives::{ - storage_migration_ver, traits::PortfolioSubTrait, Balance, EventDid, IdentityId, PortfolioId, - Ticker, + storage_migration_ver, Balance, EventDid, IdentityId, PortfolioId, Ticker, }; use polymesh_primitives_derive::VecU8StrongTyped; @@ -88,35 +88,20 @@ type Settlement = pallet_settlement::Pallet; type Timestamp = pallet_timestamp::Pallet; /// Status of a Fundraiser. -#[derive( - Clone, - PartialEq, - Eq, - Encode, - Decode, - TypeInfo, - MaxEncodedLen, - PartialOrd, - Ord, - Debug -)] +#[derive(Clone, Debug, Default, Eq, MaxEncodedLen, Ord, PartialEq, PartialOrd)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] pub enum FundraiserStatus { /// Fundraiser is open for investments if start_time <= current_time < end_time. Live, /// Fundraiser has been frozen, New investments can not be made right now. Frozen, /// Fundraiser has been stopped. + #[default] Closed, /// Fundraiser has been stopped before expiry. ClosedEarly, } -impl Default for FundraiserStatus { - fn default() -> Self { - Self::Closed - } -} - /// Funding method. On-chain asset or off-chain receipt. #[derive(Encode, Decode, TypeInfo)] #[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] @@ -135,9 +120,8 @@ impl FundingMethod { } /// Which funding asset was used to invest in the fundraiser. -#[derive(Encode, Decode, TypeInfo)] -#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] pub enum FundingAsset { /// On-chain asset. OnChain(AssetId), @@ -147,8 +131,7 @@ pub enum FundingAsset { /// Details about the Fundraiser. #[derive(Encode, Decode, TypeInfo)] -#[derive(Default, Clone, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct Fundraiser { /// The permissioned agent that created the `Fundraiser`. pub creator: IdentityId, @@ -183,8 +166,8 @@ impl Fundraiser { } /// Single tier of a tiered pricing model. -#[derive(Encode, Decode, TypeInfo)] -#[derive(Default, Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] +#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct PriceTier { /// Total amount available. pub total: Balance, @@ -195,8 +178,7 @@ pub struct PriceTier { /// Single price tier of a `Fundraiser`. /// Similar to a `PriceTier` but with an extra field `remaining` for tracking the amount available for purchase in a tier. #[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] -#[derive(Default, Clone, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Debug))] +#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct FundraiserTier { /// Total amount available. pub total: Balance, @@ -217,7 +199,7 @@ impl Into for PriceTier { } /// Wrapper type for Fundraiser name. -#[derive(Encode, Decode, TypeInfo, VecU8StrongTyped)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, VecU8StrongTyped)] #[derive(Clone, Default, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct FundraiserName(Vec); diff --git a/pallets/weights/src/frame_system.rs b/pallets/weights/src/frame_system.rs index 833283e595..afdde848db 100644 --- a/pallets/weights/src/frame_system.rs +++ b/pallets/weights/src/frame_system.rs @@ -121,4 +121,28 @@ impl frame_system::WeightInfo for SubstrateWeight { .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(p.into()))) } + /// Storage: `System::AuthorizedUpgrade` (r:0 w:1) + /// Proof: `System::AuthorizedUpgrade` (`max_values`: Some(1), `max_size`: Some(33), added: 528, mode: `MaxEncodedLen`) + fn authorize_upgrade() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 12_466_000 picoseconds. + Weight::from_parts(15_570_000, 0).saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: `System::AuthorizedUpgrade` (r:1 w:1) + /// Proof: `System::AuthorizedUpgrade` (`max_values`: Some(1), `max_size`: Some(33), added: 528, mode: `MaxEncodedLen`) + /// Storage: `MultiBlockMigrations::Cursor` (r:1 w:0) + /// Proof: `MultiBlockMigrations::Cursor` (`max_values`: Some(1), `max_size`: Some(65550), added: 66045, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0x3a636f6465` (r:0 w:1) + /// Proof: UNKNOWN KEY `0x3a636f6465` (r:0 w:1) + fn apply_authorized_upgrade() -> Weight { + // Proof Size summary in bytes: + // Measured: `21` + // Estimated: `67035` + // Minimum execution time: 163_673_542_000 picoseconds. + Weight::from_parts(166_858_158_000, 67035) + .saturating_add(DbWeight::get().reads(2_u64)) + .saturating_add(DbWeight::get().writes(2_u64)) + } } diff --git a/pallets/weights/src/pallet_balances.rs b/pallets/weights/src/pallet_balances.rs index f123494c6a..9fcfc2ce5b 100644 --- a/pallets/weights/src/pallet_balances.rs +++ b/pallets/weights/src/pallet_balances.rs @@ -145,4 +145,25 @@ impl pallet_balances::WeightInfo for SubstrateWeight { .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(u.into()))) .saturating_add(Weight::from_parts(0, 2603).saturating_mul(u.into())) } + fn force_adjust_total_issuance() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_096_000 picoseconds. + Weight::from_parts(5_351_000, 0) + } + fn burn_allow_death() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 29_641_000 picoseconds. + Weight::from_parts(30_219_000, 0) + } + fn burn_keep_alive() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 20_462_000 picoseconds. + Weight::from_parts(20_720_000, 0) + } } diff --git a/pallets/weights/src/pallet_contracts.rs b/pallets/weights/src/pallet_contracts.rs index 33a96b6e37..eedda88f32 100644 --- a/pallets/weights/src/pallet_contracts.rs +++ b/pallets/weights/src/pallet_contracts.rs @@ -53,10 +53,10 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// Proof: `Contracts::DeletionQueueCounter` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) fn on_process_deletion_queue_batch() -> Weight { // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `1627` - // Minimum execution time: 2_527_000 picoseconds. - Weight::from_parts(2_651_000, 1627) + // Measured: `0` + // Estimated: `1485` + // Minimum execution time: 662_000 picoseconds. + Weight::from_parts(715_000, 1485) .saturating_add(DbWeight::get().reads(1_u64)) } /// Storage: `Skipped::Metadata` (r:0 w:0) @@ -64,12 +64,12 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// The range of component `k` is `[0, 1024]`. fn on_initialize_per_trie_key(k: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `451 + k * (69 ±0)` - // Estimated: `441 + k * (70 ±0)` - // Minimum execution time: 13_291_000 picoseconds. - Weight::from_parts(13_825_000, 441) - // Standard Error: 1_137 - .saturating_add(Weight::from_parts(1_244_309, 0).saturating_mul(k.into())) + // Measured: `224 + k * (69 ±0)` + // Estimated: `216 + k * (70 ±0)` + // Minimum execution time: 12_277_000 picoseconds. + Weight::from_parts(12_597_000, 216) + // Standard Error: 3_444 + .saturating_add(Weight::from_parts(1_357_086, 0).saturating_mul(k.into())) .saturating_add(DbWeight::get().reads(2_u64)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(DbWeight::get().writes(2_u64)) @@ -81,27 +81,27 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 125952]`. fn v9_migration_step(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `211 + c * (1 ±0)` - // Estimated: `6149 + c * (1 ±0)` - // Minimum execution time: 8_359_000 picoseconds. - Weight::from_parts(9_179_121, 6149) - // Standard Error: 1 - .saturating_add(Weight::from_parts(1_312, 0).saturating_mul(c.into())) + // Measured: `49 + c * (1 ±0)` + // Estimated: `5987 + c * (1 ±0)` + // Minimum execution time: 5_876_000 picoseconds. + Weight::from_parts(6_203_000, 5987) + // Standard Error: 5 + .saturating_add(Weight::from_parts(1_860, 0).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(2_u64)) .saturating_add(DbWeight::get().writes(1_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(c.into())) } - /// Storage: `Contracts::ContractInfoOf` (r:3 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:2 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) /// Storage: `System::Account` (r:1 w:0) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) fn v10_migration_step() -> Weight { // Proof Size summary in bytes: - // Measured: `709` - // Estimated: `9124` - // Minimum execution time: 42_457_000 picoseconds. - Weight::from_parts(44_556_000, 9124) - .saturating_add(DbWeight::get().reads(4_u64)) + // Measured: `322` + // Estimated: `6262` + // Minimum execution time: 14_462_000 picoseconds. + Weight::from_parts(15_233_000, 6262) + .saturating_add(DbWeight::get().reads(3_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } /// Storage: `Contracts::DeletionQueue` (r:1 w:1025) @@ -111,12 +111,12 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// The range of component `k` is `[0, 1024]`. fn v11_migration_step(k: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `171 + k * (1 ±0)` - // Estimated: `3635 + k * (1 ±0)` - // Minimum execution time: 3_839_000 picoseconds. - Weight::from_parts(3_462_337, 3635) - // Standard Error: 1_384 - .saturating_add(Weight::from_parts(1_166_522, 0).saturating_mul(k.into())) + // Measured: `9 + k * (1 ±0)` + // Estimated: `3473 + k * (1 ±0)` + // Minimum execution time: 2_288_000 picoseconds. + Weight::from_parts(2_332_000, 3473) + // Standard Error: 885 + .saturating_add(Weight::from_parts(1_101_283, 0).saturating_mul(k.into())) .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(DbWeight::get().writes(2_u64)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(k.into()))) @@ -133,35 +133,74 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 125952]`. fn v12_migration_step(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `325 + c * (1 ±0)` - // Estimated: `6263 + c * (1 ±0)` - // Minimum execution time: 17_001_000 picoseconds. - Weight::from_parts(17_095_380, 6263) - // Standard Error: 1 - .saturating_add(Weight::from_parts(411, 0).saturating_mul(c.into())) + // Measured: `188 + c * (1 ±0)` + // Estimated: `6126 + c * (1 ±0)` + // Minimum execution time: 15_169_000 picoseconds. + Weight::from_parts(5_930_836, 6126) + // Standard Error: 6 + .saturating_add(Weight::from_parts(818, 0).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(4_u64)) .saturating_add(DbWeight::get().writes(2_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(c.into())) } - /// Storage: `Contracts::ContractInfoOf` (r:3 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:2 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) fn v13_migration_step() -> Weight { // Proof Size summary in bytes: - // Measured: `639` - // Estimated: `9054` - // Minimum execution time: 35_342_000 picoseconds. - Weight::from_parts(36_839_000, 9054) - .saturating_add(DbWeight::get().reads(3_u64)) + // Measured: `303` + // Estimated: `6243` + // Minimum execution time: 11_213_000 picoseconds. + Weight::from_parts(11_459_000, 6243) + .saturating_add(DbWeight::get().reads(2_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: `Contracts::CodeInfoOf` (r:2 w:0) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// Storage: `Balances::Holds` (r:1 w:0) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(427), added: 2902, mode: `Measured`) + fn v14_migration_step() -> Weight { + // Proof Size summary in bytes: + // Measured: `139` + // Estimated: `6079` + // Minimum execution time: 43_708_000 picoseconds. + Weight::from_parts(44_426_000, 6079) + .saturating_add(DbWeight::get().reads(4_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: `Contracts::ContractInfoOf` (r:2 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) + /// Storage: `System::Account` (r:2 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + fn v15_migration_step() -> Weight { + // Proof Size summary in bytes: + // Measured: `355` + // Estimated: `6295` + // Minimum execution time: 38_695_000 picoseconds. + Weight::from_parts(39_802_000, 6295) + .saturating_add(DbWeight::get().reads(4_u64)) + .saturating_add(DbWeight::get().writes(2_u64)) + } + /// Storage: `Contracts::ContractInfoOf` (r:2 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) + fn v16_migration_step() -> Weight { + // Proof Size summary in bytes: + // Measured: `272` + // Estimated: `6212` + // Minimum execution time: 10_591_000 picoseconds. + Weight::from_parts(11_053_000, 6212) + .saturating_add(DbWeight::get().reads(2_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } /// Storage: `Contracts::MigrationInProgress` (r:1 w:1) /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) fn migration_noop() -> Weight { // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `1627` - // Minimum execution time: 3_272_000 picoseconds. - Weight::from_parts(3_553_000, 1627) + // Measured: `6` + // Estimated: `1491` + // Minimum execution time: 1_920_000 picoseconds. + Weight::from_parts(2_054_000, 1491) .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } @@ -171,10 +210,10 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// Proof: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc55304e7b9012096b41c4eb3aaf947f6ea429` (r:1 w:1) fn migrate() -> Weight { // Proof Size summary in bytes: - // Measured: `166` - // Estimated: `3631` - // Minimum execution time: 12_788_000 picoseconds. - Weight::from_parts(13_163_000, 3631) + // Measured: `29` + // Estimated: `3494` + // Minimum execution time: 9_449_000 picoseconds. + Weight::from_parts(9_800_000, 3494) .saturating_add(DbWeight::get().reads(2_u64)) .saturating_add(DbWeight::get().writes(2_u64)) } @@ -182,10 +221,10 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// Proof: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc55304e7b9012096b41c4eb3aaf947f6ea429` (r:1 w:0) fn on_runtime_upgrade_noop() -> Weight { // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `3607` - // Minimum execution time: 4_794_000 picoseconds. - Weight::from_parts(5_086_000, 3607) + // Measured: `6` + // Estimated: `3471` + // Minimum execution time: 3_272_000 picoseconds. + Weight::from_parts(3_396_000, 3471) .saturating_add(DbWeight::get().reads(1_u64)) } /// Storage: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc55304e7b9012096b41c4eb3aaf947f6ea429` (r:1 w:0) @@ -194,10 +233,10 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) fn on_runtime_upgrade_in_progress() -> Weight { // Proof Size summary in bytes: - // Measured: `167` - // Estimated: `3632` - // Minimum execution time: 6_616_000 picoseconds. - Weight::from_parts(7_034_000, 3632) + // Measured: `30` + // Estimated: `3495` + // Minimum execution time: 4_972_000 picoseconds. + Weight::from_parts(5_130_000, 3495) .saturating_add(DbWeight::get().reads(2_u64)) } /// Storage: UNKNOWN KEY `0x4342193e496fab7ec59d615ed0dc55304e7b9012096b41c4eb3aaf947f6ea429` (r:1 w:0) @@ -206,17 +245,17 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) fn on_runtime_upgrade() -> Weight { // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `3607` - // Minimum execution time: 6_985_000 picoseconds. - Weight::from_parts(7_477_000, 3607) + // Measured: `6` + // Estimated: `3471` + // Minimum execution time: 4_452_000 picoseconds. + Weight::from_parts(4_651_000, 3471) .saturating_add(DbWeight::get().reads(2_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) /// Storage: `Contracts::PristineCode` (r:1 w:0) @@ -225,34 +264,32 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) /// Storage: `System::Account` (r:1 w:1) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 125952]`. fn call_with_code_per_byte(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `783` - // Estimated: `6732 + c * (1 ±0)` - // Minimum execution time: 306_088_000 picoseconds. - Weight::from_parts(268_361_911, 6732) - // Standard Error: 76 - .saturating_add(Weight::from_parts(38_334, 0).saturating_mul(c.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(4_u64)) + // Measured: `460 + c * (1 ±0)` + // Estimated: `3925 + c * (1 ±0)` + // Minimum execution time: 257_238_000 picoseconds. + Weight::from_parts(270_073_069, 3925) + // Standard Error: 8 + .saturating_add(Weight::from_parts(1_175, 0).saturating_mul(c.into())) + .saturating_add(DbWeight::get().reads(6_u64)) + .saturating_add(DbWeight::get().writes(2_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(c.into())) } /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) /// Storage: `Contracts::CodeInfoOf` (r:1 w:1) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `System::EventTopics` (r:3 w:3) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Balances::Holds` (r:2 w:2) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(427), added: 2902, mode: `Measured`) /// Storage: `Contracts::Nonce` (r:1 w:1) /// Proof: `Contracts::Nonce` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) /// Storage: `Timestamp::Now` (r:1 w:0) /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::Account` (r:2 w:2) + /// Storage: `System::Account` (r:1 w:1) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) /// Storage: `Contracts::PristineCode` (r:0 w:1) /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) @@ -261,18 +298,18 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 1048576]`. fn instantiate_with_code(c: u32, i: u32, s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `303` - // Estimated: `8745` - // Minimum execution time: 4_224_657_000 picoseconds. - Weight::from_parts(451_557_864, 8745) - // Standard Error: 216 - .saturating_add(Weight::from_parts(111_761, 0).saturating_mul(c.into())) - // Standard Error: 26 - .saturating_add(Weight::from_parts(1_794, 0).saturating_mul(i.into())) - // Standard Error: 26 - .saturating_add(Weight::from_parts(2_013, 0).saturating_mul(s.into())) - .saturating_add(DbWeight::get().reads(10_u64)) - .saturating_add(DbWeight::get().writes(9_u64)) + // Measured: `0` + // Estimated: `5940` + // Minimum execution time: 11_691_973_000 picoseconds. + Weight::from_parts(11_859_232_000, 5940) + // Standard Error: 760 + .saturating_add(Weight::from_parts(8_842, 0).saturating_mul(c.into())) + // Standard Error: 91 + .saturating_add(Weight::from_parts(1_397, 0).saturating_mul(i.into())) + // Standard Error: 91 + .saturating_add(Weight::from_parts(1_561, 0).saturating_mul(s.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(7_u64)) } /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) @@ -283,32 +320,32 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// Storage: `Contracts::Nonce` (r:1 w:1) /// Proof: `Contracts::Nonce` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) /// Storage: `Timestamp::Now` (r:1 w:0) /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::Account` (r:2 w:2) + /// Storage: `System::Account` (r:1 w:1) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(427), added: 2902, mode: `Measured`) /// The range of component `i` is `[0, 1048576]`. /// The range of component `s` is `[0, 1048576]`. fn instantiate(i: u32, s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `527` - // Estimated: `6517` - // Minimum execution time: 2_029_313_000 picoseconds. - Weight::from_parts(353_077_600, 6517) - // Standard Error: 8 - .saturating_add(Weight::from_parts(1_781, 0).saturating_mul(i.into())) - // Standard Error: 8 - .saturating_add(Weight::from_parts(1_729, 0).saturating_mul(s.into())) - .saturating_add(DbWeight::get().reads(10_u64)) - .saturating_add(DbWeight::get().writes(7_u64)) + // Measured: `205` + // Estimated: `3670` + // Minimum execution time: 5_930_123_000 picoseconds. + Weight::from_parts(5_938_894_000, 3670) + // Standard Error: 72 + .saturating_add(Weight::from_parts(1_660, 0).saturating_mul(i.into())) + // Standard Error: 72 + .saturating_add(Weight::from_parts(1_841, 0).saturating_mul(s.into())) + .saturating_add(DbWeight::get().reads(8_u64)) + .saturating_add(DbWeight::get().writes(5_u64)) } /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) /// Storage: `Contracts::PristineCode` (r:1 w:0) @@ -317,34 +354,32 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) /// Storage: `System::Account` (r:1 w:1) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) fn call() -> Weight { // Proof Size summary in bytes: - // Measured: `817` - // Estimated: `6757` - // Minimum execution time: 204_086_000 picoseconds. - Weight::from_parts(216_738_000, 6757) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(4_u64)) + // Measured: `472` + // Estimated: `3937` + // Minimum execution time: 171_677_000 picoseconds. + Weight::from_parts(176_340_000, 3937) + .saturating_add(DbWeight::get().reads(6_u64)) + .saturating_add(DbWeight::get().writes(2_u64)) } /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) /// Storage: `Contracts::CodeInfoOf` (r:1 w:1) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `System::EventTopics` (r:1 w:1) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(427), added: 2902, mode: `Measured`) /// Storage: `Contracts::PristineCode` (r:0 w:1) /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) /// The range of component `c` is `[0, 125952]`. - fn upload_code(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `3607` - // Minimum execution time: 269_337_000 picoseconds. - Weight::from_parts(220_186_006, 3607) - // Standard Error: 106 - .saturating_add(Weight::from_parts(74_291, 0).saturating_mul(c.into())) + fn upload_code_determinism_enforced(c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3465` + // Minimum execution time: 233_222_000 picoseconds. + Weight::from_parts(256_594_116, 3465) + // Standard Error: 92 + .saturating_add(Weight::from_parts(48_635, 0).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(3_u64)) .saturating_add(DbWeight::get().writes(3_u64)) } @@ -352,1553 +387,654 @@ impl pallet_contracts::WeightInfo for SubstrateWeight { /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) /// Storage: `Contracts::CodeInfoOf` (r:1 w:1) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `System::EventTopics` (r:1 w:1) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(427), added: 2902, mode: `Measured`) /// Storage: `Contracts::PristineCode` (r:0 w:1) /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - fn remove_code() -> Weight { + /// The range of component `c` is `[0, 125952]`. + fn upload_code_determinism_relaxed(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `259` - // Estimated: `3724` - // Minimum execution time: 35_127_000 picoseconds. - Weight::from_parts(36_180_000, 3724) + // Measured: `0` + // Estimated: `3465` + // Minimum execution time: 244_888_000 picoseconds. + Weight::from_parts(279_103_331, 3465) + // Standard Error: 76 + .saturating_add(Weight::from_parts(48_450, 0).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(3_u64)) .saturating_add(DbWeight::get().writes(3_u64)) } /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:2 w:2) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:1) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `System::EventTopics` (r:3 w:3) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn set_code() -> Weight { + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(427), added: 2902, mode: `Measured`) + /// Storage: `Contracts::PristineCode` (r:0 w:1) + /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) + fn remove_code() -> Weight { // Proof Size summary in bytes: - // Measured: `576` - // Estimated: `8991` - // Minimum execution time: 37_550_000 picoseconds. - Weight::from_parts(39_149_000, 8991) - .saturating_add(DbWeight::get().reads(7_u64)) - .saturating_add(DbWeight::get().writes(6_u64)) + // Measured: `178` + // Estimated: `3643` + // Minimum execution time: 41_485_000 picoseconds. + Weight::from_parts(42_404_000, 3643) + .saturating_add(DbWeight::get().reads(3_u64)) + .saturating_add(DbWeight::get().writes(3_u64)) } /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:2 w:2) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_caller(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `857 + r * (6 ±0)` - // Estimated: `6798 + r * (6 ±0)` - // Minimum execution time: 269_991_000 picoseconds. - Weight::from_parts(293_993_592, 6798) - // Standard Error: 665 - .saturating_add(Weight::from_parts(343_796, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) + fn set_code() -> Weight { + // Proof Size summary in bytes: + // Measured: `415` + // Estimated: `6355` + // Minimum execution time: 25_614_000 picoseconds. + Weight::from_parts(26_843_000, 6355) + .saturating_add(DbWeight::get().reads(4_u64)) .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1601 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `r` is `[0, 1600]`. - fn seal_is_contract(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `924 + r * (232 ±0)` - // Estimated: `6831 + r * (2707 ±0)` - // Minimum execution time: 274_151_000 picoseconds. - Weight::from_parts(83_529_206, 6831) - // Standard Error: 8_452 - .saturating_add(Weight::from_parts(3_534_024, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 2707).saturating_mul(r.into())) + fn noop_host_fn(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 8_437_000 picoseconds. + Weight::from_parts(9_257_820, 0) + // Standard Error: 134 + .saturating_add(Weight::from_parts(52_863, 0).saturating_mul(r.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1601 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_code_hash(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `910 + r * (236 ±0)` - // Estimated: `6835 + r * (2711 ±0)` - // Minimum execution time: 276_689_000 picoseconds. - Weight::from_parts(110_268_281, 6835) - // Standard Error: 8_106 - .saturating_add(Weight::from_parts(4_376_136, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 2711).saturating_mul(r.into())) + fn seal_caller() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 687_000 picoseconds. + Weight::from_parts(756_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_own_code_hash(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `864 + r * (6 ±0)` - // Estimated: `6806 + r * (6 ±0)` - // Minimum execution time: 274_079_000 picoseconds. - Weight::from_parts(282_258_090, 6806) - // Standard Error: 1_343 - .saturating_add(Weight::from_parts(464_680, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:0) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) + fn seal_is_contract() -> Weight { + // Proof Size summary in bytes: + // Measured: `217` + // Estimated: `3682` + // Minimum execution time: 7_928_000 picoseconds. + Weight::from_parts(8_224_000, 3682) + .saturating_add(DbWeight::get().reads(1_u64)) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_caller_is_origin(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `854 + r * (3 ±0)` - // Estimated: `6799 + r * (3 ±0)` - // Minimum execution time: 270_960_000 picoseconds. - Weight::from_parts(281_985_584, 6799) - // Standard Error: 378 - .saturating_add(Weight::from_parts(184_462, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 3).saturating_mul(r.into())) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:0) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) + fn seal_code_hash() -> Weight { + // Proof Size summary in bytes: + // Measured: `310` + // Estimated: `3775` + // Minimum execution time: 9_508_000 picoseconds. + Weight::from_parts(9_994_000, 3775) + .saturating_add(DbWeight::get().reads(1_u64)) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_caller_is_root(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `744 + r * (3 ±0)` - // Estimated: `6684 + r * (3 ±0)` - // Minimum execution time: 244_835_000 picoseconds. - Weight::from_parts(270_660_753, 6684) - // Standard Error: 390 - .saturating_add(Weight::from_parts(164_232, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(7_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 3).saturating_mul(r.into())) + fn seal_own_code_hash() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 815_000 picoseconds. + Weight::from_parts(920_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_address(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `858 + r * (6 ±0)` - // Estimated: `6800 + r * (6 ±0)` - // Minimum execution time: 273_269_000 picoseconds. - Weight::from_parts(274_468_168, 6800) - // Standard Error: 2_246 - .saturating_add(Weight::from_parts(386_838, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + fn seal_caller_is_origin() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 370_000 picoseconds. + Weight::from_parts(393_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_gas_left(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `854 + r * (6 ±0)` - // Estimated: `6795 + r * (6 ±0)` - // Minimum execution time: 275_244_000 picoseconds. - Weight::from_parts(281_299_739, 6795) - // Standard Error: 2_890 - .saturating_add(Weight::from_parts(600_498, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + fn seal_caller_is_root() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 295_000 picoseconds. + Weight::from_parts(329_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:2 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_balance(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `998 + r * (6 ±0)` - // Estimated: `6922 + r * (6 ±0)` - // Minimum execution time: 271_540_000 picoseconds. - Weight::from_parts(298_456_935, 6922) - // Standard Error: 2_881 - .saturating_add(Weight::from_parts(1_719_337, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + fn seal_address() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 642_000 picoseconds. + Weight::from_parts(692_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_value_transferred(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `868 + r * (6 ±0)` - // Estimated: `6817 + r * (6 ±0)` - // Minimum execution time: 274_832_000 picoseconds. - Weight::from_parts(286_078_648, 6817) - // Standard Error: 695 - .saturating_add(Weight::from_parts(345_045, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + fn seal_gas_left() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 779_000 picoseconds. + Weight::from_parts(829_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_minimum_balance(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `866 + r * (6 ±0)` - // Estimated: `6815 + r * (6 ±0)` - // Minimum execution time: 267_337_000 picoseconds. - Weight::from_parts(283_693_170, 6815) - // Standard Error: 580 - .saturating_add(Weight::from_parts(345_350, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + fn seal_balance() -> Weight { + // Proof Size summary in bytes: + // Measured: `101` + // Estimated: `0` + // Minimum execution time: 4_582_000 picoseconds. + Weight::from_parts(4_896_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_block_number(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `863 + r * (6 ±0)` - // Estimated: `6813 + r * (6 ±0)` - // Minimum execution time: 276_313_000 picoseconds. - Weight::from_parts(287_689_703, 6813) - // Standard Error: 1_251 - .saturating_add(Weight::from_parts(342_536, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + fn seal_value_transferred() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 723_000 picoseconds. + Weight::from_parts(773_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_now(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `854 + r * (6 ±0)` - // Estimated: `6799 + r * (6 ±0)` - // Minimum execution time: 274_196_000 picoseconds. - Weight::from_parts(288_641_687, 6799) - // Standard Error: 530 - .saturating_add(Weight::from_parts(336_194, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + fn seal_minimum_balance() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 718_000 picoseconds. + Weight::from_parts(751_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `TransactionPayment::NextFeeMultiplier` (r:1 w:0) - /// Proof: `TransactionPayment::NextFeeMultiplier` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_weight_to_fee(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `928 + r * (14 ±0)` - // Estimated: `6861 + r * (14 ±0)` - // Minimum execution time: 254_997_000 picoseconds. - Weight::from_parts(292_260_891, 6861) - // Standard Error: 1_019 - .saturating_add(Weight::from_parts(1_447_021, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 14).saturating_mul(r.into())) + fn seal_block_number() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 679_000 picoseconds. + Weight::from_parts(728_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_input(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `856 + r * (6 ±0)` - // Estimated: `6800 + r * (6 ±0)` - // Minimum execution time: 272_720_000 picoseconds. - Weight::from_parts(287_125_181, 6800) - // Standard Error: 491 - .saturating_add(Weight::from_parts(294_488, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 6).saturating_mul(r.into())) + fn seal_now() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 723_000 picoseconds. + Weight::from_parts(774_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `n` is `[0, 1048576]`. - fn seal_input_per_byte(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `860` - // Estimated: `6800` - // Minimum execution time: 280_665_000 picoseconds. - Weight::from_parts(233_022_448, 6800) - // Standard Error: 23 - .saturating_add(Weight::from_parts(996, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) + fn seal_weight_to_fee() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_577_000 picoseconds. + Weight::from_parts(1_709_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1]`. - fn seal_return(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `844 + r * (45 ±0)` - // Estimated: `6784 + r * (45 ±0)` - // Minimum execution time: 250_335_000 picoseconds. - Weight::from_parts(278_774_071, 6784) - // Standard Error: 873_509 - .saturating_add(Weight::from_parts(4_562_628, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 45).saturating_mul(r.into())) + /// The range of component `n` is `[0, 1048572]`. + fn seal_input(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 566_000 picoseconds. + Weight::from_parts(430_440, 0) + // Standard Error: 0 + .saturating_add(Weight::from_parts(113, 0).saturating_mul(n.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `n` is `[0, 1048576]`. - fn seal_return_per_byte(n: u32, ) -> Weight { + /// The range of component `n` is `[0, 1048572]`. + fn seal_return(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `854` - // Estimated: `6807` - // Minimum execution time: 278_402_000 picoseconds. - Weight::from_parts(285_491_021, 6807) + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 337_000 picoseconds. + Weight::from_parts(389_000, 0) // Standard Error: 0 - .saturating_add(Weight::from_parts(312, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(203, 0).saturating_mul(n.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:4 w:4) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:2 w:2) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) /// Storage: `Contracts::DeletionQueueCounter` (r:1 w:1) /// Proof: `Contracts::DeletionQueueCounter` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:3 w:3) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Contracts::CodeInfoOf` (r:33 w:33) + /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) /// Storage: `Contracts::DeletionQueue` (r:0 w:1) /// Proof: `Contracts::DeletionQueue` (`max_values`: None, `max_size`: Some(142), added: 2617, mode: `Measured`) - /// The range of component `r` is `[0, 1]`. - fn seal_terminate(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `2963 + r * (400 ±0)` - // Estimated: `8903 + r * (7825 ±0)` - // Minimum execution time: 281_030_000 picoseconds. - Weight::from_parts(305_435_226, 8903) - // Standard Error: 816_824 - .saturating_add(Weight::from_parts(131_691_873, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(r.into()))) + /// The range of component `n` is `[0, 32]`. + fn seal_terminate(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `182 + n * (78 ±0)` + // Estimated: `3647 + n * (2553 ±0)` + // Minimum execution time: 15_302_000 picoseconds. + Weight::from_parts(15_426_466, 3647) + // Standard Error: 8_441 + .saturating_add(Weight::from_parts(4_507_899, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(2_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(DbWeight::get().writes((9_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 7825).saturating_mul(r.into())) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 2553).saturating_mul(n.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) /// Storage: `RandomnessCollectiveFlip::RandomMaterial` (r:1 w:0) /// Proof: `RandomnessCollectiveFlip::RandomMaterial` (`max_values`: Some(1), `max_size`: Some(2594), added: 3089, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_random(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `935 + r * (10 ±0)` - // Estimated: `6876 + r * (10 ±0)` - // Minimum execution time: 261_369_000 picoseconds. - Weight::from_parts(300_458_315, 6876) - // Standard Error: 3_506 - .saturating_add(Weight::from_parts(1_971_733, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 10).saturating_mul(r.into())) - } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_deposit_event(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `854 + r * (10 ±0)` - // Estimated: `6799 + r * (10 ±0)` - // Minimum execution time: 262_894_000 picoseconds. - Weight::from_parts(285_321_838, 6799) - // Standard Error: 6_585 - .saturating_add(Weight::from_parts(3_998_744, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 10).saturating_mul(r.into())) + fn seal_random() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `1485` + // Minimum execution time: 2_304_000 picoseconds. + Weight::from_parts(2_359_000, 1485) + .saturating_add(DbWeight::get().reads(1_u64)) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:6 w:6) + /// Storage: `System::EventTopics` (r:4 w:4) /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `t` is `[0, 4]`. /// The range of component `n` is `[0, 16384]`. - fn seal_deposit_event_per_topic_and_byte(t: u32, n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `873 + t * (32 ±0)` - // Estimated: `6820 + t * (2508 ±0)` - // Minimum execution time: 275_909_000 picoseconds. - Weight::from_parts(289_251_568, 6820) - // Standard Error: 94_431 - .saturating_add(Weight::from_parts(3_007_409, 0).saturating_mul(t.into())) - // Standard Error: 26 - .saturating_add(Weight::from_parts(815, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(8_u64)) + fn seal_deposit_event(t: u32, n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `990 + t * (2475 ±0)` + // Minimum execution time: 3_963_000 picoseconds. + Weight::from_parts(4_143_031, 990) + // Standard Error: 6_527 + .saturating_add(Weight::from_parts(2_186_206, 0).saturating_mul(t.into())) + // Standard Error: 1 + .saturating_add(Weight::from_parts(25, 0).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(t.into()))) - .saturating_add(DbWeight::get().writes(3_u64)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(t.into()))) - .saturating_add(Weight::from_parts(0, 2508).saturating_mul(t.into())) - } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_debug_message(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `853 + r * (7 ±0)` - // Estimated: `6797 + r * (7 ±0)` - // Minimum execution time: 168_482_000 picoseconds. - Weight::from_parts(178_065_606, 6797) - // Standard Error: 371 - .saturating_add(Weight::from_parts(242_851, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 7).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(0, 2475).saturating_mul(t.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `MaxEncodedLen`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `MaxEncodedLen`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `MaxEncodedLen`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `i` is `[0, 1048576]`. - fn seal_debug_message_per_byte(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `125804` - // Estimated: `131746` - // Minimum execution time: 407_401_000 picoseconds. - Weight::from_parts(426_585_443, 131746) - // Standard Error: 22 - .saturating_add(Weight::from_parts(986, 0).saturating_mul(i.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) + fn seal_debug_message(i: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 411_000 picoseconds. + Weight::from_parts(582_596, 0) + // Standard Error: 0 + .saturating_add(Weight::from_parts(712, 0).saturating_mul(i.into())) } /// Storage: `Skipped::Metadata` (r:0 w:0) /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 800]`. - fn seal_set_storage(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `921 + r * (292 ±0)` - // Estimated: `919 + r * (293 ±0)` - // Minimum execution time: 275_800_000 picoseconds. - Weight::from_parts(161_230_700, 919) - // Standard Error: 12_908 - .saturating_add(Weight::from_parts(6_965_844, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 293).saturating_mul(r.into())) + fn get_storage_empty() -> Weight { + // Proof Size summary in bytes: + // Measured: `16522` + // Estimated: `16522` + // Minimum execution time: 12_684_000 picoseconds. + Weight::from_parts(13_116_000, 16522) + .saturating_add(DbWeight::get().reads(1_u64)) } /// Storage: `Skipped::Metadata` (r:0 w:0) /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `n` is `[0, 16384]`. - fn seal_set_storage_per_new_byte(n: u32, ) -> Weight { + fn get_storage_full() -> Weight { // Proof Size summary in bytes: - // Measured: `1380` - // Estimated: `1356` - // Minimum execution time: 289_258_000 picoseconds. - Weight::from_parts(334_318_402, 1356) - // Standard Error: 59 - .saturating_add(Weight::from_parts(808, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(10_u64)) - .saturating_add(DbWeight::get().writes(6_u64)) + // Measured: `26532` + // Estimated: `26532` + // Minimum execution time: 53_633_000 picoseconds. + Weight::from_parts(55_592_000, 26532) + .saturating_add(DbWeight::get().reads(1_u64)) } /// Storage: `Skipped::Metadata` (r:0 w:0) /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `n` is `[0, 16384]`. - fn seal_set_storage_per_old_byte(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1243 + n * (1 ±0)` - // Estimated: `1243 + n * (1 ±0)` - // Minimum execution time: 277_874_000 picoseconds. - Weight::from_parts(303_956_600, 1243) - // Standard Error: 33 - .saturating_add(Weight::from_parts(58, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) + fn set_storage_empty() -> Weight { + // Proof Size summary in bytes: + // Measured: `16522` + // Estimated: `16522` + // Minimum execution time: 14_319_000 picoseconds. + Weight::from_parts(14_725_000, 16522) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) } /// Storage: `Skipped::Metadata` (r:0 w:0) /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 800]`. - fn seal_clear_storage(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `917 + r * (288 ±0)` - // Estimated: `921 + r * (289 ±0)` - // Minimum execution time: 255_230_000 picoseconds. - Weight::from_parts(163_226_984, 921) - // Standard Error: 12_691 - .saturating_add(Weight::from_parts(6_808_905, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 289).saturating_mul(r.into())) + fn set_storage_full() -> Weight { + // Proof Size summary in bytes: + // Measured: `26532` + // Estimated: `26532` + // Minimum execution time: 56_431_000 picoseconds. + Weight::from_parts(57_931_000, 26532) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) } /// Storage: `Skipped::Metadata` (r:0 w:0) /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `n` is `[0, 16384]`. - fn seal_clear_storage_per_byte(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1239 + n * (1 ±0)` - // Estimated: `1239 + n * (1 ±0)` - // Minimum execution time: 275_780_000 picoseconds. - Weight::from_parts(301_967_262, 1239) - // Standard Error: 34 - .saturating_add(Weight::from_parts(128, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 800]`. - fn seal_get_storage(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `911 + r * (296 ±0)` - // Estimated: `916 + r * (297 ±0)` - // Minimum execution time: 279_295_000 picoseconds. - Weight::from_parts(208_289_066, 916) - // Standard Error: 8_330 - .saturating_add(Weight::from_parts(5_600_713, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 297).saturating_mul(r.into())) + /// The range of component `o` is `[0, 16384]`. + fn seal_set_storage(n: u32, o: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `154 + o * (1 ±0)` + // Estimated: `153 + o * (1 ±0)` + // Minimum execution time: 9_356_000 picoseconds. + Weight::from_parts(8_075_772, 153) + // Standard Error: 2 + .saturating_add(Weight::from_parts(276, 0).saturating_mul(n.into())) + // Standard Error: 2 + .saturating_add(Weight::from_parts(114, 0).saturating_mul(o.into())) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(o.into())) } /// Storage: `Skipped::Metadata` (r:0 w:0) /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `n` is `[0, 16384]`. - fn seal_get_storage_per_byte(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1255 + n * (1 ±0)` - // Estimated: `1255 + n * (1 ±0)` - // Minimum execution time: 276_745_000 picoseconds. - Weight::from_parts(298_824_233, 1255) - // Standard Error: 36 - .saturating_add(Weight::from_parts(717, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) + fn seal_clear_storage(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `152 + n * (1 ±0)` + // Estimated: `152 + n * (1 ±0)` + // Minimum execution time: 6_210_000 picoseconds. + Weight::from_parts(7_608_498, 152) + // Standard Error: 2 + .saturating_add(Weight::from_parts(137, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) } /// Storage: `Skipped::Metadata` (r:0 w:0) /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 800]`. - fn seal_contains_storage(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `932 + r * (288 ±0)` - // Estimated: `933 + r * (289 ±0)` - // Minimum execution time: 275_137_000 picoseconds. - Weight::from_parts(196_695_898, 933) - // Standard Error: 9_207 - .saturating_add(Weight::from_parts(5_466_071, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 289).saturating_mul(r.into())) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `n` is `[0, 16384]`. - fn seal_contains_storage_per_byte(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1242 + n * (1 ±0)` - // Estimated: `1242 + n * (1 ±0)` - // Minimum execution time: 269_315_000 picoseconds. - Weight::from_parts(296_795_271, 1242) - // Standard Error: 39 - .saturating_add(Weight::from_parts(242, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) + fn seal_get_storage(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `152 + n * (1 ±0)` + // Estimated: `152 + n * (1 ±0)` + // Minimum execution time: 5_676_000 picoseconds. + Weight::from_parts(7_581_087, 152) + // Standard Error: 2 + .saturating_add(Weight::from_parts(557, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) } /// Storage: `Skipped::Metadata` (r:0 w:0) /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 800]`. - fn seal_take_storage(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `905 + r * (296 ±0)` - // Estimated: `912 + r * (297 ±0)` - // Minimum execution time: 256_406_000 picoseconds. - Weight::from_parts(156_850_288, 912) - // Standard Error: 12_496 - .saturating_add(Weight::from_parts(7_055_305, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 297).saturating_mul(r.into())) + /// The range of component `n` is `[0, 16384]`. + fn seal_contains_storage(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `152 + n * (1 ±0)` + // Estimated: `152 + n * (1 ±0)` + // Minimum execution time: 5_286_000 picoseconds. + Weight::from_parts(6_872_699, 152) + // Standard Error: 1 + .saturating_add(Weight::from_parts(119, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) } /// Storage: `Skipped::Metadata` (r:0 w:0) /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `n` is `[0, 16384]`. - fn seal_take_storage_per_byte(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1256 + n * (1 ±0)` - // Estimated: `1256 + n * (1 ±0)` - // Minimum execution time: 280_297_000 picoseconds. - Weight::from_parts(302_241_752, 1256) - // Standard Error: 34 - .saturating_add(Weight::from_parts(748, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(4_u64)) + fn seal_take_storage(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `152 + n * (1 ±0)` + // Estimated: `152 + n * (1 ±0)` + // Minimum execution time: 6_353_000 picoseconds. + Weight::from_parts(8_139_270, 152) + // Standard Error: 5 + .saturating_add(Weight::from_parts(590, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1602 w:1601) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_transfer(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1449 + r * (45 ±0)` - // Estimated: `7346 + r * (2520 ±0)` - // Minimum execution time: 274_834_000 picoseconds. - Weight::from_parts(176_977_557, 7346) - // Standard Error: 32_386 - .saturating_add(Weight::from_parts(39_393_162, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(4_u64)) - .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 2520).saturating_mul(r.into())) + fn set_transient_storage_empty() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_487_000 picoseconds. + Weight::from_parts(1_610_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:801 w:801) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:2 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:2 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:803 w:803) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 800]`. - fn seal_call(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1304 + r * (268 ±0)` - // Estimated: `9485 + r * (2744 ±0)` - // Minimum execution time: 279_802_000 picoseconds. - Weight::from_parts(287_995_000, 9485) - // Standard Error: 99_110 - .saturating_add(Weight::from_parts(245_521_843, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(11_u64)) - .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(4_u64)) - .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 2744).saturating_mul(r.into())) + fn set_transient_storage_full() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_549_000 picoseconds. + Weight::from_parts(2_699_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:736 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:736 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:737 w:737) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 800]`. - fn seal_delegate_call(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + r * (576 ±0)` - // Estimated: `6803 + r * (2637 ±3)` - // Minimum execution time: 273_435_000 picoseconds. - Weight::from_parts(276_865_000, 6803) - // Standard Error: 148_051 - .saturating_add(Weight::from_parts(244_660_274, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 2637).saturating_mul(r.into())) + fn get_transient_storage_empty() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_279_000 picoseconds. + Weight::from_parts(3_339_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:3 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:2 w:2) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:2 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:2 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:4 w:4) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `t` is `[0, 1]`. - /// The range of component `c` is `[0, 1048576]`. - fn seal_call_per_transfer_clone_byte(t: u32, c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1322 + t * (310 ±0)` - // Estimated: `12212 + t * (5260 ±0)` - // Minimum execution time: 477_593_000 picoseconds. - Weight::from_parts(69_887_451, 12212) - // Standard Error: 11_764_606 - .saturating_add(Weight::from_parts(373_361_977, 0).saturating_mul(t.into())) - // Standard Error: 17 - .saturating_add(Weight::from_parts(1_000, 0).saturating_mul(c.into())) - .saturating_add(DbWeight::get().reads(13_u64)) - .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(t.into()))) - .saturating_add(DbWeight::get().writes(6_u64)) - .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(t.into()))) - .saturating_add(Weight::from_parts(0, 5260).saturating_mul(t.into())) + fn get_transient_storage_full() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_085_000 picoseconds. + Weight::from_parts(4_332_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1602 w:1602) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:801 w:801) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:801 w:800) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:801 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `Contracts::Nonce` (r:1 w:1) - /// Proof: `Contracts::Nonce` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:802 w:802) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[1, 800]`. - fn seal_instantiate(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1380 + r * (255 ±0)` - // Estimated: `7204 + r * (5206 ±0)` - // Minimum execution time: 652_387_000 picoseconds. - Weight::from_parts(658_670_000, 7204) - // Standard Error: 363_054 - .saturating_add(Weight::from_parts(395_547_049, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(10_u64)) - .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(6_u64)) - .saturating_add(DbWeight::get().writes((5_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 5206).saturating_mul(r.into())) + fn rollback_transient_storage() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_522_000 picoseconds. + Weight::from_parts(1_723_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:4 w:4) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:2 w:2) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:2 w:1) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:2 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `Contracts::Nonce` (r:1 w:1) - /// Proof: `Contracts::Nonce` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:3 w:3) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `t` is `[0, 1]`. - /// The range of component `i` is `[0, 983040]`. - /// The range of component `s` is `[0, 983040]`. - fn seal_instantiate_per_transfer_input_salt_byte(t: u32, i: u32, s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1233 + t * (156 ±0)` - // Estimated: `9663 + t * (2578 ±2)` - // Minimum execution time: 2_299_620_000 picoseconds. - Weight::from_parts(1_274_859_063, 9663) - // Standard Error: 12_129_871 - .saturating_add(Weight::from_parts(16_608_792, 0).saturating_mul(t.into())) - // Standard Error: 19 - .saturating_add(Weight::from_parts(1_014, 0).saturating_mul(i.into())) - // Standard Error: 19 - .saturating_add(Weight::from_parts(1_180, 0).saturating_mul(s.into())) - .saturating_add(DbWeight::get().reads(15_u64)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(t.into()))) - .saturating_add(DbWeight::get().writes(10_u64)) - .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(t.into()))) - .saturating_add(Weight::from_parts(0, 2578).saturating_mul(t.into())) + /// The range of component `n` is `[0, 16384]`. + /// The range of component `o` is `[0, 16384]`. + fn seal_set_transient_storage(n: u32, o: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_583_000 picoseconds. + Weight::from_parts(2_628_557, 0) + // Standard Error: 0 + .saturating_add(Weight::from_parts(204, 0).saturating_mul(n.into())) + // Standard Error: 0 + .saturating_add(Weight::from_parts(222, 0).saturating_mul(o.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_hash_sha2_256(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `853 + r * (8 ±0)` - // Estimated: `6794 + r * (8 ±0)` - // Minimum execution time: 267_959_000 picoseconds. - Weight::from_parts(282_967_946, 6794) - // Standard Error: 624 - .saturating_add(Weight::from_parts(402_344, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 8).saturating_mul(r.into())) + /// The range of component `n` is `[0, 16384]`. + fn seal_clear_transient_storage(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_188_000 picoseconds. + Weight::from_parts(2_515_424, 0) + // Standard Error: 0 + .saturating_add(Weight::from_parts(227, 0).saturating_mul(n.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `n` is `[0, 1048576]`. - fn seal_hash_sha2_256_per_byte(n: u32, ) -> Weight { + /// The range of component `n` is `[0, 16384]`. + fn seal_get_transient_storage(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `861` - // Estimated: `6801` - // Minimum execution time: 274_585_000 picoseconds. - Weight::from_parts(272_480_647, 6801) - // Standard Error: 1 - .saturating_add(Weight::from_parts(1_089, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_890_000 picoseconds. + Weight::from_parts(2_182_387, 0) + // Standard Error: 0 + .saturating_add(Weight::from_parts(226, 0).saturating_mul(n.into())) + } + /// The range of component `n` is `[0, 16384]`. + fn seal_contains_transient_storage(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_738_000 picoseconds. + Weight::from_parts(1_974_584, 0) + // Standard Error: 0 + .saturating_add(Weight::from_parts(112, 0).saturating_mul(n.into())) + } + /// The range of component `n` is `[0, 16384]`. + fn seal_take_transient_storage(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_913_000 picoseconds. + Weight::from_parts(8_133_541, 0) + // Standard Error: 2 + .saturating_add(Weight::from_parts(3, 0).saturating_mul(n.into())) + } + fn seal_transfer() -> Weight { + // Proof Size summary in bytes: + // Measured: `101` + // Estimated: `0` + // Minimum execution time: 8_943_000 picoseconds. + Weight::from_parts(9_230_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) /// Storage: `Contracts::PristineCode` (r:1 w:0) /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_hash_keccak_256(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `855 + r * (8 ±0)` - // Estimated: `6797 + r * (8 ±0)` - // Minimum execution time: 268_346_000 picoseconds. - Weight::from_parts(284_168_231, 6797) - // Standard Error: 620 - .saturating_add(Weight::from_parts(805_038, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 8).saturating_mul(r.into())) - } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) + /// Storage: `System::Account` (r:1 w:1) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) + /// The range of component `t` is `[0, 1]`. + /// The range of component `i` is `[0, 1048576]`. + fn seal_call(t: u32, i: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `459 + t * (242 ±0)` + // Estimated: `3924 + t * (2083 ±0)` + // Minimum execution time: 132_736_000 picoseconds. + Weight::from_parts(129_310_380, 3924) + // Standard Error: 270_788 + .saturating_add(Weight::from_parts(45_537_319, 0).saturating_mul(t.into())) + // Standard Error: 0 + .saturating_add(Weight::from_parts(7, 0).saturating_mul(i.into())) + .saturating_add(DbWeight::get().reads(3_u64)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(t.into()))) + .saturating_add(DbWeight::get().writes(1_u64)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(t.into()))) + .saturating_add(Weight::from_parts(0, 2083).saturating_mul(t.into())) + } /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) /// Storage: `Contracts::PristineCode` (r:1 w:0) /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `n` is `[0, 1048576]`. - fn seal_hash_keccak_256_per_byte(n: u32, ) -> Weight { + fn seal_delegate_call() -> Weight { // Proof Size summary in bytes: - // Measured: `863` - // Estimated: `6805` - // Minimum execution time: 273_073_000 picoseconds. - Weight::from_parts(280_346_065, 6805) - // Standard Error: 1 - .saturating_add(Weight::from_parts(3_357, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) + // Measured: `269` + // Estimated: `3734` + // Minimum execution time: 120_046_000 picoseconds. + Weight::from_parts(121_748_000, 3734) + .saturating_add(DbWeight::get().reads(2_u64)) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:1) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) /// Storage: `Contracts::PristineCode` (r:1 w:0) /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_hash_blake2_256(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `855 + r * (8 ±0)` - // Estimated: `6800 + r * (8 ±0)` - // Minimum execution time: 263_072_000 picoseconds. - Weight::from_parts(284_487_433, 6800) - // Standard Error: 668 - .saturating_add(Weight::from_parts(458_763, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) + /// Storage: `Contracts::Nonce` (r:1 w:0) + /// Proof: `Contracts::Nonce` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) + /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) + /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1795), added: 4270, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) + /// The range of component `i` is `[0, 983040]`. + /// The range of component `s` is `[0, 983040]`. + fn seal_instantiate(i: u32, s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `463` + // Estimated: `3937` + // Minimum execution time: 1_877_748_000 picoseconds. + Weight::from_parts(156_912_679, 3937) + // Standard Error: 19 + .saturating_add(Weight::from_parts(1_663, 0).saturating_mul(i.into())) + // Standard Error: 19 + .saturating_add(Weight::from_parts(2_033, 0).saturating_mul(s.into())) + .saturating_add(DbWeight::get().reads(5_u64)) .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 8).saturating_mul(r.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `n` is `[0, 1048576]`. - fn seal_hash_blake2_256_per_byte(n: u32, ) -> Weight { + fn seal_hash_sha2_256(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `863` - // Estimated: `6809` - // Minimum execution time: 271_488_000 picoseconds. - Weight::from_parts(273_877_727, 6809) + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 940_000 picoseconds. + Weight::from_parts(8_848_107, 0) // Standard Error: 1 - .saturating_add(Weight::from_parts(1_202, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(1_322, 0).saturating_mul(n.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_hash_blake2_128(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `855 + r * (8 ±0)` - // Estimated: `6801 + r * (8 ±0)` - // Minimum execution time: 271_365_000 picoseconds. - Weight::from_parts(285_100_883, 6801) - // Standard Error: 651 - .saturating_add(Weight::from_parts(462_754, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 8).saturating_mul(r.into())) + /// The range of component `n` is `[0, 1048576]`. + fn seal_hash_keccak_256(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_308_000 picoseconds. + Weight::from_parts(13_432_971, 0) + // Standard Error: 1 + .saturating_add(Weight::from_parts(3_515, 0).saturating_mul(n.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `n` is `[0, 1048576]`. - fn seal_hash_blake2_128_per_byte(n: u32, ) -> Weight { + fn seal_hash_blake2_256(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `863` - // Estimated: `6803` - // Minimum execution time: 272_341_000 picoseconds. - Weight::from_parts(275_388_470, 6803) + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 839_000 picoseconds. + Weight::from_parts(4_868_192, 0) // Standard Error: 1 - .saturating_add(Weight::from_parts(1_192, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(1_458, 0).saturating_mul(n.into())) + } + /// The range of component `n` is `[0, 1048576]`. + fn seal_hash_blake2_128(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 790_000 picoseconds. + Weight::from_parts(814_000, 0) + // Standard Error: 2 + .saturating_add(Weight::from_parts(1_495, 0).saturating_mul(n.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `n` is `[0, 125697]`. - fn seal_sr25519_verify_per_byte(n: u32, ) -> Weight { + fn seal_sr25519_verify(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `988 + n * (1 ±0)` - // Estimated: `6925 + n * (1 ±0)` - // Minimum execution time: 341_302_000 picoseconds. - Weight::from_parts(354_111_630, 6925) - // Standard Error: 8 - .saturating_add(Weight::from_parts(5_913, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 42_811_000 picoseconds. + Weight::from_parts(41_107_222, 0) + // Standard Error: 9 + .saturating_add(Weight::from_parts(4_949, 0).saturating_mul(n.into())) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 160]`. - fn seal_sr25519_verify(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `804 + r * (112 ±0)` - // Estimated: `6742 + r * (112 ±0)` - // Minimum execution time: 275_325_000 picoseconds. - Weight::from_parts(333_041_903, 6742) - // Standard Error: 11_171 - .saturating_add(Weight::from_parts(56_605_218, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 112).saturating_mul(r.into())) + fn seal_ecdsa_recover() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 47_723_000 picoseconds. + Weight::from_parts(48_486_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 160]`. - fn seal_ecdsa_recover(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `898 + r * (76 ±0)` - // Estimated: `6793 + r * (77 ±0)` - // Minimum execution time: 274_165_000 picoseconds. - Weight::from_parts(347_487_800, 6793) - // Standard Error: 15_398 - .saturating_add(Weight::from_parts(46_072_020, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 77).saturating_mul(r.into())) + fn seal_ecdsa_to_eth_address() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 12_903_000 picoseconds. + Weight::from_parts(13_026_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:1) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) /// Storage: `Contracts::PristineCode` (r:1 w:0) /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 160]`. - fn seal_ecdsa_to_eth_address(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `868 + r * (42 ±0)` - // Estimated: `6807 + r * (42 ±0)` - // Minimum execution time: 270_855_000 picoseconds. - Weight::from_parts(320_777_105, 6807) - // Standard Error: 11_106 - .saturating_add(Weight::from_parts(12_053_053, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 42).saturating_mul(r.into())) - } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1536 w:1536) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1536 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:1538 w:1538) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_set_code_hash(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + r * (965 ±0)` - // Estimated: `6798 + r * (3090 ±10)` - // Minimum execution time: 257_732_000 picoseconds. - Weight::from_parts(280_982_000, 6798) - // Standard Error: 68_194 - .saturating_add(Weight::from_parts(27_413_991, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 3090).saturating_mul(r.into())) + fn seal_set_code_hash() -> Weight { + // Proof Size summary in bytes: + // Measured: `269` + // Estimated: `3734` + // Minimum execution time: 19_643_000 picoseconds. + Weight::from_parts(20_330_000, 3734) + .saturating_add(DbWeight::get().reads(2_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:33 w:32) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:1) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 32]`. - fn add_delegate_dependency(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `918 + r * (132 ±0)` - // Estimated: `6870 + r * (2606 ±0)` - // Minimum execution time: 278_285_000 picoseconds. - Weight::from_parts(298_012_554, 6870) - // Standard Error: 24_160 - .saturating_add(Weight::from_parts(6_363_118, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 2606).saturating_mul(r.into())) + fn lock_delegate_dependency() -> Weight { + // Proof Size summary in bytes: + // Measured: `218` + // Estimated: `3683` + // Minimum execution time: 10_632_000 picoseconds. + Weight::from_parts(11_052_000, 3683) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `MaxEncodedLen`) - /// Storage: `Contracts::CodeInfoOf` (r:33 w:32) + /// Storage: `Contracts::CodeInfoOf` (r:1 w:1) /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `MaxEncodedLen`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `MaxEncodedLen`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 32]`. - fn remove_delegate_dependency(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `965 + r * (183 ±0)` - // Estimated: `129453 + r * (2568 ±0)` - // Minimum execution time: 258_198_000 picoseconds. - Weight::from_parts(290_090_206, 129453) - // Standard Error: 19_792 - .saturating_add(Weight::from_parts(6_004_811, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(r.into()))) - .saturating_add(Weight::from_parts(0, 2568).saturating_mul(r.into())) + fn unlock_delegate_dependency() -> Weight { + // Proof Size summary in bytes: + // Measured: `218` + // Estimated: `3558` + // Minimum execution time: 9_383_000 picoseconds. + Weight::from_parts(9_640_000, 3558) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_reentrance_count(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `849 + r * (3 ±0)` - // Estimated: `6799 + r * (3 ±0)` - // Minimum execution time: 263_315_000 picoseconds. - Weight::from_parts(284_093_748, 6799) - // Standard Error: 371 - .saturating_add(Weight::from_parts(176_949, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 3).saturating_mul(r.into())) + fn seal_reentrance_count() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 391_000 picoseconds. + Weight::from_parts(415_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_account_reentrance_count(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `2082 + r * (39 ±0)` - // Estimated: `7886 + r * (40 ±0)` - // Minimum execution time: 274_583_000 picoseconds. - Weight::from_parts(352_081_486, 7886) - // Standard Error: 1_799 - .saturating_add(Weight::from_parts(313_433, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(8_u64)) - .saturating_add(DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 40).saturating_mul(r.into())) + fn seal_account_reentrance_count() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 375_000 picoseconds. + Weight::from_parts(397_000, 0) } - /// Storage: `Contracts::MigrationInProgress` (r:1 w:0) - /// Proof: `Contracts::MigrationInProgress` (`max_values`: Some(1), `max_size`: Some(1026), added: 1521, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`) - /// Storage: `Contracts::ContractInfoOf` (r:1 w:1) - /// Proof: `Contracts::ContractInfoOf` (`max_values`: None, `max_size`: Some(1819), added: 4294, mode: `Measured`) - /// Storage: `Contracts::CodeInfoOf` (r:1 w:0) - /// Proof: `Contracts::CodeInfoOf` (`max_values`: None, `max_size`: Some(93), added: 2568, mode: `Measured`) - /// Storage: `Contracts::PristineCode` (r:1 w:0) - /// Proof: `Contracts::PristineCode` (`max_values`: None, `max_size`: Some(125988), added: 128463, mode: `Measured`) - /// Storage: `Timestamp::Now` (r:1 w:0) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `Contracts::Nonce` (r:1 w:1) + /// Storage: `Contracts::Nonce` (r:1 w:0) /// Proof: `Contracts::Nonce` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `Measured`) - /// Storage: `System::EventTopics` (r:2 w:2) - /// Proof: `System::EventTopics` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `r` is `[0, 1600]`. - fn seal_instantiation_nonce(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `852 + r * (3 ±0)` - // Estimated: `6799 + r * (3 ±0)` - // Minimum execution time: 267_291_000 picoseconds. - Weight::from_parts(287_500_540, 6799) - // Standard Error: 393 - .saturating_add(Weight::from_parts(152_587, 0).saturating_mul(r.into())) - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_parts(0, 3).saturating_mul(r.into())) + fn seal_instantiation_nonce() -> Weight { + // Proof Size summary in bytes: + // Measured: `82` + // Estimated: `1567` + // Minimum execution time: 2_883_000 picoseconds. + Weight::from_parts(3_005_000, 1567) + .saturating_add(DbWeight::get().reads(1_u64)) } /// The range of component `r` is `[0, 5000]`. - fn instr_i64const(r: u32, ) -> Weight { + fn instr_i64_load_store(r: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_440_000 picoseconds. - Weight::from_parts(1_656_631, 0) - // Standard Error: 13 - .saturating_add(Weight::from_parts(10_486, 0).saturating_mul(r.into())) + // Minimum execution time: 947_000 picoseconds. + Weight::from_parts(943_263, 0) + // Standard Error: 11 + .saturating_add(Weight::from_parts(7_556, 0).saturating_mul(r.into())) } } diff --git a/pallets/weights/src/pallet_indices.rs b/pallets/weights/src/pallet_indices.rs index 4ea26be861..3e10bd468c 100644 --- a/pallets/weights/src/pallet_indices.rs +++ b/pallets/weights/src/pallet_indices.rs @@ -97,4 +97,15 @@ impl pallet_indices::WeightInfo for SubstrateWeight { .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } + /// Storage: `Indices::Accounts` (r:1 w:1) + /// Proof: `Indices::Accounts` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) + fn poke_deposit() -> Weight { + // Proof Size summary in bytes: + // Measured: `75` + // Estimated: `3534` + // Minimum execution time: 20_268_000 picoseconds. + Weight::from_parts(20_592_000, 3534) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } } diff --git a/pallets/weights/src/pallet_preimage.rs b/pallets/weights/src/pallet_preimage.rs index 744a72e4aa..653fb6371f 100644 --- a/pallets/weights/src/pallet_preimage.rs +++ b/pallets/weights/src/pallet_preimage.rs @@ -170,4 +170,28 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } + /// Storage: `Preimage::StatusFor` (r:1023 w:1023) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1023 w:1023) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Parameters::Parameters` (r:2 w:0) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(11322), added: 13797, mode: `MaxEncodedLen`) + /// Storage: `Balances::Holds` (r:1023 w:1023) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(427), added: 2902, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:0 w:1023) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// The range of component `n` is `[1, 1024]`. + fn ensure_updated(n: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `0 + n * (227 ±0)` + // Estimated: `28584 + n * (2902 ±0)` + // Minimum execution time: 54_553_000 picoseconds. + Weight::from_parts(56_817_000, 28584) + // Standard Error: 37_902 + .saturating_add(Weight::from_parts(59_397_441, 0).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(2_u64)) + .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(n.into()))) + .saturating_add(DbWeight::get().writes((4_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 2902).saturating_mul(n.into())) + } } diff --git a/pallets/weights/src/pallet_scheduler.rs b/pallets/weights/src/pallet_scheduler.rs index 78f0927ec2..e52e439939 100644 --- a/pallets/weights/src/pallet_scheduler.rs +++ b/pallets/weights/src/pallet_scheduler.rs @@ -157,4 +157,76 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + /// The range of component `s` is `[1, 512]`. + fn schedule_retry(s: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `31` + // Estimated: `110487` + // Minimum execution time: 8_844_000 picoseconds. + Weight::from_parts(10_762_174, 110487) + // Standard Error: 267 + .saturating_add(Weight::from_parts(16_285, 0).saturating_mul(s.into())) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(2_u64)) + } + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + fn set_retry() -> Weight { + // Proof Size summary in bytes: + // Measured: `90629` + // Estimated: `110487` + // Minimum execution time: 160_504_000 picoseconds. + Weight::from_parts(169_783_000, 110487) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: `Scheduler::Lookup` (r:1 w:0) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + fn set_retry_named() -> Weight { + // Proof Size summary in bytes: + // Measured: `91672` + // Estimated: `110487` + // Minimum execution time: 170_680_000 picoseconds. + Weight::from_parts(186_544_000, 110487) + .saturating_add(DbWeight::get().reads(2_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + fn cancel_retry() -> Weight { + // Proof Size summary in bytes: + // Measured: `90630` + // Estimated: `110487` + // Minimum execution time: 161_130_000 picoseconds. + Weight::from_parts(169_076_000, 110487) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: `Scheduler::Lookup` (r:1 w:0) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(107022), added: 109497, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + fn cancel_retry_named() -> Weight { + // Proof Size summary in bytes: + // Measured: `91672` + // Estimated: `110487` + // Minimum execution time: 170_742_000 picoseconds. + Weight::from_parts(182_329_000, 110487) + .saturating_add(DbWeight::get().reads(2_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } } diff --git a/pallets/weights/src/pallet_staking.rs b/pallets/weights/src/pallet_staking.rs index 360c26ade5..97994d6df6 100644 --- a/pallets/weights/src/pallet_staking.rs +++ b/pallets/weights/src/pallet_staking.rs @@ -357,39 +357,6 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking ErasValidatorReward (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: Staking Bonded (r:1025 w:0) // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) - // Storage: Staking Ledger (r:1 w:1) - // Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) - // Storage: Staking ErasStakersClipped (r:1 w:0) - // Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) - // Storage: Staking ErasRewardPoints (r:1 w:0) - // Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) - // Storage: Staking ErasValidatorPrefs (r:1 w:0) - // Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) - // Storage: Staking Payee (r:1025 w:0) - // Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: System Account (r:1026 w:1026) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - // Storage: Identity KeyRecords (r:2050 w:0) - // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) - // Storage: Identity IsDidFrozen (r:1024 w:0) - // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) - /// The range of component `n` is `[0, 1024]`. - fn payout_stakers_dead_controller(n: u32) -> Weight { - // Minimum execution time: 179_739 nanoseconds. - Weight::from_parts(384_202_178, 0) - // Standard Error: 54_301 - .saturating_add(Weight::from_parts(41_015_005, 0).saturating_mul(n.into())) - .saturating_add(DbWeight::get().reads(12)) - .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(n.into()))) - .saturating_add(DbWeight::get().writes(3)) - .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - } - // Storage: Staking CurrentEra (r:1 w:0) - // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) - // Storage: Staking ErasValidatorReward (r:1 w:0) - // Proof: Staking ErasValidatorReward (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) - // Storage: Staking Bonded (r:1025 w:0) - // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) // Storage: Staking Ledger (r:1025 w:1025) // Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) // Storage: Staking ErasStakersClipped (r:1 w:0) @@ -693,4 +660,109 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Minimum execution time: 3_144 nanoseconds. Weight::from_parts(3_806_000, 0).saturating_add(DbWeight::get().writes(1)) } + /// Storage: `Staking::Ledger` (r:1 w:0) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) + /// Storage: `Staking::Bonded` (r:1 w:0) + /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) + /// Storage: `Staking::Payee` (r:1 w:1) + /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + fn update_payee() -> Weight { + // Proof Size summary in bytes: + // Measured: `266` + // Estimated: `4556` + // Minimum execution time: 18_991_000 picoseconds. + Weight::from_parts(19_621_000, 4556) + .saturating_add(DbWeight::get().reads(3_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: `Staking::Ledger` (r:11800 w:11800) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) + /// Storage: `Staking::Bonded` (r:5900 w:5900) + /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) + /// Storage: `Staking::Payee` (r:5900 w:0) + /// Proof: `Staking::Payee` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + /// The range of component `u` is `[0, 5900]`. + fn deprecate_controller_batch(u: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `1015 + u * (229 ±0)` + // Estimated: `990 + u * (7132 ±0)` + // Minimum execution time: 4_048_000 picoseconds. + Weight::from_parts(4_168_000, 990) + // Standard Error: 78_180 + .saturating_add(Weight::from_parts(34_730_792, 0).saturating_mul(u.into())) + .saturating_add(DbWeight::get().reads((4_u64).saturating_mul(u.into()))) + .saturating_add(DbWeight::get().writes((3_u64).saturating_mul(u.into()))) + .saturating_add(Weight::from_parts(0, 7132).saturating_mul(u.into())) + } + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Staking::VirtualStakers` (r:1 w:0) + /// Proof: `Staking::VirtualStakers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) + /// Storage: `Balances::Holds` (r:1 w:0) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(427), added: 2902, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `Staking::Bonded` (r:1 w:1) + /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) + /// Storage: `Staking::Ledger` (r:1 w:1) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) + fn restore_ledger() -> Weight { + // Proof Size summary in bytes: + // Measured: `223` + // Estimated: `4764` + // Minimum execution time: 38_029_000 picoseconds. + Weight::from_parts(38_545_000, 4764) + .saturating_add(DbWeight::get().reads(6_u64)) + .saturating_add(DbWeight::get().writes(2_u64)) + } + /// Storage: `Staking::VirtualStakers` (r:1 w:0) + /// Proof: `Staking::VirtualStakers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) + /// Storage: `Staking::Bonded` (r:1 w:0) + /// Proof: `Staking::Bonded` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) + /// Storage: `Staking::Ledger` (r:1 w:0) + /// Proof: `Staking::Ledger` (`max_values`: None, `max_size`: Some(1091), added: 3566, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:1) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:0) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(427), added: 2902, mode: `MaxEncodedLen`) + fn migrate_currency() -> Weight { + // Proof Size summary in bytes: + // Measured: `389` + // Estimated: `4764` + // Minimum execution time: 77_496_000 picoseconds. + Weight::from_parts(78_353_000, 4764) + .saturating_add(DbWeight::get().reads(6_u64)) + .saturating_add(DbWeight::get().writes(2_u64)) + } + /// Storage: `Staking::CurrentEra` (r:1 w:0) + /// Proof: `Staking::CurrentEra` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Staking::ErasStartSessionIndex` (r:1 w:0) + /// Proof: `Staking::ErasStartSessionIndex` (`max_values`: None, `max_size`: Some(16), added: 2491, mode: `MaxEncodedLen`) + /// Storage: `Staking::ActiveEra` (r:1 w:0) + /// Proof: `Staking::ActiveEra` (`max_values`: Some(1), `max_size`: Some(13), added: 508, mode: `MaxEncodedLen`) + /// Storage: `Staking::Invulnerables` (r:1 w:0) + /// Proof: `Staking::Invulnerables` (`max_values`: Some(1), `max_size`: Some(641), added: 1136, mode: `MaxEncodedLen`) + /// Storage: `Staking::ErasStakersOverview` (r:1 w:0) + /// Proof: `Staking::ErasStakersOverview` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`) + /// Storage: `Session::DisabledValidators` (r:1 w:1) + /// Proof: `Session::DisabledValidators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Session::Validators` (r:1 w:0) + /// Proof: `Session::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Staking::ValidatorSlashInEra` (r:1 w:1) + /// Proof: `Staking::ValidatorSlashInEra` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) + /// Storage: `Staking::OffenceQueue` (r:1 w:1) + /// Proof: `Staking::OffenceQueue` (`max_values`: None, `max_size`: Some(101), added: 2576, mode: `MaxEncodedLen`) + /// Storage: `Staking::OffenceQueueEras` (r:1 w:1) + /// Proof: `Staking::OffenceQueueEras` (`max_values`: Some(1), `max_size`: Some(2690), added: 3185, mode: `MaxEncodedLen`) + fn manual_slash() -> Weight { + // Proof Size summary in bytes: + // Measured: `514` + // Estimated: `4175` + // Minimum execution time: 30_000_000 picoseconds. + Weight::from_parts(33_000_000, 4175) + .saturating_add(DbWeight::get().reads(10_u64)) + .saturating_add(DbWeight::get().writes(4_u64)) + } } diff --git a/primitives/src/compliance_manager.rs b/primitives/src/compliance_manager.rs index 60c7ea5169..c6a0a2c866 100644 --- a/primitives/src/compliance_manager.rs +++ b/primitives/src/compliance_manager.rs @@ -150,7 +150,7 @@ impl From for AssetComplianceResult { /// Holds detailed information for all asset's requirements. #[cfg_attr(feature = "std", derive(Debug))] #[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo)] +#[derive(Clone, Decode, Encode, TypeInfo)] pub struct ComplianceReport { /// Set to `true` if any requirement is satisfied. any_requirement_satisfied: bool, @@ -188,7 +188,7 @@ impl ComplianceReport { /// Holds the information for an individual asset requirement. #[cfg_attr(feature = "std", derive(Debug))] #[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo)] +#[derive(Clone, Decode, Encode, TypeInfo)] pub struct RequirementReport { /// Set to `true` if all conditions are satisfied. requirement_satisfied: bool, @@ -235,7 +235,7 @@ impl RequirementReport { /// Holds the information for an individual condition. #[cfg_attr(feature = "std", derive(Debug))] #[derive(Serialize, Deserialize)] -#[derive(Encode, Decode, TypeInfo)] +#[derive(Clone, Decode, Encode, TypeInfo)] pub struct ConditionReport { /// Set to `true` if the condition is satisfied. pub satisfied: bool, diff --git a/primitives/src/settlement.rs b/primitives/src/settlement.rs index e6e0e7383d..974e4d08af 100644 --- a/primitives/src/settlement.rs +++ b/primitives/src/settlement.rs @@ -682,8 +682,8 @@ impl AffirmationCount { /// Stores the number of fungible, non fungible and offchain assets in an instruction, the consumed weight for executing the instruction, /// and if executing the instruction would fail, the error thrown. -#[derive(Serialize, Deserialize)] -#[derive(Decode, Encode, TypeInfo)] +#[derive(Clone, Decode, Encode, TypeInfo)] +#[derive(Deserialize, Serialize)] pub struct ExecuteInstructionInfo { /// Number of fungible tokens in the instruction. fungible_tokens: u32, diff --git a/primitives/src/sto.rs b/primitives/src/sto.rs index bc2a6c9ee1..7d6e4a90b2 100644 --- a/primitives/src/sto.rs +++ b/primitives/src/sto.rs @@ -13,14 +13,14 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use crate::settlement::ReceiptMetadata; use crate::{impl_checked_inc, IdentityId, Ticker}; /// The per-AssetId ID of a fundraiser. -#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Debug)] pub struct FundraiserId(pub u64); impl_checked_inc!(FundraiserId); diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 78b6f27b38..780f846cea 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -9,7 +9,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { workspace = true, default-features = false, features = ["derive"] } -jsonrpsee = { version = "0.16.2", features = ["server", "macros"] } +jsonrpsee = { version = "0.24.9", features = ["server-core", "client-core", "macros"] } sp-api = { workspace = true, default-features = false } sp-blockchain = { workspace = true } sp-core = { workspace = true, default-features = false } diff --git a/rpc/runtime-api/src/pips.rs b/rpc/runtime-api/src/pips.rs index edd0237b07..599e96bb9e 100644 --- a/rpc/runtime-api/src/pips.rs +++ b/rpc/runtime-api/src/pips.rs @@ -29,7 +29,7 @@ pub mod capped { use serde::{Deserialize, Serialize}; - #[derive(Eq, PartialEq, Encode, Decode)] + #[derive(Clone, Decode, Encode, Eq, PartialEq)] #[cfg_attr(feature = "std", derive(Debug))] #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] diff --git a/rpc/src/asset.rs b/rpc/src/asset.rs index 00766705e7..8d0f993dcc 100644 --- a/rpc/src/asset.rs +++ b/rpc/src/asset.rs @@ -18,8 +18,8 @@ use std::sync::Arc; use frame_support::pallet_prelude::DispatchError; use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; -use jsonrpsee::types::error::{CallError, ErrorObject}; -use sp_api::ProvideRuntimeApi; +use jsonrpsee::types::error::ErrorObject; +use sp_api::{ApiRef, ProvideRuntimeApi}; use sp_blockchain::HeaderBackend; use sp_runtime::traits::Block as BlockT; @@ -27,8 +27,6 @@ pub use node_rpc_runtime_api::asset::AssetApi as AssetRuntimeApi; use polymesh_primitives::asset::AssetId; use polymesh_primitives::{Balance, PortfolioId}; -use crate::Error; - #[rpc(client, server)] pub trait AssetApi { #[method(name = "asset_transferReport")] @@ -74,25 +72,18 @@ where skip_locked_check: bool, at: Option<::Hash>, ) -> RpcResult> { - let api = self.client.runtime_api(); - // If the block hash is not supplied assume the best block. - let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); - - api.transfer_report( - at_hash, - sender_portfolio, - receiver_portfolio, - asset_id, - transfer_value, - skip_locked_check, + rpc_forward_call!( + self, + at, + |api: ApiRef<>::Api>, at| api.transfer_report( + at, + sender_portfolio, + receiver_portfolio, + asset_id, + transfer_value, + skip_locked_check + ), + "Unable to query `transfer_report`." ) - .map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to call asset_transfer_report runtime", - Some(e.to_string()), - )) - .into() - }) } } diff --git a/rpc/src/compliance.rs b/rpc/src/compliance.rs index 6eebb8a348..3c4d48e013 100644 --- a/rpc/src/compliance.rs +++ b/rpc/src/compliance.rs @@ -18,8 +18,8 @@ use std::sync::Arc; use frame_support::pallet_prelude::DispatchError; use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; -use jsonrpsee::types::error::{CallError, ErrorObject}; -use sp_api::ProvideRuntimeApi; +use jsonrpsee::types::error::ErrorObject; +use sp_api::{ApiRef, ProvideRuntimeApi}; use sp_blockchain::HeaderBackend; use sp_runtime::traits::Block as BlockT; @@ -28,8 +28,6 @@ use polymesh_primitives::asset::AssetId; use polymesh_primitives::compliance_manager::ComplianceReport; use polymesh_primitives::IdentityId; -use crate::Error; - #[rpc(client, server)] pub trait ComplianceApi { #[method(name = "compliance_complianceReport")] @@ -71,18 +69,16 @@ where receiver_identity: IdentityId, at: Option<::Hash>, ) -> RpcResult> { - let api = self.client.runtime_api(); - // If the block hash is not supplied assume the best block. - let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); - - api.compliance_report(at_hash, &asset_id, &sender_identity, &receiver_identity) - .map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to call compliance_report runtime", - Some(e.to_string()), - )) - .into() - }) + rpc_forward_call!( + self, + at, + |api: ApiRef<>::Api>, at| api.compliance_report( + at, + &asset_id, + &sender_identity, + &receiver_identity, + ), + "Unable to query `compliance_report`." + ) } } diff --git a/rpc/src/identity.rs b/rpc/src/identity.rs index 38bf8e0dc4..721b5671aa 100644 --- a/rpc/src/identity.rs +++ b/rpc/src/identity.rs @@ -3,8 +3,8 @@ use std::{convert::TryInto, sync::Arc}; use codec::Codec; use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; -use jsonrpsee::types::error::{CallError, ErrorCode, ErrorObject}; -use sp_api::{ApiExt, ApiRef, ProvideRuntimeApi}; +use jsonrpsee::types::error::ErrorObject; +use sp_api::{ApiRef, ProvideRuntimeApi}; use sp_blockchain::HeaderBackend; use sp_runtime::traits::{Block as BlockT, Zero}; @@ -12,7 +12,7 @@ pub use node_rpc_runtime_api::identity::IdentityApi as IdentityRuntimeApi; pub use pallet_identity::types::{CddStatus, DidStatus, KeyIdentityData, RpcDidRecords}; use polymesh_primitives::{Authorization, AuthorizationType, IdentityClaim, Signatory}; -use super::Error; +use crate::Error; const MAX_IDENTITIES_ALLOWED_TO_QUERY: u32 = 500; @@ -111,18 +111,16 @@ where buffer_time: Option, at: Option<::Hash>, ) -> RpcResult { - let api = self.client.runtime_api(); - // If the block hash is not supplied assume the best block. - let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); - api.is_identity_has_valid_cdd(at_hash, did, buffer_time) - .map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Either cdd claim not exist or Identity.", - Some(e.to_string()), - )) - .into() - }) + rpc_forward_call!( + self, + at, + |api: ApiRef<>::Api>, at| api.is_identity_has_valid_cdd( + at, + did, + buffer_time, + ), + "Unable to query `is_identity_has_valid_cdd`." + ) } fn get_did_records( @@ -130,39 +128,12 @@ where did: IdentityId, at: Option<::Hash>, ) -> RpcResult> { - let api = self.client.runtime_api(); - let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); - let api_version = api - .api_version::>( - at_hash, - ) - .map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to fetch DID records", - Some(e.to_string()), - )) - })?; - - match api_version { - Some(version) if version >= 2 => api.get_did_records(at_hash, did), - _ => { - return Err(CallError::Custom(ErrorObject::owned( - ErrorCode::MethodNotFound.code(), - format!("Cannot find `IdentityApi` for block {:?}", at), - None::<()>, - )) - .into()); - } - } - .map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to fetch DID records", - Some(e.to_string()), - )) - .into() - }) + rpc_forward_call!( + self, + at, + |api: ApiRef<>::Api>, at| api.get_did_records(at, did), + "Unable to query `get_did_records`." + ) } fn get_filtered_authorizations( @@ -172,18 +143,13 @@ where auth_type: Option, at: Option<::Hash>, ) -> RpcResult>> { - let api = self.client.runtime_api(); - let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); - - api.get_filtered_authorizations(at_hash, signatory, allow_expired, auth_type) - .map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to fetch authorizations data", - Some(e.to_string()), - )) - .into() - }) + rpc_forward_call!( + self, + at, + |api: ApiRef<>::Api>, at| api + .get_filtered_authorizations(at, signatory, allow_expired, auth_type), + "Unable to query `get_filtered_authorizations`." + ) } fn get_did_status( @@ -196,27 +162,22 @@ where .try_into() .unwrap_or_else(|_| Zero::zero()) { - return Err(CallError::Custom(ErrorObject::owned( + return Err(ErrorObject::owned( Error::RuntimeError.into(), "Unable to fetch dids status", Some(format!( "Provided vector length is more than the maximum allowed length i.e {:?}", MAX_IDENTITIES_ALLOWED_TO_QUERY )), - )) - .into()); + )); } - let api = self.client.runtime_api(); - let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); - api.get_did_status(at_hash, dids).map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to fetch dids status", - Some(e.to_string()), - )) - .into() - }) + rpc_forward_call!( + self, + at, + |api: ApiRef<>::Api>, at| api.get_did_status(at, dids), + "Unable to query `get_did_status`." + ) } fn get_key_identity_data( @@ -240,18 +201,15 @@ where cdd_checker_leeway: Option, at: Option<::Hash>, ) -> RpcResult> { - let api = self.client.runtime_api(); - // If the block hash is not supplied assume the best block. - let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); - - api.valid_cdd_claims(at_hash, target_identity, cdd_checker_leeway) - .map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to call valid_cdd_claims runtime", - Some(e.to_string()), - )) - .into() - }) + rpc_forward_call!( + self, + at, + |api: ApiRef<>::Api>, at| api.valid_cdd_claims( + at, + target_identity, + cdd_checker_leeway + ), + "Unable to query `valid_cdd_claims`." + ) } } diff --git a/rpc/src/lib.rs b/rpc/src/lib.rs index f0618a4616..923f63849d 100644 --- a/rpc/src/lib.rs +++ b/rpc/src/lib.rs @@ -38,11 +38,11 @@ macro_rules! rpc_forward_call { let at_hash = $at.unwrap_or_else(|| $self.client.info().best_hash); let result = $f(api, at_hash).map_err(|e| { - CallError::Custom(ErrorObject::owned( + ErrorObject::owned( crate::Error::RuntimeError.into(), $err_msg, Some(e.to_string()), - )) + ) })?; Ok(result) diff --git a/rpc/src/nft.rs b/rpc/src/nft.rs index 4123d68be6..16b4c452b5 100644 --- a/rpc/src/nft.rs +++ b/rpc/src/nft.rs @@ -18,16 +18,14 @@ use std::sync::Arc; use frame_support::pallet_prelude::DispatchError; use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; -use jsonrpsee::types::error::{CallError, ErrorObject}; -use sp_api::ProvideRuntimeApi; +use jsonrpsee::types::error::ErrorObject; +use sp_api::{ApiRef, ProvideRuntimeApi}; use sp_blockchain::HeaderBackend; use sp_runtime::traits::Block as BlockT; pub use node_rpc_runtime_api::nft::NFTApi as NFTRuntimeApi; use polymesh_primitives::{NFTs, PortfolioId}; -use crate::Error; - #[rpc(client, server)] pub trait NFTApi { #[method(name = "nft_transferReport")] @@ -71,24 +69,17 @@ where skip_locked_check: bool, at: Option<::Hash>, ) -> RpcResult> { - let api = self.client.runtime_api(); - // If the block hash is not supplied assume the best block. - let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); - - api.transfer_report( - at_hash, - sender_portfolio, - receiver_portfolio, - nfts, - skip_locked_check, + rpc_forward_call!( + self, + at, + |api: ApiRef<>::Api>, at| api.transfer_report( + at, + sender_portfolio, + receiver_portfolio, + nfts, + skip_locked_check, + ), + "Unable to query `transfer_report`." ) - .map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to call validate_nft_transfer runtime", - Some(e.to_string()), - )) - .into() - }) } } diff --git a/rpc/src/pips.rs b/rpc/src/pips.rs index c1e85d6679..768e44fcb4 100644 --- a/rpc/src/pips.rs +++ b/rpc/src/pips.rs @@ -18,7 +18,7 @@ use std::sync::Arc; use codec::Codec; use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; -use jsonrpsee::types::error::{CallError, ErrorObject}; +use jsonrpsee::types::error::ErrorObject; use sp_api::{ApiRef, ProvideRuntimeApi}; use sp_blockchain::HeaderBackend; use sp_runtime::traits::Block as BlockT; diff --git a/rpc/src/settlement.rs b/rpc/src/settlement.rs index 33a737d54d..ceef1a125e 100644 --- a/rpc/src/settlement.rs +++ b/rpc/src/settlement.rs @@ -19,8 +19,8 @@ use std::sync::Arc; use frame_support::pallet_prelude::DispatchError; use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; -use jsonrpsee::types::error::{CallError, ErrorObject}; -use sp_api::ProvideRuntimeApi; +use jsonrpsee::types::error::ErrorObject; +use sp_api::{ApiRef, ProvideRuntimeApi}; use sp_blockchain::HeaderBackend; use sp_runtime::traits::Block as BlockT; @@ -29,8 +29,6 @@ use polymesh_primitives::settlement::{AffirmationCount, ExecuteInstructionInfo}; use polymesh_primitives::settlement::{InstructionId, Leg}; use polymesh_primitives::PortfolioId; -use crate::Error; - #[rpc(client, server)] pub trait SettlementApi { #[method(name = "settlement_getExecuteInstructionInfo")] @@ -91,19 +89,13 @@ where instruction_id: InstructionId, at: Option<::Hash>, ) -> RpcResult> { - let api = self.client.runtime_api(); - // If the block hash is not supplied assume the best block. - let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); - - api.get_execute_instruction_info(at_hash, instruction_id) - .map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to call get_execute_instruction_info runtime", - Some(e.to_string()), - )) - .into() - }) + rpc_forward_call!( + self, + at, + |api: ApiRef<>::Api>, at| api + .get_execute_instruction_info(at, instruction_id,), + "Unable to query `get_execute_instruction_info`." + ) } fn get_affirmation_count( @@ -112,19 +104,16 @@ where portfolios: Vec, at: Option<::Hash>, ) -> RpcResult { - let api = self.client.runtime_api(); - // If the block hash is not supplied assume the best block. - let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); - - api.get_affirmation_count(at_hash, instruction_id, portfolios) - .map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to call get_affirmation_count runtime", - Some(e.to_string()), - )) - .into() - }) + rpc_forward_call!( + self, + at, + |api: ApiRef<>::Api>, at| api.get_affirmation_count( + at, + instruction_id, + portfolios, + ), + "Unable to query `get_affirmation_count`." + ) } fn get_transfer_report( @@ -133,19 +122,16 @@ where skip_locked_check: bool, at: Option<::Hash>, ) -> RpcResult> { - let api = self.client.runtime_api(); - // If the block hash is not supplied assume the best block. - let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); - - api.get_transfer_report(at_hash, leg, skip_locked_check) - .map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to call get_transfer_report runtime", - Some(e.to_string()), - )) - .into() - }) + rpc_forward_call!( + self, + at, + |api: ApiRef<>::Api>, at| api.get_transfer_report( + at, + leg, + skip_locked_check, + ), + "Unable to query `get_transfer_report`." + ) } fn get_execute_instruction_report( @@ -153,18 +139,12 @@ where instruction_id: InstructionId, at: Option<::Hash>, ) -> RpcResult> { - let api = self.client.runtime_api(); - // If the block hash is not supplied assume the best block. - let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); - - api.get_execute_instruction_report(at_hash, instruction_id) - .map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to call get_execute_instruction_report runtime", - Some(e.to_string()), - )) - .into() - }) + rpc_forward_call!( + self, + at, + |api: ApiRef<>::Api>, at| api + .get_execute_instruction_report(at, instruction_id,), + "Unable to query `get_execute_instruction_report`." + ) } } diff --git a/rpc/src/transaction_payment.rs b/rpc/src/transaction_payment.rs index 1fd977c866..74c3d1e1c4 100644 --- a/rpc/src/transaction_payment.rs +++ b/rpc/src/transaction_payment.rs @@ -16,21 +16,24 @@ //! RPC interface for the transaction payment module. +use std::{convert::TryInto, sync::Arc}; + use codec::Decode; -use jsonrpsee::core::{Error as JsonRpseeError, RpcResult}; +use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; -use jsonrpsee::types::error::{CallError, ErrorCode, ErrorObject}; +use jsonrpsee::types::error::{ErrorCode, ErrorObject}; pub use node_rpc_runtime_api::transaction_payment::{ FeeDetails, InclusionFee, RuntimeDispatchInfo, TransactionPaymentApi as TransactionPaymentRuntimeApi, }; -use polymesh_primitives::{Balance, OldWeight}; + use sp_api::{ApiExt, ProvideRuntimeApi}; use sp_blockchain::HeaderBackend; use sp_core::Bytes; use sp_rpc::number::NumberOrHex; use sp_runtime::traits::Block as BlockT; -use std::{convert::TryInto, sync::Arc}; + +use polymesh_primitives::{Balance, OldWeight}; use super::Error; @@ -86,30 +89,26 @@ where let encoded_len = encoded_xt.len() as u32; let uxt: Block::Extrinsic = Decode::decode(&mut &*encoded_xt).map_err(|e| { - CallError::Custom(ErrorObject::owned( + ErrorObject::owned( Error::DecodeError.into(), "Unable to query dispatch info.", Some(format!("{:?}", e)), - )) + ) })?; - fn map_err(error: impl ToString, desc: &'static str) -> CallError { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - desc, - Some(error.to_string()), - )) + fn map_err(error: impl ToString, desc: &'static str) -> ErrorObject<'static> { + ErrorObject::owned(Error::RuntimeError.into(), desc, Some(error.to_string())) } let api_version = api .api_version::>(at_hash) .map_err(|e| map_err(e, "Failed to get transaction payment runtime api version"))? .ok_or_else(|| { - CallError::Custom(ErrorObject::owned( + ErrorObject::owned( Error::RuntimeError.into(), "Transaction payment runtime api wasn't found in the runtime", None::, - )) + ) })?; if api_version < 2 { @@ -142,29 +141,29 @@ where let encoded_len = encoded_xt.len() as u32; let uxt: Block::Extrinsic = Decode::decode(&mut &*encoded_xt).map_err(|e| { - CallError::Custom(ErrorObject::owned( + ErrorObject::owned( Error::DecodeError.into(), "Unable to query fee details.", Some(format!("{:?}", e)), - )) + ) })?; let fee_details = api .query_fee_details(at_hash, uxt, encoded_len) .map_err(|e| { - CallError::Custom(ErrorObject::owned( + ErrorObject::owned( Error::RuntimeError.into(), "Unable to query fee details.", Some(e.to_string()), - )) + ) })?; let try_into_rpc_balance = |value: Balance| { value.try_into().map_err(|_| { - JsonRpseeError::Call(CallError::Custom(ErrorObject::owned( + ErrorObject::owned( ErrorCode::InvalidParams.code(), format!("{} doesn't fit in NumberOrHex representation", value), None::<()>, - ))) + ) }) }; From 607b1127354560afd11dd1ffdea8a15193b9f62b Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 8 Aug 2025 13:23:54 -0300 Subject: [PATCH 45/97] Fix compilation errors - part III --- pallets/group/rpc/src/lib.rs | 4 +- pallets/runtime/common/src/lib.rs | 21 +++---- pallets/runtime/common/src/runtime.rs | 87 +++++++++++++------------- pallets/runtime/develop/src/runtime.rs | 4 +- 4 files changed, 53 insertions(+), 63 deletions(-) diff --git a/pallets/group/rpc/src/lib.rs b/pallets/group/rpc/src/lib.rs index 3f947527b7..aab37f89e0 100644 --- a/pallets/group/rpc/src/lib.rs +++ b/pallets/group/rpc/src/lib.rs @@ -1,8 +1,8 @@ use std::{marker::PhantomData, sync::Arc}; -use jsonrpsee:: core::RpcResult; +use jsonrpsee::core::RpcResult; use jsonrpsee::proc_macros::rpc; -use jsonrpsee::types::error::{ErrorObject}; +use jsonrpsee::types::error::ErrorObject; use node_rpc::Error; use sp_api::ProvideRuntimeApi; use sp_blockchain::HeaderBackend; diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index d84aad3221..2111f4e86d 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -22,6 +22,7 @@ pub mod impls; pub mod migration; pub mod runtime; +use frame_election_provider_support::bounds::{ElectionBounds, ElectionBoundsBuilder}; pub use frame_support::dispatch::{DispatchClass, GetDispatchInfo}; pub use frame_support::parameter_types; pub use frame_support::traits::{Currency, Get}; @@ -135,10 +136,12 @@ parameter_types! { .saturating_sub(BlockExecutionWeight::get()); // Staking constants + pub MaxExposurePageSize: u32 = 64; pub MaxNominations: u32 = 16; pub HistoryDepth:u32 = 84; pub MaxUnlockingChunks: u32 = 32; pub MaxValidatorPerIdentity: Permill = Permill::from_percent(33); + pub MaxControllersInDeprecationBatch: u32 = 100; // Multi-phase election parameters // Signed phase @@ -150,16 +153,16 @@ parameter_types! { pub const SignedRewardBase: Balance = 0; pub const SignedDepositBase: Balance = 0; pub const SignedDepositByte: Balance = 0; - // Unsigned phase - pub BetterUnsignedThreshold: Perbill = Perbill::from_rational(1u32, 10_000); pub const MultiPhaseUnsignedPriority: TransactionPriority = TransactionPriority::max_value() / 2 - 1u64; // Fallback parameters pub MaxOnChainElectingVoters: u32 = 5000; pub MaxOnChainElectableTargets: u16 = 1250; // Other config parameters pub OffChainRepeat: BlockNumber = 5; - pub MaxElectingVoters: u32 = 40_000; - pub MaxElectableTargets: u16 = 10_000; + pub ElectionBoundsMultiPhase: ElectionBounds = ElectionBoundsBuilder::default() + .voters_count(10_000.into()).targets_count(1_500.into()).build(); + pub ElectionBoundsOnChain: ElectionBounds = ElectionBoundsBuilder::default() + .voters_count(5_000.into()).targets_count(1_250.into()).build(); pub MaxActiveValidators: u32 = 1_000; // Miner Config parameters pub MinerMaxLength: u32 = Perbill::from_rational(9u32, 10) * @@ -172,16 +175,6 @@ parameter_types! { .saturating_sub(BlockExecutionWeight::get()); } -frame_election_provider_support::generate_solution_type!( - #[compact] - pub struct NposSolution16::< - VoterIndex = u32, - TargetIndex = u16, - Accuracy = sp_runtime::PerU16, - MaxVoters = MaxElectingVoters, - >(16) -); - /// Converts Weight to Fee pub struct WeightToFee; diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 41eb155c39..af8eb81c83 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -163,23 +163,23 @@ macro_rules! misc_pallet_impls { } impl pallet_balances::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeHoldReason = [u8; 32]; + type RuntimeFreezeReason = (); + type WeightInfo = polymesh_weights::pallet_balances::SubstrateWeight; type Balance = Balance; type DustRemoval = (); - type RuntimeEvent = RuntimeEvent; #[cfg(not(feature = "runtime-benchmarks"))] type ExistentialDeposit = ExistentialDeposit; #[cfg(feature = "runtime-benchmarks")] type ExistentialDeposit = BenchmarkEd; type AccountStore = frame_system::Pallet; - type WeightInfo = polymesh_weights::pallet_balances::SubstrateWeight; + type ReserveIdentifier = [u8; 8]; + type FreezeIdentifier = [u8; 8]; type MaxLocks = MaxLocks; type MaxReserves = MaxReserves; - type ReserveIdentifier = [u8; 8]; + type DoneSlashHandler = (); type Memo = polymesh_primitives::Memo; - type RuntimeHoldReason = [u8; 32]; - type FreezeIdentifier = [u8; 8]; - type MaxHolds = MaxHolds; - type MaxFreezes = MaxFreezes; } impl pallet_protocol_fee::Config for Runtime { @@ -233,13 +233,15 @@ macro_rules! misc_pallet_impls { } impl pallet_staking::Config for Runtime { + type OldCurrency = Balances; type Currency = Balances; + type RuntimeHoldReason = [u8; 32]; type CurrencyBalance = Balance; type UnixTime = Timestamp; type CurrencyToVote = sp_staking::currency_to_vote::U128CurrencyToVote; type ElectionProvider = ElectionProviderMultiPhase; type GenesisElectionProvider = Self::ElectionProvider; - type MaxNominations = polymesh_runtime_common::MaxNominations; + type NominationsQuota = polymesh_runtime_common::MaxNominations; type HistoryDepth = polymesh_runtime_common::HistoryDepth; type RewardRemainder = (); type RuntimeEvent = RuntimeEvent; @@ -252,12 +254,13 @@ macro_rules! misc_pallet_impls { type SessionInterface = Self; type EraPayout = pallet_validators::PolymeshConvertCurve; type NextNewSession = Session; - type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; - type OffendingValidatorsThreshold = OffendingValidatorsThreshold; + type MaxExposurePageSize = polymesh_runtime_common::MaxExposurePageSize; type VoterList = pallet_staking::UseNominatorsAndValidatorsMap; type TargetList = pallet_staking::UseValidatorsMap; type MaxUnlockingChunks = polymesh_runtime_common::MaxUnlockingChunks; + type MaxControllersInDeprecationBatch = polymesh_runtime_common::MaxControllersInDeprecationBatch; type EventListeners = (); + type Filter = frame_support::traits::Nothing; type BenchmarkingConfig = pallet_staking::TestBenchmarkingConfig; type WeightInfo = polymesh_weights::pallet_staking::SubstrateWeight; type Permissioned = Validators; @@ -489,20 +492,24 @@ macro_rules! misc_pallet_impls { } parameter_types! { - pub const PreimageMaxSize: u32 = 4096 * 1024; pub const PreimageBaseDeposit: Balance = polymesh_runtime_common::deposit(2, 64); pub const PreimageByteDeposit: Balance = polymesh_runtime_common::deposit(0, 1); + pub const PreimageHoldReason: RuntimeHoldReason = RuntimeHoldReason::Preimage(pallet_preimage::HoldReason::Preimage); pub const BridgePalletName: &'static str = "Bridge"; } impl pallet_preimage::Config for Runtime { - type WeightInfo = polymesh_weights::pallet_preimage::SubstrateWeight; type RuntimeEvent = RuntimeEvent; + type WeightInfo = polymesh_weights::pallet_preimage::SubstrateWeight; type Currency = Balances; type ManagerOrigin = polymesh_primitives::EnsureRoot; - type BaseDeposit = PreimageBaseDeposit; - type ByteDeposit = PreimageByteDeposit; + type Consideration = frame_support::traits::tokens::fungible::HoldConsideration< + polymesh_primitives::AccountId, + Balances, + PreimageHoldReason, + frame_support::traits::LinearStoragePrice, + >; } impl pallet_offences::Config for Runtime { @@ -572,17 +579,14 @@ macro_rules! misc_pallet_impls { where RuntimeCall: From, { - fn create_transaction< + fn create_signed_transaction< C: frame_system::offchain::AppCrypto, >( call: RuntimeCall, public: ::Signer, account: polymesh_primitives::AccountId, nonce: polymesh_primitives::Nonce, - ) -> Option<( - RuntimeCall, - ::SignaturePayload, - )> { + ) -> Option { // take the biggest period possible. let period = polymesh_runtime_common::BlockHashCount::get() .checked_next_power_of_two() @@ -612,7 +616,8 @@ macro_rules! misc_pallet_impls { let signature = raw_payload.using_encoded(|payload| C::sign(payload, public))?; let address = Indices::unlookup(account); let (call, extra, _) = raw_payload.deconstruct(); - Some((call, (address, signature, extra))) + let transaction = UncheckedExtrinsic::new_signed(call, address, signature, extra); + Some(transaction) } } @@ -621,12 +626,12 @@ macro_rules! misc_pallet_impls { type Signature = polymesh_primitives::Signature; } - impl frame_system::offchain::SendTransactionTypes for Runtime + impl frame_system::offchain::CreateTransactionBase for Runtime where RuntimeCall: From, { type Extrinsic = UncheckedExtrinsic; - type OverarchingCall = RuntimeCall; + type RuntimeCall = RuntimeCall; } impl pallet_nft::Config for Runtime { @@ -652,8 +657,6 @@ macro_rules! misc_pallet_impls { type SignedPhase = polymesh_runtime_common::SignedPhaseBench; // The minimum amount of improvement to the solution score in the Signed phase type BetterSignedThreshold = (); - // The minimum amount of improvement to the solution score in the Unsigned phase - type BetterUnsignedThreshold = polymesh_runtime_common::BetterUnsignedThreshold; // The repeat threshold of the offchain worker type OffchainRepeat = polymesh_runtime_common::OffChainRepeat; // The priority of the unsigned transaction submitted in the unsigned-phase @@ -668,18 +671,16 @@ macro_rules! misc_pallet_impls { type SignedMaxRefunds = polymesh_runtime_common::SignedMaxRefunds; // Base reward for a signed solution type SignedRewardBase = polymesh_runtime_common::SignedRewardBase; - // Base deposit for a signed solution - type SignedDepositBase = polymesh_runtime_common::SignedDepositBase; // Per-byte deposit for a signed solution type SignedDepositByte = polymesh_runtime_common::SignedDepositByte; // Per-weight deposit for a signed solution type SignedDepositWeight = (); - // The maximum number of electing voters to put in the snapshot - type MaxElectingVoters = polymesh_runtime_common::MaxElectingVoters; - // The maximum number of electable targets to put in the snapshot - type MaxElectableTargets = polymesh_runtime_common::MaxElectableTargets; // The maximum number of winners that can be elected by this `ElectionProvider` implementation type MaxWinners = polymesh_runtime_common::MaxActiveValidators; + // Base deposit for a signed solution + type SignedDepositBase = polymesh_runtime_common::SignedDepositBase; + /// The maximum number of electing voters and electable targets to put in the snapshot. + type ElectionBounds = polymesh_runtime_common::ElectionBoundsMultiPhase; // Handler for the slashed deposits type SlashHandler = (); // Handler for the rewards @@ -708,11 +709,8 @@ macro_rules! misc_pallet_impls { impl pallet_election_provider_multi_phase::MinerConfig for Runtime { type AccountId = polymesh_primitives::AccountId; - type MaxLength = polymesh_runtime_common::MinerMaxLength; - type MaxWeight = polymesh_runtime_common::MinerMaxWeight; - type Solution = polymesh_runtime_common::NposSolution16; - type MaxVotesPerVoter = - <::DataProvider as frame_election_provider_support::ElectionDataProvider>::MaxVotesPerVoter; + type MaxVotesPerVoter = + <::DataProvider as frame_election_provider_support::ElectionDataProvider>::MaxVotesPerVoter; type MaxWinners = polymesh_runtime_common::MaxActiveValidators; // The unsigned submissions have to respect the weight of the submit_unsigned call, thus their @@ -732,9 +730,10 @@ macro_rules! misc_pallet_impls { #[macro_export] macro_rules! runtime_apis { ($($extra:item)*) => { - use frame_support::dispatch::{GetStorageVersion, DispatchError}; + use frame_support::pallet_prelude::DispatchError; + use frame_support::traits::GetStorageVersion; use sp_inherents::{CheckInherentsResult, InherentData}; - use frame_support::dispatch::result::Result as FrameResult; + use frame_support::dispatch::DispatchResult; use node_rpc_runtime_api::asset as rpc_api_asset; use pallet_identity::types::{AssetDidResult, CddStatus, RpcDidRecords}; @@ -970,7 +969,7 @@ macro_rules! runtime_apis { gas_limit: Option, storage_deposit_limit: Option, input_data: Vec, - ) -> pallet_contracts_primitives::ContractExecResult { + ) -> pallet_contracts::ContractExecResult { let gas_limit = gas_limit.unwrap_or(polymesh_runtime_common::RuntimeBlockWeights::get().max_block); Contracts::bare_call( origin, @@ -990,10 +989,10 @@ macro_rules! runtime_apis { value: Balance, gas_limit: Option, storage_deposit_limit: Option, - code: pallet_contracts_primitives::Code, + code: pallet_contracts::Code, data: Vec, salt: Vec, - ) -> pallet_contracts_primitives::ContractInstantiateResult { + ) -> pallet_contracts::ContractInstantiateResult { let gas_limit = gas_limit.unwrap_or(polymesh_runtime_common::RuntimeBlockWeights::get().max_block); Contracts::bare_instantiate( origin, @@ -1013,14 +1012,14 @@ macro_rules! runtime_apis { code: Vec, storage_deposit_limit: Option, determinism: pallet_contracts::Determinism, - ) -> pallet_contracts_primitives::CodeUploadResult { + ) -> pallet_contracts::CodeUploadResult { Contracts::bare_upload_code(origin, code, storage_deposit_limit, determinism) } fn get_storage( address: polymesh_primitives::AccountId, key: Vec, - ) -> pallet_contracts_primitives::GetStorageResult { + ) -> pallet_contracts::GetStorageResult { Contracts::get_storage(address, key) } } @@ -1238,7 +1237,7 @@ macro_rules! runtime_apis { asset_id: &AssetId, sender_identity: &IdentityId, receiver_identity: &IdentityId, - ) -> FrameResult { + ) -> DispatchResult { let mut weight_meter = WeightMeter::max_limit_no_minimum(); ComplianceManager::compliance_report( asset_id, @@ -1256,7 +1255,7 @@ macro_rules! runtime_apis { sender_did: &IdentityId, receiver_did: &IdentityId, transfer_amount: Balance, - ) -> FrameResult, DispatchError> { + ) -> DispatchResult> { let mut weight_meter = WeightMeter::max_limit_no_minimum(); Statistics::transfer_restrictions_report( asset_id, diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index e4a2d4273b..3e182e5e96 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -88,7 +88,6 @@ parameter_types! { pub const MaxHolds: u32 = 32; pub const MaxFreezes: u32 = 32; - // Timestamp: pub const MinimumPeriod: Moment = SLOT_DURATION / 2; @@ -507,6 +506,5 @@ impl frame_election_provider_support::onchain::Config for OnChainSeqPhragmen { type DataProvider = ::DataProvider; type WeightInfo = frame_election_provider_support::weights::SubstrateWeight; type MaxWinners = ::MaxWinners; - type VotersBound = polymesh_runtime_common::MaxOnChainElectingVoters; - type TargetsBound = polymesh_runtime_common::MaxOnChainElectableTargets; + type Bounds = polymesh_runtime_common::ElectionBoundsOnChain; } From 8285997fdbb2ceed696a2f03e5d087a06b361803 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 11 Aug 2025 13:20:56 -0300 Subject: [PATCH 46/97] Fix compilation errors - part IV --- pallets/common/src/traits/identity.rs | 8 +- pallets/contracts/src/lib.rs | 3 +- pallets/pips/src/types.rs | 4 +- pallets/runtime/common/src/lib.rs | 17 +++- pallets/runtime/common/src/runtime.rs | 127 +++++++++++++++++-------- pallets/runtime/develop/src/runtime.rs | 4 +- pallets/sto/src/lib.rs | 6 +- pallets/utility/src/lib.rs | 5 +- primitives/src/asset_metadata.rs | 6 +- primitives/src/authorization.rs | 6 +- primitives/src/lib.rs | 24 +---- primitives/src/secondary_key.rs | 20 +--- primitives/src/settlement.rs | 2 +- primitives/src/sto.rs | 15 +-- 14 files changed, 137 insertions(+), 110 deletions(-) diff --git a/pallets/common/src/traits/identity.rs b/pallets/common/src/traits/identity.rs index 0339de0932..739b7a71b0 100644 --- a/pallets/common/src/traits/identity.rs +++ b/pallets/common/src/traits/identity.rs @@ -2,7 +2,7 @@ // This file is part of the Polymesh distribution (https://github.com/PolymeshAssociation/Polymesh). // Copyright (c) Polymesh Association -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use polymesh_primitives::{secondary_key::SecondaryKey, IdentityId}; use scale_info::TypeInfo; use sp_core::H512; @@ -31,7 +31,8 @@ pub struct TargetIdAuthorization { /// to an identity. /// /// `auth_signature` is the signature, generated by secondary key, of `TargetIdAuthorization`. -#[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] +#[derive(Clone, Debug, Eq, PartialEq)] pub struct SecondaryKeyWithAuth { /// Secondary key to be added. pub secondary_key: SecondaryKey, @@ -42,7 +43,8 @@ pub struct SecondaryKeyWithAuth { /// Create a child identity using `key` as the primary key of the new child identity. /// /// The `key` needs to sign (off-chain) an authorization. -#[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] +#[derive(Clone, Debug, Eq, PartialEq)] pub struct CreateChildIdentityWithAuth { /// The key to be used as the primary key of a new child identity. pub key: AccountId, diff --git a/pallets/contracts/src/lib.rs b/pallets/contracts/src/lib.rs index 37fe053be7..67be269bc1 100644 --- a/pallets/contracts/src/lib.rs +++ b/pallets/contracts/src/lib.rs @@ -142,7 +142,8 @@ impl ChainVersion { } } -#[derive(Clone, Decode, Encode, MaxEncodedLen, Eq, PartialEq, TypeInfo)] +#[derive(Clone, Decode, DecodeWithMemTracking, Encode, Eq)] +#[derive(MaxEncodedLen, PartialEq, TypeInfo)] #[scale_info(skip_type_params(T))] pub struct NextUpgrade { pub chain_version: ChainVersion, diff --git a/pallets/pips/src/types.rs b/pallets/pips/src/types.rs index f5c961d3a5..68e32a8702 100644 --- a/pallets/pips/src/types.rs +++ b/pallets/pips/src/types.rs @@ -106,7 +106,7 @@ pub enum ProposalData { } /// The various sorts of committees that can make a PIP. -#[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Debug, Eq, PartialEq)] pub enum Committee { /// The technical committee. @@ -116,7 +116,7 @@ pub enum Committee { } /// The proposer of a certain PIP. -#[derive(Decode, Encode, TypeInfo, MaxEncodedLen)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Debug, Eq, PartialEq)] pub enum Proposer { /// The proposer is of the community. diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index 2111f4e86d..f007f9f329 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -36,7 +36,7 @@ pub use frame_support::weights::{ use frame_system::limits::{BlockLength, BlockWeights}; use smallvec::smallvec; pub use sp_runtime::transaction_validity::TransactionPriority; -pub use sp_runtime::{Perbill, Permill}; +pub use sp_runtime::{Perbill, Permill, Percent}; pub use impls::Author; use pallet_balances as balances; @@ -142,6 +142,7 @@ parameter_types! { pub MaxUnlockingChunks: u32 = 32; pub MaxValidatorPerIdentity: Permill = Permill::from_percent(33); pub MaxControllersInDeprecationBatch: u32 = 100; + pub MaxTransientStorageSize: u32 = 1_048_576; // 1 MiB // Multi-phase election parameters // Signed phase @@ -151,7 +152,8 @@ parameter_types! { pub const SignedMaxWeight: Weight = Weight::zero(); pub const SignedMaxRefunds: u32 = 0; pub const SignedRewardBase: Balance = 0; - pub const SignedDepositBase: Balance = 0; + pub const SignedFixedDeposit: Balance = 0; + pub const SignedDepositIncreaseFactor: Percent = Percent::from_percent(0); pub const SignedDepositByte: Balance = 0; pub const MultiPhaseUnsignedPriority: TransactionPriority = TransactionPriority::max_value() / 2 - 1u64; // Fallback parameters @@ -173,8 +175,19 @@ parameter_types! { .get(DispatchClass::Normal) .max_extrinsic.expect("Normal extrinsics have a weight limit configured; qed") .saturating_sub(BlockExecutionWeight::get()); + pub MaxElectingVotersSolution: u32 = 40_000; } +frame_election_provider_support::generate_solution_type!( + #[compact] + pub struct NposSolution16::< + VoterIndex = u32, + TargetIndex = u16, + Accuracy = sp_runtime::PerU16, + MaxVoters = MaxElectingVotersSolution, + >(16) +); + /// Converts Weight to Fee pub struct WeightToFee; diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index af8eb81c83..f25442aafd 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -43,36 +43,32 @@ macro_rules! misc_pallet_impls { type RuntimeBaseCallFilter = frame_support::traits::Everything; impl frame_system::Config for Runtime { + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; /// The basic call filter to use in dispatchable. type BaseCallFilter = RuntimeBaseCallFilter; /// Block & extrinsics weights: base values and limits. type BlockWeights = polymesh_runtime_common::RuntimeBlockWeights; /// The maximum length of a block (in bytes). type BlockLength = polymesh_runtime_common::RuntimeBlockLength; - /// The designated SS85 prefix of this chain. - /// - /// This replaces the "ss58Format" property declared in the chain spec. Reason is - /// that the runtime should know about the prefix in order to make use of it as - /// an identifier of the chain. - type SS58Prefix = SS58Prefix; - /// The identifier used to distinguish between accounts. - type AccountId = polymesh_primitives::AccountId; + /// The ubiquitous origin type. + type RuntimeOrigin = RuntimeOrigin; /// The aggregated dispatch type that is available for extrinsics. type RuntimeCall = RuntimeCall; - /// The lookup mechanism to get account ID from whatever is passed in dispatchers. - type Lookup = Indices; + /// The aggregated `RuntimeTask` type. + type RuntimeTask = (); /// The nonce type for storing how many extrinsics an account has signed. type Nonce = polymesh_primitives::Nonce; /// The type for hashing blocks and tries. type Hash = polymesh_primitives::Hash; /// The hashing algorithm used. type Hashing = sp_runtime::traits::BlakeTwo256; + /// The identifier used to distinguish between accounts. + type AccountId = polymesh_primitives::AccountId; + /// The lookup mechanism to get account ID from whatever is passed in dispatchers. + type Lookup = Indices; /// The block type. type Block = Block; - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - /// The ubiquitous origin type. - type RuntimeOrigin = RuntimeOrigin; /// Maximum number of block number to block hash mappings to keep (oldest pruned first). type BlockHashCount = polymesh_runtime_common::BlockHashCount; /// The weight of database operations that the runtime can invoke. @@ -83,15 +79,36 @@ macro_rules! misc_pallet_impls { /// /// This type is being generated by `construct_runtime!`. type PalletInfo = PalletInfo; + /// The data to be stored in an account. + type AccountData = pallet_balances::AccountData; /// What to do if a new account is created. type OnNewAccount = (); /// What to do if an account is fully reaped from the system. type OnKilledAccount = (); - /// The data to be stored in an account. - type AccountData = pallet_balances::AccountData; type SystemWeightInfo = polymesh_weights::frame_system::SubstrateWeight; + type ExtensionsWeightInfo = (); + /// The designated SS85 prefix of this chain. + /// + /// This replaces the "ss58Format" property declared in the chain spec. Reason is + /// that the runtime should know about the prefix in order to make use of it as + /// an identifier of the chain. + type SS58Prefix = SS58Prefix; + /// What to do if the runtime wants to change the code to something new. + /// + /// The default (`()`) implementation is responsible for setting the correct storage + /// entry and emitting corresponding event and log item. (see + /// [`Pallet::update_code_in_storage`]). + /// It's unlikely that this needs to be customized, unless you are writing a parachain using + /// `Cumulus`, where the actual code change is deferred. type OnSetCode = (); + /// The maximum number of consumers allowed on a single account. type MaxConsumers = frame_support::traits::ConstU32<16>; + /// The set code logic, just the default since we're not a parachain. + type SingleBlockMigrations = (); + type MultiBlockMigrator = (); + type PreInherents = (); + type PostInherents = (); + type PostTransactions = (); } impl pallet_base::Config for Runtime { @@ -164,7 +181,7 @@ macro_rules! misc_pallet_impls { impl pallet_balances::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type RuntimeHoldReason = [u8; 32]; + type RuntimeHoldReason = RuntimeHoldReason; type RuntimeFreezeReason = (); type WeightInfo = polymesh_weights::pallet_balances::SubstrateWeight; type Balance = Balance; @@ -179,6 +196,7 @@ macro_rules! misc_pallet_impls { type MaxLocks = MaxLocks; type MaxReserves = MaxReserves; type DoneSlashHandler = (); + type MaxFreezes = frame_support::traits::VariantCountOf; type Memo = polymesh_primitives::Memo; } @@ -221,6 +239,7 @@ macro_rules! misc_pallet_impls { type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; + type DisablingStrategy = (); type WeightInfo = polymesh_weights::pallet_session::SubstrateWeight; } @@ -235,13 +254,13 @@ macro_rules! misc_pallet_impls { impl pallet_staking::Config for Runtime { type OldCurrency = Balances; type Currency = Balances; - type RuntimeHoldReason = [u8; 32]; + type RuntimeHoldReason = RuntimeHoldReason; type CurrencyBalance = Balance; type UnixTime = Timestamp; type CurrencyToVote = sp_staking::currency_to_vote::U128CurrencyToVote; type ElectionProvider = ElectionProviderMultiPhase; type GenesisElectionProvider = Self::ElectionProvider; - type NominationsQuota = polymesh_runtime_common::MaxNominations; + type NominationsQuota = pallet_staking::FixedNominationsQuota<16>; type HistoryDepth = polymesh_runtime_common::HistoryDepth; type RewardRemainder = (); type RuntimeEvent = RuntimeEvent; @@ -405,40 +424,42 @@ macro_rules! misc_pallet_impls { type Currency = Balances; type RuntimeEvent = RuntimeEvent; type RuntimeCall = RuntimeCall; + type RuntimeHoldReason = RuntimeHoldReason; // The `CallFilter` ends up being used in `ext.call_runtime()`, // via the `seal_call_runtime` feature, // which won't swap the current identity, // so we need `Nothing` to basically disable that feature. type CallFilter = frame_support::traits::Nothing; - type DepositPerItem = polymesh_runtime_common::DepositPerItem; - type DepositPerByte = polymesh_runtime_common::DepositPerByte; - type DefaultDepositLimit = polymesh_runtime_common::DefaultDepositLimit; - type CallStack = [pallet_contracts::Frame; 5]; type WeightPrice = pallet_transaction_payment::Pallet; type WeightInfo = polymesh_weights::pallet_contracts::SubstrateWeight; type ChainExtension = polymesh_contracts::PolymeshExtension; type Schedule = Schedule; + type CallStack = [pallet_contracts::Frame; 5]; + type DepositPerByte = polymesh_runtime_common::DepositPerByte; + type DefaultDepositLimit = polymesh_runtime_common::DefaultDepositLimit; + type DepositPerItem = polymesh_runtime_common::DepositPerItem; + type CodeHashLockupDepositPercent = polymesh_runtime_common::CodeHashLockupDepositPercent; type AddressGenerator = pallet_contracts::DefaultAddressGenerator; - #[cfg(not(feature = "runtime-benchmarks"))] - type PolymeshHooks = polymesh_contracts::ContractPolymeshHooks; - #[cfg(feature = "runtime-benchmarks")] - type PolymeshHooks = polymesh_contracts::benchmarking::BenchmarkContractPolymeshHooks; type MaxCodeLen = frame_support::traits::ConstU32<{ 123 * 1024 }>; type MaxStorageKeyLen = frame_support::traits::ConstU32<128>; + type MaxTransientStorageSize = polymesh_runtime_common::MaxTransientStorageSize; + type MaxDelegateDependencies = frame_support::traits::ConstU32<32>; type UnsafeUnstableInterface = frame_support::traits::ConstBool; type MaxDebugBufferLen = frame_support::traits::ConstU32<{ 2 * 1024 * 1024 }>; + type UploadOrigin = frame_system::EnsureSigned; + type InstantiateOrigin = frame_system::EnsureSigned; #[cfg(not(feature = "runtime-benchmarks"))] - type Migrations = ( - // Migration v9 -> v10 has already been run. - pallet_contracts::migration::NoopMigration<10>, - pallet_contracts::migration::v11::Migration, - pallet_contracts::migration::v12::Migration, - pallet_contracts::migration::v13::Migration, - ); + type Migrations = (); #[cfg(feature = "runtime-benchmarks")] type Migrations = pallet_contracts::migration::codegen::BenchMigrations; - type MaxDelegateDependencies = frame_support::traits::ConstU32<32>; - type CodeHashLockupDepositPercent = polymesh_runtime_common::CodeHashLockupDepositPercent; + type Debug = (); + type Environment = (); + type ApiVersion = (); + type Xcm = (); + #[cfg(not(feature = "runtime-benchmarks"))] + type PolymeshHooks = polymesh_contracts::ContractPolymeshHooks; + #[cfg(feature = "runtime-benchmarks")] + type PolymeshHooks = polymesh_contracts::benchmarking::BenchmarkContractPolymeshHooks; } impl pallet_compliance_manager::Config for Runtime { @@ -479,8 +500,8 @@ macro_rules! misc_pallet_impls { } impl pallet_scheduler::Config for Runtime { - type RuntimeEvent = RuntimeEvent; type RuntimeOrigin = RuntimeOrigin; + type RuntimeEvent = RuntimeEvent; type PalletsOrigin = OriginCaller; type RuntimeCall = RuntimeCall; type MaximumWeight = MaximumSchedulerWeight; @@ -489,6 +510,7 @@ macro_rules! misc_pallet_impls { type WeightInfo = polymesh_weights::pallet_scheduler::SubstrateWeight; type OriginPrivilegeCmp = frame_support::traits::EqualPrivilegeOnly; type Preimages = Preimage; + type BlockNumberProvider = frame_system::Pallet; } parameter_types! { @@ -634,6 +656,15 @@ macro_rules! misc_pallet_impls { type RuntimeCall = RuntimeCall; } + impl frame_system::offchain::CreateInherent for Runtime + where + RuntimeCall: From, + { + fn create_inherent(call: RuntimeCall) -> UncheckedExtrinsic { + UncheckedExtrinsic::new_bare(call) + } + } + impl pallet_nft::Config for Runtime { type RuntimeEvent = RuntimeEvent; type WeightInfo = polymesh_weights::pallet_nft::SubstrateWeight; @@ -678,7 +709,8 @@ macro_rules! misc_pallet_impls { // The maximum number of winners that can be elected by this `ElectionProvider` implementation type MaxWinners = polymesh_runtime_common::MaxActiveValidators; // Base deposit for a signed solution - type SignedDepositBase = polymesh_runtime_common::SignedDepositBase; + type SignedDepositBase = + pallet_election_provider_multi_phase::GeometricDepositBase; /// The maximum number of electing voters and electable targets to put in the snapshot. type ElectionBounds = polymesh_runtime_common::ElectionBoundsMultiPhase; // Handler for the slashed deposits @@ -709,6 +741,9 @@ macro_rules! misc_pallet_impls { impl pallet_election_provider_multi_phase::MinerConfig for Runtime { type AccountId = polymesh_primitives::AccountId; + type MaxLength = polymesh_runtime_common::MinerMaxLength; + type MaxWeight = polymesh_runtime_common::MinerMaxWeight; + type Solution = polymesh_runtime_common::NposSolution16; type MaxVotesPerVoter = <::DataProvider as frame_election_provider_support::ElectionDataProvider>::MaxVotesPerVoter; type MaxWinners = polymesh_runtime_common::MaxActiveValidators; @@ -804,7 +839,7 @@ macro_rules! runtime_apis { Executive::execute_block(block) } - fn initialize_block(header: &::Header) { + fn initialize_block(header: &::Header) -> sp_runtime::ExtrinsicInclusionMode { Executive::initialize_block(header) } } @@ -1063,10 +1098,18 @@ macro_rules! runtime_apis { } } - impl pallet_staking_runtime_api::StakingApi for Runtime { + impl pallet_staking_runtime_api::StakingApi for Runtime { fn nominations_quota(balance: Balance) -> u32 { Staking::api_nominations_quota(balance) } + + fn eras_stakers_page_count(era: sp_staking::EraIndex, account: polymesh_primitives::AccountId) -> sp_staking::Page { + Staking::api_eras_stakers_page_count(era, account) + } + + fn pending_rewards(era: sp_staking::EraIndex, account: polymesh_primitives::AccountId) -> bool { + Staking::api_pending_rewards(era, account) + } } impl node_rpc_runtime_api::pips::PipsApi @@ -1237,7 +1280,7 @@ macro_rules! runtime_apis { asset_id: &AssetId, sender_identity: &IdentityId, receiver_identity: &IdentityId, - ) -> DispatchResult { + ) -> Result { let mut weight_meter = WeightMeter::max_limit_no_minimum(); ComplianceManager::compliance_report( asset_id, @@ -1255,7 +1298,7 @@ macro_rules! runtime_apis { sender_did: &IdentityId, receiver_did: &IdentityId, transfer_amount: Balance, - ) -> DispatchResult> { + ) -> Result, DispatchError> { let mut weight_meter = WeightMeter::max_limit_no_minimum(); Statistics::transfer_restrictions_report( asset_id, diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index 3e182e5e96..2150542452 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -60,7 +60,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, - state_version: 1, + system_version: 1, }; parameter_types! { @@ -391,7 +391,7 @@ construct_runtime!( Offences: pallet_offences::{Pallet, Storage, Event} = 18, // Session: Genesis config deps: System. - Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 19, + Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 19, AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, Historical: pallet_session_historical::{Pallet} = 22, diff --git a/pallets/sto/src/lib.rs b/pallets/sto/src/lib.rs index b63a6f2e44..96847db4df 100644 --- a/pallets/sto/src/lib.rs +++ b/pallets/sto/src/lib.rs @@ -103,7 +103,7 @@ pub enum FundraiserStatus { } /// Funding method. On-chain asset or off-chain receipt. -#[derive(Encode, Decode, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] #[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] #[cfg_attr(feature = "std", derive(Debug))] pub enum FundingMethod { @@ -130,7 +130,7 @@ pub enum FundingAsset { } /// Details about the Fundraiser. -#[derive(Encode, Decode, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct Fundraiser { /// The permissioned agent that created the `Fundraiser`. @@ -177,7 +177,7 @@ pub struct PriceTier { /// Single price tier of a `Fundraiser`. /// Similar to a `PriceTier` but with an extra field `remaining` for tracking the amount available for purchase in a tier. -#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)] +#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, MaxEncodedLen)] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct FundraiserTier { /// Total amount available. diff --git a/pallets/utility/src/lib.rs b/pallets/utility/src/lib.rs index 724ccde9c1..0fd863e25a 100644 --- a/pallets/utility/src/lib.rs +++ b/pallets/utility/src/lib.rs @@ -68,7 +68,7 @@ mod benchmarking; -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::dispatch::DispatchClass; use frame_support::dispatch::{extract_actual_weight, GetDispatchInfo, PostDispatchInfo}; use frame_support::dispatch::{DispatchErrorWithPostInfo, DispatchResultWithPostInfo}; @@ -117,7 +117,8 @@ pub type ErrorAt = (u32, DispatchError); /// Wraps a `Call` and provides uniqueness through a nonce /// POLYMESH: used for `relay_tx` -#[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo)] +#[derive(Clone, Eq, PartialEq, RuntimeDebug, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode)] pub struct UniqueCall { nonce: AuthorizationNonce, call: Box, diff --git a/primitives/src/asset_metadata.rs b/primitives/src/asset_metadata.rs index fbd9fa9f3e..1bc68419c3 100644 --- a/primitives/src/asset_metadata.rs +++ b/primitives/src/asset_metadata.rs @@ -69,8 +69,8 @@ impl From for AssetMetadataKey { pub struct AssetMetadataValue(pub Vec); /// Asset Metadata Value details. -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] -#[derive(Clone, Debug, Default, PartialEq, Eq)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Clone, Debug, Default, Eq, PartialEq)] pub struct AssetMetadataValueDetail { /// Optional expire date for the value. pub expire: Option, @@ -94,7 +94,7 @@ impl AssetMetadataValueDetail { } /// Asset Metadata Lock Status -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] +#[derive(Encode, Decode, DecodeWithMemTracking, MaxEncodedLen, TypeInfo)] #[derive(Clone, Debug, PartialEq, Eq)] pub enum AssetMetadataLockStatus { /// Can be changed by asset issuer. diff --git a/primitives/src/authorization.rs b/primitives/src/authorization.rs index e2d3e5b01f..2b5e8e9074 100644 --- a/primitives/src/authorization.rs +++ b/primitives/src/authorization.rs @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use codec::{Decode, Encode}; +use codec::{Decode, DecodeWithMemTracking, Encode}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_std::prelude::*; @@ -25,8 +25,8 @@ use crate::secondary_key::Permissions; use crate::{Balance, PortfolioId, Ticker}; /// Authorization data for two step processes. -#[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, PartialOrd, Ord)] -#[derive(Serialize, Deserialize)] +#[derive(Decode, DecodeWithMemTracking, Encode, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Clone, Debug, Deserialize, TypeInfo, Serialize)] pub enum AuthorizationData { /// CDD provider's attestation to change primary key AttestPrimaryKeyRotation(IdentityId), diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index 7917cb3620..6b6ec4885f 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -84,31 +84,16 @@ impl Get for ConstSize { impl GetExtra for ConstSize {} /// Either a block number, or nothing. -#[derive( - Copy, - Clone, - PartialEq, - Eq, - Encode, - Decode, - MaxEncodedLen, - TypeInfo, - Debug -)] -#[derive(Serialize, Deserialize)] +#[derive(Clone, Copy, Debug, Default, Deserialize, MaxEncodedLen, Serialize)] +#[derive(Decode, DecodeWithMemTracking, Encode, Eq, PartialEq, TypeInfo)] pub enum MaybeBlock { /// Has a block number. Some(BlockNumber), /// No block number. + #[default] None, } -impl Default for MaybeBlock { - fn default() -> Self { - Self::None - } -} - impl> Add for MaybeBlock { type Output = Self; fn add(self, rhs: T) -> Self::Output { @@ -327,7 +312,8 @@ pub enum TransactionError { } /// Represents the target identity and the amount requested by a beneficiary. -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo, Clone, PartialEq, Eq, Debug)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] +#[derive(Clone, Debug, Eq, PartialEq)] pub struct Beneficiary { /// Beneficiary identity. pub id: IdentityId, diff --git a/primitives/src/secondary_key.rs b/primitives/src/secondary_key.rs index f84dde1abd..82fcfccd29 100644 --- a/primitives/src/secondary_key.rs +++ b/primitives/src/secondary_key.rs @@ -338,18 +338,8 @@ impl KeyRecord { /// It supports different elements as a signer. #[allow(missing_docs)] -#[derive( - Encode, - Decode, - MaxEncodedLen, - Copy, - Clone, - PartialEq, - Eq, - Debug, - TypeInfo -)] -#[derive(Serialize, Deserialize)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, PartialEq)] +#[derive(Clone, Copy, Debug, Eq, Deserialize, Serialize, TypeInfo)] pub enum Signatory { #[serde(alias = "identity")] Identity(IdentityId), @@ -436,9 +426,9 @@ where } /// A secondary key and its permissions. -#[derive(Encode, Decode, TypeInfo)] -#[derive(Clone, Debug, PartialEq, Eq)] -#[derive(Serialize, Deserialize)] +#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] +#[derive(Clone, Debug, Eq, PartialEq)] +#[derive(Deserialize, Serialize)] pub struct SecondaryKey { /// The account key. pub key: AccountId, diff --git a/primitives/src/settlement.rs b/primitives/src/settlement.rs index 974e4d08af..350bc28bdc 100644 --- a/primitives/src/settlement.rs +++ b/primitives/src/settlement.rs @@ -103,7 +103,7 @@ pub enum AffirmationStatus { } /// Type of settlement -#[derive(Encode, Decode, MaxEncodedLen, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, TypeInfo)] #[derive(Copy, Clone, Debug, Default, Eq, Ord, PartialEq, PartialOrd)] pub enum SettlementType { /// Instruction should be settled in the next block as soon as all affirmations are received. diff --git a/primitives/src/sto.rs b/primitives/src/sto.rs index 7d6e4a90b2..bf39dccd2c 100644 --- a/primitives/src/sto.rs +++ b/primitives/src/sto.rs @@ -15,6 +15,7 @@ use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; +use serde::de; use crate::settlement::ReceiptMetadata; use crate::{impl_checked_inc, IdentityId, Ticker}; @@ -74,18 +75,8 @@ impl FundraiserReceipt { } /// Details about an offchain transaction receipt. -#[derive( - Encode, - Decode, - MaxEncodedLen, - TypeInfo, - Clone, - PartialEq, - Eq, - Debug, - PartialOrd, - Ord -)] +#[derive(Decode, DecodeWithMemTracking, Encode, Ord, PartialOrd)] +#[derive(Clone, Debug, Eq, MaxEncodedLen, PartialEq, TypeInfo)] pub struct FundraiserReceiptDetails { /// Unique receipt number set by the signer for their receipts pub uid: u64, From c5ce86d7aa08293e37983e7e6c022a7b944d5eb7 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 12 Aug 2025 19:19:06 -0300 Subject: [PATCH 47/97] Fix compilation errors - Tx payment --- pallets/permissions/src/lib.rs | 79 +- pallets/runtime/common/src/lib.rs | 55 +- pallets/runtime/common/src/runtime.rs | 10 +- pallets/transaction-payment/Cargo.toml | 1 + pallets/transaction-payment/src/lib.rs | 688 ++++++++++-------- pallets/transaction-payment/src/payment.rs | 194 ++--- pallets/transaction-payment/src/types.rs | 14 +- pallets/weights/src/lib.rs | 1 + .../weights/src/pallet_transaction_payment.rs | 63 ++ primitives/src/sto.rs | 1 - 10 files changed, 637 insertions(+), 469 deletions(-) create mode 100644 pallets/weights/src/pallet_transaction_payment.rs diff --git a/pallets/permissions/src/lib.rs b/pallets/permissions/src/lib.rs index 7ed62d3c50..529984b14b 100644 --- a/pallets/permissions/src/lib.rs +++ b/pallets/permissions/src/lib.rs @@ -28,13 +28,12 @@ pub mod benchmarking; use codec::{Decode, DecodeWithMemTracking, Encode}; use core::mem; use frame_support::dispatch::DispatchResult; +use frame_support::dispatch::{DispatchInfo, PostDispatchInfo}; use frame_support::pallet_prelude::*; -use frame_support::traits::{CallMetadata, GetCallMetadata}; +use frame_support::traits::CallMetadata; use scale_info::TypeInfo; -use sp_runtime::traits::{DispatchInfoOf, PostDispatchInfoOf, SignedExtension}; -use sp_runtime::transaction_validity::{ - TransactionValidity, TransactionValidityError, ValidTransaction, -}; +use sp_runtime::traits::{DispatchInfoOf, Dispatchable, PostDispatchInfoOf, TransactionExtension}; +use sp_runtime::transaction_validity::{TransactionValidityError, ValidTransaction}; use sp_std::marker::PhantomData; use sp_std::result::Result; use sp_std::{fmt, vec}; @@ -155,9 +154,9 @@ pub mod pallet { #[derive(Decode, DecodeWithMemTracking, Encode)] #[derive(Clone, Default, Eq, PartialEq, TypeInfo)] #[scale_info(skip_type_params(T))] -pub struct StoreCallMetadata(PhantomData); +pub struct StoreCallMetadata(PhantomData); -impl fmt::Debug for StoreCallMetadata { +impl fmt::Debug for StoreCallMetadata { #[cfg(feature = "std")] fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "StoreCallMetadata<{:?}>", self.0) @@ -169,7 +168,7 @@ impl fmt::Debug for StoreCallMetadata { } } -impl StoreCallMetadata { +impl StoreCallMetadata { /// Constructs a new store for call metadata. pub fn new() -> Self { Self(Default::default()) @@ -188,52 +187,58 @@ impl StoreCallMetadata { } } -impl SignedExtension for StoreCallMetadata +impl TransactionExtension for StoreCallMetadata where - T: Config + Send + Sync, - ::RuntimeCall: GetCallMetadata, + T::RuntimeCall: Dispatchable, { const IDENTIFIER: &'static str = "StoreCallMetadata"; - type AccountId = T::AccountId; - type Call = ::RuntimeCall; - type AdditionalSigned = (); + type Implicit = (); + type Val = (); type Pre = (); - fn additional_signed(&self) -> Result<(), TransactionValidityError> { - Ok(()) + fn weight(&self, _: &T::RuntimeCall) -> Weight { + unimplemented!() } fn validate( &self, - _: &Self::AccountId, - _: &Self::Call, - _: &DispatchInfoOf, - _: usize, - ) -> TransactionValidity { - Ok(ValidTransaction::default()) + _origin: ::RuntimeOrigin, + _call: &T::RuntimeCall, + _info: &DispatchInfoOf, + _len: usize, + _: (), + _implication: &impl Encode, + _source: TransactionSource, + ) -> Result< + ( + ValidTransaction, + Self::Val, + ::RuntimeOrigin, + ), + TransactionValidityError, + > { + unimplemented!() } - fn pre_dispatch( + fn prepare( self, - _: &Self::AccountId, - call: &Self::Call, - _: &DispatchInfoOf, - _: usize, + _val: Self::Val, + _origin: &::RuntimeOrigin, + _call: &T::RuntimeCall, + _info: &DispatchInfoOf, + _len: usize, ) -> Result { - let metadata = call.get_call_metadata(); - Self::set_call_metadata(metadata.pallet_name.into(), metadata.function_name.into()); - Ok(()) + unimplemented!() } fn post_dispatch( - _: Option, - _: &DispatchInfoOf, - _: &PostDispatchInfoOf, - _: usize, - _: &DispatchResult, + _pre: Self::Pre, + _info: &DispatchInfoOf, + _post_info: &mut PostDispatchInfoOf, + _len: usize, + _result: &DispatchResult, ) -> Result<(), TransactionValidityError> { - Self::clear_call_metadata(); - Ok(()) + unimplemented!() } } diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index f007f9f329..ca496b6c48 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -36,7 +36,7 @@ pub use frame_support::weights::{ use frame_system::limits::{BlockLength, BlockWeights}; use smallvec::smallvec; pub use sp_runtime::transaction_validity::TransactionPriority; -pub use sp_runtime::{Perbill, Permill, Percent}; +pub use sp_runtime::{Perbill, Percent, Permill, SaturatedConversion}; pub use impls::Author; use pallet_balances as balances; @@ -86,6 +86,8 @@ parameter_types! { pub const TransactionByteFee: Balance = 10 * MILLICENTS; /// We want the noop transaction to cost 0.03 POLYX pub const PolyXBaseFee: Balance = 3 * CENTS; + /// The multiplier for operational fees. + pub const OperationalFeeMultiplier: u8 = 5; /// The maximum weight of the pips extrinsic `enact_snapshot_results` which equals to /// `MaximumBlockWeight * AvailableBlockRatio`. pub const PipsEnactSnapshotMaximumWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_mul(75).saturating_div(100); @@ -179,40 +181,41 @@ parameter_types! { } frame_election_provider_support::generate_solution_type!( - #[compact] - pub struct NposSolution16::< - VoterIndex = u32, - TargetIndex = u16, - Accuracy = sp_runtime::PerU16, - MaxVoters = MaxElectingVotersSolution, - >(16) + #[compact] + pub struct NposSolution16::< + VoterIndex = u32, + TargetIndex = u16, + Accuracy = sp_runtime::PerU16, + MaxVoters = MaxElectingVotersSolution, + >(16) ); /// Converts Weight to Fee pub struct WeightToFee; -impl WeightToFeePolynomial for WeightToFee { +impl frame_support::weights::WeightToFee for WeightToFee { type Balance = Balance; - /// We want a 0.03 POLYX fee per ExtrinsicBaseWeight. - /// 650_000_000 weight = 30_000 fee => 21_666 weight = 1 fee. - /// Hence, 1 fee = 0 + 1/21_666 weight. - /// This implies, coeff_integer = 0 and coeff_frac = 1/21_666. - fn polynomial() -> WeightToFeeCoefficients { - smallvec![WeightToFeeCoefficient { - degree: 1, - coeff_frac: Perbill::from_rational( - PolyXBaseFee::get(), - ExtrinsicBaseWeight::get().ref_time() as u128 - ), - coeff_integer: 0u128, // Coefficient is zero. - negative: false, - }] + + fn weight_to_fee(weight: &Weight) -> Self::Balance { + let weight_ref_time = weight.ref_time(); + + Self::Balance::saturated_from(weight_ref_time) + .saturating_mul(PolyXBaseFee::get()) + .max(PolyXBaseFee::get()) } } -impl Get>> for WeightToFee { - fn get() -> Vec> { - Self::polynomial().to_vec() +pub struct LengthToFee; + +impl frame_support::weights::WeightToFee for LengthToFee { + type Balance = Balance; + + fn weight_to_fee(weight: &Weight) -> Self::Balance { + let weight_ref_time = weight.ref_time(); + + Self::Balance::saturated_from(weight_ref_time) + .saturating_mul(TransactionByteFee::get()) + .max(TransactionByteFee::get()) } } diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index f25442aafd..c2b85170e2 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -165,18 +165,18 @@ macro_rules! misc_pallet_impls { impl pallet_transaction_payment::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type Currency = Balances; type OnChargeTransaction = - pallet_transaction_payment::CurrencyAdapter; - type TransactionByteFee = polymesh_runtime_common::TransactionByteFee; + pallet_transaction_payment::FungibleAdapter; type WeightToFee = polymesh_runtime_common::WeightToFee; + type LengthToFee = polymesh_runtime_common::LengthToFee; type FeeMultiplierUpdate = (); + type OperationalFeeMultiplier = polymesh_runtime_common::OperationalFeeMultiplier; + type WeightInfo = polymesh_weights::pallet_babe::SubstrateWeight; type CddHandler = CddHandler; type Subsidiser = Relayer; type GovernanceCommittee = PolymeshCommittee; type CddProviders = CddServiceProviders; type Identity = Identity; - type WeightToFeeConst = polymesh_runtime_common::WeightToFee; } impl pallet_balances::Config for Runtime { @@ -709,7 +709,7 @@ macro_rules! misc_pallet_impls { // The maximum number of winners that can be elected by this `ElectionProvider` implementation type MaxWinners = polymesh_runtime_common::MaxActiveValidators; // Base deposit for a signed solution - type SignedDepositBase = + type SignedDepositBase = pallet_election_provider_multi_phase::GeometricDepositBase; /// The maximum number of electing voters and electable targets to put in the snapshot. type ElectionBounds = polymesh_runtime_common::ElectionBoundsMultiPhase; diff --git a/pallets/transaction-payment/Cargo.toml b/pallets/transaction-payment/Cargo.toml index 2ddaaa2505..cd59a9eea0 100644 --- a/pallets/transaction-payment/Cargo.toml +++ b/pallets/transaction-payment/Cargo.toml @@ -29,6 +29,7 @@ serde_json = "1.0.56" default = ["std"] disable_fees = [] no_std = [] +runtime-benchmarks = [] std = [ "serde", "polymesh-primitives/std", diff --git a/pallets/transaction-payment/src/lib.rs b/pallets/transaction-payment/src/lib.rs index 4c7c5c4893..f568654070 100644 --- a/pallets/transaction-payment/src/lib.rs +++ b/pallets/transaction-payment/src/lib.rs @@ -55,36 +55,35 @@ use frame_support::dispatch::{ DispatchClass, DispatchInfo, DispatchResult, GetDispatchInfo, Pays, PostDispatchInfo, }; use frame_support::pallet_prelude::*; -use frame_support::traits::{Currency, Get, GetCallMetadata}; -use frame_support::weights::{Weight, WeightToFee, WeightToFeeCoefficient, WeightToFeePolynomial}; +use frame_support::traits::Get; +use frame_support::weights::{Weight, WeightToFee}; +use frame_support::RuntimeDebugNoBound; use frame_system::pallet_prelude::{BlockNumberFor, OriginFor}; +use scale_info::TypeInfo; use sp_runtime::traits::{ - Convert, DispatchInfoOf, Dispatchable, PostDispatchInfoOf, SaturatedConversion, Saturating, - SignedExtension, Zero, + Convert, DispatchInfoOf, Dispatchable, PostDispatchInfoOf, Saturating, TransactionExtension, + Zero, }; -use sp_runtime::transaction_validity::{ - InvalidTransaction, TransactionPriority, TransactionValidity, TransactionValidityError, - ValidTransaction, +use sp_runtime::transaction_validity::{TransactionValidityError, ValidTransaction}; +use sp_runtime::{ + FixedPointNumber, FixedPointOperand, FixedU128, Perbill, Perquintill, RuntimeDebug, }; -use sp_runtime::{FixedPointNumber, FixedPointOperand, FixedU128, Perquintill, RuntimeDebug}; -use sp_std::prelude::*; use polymesh_primitives::traits::group::GroupTrait; use polymesh_primitives::traits::{CddAndFeeDetails, IdentityFnTrait, SubsidiserTrait}; use polymesh_primitives::TransactionError; -mod payment; -mod types; - pub use pallet::*; -pub use payment::{CurrencyAdapter, OnChargeTransaction}; +pub use payment::*; pub use types::{FeeDetails, InclusionFee, RuntimeDispatchInfo}; +mod payment; +mod types; + /// Fee multiplier. pub type Multiplier = FixedU128; -type BalanceOf = - <::OnChargeTransaction as OnChargeTransaction>::Balance; +type BalanceOf = <::OnChargeTransaction as OnChargeTransaction>::Balance; /// A struct to update the weight multiplier per block. It implements `Convert`, meaning that it can convert the previous multiplier to the next one. This should @@ -92,25 +91,32 @@ type BalanceOf = /// system pallet. /// /// given: -/// s = previous block weight -/// s'= ideal block weight -/// m = maximum block weight -/// diff = (s - s')/m -/// v = 0.00001 -/// t1 = (v * diff) -/// t2 = (v * diff)^2 / 2 -/// then: -/// next_multiplier = prev_multiplier * (1 + t1 + t2) +/// s = previous block weight +/// s'= ideal block weight +/// m = maximum block weight +/// diff = (s - s')/m +/// v = 0.00001 +/// t1 = (v * diff) +/// t2 = (v * diff)^2 / 2 +/// then: +/// next_multiplier = prev_multiplier * (1 + t1 + t2) /// /// Where `(s', v)` must be given as the `Get` implementation of the `T` generic type. Moreover, `M` /// must provide the minimum allowed value for the multiplier. Note that a runtime should ensure /// with tests that the combination of this `M` and `V` is not such that the multiplier can drop to /// zero and never recover. /// -/// note that `s'` is interpreted as a portion in the _normal transaction_ capacity of the block. +/// Note that `s'` is interpreted as a portion in the _normal transaction_ capacity of the block. /// For example, given `s' == 0.25` and `AvailableBlockRatio = 0.75`, then the target fullness is /// _0.25 of the normal capacity_ and _0.1875 of the entire block_. /// +/// Since block weight is multi-dimension, we use the scarcer resource, referred as limiting +/// dimension, for calculation of fees. We determine the limiting dimension by comparing the +/// dimensions using the ratio of `dimension_value / max_dimension_value` and selecting the largest +/// ratio. For instance, if a block is 30% full based on `ref_time` and 25% full based on +/// `proof_size`, we identify `ref_time` as the limiting dimension, indicating that the block is 30% +/// full. +/// /// This implementation implies the bound: /// - `v ≤ p / k * (s − s')` /// - or, solving for `p`: `p >= v * k * (s - s')` @@ -121,8 +127,8 @@ type BalanceOf = /// - in a fully congested chain: `p >= v * k * (1 - s')`. /// - in an empty chain: `p >= v * k * (-s')`. /// -/// For example, when all blocks are full and there are 28800 blocks per day (default in `substrate-node`) -/// and v == 0.00001, s' == 0.1875, we'd have: +/// For example, when all blocks are full and there are 28800 blocks per day (default in +/// `substrate-node`) and v == 0.00001, s' == 0.1875, we'd have: /// /// p >= 0.00001 * 28800 * 0.8125 /// p >= 0.234 @@ -130,7 +136,7 @@ type BalanceOf = /// Meaning that fees can change by around ~23% per day, given extreme congestion. /// /// More info can be found at: -/// +/// pub struct TargetedFeeAdjustment(sp_std::marker::PhantomData<(T, S, V, M, X)>); /// Something that can convert the current multiplier to the next one. @@ -204,20 +210,38 @@ where .get(DispatchClass::Normal) .max_total .unwrap_or(weights.max_block); - let current_block_weight = >::block_weight(); + let current_block_weight = frame_system::Pallet::::block_weight(); let normal_block_weight = current_block_weight .get(DispatchClass::Normal) .min(normal_max_weight); - // TODO: Handle all weight dimensions - let normal_max_weight = normal_max_weight.ref_time(); - let normal_block_weight = normal_block_weight.ref_time(); + // Normalize dimensions so they can be compared. Ensure (defensive) max weight is non-zero. + let normalized_ref_time = Perbill::from_rational( + normal_block_weight.ref_time(), + normal_max_weight.ref_time().max(1), + ); + let normalized_proof_size = Perbill::from_rational( + normal_block_weight.proof_size(), + normal_max_weight.proof_size().max(1), + ); + + // Pick the limiting dimension. If the proof size is the limiting dimension, then the + // multiplier is adjusted by the proof size. Otherwise, it is adjusted by the ref time. + let (normal_limiting_dimension, max_limiting_dimension) = + if normalized_ref_time < normalized_proof_size { + ( + normal_block_weight.proof_size(), + normal_max_weight.proof_size(), + ) + } else { + (normal_block_weight.ref_time(), normal_max_weight.ref_time()) + }; - let s = S::get(); - let v = V::get(); + let target_block_fullness = S::get(); + let adjustment_variable = V::get(); - let target_weight = (s * normal_max_weight) as u128; - let block_weight = normal_block_weight as u128; + let target_weight = (target_block_fullness * max_limiting_dimension) as u128; + let block_weight = normal_limiting_dimension as u128; // determines if the first_term is positive let positive = block_weight >= target_weight; @@ -225,12 +249,13 @@ where // defensive only, a test case assures that the maximum weight diff can fit in Multiplier // without any saturation. - let diff = Multiplier::saturating_from_rational(diff_abs, normal_max_weight.max(1)); + let diff = Multiplier::saturating_from_rational(diff_abs, max_limiting_dimension.max(1)); let diff_squared = diff.saturating_mul(diff); - let v_squared_2 = v.saturating_mul(v) / Multiplier::saturating_from_integer(2); + let v_squared_2 = adjustment_variable.saturating_mul(adjustment_variable) + / Multiplier::saturating_from_integer(2); - let first_term = v.saturating_mul(diff); + let first_term = adjustment_variable.saturating_mul(diff); let second_term = v_squared_2.saturating_mul(diff_squared); if positive { @@ -253,7 +278,7 @@ where } /// A struct to make the fee multiplier a constant -pub struct ConstFeeMultiplier>(sp_std::marker::PhantomData); +pub struct ConstFeeMultiplier>(core::marker::PhantomData); impl> MultiplierUpdate for ConstFeeMultiplier { fn min() -> Multiplier { @@ -282,7 +307,7 @@ where /// Storage releases of the pallet. #[derive(Decode, Encode, TypeInfo)] #[derive(Clone, Copy, Default, Eq, MaxEncodedLen, PartialEq, RuntimeDebug)] -enum Releases { +pub enum Releases { /// Original version of the pallet. #[default] V1Ancient, @@ -304,9 +329,6 @@ pub mod pallet { /// The overarching event type. type RuntimeEvent: From> + IsType<::RuntimeEvent>; - /// The currency type in which fees will be paid. - type Currency: Currency + Send + Sync; - /// Handler for withdrawing, refunding and depositing the transaction fee. /// Transaction fees are withdrawn before the transaction is executed. /// After the transaction was executed the transaction weight can be @@ -315,52 +337,58 @@ pub mod pallet { /// might be refunded. In the end the fees can be deposited. type OnChargeTransaction: OnChargeTransaction; - /// The fee to be paid for making a transaction; the per-byte portion. - #[pallet::constant] - type TransactionByteFee: Get>; - /// Convert a weight value into a deductible fee based on the currency type. - type WeightToFee: WeightToFeePolynomial>; + type WeightToFee: WeightToFee>; + + /// Convert a length value into a deductible fee based on the currency type. + type LengthToFee: WeightToFee>; /// Update the multiplier of the next block, based on the previous block's weight. type FeeMultiplierUpdate: MultiplierUpdate; - // Polymesh note: This was specifically added for Polymesh + /// A fee multiplier for `Operational` extrinsics to compute "virtual tip" to boost their + /// `priority` + /// + /// This value is multiplied by the `final_fee` to obtain a "virtual tip" that is later + /// added to a tip component in regular `priority` calculations. + /// It means that a `Normal` transaction can front-run a similarly-sized `Operational` + /// extrinsic (with no tip), by including a tip value greater than the virtual tip. + /// + /// ```rust,ignore + /// // For `Normal` + /// let priority = priority_calc(tip); + /// + /// // For `Operational` + /// let virtual_tip = (inclusion_fee + tip) * OperationalFeeMultiplier; + /// let priority = priority_calc(tip + virtual_tip); + /// ``` + /// + /// Note that since we use `final_fee` the multiplier applies also to the regular `tip` + /// sent with the transaction. So, not only does the transaction get a priority bump based + /// on the `inclusion_fee`, but we also amplify the impact of tips applied to `Operational` + /// transactions. + #[pallet::constant] + type OperationalFeeMultiplier: Get; + + /// The weight information of this pallet. + type WeightInfo: WeightInfo; + + // Polymesh change + // ----------------------------------------------------------------- + /// Fetch the signatory to charge fee from. Also sets fee payer and identity in context. type CddHandler: CddAndFeeDetails; - // Polymesh note: This was specifically added for Polymesh - /// Connection to the `Relayer` pallet. - /// Used to charge transaction fees to a subsidiser, if any, instead of the payer. + /// Used to charge transaction fees to a subsidiser, instead of the payer. type Subsidiser: SubsidiserTrait; - // Polymesh note: This was specifically added for Polymesh - /// CDD providers group. type CddProviders: GroupTrait; - // Polymesh note: This was specifically added for Polymesh - /// Governance committee. type GovernanceCommittee: GroupTrait; - // Polymesh note: This was specifically added for Polymesh - /// Identity functionality. type Identity: IdentityFnTrait; - /// The polynomial that is applied in order to derive fee from weight. - #[pallet::constant] - type WeightToFeeConst: Get>>>; - } - - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - /// A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee, - /// has been paid by `who`. - TransactionFeePaid { - who: T::AccountId, - actual_fee: BalanceOf, - tip: BalanceOf, - }, + // ----------------------------------------------------------------- } #[pallet::type_value] @@ -369,32 +397,36 @@ pub mod pallet { } #[pallet::storage] - pub type NextFeeMultiplier = + #[pallet::whitelist_storage] + pub type NextFeeMultiplier = StorageValue<_, Multiplier, ValueQuery, NextFeeMultiplierOnEmpty>; - #[cfg(feature = "disable_fees")] #[pallet::storage] - pub type DisableFees = StorageValue<_, bool, ValueQuery>; + pub type StorageVersion = StorageValue<_, Releases, ValueQuery>; + // Polymesh change + // ----------------------------------------------------------------- + #[cfg(feature = "disable_fees")] #[pallet::storage] - pub(super) type StorageVersion = StorageValue<_, Releases, ValueQuery>; + pub type DisableFees = StorageValue<_, bool, ValueQuery>; + // ----------------------------------------------------------------- #[pallet::genesis_config] - pub struct GenesisConfig { + pub struct GenesisConfig { pub multiplier: Multiplier, + #[serde(skip)] + pub _config: core::marker::PhantomData, #[cfg(feature = "disable_fees")] pub disable_fees: bool, - #[serde(skip)] - pub _config: sp_std::marker::PhantomData, } impl Default for GenesisConfig { fn default() -> Self { Self { multiplier: MULTIPLIER_DEFAULT_VALUE, + _config: Default::default(), #[cfg(feature = "disable_fees")] disable_fees: false, - _config: Default::default(), } } } @@ -409,59 +441,68 @@ pub mod pallet { } } + #[pallet::event] + #[pallet::generate_deposit(pub(super) fn deposit_event)] + pub enum Event { + /// A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee, + /// has been paid by `who`. + TransactionFeePaid { + who: T::AccountId, + actual_fee: BalanceOf, + tip: BalanceOf, + }, + } + #[pallet::hooks] impl Hooks> for Pallet { + #[cfg(feature = "std")] fn integrity_test() { // given weight == u64, we build multipliers from `diff` of two weight values, which can // at most be maximum block weight. Make sure that this can fit in a multiplier without // loss. assert!( ::max_value() - >= Multiplier::checked_from_integer::( - T::BlockWeights::get().max_block.ref_time() + >= Multiplier::checked_from_integer::( + T::BlockWeights::get() + .max_block + .ref_time() + .try_into() + .unwrap() ) .unwrap(), ); - // This is the minimum value of the multiplier. Make sure that if we collapse to this - // value, we can recover with a reasonable amount of traffic. For this test we assert - // that if we collapse to minimum, the trend will be positive with a weight value - // which is 1% more than the target. let target = T::FeeMultiplierUpdate::target() * T::BlockWeights::get() .get(DispatchClass::Normal) .max_total .expect( "Setting `max_total` for `Normal` dispatch class is not compatible with \ - `transaction-payment` pallet.", + `transaction-payment` pallet.", ); - // add 1 percent; let addition = target / 100; if addition == Weight::zero() { - // this is most likely because in a test setup we set everything to (). + // this is most likely because in a test setup we set everything to () + // or to `ConstFeeMultiplier`. return; } - #[cfg(any(feature = "std", test))] - sp_io::TestExternalities::new_empty().execute_with(|| { - // This is the minimum value of the multiplier. Make sure that if we collapse to - // this value, we can recover with a reasonable amount of traffic. For this test we - // assert that if we collapse to minimum, the trend will be positive with a weight - // value which is 1% more than the target. - let min_value = T::FeeMultiplierUpdate::min(); - - let target = target + addition; - - >::set_block_consumed_resources(target, 0); - let next = T::FeeMultiplierUpdate::convert(min_value); - assert!( - next > min_value, - "The minimum bound of the multiplier is too low. When \ - block saturation is more than target by 1% and multiplier is minimal then \ - the multiplier doesn't increase." - ); - }) + // This is the minimum value of the multiplier. Make sure that if we collapse to this + // value, we can recover with a reasonable amount of traffic. For this test we assert + // that if we collapse to minimum, the trend will be positive with a weight value which + // is 1% more than the target. + let min_value = T::FeeMultiplierUpdate::min(); + let target = target + addition; + + frame_system::Pallet::::set_block_consumed_resources(target, 0); + let next = T::FeeMultiplierUpdate::convert(min_value); + assert!( + next > min_value, + "The minimum bound of the multiplier is too low. When \ + block saturation is more than target by 1% and multiplier is minimal then \ + the multiplier doesn't increase." + ); } } @@ -490,10 +531,9 @@ where /// /// All dispatchables must be annotated with weight and will have some fee info. This function /// always returns. - pub fn query_info( + pub fn query_info( unchecked_extrinsic: Extrinsic, len: u32, - actual: Option, ) -> RuntimeDispatchInfo> where T::RuntimeCall: Dispatchable, @@ -503,34 +543,28 @@ where // `Extra`. Alternatively, we could actually execute the tx's per-dispatch and record the // balance of the sender before and after the pipeline.. but this is way too much hassle for // a very very little potential gain in the future. - let dispatch_info = ::get_dispatch_info(&unchecked_extrinsic); - let tip = 0u32.into(); - let tx_class = dispatch_info.class; - let weight = actual.unwrap_or(dispatch_info.total_weight()); - - let partial_fee = { - if unchecked_extrinsic.is_signed().unwrap_or(false) { - Self::compute_fee_raw(len, weight, tip, dispatch_info.pays_fee, tx_class) - .final_fee() - } else { - 0u32.into() - } + let partial_fee = if unchecked_extrinsic.is_bare() { + // Bare extrinsics have no partial fee. + 0u32.into() + } else { + Self::compute_fee(len, &dispatch_info, 0u32.into()) }; + let DispatchInfo { class, .. } = dispatch_info; + RuntimeDispatchInfo { - weight, - class: tx_class, + weight: dispatch_info.total_weight(), + class, partial_fee, } } /// Query the detailed fee of a given `call`. - pub fn query_fee_details( + pub fn query_fee_details( unchecked_extrinsic: Extrinsic, len: u32, - actual: Option, ) -> FeeDetails> where T::RuntimeCall: Dispatchable, @@ -538,58 +572,66 @@ where let dispatch_info = ::get_dispatch_info(&unchecked_extrinsic); let tip = 0u32.into(); - let tx_class = dispatch_info.class; - let weight = actual.unwrap_or(dispatch_info.total_weight()); - if unchecked_extrinsic.is_signed().unwrap_or(false) { - return Self::compute_fee_raw(len, weight, tip, dispatch_info.pays_fee, tx_class); - } - - // Unsigned extrinsics have no inclusion fee. - FeeDetails { - inclusion_fee: None, - tip: 0u32.into(), + if unchecked_extrinsic.is_bare() { + // Bare extrinsics have no inclusion fee. + FeeDetails { + inclusion_fee: None, + tip, + } + } else { + Self::compute_fee_details(len, &dispatch_info, tip) } } /// Query information of a dispatch class, weight, and fee of a given encoded `Call`. - pub fn query_call_info( - call: T::RuntimeCall, - len: u32, - actual: Option, - ) -> RuntimeDispatchInfo> + pub fn query_call_info(call: T::RuntimeCall, len: u32) -> RuntimeDispatchInfo> where T::RuntimeCall: Dispatchable + GetDispatchInfo, { let dispatch_info = ::get_dispatch_info(&call); - - let tip = 0u32.into(); - let tx_class = dispatch_info.class; - let weight = actual.unwrap_or(dispatch_info.total_weight()); - let partial_fee = - Self::compute_fee_raw(len, weight, tip, dispatch_info.pays_fee, tx_class).final_fee(); + let DispatchInfo { class, .. } = dispatch_info; RuntimeDispatchInfo { - weight, - class: tx_class, - partial_fee, + weight: dispatch_info.total_weight(), + class, + partial_fee: Self::compute_fee(len, &dispatch_info, 0u32.into()), } } /// Query fee details of a given encoded `Call`. - pub fn query_call_fee_details( - call: T::RuntimeCall, - len: u32, - actual: Option, - ) -> FeeDetails> + pub fn query_call_fee_details(call: T::RuntimeCall, len: u32) -> FeeDetails> where T::RuntimeCall: Dispatchable + GetDispatchInfo, { let dispatch_info = ::get_dispatch_info(&call); let tip = 0u32.into(); - let tx_class = dispatch_info.class; - let weight = actual.unwrap_or(dispatch_info.total_weight()); - Self::compute_fee_raw(len, weight, tip, dispatch_info.pays_fee, tx_class) + + Self::compute_fee_details(len, &dispatch_info, tip) + } + + /// Compute the final fee value for a particular transaction. + pub fn compute_fee( + len: u32, + info: &DispatchInfoOf, + tip: BalanceOf, + ) -> BalanceOf + where + T::RuntimeCall: Dispatchable, + { + Self::compute_fee_details(len, info, tip).final_fee() + } + + /// Compute the fee details for a particular transaction. + pub fn compute_fee_details( + len: u32, + info: &DispatchInfoOf, + tip: BalanceOf, + ) -> FeeDetails> + where + T::RuntimeCall: Dispatchable, + { + Self::compute_fee_raw(len, info.total_weight(), tip, info.pays_fee, info.class) } /// Compute the actual post dispatch fee for a particular transaction. @@ -646,7 +688,6 @@ where // the adjustable part of the fee. let unadjusted_weight_fee = Self::weight_to_fee(weight); let multiplier = NextFeeMultiplier::::get(); - // final adjusted weight fee. let adjusted_weight_fee = multiplier.saturating_mul_int(unadjusted_weight_fee); @@ -670,31 +711,41 @@ where } } - fn length_to_fee(length: u32) -> BalanceOf { - let len = >::from(length); - let per_byte = T::TransactionByteFee::get(); - - per_byte.saturating_mul(len) + /// Compute the length portion of a fee by invoking the configured `LengthToFee` impl. + pub fn length_to_fee(length: u32) -> BalanceOf { + T::LengthToFee::weight_to_fee(&Weight::from_parts(length as u64, 0)) } - fn weight_to_fee(weight: Weight) -> BalanceOf { + /// Compute the unadjusted portion of the weight fee by invoking the configured `WeightToFee` + /// impl. Note that the input `weight` is capped by the maximum block weight before computation. + pub fn weight_to_fee(weight: Weight) -> BalanceOf { // cap the weight to the maximum defined in runtime, otherwise it will be the // `Bounded` maximum of its data type, which is not desired. let capped_weight = weight.min(T::BlockWeights::get().max_block); T::WeightToFee::weight_to_fee(&capped_weight) } - /// Polymesh-Note :- Change for the supporting the test + /// Deposit the [`Event::TransactionFeePaid`] event. + pub fn deposit_fee_paid_event(who: T::AccountId, actual_fee: BalanceOf, tip: BalanceOf) { + Self::deposit_event(Event::TransactionFeePaid { + who, + actual_fee, + tip, + }); + } + + // Polymesh change + // ----------------------------------------------------------------- #[cfg(debug_assertions)] pub fn put_next_fee_multiplier(m: Multiplier) { NextFeeMultiplier::::put(m) } + // ----------------------------------------------------------------- } impl Convert> for Pallet where T: Config, - BalanceOf: FixedPointOperand, { /// Compute the fee for the specified weight. /// @@ -706,105 +757,183 @@ where } } -pub type WithdrawFeeInfo = ( - BalanceOf, - <::OnChargeTransaction as OnChargeTransaction>::LiquidityInfo, - Option, -); - /// Require the transactor pay for themselves and maybe include a tip to gain additional priority /// in the queue. -#[derive(Encode, Decode, DecodeWithMemTracking, TypeInfo, Clone, Eq, PartialEq)] +/// +/// # Transaction Validity +/// +/// This extension sets the `priority` field of `TransactionValidity` depending on the amount +/// of tip being paid per weight unit. +/// +/// Operational transactions will receive an additional priority bump, so that they are normally +/// considered before regular transactions. +#[derive(Encode, Decode, DecodeWithMemTracking, Clone, Eq, PartialEq, TypeInfo)] #[scale_info(skip_type_params(T))] -pub struct ChargeTransactionPayment(BalanceOf); +pub struct ChargeTransactionPayment(#[codec(compact)] BalanceOf); impl ChargeTransactionPayment where - T::RuntimeCall: - Dispatchable + GetCallMetadata, - BalanceOf: Send + Sync + FixedPointOperand + Into, + T::RuntimeCall: Dispatchable, + BalanceOf: Send + Sync + Into, { /// utility constructor. Used only in client/factory code. pub fn from(fee: BalanceOf) -> Self { Self(fee) } + /// Returns the tip as being chosen by the transaction sender. + pub fn tip(&self) -> BalanceOf { + self.0 + } + fn withdraw_fee( &self, who: &T::AccountId, call: &T::RuntimeCall, info: &DispatchInfoOf, - len: usize, - ) -> Result, TransactionValidityError> { + fee: BalanceOf, + ) -> Result< + ( + BalanceOf, + <::OnChargeTransaction as OnChargeTransaction>::LiquidityInfo, + Option, + ), + TransactionValidityError, + > { let tip = self.0; - let fee = Pallet::::compute_fee_raw( - len as u32, - info.total_weight(), - tip, - info.pays_fee, - info.class, - ) - .final_fee(); - // Polymesh: Changed how the tx fee payer is selected. + // Polymesh change + // ----------------------------------------------------------------- - // Only mess with balances if fee is not zero. if fee.is_zero() { - let liquidity_info = Default::default(); - return Ok((fee, liquidity_info, None)); + return Ok((fee, Default::default(), None)); } // Get the payer for this transaction. - let payer_key = + let payers_key = T::CddHandler::get_valid_payer(call, who)?.ok_or(InvalidTransaction::Payment)?; // Check if the payer is being subsidised. - let subsidiser = T::Subsidiser::check_subsidy(&payer_key, fee.into(), Some(call))?; + let subsidiser = T::Subsidiser::check_subsidy(&payers_key, fee.into(), Some(call))?; // key to pay the fee. - let fee_key = subsidiser.as_ref().unwrap_or(&payer_key); - let liquidity_info = + let fee_key = subsidiser.as_ref().unwrap_or(&payers_key); + + let liq_info = <::OnChargeTransaction as OnChargeTransaction>::withdraw_fee( fee_key, call, info, fee, tip, )?; - T::CddHandler::set_payer_context(Some(payer_key)); - Ok((fee, liquidity_info, subsidiser)) + + T::CddHandler::set_payer_context(Some(payers_key)); + Ok((fee, liq_info, subsidiser)) + + // ----------------------------------------------------------------- } - // Polymesh: Used to allow GC/CDD member to include a `tip`. - /// Returns `true` iff `who` is member of `T::GovernanceCommittee` or `T::CddProviders`. + fn can_withdraw_fee( + &self, + who: &T::AccountId, + call: &T::RuntimeCall, + info: &DispatchInfoOf, + len: usize, + ) -> Result, TransactionValidityError> { + let tip = self.0; + let fee = Pallet::::compute_fee(len as u32, info, tip); + + // Polymesh change + // ----------------------------------------------------------------- + + if fee.is_zero() { + return Ok(fee); + } + + // Get the payer for this transaction. + let payers_key = + T::CddHandler::get_valid_payer(call, who)?.ok_or(InvalidTransaction::Payment)?; + + // Check if the payer is being subsidised. + let subsidiser = T::Subsidiser::check_subsidy(&payers_key, fee.into(), Some(call))?; + + // key to pay the fee. + let fee_key = subsidiser.as_ref().unwrap_or(&payers_key); + + <::OnChargeTransaction as OnChargeTransaction>::withdraw_fee( + fee_key, call, info, fee, tip, + )?; + + T::CddHandler::set_payer_context(Some(payers_key)); + Ok(fee) + + // ----------------------------------------------------------------- + } + + // Polymesh change: Used to allow GC/CDD member to include a `tip`. + // ----------------------------------------------------------------- + + /// Returns `true` if `who` is member of `T::GovernanceCommittee` or `T::CddProviders`. fn is_gc_or_cdd_member(who: &T::AccountId) -> bool { T::Identity::get_identity(who) .map(|did| T::GovernanceCommittee::is_member(&did) || T::CddProviders::is_member(&did)) .unwrap_or(false) } - // Polymesh: Used to allow GC/CDD member to include a `tip`. /// Ensures that the transaction tip is valid. /// - /// We only allow tip != 0 if the transaction is `DispatchClass::Operational` and it was - /// created by a Governance or CDD Provider member. - /// A `DispatchClass::Mandatory` transaction is going to be included in the block, so adding a - /// tip does not matter. + /// Tipping is allowed for `DispatchClass::Operational` created by a Governance or CDD Provider member. + /// Mandatory transactions are going to be included in the block, so adding a tip does not matter. fn ensure_valid_tip( &self, who: &T::AccountId, info: &DispatchInfoOf, ) -> Result, TransactionValidityError> { - let is_valid_tip = match info.class { - DispatchClass::Normal => self.0 == Zero::zero(), - DispatchClass::Operational => self.0 == Zero::zero() || Self::is_gc_or_cdd_member(who), - DispatchClass::Mandatory => true, - }; - - is_valid_tip - .then_some(self.0) - .ok_or(TransactionValidityError::Invalid( - InvalidTransaction::Custom(TransactionError::ZeroTip as u8), - )) + match info.class { + DispatchClass::Normal | DispatchClass::Operational => { + if self.0.is_zero() { + return Ok(self.0); + } + + if Self::is_gc_or_cdd_member(who) { + return Ok(self.0); + } + + Err(TransactionValidityError::Invalid( + InvalidTransaction::Custom(TransactionError::ZeroTip as u8), + )) + } + DispatchClass::Mandatory => Ok(self.0), + } } } +/// The info passed between the validate and prepare steps for the `ChargeAssetTxPayment` extension. +#[derive(RuntimeDebugNoBound)] +pub enum Val { + Charge { + tip: BalanceOf, + // who paid the fee + who: T::AccountId, + // transaction fee + fee: BalanceOf, + }, + NoCharge, +} + +/// The info passed between the prepare and post-dispatch steps for the `ChargeAssetTxPayment` +/// extension. +pub enum Pre { + Charge { + tip: BalanceOf, + // who paid the fee + who: T::AccountId, + // imbalance resulting from withdrawing the fee + imbalance: <::OnChargeTransaction as OnChargeTransaction>::LiquidityInfo, + }, + NoCharge { + // weight initially estimated by the extension, to be refunded + refund: Weight, + }, +} + impl sp_std::fmt::Debug for ChargeTransactionPayment { #[cfg(feature = "std")] fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { @@ -816,99 +945,62 @@ impl sp_std::fmt::Debug for ChargeTransactionPayment { } } -// Polymesh: Almost all of this implementation was changed to enforce zero tip, support subsidiser and charge fee to proper payer. -impl SignedExtension for ChargeTransactionPayment +impl TransactionExtension for ChargeTransactionPayment where - BalanceOf: Send + Sync + From + FixedPointOperand + Into, - T::RuntimeCall: - Dispatchable + GetCallMetadata, + T::RuntimeCall: Dispatchable, { const IDENTIFIER: &'static str = "ChargeTransactionPayment"; - type AccountId = T::AccountId; - type Call = T::RuntimeCall; - type AdditionalSigned = (); - type Pre = ( - // tip - BalanceOf, - // The payer for the transaction, they might be subsidised. - Self::AccountId, - // Imbalance resulting from withdrawing the fee. - <::OnChargeTransaction as OnChargeTransaction>::LiquidityInfo, - // Polymesh: Subsidiser - Option, - ); - fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> { - Ok(()) + type Implicit = (); + type Val = Val; + type Pre = Pre; + + fn weight(&self, _: &T::RuntimeCall) -> Weight { + unimplemented!() } fn validate( &self, - who: &Self::AccountId, - call: &Self::Call, - info: &DispatchInfoOf, - len: usize, - ) -> TransactionValidity { - let tip = self.ensure_valid_tip(who, info)?; - - let (_fee, _, _) = self.withdraw_fee(who, call, info, len)?; - // Polymesh: `tip` can only be used by GC/CDD members. - Ok(ValidTransaction { - priority: tip.saturated_into::(), - ..Default::default() - }) - } - - fn pre_dispatch( + _origin: ::RuntimeOrigin, + _call: &T::RuntimeCall, + _info: &DispatchInfoOf, + _len: usize, + _: (), + _implication: &impl Encode, + _source: TransactionSource, + ) -> Result< + ( + ValidTransaction, + Self::Val, + ::RuntimeOrigin, + ), + TransactionValidityError, + > { + unimplemented!() + } + + fn prepare( self, - who: &Self::AccountId, - call: &Self::Call, - info: &DispatchInfoOf, - len: usize, + _val: Self::Val, + _origin: &::RuntimeOrigin, + _call: &T::RuntimeCall, + _info: &DispatchInfoOf, + _len: usize, ) -> Result { - let tip = self.ensure_valid_tip(who, info)?; - let (_fee, imbalance, subsidiser) = self.withdraw_fee(who, call, info, len)?; - Ok((tip, who.clone(), imbalance, subsidiser)) + unimplemented!() } fn post_dispatch( - pre: Option, - info: &DispatchInfoOf, - post_info: &PostDispatchInfoOf, - len: usize, + _pre: Self::Pre, + _info: &DispatchInfoOf, + _post_info: &mut PostDispatchInfoOf, + _len: usize, _result: &DispatchResult, ) -> Result<(), TransactionValidityError> { - let (tip, who, imbalance, subsidiser) = match pre { - Some(pre) => pre, - None => return Ok(()), - }; - let actual_fee = Pallet::::compute_actual_fee(len as u32, info, post_info, tip); - - // Fee returned to original payer. - // If payer context is empty, the fee is returned to the caller account. - let payer = T::CddHandler::get_payer_from_context().unwrap_or(who.clone()); - - // `fee_key` is either a subsidiser or the original payer. - let fee_key = if let Some(subsidiser_key) = subsidiser { - // Debit the actual fee from the subsidy. - // This shouldn't fail, since the subsidy was checked in `pre_dispatch`. - T::Subsidiser::debit_subsidy(&payer, actual_fee.into())?; - subsidiser_key - } else { - // No subsidy. - payer - }; - - T::OnChargeTransaction::correct_and_deposit_fee( - &fee_key, info, post_info, actual_fee, tip, imbalance, - )?; - Pallet::::deposit_event(Event::::TransactionFeePaid { - who: fee_key, - actual_fee, - tip, - }); - - // It clears the identity and payer in the context after transaction. - T::CddHandler::clear_context(); - Ok(()) + unimplemented!() } } + +/// Weight functions needed for `pallet_transaction_payment`. +pub trait WeightInfo { + fn charge_transaction_payment() -> Weight; +} diff --git a/pallets/transaction-payment/src/payment.rs b/pallets/transaction-payment/src/payment.rs index 689797e4cf..6f92bd031d 100644 --- a/pallets/transaction-payment/src/payment.rs +++ b/pallets/transaction-payment/src/payment.rs @@ -1,35 +1,18 @@ -/// ! Traits and default implementation for paying transaction fees. -use crate::pallet::Config; - -use codec::{DecodeWithMemTracking, FullCodec}; -use sp_runtime::{ - traits::{ - AtLeast32BitUnsigned, DispatchInfoOf, MaybeSerializeDeserialize, PostDispatchInfoOf, - Saturating, Zero, - }, - transaction_validity::InvalidTransaction, -}; -use sp_std::{fmt::Debug, marker::PhantomData}; +use core::marker::PhantomData; +use frame_support::traits::fungible::{Balanced, Credit, Debt, Inspect}; +use frame_support::traits::tokens::{Precision, WithdrawConsequence}; +use frame_support::traits::{Imbalance, OnUnbalanced}; +use frame_support::unsigned::TransactionValidityError; +use sp_runtime::traits::{DispatchInfoOf, PostDispatchInfoOf, Saturating, Zero}; +use sp_runtime::transaction_validity::InvalidTransaction; -use frame_support::{ - traits::{Currency, ExistenceRequirement, Imbalance, OnUnbalanced, WithdrawReasons}, - unsigned::TransactionValidityError, -}; - -type NegativeImbalanceOf = - ::AccountId>>::NegativeImbalance; +use crate::pallet::Config; /// Handle withdrawing, refunding and depositing of transaction fees. pub trait OnChargeTransaction { /// The underlying integer type in which fees are calculated. - type Balance: AtLeast32BitUnsigned - + FullCodec - + Copy - + MaybeSerializeDeserialize - + Debug - + Default - + scale_info::TypeInfo - + DecodeWithMemTracking; + type Balance: frame_support::traits::tokens::Balance; + type LiquidityInfo: Default; /// Before the transaction is executed the payment of the transaction fees @@ -44,6 +27,17 @@ pub trait OnChargeTransaction { tip: Self::Balance, ) -> Result; + /// Check if the predicted fee from the transaction origin can be withdrawn. + /// + /// Note: The `fee` already includes the `tip`. + fn can_withdraw_fee( + who: &T::AccountId, + call: &T::RuntimeCall, + dispatch_info: &DispatchInfoOf, + fee: Self::Balance, + tip: Self::Balance, + ) -> Result<(), TransactionValidityError>; + /// After the transaction was executed the actual fee can be calculated. /// This function should refund any overpaid fees and optionally deposit /// the corrected amount. @@ -58,74 +52,79 @@ pub trait OnChargeTransaction { already_withdrawn: Self::LiquidityInfo, ) -> Result<(), TransactionValidityError>; - /// Polymesh: Used to charge protocal fees. + #[cfg(feature = "runtime-benchmarks")] + fn endow_account(who: &T::AccountId, amount: Self::Balance); + + #[cfg(feature = "runtime-benchmarks")] + fn minimum_balance() -> Self::Balance; + + // Polymesh change + // ----------------------------------------------------------------- fn charge_fee(who: &T::AccountId, fee: Self::Balance) -> Result<(), TransactionValidityError>; + // ----------------------------------------------------------------- } -/// Implements the transaction payment for a pallet implementing the `Currency` -/// trait (eg. the pallet_balances) using an unbalance handler (implementing -/// `OnUnbalanced`). +/// Implements transaction payment for a pallet implementing the [`frame_support::traits::fungible`] +/// trait (eg. pallet_balances) using an unbalance handler (implementing +/// [`OnUnbalanced`]). /// -/// The unbalance handler is given 2 unbalanceds in [`OnUnbalanced::on_unbalanceds`]: fee and -/// then tip. -pub struct CurrencyAdapter(PhantomData<(C, OU)>); +/// The unbalance handler is given 2 unbalanceds in [`OnUnbalanced::on_unbalanceds`]: `fee` and +/// then `tip`. +pub struct FungibleAdapter(PhantomData<(F, OU)>); -/// Default implementation for a Currency and an OnUnbalanced handler. -/// -/// The unbalance handler is given 2 unbalanceds in [`OnUnbalanced::on_unbalanceds`]: fee and -/// then tip. -impl OnChargeTransaction for CurrencyAdapter +impl OnChargeTransaction for FungibleAdapter where T: Config, - C: Currency<::AccountId>, - C::PositiveImbalance: Imbalance< - ::AccountId>>::Balance, - Opposite = C::NegativeImbalance, - >, - C::NegativeImbalance: Imbalance< - ::AccountId>>::Balance, - Opposite = C::PositiveImbalance, - >, - OU: OnUnbalanced>, + F: Balanced, + OU: OnUnbalanced>, { - type LiquidityInfo = Option>; - type Balance = ::AccountId>>::Balance; + type LiquidityInfo = Option>; + type Balance = ::AccountId>>::Balance; - /// Withdraw the predicted fee from the transaction origin. - /// - /// Note: The `fee` already includes the `tip`. fn withdraw_fee( - who: &T::AccountId, - _call: &T::RuntimeCall, - _info: &DispatchInfoOf, + who: &::AccountId, + _call: &::RuntimeCall, + _dispatch_info: &DispatchInfoOf<::RuntimeCall>, fee: Self::Balance, - tip: Self::Balance, + _tip: Self::Balance, ) -> Result { if fee.is_zero() { return Ok(None); } - let withdraw_reason = if tip.is_zero() { - WithdrawReasons::TRANSACTION_PAYMENT - } else { - WithdrawReasons::TRANSACTION_PAYMENT | WithdrawReasons::TIP - }; - - match C::withdraw(who, fee, withdraw_reason, ExistenceRequirement::KeepAlive) { + match F::withdraw( + who, + fee, + Precision::Exact, + frame_support::traits::tokens::Preservation::Preserve, + frame_support::traits::tokens::Fortitude::Polite, + ) { Ok(imbalance) => Ok(Some(imbalance)), Err(_) => Err(InvalidTransaction::Payment.into()), } } - /// Hand the fee and the tip over to the `[OnUnbalanced]` implementation. - /// Since the predicted fee might have been too high, parts of the fee may - /// be refunded. - /// - /// Note: The `corrected_fee` already includes the `tip`. - fn correct_and_deposit_fee( + fn can_withdraw_fee( who: &T::AccountId, + _call: &T::RuntimeCall, _dispatch_info: &DispatchInfoOf, - _post_info: &PostDispatchInfoOf, + fee: Self::Balance, + _tip: Self::Balance, + ) -> Result<(), TransactionValidityError> { + if fee.is_zero() { + return Ok(()); + } + + match F::can_withdraw(who, fee) { + WithdrawConsequence::Success => Ok(()), + _ => Err(InvalidTransaction::Payment.into()), + } + } + + fn correct_and_deposit_fee( + who: &::AccountId, + _dispatch_info: &DispatchInfoOf<::RuntimeCall>, + _post_info: &PostDispatchInfoOf<::RuntimeCall>, corrected_fee: Self::Balance, tip: Self::Balance, already_withdrawn: Self::LiquidityInfo, @@ -133,13 +132,17 @@ where if let Some(paid) = already_withdrawn { // Calculate how much refund we should return let refund_amount = paid.peek().saturating_sub(corrected_fee); - // refund to the the account that paid the fees. If this fails, the - // account might have dropped below the existential balance. In - // that case we don't refund anything. - let refund_imbalance = C::deposit_into_existing(who, refund_amount) - .unwrap_or_else(|_| C::PositiveImbalance::zero()); + // Refund to the the account that paid the fees if it exists & refund is non-zero. + // Otherwise, don't refund anything. + let refund_imbalance = + if refund_amount > Zero::zero() && F::total_balance(who) > F::Balance::zero() { + F::deposit(who, refund_amount, Precision::BestEffort) + .unwrap_or_else(|_| Debt::::zero()) + } else { + Debt::::zero() + }; // merge the imbalance caused by paying the fees and refunding parts of it again. - let adjusted_paid = paid + let adjusted_paid: Credit = paid .offset(refund_imbalance) .same() .map_err(|_| TransactionValidityError::Invalid(InvalidTransaction::Payment))?; @@ -147,26 +150,27 @@ where let (tip, fee) = adjusted_paid.split(tip); OU::on_unbalanceds(Some(fee).into_iter().chain(Some(tip))); } + Ok(()) } - /// Polymesh: Used to charge protocal fees. - fn charge_fee(who: &T::AccountId, fee: Self::Balance) -> Result<(), TransactionValidityError> { - if fee.is_zero() { - return Ok(()); - } + #[cfg(feature = "runtime-benchmarks")] + fn endow_account(who: &T::AccountId, amount: Self::Balance) { + let _ = F::deposit(who, amount, Precision::BestEffort); + } - match C::withdraw( - who, - fee, - WithdrawReasons::TRANSACTION_PAYMENT, - ExistenceRequirement::KeepAlive, - ) { - Ok(imbalance) => { - OU::on_unbalanced(imbalance); - Ok(()) - } - Err(_) => Err(InvalidTransaction::Payment.into()), - } + #[cfg(feature = "runtime-benchmarks")] + fn minimum_balance() -> Self::Balance { + F::minimum_balance() + } + + // Polymesh change + // ----------------------------------------------------------------- + fn charge_fee( + _who: &T::AccountId, + _fee: Self::Balance, + ) -> Result<(), TransactionValidityError> { + unimplemented!(""); } + // ----------------------------------------------------------------- } diff --git a/pallets/transaction-payment/src/types.rs b/pallets/transaction-payment/src/types.rs index e0cc42048b..74844de85a 100644 --- a/pallets/transaction-payment/src/types.rs +++ b/pallets/transaction-payment/src/types.rs @@ -28,7 +28,7 @@ use sp_std::prelude::*; use frame_support::dispatch::DispatchClass; /// The base fee and adjusted weight and length fees constitute the _inclusion fee_. -#[derive(Encode, Decode, TypeInfo, Clone, Eq, PartialEq)] +#[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo)] #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] pub struct InclusionFee { @@ -39,9 +39,9 @@ pub struct InclusionFee { pub len_fee: Balance, /// /// - `targeted_fee_adjustment`: This is a multiplier that can tune the final fee based on the - /// congestion of the network. + /// congestion of the network. /// - `weight_fee`: This amount is computed based on the weight of the transaction. Weight - /// accounts for the execution time of a transaction. + /// accounts for the execution time of a transaction. /// /// adjusted_weight_fee = targeted_fee_adjustment * weight_fee pub adjusted_weight_fee: Balance, @@ -64,7 +64,7 @@ impl InclusionFee { /// - (Optional) `inclusion_fee`: Only the `Pays::Yes` transaction can have the inclusion fee. /// - `tip`: If included in the transaction, the tip will be added on top. Only signed /// transactions can have a tip. -#[derive(Encode, Decode, TypeInfo, Clone, Eq, PartialEq)] +#[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo)] #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] pub struct FeeDetails { @@ -92,8 +92,8 @@ impl FeeDetails { /// Information related to a dispatchable's class, weight, and fee that can be queried from the /// runtime. -#[derive(Eq, PartialEq, Encode, Decode, TypeInfo, Default)] -#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] +#[derive(Eq, PartialEq, Encode, Decode, Default, TypeInfo)] +#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize, Clone))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] #[cfg_attr( feature = "std", @@ -111,7 +111,7 @@ pub struct RuntimeDispatchInfo /// The inclusion fee of this dispatch. /// /// This does not include a tip or anything else that - /// depends on the signature (i.e. depends on a `SignedExtension`). + /// depends on the signature (i.e. depends on a `TransactionExtension`). #[cfg_attr(feature = "std", serde(with = "serde_balance"))] pub partial_fee: Balance, } diff --git a/pallets/weights/src/lib.rs b/pallets/weights/src/lib.rs index 83d0ef8074..467cd7ab8d 100644 --- a/pallets/weights/src/lib.rs +++ b/pallets/weights/src/lib.rs @@ -48,6 +48,7 @@ pub mod pallet_staking; pub mod pallet_statistics; pub mod pallet_sto; pub mod pallet_timestamp; +pub mod pallet_transaction_payment; pub mod pallet_treasury; pub mod pallet_utility; pub mod pallet_validators; diff --git a/pallets/weights/src/pallet_transaction_payment.rs b/pallets/weights/src/pallet_transaction_payment.rs new file mode 100644 index 0000000000..f010207fb5 --- /dev/null +++ b/pallets/weights/src/pallet_transaction_payment.rs @@ -0,0 +1,63 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] +#![allow(dead_code)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `pallet_transaction_payment`. +pub trait WeightInfo { + fn charge_transaction_payment() -> Weight; +} + +/// Weights for `pallet_transaction_payment` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn charge_transaction_payment() -> Weight { + // Proof Size summary in bytes: + // Measured: `52` + // Estimated: `3593` + // Minimum execution time: 35_425_000 picoseconds. + Weight::from_parts(35_979_000, 3593) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} \ No newline at end of file diff --git a/primitives/src/sto.rs b/primitives/src/sto.rs index bf39dccd2c..86e8dc9683 100644 --- a/primitives/src/sto.rs +++ b/primitives/src/sto.rs @@ -15,7 +15,6 @@ use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; -use serde::de; use crate::settlement::ReceiptMetadata; use crate::{impl_checked_inc, IdentityId, Ticker}; From cab08f3f95bc5a5015f7a5de7acf02f2eccaa0b5 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 18 Aug 2025 09:36:07 -0300 Subject: [PATCH 48/97] Fix compilation errors - Remove deprecated scheduler --- pallets/pips/src/lib.rs | 86 +++++++++++++++++++++++++++------------ pallets/pips/src/types.rs | 17 +++----- 2 files changed, 65 insertions(+), 38 deletions(-) diff --git a/pallets/pips/src/lib.rs b/pallets/pips/src/lib.rs index 5c2f9e7290..79ef18a00b 100644 --- a/pallets/pips/src/lib.rs +++ b/pallets/pips/src/lib.rs @@ -78,8 +78,10 @@ use frame_support::dispatch::{DispatchResult, DispatchResultWithPostInfo}; use frame_support::ensure; use frame_support::pallet_prelude::*; use frame_support::storage::types::StorageValue; -use frame_support::traits::schedule::{DispatchTime, Named}; +use frame_support::traits::schedule::v3::Named as ScheduleNamed; +use frame_support::traits::schedule::DispatchTime; use frame_support::traits::{Currency, EnsureOrigin, Get, WithdrawReasons}; +use frame_support::traits::{QueryPreimage, StorePreimage}; use frame_support::weights::Weight; use frame_system::pallet_prelude::*; use frame_system::{ensure_root, ensure_signed, RawOrigin}; @@ -185,6 +187,8 @@ pub mod pallet { ProposalNotInScheduledState, /// Invalid PIP ID. Pip id was not expected to be in the live queue. InvalidPipId, + /// TaskName cannot exceed 32 bytes. + InvalidTaskName, } #[pallet::event] @@ -378,12 +382,19 @@ pub mod pallet { /// Scheduler for executed or expired proposals. The scheduler module does not have instances, /// so the names of scheduled tasks must be unique within this pallet. Names cannot be just PIP /// IDs because names of executed and expired PIPs should be different. - type Scheduler: Named, Self::SchedulerCall, Self::SchedulerOrigin>; + type Scheduler: ScheduleNamed< + BlockNumberFor, + Self::SchedulerCall, + Self::SchedulerOrigin, + Hasher = Self::Hashing, + >; /// A call type used by the scheduler. - type SchedulerCall: From> + Into<::Proposal>; + type SchedulerCall: From> + Into<::Proposal> + Encode; /// The maximum number of votes that can be pruned at once. #[pallet::constant] type MaxRefundsAndVotesPruned: Get; + /// Preimage provider for the scheduler. + type SchedulerPreimage: QueryPreimage + StorePreimage; } /// Set to `true` if historical PIPs data must be removed. @@ -779,7 +790,7 @@ pub mod pallet { // Schedule for expiry, as long as `Pending`, at block with number `expiring_at`. if let MaybeBlock::Some(expiring_at) = expiry { - Self::schedule_pip_for_expiry(id, expiring_at); + Self::schedule_pip_for_expiry(id, expiring_at)?; } // Record the deposit and as a signal if we have a community PIP. @@ -938,7 +949,7 @@ pub mod pallet { ); // All is good, schedule PIP for execution. - Self::schedule_pip_for_execution(id); + Self::schedule_pip_for_execution(id)?; Ok(()) } @@ -969,7 +980,7 @@ pub mod pallet { Self::is_active(proposal_state), Error::::IncorrectProposalState ); - Self::maybe_unschedule_pip(id, proposal_state); + Self::maybe_unschedule_pip(id, proposal_state)?; Self::maybe_unsnapshot_pip(id, proposal_state); Self::unsafe_reject_proposal(GC_DID, id); Ok(()) @@ -1044,8 +1055,10 @@ pub mod pallet { // Update enactment period & reschedule it. PipToSchedule::::insert(id, new_until); - let res = - T::Scheduler::reschedule_named(id.execution_name(), DispatchTime::At(new_until)); + let task_name = id + .execution_name() + .map_err(|_| Error::::InvalidTaskName)?; + let res = T::Scheduler::reschedule_named(task_name, DispatchTime::At(new_until)); Self::handle_exec_scheduling_result(id, new_until, res); Ok(()) } @@ -1220,7 +1233,7 @@ pub mod pallet { // Approve proposals as instructed. for pip_id in to_approve.iter().copied() { - Self::schedule_pip_for_execution(pip_id); + Self::schedule_pip_for_execution(pip_id)?; } let id = SnapshotMeta::::get().map(|m| m.id); @@ -1358,21 +1371,27 @@ impl Pallet { } /// Adds a PIP expiry call to the PIP expiry schedule. - fn schedule_pip_for_expiry(id: PipId, at: BlockNumberFor) { + fn schedule_pip_for_expiry(id: PipId, at: BlockNumberFor) -> DispatchResult { let did = GC_DID; - let call = Call::::expire_scheduled_pip { did, id }.into(); - let event = match T::Scheduler::schedule_named( - id.expiry_name(), + + let scheduler_call = + ::SchedulerCall::from(Call::::expire_scheduled_pip { did, id }); + + let expire_pip_call = ::SchedulerPreimage::bound(scheduler_call)?; + + match T::Scheduler::schedule_named( + id.expiry_name().map_err(|_| Error::::InvalidTaskName)?, DispatchTime::At(at), None, MAX_NORMAL_PRIORITY, RawOrigin::Root.into(), - call, + expire_pip_call, ) { - Err(_) => Event::ExpirySchedulingFailed(did, id, at), - Ok(_) => Event::ExpiryScheduled(did, id, at), + Err(_) => Self::deposit_event(Event::ExpirySchedulingFailed(did, id, at)), + Ok(_) => Self::deposit_event(Event::ExpiryScheduled(did, id, at)), }; - Self::deposit_event(event); + + Ok(()) } /// Changes the vote of `voter` to `vote`, if any. @@ -1480,22 +1499,29 @@ impl Pallet { } /// Add a PIP execution call to the PIP execution schedule. - fn schedule_pip_for_execution(id: PipId) { + fn schedule_pip_for_execution(id: PipId) -> DispatchResult { // The enactment period is at least 1 block, // as you can only schedule calls for future blocks. let at = DefaultEnactmentPeriod::::get() .max(One::one()) .saturating_add(System::::block_number()); - // Add to schedule. - let call = Call::::execute_scheduled_pip { id }.into(); + let scheduler_call = + ::SchedulerCall::from(Call::::execute_scheduled_pip { id }); + + let execute_pip_call = ::SchedulerPreimage::bound(scheduler_call)?; + + let task_name = id + .execution_name() + .map_err(|_| Error::::InvalidTaskName)?; + let res = T::Scheduler::schedule_named( - id.execution_name(), + task_name, DispatchTime::At(at), None, MAX_NORMAL_PRIORITY, RawOrigin::Root.into(), - call, + execute_pip_call, ); Self::handle_exec_scheduling_result(id, at, res); @@ -1504,6 +1530,8 @@ impl Pallet { // Set the proposal to scheduled. Self::update_proposal_state(GC_DID, id, ProposalState::Scheduled); + + Ok(()) } /// Emit event based on a `result` from scheduling a PIP for execution. @@ -1547,10 +1575,11 @@ impl Pallet { } /// Unschedule PIP with given `id` if it's scheduled for execution. - fn maybe_unschedule_pip(id: PipId, state: ProposalState) { + fn maybe_unschedule_pip(id: PipId, state: ProposalState) -> DispatchResult { if let ProposalState::Scheduled = state { - Self::unschedule_pip(id); + Self::unschedule_pip(id)?; } + Ok(()) } /// Remove the PIP with `id` from the snapshot if it is there. @@ -1575,11 +1604,16 @@ impl Pallet { } /// Remove the PIP with `id` from the `ExecutionSchedule` at `block_no`. - fn unschedule_pip(id: PipId) { + fn unschedule_pip(id: PipId) -> DispatchResult { + let task_name = id + .execution_name() + .map_err(|_| Error::::InvalidTaskName)?; + PipToSchedule::::remove(id); - if T::Scheduler::cancel_named(id.execution_name()).is_err() { + if T::Scheduler::cancel_named(task_name).is_err() { Self::deposit_event(Event::ExecutionCancellingFailed(id)); } + Ok(()) } /// Sets the proposal state to `new_state`, adds the proposal to the pending refunds queue and diff --git a/pallets/pips/src/types.rs b/pallets/pips/src/types.rs index 68e32a8702..c53c0c4c30 100644 --- a/pallets/pips/src/types.rs +++ b/pallets/pips/src/types.rs @@ -15,6 +15,7 @@ use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use core::cmp::Ordering; +use frame_support::traits::schedule::v3::TaskName; use frame_support::traits::schedule::{Priority, HARD_DEADLINE}; use frame_support::traits::LockIdentifier; use scale_info::TypeInfo; @@ -54,13 +55,13 @@ impl_checked_inc!(PipId); impl PipId { /// Converts a PIP ID into a name of a PIP scheduled for execution. - pub fn execution_name(&self) -> Vec { - (PIP_EXECUTION, self.0).encode() + pub fn execution_name(&self) -> Result> { + (PIP_EXECUTION, self.0).encode().try_into() } /// Converts a PIP ID into a name of a PIP scheduled for expiry. - pub fn expiry_name(&self) -> Vec { - (PIP_EXPIRY, self.0).encode() + pub fn expiry_name(&self) -> Result> { + (PIP_EXPIRY, self.0).encode().try_into() } } @@ -177,14 +178,6 @@ pub struct Vote( pub Balance, ); -#[cfg_attr(feature = "std", derive(Debug))] -#[derive(Serialize, Deserialize)] -#[derive(Clone, Decode, Encode, Eq, PartialEq)] -pub struct VoteByPip { - pub pip: PipId, - pub vote: VoteType, -} - /// The state a PIP is in. #[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo, MaxEncodedLen)] #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] From 71e66408b0d2765489fab45795fad8209562cc1f Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 18 Aug 2025 09:37:05 -0300 Subject: [PATCH 49/97] Fix compilation erros - Impl TransactionExtension for pallet_permissions --- pallets/permissions/src/lib.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/pallets/permissions/src/lib.rs b/pallets/permissions/src/lib.rs index 529984b14b..136f5a307e 100644 --- a/pallets/permissions/src/lib.rs +++ b/pallets/permissions/src/lib.rs @@ -28,9 +28,8 @@ pub mod benchmarking; use codec::{Decode, DecodeWithMemTracking, Encode}; use core::mem; use frame_support::dispatch::DispatchResult; -use frame_support::dispatch::{DispatchInfo, PostDispatchInfo}; use frame_support::pallet_prelude::*; -use frame_support::traits::CallMetadata; +use frame_support::traits::{CallMetadata, GetCallMetadata}; use scale_info::TypeInfo; use sp_runtime::traits::{DispatchInfoOf, Dispatchable, PostDispatchInfoOf, TransactionExtension}; use sp_runtime::transaction_validity::{TransactionValidityError, ValidTransaction}; @@ -189,7 +188,7 @@ impl StoreCallMetadata { impl TransactionExtension for StoreCallMetadata where - T::RuntimeCall: Dispatchable, + T::RuntimeCall: GetCallMetadata, { const IDENTIFIER: &'static str = "StoreCallMetadata"; type Implicit = (); @@ -202,7 +201,7 @@ where fn validate( &self, - _origin: ::RuntimeOrigin, + origin: ::RuntimeOrigin, _call: &T::RuntimeCall, _info: &DispatchInfoOf, _len: usize, @@ -217,18 +216,20 @@ where ), TransactionValidityError, > { - unimplemented!() + Ok((ValidTransaction::default(), (), origin)) } fn prepare( self, _val: Self::Val, _origin: &::RuntimeOrigin, - _call: &T::RuntimeCall, + call: &T::RuntimeCall, _info: &DispatchInfoOf, _len: usize, ) -> Result { - unimplemented!() + let metadata = call.get_call_metadata(); + Self::set_call_metadata(metadata.pallet_name.into(), metadata.function_name.into()); + Ok(()) } fn post_dispatch( @@ -238,7 +239,8 @@ where _len: usize, _result: &DispatchResult, ) -> Result<(), TransactionValidityError> { - unimplemented!() + Self::clear_call_metadata(); + Ok(()) } } From 8cf5dd27d4e7a5b07a530863a90b926395cd4b31 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 18 Aug 2025 10:13:54 -0300 Subject: [PATCH 50/97] Fix compilation errors - Remove deprecated scheduler --- pallets/pips/src/types.rs | 4 +- pallets/runtime/common/src/lib.rs | 1 - pallets/settlement/src/lib.rs | 86 +++++++++++++++++++++++-------- 3 files changed, 67 insertions(+), 24 deletions(-) diff --git a/pallets/pips/src/types.rs b/pallets/pips/src/types.rs index c53c0c4c30..da15ddbb59 100644 --- a/pallets/pips/src/types.rs +++ b/pallets/pips/src/types.rs @@ -54,12 +54,12 @@ pub struct PipId(pub u32); impl_checked_inc!(PipId); impl PipId { - /// Converts a PIP ID into a name of a PIP scheduled for execution. + /// Converts [`PipId`] into a [`TaskName`] of a PIP scheduled for execution. pub fn execution_name(&self) -> Result> { (PIP_EXECUTION, self.0).encode().try_into() } - /// Converts a PIP ID into a name of a PIP scheduled for expiry. + /// Converts [`PipId`] into a [`TaskName`] of a PIP scheduled for expiry. pub fn expiry_name(&self) -> Result> { (PIP_EXPIRY, self.0).encode().try_into() } diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index ca496b6c48..04dd85df74 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -34,7 +34,6 @@ pub use frame_support::weights::{ RuntimeDbWeight, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, }; use frame_system::limits::{BlockLength, BlockWeights}; -use smallvec::smallvec; pub use sp_runtime::transaction_validity::TransactionPriority; pub use sp_runtime::{Perbill, Percent, Permill, SaturatedConversion}; diff --git a/pallets/settlement/src/lib.rs b/pallets/settlement/src/lib.rs index 54db8fe2bb..2fdebb79d9 100644 --- a/pallets/settlement/src/lib.rs +++ b/pallets/settlement/src/lib.rs @@ -56,8 +56,9 @@ use frame_support::dispatch::{ use frame_support::pallet_prelude::*; use frame_support::storage::with_transaction as frame_support_with_transaction; use frame_support::storage::TransactionOutcome; -use frame_support::traits::schedule::{DispatchTime, Named}; -use frame_support::traits::Get; +use frame_support::traits::schedule::v3::Named as ScheduleNamed; +use frame_support::traits::schedule::DispatchTime; +use frame_support::traits::{Get, QueryPreimage, StorePreimage}; use frame_support::weights::Weight; use frame_support::{ensure, BoundedBTreeSet}; use frame_system::pallet_prelude::*; @@ -421,13 +422,16 @@ pub mod pallet { type RuntimeEvent: From> + IsType<::RuntimeEvent>; /// A call type used by the scheduler. - type Proposal: From> + Into<::Proposal>; + type SchedulerCall: From> + + Into<::Proposal> + + Encode; /// Scheduler of settlement instructions. - type Scheduler: Named< + type Scheduler: ScheduleNamed< BlockNumberFor, - ::Proposal, + Self::SchedulerCall, Self::SchedulerOrigin, + Hasher = Self::Hashing, >; /// Portfolio module. @@ -467,6 +471,9 @@ pub mod pallet { /// The maximum time period that an instruction can be held in the `LockedForExecution` status. #[pallet::constant] type MaximumLockPeriod: Get; + + /// Preimage provider for the scheduler. + type SchedulerPreimage: QueryPreimage + StorePreimage; } #[pallet::error] @@ -571,6 +578,8 @@ pub mod pallet { FailedAssetTransferringConditions, /// Locked instructions can't have affirmations withdrawn. InvalidInstructionStatusForWithdrawal, + /// TaskName cannot exceed 32 bytes. + InvalidTaskName, } storage_migration_ver!(3); @@ -1655,7 +1664,7 @@ impl Pallet { instruction_info.nfts_transferred(), instruction_info.off_chain(), ); - Self::schedule_instruction(instruction_id, block_number, weight_limit); + Self::schedule_instruction(instruction_id, block_number, weight_limit)?; } Ok(instruction_id) @@ -2175,15 +2184,20 @@ impl Pallet { /// Schedule a given instruction to be executed on the next block only if the /// settlement type is `SettleOnAffirmation` and no. of affirms pending is 0. - fn maybe_schedule_instruction(affirms_pending: u64, id: InstructionId, weight_limit: Weight) { + fn maybe_schedule_instruction( + affirms_pending: u64, + id: InstructionId, + weight_limit: Weight, + ) -> DispatchResult { if affirms_pending == 0 && InstructionDetails::::get(id).settlement_type == SettlementType::SettleOnAffirmation { // Schedule instruction to be executed in the next block. let execution_at = System::::block_number() + One::one(); - Self::schedule_instruction(id, execution_at, weight_limit); + Self::schedule_instruction(id, execution_at, weight_limit)?; } + Ok(()) } /// Schedule execution of given instruction at given block number. @@ -2195,21 +2209,34 @@ impl Pallet { id: InstructionId, execution_at: BlockNumberFor, weight_limit: Weight, - ) { - let call = Call::::execute_scheduled_instruction { id, weight_limit }.into(); + ) -> DispatchResult { + let scheduler_call = + ::SchedulerCall::from(Call::::execute_scheduled_instruction { + id, + weight_limit, + }); + + let execute_inst_call = ::SchedulerPreimage::bound(scheduler_call)?; + + let task_name = id + .execution_name() + .map_err(|_| Error::::InvalidTaskName)?; + if let Err(_) = T::Scheduler::schedule_named( - id.execution_name(), + task_name, DispatchTime::At(execution_at), None, SETTLEMENT_INSTRUCTION_EXECUTION_PRIORITY, RawOrigin::Root.into(), - call, + execute_inst_call, ) { Self::deposit_event(Event::SchedulingFailed( id, Error::::FailedToSchedule.into(), )); } + + Ok(()) } /// Affirms all legs from the instruction of the given `instruction_id`, where `portfolios` are a counter party. @@ -2333,7 +2360,11 @@ impl Pallet { instruction_asset_count.off_chain(), ); // Schedule instruction to be executed in the next block (expected) if conditions are met. - Self::maybe_schedule_instruction(InstructionAffirmsPending::::get(id), id, weight_limit); + Self::maybe_schedule_instruction( + InstructionAffirmsPending::::get(id), + id, + weight_limit, + )?; Ok(PostDispatchInfo::from(Some( Self::affirm_with_receipts_actual_weight( filtered_legs.sender_asset_count().clone(), @@ -2362,7 +2393,11 @@ impl Pallet { instruction_asset_count.off_chain(), ); // Schedule the instruction if conditions are met - Self::maybe_schedule_instruction(InstructionAffirmsPending::::get(id), id, weight_limit); + Self::maybe_schedule_instruction( + InstructionAffirmsPending::::get(id), + id, + weight_limit, + )?; Ok(PostDispatchInfo::from(Some( Self::affirm_instruction_actual_weight( filtered_legs.sender_asset_count().clone(), @@ -2574,7 +2609,10 @@ impl Pallet { Self::release_locks(&inst_id, &inst_legs)?; // Note: ignoring the error here is fine, since the instruction might not be scheduled yet - let _ = T::Scheduler::cancel_named(inst_id.execution_name()); + let task_name = inst_id + .execution_name() + .map_err(|_| Error::::InvalidTaskName)?; + let _ = T::Scheduler::cancel_named(task_name); Self::prune_instruction(&inst_id, &inst_legs)?; InstructionStatuses::::insert( @@ -3000,22 +3038,25 @@ impl Pallet { fn base_withdraw_affirmation( origin: OriginFor, - id: InstructionId, + inst_id: InstructionId, portfolios: BTreeSet, affirmation_count: Option, ) -> DispatchResultWithPostInfo { let (did, secondary_key, details) = - Self::ensure_origin_perm_and_instruction_validity(origin, id, false)?; + Self::ensure_origin_perm_and_instruction_validity(origin, inst_id, false)?; let filtered_legs = Self::unsafe_withdraw_instruction_affirmation( did, - id, + inst_id, portfolios, secondary_key.as_ref(), affirmation_count, )?; if details.settlement_type == SettlementType::SettleOnAffirmation { // Cancel the scheduled task for the execution of a given instruction. - let _fix_this = T::Scheduler::cancel_named(id.execution_name()); + let task_name = inst_id + .execution_name() + .map_err(|_| Error::::InvalidTaskName)?; + let _ = T::Scheduler::cancel_named(task_name); } Ok(PostDispatchInfo::from(Some( Self::withdraw_affirmation_actual_weight( @@ -3094,7 +3135,7 @@ impl Pallet { instruction_asset_count.non_fungible(), instruction_asset_count.off_chain(), ); - Self::maybe_schedule_instruction(n_pending_affirmations, instruction_id, weight_limit); + Self::maybe_schedule_instruction(n_pending_affirmations, instruction_id, weight_limit)?; } Self::deposit_event(Event::MediatorAffirmationReceived( @@ -3142,7 +3183,10 @@ impl Pallet { && instruction.settlement_type == SettlementType::SettleOnAffirmation { // Cancel the scheduled task - let _ = T::Scheduler::cancel_named(instruction_id.execution_name()); + let task_name = instruction_id + .execution_name() + .map_err(|_| Error::::InvalidTaskName)?; + let _ = T::Scheduler::cancel_named(task_name); } Self::deposit_event(Event::MediatorAffirmationWithdrawn( caller_did, From cbcaa18697210840ba201e32bf5c4c3568ecd02f Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 19 Aug 2025 09:40:38 -0300 Subject: [PATCH 51/97] Remove deprecated calls - pallet_sudo pallet_validators --- pallets/runtime/common/src/runtime.rs | 5 +- pallets/sudo/src/extension.rs | 73 ++++++++++++++++---------- pallets/validators/src/lib.rs | 17 +++--- pallets/validators/src/permissioned.rs | 64 ++++++++++++---------- primitives/src/settlement.rs | 7 +-- 5 files changed, 97 insertions(+), 69 deletions(-) diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index c2b85170e2..1ca1ff5528 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -288,11 +288,10 @@ macro_rules! misc_pallet_impls { impl pallet_validators::Config for Runtime { type RuntimeEvent = RuntimeEvent; type WeightInfo = polymesh_weights::pallet_validators::SubstrateWeight; - type MaxValidatorPerIdentity = polymesh_runtime_common::MaxValidatorPerIdentity; type MaxVariableInflationTotalIssuance = MaxVariableInflationTotalIssuance; type FixedYearlyReward = FixedYearlyReward; - type Call = RuntimeCall; + type SchedulerCall = RuntimeCall; type PalletsOrigin = OriginCaller; type RewardScheduler = Scheduler; } @@ -574,7 +573,7 @@ macro_rules! misc_pallet_impls { impl pallet_settlement::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type Proposal = RuntimeCall; + type SchedulerCall = RuntimeCall; type Scheduler = Scheduler; type WeightInfo = polymesh_weights::pallet_settlement::SubstrateWeight; type Portfolio = Portfolio; diff --git a/pallets/sudo/src/extension.rs b/pallets/sudo/src/extension.rs index dc24efbba5..c5fdc47ead 100644 --- a/pallets/sudo/src/extension.rs +++ b/pallets/sudo/src/extension.rs @@ -16,13 +16,15 @@ // limitations under the License. use codec::{Decode, DecodeWithMemTracking, Encode}; +use frame_support::pallet_prelude::Weight; use frame_support::{dispatch::DispatchInfo, ensure}; use scale_info::TypeInfo; -use sp_runtime::traits::{DispatchInfoOf, Dispatchable, SignedExtension}; -use sp_runtime::transaction_validity::{ - InvalidTransaction, TransactionPriority, TransactionValidity, TransactionValidityError, - UnknownTransaction, ValidTransaction, -}; +use sp_runtime::traits::{DispatchInfoOf, Dispatchable, PostDispatchInfoOf, TransactionExtension}; +use sp_runtime::transaction_validity::{InvalidTransaction, TransactionPriority}; +use sp_runtime::transaction_validity::{TransactionSource, ValidTransactionBuilder}; +use sp_runtime::transaction_validity::{TransactionValidity, TransactionValidityError}; +use sp_runtime::transaction_validity::{UnknownTransaction, ValidTransaction}; +use sp_runtime::DispatchResult; use sp_std::{fmt, marker::PhantomData}; use crate::{Config, Key}; @@ -64,43 +66,58 @@ impl CheckOnlySudoAccount { } } -impl SignedExtension for CheckOnlySudoAccount +impl TransactionExtension<::RuntimeCall> + for CheckOnlySudoAccount where ::RuntimeCall: Dispatchable, { const IDENTIFIER: &'static str = "CheckOnlySudoAccount"; - type AccountId = T::AccountId; - type Call = ::RuntimeCall; - type AdditionalSigned = (); + type Implicit = (); + type Val = (); type Pre = (); - fn additional_signed(&self) -> Result { - Ok(()) + fn weight(&self, _: &::RuntimeCall) -> Weight { + unimplemented!() } fn validate( &self, - who: &Self::AccountId, - _call: &Self::Call, - info: &DispatchInfoOf, + _origin: <::RuntimeCall as Dispatchable>::RuntimeOrigin, + _call: &::RuntimeCall, + _info: &DispatchInfoOf<::RuntimeCall>, _len: usize, - ) -> TransactionValidity { - let sudo_key: T::AccountId = Key::::get().ok_or(UnknownTransaction::CannotLookup)?; - ensure!(*who == sudo_key, InvalidTransaction::BadSigner); - - Ok(ValidTransaction { - priority: info.total_weight().ref_time() as TransactionPriority, - ..Default::default() - }) + _: (), + _implication: &impl Encode, + _source: TransactionSource, + ) -> Result< + ( + ValidTransaction, + Self::Val, + <::RuntimeCall as Dispatchable>::RuntimeOrigin, + ), + TransactionValidityError, + > { + unimplemented!() } - fn pre_dispatch( + fn prepare( self, - who: &Self::AccountId, - call: &Self::Call, - info: &DispatchInfoOf, - len: usize, + _val: Self::Val, + _origin: &<::RuntimeCall as Dispatchable>::RuntimeOrigin, + _call: &::RuntimeCall, + _info: &DispatchInfoOf<::RuntimeCall>, + _len: usize, ) -> Result { - self.validate(who, call, info, len).map(|_| ()) + unimplemented!(); + } + + fn post_dispatch( + _pre: Self::Pre, + _info: &DispatchInfoOf<::RuntimeCall>, + _post_info: &mut PostDispatchInfoOf<::RuntimeCall>, + _len: usize, + _result: &DispatchResult, + ) -> Result<(), TransactionValidityError> { + unimplemented!(); } } diff --git a/pallets/validators/src/lib.rs b/pallets/validators/src/lib.rs index d238066df1..7d90394fd3 100644 --- a/pallets/validators/src/lib.rs +++ b/pallets/validators/src/lib.rs @@ -32,9 +32,8 @@ pub mod types; pub use pallet_staking::permissioned_staking::PermissionedStaking; use frame_support::pallet_prelude::*; -use frame_support::traits::schedule::Anon; -use frame_support::traits::Get; -use frame_support::traits::IsSubType; +use frame_support::traits::schedule::v3::Anon as ScheduleAnon; +use frame_support::traits::{Get, IsSubType, QueryPreimage, StorePreimage}; use frame_support::weights::Weight; use frame_system::pallet_prelude::*; use sp_runtime::traits::Dispatchable; @@ -81,7 +80,7 @@ mod migrations { use frame_support::traits::{Get, GetStorageVersion}; pub fn migrate_v1() -> Weight { - let in_code = Pallet::::current_storage_version(); + let in_code = Pallet::::in_code_storage_version(); let on_chain = Pallet::::on_chain_storage_version(); if on_chain < 1 { @@ -155,17 +154,21 @@ pub mod pallet { type FixedYearlyReward: Get>; /// The overarching call type. - type Call: Dispatchable + From> + IsSubType> + Clone; + type SchedulerCall: Dispatchable + From> + IsSubType> + Clone + Encode; /// Overarching type of all pallets origins. type PalletsOrigin: From>; /// To schedule the rewards for the stakers after the end of era. - type RewardScheduler: Anon< + type RewardScheduler: ScheduleAnon< BlockNumberFor, - ::Call, + Self::SchedulerCall, Self::PalletsOrigin, + Hasher = Self::Hashing, >; + + /// Preimage provider for the scheduler. + type SchedulerPreimage: QueryPreimage + StorePreimage; } /// Entities that are allowed to run operator/validator nodes. diff --git a/pallets/validators/src/permissioned.rs b/pallets/validators/src/permissioned.rs index 1514ddc975..f6d661ad42 100644 --- a/pallets/validators/src/permissioned.rs +++ b/pallets/validators/src/permissioned.rs @@ -1,5 +1,5 @@ use frame_support::traits::fungible::Inspect; -use frame_support::traits::schedule::Anon; +use frame_support::traits::schedule::v3::Anon as ScheduleAnon; use frame_support::traits::schedule::{DispatchTime, HIGHEST_PRIORITY}; use frame_support::{pallet_prelude::*, traits::Get}; use frame_system::RawOrigin; @@ -137,7 +137,7 @@ impl PermissionedStaking for Pallet { } /// Schedule reward payouts. - fn schedule_payouts(active_era: &ActiveEraInfo) { + fn schedule_payouts(active_era: &ActiveEraInfo) -> DispatchResult { let next_block_number = >::block_number() + 1u32.into(); for (index, validator_id) in ::SessionInterface::validators() .into_iter() @@ -145,36 +145,44 @@ impl PermissionedStaking for Pallet { { let schedule_block_number = next_block_number + index.saturated_into::>(); + + let scheduler_call = + ::SchedulerCall::from(Call::::payout_stakers_by_system { + validator_stash: validator_id.clone(), + era: active_era.index, + }); + + let payout_call = ::SchedulerPreimage::bound(scheduler_call)?; + match T::RewardScheduler::schedule( - DispatchTime::At(schedule_block_number), - None, - HIGHEST_PRIORITY, - RawOrigin::Root.into(), - Call::::payout_stakers_by_system { - validator_stash: validator_id.clone(), + DispatchTime::At(schedule_block_number), + None, + HIGHEST_PRIORITY, + RawOrigin::Root.into(), + payout_call + ) { + Ok(_) => log!( + info, + "💸 Rewards are successfully scheduled for validator id: {:?} at block number: {:?}", + &validator_id, + schedule_block_number, + ), + Err(error) => { + log!( + error, + "â›” Detected error in scheduling the reward payment: {:?}", + error + ); + Pallet::::deposit_event(Event::::RewardPaymentSchedulingInterrupted { + account_id: validator_id, era: active_era.index, - }.into() - ) { - Ok(_) => log!( - info, - "💸 Rewards are successfully scheduled for validator id: {:?} at block number: {:?}", - &validator_id, - schedule_block_number, - ), - Err(error) => { - log!( - error, - "â›” Detected error in scheduling the reward payment: {:?}", - error - ); - Pallet::::deposit_event(Event::::RewardPaymentSchedulingInterrupted { - account_id: validator_id, - era: active_era.index, - error - }); - } + error + }); } + } } + + Ok(()) } /// Who should be slashed? diff --git a/primitives/src/settlement.rs b/primitives/src/settlement.rs index 350bc28bdc..925c7b1be4 100644 --- a/primitives/src/settlement.rs +++ b/primitives/src/settlement.rs @@ -20,6 +20,7 @@ use serde::{Deserialize, Serialize}; use codec::alloc::string::ToString; use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use frame_support::weights::Weight; +use frame_support::traits::schedule::v3::TaskName; use scale_info::prelude::string::String; use scale_info::TypeInfo; use sp_std::collections::btree_set::BTreeSet; @@ -131,9 +132,9 @@ pub struct InstructionId(pub u64); impl_checked_inc!(InstructionId); impl InstructionId { - /// Converts an instruction id into a scheduler name. - pub fn execution_name(&self) -> Vec { - (SETTLEMENT_INSTRUCTION_EXECUTION, self.0).encode() + /// Converts an instruction id into [`TaskName`]. + pub fn execution_name(&self) -> Result> { + (SETTLEMENT_INSTRUCTION_EXECUTION, self.0).encode().try_into() } } From ba818f034fceb7ab93eabac59f84e8ad221ac948 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 19 Aug 2025 18:17:55 -0300 Subject: [PATCH 52/97] Fix compilation errors - pallet_tx_payments currency adapter --- Cargo.lock | 1 + pallets/runtime/common/src/impls.rs | 21 +-- pallets/runtime/common/src/lib.rs | 6 +- pallets/runtime/common/src/runtime.rs | 4 +- pallets/runtime/develop/src/runtime.rs | 4 +- pallets/sudo/src/extension.rs | 11 +- pallets/transaction-payment/src/payment.rs | 145 +++++++++++------- pallets/weights/Cargo.toml | 1 + .../weights/src/pallet_transaction_payment.rs | 11 +- primitives/src/settlement.rs | 6 +- 10 files changed, 118 insertions(+), 92 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7e8abf48fd..9db69a3735 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7915,6 +7915,7 @@ dependencies = [ "pallet-statistics", "pallet-sto", "pallet-timestamp", + "pallet-transaction-payment 2.0.0", "pallet-treasury", "pallet-utility", "pallet-validators", diff --git a/pallets/runtime/common/src/impls.rs b/pallets/runtime/common/src/impls.rs index b623ec23b5..7ede1dc9bd 100644 --- a/pallets/runtime/common/src/impls.rs +++ b/pallets/runtime/common/src/impls.rs @@ -34,25 +34,20 @@ //! Auxillary struct/enums use frame_election_provider_support::BalancingConfig; -use frame_support::traits::{Currency, OnUnbalanced}; -use frame_system as system; - -use pallet_authorship as authorship; -use pallet_balances as balances; +use frame_support::traits::tokens::imbalance::OnUnbalanced; +use frame_support::traits::Currency; use crate::NegativeImbalance; -pub struct Author(sp_std::marker::PhantomData); +pub struct Author(sp_std::marker::PhantomData); -impl OnUnbalanced> for Author +impl OnUnbalanced> for Author where - R: balances::Config + authorship::Config, - ::AccountId: From, - ::AccountId: Into, + T: pallet_authorship::Config + pallet_balances::Config, { - fn on_nonzero_unbalanced(amount: NegativeImbalance) { - if let Some(author) = authorship::Pallet::::author() { - >::resolve_creating(&author, amount); + fn on_nonzero_unbalanced(amount: NegativeImbalance) { + if let Some(author) = pallet_authorship::Pallet::::author() { + pallet_balances::Pallet::::resolve_creating(&author, amount); } } } diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index 04dd85df74..05e27af2bc 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -38,13 +38,13 @@ pub use sp_runtime::transaction_validity::TransactionPriority; pub use sp_runtime::{Perbill, Percent, Permill, SaturatedConversion}; pub use impls::Author; -use pallet_balances as balances; use polymesh_primitives::constants::currency::*; pub use polymesh_primitives::RocksDbWeight; use polymesh_primitives::{Balance, BlockNumber, IdentityId, Moment}; -pub type NegativeImbalance = - as Currency<::AccountId>>::NegativeImbalance; +type NegativeImbalance = as Currency< + ::AccountId, +>>::NegativeImbalance; pub const fn deposit(items: u32, bytes: u32) -> Balance { items as Balance * 15 * CENTS + (bytes as Balance) * 6 * CENTS diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 1ca1ff5528..19c82219bf 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -166,12 +166,12 @@ macro_rules! misc_pallet_impls { impl pallet_transaction_payment::Config for Runtime { type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = - pallet_transaction_payment::FungibleAdapter; + pallet_transaction_payment::CurrencyAdapter; type WeightToFee = polymesh_runtime_common::WeightToFee; type LengthToFee = polymesh_runtime_common::LengthToFee; type FeeMultiplierUpdate = (); type OperationalFeeMultiplier = polymesh_runtime_common::OperationalFeeMultiplier; - type WeightInfo = polymesh_weights::pallet_babe::SubstrateWeight; + type WeightInfo = polymesh_weights::pallet_transaction_payment::SubstrateWeight; type CddHandler = CddHandler; type Subsidiser = Relayer; type GovernanceCommittee = PolymeshCommittee; diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index 2150542452..1167705e83 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -13,9 +13,7 @@ use frame_support::weights::Weight; use frame_support::{construct_runtime, parameter_types}; use sp_runtime::create_runtime_str; use sp_runtime::curve::PiecewiseLinear; -use sp_runtime::traits::{ - BlakeTwo256, Block as BlockT, Extrinsic, NumberFor, StaticLookup, Verify, -}; +use sp_runtime::traits::{BlakeTwo256, Block as BlockT, NumberFor, StaticLookup, Verify}; use sp_runtime::transaction_validity::TransactionPriority; use sp_runtime::{Perbill, Permill}; use sp_std::prelude::*; diff --git a/pallets/sudo/src/extension.rs b/pallets/sudo/src/extension.rs index c5fdc47ead..d5aa8371bb 100644 --- a/pallets/sudo/src/extension.rs +++ b/pallets/sudo/src/extension.rs @@ -16,18 +16,17 @@ // limitations under the License. use codec::{Decode, DecodeWithMemTracking, Encode}; +use frame_support::dispatch::DispatchInfo; use frame_support::pallet_prelude::Weight; -use frame_support::{dispatch::DispatchInfo, ensure}; use scale_info::TypeInfo; use sp_runtime::traits::{DispatchInfoOf, Dispatchable, PostDispatchInfoOf, TransactionExtension}; -use sp_runtime::transaction_validity::{InvalidTransaction, TransactionPriority}; -use sp_runtime::transaction_validity::{TransactionSource, ValidTransactionBuilder}; -use sp_runtime::transaction_validity::{TransactionValidity, TransactionValidityError}; -use sp_runtime::transaction_validity::{UnknownTransaction, ValidTransaction}; +use sp_runtime::transaction_validity::TransactionSource; +use sp_runtime::transaction_validity::TransactionValidityError; +use sp_runtime::transaction_validity::ValidTransaction; use sp_runtime::DispatchResult; use sp_std::{fmt, marker::PhantomData}; -use crate::{Config, Key}; +use crate::Config; /// Ensure that signed transactions are only valid if they are signed by sudo account. /// diff --git a/pallets/transaction-payment/src/payment.rs b/pallets/transaction-payment/src/payment.rs index 6f92bd031d..06edc0764f 100644 --- a/pallets/transaction-payment/src/payment.rs +++ b/pallets/transaction-payment/src/payment.rs @@ -1,7 +1,7 @@ use core::marker::PhantomData; -use frame_support::traits::fungible::{Balanced, Credit, Debt, Inspect}; -use frame_support::traits::tokens::{Precision, WithdrawConsequence}; -use frame_support::traits::{Imbalance, OnUnbalanced}; +use frame_support::pallet_prelude::CheckedSub; +use frame_support::traits::{Currency, Imbalance, OnUnbalanced}; +use frame_support::traits::{ExistenceRequirement, WithdrawReasons}; use frame_support::unsigned::TransactionValidityError; use sp_runtime::traits::{DispatchInfoOf, PostDispatchInfoOf, Saturating, Zero}; use sp_runtime::transaction_validity::InvalidTransaction; @@ -64,67 +64,101 @@ pub trait OnChargeTransaction { // ----------------------------------------------------------------- } -/// Implements transaction payment for a pallet implementing the [`frame_support::traits::fungible`] -/// trait (eg. pallet_balances) using an unbalance handler (implementing +type NegativeImbalanceOf = + ::AccountId>>::NegativeImbalance; + +/// Implements the transaction payment for a pallet implementing the [`Currency`] +/// trait (eg. the pallet_balances) using an unbalance handler (implementing /// [`OnUnbalanced`]). /// /// The unbalance handler is given 2 unbalanceds in [`OnUnbalanced::on_unbalanceds`]: `fee` and /// then `tip`. -pub struct FungibleAdapter(PhantomData<(F, OU)>); +pub struct CurrencyAdapter(PhantomData<(C, OU)>); -impl OnChargeTransaction for FungibleAdapter +/// Default implementation for a Currency and an OnUnbalanced handler. +/// +/// The unbalance handler is given 2 unbalanceds in [`OnUnbalanced::on_unbalanceds`]: `fee` and +/// then `tip`. +impl OnChargeTransaction for CurrencyAdapter where T: Config, - F: Balanced, - OU: OnUnbalanced>, + C: Currency<::AccountId>, + C::PositiveImbalance: Imbalance< + ::AccountId>>::Balance, + Opposite = C::NegativeImbalance, + >, + C::NegativeImbalance: Imbalance< + ::AccountId>>::Balance, + Opposite = C::PositiveImbalance, + >, + OU: OnUnbalanced>, { - type LiquidityInfo = Option>; - type Balance = ::AccountId>>::Balance; + type LiquidityInfo = Option>; + type Balance = ::AccountId>>::Balance; + /// Withdraw the predicted fee from the transaction origin. + /// + /// Note: The `fee` already includes the `tip`. fn withdraw_fee( - who: &::AccountId, - _call: &::RuntimeCall, - _dispatch_info: &DispatchInfoOf<::RuntimeCall>, + who: &T::AccountId, + _call: &T::RuntimeCall, + _info: &DispatchInfoOf, fee: Self::Balance, - _tip: Self::Balance, + tip: Self::Balance, ) -> Result { if fee.is_zero() { return Ok(None); } - match F::withdraw( - who, - fee, - Precision::Exact, - frame_support::traits::tokens::Preservation::Preserve, - frame_support::traits::tokens::Fortitude::Polite, - ) { + let withdraw_reason = if tip.is_zero() { + WithdrawReasons::TRANSACTION_PAYMENT + } else { + WithdrawReasons::TRANSACTION_PAYMENT | WithdrawReasons::TIP + }; + + match C::withdraw(who, fee, withdraw_reason, ExistenceRequirement::KeepAlive) { Ok(imbalance) => Ok(Some(imbalance)), Err(_) => Err(InvalidTransaction::Payment.into()), } } + /// Check if the predicted fee from the transaction origin can be withdrawn. + /// + /// Note: The `fee` already includes the `tip`. fn can_withdraw_fee( who: &T::AccountId, _call: &T::RuntimeCall, - _dispatch_info: &DispatchInfoOf, + _info: &DispatchInfoOf, fee: Self::Balance, - _tip: Self::Balance, + tip: Self::Balance, ) -> Result<(), TransactionValidityError> { if fee.is_zero() { return Ok(()); } - match F::can_withdraw(who, fee) { - WithdrawConsequence::Success => Ok(()), - _ => Err(InvalidTransaction::Payment.into()), - } + let withdraw_reason = if tip.is_zero() { + WithdrawReasons::TRANSACTION_PAYMENT + } else { + WithdrawReasons::TRANSACTION_PAYMENT | WithdrawReasons::TIP + }; + + let new_balance = C::free_balance(who) + .checked_sub(&fee) + .ok_or(InvalidTransaction::Payment)?; + C::ensure_can_withdraw(who, fee, withdraw_reason, new_balance) + .map(|_| ()) + .map_err(|_| InvalidTransaction::Payment.into()) } + /// Hand the fee and the tip over to the `[OnUnbalanced]` implementation. + /// Since the predicted fee might have been too high, parts of the fee may + /// be refunded. + /// + /// Note: The `corrected_fee` already includes the `tip`. fn correct_and_deposit_fee( - who: &::AccountId, - _dispatch_info: &DispatchInfoOf<::RuntimeCall>, - _post_info: &PostDispatchInfoOf<::RuntimeCall>, + who: &T::AccountId, + _dispatch_info: &DispatchInfoOf, + _post_info: &PostDispatchInfoOf, corrected_fee: Self::Balance, tip: Self::Balance, already_withdrawn: Self::LiquidityInfo, @@ -132,17 +166,13 @@ where if let Some(paid) = already_withdrawn { // Calculate how much refund we should return let refund_amount = paid.peek().saturating_sub(corrected_fee); - // Refund to the the account that paid the fees if it exists & refund is non-zero. - // Otherwise, don't refund anything. - let refund_imbalance = - if refund_amount > Zero::zero() && F::total_balance(who) > F::Balance::zero() { - F::deposit(who, refund_amount, Precision::BestEffort) - .unwrap_or_else(|_| Debt::::zero()) - } else { - Debt::::zero() - }; + // refund to the the account that paid the fees. If this fails, the + // account might have dropped below the existential balance. In + // that case we don't refund anything. + let refund_imbalance = C::deposit_into_existing(who, refund_amount) + .unwrap_or_else(|_| C::PositiveImbalance::zero()); // merge the imbalance caused by paying the fees and refunding parts of it again. - let adjusted_paid: Credit = paid + let adjusted_paid = paid .offset(refund_imbalance) .same() .map_err(|_| TransactionValidityError::Invalid(InvalidTransaction::Payment))?; @@ -150,27 +180,28 @@ where let (tip, fee) = adjusted_paid.split(tip); OU::on_unbalanceds(Some(fee).into_iter().chain(Some(tip))); } - Ok(()) } - #[cfg(feature = "runtime-benchmarks")] - fn endow_account(who: &T::AccountId, amount: Self::Balance) { - let _ = F::deposit(who, amount, Precision::BestEffort); - } - - #[cfg(feature = "runtime-benchmarks")] - fn minimum_balance() -> Self::Balance { - F::minimum_balance() - } - // Polymesh change // ----------------------------------------------------------------- - fn charge_fee( - _who: &T::AccountId, - _fee: Self::Balance, - ) -> Result<(), TransactionValidityError> { - unimplemented!(""); + fn charge_fee(who: &T::AccountId, fee: Self::Balance) -> Result<(), TransactionValidityError> { + if fee.is_zero() { + return Ok(()); + } + + match C::withdraw( + who, + fee, + WithdrawReasons::TRANSACTION_PAYMENT, + ExistenceRequirement::KeepAlive, + ) { + Ok(imbalance) => { + OU::on_unbalanced(imbalance); + Ok(()) + } + Err(_) => Err(InvalidTransaction::Payment.into()), + } } // ----------------------------------------------------------------- } diff --git a/pallets/weights/Cargo.toml b/pallets/weights/Cargo.toml index c1103c0c86..d9f31c5161 100644 --- a/pallets/weights/Cargo.toml +++ b/pallets/weights/Cargo.toml @@ -39,6 +39,7 @@ pallet-relayer = { workspace = true, default-features = false } pallet-settlement = { workspace = true, default-features = false } pallet-statistics = { workspace = true, default-features = false } pallet-sto = { workspace = true, default-features = false } +pallet-transaction-payment = { workspace = true, default-features = false } pallet-treasury = { workspace = true, default-features = false } pallet-utility = { workspace = true, default-features = false } polymesh-contracts = { workspace = true, default-features = false } diff --git a/pallets/weights/src/pallet_transaction_payment.rs b/pallets/weights/src/pallet_transaction_payment.rs index f010207fb5..11d9838f0f 100644 --- a/pallets/weights/src/pallet_transaction_payment.rs +++ b/pallets/weights/src/pallet_transaction_payment.rs @@ -38,8 +38,7 @@ #![allow(missing_docs)] #![allow(dead_code)] -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use core::marker::PhantomData; +use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; /// Weight functions needed for `pallet_transaction_payment`. pub trait WeightInfo { @@ -47,8 +46,8 @@ pub trait WeightInfo { } /// Weights for `pallet_transaction_payment` using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { +pub struct SubstrateWeight; +impl pallet_transaction_payment::WeightInfo for SubstrateWeight { /// Storage: `System::Account` (r:1 w:1) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) fn charge_transaction_payment() -> Weight { @@ -57,7 +56,7 @@ impl WeightInfo for SubstrateWeight { // Estimated: `3593` // Minimum execution time: 35_425_000 picoseconds. Weight::from_parts(35_979_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) } } \ No newline at end of file diff --git a/primitives/src/settlement.rs b/primitives/src/settlement.rs index 925c7b1be4..4643225483 100644 --- a/primitives/src/settlement.rs +++ b/primitives/src/settlement.rs @@ -19,8 +19,8 @@ use serde::{Deserialize, Serialize}; use codec::alloc::string::ToString; use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; -use frame_support::weights::Weight; use frame_support::traits::schedule::v3::TaskName; +use frame_support::weights::Weight; use scale_info::prelude::string::String; use scale_info::TypeInfo; use sp_std::collections::btree_set::BTreeSet; @@ -134,7 +134,9 @@ impl_checked_inc!(InstructionId); impl InstructionId { /// Converts an instruction id into [`TaskName`]. pub fn execution_name(&self) -> Result> { - (SETTLEMENT_INSTRUCTION_EXECUTION, self.0).encode().try_into() + (SETTLEMENT_INSTRUCTION_EXECUTION, self.0) + .encode() + .try_into() } } From 311229b61dde38612bfca24b35c629650da0be8e Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Thu, 21 Aug 2025 09:47:06 -0300 Subject: [PATCH 53/97] Fix compilation errors - Update dependency; add Preimage --- Cargo.lock | 33 ++++++++++++++++++++++++-- pallets/committee/src/lib.rs | 3 ++- pallets/runtime/common/src/runtime.rs | 14 +++++------ pallets/runtime/develop/src/runtime.rs | 1 + pallets/treasury/src/lib.rs | 22 ++++++++++------- 5 files changed, 53 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9db69a3735..2b50aa5390 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1076,10 +1076,11 @@ dependencies = [ [[package]] name = "bounded-collections" -version = "0.2.4" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ad8a0bed7827f0b07a5d23cec2e58cc02038a99e4ca81616cb2bb2025f804d" +checksum = "dee8eddd066a8825ec5570528e6880471210fd5d88cb6abbe1cfdd51ca249c33" dependencies = [ + "jam-codec", "log", "parity-scale-codec", "scale-info", @@ -4301,6 +4302,34 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "jam-codec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d72f2fb8cfd27f6c52ea7d0528df594f7f2ed006feac153e9393ec567aafea98" +dependencies = [ + "arrayvec 0.7.6", + "bitvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "jam-codec-derive", + "rustversion", + "serde", +] + +[[package]] +name = "jam-codec-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09985146f40378e13af626964ac9c206d9d9b67c40c70805898d9954f709bcf5" +dependencies = [ + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "jni" version = "0.21.1" diff --git a/pallets/committee/src/lib.rs b/pallets/committee/src/lib.rs index 67126effa6..6de247bf20 100644 --- a/pallets/committee/src/lib.rs +++ b/pallets/committee/src/lib.rs @@ -134,7 +134,8 @@ pub mod pallet { } /// Origin for the committee module. - #[derive(PartialEq, Eq, Clone, Debug, Encode, Decode, TypeInfo, MaxEncodedLen)] + #[derive(Debug, Decode, DecodeWithMemTracking, Encode)] + #[derive(Clone, Eq, MaxEncodedLen, PartialEq, TypeInfo)] #[scale_info(skip_type_params(I))] pub enum RawOrigin { /// It has been condoned by M of N members of this committee diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 19c82219bf..7490e6a11d 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -294,6 +294,7 @@ macro_rules! misc_pallet_impls { type SchedulerCall = RuntimeCall; type PalletsOrigin = OriginCaller; type RewardScheduler = Scheduler; + type SchedulerPreimage = Preimage; } impl pallet_authority_discovery::Config for Runtime { @@ -585,6 +586,7 @@ macro_rules! misc_pallet_impls { type MaxNumberOfVenueSigners = MaxNumberOfVenueSigners; type MaxInstructionMediators = MaxInstructionMediators; type MaximumLockPeriod = MaximumLockPeriod; + type SchedulerPreimage = Preimage; } impl pallet_sto::Config for Runtime { @@ -1062,13 +1064,11 @@ macro_rules! runtime_apis { Block, > for Runtime { fn query_info(uxt: ::Extrinsic, len: u32) -> RuntimeDispatchInfo { - let actual = uxt.function.get_actual_weight(); - TransactionPayment::query_info(uxt, len, actual) + TransactionPayment::query_info(uxt, len) } fn query_fee_details(uxt: ::Extrinsic, len: u32) -> pallet_transaction_payment::FeeDetails { - let actual = uxt.function.get_actual_weight(); - TransactionPayment::query_fee_details(uxt, len, actual) + TransactionPayment::query_fee_details(uxt, len) } } @@ -1076,12 +1076,10 @@ macro_rules! runtime_apis { for Runtime { fn query_call_info(call: RuntimeCall, len: u32) -> RuntimeDispatchInfo { - let actual = call.get_actual_weight(); - TransactionPayment::query_call_info(call, len, actual) + TransactionPayment::query_call_info(call, len) } fn query_call_fee_details(call: RuntimeCall, len: u32) -> pallet_transaction_payment::FeeDetails { - let actual = call.get_actual_weight(); - TransactionPayment::query_call_fee_details(call, len, actual) + TransactionPayment::query_call_fee_details(call, len) } } diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index 1167705e83..e35c16baa2 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -279,6 +279,7 @@ impl pallet_pips::Config for Runtime { type Scheduler = Scheduler; type SchedulerCall = RuntimeCall; type MaxRefundsAndVotesPruned = MaxRefundsAndVotesPruned; + type SchedulerPreimage = Preimage; } /// CddProviders instance of group diff --git a/pallets/treasury/src/lib.rs b/pallets/treasury/src/lib.rs index d9383d88fb..c30afd7c3e 100644 --- a/pallets/treasury/src/lib.rs +++ b/pallets/treasury/src/lib.rs @@ -53,9 +53,6 @@ pub type ProposalIndex = u32; type Identity = identity::Pallet; type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; -type NegativeImbalanceOf = <::Currency as Currency< - ::AccountId, ->>::NegativeImbalance; pub use pallet::*; @@ -231,12 +228,19 @@ impl Pallet { } } -/// That trait implementation is needed to receive a portion of the fees from transactions. -impl OnUnbalanced> for Pallet { - fn on_nonzero_unbalanced(amount: NegativeImbalanceOf) { - let numeric_amount = amount.peek(); +use frame_support::traits::fungible::Credit; + +pub type NegativeImbalanceOf = + Credit<::AccountId, ::Currency>; - let _ = T::Currency::resolve_creating(&Self::account_id(), amount); - Self::deposit_event(Event::TreasuryReimbursement(GC_DID, numeric_amount)); +/// That trait implementation is needed to receive a portion of the fees from transactions. +impl OnUnbalanced> for Pallet +where + T: frame_system::Config + Config, + ::Currency: + frame_support::traits::fungible::Balanced<::AccountId>, +{ + fn on_nonzero_unbalanced(_amount: NegativeImbalanceOf) { + unimplemented!() } } From d4b431ef803d21e12f008f66d968217f07889ad2 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 22 Aug 2025 11:22:18 -0300 Subject: [PATCH 54/97] Update develop runtime --- pallets/runtime/common/src/runtime.rs | 5 +- pallets/runtime/develop/src/lib.rs | 4 +- pallets/runtime/develop/src/runtime.rs | 363 +++++++++++++++---------- 3 files changed, 224 insertions(+), 148 deletions(-) diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 7490e6a11d..357cefe3ee 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -39,14 +39,11 @@ macro_rules! misc_pallet_impls { ApplyExtrinsicResult, MultiSignature, }; - #[cfg(not(feature = "testing"))] - type RuntimeBaseCallFilter = frame_support::traits::Everything; - impl frame_system::Config for Runtime { /// The ubiquitous event type. type RuntimeEvent = RuntimeEvent; /// The basic call filter to use in dispatchable. - type BaseCallFilter = RuntimeBaseCallFilter; + type BaseCallFilter = frame_support::traits::Everything; /// Block & extrinsics weights: base values and limits. type BlockWeights = polymesh_runtime_common::RuntimeBlockWeights; /// The maximum length of a block (in bytes). diff --git a/pallets/runtime/develop/src/lib.rs b/pallets/runtime/develop/src/lib.rs index 301fcd5056..bacc3de28c 100644 --- a/pallets/runtime/develop/src/lib.rs +++ b/pallets/runtime/develop/src/lib.rs @@ -18,10 +18,10 @@ pub use pallet_staking::StakerStatus; #[cfg(feature = "std")] pub use runtime::{native_version, WASM_BINARY}; +pub use sp_runtime::{Perbill, Permill}; + pub use runtime::{ api, Asset, Authorship, Balances, BalancesCall, CheckedExtrinsic, MinimumPeriod, ProtocolFee, Runtime, RuntimeApi, RuntimeCall, SessionKeys, System, SystemCall, TransactionPayment, UncheckedExtrinsic, }; - -pub use sp_runtime::{Perbill, Permill}; diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index e35c16baa2..f5f47c4045 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -8,14 +8,13 @@ pub use sp_runtime::BuildStorage; use codec::Encode; use core::convert::TryFrom; +use frame_support::parameter_types; use frame_support::traits::KeyOwnerProofSystem; use frame_support::weights::Weight; -use frame_support::{construct_runtime, parameter_types}; -use sp_runtime::create_runtime_str; use sp_runtime::curve::PiecewiseLinear; use sp_runtime::traits::{BlakeTwo256, Block as BlockT, NumberFor, StaticLookup, Verify}; use sp_runtime::transaction_validity::TransactionPriority; -use sp_runtime::{Perbill, Permill}; +use sp_runtime::{Cow, Perbill, Permill}; use sp_std::prelude::*; use sp_version::RuntimeVersion; @@ -42,6 +41,10 @@ pub use pallet_balances::Call as BalancesCall; pub use pallet_staking::StakerStatus; pub use pallet_timestamp::Call as TimestampCall; +/// 100% goes to the block author. +pub type DealWithFees = Author; +pub type CddHandler = polymesh_runtime_common::fee_details::CddHandler; + // Make the WASM binary available. #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); @@ -49,12 +52,10 @@ include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); /// Runtime version. #[sp_version::runtime_version] pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("polymesh_dev"), - impl_name: create_runtime_str!("polymesh_dev"), + spec_name: Cow::Borrowed("polymesh_dev"), + impl_name: Cow::Borrowed("polymesh_dev"), authoring_version: 1, - // `spec_version: aaa_bbb_ccd` should match node version v`aaa.bbb.cc` - // N.B. `d` is unpinned from the binary version - spec_version: 7_003_003, + spec_version: 8_000_000, // `spec_version: aaa_bbb_ccd` should match node version `aaa.bbb.cc` impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, @@ -156,10 +157,34 @@ parameter_types! { // PIPs pub const MaxRefundsAndVotesPruned: u32 = 128; -} -/// 100% goes to the block author. -pub type DealWithFees = Author; + // Staking + pub const SessionsPerEra: sp_staking::SessionIndex = 3; + pub const BondingDuration: sp_staking::EraIndex = 7; + pub const SlashDeferDuration: sp_staking::EraIndex = 4; + pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; + + //pub const OffendingValidatorsThreshold: Perbill = Perbill::from_percent(17); + //pub const MaxIterations: u32 = 10; + //// 0.05%. The higher the value, the more strict solution acceptance becomes. + //pub MinSolutionScoreBump: Perbill = Perbill::from_rational(5u32, 10_000); + // pub const MinimumBond: Balance = ONE_POLY; + /// We prioritize im-online heartbeats over election solution submission. + //pub const StakingUnsignedPriority: TransactionPriority = TransactionPriority::max_value() / 2; + + // Validators + pub const MaxVariableInflationTotalIssuance: Balance = 1_000_000_000 * ONE_POLY; + pub const MaxValidatorPerIdentity: Permill = Permill::from_percent(33); + pub const FixedYearlyReward: Balance = 140_000_000 * ONE_POLY; + + // Babe + pub const MaxNominatorRewardedPerValidator: u32 = 1_024; + pub const ReportLongevity: u64 = + BondingDuration::get() as u64 * SessionsPerEra::get() as u64 * EpochDuration::get(); + + // Election Provider Multi Phase + pub const UnsignedPhase: BlockNumber = EPOCH_DURATION_IN_BLOCKS / 4; +} // Staking: pallet_staking_reward_curve::build! { @@ -172,31 +197,6 @@ pallet_staking_reward_curve::build! { test_precision: 0_005_000, ); } -parameter_types! { - pub const SessionsPerEra: sp_staking::SessionIndex = 3; - pub const BondingDuration: sp_staking::EraIndex = 7; - pub const SlashDeferDuration: sp_staking::EraIndex = 4; - pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; - pub const MaxNominatorRewardedPerValidator: u32 = 1_024; - pub const OffendingValidatorsThreshold: Perbill = Perbill::from_percent(17); - pub const UnsignedPhase: BlockNumber = EPOCH_DURATION_IN_BLOCKS / 4; - pub const MaxIterations: u32 = 10; - pub const MaxValidatorPerIdentity: Permill = Permill::from_percent(33); - // 0.05%. The higher the value, the more strict solution acceptance becomes. - pub MinSolutionScoreBump: Perbill = Perbill::from_rational(5u32, 10_000); - pub const MaxVariableInflationTotalIssuance: Balance = 1_000_000_000 * ONE_POLY; - pub const FixedYearlyReward: Balance = 140_000_000 * ONE_POLY; - pub const MinimumBond: Balance = ONE_POLY; - /// We prioritize im-online heartbeats over election solution submission. - pub const StakingUnsignedPriority: TransactionPriority = TransactionPriority::max_value() / 2; - - pub const ReportLongevity: u64 = - BondingDuration::get() as u64 * SessionsPerEra::get() as u64 * EpochDuration::get(); -} - -polymesh_runtime_common::misc_pallet_impls!(); - -pub type CddHandler = polymesh_runtime_common::fee_details::CddHandler; impl pallet_identity::Config for Runtime { type RuntimeEvent = RuntimeEvent; @@ -248,6 +248,7 @@ macro_rules! committee_config { type RuntimeEvent = RuntimeEvent; type WeightInfo = polymesh_weights::pallet_committee::SubstrateWeight; } + impl pallet_group::Config for Runtime { type RuntimeEvent = RuntimeEvent; // Committee cannot alter its own active membership limit. @@ -285,8 +286,7 @@ impl pallet_pips::Config for Runtime { /// CddProviders instance of group impl pallet_group::Config for Runtime { type RuntimeEvent = RuntimeEvent; - // Cannot alter its own active membership limit. - type LimitOrigin = polymesh_primitives::EnsureRoot; + type LimitOrigin = polymesh_primitives::EnsureRoot; // Cannot alter its own active membership limit. type AddOrigin = polymesh_primitives::EnsureRoot; type RemoveOrigin = polymesh_primitives::EnsureRoot; type SwapOrigin = polymesh_primitives::EnsureRoot; @@ -301,6 +301,189 @@ impl pallet_sudo::Config for Runtime { type RuntimeCall = RuntimeCall; } +pub struct OnChainSeqPhragmen; + +impl frame_election_provider_support::onchain::Config for OnChainSeqPhragmen { + type System = Runtime; + type Solver = frame_election_provider_support::SequentialPhragmen< + polymesh_primitives::AccountId, + pallet_election_provider_multi_phase::SolutionAccuracyOf, + >; + type DataProvider = ::DataProvider; + type WeightInfo = frame_election_provider_support::weights::SubstrateWeight; + type MaxWinners = ::MaxWinners; + type Bounds = polymesh_runtime_common::ElectionBoundsOnChain; +} + +polymesh_runtime_common::misc_pallet_impls!(); + +#[frame_support::runtime] +mod runtime { + use super::*; + + #[runtime::runtime] + #[runtime::derive( + RuntimeCall, + RuntimeEvent, + RuntimeError, + RuntimeOrigin, + RuntimeFreezeReason, + RuntimeHoldReason, + RuntimeSlashReason + )] + pub struct Runtime; + + #[runtime::pallet_index(0)] + pub type System = frame_system::Pallet; + + #[runtime::pallet_index(1)] + pub type Babe = pallet_babe::Pallet; + + #[runtime::pallet_index(2)] + pub type Timestamp = pallet_timestamp::Pallet; + + #[runtime::pallet_index(3)] + pub type Indices = pallet_indices::Pallet; + + #[runtime::pallet_index(4)] + pub type Authorship = pallet_authorship::Pallet; + + #[runtime::pallet_index(5)] + pub type Balances = pallet_balances::Pallet; + + #[runtime::pallet_index(6)] + pub type TransactionPayment = pallet_transaction_payment::Pallet; + + #[runtime::pallet_index(7)] + pub type Identity = pallet_identity::Pallet; + + #[runtime::pallet_index(8)] + pub type CddServiceProviders = pallet_group::Pallet; + + #[runtime::pallet_index(9)] + pub type PolymeshCommittee = pallet_committee::Pallet; + + #[runtime::pallet_index(10)] + pub type CommitteeMembership = pallet_group::Pallet; + + #[runtime::pallet_index(11)] + pub type TechnicalCommittee = pallet_committee::Pallet; + + #[runtime::pallet_index(12)] + pub type TechnicalCommitteeMembership = pallet_group::Pallet; + + #[runtime::pallet_index(13)] + pub type UpgradeCommittee = pallet_committee::Pallet; + + #[runtime::pallet_index(14)] + pub type UpgradeCommitteeMembership = pallet_group::Pallet; + + #[runtime::pallet_index(15)] + pub type MultiSig = pallet_multisig::Pallet; + + #[runtime::pallet_index(16)] + pub type Validators = pallet_validators::Pallet; + + #[runtime::pallet_index(17)] + pub type Staking = pallet_staking::Pallet; + + #[runtime::pallet_index(18)] + pub type Offences = pallet_offences::Pallet; + + #[runtime::pallet_index(19)] + pub type Session = pallet_session::Pallet; + + #[runtime::pallet_index(20)] + pub type AuthorityDiscovery = pallet_authority_discovery::Pallet; + + #[runtime::pallet_index(21)] + pub type Grandpa = pallet_grandpa::Pallet; + + #[runtime::pallet_index(22)] + pub type Historical = pallet_session_historical::Pallet; + + #[runtime::pallet_index(23)] + pub type ImOnline = pallet_im_online::Pallet; + + #[runtime::pallet_index(24)] + pub type RandomnessCollectiveFlip = pallet_insecure_randomness_collective_flip::Pallet; + + #[runtime::pallet_index(25)] + pub type Sudo = pallet_sudo::Pallet; + + #[runtime::pallet_index(26)] + pub type Asset = pallet_asset::Pallet; + + #[runtime::pallet_index(27)] + pub type CapitalDistribution = pallet_capital_distribution::Pallet; + + #[runtime::pallet_index(28)] + pub type Checkpoint = pallet_checkpoint::Pallet; + + #[runtime::pallet_index(29)] + pub type ComplianceManager = pallet_compliance_manager::Pallet; + + #[runtime::pallet_index(30)] + pub type CorporateAction = pallet_corporate_actions::Pallet; + + #[runtime::pallet_index(31)] + pub type CorporateBallot = pallet_corporate_ballot::Pallet; + + #[runtime::pallet_index(32)] + pub type Permissions = pallet_permissions::Pallet; + + #[runtime::pallet_index(33)] + pub type Pips = pallet_pips::Pallet; + + #[runtime::pallet_index(34)] + pub type Portfolio = pallet_portfolio::Pallet; + + #[runtime::pallet_index(35)] + pub type ProtocolFee = pallet_protocol_fee::Pallet; + + #[runtime::pallet_index(36)] + pub type Scheduler = pallet_scheduler::Pallet; + + #[runtime::pallet_index(37)] + pub type Settlement = pallet_settlement::Pallet; + + #[runtime::pallet_index(38)] + pub type Statistics = pallet_statistics::Pallet; + + #[runtime::pallet_index(39)] + pub type Sto = pallet_sto::Pallet; + + #[runtime::pallet_index(40)] + pub type Treasury = pallet_treasury::Pallet; + + #[runtime::pallet_index(41)] + pub type Utility = pallet_utility::Pallet; + + #[runtime::pallet_index(42)] + pub type Base = pallet_base::Pallet; + + #[runtime::pallet_index(43)] + pub type ExternalAgents = pallet_external_agents::Pallet; + + #[runtime::pallet_index(44)] + pub type Relayer = pallet_relayer::Pallet; + + #[runtime::pallet_index(46)] + pub type Contracts = pallet_contracts::Pallet; + + #[runtime::pallet_index(47)] + pub type PolymeshContracts = polymesh_contracts::Pallet; + + #[runtime::pallet_index(48)] + pub type Preimage = pallet_preimage::Pallet; + + #[runtime::pallet_index(49)] + pub type Nft = pallet_nft::Pallet; + + #[runtime::pallet_index(50)] + pub type ElectionProviderMultiPhase = pallet_election_provider_multi_phase::Pallet; +} + #[cfg(feature = "runtime-benchmarks")] #[macro_use] mod benches { @@ -345,96 +528,6 @@ mod benches { ); } -construct_runtime!( - pub struct Runtime { - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, - Indices: pallet_indices::{Pallet, Call, Storage, Config, Event} = 3, - Authorship: pallet_authorship = 4, - - // Balance: Genesis config dependencies: System. - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 5, - - // TransactionPayment: Genesis config dependencies: Balance. - TransactionPayment: pallet_transaction_payment::{Pallet, Call, Event, Storage} = 6, - - // Identity: Genesis config deps: Timestamp. - Identity: pallet_identity::{Pallet, Call, Storage, Event, Config} = 7, - - // Polymesh Committees - - // CddServiceProviders (group only): Genesis config deps: Identity - CddServiceProviders: pallet_group::::{Pallet, Call, Storage, Event, Config} = 8, - - // Governance Council (committee) - PolymeshCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config} = 9, - // CommitteeMembership: Genesis config deps: PolymeshCommittee, Identity. - CommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 10, - - // Technical Committee - TechnicalCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config} = 11, - // TechnicalCommitteeMembership: Genesis config deps: TechnicalCommittee, Identity - TechnicalCommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 12, - - // Upgrade Committee - UpgradeCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config} = 13, - // UpgradeCommitteeMembership: Genesis config deps: UpgradeCommittee, Identity - UpgradeCommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 14, - - MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, - - Validators: pallet_validators = 16, - Staking: pallet_staking = 17, - - Offences: pallet_offences::{Pallet, Storage, Event} = 18, - - // Session: Genesis config deps: System. - Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 19, - AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, - Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, - Historical: pallet_session_historical::{Pallet} = 22, - ImOnline: pallet_im_online::{Pallet, Call, Storage, Event, ValidateUnsigned, Config} = 23, - RandomnessCollectiveFlip: pallet_insecure_randomness_collective_flip::{Pallet, Storage} = 24, - - // Sudo. Usable initially. - Sudo: pallet_sudo::{Pallet, Call, Config, Storage, Event} = 25, - - // Asset: Genesis config deps: Timestamp, - Asset: pallet_asset::{Pallet, Call, Storage, Config, Event} = 26, - CapitalDistribution: pallet_capital_distribution::{Pallet, Call, Storage, Event, Config} = 27, - Checkpoint: pallet_checkpoint::{Pallet, Call, Storage, Event, Config} = 28, - ComplianceManager: pallet_compliance_manager::{Pallet, Call, Storage, Event} = 29, - CorporateAction: pallet_corporate_actions::{Pallet, Call, Storage, Event, Config} = 30, - CorporateBallot: pallet_corporate_ballot::{Pallet, Call, Storage, Event, Config} = 31, - Permissions: pallet_permissions::{Pallet} = 32, - Pips: pallet_pips::{Pallet, Call, Storage, Event, Config} = 33, - Portfolio: pallet_portfolio::{Pallet, Call, Storage, Event, Config} = 34, - ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config} = 35, - Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event} = 36, - Settlement: pallet_settlement::{Pallet, Call, Storage, Event, Config} = 37, - Statistics: pallet_statistics::{Pallet, Call, Storage, Event, Config} = 38, - Sto: pallet_sto::{Pallet, Call, Storage, Event} = 39, - Treasury: pallet_treasury::{Pallet, Call, Event} = 40, - Utility: pallet_utility::{Pallet, Call, Storage, Event} = 41, - Base: pallet_base::{Pallet, Call, Event} = 42, - ExternalAgents: pallet_external_agents::{Pallet, Call, Storage, Event} = 43, - Relayer: pallet_relayer::{Pallet, Call, Storage, Event} = 44, - // Removed pallet_rewards = 45, - - // Contracts - Contracts: pallet_contracts::{Pallet, Call, Storage, Event} = 46, - PolymeshContracts: polymesh_contracts::{Pallet, Call, Storage, Event, Config} = 47, - - // Preimage register. Used by `pallet_scheduler`. - Preimage: pallet_preimage::{Pallet, Call, Storage, Event} = 48, - - Nft: pallet_nft::{Pallet, Call, Storage, Event} = 49, - - ElectionProviderMultiPhase: pallet_election_provider_multi_phase::{Pallet, Call, Storage, Event, ValidateUnsigned} = 50, - } -); - polymesh_runtime_common::runtime_apis! { #[cfg(feature = "runtime-benchmarks")] impl frame_benchmarking::Benchmark for Runtime { @@ -493,17 +586,3 @@ polymesh_runtime_common::runtime_apis! { } } } - -pub struct OnChainSeqPhragmen; - -impl frame_election_provider_support::onchain::Config for OnChainSeqPhragmen { - type System = Runtime; - type Solver = frame_election_provider_support::SequentialPhragmen< - polymesh_primitives::AccountId, - pallet_election_provider_multi_phase::SolutionAccuracyOf, - >; - type DataProvider = ::DataProvider; - type WeightInfo = frame_election_provider_support::weights::SubstrateWeight; - type MaxWinners = ::MaxWinners; - type Bounds = polymesh_runtime_common::ElectionBoundsOnChain; -} From 0a7da4eb09003d691806dca8e381748c2f76efcc Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 22 Aug 2025 13:24:12 -0300 Subject: [PATCH 55/97] Update mainnet and testnet runtime --- pallets/runtime/develop/src/runtime.rs | 13 - pallets/runtime/mainnet/src/runtime.rs | 340 +++++++++++++---------- pallets/runtime/testnet/src/runtime.rs | 358 +++++++++++++++---------- 3 files changed, 412 insertions(+), 299 deletions(-) diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index f5f47c4045..5d79b5b764 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -150,11 +150,6 @@ parameter_types! { pub const MaxNumberOfFungibleMoves: u32 = 10; pub const MaxNumberOfNFTsMoves: u32 = 100; - // State trie Migration - pub const MigrationSignedDepositPerItem: Balance = 1_000; - pub const MigrationSignedDepositBase: Balance = 1_000_000; - pub const MaxKeyLen: u32 = 2048; - // PIPs pub const MaxRefundsAndVotesPruned: u32 = 128; @@ -164,14 +159,6 @@ parameter_types! { pub const SlashDeferDuration: sp_staking::EraIndex = 4; pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; - //pub const OffendingValidatorsThreshold: Perbill = Perbill::from_percent(17); - //pub const MaxIterations: u32 = 10; - //// 0.05%. The higher the value, the more strict solution acceptance becomes. - //pub MinSolutionScoreBump: Perbill = Perbill::from_rational(5u32, 10_000); - // pub const MinimumBond: Balance = ONE_POLY; - /// We prioritize im-online heartbeats over election solution submission. - //pub const StakingUnsignedPriority: TransactionPriority = TransactionPriority::max_value() / 2; - // Validators pub const MaxVariableInflationTotalIssuance: Balance = 1_000_000_000 * ONE_POLY; pub const MaxValidatorPerIdentity: Permill = Permill::from_percent(33); diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index 5373cac9be..ce338840e6 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -7,17 +7,15 @@ use sp_version::NativeVersion; pub use sp_runtime::BuildStorage; use codec::Encode; +use frame_support::parameter_types; use frame_support::traits::KeyOwnerProofSystem; use frame_support::weights::Weight; pub use frame_support::StorageValue; -use frame_support::{construct_runtime, parameter_types}; pub use frame_system::Call as SystemCall; -use sp_runtime::create_runtime_str; use sp_runtime::curve::PiecewiseLinear; -use sp_runtime::traits::{ - BlakeTwo256, Block as BlockT, Extrinsic, NumberFor, StaticLookup, Verify, -}; +use sp_runtime::traits::{BlakeTwo256, Block as BlockT, NumberFor, StaticLookup, Verify}; use sp_runtime::transaction_validity::TransactionPriority; +use sp_runtime::Cow; use sp_runtime::{Perbill, Permill}; use sp_std::prelude::*; use sp_version::RuntimeVersion; @@ -42,6 +40,10 @@ use polymesh_runtime_common::{AvailableBlockRatio, MaximumBlockWeight}; use crate::constants::time::*; +/// 100% goes to the block author. +pub type DealWithFees = Author; +pub type CddHandler = polymesh_runtime_common::fee_details::CddHandler; + // Make the WASM binary available. #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); @@ -49,16 +51,14 @@ include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); /// Runtime version. #[sp_version::runtime_version] pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("polymesh_mainnet"), - impl_name: create_runtime_str!("polymesh_mainnet"), + spec_name: Cow::Borrowed("polymesh_mainnet"), + impl_name: Cow::Borrowed("polymesh_mainnet"), authoring_version: 1, - // `spec_version: aaa_bbb_ccd` should match node version v`aaa.bbb.cc` - // N.B. `d` is unpinned from the binary version - spec_version: 7_003_003, + spec_version: 8_000_000, // `spec_version: aaa_bbb_ccd` should match node version `aaa.bbb.cc` impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, - state_version: 1, + system_version: 1, }; parameter_types! { @@ -135,6 +135,7 @@ parameter_types! { // Identity: pub const InitialPOLYX: Balance = 0; + pub const MaxGivenAuths: u32 = 1024; // Contracts: pub Schedule: pallet_contracts::Schedule = Default::default(); @@ -150,54 +151,39 @@ parameter_types! { // PIPs pub const MaxRefundsAndVotesPruned: u32 = 128; -} -/// 100% goes to the block author. -pub type DealWithFees = Author; - -// Staking: -pallet_staking_reward_curve::build! { - const REWARD_CURVE: PiecewiseLinear<'_> = curve!( - min_inflation: 0_025_000, - max_inflation: 0_140_000, - ideal_stake: 0_700_000, - falloff: 0_050_000, - max_piece_count: 40, - test_precision: 0_005_000, - ); -} -parameter_types! { + // Staking pub const SessionsPerEra: sp_staking::SessionIndex = 6; pub const BondingDuration: sp_staking::EraIndex = 28; pub const SlashDeferDuration: sp_staking::EraIndex = 14; // 1/2 the bonding duration. pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; - pub const MaxNominatorRewardedPerValidator: u32 = 1_024; - pub const OffendingValidatorsThreshold: Perbill = Perbill::from_percent(17); - pub const UnsignedPhase: BlockNumber = EPOCH_DURATION_IN_BLOCKS / 4; - pub const MaxIterations: u32 = 10; - pub const MaxValidatorPerIdentity: Permill = Permill::from_percent(33); - // 0.05%. The higher the value, the more strict solution acceptance becomes. - pub MinSolutionScoreBump: Perbill = Perbill::from_rational(5u32, 10_000); + + // Validators pub const MaxVariableInflationTotalIssuance: Balance = 1_000_000_000 * ONE_POLY; pub const FixedYearlyReward: Balance = 140_000_000 * ONE_POLY; - pub const MinimumBond: Balance = ONE_POLY; - /// We prioritize im-online heartbeats over election solution submission. - pub const StakingUnsignedPriority: TransactionPriority = TransactionPriority::max_value() / 2; + pub const MaxValidatorPerIdentity: Permill = Permill::from_percent(33); + // Babe + pub const MaxNominatorRewardedPerValidator: u32 = 1_024; pub const ReportLongevity: u64 = BondingDuration::get() as u64 * SessionsPerEra::get() as u64 * EpochDuration::get(); - pub const MaxGivenAuths: u32 = 1024; + // Election Provider Multi Phase + pub const UnsignedPhase: BlockNumber = EPOCH_DURATION_IN_BLOCKS / 4; - // State trie Migration - pub const MigrationSignedDepositPerItem: Balance = 0; - pub const MigrationSignedDepositBase: Balance = 0; - pub const MaxKeyLen: u32 = 2048; } -polymesh_runtime_common::misc_pallet_impls!(); - -type CddHandler = polymesh_runtime_common::fee_details::CddHandler; +// Staking +pallet_staking_reward_curve::build! { + const REWARD_CURVE: PiecewiseLinear<'_> = curve!( + min_inflation: 0_025_000, + max_inflation: 0_140_000, + ideal_stake: 0_700_000, + falloff: 0_050_000, + max_piece_count: 40, + test_precision: 0_005_000, + ); +} impl pallet_identity::Config for Runtime { type RuntimeEvent = RuntimeEvent; @@ -280,6 +266,7 @@ impl pallet_pips::Config for Runtime { type Scheduler = Scheduler; type SchedulerCall = RuntimeCall; type MaxRefundsAndVotesPruned = MaxRefundsAndVotesPruned; + type SchedulerPreimage = Preimage; } /// CddProviders instance of group @@ -295,98 +282,6 @@ impl pallet_group::Config for Runtime { type WeightInfo = polymesh_weights::pallet_group::SubstrateWeight; } -construct_runtime!( - pub struct Runtime { - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, - Indices: pallet_indices::{Pallet, Call, Storage, Config, Event} = 3, - Authorship: pallet_authorship = 4, - - // Balance: Genesis config dependencies: System. - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 5, - - // TransactionPayment: Genesis config dependencies: Balance. - TransactionPayment: pallet_transaction_payment::{Pallet, Call, Event, Storage} = 6, - - // Identity: Genesis config deps: Timestamp. - Identity: pallet_identity::{Pallet, Call, Storage, Event, Config} = 7, - - // Polymesh Committees - - // CddServiceProviders (group only): Genesis config deps: Identity - CddServiceProviders: pallet_group::::{Pallet, Call, Storage, Event, Config} = 8, - - // Governance Council (committee) - PolymeshCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config} = 9, - // CommitteeMembership: Genesis config deps: PolymeshCommittee, Identity. - CommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 10, - - // Technical Committee - TechnicalCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config} = 11, - // TechnicalCommitteeMembership: Genesis config deps: TechnicalCommittee, Identity - TechnicalCommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 12, - - // Upgrade Committee - UpgradeCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config} = 13, - // UpgradeCommitteeMembership: Genesis config deps: UpgradeCommittee, Identity - UpgradeCommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 14, - - MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, - - Validators: pallet_validators = 16, - Staking: pallet_staking = 17, - - Offences: pallet_offences::{Pallet, Storage, Event} = 18, - - // Session: Genesis config deps: System. - Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 19, - AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, - Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, - Historical: pallet_session_historical::{Pallet} = 22, - ImOnline: pallet_im_online::{Pallet, Call, Storage, Event, ValidateUnsigned, Config} = 23, - RandomnessCollectiveFlip: pallet_insecure_randomness_collective_flip::{Pallet, Storage} = 24, - - // Sudo. Usable initially. - // Sudo: pallet_sudo::{Pallet, Call, Config, Storage, Event} = 25, - - // Asset: Genesis config deps: Timestamp, - Asset: pallet_asset::{Pallet, Call, Storage, Config, Event} = 26, - CapitalDistribution: pallet_capital_distribution::{Pallet, Call, Storage, Event, Config} = 27, - Checkpoint: pallet_checkpoint::{Pallet, Call, Storage, Event, Config} = 28, - ComplianceManager: pallet_compliance_manager::{Pallet, Call, Storage, Event} = 29, - CorporateAction: pallet_corporate_actions::{Pallet, Call, Storage, Event, Config} = 30, - CorporateBallot: pallet_corporate_ballot::{Pallet, Call, Storage, Event, Config} = 31, - Permissions: pallet_permissions::{Pallet} = 32, - Pips: pallet_pips::{Pallet, Call, Storage, Event, Config} = 33, - Portfolio: pallet_portfolio::{Pallet, Call, Storage, Event, Config} = 34, - ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config} = 35, - Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event} = 36, - Settlement: pallet_settlement::{Pallet, Call, Storage, Event, Config} = 37, - Statistics: pallet_statistics::{Pallet, Call, Storage, Event, Config} = 38, - Sto: pallet_sto::{Pallet, Call, Storage, Event} = 39, - Treasury: pallet_treasury::{Pallet, Call, Event} = 40, - Utility: pallet_utility::{Pallet, Call, Storage, Event} = 41, - Base: pallet_base::{Pallet, Call, Event} = 42, - ExternalAgents: pallet_external_agents::{Pallet, Call, Storage, Event} = 43, - Relayer: pallet_relayer::{Pallet, Call, Storage, Event} = 44, - // Removed pallet_rewards = 45, - - // Contracts - Contracts: pallet_contracts::{Pallet, Call, Storage, Event} = 46, - PolymeshContracts: polymesh_contracts::{Pallet, Call, Storage, Event, Config} = 47, - - // Preimage register. Used by `pallet_scheduler`. - Preimage: pallet_preimage::{Pallet, Call, Storage, Event} = 48, - - Nft: pallet_nft::{Pallet, Call, Storage, Event} = 49, - - ElectionProviderMultiPhase: pallet_election_provider_multi_phase::{Pallet, Call, Storage, Event, ValidateUnsigned} = 50, - } -); - -polymesh_runtime_common::runtime_apis! {} - pub struct OnChainSeqPhragmen; impl frame_election_provider_support::onchain::Config for OnChainSeqPhragmen { @@ -398,6 +293,173 @@ impl frame_election_provider_support::onchain::Config for OnChainSeqPhragmen { type DataProvider = ::DataProvider; type WeightInfo = frame_election_provider_support::weights::SubstrateWeight; type MaxWinners = ::MaxWinners; - type VotersBound = polymesh_runtime_common::MaxOnChainElectingVoters; - type TargetsBound = polymesh_runtime_common::MaxOnChainElectableTargets; + type Bounds = polymesh_runtime_common::ElectionBoundsOnChain; } + +polymesh_runtime_common::misc_pallet_impls!(); + +#[frame_support::runtime] +mod runtime { + use super::*; + + #[runtime::runtime] + #[runtime::derive( + RuntimeCall, + RuntimeEvent, + RuntimeError, + RuntimeOrigin, + RuntimeFreezeReason, + RuntimeHoldReason, + RuntimeSlashReason + )] + pub struct Runtime; + + #[runtime::pallet_index(0)] + pub type System = frame_system::Pallet; + + #[runtime::pallet_index(1)] + pub type Babe = pallet_babe::Pallet; + + #[runtime::pallet_index(2)] + pub type Timestamp = pallet_timestamp::Pallet; + + #[runtime::pallet_index(3)] + pub type Indices = pallet_indices::Pallet; + + #[runtime::pallet_index(4)] + pub type Authorship = pallet_authorship::Pallet; + + #[runtime::pallet_index(5)] + pub type Balances = pallet_balances::Pallet; + + #[runtime::pallet_index(6)] + pub type TransactionPayment = pallet_transaction_payment::Pallet; + + #[runtime::pallet_index(7)] + pub type Identity = pallet_identity::Pallet; + + #[runtime::pallet_index(8)] + pub type CddServiceProviders = pallet_group::Pallet; + + #[runtime::pallet_index(9)] + pub type PolymeshCommittee = pallet_committee::Pallet; + + #[runtime::pallet_index(10)] + pub type CommitteeMembership = pallet_group::Pallet; + + #[runtime::pallet_index(11)] + pub type TechnicalCommittee = pallet_committee::Pallet; + + #[runtime::pallet_index(12)] + pub type TechnicalCommitteeMembership = pallet_group::Pallet; + + #[runtime::pallet_index(13)] + pub type UpgradeCommittee = pallet_committee::Pallet; + + #[runtime::pallet_index(14)] + pub type UpgradeCommitteeMembership = pallet_group::Pallet; + + #[runtime::pallet_index(15)] + pub type MultiSig = pallet_multisig::Pallet; + + #[runtime::pallet_index(16)] + pub type Validators = pallet_validators::Pallet; + + #[runtime::pallet_index(17)] + pub type Staking = pallet_staking::Pallet; + + #[runtime::pallet_index(18)] + pub type Offences = pallet_offences::Pallet; + + #[runtime::pallet_index(19)] + pub type Session = pallet_session::Pallet; + + #[runtime::pallet_index(20)] + pub type AuthorityDiscovery = pallet_authority_discovery::Pallet; + + #[runtime::pallet_index(21)] + pub type Grandpa = pallet_grandpa::Pallet; + + #[runtime::pallet_index(22)] + pub type Historical = pallet_session_historical::Pallet; + + #[runtime::pallet_index(23)] + pub type ImOnline = pallet_im_online::Pallet; + + #[runtime::pallet_index(24)] + pub type RandomnessCollectiveFlip = pallet_insecure_randomness_collective_flip::Pallet; + + #[runtime::pallet_index(26)] + pub type Asset = pallet_asset::Pallet; + + #[runtime::pallet_index(27)] + pub type CapitalDistribution = pallet_capital_distribution::Pallet; + + #[runtime::pallet_index(28)] + pub type Checkpoint = pallet_checkpoint::Pallet; + + #[runtime::pallet_index(29)] + pub type ComplianceManager = pallet_compliance_manager::Pallet; + + #[runtime::pallet_index(30)] + pub type CorporateAction = pallet_corporate_actions::Pallet; + + #[runtime::pallet_index(31)] + pub type CorporateBallot = pallet_corporate_ballot::Pallet; + + #[runtime::pallet_index(32)] + pub type Permissions = pallet_permissions::Pallet; + + #[runtime::pallet_index(33)] + pub type Pips = pallet_pips::Pallet; + + #[runtime::pallet_index(34)] + pub type Portfolio = pallet_portfolio::Pallet; + + #[runtime::pallet_index(35)] + pub type ProtocolFee = pallet_protocol_fee::Pallet; + + #[runtime::pallet_index(36)] + pub type Scheduler = pallet_scheduler::Pallet; + + #[runtime::pallet_index(37)] + pub type Settlement = pallet_settlement::Pallet; + + #[runtime::pallet_index(38)] + pub type Statistics = pallet_statistics::Pallet; + + #[runtime::pallet_index(39)] + pub type Sto = pallet_sto::Pallet; + + #[runtime::pallet_index(40)] + pub type Treasury = pallet_treasury::Pallet; + + #[runtime::pallet_index(41)] + pub type Utility = pallet_utility::Pallet; + + #[runtime::pallet_index(42)] + pub type Base = pallet_base::Pallet; + + #[runtime::pallet_index(43)] + pub type ExternalAgents = pallet_external_agents::Pallet; + + #[runtime::pallet_index(44)] + pub type Relayer = pallet_relayer::Pallet; + + #[runtime::pallet_index(46)] + pub type Contracts = pallet_contracts::Pallet; + + #[runtime::pallet_index(47)] + pub type PolymeshContracts = polymesh_contracts::Pallet; + + #[runtime::pallet_index(48)] + pub type Preimage = pallet_preimage::Pallet; + + #[runtime::pallet_index(49)] + pub type Nft = pallet_nft::Pallet; + + #[runtime::pallet_index(50)] + pub type ElectionProviderMultiPhase = pallet_election_provider_multi_phase::Pallet; +} + +polymesh_runtime_common::runtime_apis! {} diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index 080eba4c94..bd6eadf559 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -9,18 +9,16 @@ use sp_version::NativeVersion; use codec::Encode; use core::convert::TryFrom; +use frame_support::parameter_types; use frame_support::traits::KeyOwnerProofSystem; use frame_support::weights::Weight; pub use frame_support::StorageValue; -use frame_support::{construct_runtime, parameter_types}; pub use frame_system::limits::BlockWeights; pub use frame_system::Call as SystemCall; use sp_runtime::curve::PiecewiseLinear; -use sp_runtime::traits::{ - BlakeTwo256, Block as BlockT, Extrinsic, NumberFor, StaticLookup, Verify, -}; +use sp_runtime::traits::{BlakeTwo256, Block as BlockT, NumberFor, StaticLookup, Verify}; use sp_runtime::transaction_validity::TransactionPriority; -use sp_runtime::{create_runtime_str, Perbill, Permill}; +use sp_runtime::{Cow, Perbill, Permill}; use sp_std::prelude::*; use sp_version::RuntimeVersion; @@ -44,6 +42,10 @@ use polymesh_runtime_common::{AvailableBlockRatio, MaximumBlockWeight}; use crate::constants::time::*; +/// 100% goes to the block author. +type DealWithFees = Author; +type CddHandler = polymesh_runtime_common::fee_details::CddHandler; + // Make the WASM binary available. #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); @@ -51,16 +53,14 @@ include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); /// Runtime version. #[sp_version::runtime_version] pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("polymesh_testnet"), - impl_name: create_runtime_str!("polymesh_testnet"), + spec_name: Cow::Borrowed("polymesh_testnet"), + impl_name: Cow::Borrowed("polymesh_testnet"), authoring_version: 1, - // `spec_version: aaa_bbb_ccd` should match node version v`aaa.bbb.cc` - // N.B. `d` is unpinned from the binary version - spec_version: 7_003_003, + spec_version: 8_000_000, // `spec_version: aaa_bbb_ccd` should match node version `aaa.bbb.cc` impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, - state_version: 1, + system_version: 1, }; parameter_types! { @@ -138,6 +138,7 @@ parameter_types! { // Identity: pub const InitialPOLYX: Balance = 100_000 * ONE_POLY; + pub const MaxGivenAuths: u32 = 1024; // Contracts: pub Schedule: pallet_contracts::Schedule = Default::default(); @@ -158,49 +159,38 @@ parameter_types! { // PIPs pub const MaxRefundsAndVotesPruned: u32 = 128; -} - -/// 100% goes to the block author. -pub type DealWithFees = Author; -// Staking: -pallet_staking_reward_curve::build! { - const REWARD_CURVE: PiecewiseLinear<'_> = curve!( - min_inflation: 0_025_000, - max_inflation: 0_140_000, - ideal_stake: 0_700_000, - falloff: 0_050_000, - max_piece_count: 40, - test_precision: 0_005_000, - ); -} -parameter_types! { + // Staking pub const SessionsPerEra: sp_staking::SessionIndex = 6; pub const BondingDuration: sp_staking::EraIndex = 28; pub const SlashDeferDuration: sp_staking::EraIndex = 14; // 1/2 the bonding duration. pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; - pub const MaxNominatorRewardedPerValidator: u32 = 1_024; - pub const OffendingValidatorsThreshold: Perbill = Perbill::from_percent(17); - pub const UnsignedPhase: BlockNumber = EPOCH_DURATION_IN_BLOCKS / 4; - pub const MaxIterations: u32 = 10; - pub const MaxValidatorPerIdentity: Permill = Permill::from_percent(33); - // 0.05%. The higher the value, the more strict solution acceptance becomes. - pub MinSolutionScoreBump: Perbill = Perbill::from_rational(5u32, 10_000); + + // Validators pub const MaxVariableInflationTotalIssuance: Balance = 1_000_000_000 * ONE_POLY; pub const FixedYearlyReward: Balance = 140_000_000 * ONE_POLY; - pub const MinimumBond: Balance = ONE_POLY; - /// We prioritize im-online heartbeats over election solution submission. - pub const StakingUnsignedPriority: TransactionPriority = TransactionPriority::max_value() / 2; + pub const MaxValidatorPerIdentity: Permill = Permill::from_percent(33); + // Babe + pub const MaxNominatorRewardedPerValidator: u32 = 1_024; pub const ReportLongevity: u64 = BondingDuration::get() as u64 * SessionsPerEra::get() as u64 * EpochDuration::get(); - pub MaxGivenAuths: u32 = 1024; + // Election Provider Multi Phase + pub const UnsignedPhase: BlockNumber = EPOCH_DURATION_IN_BLOCKS / 4; } -polymesh_runtime_common::misc_pallet_impls!(); - -type CddHandler = polymesh_runtime_common::fee_details::CddHandler; +// Staking: +pallet_staking_reward_curve::build! { + const REWARD_CURVE: PiecewiseLinear<'_> = curve!( + min_inflation: 0_025_000, + max_inflation: 0_140_000, + ideal_stake: 0_700_000, + falloff: 0_050_000, + max_piece_count: 40, + test_precision: 0_005_000, + ); +} impl pallet_identity::Config for Runtime { type RuntimeEvent = RuntimeEvent; @@ -283,6 +273,7 @@ impl pallet_pips::Config for Runtime { type Scheduler = Scheduler; type SchedulerCall = RuntimeCall; type MaxRefundsAndVotesPruned = MaxRefundsAndVotesPruned; + type SchedulerPreimage = Preimage; } /// CddProviders instance of group @@ -298,97 +289,185 @@ impl pallet_group::Config for Runtime { type WeightInfo = polymesh_weights::pallet_group::SubstrateWeight; } -pub type AllModulesExported = AllPalletsWithSystem; - -construct_runtime!( - pub struct Runtime { - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, - Indices: pallet_indices::{Pallet, Call, Storage, Config, Event} = 3, - Authorship: pallet_authorship = 4, - - // Balance: Genesis config dependencies: System. - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 5, - - // TransactionPayment: Genesis config dependencies: Balance. - TransactionPayment: pallet_transaction_payment::{Pallet, Call, Event, Storage} = 6, - - // Identity: Genesis config deps: Timestamp. - Identity: pallet_identity::{Pallet, Call, Storage, Event, Config} = 7, - - // Polymesh Committees - - // CddServiceProviders (group only): Genesis config deps: Identity - CddServiceProviders: pallet_group::::{Pallet, Call, Storage, Event, Config} = 8, - - // Governance Council (committee) - PolymeshCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config} = 9, - // CommitteeMembership: Genesis config deps: PolymeshCommittee, Identity. - CommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 10, - - // Technical Committee - TechnicalCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config} = 11, - // TechnicalCommitteeMembership: Genesis config deps: TechnicalCommittee, Identity - TechnicalCommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 12, - - // Upgrade Committee - UpgradeCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config} = 13, - // UpgradeCommitteeMembership: Genesis config deps: UpgradeCommittee, Identity - UpgradeCommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 14, - - MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, - - Validators: pallet_validators = 16, - Staking: pallet_staking = 17, - - Offences: pallet_offences::{Pallet, Storage, Event} = 18, - - // Session: Genesis config deps: System. - Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 19, - AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, - Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, - Historical: pallet_session_historical::{Pallet} = 22, - ImOnline: pallet_im_online::{Pallet, Call, Storage, Event, ValidateUnsigned, Config} = 23, - RandomnessCollectiveFlip: pallet_insecure_randomness_collective_flip::{Pallet, Storage} = 24, - - // Sudo. Usable initially. - // Sudo: pallet_sudo::{Pallet, Call, Config, Storage, Event} = 25, - - // Asset: Genesis config deps: Timestamp, - Asset: pallet_asset::{Pallet, Call, Storage, Config, Event} = 26, - CapitalDistribution: pallet_capital_distribution::{Pallet, Call, Storage, Event, Config} = 27, - Checkpoint: pallet_checkpoint::{Pallet, Call, Storage, Event, Config} = 28, - ComplianceManager: pallet_compliance_manager::{Pallet, Call, Storage, Event} = 29, - CorporateAction: pallet_corporate_actions::{Pallet, Call, Storage, Event, Config} = 30, - CorporateBallot: pallet_corporate_ballot::{Pallet, Call, Storage, Event, Config} = 31, - Permissions: pallet_permissions::{Pallet} = 32, - Pips: pallet_pips::{Pallet, Call, Storage, Event, Config} = 33, - Portfolio: pallet_portfolio::{Pallet, Call, Storage, Event, Config} = 34, - ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config} = 35, - Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event} = 36, - Settlement: pallet_settlement::{Pallet, Call, Storage, Event, Config} = 37, - Statistics: pallet_statistics::{Pallet, Call, Storage, Event, Config} = 38, - Sto: pallet_sto::{Pallet, Call, Storage, Event} = 39, - Treasury: pallet_treasury::{Pallet, Call, Event} = 40, - Utility: pallet_utility::{Pallet, Call, Storage, Event} = 41, - Base: pallet_base::{Pallet, Call, Event} = 42, - ExternalAgents: pallet_external_agents::{Pallet, Call, Storage, Event} = 43, - Relayer: pallet_relayer::{Pallet, Call, Storage, Event} = 44, - // Removed pallet_rewards = 45, - - // Contracts - Contracts: pallet_contracts::{Pallet, Call, Storage, Event} = 46, - PolymeshContracts: polymesh_contracts::{Pallet, Call, Storage, Event, Config} = 47, - - // Preimage register. Used by `pallet_scheduler`. - Preimage: pallet_preimage::{Pallet, Call, Storage, Event} = 48, - - Nft: pallet_nft::{Pallet, Call, Storage, Event} = 49, - - ElectionProviderMultiPhase: pallet_election_provider_multi_phase::{Pallet, Call, Storage, Event, ValidateUnsigned} = 50, - } -); +pub struct OnChainSeqPhragmen; + +impl frame_election_provider_support::onchain::Config for OnChainSeqPhragmen { + type System = Runtime; + type Solver = frame_election_provider_support::SequentialPhragmen< + polymesh_primitives::AccountId, + pallet_election_provider_multi_phase::SolutionAccuracyOf, + >; + type DataProvider = ::DataProvider; + type WeightInfo = frame_election_provider_support::weights::SubstrateWeight; + type MaxWinners = ::MaxWinners; + type Bounds = polymesh_runtime_common::ElectionBoundsOnChain; +} + +polymesh_runtime_common::misc_pallet_impls!(); + +#[frame_support::runtime] +mod runtime { + use super::*; + + #[runtime::runtime] + #[runtime::derive( + RuntimeCall, + RuntimeEvent, + RuntimeError, + RuntimeOrigin, + RuntimeFreezeReason, + RuntimeHoldReason, + RuntimeSlashReason + )] + pub struct Runtime; + + #[runtime::pallet_index(0)] + pub type System = frame_system::Pallet; + + #[runtime::pallet_index(1)] + pub type Babe = pallet_babe::Pallet; + + #[runtime::pallet_index(2)] + pub type Timestamp = pallet_timestamp::Pallet; + + #[runtime::pallet_index(3)] + pub type Indices = pallet_indices::Pallet; + + #[runtime::pallet_index(4)] + pub type Authorship = pallet_authorship::Pallet; + + #[runtime::pallet_index(5)] + pub type Balances = pallet_balances::Pallet; + + #[runtime::pallet_index(6)] + pub type TransactionPayment = pallet_transaction_payment::Pallet; + + #[runtime::pallet_index(7)] + pub type Identity = pallet_identity::Pallet; + + #[runtime::pallet_index(8)] + pub type CddServiceProviders = pallet_group::Pallet; + + #[runtime::pallet_index(9)] + pub type PolymeshCommittee = pallet_committee::Pallet; + + #[runtime::pallet_index(10)] + pub type CommitteeMembership = pallet_group::Pallet; + + #[runtime::pallet_index(11)] + pub type TechnicalCommittee = pallet_committee::Pallet; + + #[runtime::pallet_index(12)] + pub type TechnicalCommitteeMembership = pallet_group::Pallet; + + #[runtime::pallet_index(13)] + pub type UpgradeCommittee = pallet_committee::Pallet; + + #[runtime::pallet_index(14)] + pub type UpgradeCommitteeMembership = pallet_group::Pallet; + + #[runtime::pallet_index(15)] + pub type MultiSig = pallet_multisig::Pallet; + + #[runtime::pallet_index(16)] + pub type Validators = pallet_validators::Pallet; + + #[runtime::pallet_index(17)] + pub type Staking = pallet_staking::Pallet; + + #[runtime::pallet_index(18)] + pub type Offences = pallet_offences::Pallet; + + #[runtime::pallet_index(19)] + pub type Session = pallet_session::Pallet; + + #[runtime::pallet_index(20)] + pub type AuthorityDiscovery = pallet_authority_discovery::Pallet; + + #[runtime::pallet_index(21)] + pub type Grandpa = pallet_grandpa::Pallet; + + #[runtime::pallet_index(22)] + pub type Historical = pallet_session_historical::Pallet; + + #[runtime::pallet_index(23)] + pub type ImOnline = pallet_im_online::Pallet; + + #[runtime::pallet_index(24)] + pub type RandomnessCollectiveFlip = pallet_insecure_randomness_collective_flip::Pallet; + + #[runtime::pallet_index(26)] + pub type Asset = pallet_asset::Pallet; + + #[runtime::pallet_index(27)] + pub type CapitalDistribution = pallet_capital_distribution::Pallet; + + #[runtime::pallet_index(28)] + pub type Checkpoint = pallet_checkpoint::Pallet; + + #[runtime::pallet_index(29)] + pub type ComplianceManager = pallet_compliance_manager::Pallet; + + #[runtime::pallet_index(30)] + pub type CorporateAction = pallet_corporate_actions::Pallet; + + #[runtime::pallet_index(31)] + pub type CorporateBallot = pallet_corporate_ballot::Pallet; + + #[runtime::pallet_index(32)] + pub type Permissions = pallet_permissions::Pallet; + + #[runtime::pallet_index(33)] + pub type Pips = pallet_pips::Pallet; + + #[runtime::pallet_index(34)] + pub type Portfolio = pallet_portfolio::Pallet; + + #[runtime::pallet_index(35)] + pub type ProtocolFee = pallet_protocol_fee::Pallet; + + #[runtime::pallet_index(36)] + pub type Scheduler = pallet_scheduler::Pallet; + + #[runtime::pallet_index(37)] + pub type Settlement = pallet_settlement::Pallet; + + #[runtime::pallet_index(38)] + pub type Statistics = pallet_statistics::Pallet; + + #[runtime::pallet_index(39)] + pub type Sto = pallet_sto::Pallet; + + #[runtime::pallet_index(40)] + pub type Treasury = pallet_treasury::Pallet; + + #[runtime::pallet_index(41)] + pub type Utility = pallet_utility::Pallet; + + #[runtime::pallet_index(42)] + pub type Base = pallet_base::Pallet; + + #[runtime::pallet_index(43)] + pub type ExternalAgents = pallet_external_agents::Pallet; + + #[runtime::pallet_index(44)] + pub type Relayer = pallet_relayer::Pallet; + + #[runtime::pallet_index(46)] + pub type Contracts = pallet_contracts::Pallet; + + #[runtime::pallet_index(47)] + pub type PolymeshContracts = polymesh_contracts::Pallet; + + #[runtime::pallet_index(48)] + pub type Preimage = pallet_preimage::Pallet; + + #[runtime::pallet_index(49)] + pub type Nft = pallet_nft::Pallet; + + #[runtime::pallet_index(50)] + pub type ElectionProviderMultiPhase = pallet_election_provider_multi_phase::Pallet; +} polymesh_runtime_common::runtime_apis! {} @@ -406,18 +485,3 @@ impl DryRunRuntimeUpgrade for Runtime { ::on_runtime_upgrade() } } - -pub struct OnChainSeqPhragmen; - -impl frame_election_provider_support::onchain::Config for OnChainSeqPhragmen { - type System = Runtime; - type Solver = frame_election_provider_support::SequentialPhragmen< - polymesh_primitives::AccountId, - pallet_election_provider_multi_phase::SolutionAccuracyOf, - >; - type DataProvider = ::DataProvider; - type WeightInfo = frame_election_provider_support::weights::SubstrateWeight; - type MaxWinners = ::MaxWinners; - type VotersBound = polymesh_runtime_common::MaxOnChainElectingVoters; - type TargetsBound = polymesh_runtime_common::MaxOnChainElectableTargets; -} From 4037d247054de0135cf02d39d9af18bf51993b9d Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 22 Aug 2025 15:17:45 -0300 Subject: [PATCH 56/97] Fix rpc-protocol-fee - part I --- Cargo.lock | 615 +++++++++--------- metadata-tools/Cargo.toml | 20 +- pallets/protocol-fee/rpc/Cargo.toml | 5 +- .../protocol-fee/rpc/runtime-api/Cargo.toml | 1 + .../protocol-fee/rpc/runtime-api/src/lib.rs | 5 +- pallets/protocol-fee/rpc/src/lib.rs | 27 +- 6 files changed, 348 insertions(+), 325 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2b50aa5390..e264e0f095 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -116,9 +116,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -146,29 +146,29 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "approx" @@ -190,7 +190,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -258,7 +258,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "itertools 0.13.0", "num-bigint", "num-integer", @@ -335,7 +335,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -361,7 +361,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -389,7 +389,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -436,7 +436,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -547,7 +547,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", ] @@ -559,7 +559,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure 0.13.2", ] @@ -571,7 +571,7 @@ checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure 0.13.2", ] @@ -583,7 +583,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -663,11 +663,11 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "event-listener-strategy", "pin-project-lite", ] @@ -696,7 +696,7 @@ dependencies = [ "async-task", "blocking", "cfg-if", - "event-listener 5.4.0", + "event-listener 5.4.1", "futures-lite", "rustix 1.0.8", ] @@ -727,13 +727,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -889,7 +889,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -960,9 +960,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" [[package]] name = "bitvec" @@ -1135,9 +1135,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" [[package]] name = "byteorder" @@ -1173,9 +1173,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0" dependencies = [ "serde", ] @@ -1205,9 +1205,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.30" +version = "1.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" dependencies = [ "jobserver", "libc", @@ -1240,9 +1240,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -1362,9 +1362,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.41" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" +checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" dependencies = [ "clap_builder", "clap_derive", @@ -1372,9 +1372,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.41" +version = "4.5.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" +checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" dependencies = [ "anstream", "anstyle", @@ -1385,14 +1385,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.41" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1936,14 +1936,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "cxx" -version = "1.0.161" +version = "1.0.168" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3523cc02ad831111491dd64b27ad999f1ae189986728e477604e61b81f828df" +checksum = "7aa144b12f11741f0dab5b4182896afad46faa0598b6a061f7b9d17a21837ba7" dependencies = [ "cc", "cxxbridge-cmd", @@ -1955,9 +1955,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.161" +version = "1.0.168" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212b754247a6f07b10fa626628c157593f0abf640a3dd04cce2760eca970f909" +checksum = "12d3cbb84fb003242941c231b45ca9417e786e66e94baa39584bd99df3a270b6" dependencies = [ "cc", "codespan-reporting", @@ -1965,40 +1965,40 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "cxxbridge-cmd" -version = "1.0.161" +version = "1.0.168" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f426a20413ec2e742520ba6837c9324b55ffac24ead47491a6e29f933c5b135a" +checksum = "3fa36b7b249d43f67a3f54bd65788e35e7afe64bbc671396387a48b3e8aaea94" dependencies = [ "clap", "codespan-reporting", "indexmap 2.10.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "cxxbridge-flags" -version = "1.0.161" +version = "1.0.168" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258b6069020b4e5da6415df94a50ee4f586a6c38b037a180e940a43d06a070d" +checksum = "77707c70f6563edc5429618ca34a07241b75ebab35bd01d46697c75d58f8ddfe" [[package]] name = "cxxbridge-macro" -version = "1.0.161" +version = "1.0.168" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8dec184b52be5008d6eaf7e62fc1802caf1ad1227d11b3b7df2c409c7ffc3f4" +checksum = "ede6c0fb7e318f0a11799b86ee29dcf17b9be2960bd379a6c38e1a96a6010fff" dependencies = [ "indexmap 2.10.0", "proc-macro2", "quote", "rustversion", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2022,7 +2022,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2033,7 +2033,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2072,7 +2072,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" dependencies = [ "data-encoding", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2082,6 +2082,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", + "pem-rfc7468", "zeroize", ] @@ -2141,18 +2142,18 @@ checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "derive-where" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510c292c8cf384b1a340b816a9a6cf2599eb8f566a44949024af88418000c50b" +checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2165,7 +2166,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2277,7 +2278,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2301,7 +2302,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.104", + "syn 2.0.106", "termcolor", "toml 0.8.23", "walkdir", @@ -2343,14 +2344,14 @@ checksum = "7e8671d54058979a37a26f3511fbf8d198ba1aa35ffb202c42587d918d77213a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" @@ -2394,16 +2395,17 @@ dependencies = [ [[package]] name = "ed25519-zebra" -version = "4.0.3" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +checksum = "0017d969298eec91e3db7a2985a8cab4df6341d86e6f3a6f5878b13fb7846bc9" dependencies = [ "curve25519-dalek", "ed25519", - "hashbrown 0.14.5", - "hex", + "hashbrown 0.15.5", + "pkcs8", "rand_core 0.6.4", "sha2 0.10.9", + "subtle 2.6.1", "zeroize", ] @@ -2416,7 +2418,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2460,7 +2462,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2480,7 +2482,7 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2539,9 +2541,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -2554,7 +2556,7 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "pin-project-lite", ] @@ -2579,7 +2581,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2621,7 +2623,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2672,14 +2674,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -2743,9 +2745,9 @@ dependencies = [ [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -2869,7 +2871,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2984,7 +2986,7 @@ dependencies = [ "proc-macro2", "quote", "sp-crypto-hashing 0.1.0", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2995,7 +2997,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3004,7 +3006,7 @@ version = "12.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3143,9 +3145,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand", "futures-core", @@ -3162,7 +3164,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3223,9 +3225,9 @@ dependencies = [ [[package]] name = "generator" -version = "0.8.5" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" +checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2" dependencies = [ "cc", "cfg-if", @@ -3346,9 +3348,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "governor" @@ -3402,9 +3404,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", @@ -3476,9 +3478,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", @@ -3596,7 +3598,7 @@ dependencies = [ "ipnet", "once_cell", "rand 0.8.5", - "socket2", + "socket2 0.5.10", "thiserror 1.0.69", "tinyvec", "tokio", @@ -3622,7 +3624,7 @@ dependencies = [ "once_cell", "rand 0.9.2", "ring 0.17.14", - "thiserror 2.0.12", + "thiserror 2.0.16", "tinyvec", "tokio", "tracing", @@ -3666,7 +3668,7 @@ dependencies = [ "rand 0.9.2", "resolv-conf", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tracing", ] @@ -3828,20 +3830,22 @@ dependencies = [ [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", - "h2 0.4.11", + "futures-core", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "httparse", "httpdate", "itoa 1.0.15", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -3854,7 +3858,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http 1.3.1", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "log", "rustls", @@ -3867,9 +3871,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" dependencies = [ "bytes", "futures-channel", @@ -3877,10 +3881,10 @@ dependencies = [ "futures-util", "http 1.3.1", "http-body 1.0.1", - "hyper 1.6.0", + "hyper 1.7.0", "libc", "pin-project-lite", - "socket2", + "socket2 0.6.0", "tokio", "tower-service", "tracing", @@ -4004,9 +4008,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -4112,7 +4116,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4152,7 +4156,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -4201,11 +4205,11 @@ dependencies = [ [[package]] name = "io-uring" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "cfg-if", "libc", ] @@ -4222,7 +4226,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2", + "socket2 0.5.10", "widestring", "windows-sys 0.48.0", "winreg", @@ -4304,9 +4308,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jam-codec" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d72f2fb8cfd27f6c52ea7d0528df594f7f2ed006feac153e9393ec567aafea98" +checksum = "cb948eace373d99de60501a02fb17125d30ac632570de20dccc74370cdd611b9" dependencies = [ "arrayvec 0.7.6", "bitvec", @@ -4320,14 +4324,14 @@ dependencies = [ [[package]] name = "jam-codec-derive" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09985146f40378e13af626964ac9c206d9d9b67c40c70805898d9954f709bcf5" +checksum = "319af585c4c8a6b5552a52b7787a1ab3e4d59df7614190b1f85b9b842488789d" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4447,7 +4451,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4460,7 +4464,7 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "jsonrpsee-core", "jsonrpsee-types", @@ -4594,9 +4598,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.174" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libloading" @@ -4605,7 +4609,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.53.2", + "windows-targets 0.53.3", ] [[package]] @@ -4753,7 +4757,7 @@ dependencies = [ "quick-protobuf", "rand 0.8.5", "sha2 0.10.9", - "thiserror 2.0.12", + "thiserror 2.0.16", "tracing", "zeroize", ] @@ -4802,7 +4806,7 @@ dependencies = [ "libp2p-swarm", "rand 0.8.5", "smallvec", - "socket2", + "socket2 0.5.10", "tokio", "tracing", "void", @@ -4888,7 +4892,7 @@ dependencies = [ "rand 0.8.5", "ring 0.17.14", "rustls", - "socket2", + "socket2 0.5.10", "thiserror 1.0.69", "tokio", "tracing", @@ -4947,7 +4951,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4962,7 +4966,7 @@ dependencies = [ "libc", "libp2p-core", "libp2p-identity", - "socket2", + "socket2 0.5.10", "tokio", "tracing", ] @@ -5035,18 +5039,18 @@ dependencies = [ "thiserror 1.0.69", "tracing", "yamux 0.12.1", - "yamux 0.13.5", + "yamux 0.13.6", ] [[package]] name = "libredox" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4488594b9328dee448adb906d8b126d9b7deb7cf5c22161ee591610bb1be83c0" +checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "libc", - "redox_syscall 0.5.15", + "redox_syscall 0.5.17", ] [[package]] @@ -5222,8 +5226,8 @@ dependencies = [ "simple-dns", "smallvec", "snow", - "socket2", - "thiserror 2.0.12", + "socket2 0.5.10", + "thiserror 2.0.16", "tokio", "tokio-stream", "tokio-tungstenite", @@ -5234,7 +5238,7 @@ dependencies = [ "url", "x25519-dalek", "x509-parser 0.17.0", - "yamux 0.13.5", + "yamux 0.13.6", "yasna", "zeroize", ] @@ -5274,7 +5278,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -5377,9 +5381,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" dependencies = [ "libc", ] @@ -5488,7 +5492,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5704,7 +5708,7 @@ dependencies = [ "log", "netlink-packet-core", "netlink-sys", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -5854,7 +5858,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6247,7 +6251,7 @@ version = "23.0.3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6658,7 +6662,6 @@ dependencies = [ "frame-system", "jsonrpsee", "node-rpc", - "pallet-protocol-fee-rpc-runtime-api", "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", @@ -6796,7 +6799,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7064,7 +7067,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7122,7 +7125,7 @@ checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.15", + "redox_syscall 0.5.17", "smallvec", "windows-targets 0.52.6", ] @@ -7177,11 +7180,20 @@ dependencies = [ "serde", ] +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" @@ -7190,7 +7202,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" dependencies = [ "memchr", - "thiserror 2.0.12", + "thiserror 2.0.16", "ucd-trie", ] @@ -7214,7 +7226,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7265,7 +7277,7 @@ dependencies = [ "polkavm-common", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8023,12 +8035,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.35" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8123,7 +8135,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8140,14 +8152,14 @@ checksum = "75eea531cfcd120e0851a3f8aed42c4841f78c889eefafd96339c72677ae42c3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -8186,7 +8198,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8225,7 +8237,7 @@ dependencies = [ "prost 0.13.5", "prost-types", "regex", - "syn 2.0.104", + "syn 2.0.106", "tempfile", ] @@ -8239,7 +8251,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8252,7 +8264,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8330,8 +8342,8 @@ dependencies = [ "quinn-udp", "rustc-hash 2.1.1", "rustls", - "socket2", - "thiserror 2.0.12", + "socket2 0.5.10", + "thiserror 2.0.16", "tokio", "tracing", "web-time", @@ -8352,7 +8364,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.16", "tinyvec", "tracing", "web-time", @@ -8367,7 +8379,7 @@ dependencies = [ "cfg_aliases 0.2.1", "libc", "once_cell", - "socket2", + "socket2 0.5.10", "tracing", "windows-sys 0.59.0", ] @@ -8518,7 +8530,7 @@ version = "11.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", ] [[package]] @@ -8529,9 +8541,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -8539,9 +8551,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -8570,11 +8582,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.15" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", ] [[package]] @@ -8605,7 +8617,7 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8788,9 +8800,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -8857,7 +8869,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "errno", "libc", "linux-raw-sys 0.4.15", @@ -8870,7 +8882,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "errno", "libc", "linux-raw-sys 0.9.4", @@ -8879,9 +8891,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.29" +version = "0.23.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" dependencies = [ "log", "once_cell", @@ -8964,9 +8976,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ruzstd" @@ -9108,7 +9120,7 @@ version = "43.0.0" dependencies = [ "array-bytes", "docify", - "memmap2 0.9.7", + "memmap2 0.9.8", "parity-scale-codec", "sc-chain-spec-derive", "sc-client-api", @@ -9134,7 +9146,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -9691,7 +9703,7 @@ dependencies = [ "futures", "futures-timer", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-rustls", "hyper-util", "num_cpus", @@ -9783,7 +9795,7 @@ dependencies = [ "governor", "http 1.3.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "ip_network", "jsonrpsee", "log", @@ -10004,7 +10016,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -10103,7 +10115,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -10131,7 +10143,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -10157,7 +10169,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -10179,7 +10191,7 @@ dependencies = [ "proc-macro2", "quote", "scale-info", - "syn 2.0.104", + "syn 2.0.106", "thiserror 1.0.69", ] @@ -10256,9 +10268,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scratch" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f6280af86e5f559536da57a45ebc84948833b3bee313a7dd25232e09c878a52" +checksum = "d68f2ec51b097e4c1a75b681a8bec621909b5e91f15bb7b840c4f2f7b01148b2" [[package]] name = "scrypt" @@ -10363,11 +10375,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -10443,14 +10455,14 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.141" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ "itoa", "ryu", @@ -10532,9 +10544,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -10568,7 +10580,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dee851d0e5e7af3721faea1843e8015e820a234f81fda3dea9247e15bac9a86a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", ] [[package]] @@ -10591,9 +10603,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slice-group-by" @@ -10642,7 +10654,7 @@ dependencies = [ "derive_more 0.99.20", "ed25519-zebra", "either", - "event-listener 5.4.0", + "event-listener 5.4.1", "fnv", "futures-lite", "futures-util", @@ -10691,7 +10703,7 @@ dependencies = [ "bs58", "derive_more 0.99.20", "either", - "event-listener 5.4.0", + "event-listener 5.4.1", "fnv", "futures-channel", "futures-lite", @@ -10747,6 +10759,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "soketto" version = "0.8.1" @@ -10794,7 +10816,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11008,7 +11030,7 @@ version = "0.1.0" dependencies = [ "quote", "sp-crypto-hashing 0.1.0", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11025,7 +11047,7 @@ version = "14.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11224,7 +11246,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11396,7 +11418,7 @@ dependencies = [ "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11615,7 +11637,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11657,7 +11679,7 @@ name = "substrate-prometheus-endpoint" version = "0.17.2" dependencies = [ "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "log", "prometheus", @@ -11750,7 +11772,7 @@ dependencies = [ "scale-info", "scale-typegen", "subxt-metadata", - "syn 2.0.104", + "syn 2.0.106", "thiserror 1.0.69", ] @@ -11813,7 +11835,7 @@ dependencies = [ "scale-typegen", "subxt-codegen", "subxt-utils-fetchmetadata", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11883,9 +11905,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.104" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -11912,7 +11934,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11921,7 +11943,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -11956,15 +11978,15 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", "rustix 1.0.8", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -11978,12 +12000,12 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" +checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ "rustix 1.0.8", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -12003,11 +12025,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.16", ] [[package]] @@ -12018,18 +12040,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12128,9 +12150,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -12143,9 +12165,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.46.1" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", @@ -12156,9 +12178,9 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "slab", - "socket2", + "socket2 0.6.0", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -12169,7 +12191,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12212,9 +12234,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", @@ -12295,7 +12317,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "bytes", "http 1.3.1", "http-body 1.0.1", @@ -12337,7 +12359,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12378,7 +12400,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12460,7 +12482,7 @@ dependencies = [ "rustls", "rustls-pki-types", "sha1", - "thiserror 2.0.12", + "thiserror 2.0.16", "url", "utf-8", ] @@ -12598,9 +12620,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "137a3c834eaf7139b73688502f3f1141a0337c5d8e4d9b536f9b8c796e26a7c4" dependencies = [ "form_urlencoded", "idna", @@ -12621,9 +12643,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" dependencies = [ "getrandom 0.3.3", "js-sys", @@ -12793,7 +12815,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-shared", ] @@ -12828,7 +12850,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -12844,12 +12866,12 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.235.0" +version = "0.237.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3bc393c395cb621367ff02d854179882b9a351b4e0c93d1397e6090b53a5c2a" +checksum = "efe92d1321afa53ffc88a57c497bb7330c3cf84c98ffdba4a4caf6a0684fad3c" dependencies = [ "leb128fmt", - "wasmparser 0.235.0", + "wasmparser 0.237.0", ] [[package]] @@ -12977,11 +12999,11 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.235.0" +version = "0.237.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "161296c618fa2d63f6ed5fffd1112937e803cb9ec71b32b01a76321555660917" +checksum = "7d2a40ca0d2bdf4b0bf36c13a737d0b2c58e4c8aaefe1c57f336dd75369ca250" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", "indexmap 2.10.0", "semver 1.0.26", ] @@ -13192,9 +13214,9 @@ dependencies = [ [[package]] name = "wast" -version = "235.0.0" +version = "237.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1eda4293f626c99021bb3a6fbe4fbbe90c0e31a5ace89b5f620af8925de72e13" +checksum = "fcf66f545acbd55082485cb9a6daab54579cb8628a027162253e8e9f5963c767" dependencies = [ "bumpalo", "leb128fmt", @@ -13205,9 +13227,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.235.0" +version = "1.237.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e777e0327115793cb96ab220b98f85327ec3d11f34ec9e8d723264522ef206aa" +checksum = "27975186f549e4b8d6878b627be732863883c72f7bf4dcf8f96e5f8242f73da9" dependencies = [ "wast", ] @@ -13290,11 +13312,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -13377,7 +13399,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -13388,7 +13410,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -13476,7 +13498,7 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.2", + "windows-targets 0.53.3", ] [[package]] @@ -13527,10 +13549,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ + "windows-link", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -13732,9 +13755,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -13755,7 +13778,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.3", ] [[package]] @@ -13815,7 +13838,7 @@ dependencies = [ "nom", "oid-registry 0.8.1", "rusticata-macros", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", ] @@ -13826,7 +13849,7 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -13861,9 +13884,9 @@ dependencies = [ [[package]] name = "yamux" -version = "0.13.5" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da1acad1c2dc53f0dde419115a38bd8221d8c3e47ae9aeceaf453266d29307e" +checksum = "2b2dd50a6d6115feb3e5d7d0efd45e8ca364b6c83722c1e9c602f5764e0e9597" dependencies = [ "futures", "log", @@ -13910,7 +13933,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure 0.13.2", ] @@ -13931,7 +13954,7 @@ checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -13951,7 +13974,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure 0.13.2", ] @@ -13972,7 +13995,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -13988,9 +14011,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -14005,7 +14028,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] diff --git a/metadata-tools/Cargo.toml b/metadata-tools/Cargo.toml index 5b83833c7c..35f34e79f2 100644 --- a/metadata-tools/Cargo.toml +++ b/metadata-tools/Cargo.toml @@ -4,18 +4,18 @@ version = "0.1.0" edition = "2021" [dependencies] -clap = { version = "4.0", features = ["derive"] } +substrate-differ = { git = "https://github.com/PolymeshAssociation/subwasm.git", branch = "polymesh", default-features = false, features = ["v14", "reduced"] } + frame-metadata = { version = "16.0", features = ["std", "legacy"] } -codec = { package = "parity-scale-codec", version = "3.0" } + anyhow = "1.0" -substrate-differ = { git = "https://github.com/PolymeshAssociation/subwasm.git", branch = "polymesh", default-features = false, features = ["v14", "reduced"] } -jsonrpsee = { version = "0.24.7", features = [ - "http-client", - "ws-client", -] } +clap = { version = "4.0", features = ["derive"] } +codec = { package = "parity-scale-codec", version = "3.0" } +env_logger = { version = "0.11.5", default-features = false } hex = "0.4.3" -tokio = { version = "1.42.0", features = ["rt"] } +jsonrpsee = { version = "0.24.7", features = ["http-client","ws-client"] } serde = "1.0.215" -sp-version = { version = "35.0.0", default-features = false, features = ["std"] } serde_json = "1.0.133" -env_logger = { version = "0.11.5", default-features = false } +sp-version = { version = "35.0.0", default-features = false, features = ["std"] } +tokio = { version = "1.42.0", features = ["rt"] } + diff --git a/pallets/protocol-fee/rpc/Cargo.toml b/pallets/protocol-fee/rpc/Cargo.toml index ef821fd438..6f04300350 100644 --- a/pallets/protocol-fee/rpc/Cargo.toml +++ b/pallets/protocol-fee/rpc/Cargo.toml @@ -9,7 +9,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { workspace = true, default-features = false, features = ["derive"] } -jsonrpsee = { version = "0.24.8", features = ["server", "macros"] } +jsonrpsee = { version = "0.24.9", features = ["server-core", "client-core", "macros"] } sp-api = { workspace = true, default-features = false } sp-blockchain = { workspace = true } sp-core = { workspace = true, default-features = false } @@ -22,7 +22,6 @@ frame-system = { workspace = true, default-features = false } node-rpc = { workspace = true } polymesh-common-utilities = { workspace = true, default-features = false } polymesh-primitives = { workspace = true, default-features = false } -pallet-protocol-fee-rpc-runtime-api = { workspace = true } # General -serde = { version = "1.0.104", default-features = false, features = ["derive"] } +serde = { version = "1.0.104", default-features = false, features = ["alloc", "derive"] } diff --git a/pallets/protocol-fee/rpc/runtime-api/Cargo.toml b/pallets/protocol-fee/rpc/runtime-api/Cargo.toml index 9e0e93f7c9..4c1dc05212 100644 --- a/pallets/protocol-fee/rpc/runtime-api/Cargo.toml +++ b/pallets/protocol-fee/rpc/runtime-api/Cargo.toml @@ -27,6 +27,7 @@ std = [ "sp-api/std", "codec/std", "sp-runtime/std", + "scale-info/std", "polymesh-primitives/std", "polymesh-common-utilities/std", ] diff --git a/pallets/protocol-fee/rpc/runtime-api/src/lib.rs b/pallets/protocol-fee/rpc/runtime-api/src/lib.rs index dbbe1ce6ce..b20196966e 100644 --- a/pallets/protocol-fee/rpc/runtime-api/src/lib.rs +++ b/pallets/protocol-fee/rpc/runtime-api/src/lib.rs @@ -18,14 +18,15 @@ #![cfg_attr(not(feature = "std"), no_std)] use codec::{Decode, Encode}; -use polymesh_common_utilities::protocol_fee::ProtocolOp; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_runtime::traits::{SaturatedConversion, UniqueSaturatedInto}; +use polymesh_common_utilities::protocol_fee::ProtocolOp; + /// A capped version of `Balance` which is normally a `u128`, fit into `u64` which is a serializable /// type unlike `u128`. There are no fees that would not fit into `u64`. -#[derive(Eq, PartialEq, Encode, Decode, TypeInfo)] +#[derive(Clone, Decode, Encode, Eq, PartialEq, TypeInfo)] #[cfg_attr(feature = "std", derive(Debug))] #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] diff --git a/pallets/protocol-fee/rpc/src/lib.rs b/pallets/protocol-fee/rpc/src/lib.rs index 7c7cbac17c..d8075a41b4 100644 --- a/pallets/protocol-fee/rpc/src/lib.rs +++ b/pallets/protocol-fee/rpc/src/lib.rs @@ -13,18 +13,18 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use jsonrpsee::{ - core::RpcResult, - proc_macros::rpc, - types::error::{CallError, ErrorObject}, -}; +use std::sync::Arc; + +use jsonrpsee::core::RpcResult; +use jsonrpsee::proc_macros::rpc; +use jsonrpsee::types::error::ErrorObject; use node_rpc::Error; -pub use pallet_protocol_fee_rpc_runtime_api::{CappedFee, ProtocolFeeApi as ProtocolFeeRuntimeApi}; -use polymesh_common_utilities::protocol_fee::ProtocolOp; use sp_api::ProvideRuntimeApi; use sp_blockchain::HeaderBackend; use sp_runtime::traits::Block as BlockT; -use std::sync::Arc; + +pub use pallet_protocol_fee_rpc_runtime_api::{CappedFee, ProtocolFeeApi as ProtocolFeeRuntimeApi}; +use polymesh_common_utilities::protocol_fee::ProtocolOp; #[rpc(client, server)] pub trait ProtocolFeeApi { @@ -60,17 +60,16 @@ where at: Option<::Hash>, ) -> RpcResult { let api = self.client.runtime_api(); - let at_hash = at.unwrap_or_else(|| - // If the block hash is not supplied assume the best block. - self.client.info().best_hash); + + // If the block hash is not supplied assume the best block. + let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); api.compute_fee(at_hash, op).map_err(|e| { - CallError::Custom(ErrorObject::owned( + ErrorObject::owned( Error::RuntimeError.into(), "Unable to query dispatch info.", Some(e.to_string()), - )) - .into() + ) }) } } From 93976d7881104ee1806658e06bc4d699ce28ebb8 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 22 Aug 2025 16:42:13 -0300 Subject: [PATCH 57/97] Fix node-rpc errors - part I --- Cargo.lock | 33 +++++++++++----------- node-rpc/Cargo.toml | 36 ++++++++++++++++-------- pallets/group/rpc/Cargo.toml | 12 +++++++- pallets/group/rpc/runtime-api/Cargo.toml | 3 +- pallets/protocol-fee/rpc/Cargo.toml | 16 +++++++++++ pallets/transaction-payment/Cargo.toml | 3 +- 6 files changed, 73 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e264e0f095..168fc0ce6b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1961,7 +1961,7 @@ checksum = "12d3cbb84fb003242941c231b45ca9417e786e66e94baa39584bd99df3a270b6" dependencies = [ "cc", "codespan-reporting", - "indexmap 2.10.0", + "indexmap 2.11.0", "proc-macro2", "quote", "scratch", @@ -1976,7 +1976,7 @@ checksum = "3fa36b7b249d43f67a3f54bd65788e35e7afe64bbc671396387a48b3e8aaea94" dependencies = [ "clap", "codespan-reporting", - "indexmap 2.10.0", + "indexmap 2.11.0", "proc-macro2", "quote", "syn 2.0.106", @@ -1994,7 +1994,7 @@ version = "1.0.168" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ede6c0fb7e318f0a11799b86ee29dcf17b9be2960bd379a6c38e1a96a6010fff" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.0", "proc-macro2", "quote", "rustversion", @@ -2619,7 +2619,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb42427514b063d97ce21d5199f36c0c307d981434a6be32582bc79fe5bd2303" dependencies = [ "expander", - "indexmap 2.10.0", + "indexmap 2.11.0", "proc-macro-crate 3.3.0", "proc-macro2", "quote", @@ -3395,7 +3395,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.10.0", + "indexmap 2.11.0", "slab", "tokio", "tokio-util", @@ -3414,7 +3414,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.10.0", + "indexmap 2.11.0", "slab", "tokio", "tokio-util", @@ -4151,9 +4151,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" dependencies = [ "equivalent", "hashbrown 0.15.5", @@ -5210,7 +5210,7 @@ dependencies = [ "futures", "futures-timer", "hickory-resolver 0.25.2", - "indexmap 2.10.0", + "indexmap 2.11.0", "libc", "mockall", "multiaddr 0.17.1", @@ -6014,7 +6014,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43dfaf083aef571385fccfdc3a2f8ede8d0a1863160455d4f2b014d8f7d04a3f" dependencies = [ "expander", - "indexmap 2.10.0", + "indexmap 2.11.0", "itertools 0.11.0", "petgraph 0.6.5", "proc-macro-crate 3.3.0", @@ -6662,6 +6662,7 @@ dependencies = [ "frame-system", "jsonrpsee", "node-rpc", + "pallet-protocol-fee-rpc-runtime-api", "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", @@ -7246,7 +7247,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.10.0", + "indexmap 2.11.0", ] [[package]] @@ -7256,7 +7257,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset 0.5.7", - "indexmap 2.10.0", + "indexmap 2.11.0", ] [[package]] @@ -10026,7 +10027,7 @@ dependencies = [ "async-trait", "futures", "futures-timer", - "indexmap 2.10.0", + "indexmap 2.11.0", "itertools 0.11.0", "linked-hash-map", "log", @@ -10056,7 +10057,7 @@ version = "39.0.0" dependencies = [ "async-trait", "futures", - "indexmap 2.10.0", + "indexmap 2.11.0", "log", "parity-scale-codec", "serde", @@ -12282,7 +12283,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.0", "serde", "serde_spanned", "toml_datetime", @@ -13004,7 +13005,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d2a40ca0d2bdf4b0bf36c13a737d0b2c58e4c8aaefe1c57f336dd75369ca250" dependencies = [ "bitflags 2.9.3", - "indexmap 2.10.0", + "indexmap 2.11.0", "semver 1.0.26", ] diff --git a/node-rpc/Cargo.toml b/node-rpc/Cargo.toml index f2506d312e..727b799d24 100644 --- a/node-rpc/Cargo.toml +++ b/node-rpc/Cargo.toml @@ -13,9 +13,9 @@ targets = ["x86_64-unknown-linux-gnu"] jsonrpsee = { version = "0.24.8", features = ["server"] } polymesh-primitives = { workspace = true, default-features = false } -pallet-group-rpc = { workspace = true } -pallet-protocol-fee-rpc = { workspace = true } -node-rpc = { workspace = true } +pallet-group-rpc = { workspace = true, default-features = false } +pallet-protocol-fee-rpc = { workspace = true, default-features = false } +node-rpc = { workspace = true, default-features = false } sc-chain-spec = { workspace = true } sc-client-api = { workspace = true } @@ -28,11 +28,25 @@ sc-rpc-api = { workspace = true } sc-rpc-spec-v2 = { workspace = true } sc-sync-state-rpc = { workspace = true } sc-transaction-pool-api = { workspace = true } -sp-api = { workspace = true } -sp-block-builder = { workspace = true } -sp-blockchain = { workspace = true } -sp-consensus = { workspace = true } -sp-consensus-babe = { workspace = true } -sp-keystore = { workspace = true } -sp-runtime = { workspace = true } -substrate-frame-rpc-system = { workspace = true } +sp-api = { workspace = true, default-features = false } +sp-block-builder = { workspace = true, default-features = false } +sp-blockchain = { workspace = true, default-features = false } +sp-consensus = { workspace = true, default-features = false } +sp-consensus-babe = { workspace = true, default-features = false } +sp-keystore = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +substrate-frame-rpc-system = { workspace = true, default-features = false } + +[features] +default = ["std"] +std = [ + "polymesh-primitives/std", + "pallet-group-rpc/std", + "pallet-protocol-fee-rpc/std", + "node-rpc/std", + "sp-api/std", + "sp-block-builder/std", + "sp-consensus-babe/std", + "sp-keystore/std", + "sp-runtime/std", +] diff --git a/pallets/group/rpc/Cargo.toml b/pallets/group/rpc/Cargo.toml index 6086deef87..c883a2e296 100644 --- a/pallets/group/rpc/Cargo.toml +++ b/pallets/group/rpc/Cargo.toml @@ -31,4 +31,14 @@ serde = { version = "1.0.104", default-features = false, features = ["derive"] } [features] default = ["std"] -std = [] +std = [ + "codec/std", + "sp-api/std", + "sp-core/std", + "sp-std/std", + "sp-runtime/std", + "frame-support/std", + "frame-system/std", + "polymesh-primitives/std", + "pallet-group-rpc-runtime-api/std" +] diff --git a/pallets/group/rpc/runtime-api/Cargo.toml b/pallets/group/rpc/runtime-api/Cargo.toml index e861fd2d2f..433bab284d 100644 --- a/pallets/group/rpc/runtime-api/Cargo.toml +++ b/pallets/group/rpc/runtime-api/Cargo.toml @@ -24,8 +24,9 @@ scale-info = { workspace = true, default-features = false, features = ["derive", default = ["std"] std = [ "serde/std", + "codec/std", "sp-api/std", - "codec/std", "sp-std/std", + "scale-info/std", "polymesh-primitives/std", ] diff --git a/pallets/protocol-fee/rpc/Cargo.toml b/pallets/protocol-fee/rpc/Cargo.toml index 6f04300350..3e2860bbd8 100644 --- a/pallets/protocol-fee/rpc/Cargo.toml +++ b/pallets/protocol-fee/rpc/Cargo.toml @@ -22,6 +22,22 @@ frame-system = { workspace = true, default-features = false } node-rpc = { workspace = true } polymesh-common-utilities = { workspace = true, default-features = false } polymesh-primitives = { workspace = true, default-features = false } +pallet-protocol-fee-rpc-runtime-api = { workspace = true } # General serde = { version = "1.0.104", default-features = false, features = ["alloc", "derive"] } + +[features] +default = ["std"] +std = [ + "codec/std", + "sp-api/std", + "sp-core/std", + "sp-runtime/std", + "sp-std/std", + "frame-support/std", + "frame-system/std", + "polymesh-primitives/std", + "polymesh-common-utilities/std", + "pallet-protocol-fee-rpc-runtime-api/std" +] \ No newline at end of file diff --git a/pallets/transaction-payment/Cargo.toml b/pallets/transaction-payment/Cargo.toml index cd59a9eea0..f8f967b741 100644 --- a/pallets/transaction-payment/Cargo.toml +++ b/pallets/transaction-payment/Cargo.toml @@ -31,11 +31,12 @@ disable_fees = [] no_std = [] runtime-benchmarks = [] std = [ - "serde", + "serde/std", "polymesh-primitives/std", "codec/std", "sp-api/std", "sp-std/std", + "sp-io/std", "sp-runtime/std", "frame-support/std", "frame-system/std", From d6b286b25d71ade9c8dab175cbcc6c1cc5136cc2 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 22 Aug 2025 17:30:51 -0300 Subject: [PATCH 58/97] Fix node-rpc errors --- Cargo.toml | 2 +- node-rpc/src/lib.rs | 88 +++++++++++++++++---------------------------- 2 files changed, 34 insertions(+), 56 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 2e0a13ec77..4b1db851e6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polymesh" -version = "7.3.0" +version = "8.0.0" authors = ["PolymeshAssociation"] build = "build.rs" edition = "2021" diff --git a/node-rpc/src/lib.rs b/node-rpc/src/lib.rs index fe66c2007b..b9dd5e6705 100644 --- a/node-rpc/src/lib.rs +++ b/node-rpc/src/lib.rs @@ -36,9 +36,8 @@ use jsonrpsee::RpcModule; use polymesh_primitives::{AccountId, Block, BlockNumber, Hash, IdentityId, Moment, Nonce, Ticker}; use sc_client_api::AuxStore; use sc_consensus_babe::BabeWorkerHandle; -use sc_consensus_grandpa::{ - FinalityProofProvider, GrandpaJustificationStream, SharedAuthoritySet, SharedVoterState, -}; +use sc_consensus_grandpa::{FinalityProofProvider, GrandpaJustificationStream}; +use sc_consensus_grandpa::{SharedAuthoritySet, SharedVoterState}; use sc_rpc::SubscriptionTaskExecutor; pub use sc_rpc_api::DenyUnsafe; use sc_transaction_pool_api::TransactionPool; @@ -81,8 +80,6 @@ pub struct FullDeps { pub select_chain: SC, /// A copy of the chain spec. pub chain_spec: Box, - /// Whether to deny unsafe calls - pub deny_unsafe: DenyUnsafe, /// BABE specific dependencies. pub babe: BabeDeps, /// GRANDPA specific dependencies. @@ -93,16 +90,7 @@ pub struct FullDeps { /// Instantiate all Full RPC extensions. pub fn create_full( - FullDeps { - client, - pool, - select_chain, - chain_spec, - deny_unsafe, - babe, - grandpa, - backend: _, - }: FullDeps, + full_client_deps: FullDeps, ) -> Result, Box> where C: ProvideRuntimeApi @@ -148,69 +136,59 @@ where let mut io = RpcModule::new(()); - let BabeDeps { - keystore, - babe_worker_handle, - } = babe; - let GrandpaDeps { - shared_voter_state, - shared_authority_set, - justification_stream, - subscription_executor, - finality_provider, - } = grandpa; - - let chain_name = chain_spec.name().to_string(); - let genesis_hash = client + let chain_name = full_client_deps.chain_spec.name().to_string(); + let genesis_hash = full_client_deps + .client .block_hash(0) .ok() .flatten() .expect("Genesis block exists; qed"); - let properties = chain_spec.properties(); + let properties = full_client_deps.chain_spec.properties(); io.merge(ChainSpec::new(chain_name, genesis_hash, properties).into_rpc())?; - io.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; - io.merge(TransactionPayment::new(client.clone()).into_rpc())?; + io.merge(System::new(full_client_deps.client.clone(), full_client_deps.pool).into_rpc())?; + + io.merge(TransactionPayment::new(full_client_deps.client.clone()).into_rpc())?; + io.merge( Babe::new( - client.clone(), - babe_worker_handle.clone(), - keystore, - select_chain, - deny_unsafe, + full_client_deps.client.clone(), + full_client_deps.babe.babe_worker_handle.clone(), + full_client_deps.babe.keystore, + full_client_deps.select_chain, ) .into_rpc(), )?; + io.merge( Grandpa::new( - subscription_executor, - shared_authority_set.clone(), - shared_voter_state, - justification_stream, - finality_provider, + full_client_deps.grandpa.subscription_executor, + full_client_deps.grandpa.shared_authority_set.clone(), + full_client_deps.grandpa.shared_voter_state, + full_client_deps.grandpa.justification_stream, + full_client_deps.grandpa.finality_provider, ) .into_rpc(), )?; io.merge( SyncState::new( - chain_spec, - client.clone(), - shared_authority_set, - babe_worker_handle, + full_client_deps.chain_spec, + full_client_deps.client.clone(), + full_client_deps.grandpa.shared_authority_set.clone(), + full_client_deps.babe.babe_worker_handle.clone(), )? .into_rpc(), )?; - io.merge(Dev::new(client.clone(), deny_unsafe).into_rpc())?; - - io.merge(Pips::new(client.clone()).into_rpc())?; - io.merge(Identity::new(client.clone()).into_rpc())?; - io.merge(ProtocolFee::new(client.clone()).into_rpc())?; - io.merge(Asset::new(client.clone()).into_rpc())?; - io.merge(Group::from(client.clone()).into_rpc())?; - io.merge(NFT::new(client.clone()).into_rpc())?; - io.merge(Settlement::new(client).into_rpc())?; + io.merge(Dev::new(full_client_deps.client.clone()).into_rpc())?; + io.merge(Pips::new(full_client_deps.client.clone()).into_rpc())?; + io.merge(Identity::new(full_client_deps.client.clone()).into_rpc())?; + io.merge(ProtocolFee::new(full_client_deps.client.clone()).into_rpc())?; + io.merge(Asset::new(full_client_deps.client.clone()).into_rpc())?; + io.merge(Group::from(full_client_deps.client.clone()).into_rpc())?; + io.merge(NFT::new(full_client_deps.client.clone()).into_rpc())?; + io.merge(Settlement::new(full_client_deps.client.clone()).into_rpc())?; Ok(io) } From 67104b05a94378456871b1237b428070ee28f0b1 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 22 Aug 2025 17:47:05 -0300 Subject: [PATCH 59/97] Fix group and protocol rpc build --- pallets/group/rpc/Cargo.toml | 1 + pallets/protocol-fee/rpc/Cargo.toml | 1 + 2 files changed, 2 insertions(+) diff --git a/pallets/group/rpc/Cargo.toml b/pallets/group/rpc/Cargo.toml index c883a2e296..1c7e584c28 100644 --- a/pallets/group/rpc/Cargo.toml +++ b/pallets/group/rpc/Cargo.toml @@ -32,6 +32,7 @@ serde = { version = "1.0.104", default-features = false, features = ["derive"] } [features] default = ["std"] std = [ + "node-rpc/std", "codec/std", "sp-api/std", "sp-core/std", diff --git a/pallets/protocol-fee/rpc/Cargo.toml b/pallets/protocol-fee/rpc/Cargo.toml index 3e2860bbd8..a8759d7b6c 100644 --- a/pallets/protocol-fee/rpc/Cargo.toml +++ b/pallets/protocol-fee/rpc/Cargo.toml @@ -38,6 +38,7 @@ std = [ "frame-support/std", "frame-system/std", "polymesh-primitives/std", + "node-rpc/std", "polymesh-common-utilities/std", "pallet-protocol-fee-rpc-runtime-api/std" ] \ No newline at end of file From 008bba2c548eeaf9606a0daf19b8df5d19312bf6 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 26 Aug 2025 10:48:31 -0300 Subject: [PATCH 60/97] Updating node part I --- src/service.rs | 189 ++++++++++++++++++++++++++----------------------- 1 file changed, 100 insertions(+), 89 deletions(-) diff --git a/src/service.rs b/src/service.rs index 6be6072664..6477866126 100644 --- a/src/service.rs +++ b/src/service.rs @@ -1,29 +1,31 @@ //! Service and ServiceFactory implementation. Specialized wrapper over substrate service. -use futures::prelude::*; +use std::sync::Arc; + use polymesh_node_rpc as node_rpc; pub use polymesh_primitives::{AccountId, Balance, Block, IdentityId, Moment, Nonce, Ticker}; pub use polymesh_runtime_develop; pub use polymesh_runtime_mainnet; pub use polymesh_runtime_testnet; -use prometheus_endpoint::Registry; +use futures::prelude::*; +use prometheus_endpoint::Registry; use sc_client_api::{Backend, BlockBackend}; use sc_consensus_slots::SlotProportion; use sc_executor::NativeElseWasmExecutor; use sc_executor::NativeExecutionDispatch; use sc_network::{event::Event, NetworkEventStream, NetworkService}; use sc_network_sync::SyncingService; -use sc_service::{ - config::Configuration, error::Error as ServiceError, RpcHandlers, TaskManager, WarpSyncParams, -}; -use sc_service::{config::PrometheusConfig, ChainSpec, Error}; +use sc_network_sync::WarpSyncConfig; +use sc_service::config::{Configuration, PrometheusConfig}; +use sc_service::error::Error as ServiceError; +use sc_service::ChainSpec; +use sc_service::{RpcHandlers, TaskManager}; use sc_telemetry::{Telemetry, TelemetryWorker}; use sc_transaction_pool_api::OffchainTransactionPoolFactory; use sp_api::ConstructRuntimeApi; use sp_runtime::traits::BlakeTwo256; use sp_runtime::traits::Block as BlockT; -use std::sync::Arc; /// Known networks based on name. pub enum Network { @@ -38,14 +40,15 @@ pub trait IsNetwork { impl IsNetwork for dyn ChainSpec { fn network(&self) -> Network { - let name = self.name(); - if name.starts_with("Polymesh Mainnet") { - Network::Mainnet - } else if name.starts_with("Polymesh Testnet") { - Network::Testnet - } else { - Network::Other + if self.name().starts_with("Polymesh Mainnet") { + return Network::Mainnet; } + + if self.name().starts_with("Polymesh Testnet") { + return Network::Testnet; + } + + Network::Other } } @@ -71,6 +74,7 @@ pub type EHF = ( frame_benchmarking::benchmarking::HostFunctions, polymesh_primitives::crypto::native_schnorrkel::HostFunctions, ); + #[cfg(not(feature = "runtime-benchmarks"))] pub type EHF = (); @@ -91,7 +95,7 @@ pub trait RuntimeApiCollection: + sp_offchain::OffchainWorkerApi + sp_session::SessionKeys + sp_authority_discovery::AuthorityDiscoveryApi - + pallet_staking_runtime_api::StakingApi + + pallet_staking_runtime_api::StakingApi + node_rpc_runtime_api::pips::PipsApi + node_rpc_runtime_api::identity::IdentityApi + pallet_protocol_fee_rpc_runtime_api::ProtocolFeeApi @@ -99,13 +103,10 @@ pub trait RuntimeApiCollection: + pallet_group_rpc_runtime_api::GroupApi + node_rpc_runtime_api::nft::NFTApi + node_rpc_runtime_api::settlement::SettlementApi -where - >::StateBackend: sp_api::StateBackend, { } -impl RuntimeApiCollection for Api -where +impl RuntimeApiCollection for Api where Api: sp_transaction_pool::runtime_api::TaggedTransactionQueue + sp_api::ApiExt + sp_consensus_babe::BabeApi @@ -117,19 +118,18 @@ where + sp_offchain::OffchainWorkerApi + sp_session::SessionKeys + sp_authority_discovery::AuthorityDiscoveryApi - + pallet_staking_runtime_api::StakingApi + + pallet_staking_runtime_api::StakingApi + node_rpc_runtime_api::pips::PipsApi + node_rpc_runtime_api::identity::IdentityApi + pallet_protocol_fee_rpc_runtime_api::ProtocolFeeApi + node_rpc_runtime_api::asset::AssetApi + pallet_group_rpc_runtime_api::GroupApi + node_rpc_runtime_api::nft::NFTApi - + node_rpc_runtime_api::settlement::SettlementApi, - >::StateBackend: sp_api::StateBackend, + + node_rpc_runtime_api::settlement::SettlementApi { } -// Using prometheus, use a registry with a prefix of `polymesh`. +/// Sets the registry with a `polymesh` prefix. fn set_prometheus_registry(config: &mut Configuration) -> Result<(), ServiceError> { if let Some(PrometheusConfig { registry, .. }) = config.prometheus_config.as_mut() { *registry = Registry::new_custom(Some("polymesh".into()), None)?; @@ -138,53 +138,56 @@ fn set_prometheus_registry(config: &mut Configuration) -> Result<(), ServiceErro Ok(()) } -type BabeLink = sc_consensus_babe::BabeLink; - -type FullLinkHalf = grandpa::LinkHalf, FullSelectChain>; +/// The Full client type definition pub type FullClient = sc_service::TFullClient>; type FullBackend = sc_service::TFullBackend; type FullSelectChain = sc_consensus::LongestChain; -type FullGrandpaBlockImport = - grandpa::GrandpaBlockImport, FullSelectChain>; -type FullBabeImportQueue = sc_consensus::DefaultImportQueue>; -type FullStateBackend = sc_client_api::StateBackendFor; -type FullPool = sc_transaction_pool::FullPool>; -pub type FullServiceComponents = sc_service::PartialComponents< - FullClient, - FullBackend, - FullSelectChain, - FullBabeImportQueue, - FullPool, - ( - F, - (FullBabeBlockImport, FullLinkHalf, BabeLink), - grandpa::SharedVoterState, - Option, - ), ->; -type FullBabeBlockImport = - sc_consensus_babe::BabeBlockImport, FullGrandpaBlockImport>; +type FullGrandpaBlockImport = grandpa::GrandpaBlockImport, FullSelectChain>; + +//type BabeLink = sc_consensus_babe::BabeLink; +//type FullLinkHalf = grandpa::LinkHalf, FullSelectChain>; +//pub type FullClient = sc_service::TFullClient>; +//type FullBackend = sc_service::TFullBackend; +//type FullSelectChain = sc_consensus::LongestChain; +//type FullGrandpaBlockImport = +// grandpa::GrandpaBlockImport, FullSelectChain>; +//type FullBabeImportQueue = sc_consensus::DefaultImportQueue; +//type FullStateBackend = sc_client_api::StateBackendFor; +//type FullPool = sc_transaction_pool::TransactionPoolHandle>; +//pub type FullServiceComponents = sc_service::PartialComponents< +// FullClient, +// FullBackend, +// FullSelectChain, +// FullBabeImportQueue, +// FullPool, +// ( +// F, +// (FullBabeBlockImport, FullLinkHalf, BabeLink), +// grandpa::SharedVoterState, +// Option, +// ), +//>; +//type FullBabeBlockImport = +// sc_consensus_babe::BabeBlockImport, FullGrandpaBlockImport>; /// The minimum period of blocks on which justifications will be /// imported and generated. const GRANDPA_JUSTIFICATION_PERIOD: u32 = 512; +/// Creates a new partial node. pub fn new_partial( config: &mut Configuration, ) -> Result< FullServiceComponents< R, D, - impl Fn( - sc_rpc::DenyUnsafe, - sc_rpc::SubscriptionTaskExecutor, - ) -> Result, Error>, + impl Fn(sc_rpc::SubscriptionTaskExecutor) -> Result, ServiceError>, >, - Error, + ServiceError, > where R: ConstructRuntimeApi> + Send + Sync + 'static, - R::RuntimeApi: RuntimeApiCollection, + R::RuntimeApi: RuntimeApiCollection, D: NativeExecutionDispatch + 'static, { set_prometheus_registry(config)?; @@ -219,12 +222,15 @@ where let select_chain = sc_consensus::LongestChain::new(backend.clone()); - let transaction_pool = sc_transaction_pool::BasicPool::new_full( - config.transaction_pool.clone(), - config.role.is_authority().into(), - config.prometheus_registry(), - task_manager.spawn_essential_handle(), - client.clone(), + let transaction_pool = Arc::from( + sc_transaction_pool::Builder::new( + task_manager.spawn_essential_handle(), + client.clone(), + config.role.is_authority().into(), + ) + .with_options(config.transaction_pool.clone()) + .with_prometheus(config.prometheus_registry()) + .build(), ); let (grandpa_block_import, grandpa_link) = grandpa::block_import( @@ -290,13 +296,12 @@ where let chain_spec = config.chain_spec.cloned_box(); let rpc_backend = backend.clone(); - let rpc_extensions_builder = move |deny_unsafe, subscription_executor| { + let rpc_extensions_builder = move |subscription_executor| { let deps = node_rpc::FullDeps { client: client.clone(), pool: pool.clone(), select_chain: select_chain.clone(), chain_spec: chain_spec.cloned_box(), - deny_unsafe, babe: node_rpc::BabeDeps { keystore: keystore.clone(), babe_worker_handle: babe_worker_handle.clone(), @@ -333,7 +338,7 @@ where pub struct NewFullBase where R: ConstructRuntimeApi> + Send + Sync + 'static, - R::RuntimeApi: RuntimeApiCollection, + R::RuntimeApi: RuntimeApiCollection, D: NativeExecutionDispatch + 'static, { /// The task manager of the node. @@ -358,9 +363,17 @@ pub fn new_full_base( where F: FnOnce(&FullBabeBlockImport, &BabeLink), R: ConstructRuntimeApi> + Send + Sync + 'static, - R::RuntimeApi: RuntimeApiCollection, + R::RuntimeApi: RuntimeApiCollection, D: NativeExecutionDispatch + 'static, { + let role = config.role.clone(); + let force_authoring = config.force_authoring; + let backoff_authoring_blocks = None; + let name = config.network.node_name.clone(); + let enable_grandpa = !config.disable_grandpa; + let prometheus_registry = config.prometheus_registry().cloned(); + let enable_offchain_worker = config.offchain_worker.enabled; + let sc_service::PartialComponents { client, backend, @@ -372,21 +385,31 @@ where other: (rpc_builder, import_setup, rpc_setup, mut telemetry), } = new_partial(&mut config)?; + let metrics = + N::register_notification_metrics(prometheus_registry.as_ref().map(|cfg| &cfg.registry)); let shared_voter_state = rpc_setup; let auth_disc_publish_non_global_ips = config.network.allow_non_globals_in_dht; - let mut net_config = sc_network::config::FullNetworkConfiguration::new(&config.network); - - let grandpa_protocol_name = grandpa::protocol_standard_name( - &client - .block_hash(0) - .ok() - .flatten() - .expect("Genesis block exists; qed"), - &config.chain_spec, + + let mut net_config = sc_network::config::FullNetworkConfiguration::new( + &config.network, + prometheus_registry.as_ref().map(|cfg| cfg.registry.clone()), ); - net_config.add_notification_protocol(grandpa::grandpa_peers_set_config( - grandpa_protocol_name.clone(), - )); + + let genesis_hash = client + .block_hash(0) + .ok() + .flatten() + .expect("Genesis block exists; qed"); + let peer_store_handle = net_config.peer_store_handle(); + let grandpa_protocol_name = grandpa::protocol_standard_name(&genesis_hash, &config.chain_spec); + + let (grandpa_protocol_config, grandpa_notification_service) = + grandpa::grandpa_peers_set_config::<_, N>( + grandpa_protocol_name.clone(), + metrics.clone(), + Arc::clone(&peer_store_handle), + ); + net_config.add_notification_protocol(grandpa_protocol_config); let warp_sync = Arc::new(grandpa::warp_proof::NetworkProvider::new( backend.clone(), @@ -403,21 +426,9 @@ where spawn_handle: task_manager.spawn_handle(), import_queue, block_announce_validator_builder: None, - warp_sync_params: Some(WarpSyncParams::WithProvider(warp_sync)), + warp_sync_config: Some(WarpSyncParams::WithProvider(warp_sync)), })?; - let role = config.role.clone(); - let force_authoring = config.force_authoring; - let backoff_authoring_blocks = if false { - Some(sc_consensus_slots::BackoffAuthoringOnFinalizedHeadLagging::default()) - } else { - None - }; - let name = config.network.node_name.clone(); - let enable_grandpa = !config.disable_grandpa; - let prometheus_registry = config.prometheus_registry().cloned(); - let enable_offchain_worker = config.offchain_worker.enabled; - let rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { config, backend: backend.clone(), @@ -628,7 +639,7 @@ pub fn mainnet_new_full(config: Configuration) -> TaskResult { pub type NewChainOps = ( Arc>, Arc, - FullBabeImportQueue, + FullBabeImportQueue, TaskManager, ); @@ -636,7 +647,7 @@ pub type NewChainOps = ( pub fn chain_ops(config: &mut Configuration) -> Result, ServiceError> where R: ConstructRuntimeApi> + Send + Sync + 'static, - R::RuntimeApi: RuntimeApiCollection, + R::RuntimeApi: RuntimeApiCollection, D: NativeExecutionDispatch + 'static, { config.keystore = sc_service::config::KeystoreConfig::InMemory; From 27cc6af493fe669b35d484cc57b81e12989a7f71 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 26 Aug 2025 17:10:09 -0300 Subject: [PATCH 61/97] Update node part II --- Cargo.lock | 74 ++++++++------ Cargo.toml | 1 + src/main.rs | 11 +- src/service.rs | 269 ++++++++++++++++++++++++------------------------- 4 files changed, 179 insertions(+), 176 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 168fc0ce6b..5dc8b1faa1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1362,9 +1362,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.45" +version = "4.5.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" +checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57" dependencies = [ "clap_builder", "clap_derive", @@ -1372,9 +1372,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.44" +version = "4.5.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" +checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41" dependencies = [ "anstream", "anstyle", @@ -1941,23 +1941,23 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.168" +version = "1.0.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aa144b12f11741f0dab5b4182896afad46faa0598b6a061f7b9d17a21837ba7" +checksum = "df881e2764e20d320c9c8ddd8670018b1abaa2557e73811f03d5b2643da671d7" dependencies = [ "cc", "cxxbridge-cmd", "cxxbridge-flags", "cxxbridge-macro", - "foldhash", + "foldhash 0.2.0", "link-cplusplus", ] [[package]] name = "cxx-build" -version = "1.0.168" +version = "1.0.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12d3cbb84fb003242941c231b45ca9417e786e66e94baa39584bd99df3a270b6" +checksum = "acef58f684c0c9b7bffc111657c9f1364e4fa47af46fd7f03b71b7a4066ac372" dependencies = [ "cc", "codespan-reporting", @@ -1970,9 +1970,9 @@ dependencies = [ [[package]] name = "cxxbridge-cmd" -version = "1.0.168" +version = "1.0.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa36b7b249d43f67a3f54bd65788e35e7afe64bbc671396387a48b3e8aaea94" +checksum = "669616995d33251cb7215f96820d78a810ee218573246830fb96f29961e1712a" dependencies = [ "clap", "codespan-reporting", @@ -1984,15 +1984,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.168" +version = "1.0.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77707c70f6563edc5429618ca34a07241b75ebab35bd01d46697c75d58f8ddfe" +checksum = "9aebcb754a24722d34e7f4e021376862179194cc5ec83ded2dd84b9db36be106" [[package]] name = "cxxbridge-macro" -version = "1.0.168" +version = "1.0.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede6c0fb7e318f0a11799b86ee29dcf17b9be2960bd379a6c38e1a96a6010fff" +checksum = "3ea9594efbebf2f822925b6368eea741dd2677bb411313e50c2de8ba8c3d3a62" dependencies = [ "indexmap 2.11.0", "proc-macro2", @@ -2736,6 +2736,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "fork-tree" version = "13.0.1" @@ -3484,7 +3490,7 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.5", ] [[package]] @@ -4358,9 +4364,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ "getrandom 0.3.3", "libc", @@ -7420,6 +7426,7 @@ dependencies = [ "sp-consensus-slots", "sp-core", "sp-inherents", + "sp-io", "sp-keyring", "sp-offchain", "sp-runtime", @@ -8648,14 +8655,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata 0.4.10", + "regex-syntax 0.8.6", ] [[package]] @@ -8669,13 +8676,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax 0.8.6", ] [[package]] @@ -8686,9 +8693,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "resolv-conf" @@ -9019,9 +9026,9 @@ dependencies = [ [[package]] name = "safe_arch" -version = "0.7.4" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +checksum = "3fb5032219cc30e5bb98749b19a18ceb2cf15e24ba8d517a7e64dff4f1f1eca5" dependencies = [ "bytemuck", ] @@ -12621,13 +12628,14 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "137a3c834eaf7139b73688502f3f1141a0337c5d8e4d9b536f9b8c796e26a7c4" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] [[package]] @@ -13281,9 +13289,9 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "wide" -version = "0.7.33" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" +checksum = "5a0ab08c041f0cbb00a12fd091b2877dcec2311f90f87a88391d4b0961ffb4fe" dependencies = [ "bytemuck", "safe_arch", diff --git a/Cargo.toml b/Cargo.toml index 4b1db851e6..0017f54fad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -389,6 +389,7 @@ sp-consensus-slots = { workspace = true } sp-keyring = { workspace = true } sp-core = { workspace = true } sp-inherents = { workspace = true } +sp-io = { workspace = true } sp-transaction-storage-proof = { workspace = true } sp-offchain = { workspace = true } sp-runtime = { workspace = true } diff --git a/src/main.rs b/src/main.rs index ea5303342c..8e85f7f605 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,14 @@ //! Polymesh Node CLI binary. #![warn(missing_docs)] -mod chain_spec; +//mod chain_spec; #[macro_use] mod service; -mod benchmarking; -mod cli; -mod command; +//mod benchmarking; +//mod cli; +//mod command; fn main() -> sc_cli::Result<()> { - command::run() + //command::run() + unimplemented!() } diff --git a/src/service.rs b/src/service.rs index 6477866126..738753587a 100644 --- a/src/service.rs +++ b/src/service.rs @@ -9,12 +9,13 @@ pub use polymesh_runtime_mainnet; pub use polymesh_runtime_testnet; use futures::prelude::*; +use jsonrpsee::RpcModule; use prometheus_endpoint::Registry; use sc_client_api::{Backend, BlockBackend}; use sc_consensus_slots::SlotProportion; -use sc_executor::NativeElseWasmExecutor; -use sc_executor::NativeExecutionDispatch; -use sc_network::{event::Event, NetworkEventStream, NetworkService}; +use sc_network::event::Event; +use sc_network::service::traits::NetworkService; +use sc_network::NetworkEventStream; use sc_network_sync::SyncingService; use sc_network_sync::WarpSyncConfig; use sc_service::config::{Configuration, PrometheusConfig}; @@ -22,6 +23,7 @@ use sc_service::error::Error as ServiceError; use sc_service::ChainSpec; use sc_service::{RpcHandlers, TaskManager}; use sc_telemetry::{Telemetry, TelemetryWorker}; +use sc_transaction_pool::TransactionPoolHandle; use sc_transaction_pool_api::OffchainTransactionPoolFactory; use sp_api::ConstructRuntimeApi; use sp_runtime::traits::BlakeTwo256; @@ -52,36 +54,6 @@ impl IsNetwork for dyn ChainSpec { } } -macro_rules! native_executor_instance { - ($exec:ident, $module:ident, $ehf:ty) => { - pub struct $exec; - impl NativeExecutionDispatch for $exec { - type ExtendHostFunctions = $ehf; - - fn dispatch(method: &str, data: &[u8]) -> Option> { - $module::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - $module::native_version() - } - } - }; -} - -#[cfg(feature = "runtime-benchmarks")] -pub type EHF = ( - frame_benchmarking::benchmarking::HostFunctions, - polymesh_primitives::crypto::native_schnorrkel::HostFunctions, -); - -#[cfg(not(feature = "runtime-benchmarks"))] -pub type EHF = (); - -native_executor_instance!(GeneralExecutor, polymesh_runtime_develop, EHF); -native_executor_instance!(TestnetExecutor, polymesh_runtime_testnet, ()); -native_executor_instance!(MainnetExecutor, polymesh_runtime_mainnet, ()); - /// A set of APIs that polkadot-like runtimes must implement. pub trait RuntimeApiCollection: sp_transaction_pool::runtime_api::TaggedTransactionQueue @@ -129,66 +101,68 @@ impl RuntimeApiCollection for Api where { } -/// Sets the registry with a `polymesh` prefix. -fn set_prometheus_registry(config: &mut Configuration) -> Result<(), ServiceError> { - if let Some(PrometheusConfig { registry, .. }) = config.prometheus_config.as_mut() { - *registry = Registry::new_custom(Some("polymesh".into()), None)?; - } +#[cfg(not(feature = "runtime-benchmarks"))] +pub type HostFunctions = sp_io::SubstrateHostFunctions; - Ok(()) -} +#[cfg(feature = "runtime-benchmarks")] +pub type HostFunctions = ( + sp_io::SubstrateHostFunctions, + frame_benchmarking::benchmarking::HostFunctions, + polymesh_primitives::crypto::native_schnorrkel::HostFunctions, +); + +/// A specialized `WasmExecutor` intended to use across substrate node. It provides all required HostFunctions. +pub type RuntimeExecutor = sc_executor::WasmExecutor; /// The Full client type definition -pub type FullClient = sc_service::TFullClient>; +pub type FullClient = sc_service::TFullClient; type FullBackend = sc_service::TFullBackend; type FullSelectChain = sc_consensus::LongestChain; -type FullGrandpaBlockImport = grandpa::GrandpaBlockImport, FullSelectChain>; - -//type BabeLink = sc_consensus_babe::BabeLink; -//type FullLinkHalf = grandpa::LinkHalf, FullSelectChain>; -//pub type FullClient = sc_service::TFullClient>; -//type FullBackend = sc_service::TFullBackend; -//type FullSelectChain = sc_consensus::LongestChain; -//type FullGrandpaBlockImport = -// grandpa::GrandpaBlockImport, FullSelectChain>; -//type FullBabeImportQueue = sc_consensus::DefaultImportQueue; -//type FullStateBackend = sc_client_api::StateBackendFor; -//type FullPool = sc_transaction_pool::TransactionPoolHandle>; -//pub type FullServiceComponents = sc_service::PartialComponents< -// FullClient, -// FullBackend, -// FullSelectChain, -// FullBabeImportQueue, -// FullPool, -// ( -// F, -// (FullBabeBlockImport, FullLinkHalf, BabeLink), -// grandpa::SharedVoterState, -// Option, -// ), -//>; -//type FullBabeBlockImport = -// sc_consensus_babe::BabeBlockImport, FullGrandpaBlockImport>; +type FullGrandpaBlockImport = + grandpa::GrandpaBlockImport, FullSelectChain>; + +/// The transaction pool type definition. +pub type TransactionPool = sc_transaction_pool::TransactionPoolHandle>; /// The minimum period of blocks on which justifications will be /// imported and generated. const GRANDPA_JUSTIFICATION_PERIOD: u32 = 512; +/// Sets the registry with a `polymesh` prefix. +fn set_prometheus_registry(config: &mut Configuration) -> Result<(), ServiceError> { + if let Some(PrometheusConfig { registry, .. }) = config.prometheus_config.as_mut() { + *registry = Registry::new_custom(Some("polymesh".into()), None)?; + } + + Ok(()) +} + /// Creates a new partial node. -pub fn new_partial( +pub fn new_partial( config: &mut Configuration, ) -> Result< - FullServiceComponents< - R, - D, - impl Fn(sc_rpc::SubscriptionTaskExecutor) -> Result, ServiceError>, + sc_service::PartialComponents< + FullClient, + FullBackend, + FullSelectChain, + sc_consensus::DefaultImportQueue, + sc_transaction_pool::TransactionPoolHandle>, + ( + impl Fn(sc_rpc::SubscriptionTaskExecutor) -> Result, ServiceError>, + ( + sc_consensus_babe::BabeBlockImport, FullGrandpaBlockImport>, + grandpa::LinkHalf, FullSelectChain>, + sc_consensus_babe::BabeLink, + ), + grandpa::SharedVoterState, + Option, + ), >, ServiceError, > where - R: ConstructRuntimeApi> + Send + Sync + 'static, + R: ConstructRuntimeApi> + Send + Sync + 'static, R::RuntimeApi: RuntimeApiCollection, - D: NativeExecutionDispatch + 'static, { set_prometheus_registry(config)?; @@ -203,10 +177,10 @@ where }) .transpose()?; - let executor = sc_service::new_native_or_wasm_executor(&config); + let executor = sc_service::new_wasm_executor(&config.executor); let (client, backend, keystore_container, task_manager) = - sc_service::new_full_parts::>( + sc_service::new_full_parts::( config, telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), executor, @@ -260,10 +234,10 @@ where let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); let slot = - sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - *timestamp, - slot_duration, - ); + sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration( + *timestamp, + slot_duration, + ); Ok((slot, timestamp)) }, @@ -335,40 +309,40 @@ where } #[allow(dead_code)] -pub struct NewFullBase +pub struct NewFullBase where - R: ConstructRuntimeApi> + Send + Sync + 'static, + R: ConstructRuntimeApi> + Send + Sync + 'static, R::RuntimeApi: RuntimeApiCollection, - D: NativeExecutionDispatch + 'static, { /// The task manager of the node. pub task_manager: TaskManager, /// The client instance of the node. - pub client: Arc>, + pub client: Arc>, /// The networking service of the node. - pub network: Arc::Hash>>, + pub network: Arc, /// The syncing service of the node. pub sync: Arc>, /// The transaction pool of the node. - pub transaction_pool: Arc>, + pub transaction_pool: Arc>, /// The rpc handlers of the node. pub rpc_handlers: RpcHandlers, } /// Creates a full service from the configuration. -pub fn new_full_base( +pub fn new_full_base( mut config: Configuration, - with_startup_data: F, -) -> Result, ServiceError> + with_startup_data: impl FnOnce( + &sc_consensus_babe::BabeBlockImport, FullGrandpaBlockImport>, + &sc_consensus_babe::BabeLink, + ), +) -> Result, ServiceError> where - F: FnOnce(&FullBabeBlockImport, &BabeLink), - R: ConstructRuntimeApi> + Send + Sync + 'static, + N: sc_network::NetworkBackend::Hash>, + R: ConstructRuntimeApi> + Send + Sync + 'static, R::RuntimeApi: RuntimeApiCollection, - D: NativeExecutionDispatch + 'static, { let role = config.role.clone(); let force_authoring = config.force_authoring; - let backoff_authoring_blocks = None; let name = config.network.node_name.clone(); let enable_grandpa = !config.disable_grandpa; let prometheus_registry = config.prometheus_registry().cloned(); @@ -385,14 +359,18 @@ where other: (rpc_builder, import_setup, rpc_setup, mut telemetry), } = new_partial(&mut config)?; - let metrics = - N::register_notification_metrics(prometheus_registry.as_ref().map(|cfg| &cfg.registry)); + let metrics = N::register_notification_metrics( + config.prometheus_config.as_ref().map(|cfg| &cfg.registry), + ); let shared_voter_state = rpc_setup; let auth_disc_publish_non_global_ips = config.network.allow_non_globals_in_dht; - let mut net_config = sc_network::config::FullNetworkConfiguration::new( + let mut net_config = sc_network::config::FullNetworkConfiguration::<_, _, N>::new( &config.network, - prometheus_registry.as_ref().map(|cfg| cfg.registry.clone()), + config + .prometheus_config + .as_ref() + .map(|cfg| cfg.registry.clone()), ); let genesis_hash = client @@ -401,8 +379,8 @@ where .flatten() .expect("Genesis block exists; qed"); let peer_store_handle = net_config.peer_store_handle(); - let grandpa_protocol_name = grandpa::protocol_standard_name(&genesis_hash, &config.chain_spec); + let grandpa_protocol_name = grandpa::protocol_standard_name(&genesis_hash, &config.chain_spec); let (grandpa_protocol_config, grandpa_notification_service) = grandpa::grandpa_peers_set_config::<_, N>( grandpa_protocol_name.clone(), @@ -417,7 +395,7 @@ where Vec::default(), )); - let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) = + let (network, system_rpc_tx, tx_handler_controller, sync_service) = sc_service::build_network(sc_service::BuildNetworkParams { config: &config, net_config, @@ -426,7 +404,9 @@ where spawn_handle: task_manager.spawn_handle(), import_queue, block_announce_validator_builder: None, - warp_sync_config: Some(WarpSyncParams::WithProvider(warp_sync)), + warp_sync_config: Some(WarpSyncConfig::WithProvider(warp_sync)), + block_relay: None, + metrics, })?; let rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { @@ -473,10 +453,10 @@ where let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); let slot = - sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - *timestamp, - slot_duration, - ); + sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration( + *timestamp, + slot_duration, + ); let storage_proof = sp_transaction_storage_proof::registration::new_data_provider( @@ -488,7 +468,7 @@ where } }, force_authoring, - backoff_authoring_blocks, + backoff_authoring_blocks: None::<()>, babe_link, block_proposal_slot_portion: SlotProportion::new(0.5), max_block_proposal_slot_portion: None, @@ -523,7 +503,7 @@ where ..Default::default() }, client.clone(), - network.clone(), + Arc::new(network.clone()), Box::pin(dht_event_stream), authority_discovery_role, prometheus_registry.clone(), @@ -563,14 +543,15 @@ where // and vote data availability than the observer. The observer has not // been tested extensively yet and having most nodes in a network run it // could lead to finality stalls. - let grandpa_config = grandpa::GrandpaParams { + let grandpa_params = grandpa::GrandpaParams { config: grandpa_config, link: grandpa_link, network: network.clone(), sync: Arc::new(sync_service.clone()), + notification_service: grandpa_notification_service, telemetry: telemetry.as_ref().map(|x| x.handle()), voting_rule: grandpa::VotingRulesBuilder::default().build(), - prometheus_registry, + prometheus_registry: prometheus_registry.clone(), shared_voter_state, offchain_tx_pool_factory: OffchainTransactionPoolFactory::new(transaction_pool.clone()), }; @@ -580,14 +561,12 @@ where task_manager.spawn_essential_handle().spawn_blocking( "grandpa-voter", None, - grandpa::run_grandpa_voter(grandpa_config)?, + grandpa::run_grandpa_voter(grandpa_params)?, ); } if enable_offchain_worker { - task_manager.spawn_handle().spawn( - "offchain-workers-runner", - "offchain-work", + let offchain_workers = sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions { runtime_api_provider: client.clone(), keystore: Some(keystore_container.keystore()), @@ -595,17 +574,21 @@ where transaction_pool: Some(OffchainTransactionPoolFactory::new( transaction_pool.clone(), )), - network_provider: network.clone(), + network_provider: Arc::new(network.clone()), is_validator: role.is_authority(), enable_http_requests: true, custom_extensions: move |_| vec![], - }) - .run(client.clone(), task_manager.spawn_handle()) - .boxed(), + })?; + + task_manager.spawn_handle().spawn( + "offchain-workers-runner", + "offchain-work", + offchain_workers + .run(client.clone(), task_manager.spawn_handle()) + .boxed(), ); } - network_starter.start_network(); Ok(NewFullBase { task_manager, client, @@ -620,61 +603,71 @@ type TaskResult = Result; /// Create a new Testnet service for a full node. pub fn testnet_new_full(config: Configuration) -> TaskResult { - new_full_base::(config, |_, _| ()) - .map(|data| data.task_manager) + new_full_base::, polymesh_runtime_testnet::RuntimeApi>( + config, + |_, _| (), + ) + .map(|data| data.task_manager) } /// Create a new General node service for a full node. pub fn general_new_full(config: Configuration) -> TaskResult { - new_full_base::(config, |_, _| ()) - .map(|data| data.task_manager) + new_full_base::, polymesh_runtime_develop::RuntimeApi>( + config, + |_, _| (), + ) + .map(|data| data.task_manager) } /// Create a new Mainnet service for a full node. pub fn mainnet_new_full(config: Configuration) -> TaskResult { - new_full_base::(config, |_, _| ()) - .map(|data| data.task_manager) + new_full_base::, polymesh_runtime_mainnet::RuntimeApi>( + config, + |_, _| (), + ) + .map(|data| data.task_manager) } -pub type NewChainOps = ( - Arc>, +pub type NewChainOps = ( + Arc>, Arc, - FullBabeImportQueue, + sc_consensus::DefaultImportQueue, TaskManager, ); /// Builds a new object suitable for chain operations. -pub fn chain_ops(config: &mut Configuration) -> Result, ServiceError> +pub fn chain_ops(config: &mut Configuration) -> Result, ServiceError> where - R: ConstructRuntimeApi> + Send + Sync + 'static, + R: ConstructRuntimeApi> + Send + Sync + 'static, R::RuntimeApi: RuntimeApiCollection, - D: NativeExecutionDispatch + 'static, { config.keystore = sc_service::config::KeystoreConfig::InMemory; - let FullServiceComponents { + + let sc_service::PartialComponents { client, backend, import_queue, task_manager, .. - } = new_partial::(config)?; + } = new_partial::(config)?; + Ok((client, backend, import_queue, task_manager)) } pub fn testnet_chain_ops( config: &mut Configuration, -) -> Result, ServiceError> { - chain_ops::<_, _>(config) +) -> Result, ServiceError> { + chain_ops::<_>(config) } pub fn general_chain_ops( config: &mut Configuration, -) -> Result, ServiceError> { - chain_ops::<_, _>(config) +) -> Result, ServiceError> { + chain_ops::<_>(config) } pub fn mainnet_chain_ops( config: &mut Configuration, -) -> Result, ServiceError> { - chain_ops::<_, _>(config) +) -> Result, ServiceError> { + chain_ops::<_>(config) } From 7e1d51f77b8a046387494d7fed664f75dc3aa40a Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 29 Aug 2025 15:14:04 -0300 Subject: [PATCH 62/97] Update chain_spec - part I --- src/chain_spec.rs | 1132 ----------------------------- src/chain_spec/ci_runtime.rs | 21 + src/chain_spec/common.rs | 222 ++++++ src/chain_spec/develop_runtime.rs | 164 +++++ src/chain_spec/mainnet_runtime.rs | 216 ++++++ src/chain_spec/mod.rs | 5 + src/chain_spec/testnet_runtime.rs | 90 +++ src/main.rs | 4 +- 8 files changed, 720 insertions(+), 1134 deletions(-) delete mode 100644 src/chain_spec.rs create mode 100644 src/chain_spec/ci_runtime.rs create mode 100644 src/chain_spec/common.rs create mode 100644 src/chain_spec/develop_runtime.rs create mode 100644 src/chain_spec/mainnet_runtime.rs create mode 100644 src/chain_spec/mod.rs create mode 100644 src/chain_spec/testnet_runtime.rs diff --git a/src/chain_spec.rs b/src/chain_spec.rs deleted file mode 100644 index 5adf115c92..0000000000 --- a/src/chain_spec.rs +++ /dev/null @@ -1,1132 +0,0 @@ -use codec::{Decode, Encode}; -use grandpa::AuthorityId as GrandpaId; -use pallet_asset::TickerRegistrationConfig; -use pallet_im_online::sr25519::AuthorityId as ImOnlineId; -use pallet_staking::StakerStatus; -use polymesh_common_utilities::protocol_fee::ProtocolOp; -use polymesh_primitives::{ - asset_metadata::{AssetMetadataName, AssetMetadataSpec}, - constants::{currency::ONE_POLY, TREASURY_PALLET_ID}, - identity_id::GenesisIdentityRecord, - AccountId, IdentityId, MaybeBlock, Moment, PosRatio, SecondaryKey, Signature, - SystematicIssuers, Ticker, -}; -use sc_chain_spec::{ChainSpecExtension, ChainType}; -use sc_service::Properties; -use sc_telemetry::TelemetryEndpoints; -use serde::{Deserialize, Serialize}; -use serde_json::json; -use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; -use sp_consensus_babe::AuthorityId as BabeId; -use sp_core::{sr25519, Pair, Public}; -use sp_runtime::traits::{AccountIdConversion, IdentifyAccount, Verify}; -use sp_runtime::PerThing; -use std::convert::TryInto; - -// The URL for the telemetry server. -const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polymesh.network/submit/"; - -const BOOTSTRAP_KEYS: u128 = 6_000 * ONE_POLY; -const BOOTSTRAP_TREASURY: u128 = 17_500_000 * ONE_POLY; - -const DEV_KEYS: u128 = 30_000_000 * ONE_POLY; -const DEV_TREASURY: u128 = 50_000_000 * ONE_POLY; - -const INITIAL_BOND: u128 = 500 * ONE_POLY; - -/// Node `ChainSpec` extensions. -/// -/// Additional parameters for some Substrate core modules, -/// customizable from the chain spec. -#[derive(Default, Clone, Serialize, Deserialize, ChainSpecExtension)] -#[serde(rename_all = "camelCase")] -pub struct Extensions { - /// The light sync state. - /// - /// This value will be set by the `sync-state rpc` implementation. - pub light_sync_state: sc_sync_state_rpc::LightSyncStateExtension, -} - -pub type GenericChainSpec = sc_service::GenericChainSpec; - -/// Generate a crypto pair from seed. -pub fn get_from_seed(seed: &str) -> ::Public { - TPublic::Pair::from_string(&format!("//{}", seed), None) - .expect("static values are valid; qed") - .public() -} - -type AccountPublic = ::Signer; - -/// Generate an account ID from seed. -pub fn get_account_id_from_seed(seed: &str) -> AccountId -where - AccountPublic: From<::Public>, -{ - AccountPublic::from(get_from_seed::(seed)).into_account() -} - -fn seeded_acc_id(seed: &str) -> AccountId { - get_account_id_from_seed::(seed) -} - -/// Generate an Aura authority key. -pub fn get_authority_keys_from_seed(s: &str, uniq: bool) -> InitialAuth { - let stash_acc_id = seeded_acc_id(&format!("{}//stash", s)); - let acc_id = seeded_acc_id(s); - - let (grandpa_id, babe_id, im_online_id, discovery_id) = if uniq { - ( - get_from_seed::(&format!("{}//gran", s)), - get_from_seed::(&format!("{}//babe", s)), - get_from_seed::(&format!("{}//imon", s)), - get_from_seed::(&format!("{}//auth", s)), - ) - } else { - ( - get_from_seed::(s), - get_from_seed::(s), - get_from_seed::(s), - get_from_seed::(s), - ) - }; - - ( - stash_acc_id, - acc_id, - grandpa_id, - babe_id, - im_online_id, - discovery_id, - ) -} - -fn polymesh_props(ss58: u8) -> Properties { - json!({ "ss58Format": ss58, "tokenDecimals": 6, "tokenSymbol": "POLYX" }) - .as_object() - .unwrap() - .clone() -} - -macro_rules! session_keys { - () => { - fn session_keys( - grandpa: GrandpaId, - babe: BabeId, - im_online: ImOnlineId, - authority_discovery: AuthorityDiscoveryId, - ) -> rt::SessionKeys { - rt::SessionKeys { - babe, - grandpa, - im_online, - authority_discovery, - } - } - }; -} - -macro_rules! asset { - () => { - pallet_asset::GenesisConfig { - ticker_registration_config: ticker_registration_config(), - reserved_country_currency_codes: currency_codes(), - asset_metadata: asset_metadata(), - ..Default::default() - } - }; -} - -fn ticker_registration_config() -> TickerRegistrationConfig { - TickerRegistrationConfig { - max_ticker_length: 12, - registration_length: Some(5_184_000_000), - } -} - -fn currency_codes() -> Vec { - // Fiat Currency Struct - #[derive(Serialize, Deserialize)] - #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq)] - pub struct FiatCurrency { - pub codes: Vec, - } - - let currency_file = include_str!("data/currency_symbols.json"); - let currency_data: FiatCurrency = serde_json::from_str(¤cy_file).unwrap(); - currency_data - .codes - .into_iter() - .map(|y| Ticker::from_slice_truncated(y.as_bytes())) - .collect() -} - -fn asset_metadata() -> Vec<(AssetMetadataName, AssetMetadataSpec)> { - let metadata_json = include_str!("data/asset_metadata.json"); - serde_json::from_str(&metadata_json).expect("Asset Metadata") -} - -macro_rules! checkpoint { - () => {{ - // We use a weekly complexity. That is, >= 7 days apart per CP is OK. - use polymesh_primitives::calendar::{CalendarPeriod, CalendarUnit::Week}; - let period = CalendarPeriod { - unit: Week, - amount: 1, - }; - pallet_asset::checkpoint::GenesisConfig { - schedules_max_complexity: period.complexity(), - ..Default::default() - } - }}; -} - -type InitialAuth = ( - AccountId, - AccountId, - GrandpaId, - BabeId, - ImOnlineId, - AuthorityDiscoveryId, -); - -// alias type to make clippy happy. -type GenesisProcessedData = ( - Vec>, - Vec<( - IdentityId, - AccountId, - AccountId, - u128, - StakerStatus, - )>, - Vec<(AccountId, u128)>, -); - -fn adjust_last(bytes: &mut [u8], n: u8) -> &str { - bytes[bytes.len() - 1] = n + b'0'; - core::str::from_utf8(bytes).unwrap() -} - -fn genesis_processed_data( - initial_authorities: &Vec, //Alice, Bob, Charlie - root_key: AccountId, //polymesh_5 - treasury_amount: u128, - key_amount: u128, -) -> GenesisProcessedData { - // Identities and their roles - // 1 = [Polymesh] GenesisCouncil (1 of 3) + UpgradeCommittee (1 of 1) + TechnicalCommittee (1 of 1) + GCReleaseCoordinator - // 2 = GenesisCouncil (2 of 3) - // 3 = GenesisCouncil (3 of 3) - // 4 = Operator - // 5 = Sudo - - // Identity_01 - // Primary Key: polymesh_1 - - // Identity_02 - // Primary Key: polymesh_2 - - // Identity_03 - // Primary Key: polymesh_3 - - // Identity_04 - // Primary Key: polymesh_4 - // Secondary Keys: Alice, Alice//stash, Bob, Bob//stash, Charlie, Charlie//stash - - // Identity_05 - // Primary Key: polymesh_5 - - let mut identities = Vec::new(); - let mut balances = Vec::new(); - let mut keys = Vec::new(); - - let mut create_id = |nonce: u8, primary_key: AccountId| { - keys.push(primary_key.clone()); - balances.push((primary_key.clone(), key_amount)); - identities.push(GenesisIdentityRecord::new(nonce, primary_key)); - }; - - // Creating Identities 1-4 (GC + Operators) - for i in 1..5u8 { - create_id(i, seeded_acc_id(adjust_last(&mut { *b"polymesh_0" }, i))); - } - - // Creating identity for sudo - create_id(5u8, root_key); - - // 3 operators, all self staking at genesis - let mut stakers = Vec::with_capacity(initial_authorities.len()); - for (stash, controller, ..) in initial_authorities { - stakers.push(( - IdentityId::from(4), // All operators have the same Identity - stash.clone(), - controller.clone(), - INITIAL_BOND, - pallet_staking::StakerStatus::Validator, - )); - // Make stash and controller 4th Identity's secondary keys. - let mut push_key = |key: &AccountId| { - balances.push((key.clone(), key_amount)); - identities[3] - .secondary_keys - .push(SecondaryKey::from_account_id_with_full_perms(key.clone())); - keys.push(key.clone()); - }; - push_key(stash); - push_key(controller); - } - - // Give CDD issuer to operator and sudo since it won't receive CDD from the group automatically - identities[3] - .issuers - .push(SystematicIssuers::CDDProvider.as_id()); - - // Give CDD issuer to operator and sudo since it won't receive CDD from the group automatically - identities[4] - .issuers - .push(SystematicIssuers::CDDProvider.as_id()); - - // Treasury - balances.push(( - TREASURY_PALLET_ID.into_account_truncating(), - treasury_amount, - )); - - (identities, stakers, balances) -} - -#[cfg(not(feature = "ci-runtime"))] -fn dev_genesis_processed_data( - initial_authorities: &Vec, - other_funded_accounts: Vec, - treasury_amount: u128, - key_amount: u128, -) -> GenesisProcessedData { - let mut identity = GenesisIdentityRecord::new(1u8, initial_authorities[0].0.clone()); - let mut balances = Vec::new(); - - let mut stakers = Vec::with_capacity(initial_authorities.len()); - identity - .secondary_keys - .reserve(initial_authorities.len() * 2 + other_funded_accounts.len()); - let mut add_sk = |acc: AccountId| { - balances.push((acc.clone(), key_amount)); - identity - .secondary_keys - .push(SecondaryKey::from_account_id_with_full_perms(acc)) - }; - for (stash, controller, ..) in initial_authorities { - stakers.push(( - IdentityId::from(1), - stash.clone(), - controller.clone(), - INITIAL_BOND, - pallet_staking::StakerStatus::Validator, - )); - add_sk(stash.clone()); - add_sk(controller.clone()); - } - - for account in other_funded_accounts { - add_sk(account); - } - - // Treasury - balances.push(( - TREASURY_PALLET_ID.into_account_truncating(), - treasury_amount, - )); - - // The 0th key is the primary key - identity.secondary_keys.remove(0); - - (vec![identity], stakers, balances) -} - -fn frame(wasm_binary: Option<&[u8]>) -> frame_system::GenesisConfig { - frame_system::GenesisConfig { - code: wasm_binary.expect("WASM binary was not generated").to_vec(), - ..Default::default() - } -} - -macro_rules! session { - ($inits:expr, $build:expr) => { - pallet_session::GenesisConfig { - keys: $inits - .iter() - .map(|x| { - let sks = $build(x.2.clone(), x.3.clone(), x.4.clone(), x.5.clone()); - (x.0.clone(), x.0.clone(), sks) - }) - .collect::>(), - ..Default::default() - } - }; -} - -macro_rules! staking { - ($stakers:expr) => { - pallet_staking::GenesisConfig { - validator_count: 40, - minimum_validator_count: 1, - stakers: $stakers - .iter() - .map(|(_did, stash, controller, balance, status)| { - (stash.clone(), controller.clone(), *balance, status.clone()) - }) - .collect::>(), - invulnerables: vec![], - slash_reward_fraction: sp_runtime::Perbill::from_percent(10), - ..Default::default() - } - }; -} - -macro_rules! validators { - ($stakers:expr, $cap:expr) => { - pallet_validators::GenesisConfig { - validator_commission_cap: $cap, - validators: $stakers - .iter() - .filter_map(|(did, _stash, _controller, _balance, status)| { - if let StakerStatus::Validator = status { - Some(*did) - } else { - None - } - }) - .collect::>(), - ..Default::default() - } - }; -} - -macro_rules! pips { - ($period:expr, $expiry:expr, $limit:expr) => { - pallet_pips::GenesisConfig { - prune_historical_pips: false, - min_proposal_deposit: 2_000_000_000, - default_enactment_period: $period, - max_pip_skip_count: 2, - active_pip_limit: $limit, - pending_pip_expiry: $expiry, - ..Default::default() - } - }; -} - -macro_rules! group_membership { - ($($member:expr),*) => { - pallet_group::GenesisConfig { - active_members_limit: 20, - active_members: vec![$(IdentityId::from($member)),*], - ..Default::default() - } - }; -} - -macro_rules! corporate_actions { - () => { - pallet_corporate_actions::GenesisConfig { - max_details_length: 1024, - ..Default::default() - } - }; -} - -macro_rules! committee { - ($rc:expr) => { - committee!($rc, (1, 2)) - }; - ($rc:expr, $vote:expr) => { - pallet_committee::GenesisConfig { - vote_threshold: $vote, - members: vec![], - release_coordinator: IdentityId::from($rc), - expires_after: <_>::default(), - ..Default::default() - } - }; -} - -fn protocol_fees() -> Vec<(ProtocolOp, u128)> { - vec![ - (ProtocolOp::AssetCreateAsset, 2_500 * 1_000_000), - (ProtocolOp::AssetRegisterTicker, 500 * 1_000_000), - ] -} - -macro_rules! protocol_fee { - () => { - pallet_protocol_fee::GenesisConfig { - base_fees: protocol_fees(), - coefficient: PosRatio(1, 1), - ..Default::default() - } - }; -} - -macro_rules! polymesh_contracts { - ($root_key:expr) => { - polymesh_contracts::GenesisConfig { - call_whitelist: contracts_call_whitelist(), - upgradable_code: contracts_upgradable_code(), - upgradable_description: "POLY" - .as_bytes() - .try_into() - .expect("Wrong Length - should be length 4"), - upgradable_major: 7, - upgradable_owner: $root_key, - ..Default::default() - } - }; -} - -fn contracts_upgradable_code() -> Vec { - // NB - Contract should match the `upgradable_major` version above. - let upgradable_code = include_bytes!("data/contracts/polymesh_ink_7.wasm").to_vec(); - upgradable_code -} - -fn contracts_call_whitelist() -> Vec { - let whitelist_file = include_str!("data/contracts_call_whitelist.json"); - serde_json::from_str::>(&whitelist_file) - .expect("Failed to read contracts call whitelist") -} - -#[cfg(not(feature = "ci-runtime"))] -pub mod general { - use super::*; - use polymesh_runtime_develop::{self as rt, constants::time}; - - pub type ChainSpec = GenericChainSpec; - - session_keys!(); - - fn genesis( - initial_authorities: Vec, - root_key: AccountId, - other_funded_accounts: Vec, - treasury_amount: u128, - key_amount: u128, - ) -> rt::runtime::RuntimeGenesisConfig { - let (identities, stakers, balances) = dev_genesis_processed_data( - &initial_authorities, - other_funded_accounts, - treasury_amount, - key_amount, - ); - - rt::runtime::RuntimeGenesisConfig { - system: frame(rt::WASM_BINARY), - asset: asset!(), - checkpoint: checkpoint!(), - identity: pallet_identity::GenesisConfig { - identities, - ..Default::default() - }, - balances: rt::runtime::BalancesConfig { balances }, - indices: pallet_indices::GenesisConfig { indices: vec![] }, - sudo: pallet_sudo::GenesisConfig { - key: Some(root_key.clone()), - ..Default::default() - }, - session: session!(initial_authorities, session_keys), - validators: validators!(stakers, PerThing::from_rational(1u64, 4u64)), - staking: staking!(stakers), - pips: pips!(time::MINUTES, MaybeBlock::None, 25), - im_online: Default::default(), - authority_discovery: Default::default(), - babe: pallet_babe::GenesisConfig { - authorities: vec![], - epoch_config: Some(rt::runtime::BABE_GENESIS_EPOCH_CONFIG), - ..Default::default() - }, - grandpa: Default::default(), - /* - pallet_contracts: Some(pallet_contracts::GenesisConfig { - current_schedule: pallet_contracts::Schedule { - enable_println, // this should only be enabled on development chains - ..Default::default() - }, - }), - */ - // Governance Council: - committee_membership: group_membership!(1), - polymesh_committee: committee!(1), - // CDD providers - cdd_service_providers: group_membership!(1), - // Technical Committee: - technical_committee_membership: group_membership!(1), - technical_committee: committee!(1), - // Upgrade Committee: - upgrade_committee_membership: group_membership!(1), - upgrade_committee: committee!(1), - protocol_fee: protocol_fee!(), - settlement: Default::default(), - portfolio: Default::default(), - statistics: Default::default(), - multi_sig: Default::default(), - corporate_action: corporate_actions!(), - capital_distribution: Default::default(), - corporate_ballot: Default::default(), - polymesh_contracts: polymesh_contracts!(Some(root_key)), - } - } - - fn develop_genesis() -> rt::runtime::RuntimeGenesisConfig { - genesis( - vec![get_authority_keys_from_seed("Alice", false)], - seeded_acc_id("Alice"), - vec![ - seeded_acc_id("Bob"), - seeded_acc_id("Charlie"), - seeded_acc_id("Dave"), - seeded_acc_id("Eve"), - ], - DEV_TREASURY, - DEV_KEYS, - ) - } - - fn config( - name: &str, - id: &str, - ctype: ChainType, - genesis: impl 'static + Sync + Send + Fn() -> rt::runtime::RuntimeGenesisConfig, - ) -> ChainSpec { - let props = Some(polymesh_props(42)); - ChainSpec::from_genesis( - name, - id, - ctype, - genesis, - vec![], - None, - None, - None, - props, - <_>::default(), - ) - } - - pub fn develop_config() -> ChainSpec { - config( - "Development", - "dev", - ChainType::Development, - develop_genesis, - ) - } - - fn local_genesis() -> rt::runtime::RuntimeGenesisConfig { - genesis( - vec![ - get_authority_keys_from_seed("Alice", false), - get_authority_keys_from_seed("Bob", false), - get_authority_keys_from_seed("Charlie", false), - ], - seeded_acc_id("Alice"), - vec![seeded_acc_id("Dave"), seeded_acc_id("Eve")], - DEV_TREASURY, - DEV_KEYS, - ) - } - - pub fn local_config() -> ChainSpec { - config( - "Local Development", - "local_dev", - ChainType::Local, - local_genesis, - ) - } -} - -pub mod testnet { - use super::*; - use polymesh_runtime_testnet::{self as rt, constants::time}; - - pub type ChainSpec = GenericChainSpec; - - session_keys!(); - - fn genesis( - initial_authorities: Vec, - root_key: AccountId, - treasury_amount: u128, - key_amount: u128, - ) -> rt::runtime::RuntimeGenesisConfig { - let (identities, stakers, balances) = genesis_processed_data( - &initial_authorities, - root_key.clone(), - treasury_amount, - key_amount, - ); - - rt::runtime::RuntimeGenesisConfig { - system: frame(rt::WASM_BINARY), - asset: asset!(), - checkpoint: checkpoint!(), - identity: pallet_identity::GenesisConfig { - identities, - ..Default::default() - }, - balances: rt::runtime::BalancesConfig { balances }, - indices: pallet_indices::GenesisConfig { indices: vec![] }, - session: session!(initial_authorities, session_keys), - validators: validators!(stakers, PerThing::from_rational(1u64, 10u64)), - staking: staking!(stakers), - pips: pips!(time::DAYS * 30, MaybeBlock::None, 1000), - im_online: Default::default(), - authority_discovery: Default::default(), - babe: pallet_babe::GenesisConfig { - authorities: vec![], - epoch_config: Some(rt::runtime::BABE_GENESIS_EPOCH_CONFIG), - ..Default::default() - }, - grandpa: Default::default(), - /* - pallet_contracts: Some(pallet_contracts::GenesisConfig { - current_schedule: pallet_contracts::Schedule { - enable_println, // this should only be enabled on development chains - ..Default::default() - }, - }), - */ - // Governing council - committee_membership: group_membership!(1, 2, 3), // 3 GC members - polymesh_committee: committee!(1, (2, 3)), // RC = 1, 2/3 votes required - // CDD providers - cdd_service_providers: group_membership!(1), - // Technical Committee: - technical_committee_membership: group_membership!(3, 4, 5), // One GC member + genesis operator + Bridge Multisig - technical_committee: committee!(3), // RC = 3, 1/2 votes required - // Upgrade Committee: - upgrade_committee_membership: group_membership!(1), // One GC member - upgrade_committee: committee!(1), // RC = 1, 1/2 votes required - protocol_fee: protocol_fee!(), - settlement: Default::default(), - portfolio: Default::default(), - statistics: Default::default(), - multi_sig: Default::default(), - corporate_action: corporate_actions!(), - capital_distribution: Default::default(), - corporate_ballot: Default::default(), - polymesh_contracts: polymesh_contracts!(Some(root_key)), - } - } - - fn bootstrap_genesis() -> rt::runtime::RuntimeGenesisConfig { - genesis( - vec![ - get_authority_keys_from_seed("Alice", false), - get_authority_keys_from_seed("Bob", false), - get_authority_keys_from_seed("Charlie", false), - ], - seeded_acc_id("polymesh_5"), - BOOTSTRAP_TREASURY, - BOOTSTRAP_KEYS, - ) - } - - pub fn bootstrap_config() -> ChainSpec { - // provide boot nodes - let boot_nodes = vec![ - "/dns4/testnet-bootnode-001.polymesh.live/tcp/443/wss/p2p/12D3KooWNG4hedmYixq3Vx4crj5VFxHLFWjqYfbAZwFekHJ8Y7du".parse().expect("Unable to parse bootnode"), - "/dns4/testnet-bootnode-002.polymesh.live/tcp/443/wss/p2p/12D3KooW9uY8zFnHB5UKyLuwUpZLpPUSJYT2tYfFvpfNCd2K1ceZ".parse().expect("Unable to parse bootnode"), - "/dns4/testnet-bootnode-003.polymesh.live/tcp/443/wss/p2p/12D3KooWB7AyqsmerKTmcMoyMJJw6ddwWUJ7nFBDGw2viNGN2DBX".parse().expect("Unable to parse bootnode"), - "/dns4/testnet-bootnode-001.polymesh.live/tcp/30333/p2p/12D3KooWNG4hedmYixq3Vx4crj5VFxHLFWjqYfbAZwFekHJ8Y7du".parse().expect("Unable to parse bootnode"), - "/dns4/testnet-bootnode-002.polymesh.live/tcp/30333/p2p/12D3KooW9uY8zFnHB5UKyLuwUpZLpPUSJYT2tYfFvpfNCd2K1ceZ".parse().expect("Unable to parse bootnode"), - "/dns4/testnet-bootnode-003.polymesh.live/tcp/30333/p2p/12D3KooWB7AyqsmerKTmcMoyMJJw6ddwWUJ7nFBDGw2viNGN2DBX".parse().expect("Unable to parse bootnode"), - ]; - ChainSpec::from_genesis( - "Polymesh Testnet", - "testnet", - ChainType::Live, - bootstrap_genesis, - boot_nodes, - Some( - TelemetryEndpoints::new(vec![(STAGING_TELEMETRY_URL.to_string(), 0)]) - .expect("Testnet bootstrap telemetry url is valid; qed"), - ), - Some(&*"/polymesh/testnet"), - None, - Some(polymesh_props(42)), - Default::default(), - ) - } - - fn develop_genesis() -> rt::runtime::RuntimeGenesisConfig { - genesis( - vec![get_authority_keys_from_seed("Alice", false)], - seeded_acc_id("Eve"), - BOOTSTRAP_TREASURY, - BOOTSTRAP_KEYS, - ) - } - - pub fn develop_config() -> ChainSpec { - // provide boot nodes - let boot_nodes = vec![]; - ChainSpec::from_genesis( - "Polymesh Testnet Develop", - "dev_testnet", - ChainType::Development, - develop_genesis, - boot_nodes, - None, - None, - None, - Some(polymesh_props(42)), - Default::default(), - ) - } - - fn local_genesis() -> rt::runtime::RuntimeGenesisConfig { - genesis( - vec![ - get_authority_keys_from_seed("Alice", false), - get_authority_keys_from_seed("Bob", false), - get_authority_keys_from_seed("Charlie", false), - ], - seeded_acc_id("Eve"), - BOOTSTRAP_TREASURY, - BOOTSTRAP_KEYS, - ) - } - - pub fn local_config() -> ChainSpec { - // provide boot nodes - let boot_nodes = vec![]; - ChainSpec::from_genesis( - "Polymesh Testnet Local", - "local_testnet", - ChainType::Local, - local_genesis, - boot_nodes, - None, - None, - None, - Some(polymesh_props(42)), - Default::default(), - ) - } -} - -pub mod mainnet { - use super::*; - use polymesh_runtime_mainnet::{self as rt, constants::time}; - - pub type ChainSpec = GenericChainSpec; - - session_keys!(); - - fn genesis( - initial_authorities: Vec, - root_key: AccountId, - treasury_amount: u128, - key_amount: u128, - ) -> rt::runtime::RuntimeGenesisConfig { - let (identities, stakers, balances) = genesis_processed_data( - &initial_authorities, - root_key.clone(), - treasury_amount, - key_amount, - ); - - rt::runtime::RuntimeGenesisConfig { - system: frame(rt::WASM_BINARY), - asset: asset!(), - checkpoint: checkpoint!(), - identity: pallet_identity::GenesisConfig { - identities, - ..Default::default() - }, - balances: rt::runtime::BalancesConfig { balances }, - indices: pallet_indices::GenesisConfig { indices: vec![] }, - session: session!(initial_authorities, session_keys), - validators: validators!(stakers, PerThing::from_rational(1u64, 10u64)), - staking: staking!(stakers), - pips: pips!(time::DAYS * 30, MaybeBlock::Some(time::DAYS * 90), 1000), - im_online: Default::default(), - authority_discovery: Default::default(), - babe: pallet_babe::GenesisConfig { - authorities: vec![], - epoch_config: Some(rt::runtime::BABE_GENESIS_EPOCH_CONFIG), - ..Default::default() - }, - grandpa: Default::default(), - /* - pallet_contracts: Some(pallet_contracts::GenesisConfig { - current_schedule: pallet_contracts::Schedule { - enable_println, // this should only be enabled on development chains - ..Default::default() - }, - }), - */ - // Governing council - committee_membership: group_membership!(1, 2, 3), // 3 GC members - polymesh_committee: committee!(1, (2, 3)), // RC = 1, 2/3 votes required - // CDD providers - cdd_service_providers: group_membership!(1), // GC_1 is also a CDD provider - // Technical Committee: - technical_committee_membership: group_membership!(1), // One GC member - technical_committee: committee!(1), // 1/2 votes required - // Upgrade Committee: - upgrade_committee_membership: group_membership!(1), // One GC member - upgrade_committee: committee!(1), // 1/2 votes required - protocol_fee: protocol_fee!(), - settlement: Default::default(), - portfolio: Default::default(), - statistics: Default::default(), - multi_sig: Default::default(), - corporate_action: corporate_actions!(), - capital_distribution: Default::default(), - corporate_ballot: Default::default(), - polymesh_contracts: polymesh_contracts!(Some(root_key)), - } - } - - fn bootstrap_genesis() -> rt::runtime::RuntimeGenesisConfig { - genesis( - vec![ - get_authority_keys_from_seed("Alice", false), - get_authority_keys_from_seed("Bob", false), - get_authority_keys_from_seed("Charlie", false), - ], - seeded_acc_id("polymesh_5"), - BOOTSTRAP_TREASURY, - BOOTSTRAP_KEYS, - ) - } - - pub fn bootstrap_config() -> ChainSpec { - // provide boot nodes - let boot_nodes = vec![ - "/dns4/mainnet-bootnode-001.polymesh.network/tcp/443/wss/p2p/12D3KooWDiaRBvzjt1p95mTqJETxJw3nz1E6fF2Yf62ojimEGJS7".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-002.polymesh.network/tcp/443/wss/p2p/12D3KooWN9E6gtgybnXwDVNMUGwSA82pzBj72ibGYfZuomyEDQTU".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-003.polymesh.network/tcp/443/wss/p2p/12D3KooWQ3K8jGadCQSVhihLEsJfSz3TJGgBHMU3vTtK3jd2Wq5E".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-004.polymesh.network/tcp/443/wss/p2p/12D3KooWAjLb7S2FKk1Bxyw3vkaqgcSpjfxHwpGvqcXACFYSK8Xq".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-005.polymesh.network/tcp/443/wss/p2p/12D3KooWKvXCP5b5PW4tHFAYyFVk3kRhwF3qXJbnVcPSGHP6Zmjg".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-006.polymesh.network/tcp/443/wss/p2p/12D3KooWBQhDAjfo13dM4nsogXD39F5TcN9iTVzjXgPqFn9Yaccz".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-007.polymesh.network/tcp/443/wss/p2p/12D3KooWMwFdYC53MqdyR9WYvJiPfxfYXh65NfY9QSuZeyKa53fg".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-001.polymesh.network/tcp/30333/p2p/12D3KooWDiaRBvzjt1p95mTqJETxJw3nz1E6fF2Yf62ojimEGJS7".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-002.polymesh.network/tcp/30333/p2p/12D3KooWN9E6gtgybnXwDVNMUGwSA82pzBj72ibGYfZuomyEDQTU".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-003.polymesh.network/tcp/30333/p2p/12D3KooWQ3K8jGadCQSVhihLEsJfSz3TJGgBHMU3vTtK3jd2Wq5E".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-004.polymesh.network/tcp/30333/p2p/12D3KooWAjLb7S2FKk1Bxyw3vkaqgcSpjfxHwpGvqcXACFYSK8Xq".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-005.polymesh.network/tcp/30333/p2p/12D3KooWKvXCP5b5PW4tHFAYyFVk3kRhwF3qXJbnVcPSGHP6Zmjg".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-006.polymesh.network/tcp/30333/p2p/12D3KooWBQhDAjfo13dM4nsogXD39F5TcN9iTVzjXgPqFn9Yaccz".parse().expect("Unable to parse bootnode"), - "/dns4/mainnet-bootnode-007.polymesh.network/tcp/30333/p2p/12D3KooWMwFdYC53MqdyR9WYvJiPfxfYXh65NfY9QSuZeyKa53fg".parse().expect("Unable to parse bootnode"), - ]; - ChainSpec::from_genesis( - "Polymesh Mainnet", - "mainnet", - ChainType::Live, - bootstrap_genesis, - boot_nodes, - Some( - TelemetryEndpoints::new(vec![(STAGING_TELEMETRY_URL.to_string(), 0)]) - .expect("Mainnet bootstrap telemetry url is valid; qed"), - ), - Some(&*"/polymesh/mainnet"), - None, - Some(polymesh_props(12)), - Default::default(), - ) - } - - fn develop_genesis() -> rt::runtime::RuntimeGenesisConfig { - genesis( - vec![get_authority_keys_from_seed("Alice", false)], - seeded_acc_id("Eve"), - BOOTSTRAP_TREASURY, - BOOTSTRAP_KEYS, - ) - } - - pub fn develop_config() -> ChainSpec { - // provide boot nodes - let boot_nodes = vec![]; - ChainSpec::from_genesis( - "Polymesh Mainnet Develop", - "dev_mainnet", - ChainType::Development, - develop_genesis, - boot_nodes, - None, - None, - None, - Some(polymesh_props(12)), - Default::default(), - ) - } - - fn local_genesis() -> rt::runtime::RuntimeGenesisConfig { - genesis( - vec![ - get_authority_keys_from_seed("Alice", false), - get_authority_keys_from_seed("Bob", false), - get_authority_keys_from_seed("Charlie", false), - ], - seeded_acc_id("Eve"), - BOOTSTRAP_TREASURY, - BOOTSTRAP_KEYS, - ) - } - - pub fn local_config() -> ChainSpec { - // provide boot nodes - let boot_nodes = vec![]; - ChainSpec::from_genesis( - "Polymesh Mainnet Local", - "local_mainnet", - ChainType::Local, - local_genesis, - boot_nodes, - None, - None, - None, - Some(polymesh_props(12)), - Default::default(), - ) - } -} - -#[cfg(feature = "ci-runtime")] -pub mod general { - use super::*; - use polymesh_runtime_develop::{self as rt, constants::time}; - - pub type ChainSpec = GenericChainSpec; - - session_keys!(); - - fn genesis( - initial_authorities: Vec, - root_key: AccountId, - treasury_amount: u128, - key_amount: u128, - ) -> rt::runtime::RuntimeGenesisConfig { - let (identities, stakers, balances) = genesis_processed_data( - &initial_authorities, - root_key.clone(), - treasury_amount, - key_amount, - ); - - rt::runtime::RuntimeGenesisConfig { - system: frame(rt::WASM_BINARY), - asset: asset!(), - checkpoint: checkpoint!(), - identity: pallet_identity::GenesisConfig { - identities, - ..Default::default() - }, - balances: rt::runtime::BalancesConfig { balances }, - indices: pallet_indices::GenesisConfig { indices: vec![] }, - sudo: pallet_sudo::GenesisConfig { - key: Some(root_key.clone()), - ..Default::default() - }, - session: session!(initial_authorities, session_keys), - validators: validators!(stakers, PerThing::zero()), - staking: staking!(stakers), - pips: pips!(time::DAYS * 7, MaybeBlock::None, 1000), - im_online: Default::default(), - authority_discovery: Default::default(), - babe: pallet_babe::GenesisConfig { - authorities: vec![], - epoch_config: Some(rt::runtime::BABE_GENESIS_EPOCH_CONFIG), - ..Default::default() - }, - grandpa: Default::default(), - /* - pallet_contracts: Some(pallet_contracts::GenesisConfig { - current_schedule: pallet_contracts::Schedule { - enable_println, // this should only be enabled on development chains - ..Default::default() - }, - }), - */ - // Governing council - committee_membership: group_membership!(1, 2, 3, 5), - polymesh_committee: committee!(1, (2, 4)), - // CDD providers - cdd_service_providers: group_membership!(1, 2, 3, 5), - // Technical Committee: - technical_committee_membership: group_membership!(3, 5), - technical_committee: committee!(5), - // Upgrade Committee: - upgrade_committee_membership: group_membership!(1, 5), - upgrade_committee: committee!(5), - protocol_fee: protocol_fee!(), - settlement: Default::default(), - portfolio: Default::default(), - statistics: Default::default(), - multi_sig: Default::default(), - corporate_action: corporate_actions!(), - capital_distribution: Default::default(), - corporate_ballot: Default::default(), - polymesh_contracts: polymesh_contracts!(Some(root_key)), - } - } - - fn develop_genesis() -> rt::runtime::RuntimeGenesisConfig { - genesis( - vec![get_authority_keys_from_seed("Bob", false)], - seeded_acc_id("Alice"), - DEV_TREASURY, - DEV_KEYS, - ) - } - - pub fn develop_config() -> ChainSpec { - // provide boot nodes - let boot_nodes = vec![]; - ChainSpec::from_genesis( - "Polymesh CI Develop", - "dev_ci", - ChainType::Development, - develop_genesis, - boot_nodes, - None, - None, - None, - Some(polymesh_props(42)), - Default::default(), - ) - } - - fn local_genesis() -> rt::runtime::RuntimeGenesisConfig { - genesis( - vec![ - get_authority_keys_from_seed("Alice", false), - get_authority_keys_from_seed("Bob", false), - get_authority_keys_from_seed("Charlie", false), - ], - seeded_acc_id("Alice"), - DEV_TREASURY, - DEV_KEYS, - ) - } - - pub fn local_config() -> ChainSpec { - // provide boot nodes - let boot_nodes = vec![]; - ChainSpec::from_genesis( - "Polymesh CI Local", - "local_ci", - ChainType::Local, - local_genesis, - boot_nodes, - None, - None, - None, - Some(polymesh_props(42)), - Default::default(), - ) - } -} diff --git a/src/chain_spec/ci_runtime.rs b/src/chain_spec/ci_runtime.rs new file mode 100644 index 0000000000..d073f81764 --- /dev/null +++ b/src/chain_spec/ci_runtime.rs @@ -0,0 +1,21 @@ +use sc_chain_spec::ChainType; +use serde_json::json; + +use crate::chain_spec::common::{polymesh_properties, ChainSpec}; + +pub fn develop_genesis_config() -> serde_json::Value { + unimplemented!() +} + +pub fn develop_chain_spec() -> ChainSpec { + let code = polymesh_runtime_develop::runtime::WASM_BINARY + .expect("Development wasm binary is not available."); + + ChainSpec::builder(code, Default::default()) + .with_name("Polymesh CI Develop") + .with_id("dev_ci") + .with_chain_type(ChainType::Development) + .with_genesis_config_patch(develop_genesis_config()) + .with_properties(polymesh_properties(42)) + .build() +} diff --git a/src/chain_spec/common.rs b/src/chain_spec/common.rs new file mode 100644 index 0000000000..bff0b1acb9 --- /dev/null +++ b/src/chain_spec/common.rs @@ -0,0 +1,222 @@ +use std::convert::TryInto; + +use grandpa::AuthorityId as GrandpaId; +use pallet_im_online::sr25519::AuthorityId as ImOnlineId; +use pallet_staking::StakerStatus; +use sc_chain_spec::ChainSpecExtension; +use sc_network::config::MultiaddrWithPeerId; +use sc_service::{ChainType, Properties}; +use sc_telemetry::TelemetryEndpoints; +use serde::{Deserialize, Serialize}; +use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; +use sp_consensus_babe::AuthorityId as BabeId; +use sp_core::{sr25519, Pair, Public}; +use sp_runtime::traits::{AccountIdConversion, IdentifyAccount, Verify}; + +use polymesh_primitives::asset_metadata::{AssetMetadataName, AssetMetadataSpec}; +use polymesh_primitives::calendar::{CalendarPeriod, CalendarUnit}; +use polymesh_primitives::constants::currency::ONE_POLY; +use polymesh_primitives::identity_id::GenesisIdentityRecord; +use polymesh_primitives::{ticker, AccountId, Balance, IdentityId, Moment, Signature, Ticker}; + +// The URL for the telemetry server. +pub(crate) const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polymesh.network/submit/"; +pub(crate) const BOOTSTRAP_KEYS: u128 = 6_000 * ONE_POLY; +pub(crate) const BOOTSTRAP_TREASURY: u128 = 17_500_000 * ONE_POLY; +pub(crate) const DEV_KEYS: u128 = 30_000_000 * ONE_POLY; +pub(crate) const DEV_TREASURY: u128 = 50_000_000 * ONE_POLY; +pub(crate) const INITIAL_BOND: u128 = 500 * ONE_POLY; + +pub(crate) type InitialAuth = ( + AccountId, + AccountId, + GrandpaId, + BabeId, + ImOnlineId, + AuthorityDiscoveryId, +); +pub(crate) type AccountPublic = ::Signer; + +/// Node `ChainSpec` extensions. +/// +/// Additional parameters for some Substrate core modules, +/// customizable from the chain spec. +#[derive(Default, Clone, Serialize, Deserialize, ChainSpecExtension)] +#[serde(rename_all = "camelCase")] +pub struct Extensions { + /// The light sync state extension used by the sync-state rpc. + pub light_sync_state: sc_sync_state_rpc::LightSyncStateExtension, +} + +/// Specialized `ChainSpec`. +pub type ChainSpec = sc_service::GenericChainSpec; + +pub(crate) fn polymesh_properties(ss58_format: u8) -> Properties { + let mut properties = Properties::new(); + properties.insert("ss58Format".to_string(), ss58_format.into()); + properties.insert("tokenDecimals".to_string(), 6.into()); + properties.insert("tokenSymbol".to_string(), "POLYX".into()); + + properties +} + +/// Generate an account ID from seed. +pub fn get_account_id_from_seed(seed: &str) -> AccountId +where + AccountPublic: From<::Public>, +{ + AccountPublic::from(get_from_seed::(seed)).into_account() +} + +pub(crate) fn seeded_acc_id(seed: &str) -> AccountId { + get_account_id_from_seed::(seed) +} + +/// Generate a crypto pair from seed. +pub(crate) fn get_from_seed(seed: &str) -> ::Public { + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() +} + +/// Generate an Aura authority key. +pub(crate) fn get_authority_keys_from_seed(s: &str, uniq: bool) -> InitialAuth { + let stash_acc_id = seeded_acc_id(&format!("{}//stash", s)); + let acc_id = seeded_acc_id(s); + + let (grandpa_id, babe_id, im_online_id, discovery_id) = if uniq { + ( + get_from_seed::(&format!("{}//gran", s)), + get_from_seed::(&format!("{}//babe", s)), + get_from_seed::(&format!("{}//imon", s)), + get_from_seed::(&format!("{}//auth", s)), + ) + } else { + ( + get_from_seed::(s), + get_from_seed::(s), + get_from_seed::(s), + get_from_seed::(s), + ) + }; + + ( + stash_acc_id, + acc_id, + grandpa_id, + babe_id, + im_online_id, + discovery_id, + ) +} + +pub(crate) fn adjust_last(bytes: &mut [u8], n: u8) -> &str { + bytes[bytes.len() - 1] = n + b'0'; + core::str::from_utf8(bytes).unwrap() +} + +/// The `ChainSpec` setup mode. +pub(crate) enum ChainSpecMode { + Bootstrap, + Development, + Local, +} + +/// Data required for setting up a staker in genesis. +pub(crate) struct StakersData { + identity_id: IdentityId, + stash_id: AccountId, + controller_id: AccountId, + bonded_amount: Balance, + status: StakerStatus, +} + +impl StakersData { + /// Creates a new [`StakersData`] instance. + pub(crate) fn new( + identity_id: IdentityId, + stash_id: AccountId, + controller_id: AccountId, + bonded_amount: Balance, + status: StakerStatus, + ) -> Self { + Self { + identity_id, + stash_id, + controller_id, + bonded_amount, + status, + } + } +} + +/// Data required for setting up the initial genesis state. +pub(crate) struct GenesisData { + identities_record: Vec>, + stakers_data: Vec, + identities_balance: Vec<(AccountId, Balance)>, +} + +impl GenesisData { + /// Creates a new [`GenesisData`] instance. + pub(crate) fn new( + identities_record: Vec>, + stakers_data: Vec, + identities_balance: Vec<(AccountId, Balance)>, + ) -> Self { + Self { + identities_record, + stakers_data, + identities_balance, + } + } +} + +pub(crate) fn asset_genesis_config() -> serde_json::Value { + serde_json::json!({ + "ticker_registration_config": ticker_registration_config(), + "reserved_country_currency_codes": currency_codes(), + "asset_metadata": asset_metadata(), + }) +} + +pub(crate) fn checkpoint_genesis_config() -> serde_json::Value { + let period = CalendarPeriod { + unit: CalendarUnit::Week, + amount: 1, + }; + + serde_json::json!({ + "schedules_max_complexity": period.complexity(), + }) +} + +fn ticker_registration_config() -> pallet_asset::TickerRegistrationConfig { + pallet_asset::TickerRegistrationConfig { + max_ticker_length: 12, + registration_length: Some(5_184_000_000), + } +} + +fn currency_codes() -> Vec { + #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + pub struct FiatCurrency { + pub codes: Vec, + } + + let currency_file = include_str!("../data/currency_symbols.json"); + let currency_data: FiatCurrency = + serde_json::from_str(¤cy_file).expect("unable do parse/deserialize currency file"); + + currency_data + .codes + .into_iter() + .map(|y| Ticker::from_slice_truncated(y.as_bytes())) + .collect() +} + +fn asset_metadata() -> Vec<(AssetMetadataName, AssetMetadataSpec)> { + let asset_metadata_file = include_str!("../data/asset_metadata.json"); + serde_json::from_str(&asset_metadata_file) + .expect("unable do parse/deserialize asset metadata file") +} diff --git a/src/chain_spec/develop_runtime.rs b/src/chain_spec/develop_runtime.rs new file mode 100644 index 0000000000..5e51a4b237 --- /dev/null +++ b/src/chain_spec/develop_runtime.rs @@ -0,0 +1,164 @@ +use pallet_staking::StakerStatus; +use polymesh_primitives::Balance; +use sc_chain_spec::ChainType; +use sc_rpc::chain; +use serde_json::json; +use sp_runtime::traits::AccountIdConversion; + +use polymesh_primitives::constants::TREASURY_PALLET_ID; +use polymesh_primitives::identity_id::GenesisIdentityRecord; +use polymesh_primitives::{AccountId, IdentityId, SecondaryKey}; + +use crate::chain_spec::common::{get_authority_keys_from_seed, polymesh_properties}; +use crate::chain_spec::common::{seeded_acc_id, GenesisData, InitialAuth, StakersData}; +use crate::chain_spec::common::{ChainSpec, ChainSpecMode, DEV_KEYS, DEV_TREASURY, INITIAL_BOND}; + +pub(crate) fn develop_chain_spec(chain_spec_mode: ChainSpecMode) -> ChainSpec { + let code = polymesh_runtime_develop::runtime::WASM_BINARY + .expect("Development wasm binary is not available."); + + match chain_spec_mode { + ChainSpecMode::Bootstrap => unimplemented!(), + ChainSpecMode::Development => dev_chain_spec(code), + ChainSpecMode::Local => local_chain_spec(code), + } +} + +/// Returns [`ChainSpec`] for creating a development chain. +fn dev_chain_spec(code: &[u8]) -> ChainSpec { + let initial_authorities = vec![get_authority_keys_from_seed("Alice", false)]; + + let other_funded_accounts = vec![ + seeded_acc_id("Bob"), + seeded_acc_id("Charlie"), + seeded_acc_id("Dave"), + seeded_acc_id("Eve"), + ]; + + let root_key = seeded_acc_id("Alice"); + + let genesis_json_config = + develop_genesis_config(initial_authorities, other_funded_accounts, root_key); + + ChainSpec::builder(code, Default::default()) + .with_name("Development") + .with_id("dev") + .with_chain_type(ChainType::Development) + .with_properties(polymesh_properties(42)) + .with_genesis_config_patch(genesis_json_config) + .build() +} + +/// Returns [`ChainSpec`] for creating a local development chain. +fn local_chain_spec(code: &[u8]) -> ChainSpec { + let initial_authorities = vec![ + get_authority_keys_from_seed("Alice", false), + get_authority_keys_from_seed("Bob", false), + get_authority_keys_from_seed("Charlie", false), + ]; + + let other_funded_accounts = vec![seeded_acc_id("Dave"), seeded_acc_id("Eve")]; + + let root_key = seeded_acc_id("Alice"); + + let genesis_json_config = + develop_genesis_config(initial_authorities, other_funded_accounts, root_key); + + ChainSpec::builder(code, Default::default()) + .with_name("Local Development") + .with_id("local_dev") + .with_chain_type(ChainType::Local) + .with_properties(polymesh_properties(42)) + .with_genesis_config_patch(genesis_json_config) + .build() +} + +fn develop_genesis_config( + initial_authorities: Vec, + other_funded_accounts: Vec, + root_key: AccountId, +) -> serde_json::Value { + let genesis_data = genesis_data(&initial_authorities, &other_funded_accounts); + + serde_json::json!({ + "asset": crate::chain_spec::common::asset_genesis_config(), + "chekpoint": crate::chain_spec::common::checkpoint_genesis_config(), + "identity": + "balances": + "indices": + "sudo": + "session": + "staking": + "pips": + "babe": + "committee_membership": + "polymesh_committee": + "cdd_service_providers": + "technical_committee_membership": + "technical_committee": + "upgrade_committee_membership": + "upgrade_committee": + "protocol_fee": + "corporate_action": + "polymesh_contracts": + }) +} + +/// Returns [`GenesisData`] given the initial authorities and other funded accounts. +fn genesis_data( + initial_authorities: &[InitialAuth], + other_funded_accounts: &[AccountId], +) -> GenesisData { + let mut stakers_data = Vec::new(); + let mut identities_balance = Vec::new(); + let mut genesis_id_record = GenesisIdentityRecord::new(1u8, initial_authorities[0].0.clone()); + + for (stash_acc, controller_acc, ..) in initial_authorities { + let staker = StakersData::new( + IdentityId::from(1), + stash_acc.clone(), + controller_acc.clone(), + INITIAL_BOND, + StakerStatus::Validator, + ); + stakers_data.push(staker); + add_secondary_key( + stash_acc.clone(), + &mut identities_balance, + &mut genesis_id_record, + ); + add_secondary_key( + controller_acc.clone(), + &mut identities_balance, + &mut genesis_id_record, + ); + } + + for acc_id in other_funded_accounts { + add_secondary_key( + acc_id.clone(), + &mut identities_balance, + &mut genesis_id_record, + ); + } + + // Treasury + identities_balance.push((TREASURY_PALLET_ID.into_account_truncating(), DEV_TREASURY)); + + // The 0th key is the primary key + genesis_id_record.secondary_keys.remove(0); + + GenesisData::new(vec![genesis_id_record], stakers_data, identities_balance) +} + +/// Adds `account_id` as a secondary key with full permissions of `genesis_id_record`. +fn add_secondary_key( + account_id: AccountId, + identities_balance: &mut Vec<(AccountId, Balance)>, + genesis_id_record: &mut GenesisIdentityRecord, +) { + identities_balance.push((account_id.clone(), DEV_KEYS)); + genesis_id_record + .secondary_keys + .push(SecondaryKey::from_account_id_with_full_perms(account_id)); +} diff --git a/src/chain_spec/mainnet_runtime.rs b/src/chain_spec/mainnet_runtime.rs new file mode 100644 index 0000000000..240fc66104 --- /dev/null +++ b/src/chain_spec/mainnet_runtime.rs @@ -0,0 +1,216 @@ +use pallet_staking::StakerStatus; +use sc_chain_spec::ChainType; +use sc_network::config::MultiaddrWithPeerId; +use sc_telemetry::TelemetryEndpoints; +use serde_json::json; +use sp_runtime::traits::AccountIdConversion; + +use polymesh_primitives::constants::TREASURY_PALLET_ID; +use polymesh_primitives::identity_id::GenesisIdentityRecord; +use polymesh_primitives::{AccountId, Balance, IdentityId, SecondaryKey, SystematicIssuers}; + +use crate::chain_spec::common::{adjust_last, get_authority_keys_from_seed}; +use crate::chain_spec::common::{polymesh_properties, seeded_acc_id}; +use crate::chain_spec::common::{ChainSpec, ChainSpecMode}; +use crate::chain_spec::common::{GenesisData, InitialAuth, StakersData}; +use crate::chain_spec::common::{BOOTSTRAP_KEYS, BOOTSTRAP_TREASURY}; +use crate::chain_spec::common::{INITIAL_BOND, STAGING_TELEMETRY_URL}; + +pub fn mainnet_chain_spec(chain_spec_mode: ChainSpecMode) -> ChainSpec { + let code = polymesh_runtime_mainnet::runtime::WASM_BINARY + .expect("Mainnet wasm binary is not available."); + + match chain_spec_mode { + ChainSpecMode::Bootstrap => bootstap_chain_spec(code), + ChainSpecMode::Development => dev_chain_spec(code), + ChainSpecMode::Local => local_chain_spec(code), + } +} + +/// Returns [`ChainSpec`] for bootstrapping mainnet. +fn bootstap_chain_spec(code: &[u8]) -> ChainSpec { + let root_key = seeded_acc_id("polymesh_5"); + + let initial_authorities = vec![ + get_authority_keys_from_seed("Alice", false), + get_authority_keys_from_seed("Bob", false), + get_authority_keys_from_seed("Charlie", false), + ]; + + let mainnet_telemetry = TelemetryEndpoints::new(vec![(STAGING_TELEMETRY_URL.to_string(), 0)]) + .expect("Mainnet bootstrap telemetry url is valid; qed"); + + ChainSpec::builder(code, Default::default()) + .with_name("Polymesh Mainnet") + .with_id("mainnet") + .with_chain_type(ChainType::Live) + .with_boot_nodes(mainnet_boot_nodes()) + .with_telemetry_endpoints(mainnet_telemetry) + .with_protocol_id("/polymesh/mainnet") + .with_properties(polymesh_properties(12)) + .with_genesis_config_patch(mainnet_genesis_config()) + .build() +} + +/// Returns [`ChainSpec`] for creating a dev mainnet chain. +fn dev_chain_spec(code: &[u8]) -> ChainSpec { + let root_key = seeded_acc_id("Eve"); + + let initial_authorities = vec![get_authority_keys_from_seed("Alice", false)]; + + ChainSpec::builder(code, Default::default()) + .with_name("Polymesh Mainnet Develop") + .with_id("dev_mainnet") + .with_chain_type(ChainType::Development) + .with_properties(polymesh_properties(12)) + .with_genesis_config_patch(mainnet_genesis_config()) + .build() +} + +/// Returns [`ChainSpec`] for creating a local mainnet chain. +fn local_chain_spec(code: &[u8]) -> ChainSpec { + let root_key = seeded_acc_id("Eve"); + + let initial_authorities = vec![ + get_authority_keys_from_seed("Alice", false), + get_authority_keys_from_seed("Bob", false), + get_authority_keys_from_seed("Charlie", false), + ]; + + ChainSpec::builder(code, Default::default()) + .with_name("Polymesh Mainnet Local") + .with_id("local_mainnet") + .with_chain_type(ChainType::Local) + .with_properties(polymesh_properties(12)) + .with_genesis_config_patch(mainnet_genesis_config()) + .build() +} + +fn mainnet_genesis_config() -> serde_json::Value { + unimplemented!() +} + +pub(crate) fn genesis_data( + initial_authorities: &[InitialAuth], + root_key: AccountId, +) -> GenesisData { + // Identities and their roles + // 1 = [Polymesh] GenesisCouncil (1 of 3) + UpgradeCommittee (1 of 1) + TechnicalCommittee (1 of 1) + GCReleaseCoordinator + // 2 = GenesisCouncil (2 of 3) + // 3 = GenesisCouncil (3 of 3) + // 4 = Operator + // 5 = Sudo + + // Identity_01 + // Primary Key: polymesh_1 + + // Identity_02 + // Primary Key: polymesh_2 + + // Identity_03 + // Primary Key: polymesh_3 + + // Identity_04 + // Primary Key: polymesh_4 + // Secondary Keys: Alice, Alice//stash, Bob, Bob//stash, Charlie, Charlie//stash + + // Identity_05 + // Primary Key: polymesh_5 + + let mut identities_balance = Vec::new(); + let mut genesis_id_records = Vec::new(); + + // Creating Identities 1-4 (GC + Operators) + for i in 1..=4 { + let new_acc = seeded_acc_id(adjust_last(&mut { *b"polymesh_0" }, i)); + create_identity(i, new_acc, &mut identities_balance, &mut genesis_id_records); + } + + // Creating identity for sudo + create_identity( + 5u8, + root_key, + &mut identities_balance, + &mut genesis_id_records, + ); + + let mut stakers_data = Vec::new(); + for (stash_acc, controller_acc, ..) in initial_authorities { + let staker = StakersData::new( + IdentityId::from(4), // All operators have the same identity + stash_acc.clone(), + controller_acc.clone(), + INITIAL_BOND, + StakerStatus::Validator, + ); + stakers_data.push(staker); + add_secondary_key( + stash_acc.clone(), + &mut identities_balance, + &mut genesis_id_records, + ); + add_secondary_key( + controller_acc.clone(), + &mut identities_balance, + &mut genesis_id_records, + ); + } + + // Give CDD issuer to operator and sudo since it won't receive CDD from the group automatically + genesis_id_records[3] + .issuers + .push(SystematicIssuers::CDDProvider.as_id()); + + // Give CDD issuer to operator and sudo since it won't receive CDD from the group automatically + genesis_id_records[4] + .issuers + .push(SystematicIssuers::CDDProvider.as_id()); + + // Treasury + identities_balance.push(( + TREASURY_PALLET_ID.into_account_truncating(), + BOOTSTRAP_TREASURY, + )); + + GenesisData::new(genesis_id_records, stakers_data, identities_balance) +} + +fn create_identity( + nonce: u8, + primary_key: AccountId, + account_balances: &mut Vec<(AccountId, Balance)>, + genesis_identities: &mut Vec>, +) { + account_balances.push((primary_key.clone(), BOOTSTRAP_KEYS)); + genesis_identities.push(GenesisIdentityRecord::new(nonce, primary_key)); +} + +fn add_secondary_key( + account_id: AccountId, + identities_balance: &mut Vec<(AccountId, Balance)>, + genesis_id_record: &mut Vec>, +) { + identities_balance.push((account_id.clone(), BOOTSTRAP_KEYS)); + genesis_id_record[3] + .secondary_keys + .push(SecondaryKey::from_account_id_with_full_perms(account_id)); +} + +fn mainnet_boot_nodes() -> Vec { + vec![ + "/dns4/mainnet-bootnode-001.polymesh.network/tcp/443/wss/p2p/12D3KooWDiaRBvzjt1p95mTqJETxJw3nz1E6fF2Yf62ojimEGJS7".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-002.polymesh.network/tcp/443/wss/p2p/12D3KooWN9E6gtgybnXwDVNMUGwSA82pzBj72ibGYfZuomyEDQTU".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-003.polymesh.network/tcp/443/wss/p2p/12D3KooWQ3K8jGadCQSVhihLEsJfSz3TJGgBHMU3vTtK3jd2Wq5E".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-004.polymesh.network/tcp/443/wss/p2p/12D3KooWAjLb7S2FKk1Bxyw3vkaqgcSpjfxHwpGvqcXACFYSK8Xq".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-005.polymesh.network/tcp/443/wss/p2p/12D3KooWKvXCP5b5PW4tHFAYyFVk3kRhwF3qXJbnVcPSGHP6Zmjg".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-006.polymesh.network/tcp/443/wss/p2p/12D3KooWBQhDAjfo13dM4nsogXD39F5TcN9iTVzjXgPqFn9Yaccz".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-007.polymesh.network/tcp/443/wss/p2p/12D3KooWMwFdYC53MqdyR9WYvJiPfxfYXh65NfY9QSuZeyKa53fg".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-001.polymesh.network/tcp/30333/p2p/12D3KooWDiaRBvzjt1p95mTqJETxJw3nz1E6fF2Yf62ojimEGJS7".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-002.polymesh.network/tcp/30333/p2p/12D3KooWN9E6gtgybnXwDVNMUGwSA82pzBj72ibGYfZuomyEDQTU".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-003.polymesh.network/tcp/30333/p2p/12D3KooWQ3K8jGadCQSVhihLEsJfSz3TJGgBHMU3vTtK3jd2Wq5E".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-004.polymesh.network/tcp/30333/p2p/12D3KooWAjLb7S2FKk1Bxyw3vkaqgcSpjfxHwpGvqcXACFYSK8Xq".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-005.polymesh.network/tcp/30333/p2p/12D3KooWKvXCP5b5PW4tHFAYyFVk3kRhwF3qXJbnVcPSGHP6Zmjg".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-006.polymesh.network/tcp/30333/p2p/12D3KooWBQhDAjfo13dM4nsogXD39F5TcN9iTVzjXgPqFn9Yaccz".parse().expect("Unable to parse bootnode"), + "/dns4/mainnet-bootnode-007.polymesh.network/tcp/30333/p2p/12D3KooWMwFdYC53MqdyR9WYvJiPfxfYXh65NfY9QSuZeyKa53fg".parse().expect("Unable to parse bootnode"), + ] +} diff --git a/src/chain_spec/mod.rs b/src/chain_spec/mod.rs new file mode 100644 index 0000000000..638972ba84 --- /dev/null +++ b/src/chain_spec/mod.rs @@ -0,0 +1,5 @@ +//mod ci_runtime; +mod common; +mod develop_runtime; +//mod mainnet_runtime; +//mod testnet_runtime; diff --git a/src/chain_spec/testnet_runtime.rs b/src/chain_spec/testnet_runtime.rs new file mode 100644 index 0000000000..89dcf90eba --- /dev/null +++ b/src/chain_spec/testnet_runtime.rs @@ -0,0 +1,90 @@ +use sc_chain_spec::ChainType; +use sc_network::config::MultiaddrWithPeerId; +use sc_telemetry::TelemetryEndpoints; +use serde_json::json; + +use crate::chain_spec::common::STAGING_TELEMETRY_URL; +use crate::chain_spec::common::{get_authority_keys_from_seed, polymesh_properties, seeded_acc_id}; +use crate::chain_spec::common::{ChainSpec, ChainSpecMode}; + +pub fn testnet_chain_spec(chain_spec_mode: ChainSpecMode) -> ChainSpec { + let code = polymesh_runtime_testnet::runtime::WASM_BINARY + .expect("Mainnet wasm binary is not available."); + + match chain_spec_mode { + ChainSpecMode::Bootstrap => bootstap_chain_spec(code), + ChainSpecMode::Development => dev_chain_spec(code), + ChainSpecMode::Local => local_chain_spec(code), + } +} + +fn bootstap_chain_spec(code: &[u8]) -> ChainSpec { + let root_key = seeded_acc_id("polymesh_5"); + + let initial_authorities = vec![ + get_authority_keys_from_seed("Alice", false), + get_authority_keys_from_seed("Bob", false), + get_authority_keys_from_seed("Charlie", false), + ]; + + let testnet_telemetry = TelemetryEndpoints::new(vec![(STAGING_TELEMETRY_URL.to_string(), 0)]) + .expect("Testnet bootstrap telemetry url is valid; qed"); + + ChainSpec::builder(code, Default::default()) + .with_name("Polymesh Testnet") + .with_id("testnet") + .with_chain_type(ChainType::Live) + .with_boot_nodes(testnet_boot_nodes()) + .with_telemetry_endpoints(testnet_telemetry) + .with_protocol_id("/polymesh/testnet") + .with_properties(polymesh_properties(42)) + .with_genesis_config_patch(testnet_genesis_config()) + .build() +} + +fn dev_chain_spec(code: &[u8]) -> ChainSpec { + let root_key = seeded_acc_id("Eve"); + + let initial_authorities = vec![get_authority_keys_from_seed("Alice", false)]; + + ChainSpec::builder(code, Default::default()) + .with_name("Polymesh Testnet Develop") + .with_id("dev_testnet") + .with_chain_type(ChainType::Development) + .with_properties(polymesh_properties(42)) + .with_genesis_config_patch(testnet_genesis_config()) + .build() +} + +fn local_chain_spec(code: &[u8]) -> ChainSpec { + let root_key = seeded_acc_id("Eve"); + + let initial_authorities = vec![ + get_authority_keys_from_seed("Alice", false), + get_authority_keys_from_seed("Bob", false), + get_authority_keys_from_seed("Charlie", false), + ]; + + ChainSpec::builder(code, Default::default()) + .with_name("Polymesh Testnet Local") + .with_id("local_testnet") + .with_chain_type(ChainType::Local) + .with_properties(polymesh_properties(42)) + .with_genesis_config_patch(testnet_genesis_config()) + .build() +} + +fn testnet_genesis_config() -> serde_json::Value { + unimplemented!() +} + +fn testnet_boot_nodes() -> Vec { + vec![ + "/dns4/testnet-bootnode-001.polymesh.live/tcp/443/wss/p2p/12D3KooWNG4hedmYixq3Vx4crj5VFxHLFWjqYfbAZwFekHJ8Y7du".parse().expect("Unable to parse bootnode"), + "/dns4/testnet-bootnode-002.polymesh.live/tcp/443/wss/p2p/12D3KooW9uY8zFnHB5UKyLuwUpZLpPUSJYT2tYfFvpfNCd2K1ceZ".parse().expect("Unable to parse bootnode"), + "/dns4/testnet-bootnode-003.polymesh.live/tcp/443/wss/p2p/12D3KooWB7AyqsmerKTmcMoyMJJw6ddwWUJ7nFBDGw2viNGN2DBX".parse().expect("Unable to parse bootnode"), + "/dns4/testnet-bootnode-001.polymesh.live/tcp/30333/p2p/12D3KooWNG4hedmYixq3Vx4crj5VFxHLFWjqYfbAZwFekHJ8Y7du".parse().expect("Unable to parse bootnode"), + "/dns4/testnet-bootnode-002.polymesh.live/tcp/30333/p2p/12D3KooW9uY8zFnHB5UKyLuwUpZLpPUSJYT2tYfFvpfNCd2K1ceZ".parse().expect("Unable to parse bootnode"), + "/dns4/testnet-bootnode-003.polymesh.live/tcp/30333/p2p/12D3KooWB7AyqsmerKTmcMoyMJJw6ddwWUJ7nFBDGw2viNGN2DBX".parse().expect("Unable to parse bootnode"), + ] +} diff --git a/src/main.rs b/src/main.rs index 8e85f7f605..23c39d780e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,11 @@ //! Polymesh Node CLI binary. #![warn(missing_docs)] -//mod chain_spec; +mod chain_spec; #[macro_use] mod service; //mod benchmarking; -//mod cli; +mod cli; //mod command; fn main() -> sc_cli::Result<()> { From 636454c7736213544d553ad377cc4327a53e2d46 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 1 Sep 2025 14:55:00 -0300 Subject: [PATCH 63/97] Update chain spec - part II --- src/chain_spec/common.rs | 199 ++++++++++++++++++++++-------- src/chain_spec/develop_runtime.rs | 94 ++++++++++---- src/chain_spec/mainnet_runtime.rs | 85 +++++++++++-- src/chain_spec/mod.rs | 4 +- src/chain_spec/testnet_runtime.rs | 88 ++++++++++++- 5 files changed, 377 insertions(+), 93 deletions(-) diff --git a/src/chain_spec/common.rs b/src/chain_spec/common.rs index bff0b1acb9..7ab85bbfb2 100644 --- a/src/chain_spec/common.rs +++ b/src/chain_spec/common.rs @@ -12,12 +12,16 @@ use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; use sp_consensus_babe::AuthorityId as BabeId; use sp_core::{sr25519, Pair, Public}; use sp_runtime::traits::{AccountIdConversion, IdentifyAccount, Verify}; +use sp_runtime::Perbill; +use pallet_asset::TickerRegistrationConfig; +use polymesh_common_utilities::protocol_fee::ProtocolOp; use polymesh_primitives::asset_metadata::{AssetMetadataName, AssetMetadataSpec}; use polymesh_primitives::calendar::{CalendarPeriod, CalendarUnit}; use polymesh_primitives::constants::currency::ONE_POLY; use polymesh_primitives::identity_id::GenesisIdentityRecord; -use polymesh_primitives::{ticker, AccountId, Balance, IdentityId, Moment, Signature, Ticker}; +use polymesh_primitives::{AccountId, Balance, BlockNumber, IdentityId, Moment, Signature, Ticker}; +use polymesh_primitives::{MaybeBlock, PosRatio}; // The URL for the telemetry server. pub(crate) const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polymesh.network/submit/"; @@ -115,6 +119,143 @@ pub(crate) fn adjust_last(bytes: &mut [u8], n: u8) -> &str { core::str::from_utf8(bytes).unwrap() } +//========================================================================== +// Common genesis config uses across different runtimes +//========================================================================== + +pub(crate) fn asset_genesis_config() -> serde_json::Value { + let ticker_reg_config = TickerRegistrationConfig:: { + max_ticker_length: 12, + registration_length: Some(5_184_000_000), + }; + + serde_json::json!({ + "ticker_registration_config": ticker_reg_config, + "reserved_country_currency_codes": currency_codes(), + "asset_metadata": asset_metadata(), + }) +} + +pub(crate) fn checkpoint_genesis_config() -> serde_json::Value { + let period = CalendarPeriod { + unit: CalendarUnit::Week, + amount: 1, + }; + + serde_json::json!({ + "schedules_max_complexity": period.complexity(), + }) +} + +pub(crate) fn staking_genesis_config(initial_stakers: &[StakersData]) -> serde_json::Value { + serde_json::json!({ + "validator_count": 40, + "minimum_validator_count": 1, + "stakers": initial_stakers, + "slash_reward_fraction": Perbill::from_percent(10), + }) +} + +pub(crate) fn pips_genesis_config( + enactment_period: BlockNumber, + pending_pip_expiry: MaybeBlock, + active_pip_limit: u32, +) -> serde_json::Value { + serde_json::json!({ + "prune_historical_pips": false, + "min_proposal_deposit": 2_000_000_000, + "default_enactment_period": enactment_period, + "pending_pip_expiry": pending_pip_expiry, + "max_pip_skip_count": 2, + "active_pip_limit": active_pip_limit, + }) +} + +pub(crate) fn group_genesis_config(active_members_ids: Vec) -> serde_json::Value { + serde_json::json!({ + "active_members_limit": 20, + "active_members": active_members_ids, + }) +} + +pub(crate) fn committee_genesis_config( + vote_threshold: (u32, u32), + release_coordinator: IdentityId, +) -> serde_json::Value { + serde_json::json!({ + "vote_threshold": vote_threshold, + "release_coordinator": release_coordinator, + }) +} + +pub(crate) fn protocol_fee_genesis_config() -> serde_json::Value { + let protocol_fee: Vec<(ProtocolOp, u128)> = vec![ + (ProtocolOp::AssetCreateAsset, 2_500 * 1_000_000), + (ProtocolOp::AssetRegisterTicker, 500 * 1_000_000), + ]; + + serde_json::json!({ + "base_fees": protocol_fee, + "coefficient": PosRatio(1, 1) + }) +} + +pub(crate) fn corporate_actions_genesis_config() -> serde_json::Value { + serde_json::json!({ + "max_details_length": 1_024, + }) +} + +pub(crate) fn polymesh_contracts_genesis_config(upgradable_owner: AccountId) -> serde_json::Value { + let upgradable_description: [u8; 4] = "POLY".as_bytes().try_into().unwrap(); + + serde_json::json!({ + "call_whitelist": contracts_call_whitelist(), + "upgradable_code": upgradable_code(), + "upgradable_description": upgradable_description, + "upgradable_major": 7, + "upgradable_owner": upgradable_owner, + }) +} + +fn currency_codes() -> Vec { + #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + pub struct FiatCurrency { + pub codes: Vec, + } + + let currency_file = include_str!("../data/currency_symbols.json"); + let currency_data: FiatCurrency = + serde_json::from_str(¤cy_file).expect("unable do parse/deserialize currency file"); + + currency_data + .codes + .into_iter() + .map(|y| Ticker::from_slice_truncated(y.as_bytes())) + .collect() +} + +fn asset_metadata() -> Vec<(AssetMetadataName, AssetMetadataSpec)> { + let asset_metadata_file = include_str!("../data/asset_metadata.json"); + serde_json::from_str(&asset_metadata_file) + .expect("unable do parse/deserialize asset_metadata file") +} + +fn contracts_call_whitelist() -> Vec { + let whitelist_file = include_str!("../data/contracts_call_whitelist.json"); + serde_json::from_str::>(&whitelist_file) + .expect("unable do parse/deserialize contracts_call_whitelist file") +} + +fn upgradable_code() -> Vec { + // Contract should match the `upgradable_major` version above. + include_bytes!("../data/contracts/polymesh_ink_7.wasm").to_vec() +} + +//========================================================================== +// Types used for generating the genesis config +//========================================================================== + /// The `ChainSpec` setup mode. pub(crate) enum ChainSpecMode { Bootstrap, @@ -123,6 +264,7 @@ pub(crate) enum ChainSpecMode { } /// Data required for setting up a staker in genesis. +#[derive(Serialize, Deserialize)] pub(crate) struct StakersData { identity_id: IdentityId, stash_id: AccountId, @@ -152,9 +294,9 @@ impl StakersData { /// Data required for setting up the initial genesis state. pub(crate) struct GenesisData { - identities_record: Vec>, - stakers_data: Vec, - identities_balance: Vec<(AccountId, Balance)>, + pub(crate) identities_record: Vec>, + pub(crate) stakers_data: Vec, + pub(crate) identities_balance: Vec<(AccountId, Balance)>, } impl GenesisData { @@ -171,52 +313,3 @@ impl GenesisData { } } } - -pub(crate) fn asset_genesis_config() -> serde_json::Value { - serde_json::json!({ - "ticker_registration_config": ticker_registration_config(), - "reserved_country_currency_codes": currency_codes(), - "asset_metadata": asset_metadata(), - }) -} - -pub(crate) fn checkpoint_genesis_config() -> serde_json::Value { - let period = CalendarPeriod { - unit: CalendarUnit::Week, - amount: 1, - }; - - serde_json::json!({ - "schedules_max_complexity": period.complexity(), - }) -} - -fn ticker_registration_config() -> pallet_asset::TickerRegistrationConfig { - pallet_asset::TickerRegistrationConfig { - max_ticker_length: 12, - registration_length: Some(5_184_000_000), - } -} - -fn currency_codes() -> Vec { - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - pub struct FiatCurrency { - pub codes: Vec, - } - - let currency_file = include_str!("../data/currency_symbols.json"); - let currency_data: FiatCurrency = - serde_json::from_str(¤cy_file).expect("unable do parse/deserialize currency file"); - - currency_data - .codes - .into_iter() - .map(|y| Ticker::from_slice_truncated(y.as_bytes())) - .collect() -} - -fn asset_metadata() -> Vec<(AssetMetadataName, AssetMetadataSpec)> { - let asset_metadata_file = include_str!("../data/asset_metadata.json"); - serde_json::from_str(&asset_metadata_file) - .expect("unable do parse/deserialize asset metadata file") -} diff --git a/src/chain_spec/develop_runtime.rs b/src/chain_spec/develop_runtime.rs index 5e51a4b237..1f759e7b3f 100644 --- a/src/chain_spec/develop_runtime.rs +++ b/src/chain_spec/develop_runtime.rs @@ -1,5 +1,5 @@ use pallet_staking::StakerStatus; -use polymesh_primitives::Balance; +use polymesh_primitives::{committee, Balance}; use sc_chain_spec::ChainType; use sc_rpc::chain; use serde_json::json; @@ -7,11 +7,18 @@ use sp_runtime::traits::AccountIdConversion; use polymesh_primitives::constants::TREASURY_PALLET_ID; use polymesh_primitives::identity_id::GenesisIdentityRecord; -use polymesh_primitives::{AccountId, IdentityId, SecondaryKey}; - -use crate::chain_spec::common::{get_authority_keys_from_seed, polymesh_properties}; -use crate::chain_spec::common::{seeded_acc_id, GenesisData, InitialAuth, StakersData}; -use crate::chain_spec::common::{ChainSpec, ChainSpecMode, DEV_KEYS, DEV_TREASURY, INITIAL_BOND}; +use polymesh_primitives::{AccountId, IdentityId, MaybeBlock, SecondaryKey}; +use polymesh_runtime_develop::constants::time::MINUTES; +use polymesh_runtime_develop::runtime::{SessionKeys, BABE_GENESIS_EPOCH_CONFIG}; + +use crate::chain_spec::common::{asset_genesis_config, protocol_fee_genesis_config}; +use crate::chain_spec::common::{checkpoint_genesis_config, committee_genesis_config}; +use crate::chain_spec::common::{corporate_actions_genesis_config, staking_genesis_config}; +use crate::chain_spec::common::{get_authority_keys_from_seed, pips_genesis_config}; +use crate::chain_spec::common::{group_genesis_config, polymesh_properties}; +use crate::chain_spec::common::{polymesh_contracts_genesis_config, seeded_acc_id}; +use crate::chain_spec::common::{ChainSpec, DEV_KEYS, DEV_TREASURY, INITIAL_BOND}; +use crate::chain_spec::common::{ChainSpecMode, GenesisData, InitialAuth, StakersData}; pub(crate) fn develop_chain_spec(chain_spec_mode: ChainSpecMode) -> ChainSpec { let code = polymesh_runtime_develop::runtime::WASM_BINARY @@ -80,27 +87,42 @@ fn develop_genesis_config( ) -> serde_json::Value { let genesis_data = genesis_data(&initial_authorities, &other_funded_accounts); + let session_keys = session_keys(&initial_authorities); + + let (vote_threshold, identity_1) = ((1, 2), IdentityId::from(1)); + let group_genesis_config = group_genesis_config(vec![identity_1]); + let committee_genesis_config = committee_genesis_config(vote_threshold, identity_1); + serde_json::json!({ - "asset": crate::chain_spec::common::asset_genesis_config(), - "chekpoint": crate::chain_spec::common::checkpoint_genesis_config(), - "identity": - "balances": - "indices": - "sudo": - "session": - "staking": - "pips": - "babe": - "committee_membership": - "polymesh_committee": - "cdd_service_providers": - "technical_committee_membership": - "technical_committee": - "upgrade_committee_membership": - "upgrade_committee": - "protocol_fee": - "corporate_action": - "polymesh_contracts": + "asset": asset_genesis_config(), + "checkpoint": checkpoint_genesis_config(), + "identity": { + "identities": genesis_data.identities_record, + }, + "balances": { + "balances": genesis_data.identities_balance, + }, + "sudo": { + "key": Some(root_key.clone()), + }, + "session": { + "keys": session_keys, + }, + "staking": staking_genesis_config(&genesis_data.stakers_data), + "pips": pips_genesis_config(MINUTES, MaybeBlock::None, 25), + "babe": { + "epoch_config": Some(BABE_GENESIS_EPOCH_CONFIG), + }, + "committee_membership": group_genesis_config, + "polymesh_committee": committee_genesis_config, + "cdd_service_providers": group_genesis_config, + "technical_committee_membership": group_genesis_config, + "technical_committee": committee_genesis_config, + "upgrade_committee_membership": group_genesis_config, + "upgrade_committee": committee_genesis_config, + "protocol_fee": protocol_fee_genesis_config(), + "corporate_action": corporate_actions_genesis_config(), + "polymesh_contracts": polymesh_contracts_genesis_config(root_key), }) } @@ -162,3 +184,23 @@ fn add_secondary_key( .secondary_keys .push(SecondaryKey::from_account_id_with_full_perms(account_id)); } + +/// Returns the initial list of validator at genesis representing by their `(AccountId, ValidatorId, Keys)`. +fn session_keys(init_authorities: &[InitialAuth]) -> Vec<(AccountId, AccountId, SessionKeys)> { + let mut initial_session_keys = Vec::new(); + + for initial_auth in init_authorities { + initial_session_keys.push(( + initial_auth.0.clone(), + initial_auth.0.clone(), + SessionKeys { + grandpa: initial_auth.2.clone(), + babe: initial_auth.3.clone(), + im_online: initial_auth.4.clone(), + authority_discovery: initial_auth.5.clone(), + }, + )) + } + + initial_session_keys +} diff --git a/src/chain_spec/mainnet_runtime.rs b/src/chain_spec/mainnet_runtime.rs index 240fc66104..1d3a94edf9 100644 --- a/src/chain_spec/mainnet_runtime.rs +++ b/src/chain_spec/mainnet_runtime.rs @@ -7,10 +7,17 @@ use sp_runtime::traits::AccountIdConversion; use polymesh_primitives::constants::TREASURY_PALLET_ID; use polymesh_primitives::identity_id::GenesisIdentityRecord; -use polymesh_primitives::{AccountId, Balance, IdentityId, SecondaryKey, SystematicIssuers}; +use polymesh_primitives::{AccountId, MaybeBlock, SecondaryKey}; +use polymesh_primitives::{Balance, IdentityId, SystematicIssuers}; +use polymesh_runtime_mainnet::constants::time::DAYS; +use polymesh_runtime_mainnet::runtime::{SessionKeys, BABE_GENESIS_EPOCH_CONFIG}; use crate::chain_spec::common::{adjust_last, get_authority_keys_from_seed}; -use crate::chain_spec::common::{polymesh_properties, seeded_acc_id}; +use crate::chain_spec::common::{asset_genesis_config, protocol_fee_genesis_config}; +use crate::chain_spec::common::{checkpoint_genesis_config, committee_genesis_config}; +use crate::chain_spec::common::{corporate_actions_genesis_config, staking_genesis_config}; +use crate::chain_spec::common::{group_genesis_config, polymesh_properties, seeded_acc_id}; +use crate::chain_spec::common::{pips_genesis_config, polymesh_contracts_genesis_config}; use crate::chain_spec::common::{ChainSpec, ChainSpecMode}; use crate::chain_spec::common::{GenesisData, InitialAuth, StakersData}; use crate::chain_spec::common::{BOOTSTRAP_KEYS, BOOTSTRAP_TREASURY}; @@ -48,7 +55,7 @@ fn bootstap_chain_spec(code: &[u8]) -> ChainSpec { .with_telemetry_endpoints(mainnet_telemetry) .with_protocol_id("/polymesh/mainnet") .with_properties(polymesh_properties(12)) - .with_genesis_config_patch(mainnet_genesis_config()) + .with_genesis_config_patch(mainnet_genesis_config(initial_authorities, root_key)) .build() } @@ -63,7 +70,7 @@ fn dev_chain_spec(code: &[u8]) -> ChainSpec { .with_id("dev_mainnet") .with_chain_type(ChainType::Development) .with_properties(polymesh_properties(12)) - .with_genesis_config_patch(mainnet_genesis_config()) + .with_genesis_config_patch(mainnet_genesis_config(initial_authorities, root_key)) .build() } @@ -82,12 +89,56 @@ fn local_chain_spec(code: &[u8]) -> ChainSpec { .with_id("local_mainnet") .with_chain_type(ChainType::Local) .with_properties(polymesh_properties(12)) - .with_genesis_config_patch(mainnet_genesis_config()) + .with_genesis_config_patch(mainnet_genesis_config(initial_authorities, root_key)) .build() } -fn mainnet_genesis_config() -> serde_json::Value { - unimplemented!() +fn mainnet_genesis_config( + initial_authorities: Vec, + root_key: AccountId, +) -> serde_json::Value { + let genesis_data = genesis_data(&initial_authorities, root_key.clone()); + + let session_keys = session_keys(&initial_authorities); + + let (identity_1, identity_2, identity_3) = ( + IdentityId::from(1), + IdentityId::from(2), + IdentityId::from(3), + ); + + serde_json::json!({ + "asset": asset_genesis_config(), + "checkpoint": checkpoint_genesis_config(), + "identity": { + "identities": genesis_data.identities_record, + }, + "balances": { + "balances": genesis_data.identities_balance, + }, + "session": { + "keys": session_keys, + }, + "staking": staking_genesis_config(&genesis_data.stakers_data), + "pips": pips_genesis_config(DAYS * 30, MaybeBlock::Some(DAYS * 90), 1_000), + "babe": { + "epoch_config": Some(BABE_GENESIS_EPOCH_CONFIG), + }, + // Governing council + "committee_membership": group_genesis_config(vec![identity_1, identity_2, identity_3]), // three GC members + "polymesh_committee": committee_genesis_config((2, 3), identity_1), // RC = 1, 2/3 votes required + // CDD providers + "cdd_service_providers": group_genesis_config(vec![identity_1]), // GC_1 is also a CDD provider + // Technical Committee + "technical_committee_membership": group_genesis_config(vec![identity_1]), // One GC member + "technical_committee": committee_genesis_config((1, 2), identity_1), // 1/2 votes required + // Upgrade Committee + "upgrade_committee_membership": group_genesis_config(vec![identity_1]), // One GC member + "upgrade_committee": committee_genesis_config((1, 2), identity_1), // 1/2 votes required + "protocol_fee": protocol_fee_genesis_config(), + "corporate_action": corporate_actions_genesis_config(), + "polymesh_contracts": polymesh_contracts_genesis_config(root_key), + }) } pub(crate) fn genesis_data( @@ -214,3 +265,23 @@ fn mainnet_boot_nodes() -> Vec { "/dns4/mainnet-bootnode-007.polymesh.network/tcp/30333/p2p/12D3KooWMwFdYC53MqdyR9WYvJiPfxfYXh65NfY9QSuZeyKa53fg".parse().expect("Unable to parse bootnode"), ] } + +/// Returns the initial list of validator at genesis representing by their `(AccountId, ValidatorId, Keys)`. +fn session_keys(init_authorities: &[InitialAuth]) -> Vec<(AccountId, AccountId, SessionKeys)> { + let mut initial_session_keys = Vec::new(); + + for initial_auth in init_authorities { + initial_session_keys.push(( + initial_auth.0.clone(), + initial_auth.0.clone(), + SessionKeys { + grandpa: initial_auth.2.clone(), + babe: initial_auth.3.clone(), + im_online: initial_auth.4.clone(), + authority_discovery: initial_auth.5.clone(), + }, + )) + } + + initial_session_keys +} diff --git a/src/chain_spec/mod.rs b/src/chain_spec/mod.rs index 638972ba84..72bb432e53 100644 --- a/src/chain_spec/mod.rs +++ b/src/chain_spec/mod.rs @@ -1,5 +1,5 @@ //mod ci_runtime; mod common; mod develop_runtime; -//mod mainnet_runtime; -//mod testnet_runtime; +mod mainnet_runtime; +mod testnet_runtime; diff --git a/src/chain_spec/testnet_runtime.rs b/src/chain_spec/testnet_runtime.rs index 89dcf90eba..713a6af8b2 100644 --- a/src/chain_spec/testnet_runtime.rs +++ b/src/chain_spec/testnet_runtime.rs @@ -1,11 +1,22 @@ +use node_rpc_runtime_api::identity; use sc_chain_spec::ChainType; use sc_network::config::MultiaddrWithPeerId; use sc_telemetry::TelemetryEndpoints; use serde_json::json; +use polymesh_primitives::{AccountId, IdentityId, MaybeBlock}; +use polymesh_runtime_testnet::constants::time::DAYS; +use polymesh_runtime_testnet::runtime::{SessionKeys, BABE_GENESIS_EPOCH_CONFIG}; + +use crate::chain_spec::common::group_genesis_config; use crate::chain_spec::common::STAGING_TELEMETRY_URL; +use crate::chain_spec::common::{asset_genesis_config, protocol_fee_genesis_config}; +use crate::chain_spec::common::{checkpoint_genesis_config, committee_genesis_config}; +use crate::chain_spec::common::{corporate_actions_genesis_config, staking_genesis_config}; use crate::chain_spec::common::{get_authority_keys_from_seed, polymesh_properties, seeded_acc_id}; +use crate::chain_spec::common::{pips_genesis_config, polymesh_contracts_genesis_config}; use crate::chain_spec::common::{ChainSpec, ChainSpecMode}; +use crate::chain_spec::common::{GenesisData, InitialAuth, StakersData}; pub fn testnet_chain_spec(chain_spec_mode: ChainSpecMode) -> ChainSpec { let code = polymesh_runtime_testnet::runtime::WASM_BINARY @@ -38,7 +49,7 @@ fn bootstap_chain_spec(code: &[u8]) -> ChainSpec { .with_telemetry_endpoints(testnet_telemetry) .with_protocol_id("/polymesh/testnet") .with_properties(polymesh_properties(42)) - .with_genesis_config_patch(testnet_genesis_config()) + .with_genesis_config_patch(testnet_genesis_config(initial_authorities, root_key)) .build() } @@ -52,7 +63,7 @@ fn dev_chain_spec(code: &[u8]) -> ChainSpec { .with_id("dev_testnet") .with_chain_type(ChainType::Development) .with_properties(polymesh_properties(42)) - .with_genesis_config_patch(testnet_genesis_config()) + .with_genesis_config_patch(testnet_genesis_config(initial_authorities, root_key)) .build() } @@ -70,12 +81,59 @@ fn local_chain_spec(code: &[u8]) -> ChainSpec { .with_id("local_testnet") .with_chain_type(ChainType::Local) .with_properties(polymesh_properties(42)) - .with_genesis_config_patch(testnet_genesis_config()) + .with_genesis_config_patch(testnet_genesis_config(initial_authorities, root_key)) .build() } -fn testnet_genesis_config() -> serde_json::Value { - unimplemented!() +fn testnet_genesis_config( + initial_authorities: Vec, + root_key: AccountId, +) -> serde_json::Value { + let genesis_data = + crate::chain_spec::mainnet_runtime::genesis_data(&initial_authorities, root_key.clone()); + + let session_keys = session_keys(&initial_authorities); + + let (identity_1, identity_2, identity_3) = ( + IdentityId::from(1), + IdentityId::from(2), + IdentityId::from(3), + ); + + let (identity_4, identity_5) = (IdentityId::from(4), IdentityId::from(5)); + + serde_json::json!({ + "asset": asset_genesis_config(), + "checkpoint": checkpoint_genesis_config(), + "identity": { + "identities": genesis_data.identities_record, + }, + "balances": { + "balances": genesis_data.identities_balance, + }, + "session": { + "keys": session_keys, + }, + "staking": staking_genesis_config(&genesis_data.stakers_data), + "pips": pips_genesis_config(DAYS * 30, MaybeBlock::None, 1_000), + "babe": { + "epoch_config": Some(BABE_GENESIS_EPOCH_CONFIG), + }, + // Governing council + "committee_membership": group_genesis_config(vec![identity_1, identity_2, identity_3]), // three GC members + "polymesh_committee": committee_genesis_config((2, 3), identity_1), // RC = 1, 2/3 votes required + // CDD providers + "cdd_service_providers": group_genesis_config(vec![identity_1]), + // Technical Committee + "technical_committee_membership": group_genesis_config(vec![identity_3, identity_4, identity_5]), // One GC member + genesis operator + Bridge Multisig + "technical_committee": committee_genesis_config((1, 2), identity_3), // RC = 3, 1/2 votes required + // Upgrade Committee + "upgrade_committee_membership": group_genesis_config(vec![identity_1]), // One GC member + "upgrade_committee": committee_genesis_config((1, 2), identity_1), // 1/2 votes required + "protocol_fee": protocol_fee_genesis_config(), + "corporate_action": corporate_actions_genesis_config(), + "polymesh_contracts": polymesh_contracts_genesis_config(root_key), + }) } fn testnet_boot_nodes() -> Vec { @@ -88,3 +146,23 @@ fn testnet_boot_nodes() -> Vec { "/dns4/testnet-bootnode-003.polymesh.live/tcp/30333/p2p/12D3KooWB7AyqsmerKTmcMoyMJJw6ddwWUJ7nFBDGw2viNGN2DBX".parse().expect("Unable to parse bootnode"), ] } + +/// Returns the initial list of validator at genesis representing by their `(AccountId, ValidatorId, Keys)`. +fn session_keys(init_authorities: &[InitialAuth]) -> Vec<(AccountId, AccountId, SessionKeys)> { + let mut initial_session_keys = Vec::new(); + + for initial_auth in init_authorities { + initial_session_keys.push(( + initial_auth.0.clone(), + initial_auth.0.clone(), + SessionKeys { + grandpa: initial_auth.2.clone(), + babe: initial_auth.3.clone(), + im_online: initial_auth.4.clone(), + authority_discovery: initial_auth.5.clone(), + }, + )) + } + + initial_session_keys +} From 2faf1e1cb4aacf45fad6149aa811a3e48a2bc3e6 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 1 Sep 2025 20:40:25 -0300 Subject: [PATCH 64/97] Update node - part III --- src/benchmarking.rs | 90 +++++---- src/chain_spec/common.rs | 8 +- src/chain_spec/develop_runtime.rs | 7 +- src/chain_spec/mainnet_runtime.rs | 1 - src/chain_spec/mod.rs | 8 +- src/chain_spec/testnet_runtime.rs | 6 +- src/command.rs | 307 ++++++++++++++---------------- src/main.rs | 7 +- src/service.rs | 2 - 9 files changed, 201 insertions(+), 235 deletions(-) diff --git a/src/benchmarking.rs b/src/benchmarking.rs index 2c00bbe7bc..8281f0b0fd 100644 --- a/src/benchmarking.rs +++ b/src/benchmarking.rs @@ -2,38 +2,40 @@ //! //! Should only be used for benchmarking as it may break in other contexts. -use crate::service::FullClient; -use polymesh_primitives::{AccountId, Balance, Signature}; +use std::result::Result as StdResult; +use std::sync::Arc; +use std::time::Duration; -use polymesh_runtime_common::BlockHashCount; -use polymesh_runtime_develop::runtime::{self, BalancesCall, SystemCall}; -use sc_cli::Result; +use sc_cli::Result as CliResult; use sc_client_api::BlockBackend; -use sc_executor::NativeExecutionDispatch; use sp_core::{Encode, Pair}; use sp_inherents::{InherentData, InherentDataProvider}; use sp_keyring::Sr25519Keyring; use sp_runtime::{OpaqueExtrinsic, SaturatedConversion}; -use std::{sync::Arc, time::Duration}; +use polymesh_primitives::{AccountId, Balance, Signature}; +use polymesh_runtime_common::BlockHashCount; +use polymesh_runtime_develop::runtime::{BalancesCall, SignedExtra, VERSION}; +use polymesh_runtime_develop::runtime::{Runtime as DevRuntime, RuntimeCall as DevRuntimeCall}; +use polymesh_runtime_develop::runtime::{SignedPayload, SystemCall, UncheckedExtrinsic}; + +use crate::service::FullClient; /// Generates extrinsics for the `benchmark overhead` command. /// /// Note: Should only be used for benchmarking. -pub struct RemarkBuilder { - client: Arc>, +pub struct RemarkBuilder { + client: Arc>, } -impl RemarkBuilder { - /// Creates a new [`Self`] from the given client. - pub fn new(client: Arc>) -> Self { +impl RemarkBuilder { + /// Creates a new [`RemarkBuilder`] from the given client. + pub fn new(client: Arc>) -> Self { Self { client } } } -impl frame_benchmarking_cli::ExtrinsicBuilder - for RemarkBuilder -{ +impl frame_benchmarking_cli::ExtrinsicBuilder for RemarkBuilder { fn pallet(&self) -> &str { "system" } @@ -42,11 +44,10 @@ impl frame_benchmarking_cli::ExtrinsicB "remark" } - fn build(&self, nonce: u32) -> std::result::Result { - let acc = Sr25519Keyring::Bob.pair(); - let extrinsic: OpaqueExtrinsic = create_benchmark_extrinsic( + fn build(&self, nonce: u32) -> StdResult { + let extrinsic = create_benchmark_extrinsic( self.client.as_ref(), - acc, + Sr25519Keyring::Bob.pair(), SystemCall::remark { remark: vec![] }.into(), nonce, ) @@ -59,15 +60,15 @@ impl frame_benchmarking_cli::ExtrinsicB /// Generates `Balances::Transfer` extrinsics for the benchmarks. /// /// Note: Should only be used for benchmarking. -pub struct TransferBuilder { - client: Arc>, +pub struct TransferBuilder { + client: Arc>, dest: AccountId, value: Balance, } -impl TransferBuilder { +impl TransferBuilder { /// Creates a new [`Self`] from the given client. - pub fn new(client: Arc>, dest: AccountId, value: Balance) -> Self { + pub fn new(client: Arc>, dest: AccountId, value: Balance) -> Self { Self { client, dest, @@ -76,9 +77,7 @@ impl TransferBuilder { } } -impl frame_benchmarking_cli::ExtrinsicBuilder - for TransferBuilder -{ +impl frame_benchmarking_cli::ExtrinsicBuilder for TransferBuilder { fn pallet(&self) -> &str { "balances" } @@ -88,11 +87,10 @@ impl frame_benchmarking_cli::ExtrinsicB } fn build(&self, nonce: u32) -> std::result::Result { - let acc = Sr25519Keyring::Bob.pair(); - let extrinsic: OpaqueExtrinsic = create_benchmark_extrinsic( + let extrinsic = create_benchmark_extrinsic( self.client.as_ref(), - acc, - BalancesCall::transfer { + Sr25519Keyring::Bob.pair(), + BalancesCall::transfer_allow_death { dest: self.dest.clone().into(), value: self.value.into(), } @@ -108,12 +106,12 @@ impl frame_benchmarking_cli::ExtrinsicB /// Create a transaction using the given `call`. /// /// Note: Should only be used for benchmarking. -pub fn create_benchmark_extrinsic( - client: &FullClient, +pub fn create_benchmark_extrinsic( + client: &FullClient, sender: sp_core::sr25519::Pair, - call: runtime::RuntimeCall, + call: DevRuntimeCall, nonce: u32, -) -> runtime::UncheckedExtrinsic { +) -> UncheckedExtrinsic { let genesis_hash = client .block_hash(0) .ok() @@ -126,26 +124,26 @@ pub fn create_benchmark_extrinsic( .checked_next_power_of_two() .map(|c| c / 2) .unwrap_or(2) as u64; - let extra: runtime::SignedExtra = ( - frame_system::CheckSpecVersion::::new(), - frame_system::CheckTxVersion::::new(), - frame_system::CheckGenesis::::new(), - frame_system::CheckEra::::from(sp_runtime::generic::Era::mortal( + let extra: SignedExtra = ( + frame_system::CheckSpecVersion::::new(), + frame_system::CheckTxVersion::::new(), + frame_system::CheckGenesis::::new(), + frame_system::CheckEra::::from(sp_runtime::generic::Era::mortal( period, best_block.saturated_into(), )), - frame_system::CheckNonce::::from(nonce), + frame_system::CheckNonce::::from(nonce), frame_system::CheckWeight::new(), - pallet_transaction_payment::ChargeTransactionPayment::::from(0), + pallet_transaction_payment::ChargeTransactionPayment::::from(0), pallet_permissions::StoreCallMetadata::new(), ); - let raw_payload = runtime::SignedPayload::from_raw( + let raw_payload = SignedPayload::from_raw( call.clone(), extra.clone(), ( - runtime::VERSION.spec_version, - runtime::VERSION.transaction_version, + VERSION.spec_version, + VERSION.transaction_version, genesis_hash, best_hash, (), @@ -156,7 +154,7 @@ pub fn create_benchmark_extrinsic( ); let signature = raw_payload.using_encoded(|e| sender.sign(e)); - runtime::UncheckedExtrinsic::new_signed( + UncheckedExtrinsic::new_signed( call.clone(), sp_runtime::AccountId32::from(sender.public()).into(), Signature::Sr25519(signature.clone()), @@ -167,7 +165,7 @@ pub fn create_benchmark_extrinsic( /// Generates inherent data for the `benchmark overhead` command. /// /// Note: Should only be used for benchmarking. -pub fn inherent_benchmark_data() -> Result { +pub(crate) fn inherent_benchmark_data() -> CliResult { let mut inherent_data = InherentData::new(); let d = Duration::from_millis(0); let timestamp = sp_timestamp::InherentDataProvider::new(d.into()); diff --git a/src/chain_spec/common.rs b/src/chain_spec/common.rs index 7ab85bbfb2..1b1bc68f62 100644 --- a/src/chain_spec/common.rs +++ b/src/chain_spec/common.rs @@ -4,14 +4,12 @@ use grandpa::AuthorityId as GrandpaId; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use pallet_staking::StakerStatus; use sc_chain_spec::ChainSpecExtension; -use sc_network::config::MultiaddrWithPeerId; -use sc_service::{ChainType, Properties}; -use sc_telemetry::TelemetryEndpoints; +use sc_service::Properties; use serde::{Deserialize, Serialize}; use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; use sp_consensus_babe::AuthorityId as BabeId; use sp_core::{sr25519, Pair, Public}; -use sp_runtime::traits::{AccountIdConversion, IdentifyAccount, Verify}; +use sp_runtime::traits::{IdentifyAccount, Verify}; use sp_runtime::Perbill; use pallet_asset::TickerRegistrationConfig; @@ -53,7 +51,7 @@ pub struct Extensions { } /// Specialized `ChainSpec`. -pub type ChainSpec = sc_service::GenericChainSpec; +pub(crate) type ChainSpec = sc_service::GenericChainSpec; pub(crate) fn polymesh_properties(ss58_format: u8) -> Properties { let mut properties = Properties::new(); diff --git a/src/chain_spec/develop_runtime.rs b/src/chain_spec/develop_runtime.rs index 1f759e7b3f..cdcb149d5c 100644 --- a/src/chain_spec/develop_runtime.rs +++ b/src/chain_spec/develop_runtime.rs @@ -1,13 +1,10 @@ -use pallet_staking::StakerStatus; -use polymesh_primitives::{committee, Balance}; use sc_chain_spec::ChainType; -use sc_rpc::chain; -use serde_json::json; use sp_runtime::traits::AccountIdConversion; +use pallet_staking::StakerStatus; use polymesh_primitives::constants::TREASURY_PALLET_ID; use polymesh_primitives::identity_id::GenesisIdentityRecord; -use polymesh_primitives::{AccountId, IdentityId, MaybeBlock, SecondaryKey}; +use polymesh_primitives::{AccountId, Balance, IdentityId, MaybeBlock, SecondaryKey}; use polymesh_runtime_develop::constants::time::MINUTES; use polymesh_runtime_develop::runtime::{SessionKeys, BABE_GENESIS_EPOCH_CONFIG}; diff --git a/src/chain_spec/mainnet_runtime.rs b/src/chain_spec/mainnet_runtime.rs index 1d3a94edf9..8ac465fbb0 100644 --- a/src/chain_spec/mainnet_runtime.rs +++ b/src/chain_spec/mainnet_runtime.rs @@ -2,7 +2,6 @@ use pallet_staking::StakerStatus; use sc_chain_spec::ChainType; use sc_network::config::MultiaddrWithPeerId; use sc_telemetry::TelemetryEndpoints; -use serde_json::json; use sp_runtime::traits::AccountIdConversion; use polymesh_primitives::constants::TREASURY_PALLET_ID; diff --git a/src/chain_spec/mod.rs b/src/chain_spec/mod.rs index 72bb432e53..6f1278053c 100644 --- a/src/chain_spec/mod.rs +++ b/src/chain_spec/mod.rs @@ -1,5 +1,5 @@ //mod ci_runtime; -mod common; -mod develop_runtime; -mod mainnet_runtime; -mod testnet_runtime; +pub(crate) mod common; +pub(crate) mod develop_runtime; +pub(crate) mod mainnet_runtime; +pub(crate) mod testnet_runtime; diff --git a/src/chain_spec/testnet_runtime.rs b/src/chain_spec/testnet_runtime.rs index 713a6af8b2..96312dd5d8 100644 --- a/src/chain_spec/testnet_runtime.rs +++ b/src/chain_spec/testnet_runtime.rs @@ -1,22 +1,18 @@ -use node_rpc_runtime_api::identity; use sc_chain_spec::ChainType; use sc_network::config::MultiaddrWithPeerId; use sc_telemetry::TelemetryEndpoints; -use serde_json::json; use polymesh_primitives::{AccountId, IdentityId, MaybeBlock}; use polymesh_runtime_testnet::constants::time::DAYS; use polymesh_runtime_testnet::runtime::{SessionKeys, BABE_GENESIS_EPOCH_CONFIG}; use crate::chain_spec::common::group_genesis_config; -use crate::chain_spec::common::STAGING_TELEMETRY_URL; use crate::chain_spec::common::{asset_genesis_config, protocol_fee_genesis_config}; use crate::chain_spec::common::{checkpoint_genesis_config, committee_genesis_config}; use crate::chain_spec::common::{corporate_actions_genesis_config, staking_genesis_config}; use crate::chain_spec::common::{get_authority_keys_from_seed, polymesh_properties, seeded_acc_id}; use crate::chain_spec::common::{pips_genesis_config, polymesh_contracts_genesis_config}; -use crate::chain_spec::common::{ChainSpec, ChainSpecMode}; -use crate::chain_spec::common::{GenesisData, InitialAuth, StakersData}; +use crate::chain_spec::common::{ChainSpec, ChainSpecMode, InitialAuth, STAGING_TELEMETRY_URL}; pub fn testnet_chain_spec(chain_spec_mode: ChainSpecMode) -> ChainSpec { let code = polymesh_runtime_testnet::runtime::WASM_BINARY diff --git a/src/command.rs b/src/command.rs index b6d26cd122..773f65ab9c 100644 --- a/src/command.rs +++ b/src/command.rs @@ -15,23 +15,28 @@ // See the License for the specific language governing permissions and // limitations under the License. -use crate::benchmarking::{inherent_benchmark_data, RemarkBuilder, TransferBuilder}; -use crate::chain_spec; -use crate::cli::{Cli, Subcommand}; -use crate::service::{ - self, general_chain_ops, mainnet_chain_ops, new_partial, testnet_chain_ops, FullClient, - FullServiceComponents, GeneralExecutor, IsNetwork, MainnetExecutor, Network, NewChainOps, - TestnetExecutor, -}; +use std::path::PathBuf; +use std::sync::Arc; + +use core::future::Future; use frame_benchmarking_cli::*; +use log::info; use sc_cli::{Result, SubstrateCli}; use sc_service::{Configuration, TaskManager}; use sp_keyring::Sr25519Keyring; +use sp_runtime::traits::HashingFor; -use core::future::Future; -use log::info; use polymesh_primitives::Block; -use std::sync::Arc; + +use crate::benchmarking::{inherent_benchmark_data, RemarkBuilder, TransferBuilder}; +use crate::chain_spec::common::{ChainSpec as GenericChainSpec, ChainSpecMode}; +use crate::chain_spec::develop_runtime::develop_chain_spec; +use crate::chain_spec::mainnet_runtime::mainnet_chain_spec; +use crate::chain_spec::testnet_runtime::testnet_chain_spec; +use crate::cli::{Cli, Subcommand}; +use crate::service::{general_chain_ops, mainnet_chain_ops, new_partial, testnet_chain_ops}; +use crate::service::{general_new_full, mainnet_new_full, testnet_new_full}; +use crate::service::{FullClient, HostFunctions, IsNetwork, Network, NewChainOps}; impl SubstrateCli for Cli { fn impl_name() -> String { @@ -64,43 +69,25 @@ impl SubstrateCli for Cli { fn load_spec(&self, id: &str) -> std::result::Result, String> { Ok(match id { - "dev" => Box::new(chain_spec::general::develop_config()), - "local" => Box::new(chain_spec::general::local_config()), - "testnet-dev" => Box::new(chain_spec::testnet::develop_config()), - "testnet-local" => Box::new(chain_spec::testnet::local_config()), - "testnet-bootstrap" => Box::new(chain_spec::testnet::bootstrap_config()), - "mainnet-dev" => Box::new(chain_spec::mainnet::develop_config()), - "mainnet-local" => Box::new(chain_spec::mainnet::local_config()), - "mainnet-bootstrap" => Box::new(chain_spec::mainnet::bootstrap_config()), - "MAINNET" | "mainnet" => Box::new(chain_spec::mainnet::ChainSpec::from_json_bytes( + "dev" => Box::new(develop_chain_spec(ChainSpecMode::Development)), + "local" => Box::new(develop_chain_spec(ChainSpecMode::Local)), + "testnet-dev" => Box::new(testnet_chain_spec(ChainSpecMode::Development)), + "testnet-local" => Box::new(testnet_chain_spec(ChainSpecMode::Local)), + "testnet-bootstrap" => Box::new(testnet_chain_spec(ChainSpecMode::Bootstrap)), + "mainnet-dev" => Box::new(mainnet_chain_spec(ChainSpecMode::Development)), + "mainnet-local" => Box::new(mainnet_chain_spec(ChainSpecMode::Local)), + "mainnet-bootstrap" => Box::new(mainnet_chain_spec(ChainSpecMode::Bootstrap)), + "MAINNET" | "mainnet" => Box::new(GenericChainSpec::from_json_bytes( &include_bytes!("./chain_specs/mainnet_raw.json")[..], )?), - "TESTNET" | "testnet" => Box::new(chain_spec::testnet::ChainSpec::from_json_bytes( + "TESTNET" | "testnet" => Box::new(GenericChainSpec::from_json_bytes( &include_bytes!("./chain_specs/testnet_raw.json")[..], )?), // STAGING network should be considered unstable and may be replaced at any time. - "STAGING" | "staging" => Box::new(chain_spec::testnet::ChainSpec::from_json_bytes( + "STAGING" | "staging" => Box::new(GenericChainSpec::from_json_bytes( &include_bytes!("./chain_specs/staging_raw.json")[..], )?), - path => { - if let Some(path) = path.strip_prefix("dev:") { - Box::new(chain_spec::general::ChainSpec::from_json_file( - std::path::PathBuf::from(path), - )?) - } else if let Some(path) = path.strip_prefix("testnet:") { - Box::new(chain_spec::testnet::ChainSpec::from_json_file( - std::path::PathBuf::from(path), - )?) - } else if let Some(path) = path.strip_prefix("mainnet:") { - Box::new(chain_spec::mainnet::ChainSpec::from_json_file( - std::path::PathBuf::from(path), - )?) - } else { - Box::new(chain_spec::mainnet::ChainSpec::from_json_file( - std::path::PathBuf::from(path), - )?) - } - } + path => Box::new(GenericChainSpec::from_json_file(PathBuf::from(path))?), }) } } @@ -108,15 +95,16 @@ impl SubstrateCli for Cli { /// Parses Polymesh specific CLI arguments and run the service. pub fn run() -> Result<()> { let mut cli = Cli::from_args(); + if cli.run.operator { cli.run.base.validator = true; } + match &cli.subcommand { None => { let runner = cli.create_runner(&cli.run.base)?; let network = runner.config().chain_spec.network(); - //let authority_discovery_enabled = cli.run.authority_discovery_enabled; info!( "Reserved nodes: {:?}", cli.run.base.network_params.reserved_nodes @@ -124,9 +112,9 @@ pub fn run() -> Result<()> { runner.run_node_until_exit(|config| async move { match network { - Network::Testnet => service::testnet_new_full(config), - Network::Mainnet => service::mainnet_new_full(config), - Network::Other => service::general_new_full(config), + Network::Testnet => testnet_new_full(config), + Network::Mainnet => mainnet_new_full(config), + Network::Other => general_new_full(config), } .map_err(sc_cli::Error::Service) }) @@ -171,7 +159,7 @@ pub fn run() -> Result<()> { &cli, cmd, |(c, b, _, tm), _| { - let aux_revert = Box::new(|client: Arc>, backend, blocks| { + let aux_revert = Box::new(|client: Arc>, backend, blocks| { sc_consensus_babe::revert(client.clone(), backend, blocks)?; grandpa::revert(client, blocks)?; Ok(()) @@ -179,7 +167,7 @@ pub fn run() -> Result<()> { Ok((cmd.run(c, b, Some(aux_revert)), tm)) }, |(c, b, _, tm), _| { - let aux_revert = Box::new(|client: Arc>, backend, blocks| { + let aux_revert = Box::new(|client: Arc>, backend, blocks| { sc_consensus_babe::revert(client.clone(), backend, blocks)?; grandpa::revert(client, blocks)?; Ok(()) @@ -187,7 +175,7 @@ pub fn run() -> Result<()> { Ok((cmd.run(c, b, Some(aux_revert)), tm)) }, |(c, b, _, tm), _| { - let aux_revert = Box::new(|client: Arc>, backend, blocks| { + let aux_revert = Box::new(|client: Arc>, backend, blocks| { sc_consensus_babe::revert(client.clone(), backend, blocks)?; grandpa::revert(client, blocks)?; Ok(()) @@ -208,28 +196,24 @@ pub fn run() -> Result<()> { .into()); } - cmd.run::(config) + cmd.run_with_spec::, HostFunctions>(Some( + config.chain_spec, + )) } (BenchmarkCmd::Block(cmd), Network::Other) => { - let FullServiceComponents { client, .. } = - new_partial::( - &mut config, - )?; - cmd.run(client) + let partial_components = + new_partial::(&mut config)?; + cmd.run(partial_components.client) } (BenchmarkCmd::Block(cmd), Network::Testnet) => { - let FullServiceComponents { client, .. } = - new_partial::( - &mut config, - )?; - cmd.run(client) + let partial_components = + new_partial::(&mut config)?; + cmd.run(partial_components.client) } (BenchmarkCmd::Block(cmd), Network::Mainnet) => { - let FullServiceComponents { client, .. } = - new_partial::( - &mut config, - )?; - cmd.run(client) + let partial_components = + new_partial::(&mut config)?; + cmd.run(partial_components.client) } #[cfg(not(feature = "runtime-benchmarks"))] (BenchmarkCmd::Storage(_), Network::Other) => Err( @@ -238,153 +222,150 @@ pub fn run() -> Result<()> { ), #[cfg(feature = "runtime-benchmarks")] (BenchmarkCmd::Storage(cmd), Network::Other) => { - let FullServiceComponents { - client, backend, .. - } = new_partial::( - &mut config, - )?; - let db = backend.expose_db(); - let storage = backend.expose_storage(); + let partial_components = + new_partial::(&mut config)?; + let db = partial_components.backend.expose_db(); + let storage = partial_components.backend.expose_storage(); - cmd.run(config, client, db, storage) + cmd.run(config, partial_components.client, db, storage) } #[cfg(feature = "runtime-benchmarks")] (BenchmarkCmd::Storage(cmd), Network::Testnet) => { - let FullServiceComponents { - client, backend, .. - } = new_partial::( - &mut config, - )?; - let db = backend.expose_db(); - let storage = backend.expose_storage(); + let partial_components = + new_partial::(&mut config)?; + let db = partial_components.backend.expose_db(); + let storage = partial_components.backend.expose_storage(); - cmd.run(config, client, db, storage) + cmd.run(config, partial_components.client, db, storage) } #[cfg(feature = "runtime-benchmarks")] (BenchmarkCmd::Storage(cmd), Network::Mainnet) => { - let FullServiceComponents { - client, backend, .. - } = new_partial::( - &mut config, - )?; - let db = backend.expose_db(); - let storage = backend.expose_storage(); + let partial_components = + new_partial::(&mut config)?; + let db = partial_components.backend.expose_db(); + let storage = partial_components.backend.expose_storage(); - cmd.run(config, client, db, storage) + cmd.run(config, partial_components.client, db, storage) } (BenchmarkCmd::Overhead(cmd), Network::Other) => { - let FullServiceComponents { client, .. } = - new_partial::( - &mut config, - )?; - let ext_builder = RemarkBuilder::< - polymesh_runtime_develop::RuntimeApi, - GeneralExecutor, - >::new(client.clone()); + let partial_components = + new_partial::(&mut config)?; + let ext_builder = + RemarkBuilder::::new( + partial_components.client.clone(), + ); cmd.run( - config, - client, + config.chain_spec.name().into(), + partial_components.client, inherent_benchmark_data()?, Vec::new(), &ext_builder, + false, ) } (BenchmarkCmd::Overhead(cmd), Network::Testnet) => { - let FullServiceComponents { client, .. } = - new_partial::( - &mut config, - )?; - let ext_builder = RemarkBuilder::< - polymesh_runtime_testnet::RuntimeApi, - GeneralExecutor, - >::new(client.clone()); + let partial_components = + new_partial::(&mut config)?; + let ext_builder = + RemarkBuilder::::new( + partial_components.client.clone(), + ); cmd.run( - config, - client, + config.chain_spec.name().into(), + partial_components.client, inherent_benchmark_data()?, Vec::new(), &ext_builder, + false, ) } (BenchmarkCmd::Overhead(cmd), Network::Mainnet) => { - let FullServiceComponents { client, .. } = - new_partial::( - &mut config, - )?; - let ext_builder = RemarkBuilder::< - polymesh_runtime_mainnet::RuntimeApi, - GeneralExecutor, - >::new(client.clone()); + let partial_components = + new_partial::(&mut config)?; + let ext_builder = + RemarkBuilder::::new( + partial_components.client.clone(), + ); cmd.run( - config, - client, + config.chain_spec.name().into(), + partial_components.client, inherent_benchmark_data()?, Vec::new(), &ext_builder, + false, ) } (BenchmarkCmd::Extrinsic(cmd), Network::Other) => { - let FullServiceComponents { client, .. } = - new_partial::( - &mut config, - )?; + let partial_components = + new_partial::(&mut config)?; // Register the *Remark* and *TKA* builders. let ext_factory = ExtrinsicFactory(vec![ - Box::new(RemarkBuilder::< - polymesh_runtime_develop::RuntimeApi, - GeneralExecutor, - >::new(client.clone())), - Box::new(TransferBuilder::< - polymesh_runtime_develop::RuntimeApi, - GeneralExecutor, - >::new( - client.clone(), Sr25519Keyring::Alice.to_account_id(), 1 + Box::new(RemarkBuilder::::new( + partial_components.client.clone(), )), + Box::new( + TransferBuilder::::new( + partial_components.client.clone(), + Sr25519Keyring::Alice.to_account_id(), + 1, + ), + ), ]); - cmd.run(client, inherent_benchmark_data()?, Vec::new(), &ext_factory) + cmd.run( + partial_components.client, + inherent_benchmark_data()?, + Vec::new(), + &ext_factory, + ) } (BenchmarkCmd::Extrinsic(cmd), Network::Testnet) => { - let FullServiceComponents { client, .. } = - new_partial::( - &mut config, - )?; + let partial_components = + new_partial::(&mut config)?; // Register the *Remark* and *TKA* builders. let ext_factory = ExtrinsicFactory(vec![ - Box::new(RemarkBuilder::< - polymesh_runtime_testnet::RuntimeApi, - GeneralExecutor, - >::new(client.clone())), - Box::new(TransferBuilder::< - polymesh_runtime_testnet::RuntimeApi, - GeneralExecutor, - >::new( - client.clone(), Sr25519Keyring::Alice.to_account_id(), 1 + Box::new(RemarkBuilder::::new( + partial_components.client.clone(), )), + Box::new( + TransferBuilder::::new( + partial_components.client.clone(), + Sr25519Keyring::Alice.to_account_id(), + 1, + ), + ), ]); - cmd.run(client, inherent_benchmark_data()?, Vec::new(), &ext_factory) + cmd.run( + partial_components.client, + inherent_benchmark_data()?, + Vec::new(), + &ext_factory, + ) } (BenchmarkCmd::Extrinsic(cmd), Network::Mainnet) => { - let FullServiceComponents { client, .. } = - new_partial::( - &mut config, - )?; + let partial_components = + new_partial::(&mut config)?; // Register the *Remark* and *TKA* builders. let ext_factory = ExtrinsicFactory(vec![ - Box::new(RemarkBuilder::< - polymesh_runtime_mainnet::RuntimeApi, - GeneralExecutor, - >::new(client.clone())), - Box::new(TransferBuilder::< - polymesh_runtime_mainnet::RuntimeApi, - GeneralExecutor, - >::new( - client.clone(), Sr25519Keyring::Alice.to_account_id(), 1 + Box::new(RemarkBuilder::::new( + partial_components.client.clone(), )), + Box::new( + TransferBuilder::::new( + partial_components.client.clone(), + Sr25519Keyring::Alice.to_account_id(), + 1, + ), + ), ]); - cmd.run(client, inherent_benchmark_data()?, Vec::new(), &ext_factory) + cmd.run( + partial_components.client, + inherent_benchmark_data()?, + Vec::new(), + &ext_factory, + ) } (BenchmarkCmd::Machine(cmd), Network::Other) => { cmd.run(&config, SUBSTRATE_REFERENCE_HARDWARE.clone()) @@ -400,15 +381,15 @@ fn async_run( cli: &impl sc_cli::SubstrateCli, cmd: &impl sc_cli::CliConfiguration, testnet: impl FnOnce( - NewChainOps, + NewChainOps, Configuration, ) -> sc_cli::Result<(F, TaskManager)>, general: impl FnOnce( - NewChainOps, + NewChainOps, Configuration, ) -> sc_cli::Result<(G, TaskManager)>, mainnet: impl FnOnce( - NewChainOps, + NewChainOps, Configuration, ) -> sc_cli::Result<(H, TaskManager)>, ) -> sc_service::Result<(), sc_cli::Error> diff --git a/src/main.rs b/src/main.rs index 23c39d780e..ea5303342c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,11 +4,10 @@ mod chain_spec; #[macro_use] mod service; -//mod benchmarking; +mod benchmarking; mod cli; -//mod command; +mod command; fn main() -> sc_cli::Result<()> { - //command::run() - unimplemented!() + command::run() } diff --git a/src/service.rs b/src/service.rs index 738753587a..d40ce4feed 100644 --- a/src/service.rs +++ b/src/service.rs @@ -23,10 +23,8 @@ use sc_service::error::Error as ServiceError; use sc_service::ChainSpec; use sc_service::{RpcHandlers, TaskManager}; use sc_telemetry::{Telemetry, TelemetryWorker}; -use sc_transaction_pool::TransactionPoolHandle; use sc_transaction_pool_api::OffchainTransactionPoolFactory; use sp_api::ConstructRuntimeApi; -use sp_runtime::traits::BlakeTwo256; use sp_runtime::traits::Block as BlockT; /// Known networks based on name. From bccaf2cd452e3e017472dfad361e8e61a8cfaa09 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 2 Sep 2025 09:12:34 -0300 Subject: [PATCH 65/97] Remove warnings; Remove local dependecies --- Cargo.lock | 179 ++++++++++++++++++++++++--- Cargo.toml | 186 ++++++++++++++--------------- pallets/runtime/mainnet/Cargo.toml | 2 + pallets/sudo/src/lib.rs | 6 +- pallets/treasury/src/lib.rs | 2 +- pallets/utility/src/lib.rs | 7 +- 6 files changed, 270 insertions(+), 112 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5dc8b1faa1..fdba7335c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -856,6 +856,7 @@ checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "binary-merkle-tree" version = "16.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "hash-db", "log", @@ -1829,6 +1830,7 @@ dependencies = [ [[package]] name = "cumulus-client-parachain-inherent" version = "0.17.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1837,7 +1839,7 @@ dependencies = [ "cumulus-test-relay-sproof-builder", "parity-scale-codec", "sc-client-api", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", "sp-inherents", "sp-runtime", "sp-state-machine", @@ -1848,6 +1850,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" version = "0.18.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -1863,6 +1866,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.18.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1876,6 +1880,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" version = "0.12.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -1885,6 +1890,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" version = "0.23.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1903,6 +1909,7 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.19.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -2745,6 +2752,7 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "fork-tree" version = "13.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", ] @@ -2777,6 +2785,7 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" version = "40.2.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-support", "frame-support-procedural", @@ -2800,6 +2809,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "48.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "Inflector", "array-bytes", @@ -2873,6 +2883,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "16.1.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", @@ -2883,6 +2894,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "40.1.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2898,6 +2910,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "40.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "aquamarine", "frame-support", @@ -2939,6 +2952,7 @@ dependencies = [ [[package]] name = "frame-support" version = "40.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "aquamarine", "array-bytes", @@ -2979,6 +2993,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "33.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "Inflector", "cfg-expr", @@ -2991,13 +3006,14 @@ dependencies = [ "proc-macro-warning", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", "syn 2.0.106", ] [[package]] name = "frame-support-procedural-tools" version = "13.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 3.3.0", @@ -3009,6 +3025,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "12.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "proc-macro2", "quote", @@ -3018,6 +3035,7 @@ dependencies = [ [[package]] name = "frame-system" version = "40.2.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "cfg-if", "docify", @@ -3036,6 +3054,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "40.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-benchmarking", "frame-support", @@ -3049,6 +3068,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "36.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "docify", "parity-scale-codec", @@ -3058,6 +3078,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.46.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-support", "parity-scale-codec", @@ -6074,6 +6095,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion" version = "22.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6091,6 +6113,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "40.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-support", "frame-system", @@ -6105,6 +6128,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "40.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-support", "frame-system", @@ -6117,6 +6141,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "40.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6139,6 +6164,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "41.1.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "docify", "frame-benchmarking", @@ -6224,6 +6250,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "40.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "environmental", "frame-benchmarking", @@ -6254,6 +6281,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "23.0.3" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "proc-macro2", "quote", @@ -6263,6 +6291,7 @@ dependencies = [ [[package]] name = "pallet-contracts-uapi" version = "14.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -6304,6 +6333,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "39.2.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6325,6 +6355,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "39.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6358,6 +6389,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "40.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6463,6 +6495,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "39.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6481,6 +6514,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "40.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6495,6 +6529,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "28.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -6546,6 +6581,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "39.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-support", "frame-system", @@ -6629,6 +6665,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "40.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-benchmarking", "frame-support", @@ -6712,6 +6749,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "41.2.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "docify", "frame-benchmarking", @@ -6728,6 +6766,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "40.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-support", "frame-system", @@ -6781,6 +6820,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "40.1.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6802,6 +6842,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "12.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", @@ -6812,6 +6853,7 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" version = "26.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "sp-api", @@ -6892,6 +6934,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "39.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "docify", "frame-benchmarking", @@ -6928,6 +6971,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "40.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-benchmarking", "frame-support", @@ -9054,6 +9098,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "31.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "log", "sp-core", @@ -9064,6 +9109,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.50.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "futures", @@ -9091,6 +9137,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.49.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "futures", "log", @@ -9111,6 +9158,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.44.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "sp-api", @@ -9125,6 +9173,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "43.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "array-bytes", "docify", @@ -9139,7 +9188,7 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", "sp-genesis-builder", "sp-io", "sp-runtime", @@ -9150,6 +9199,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "12.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", @@ -9160,6 +9210,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.52.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "array-bytes", "chrono", @@ -9201,6 +9252,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "39.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "fnv", "futures", @@ -9226,6 +9278,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.46.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "hash-db", "kvdb", @@ -9251,6 +9304,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.49.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "futures", @@ -9273,6 +9327,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.50.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "fork-tree", @@ -9297,7 +9352,7 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-slots", "sp-core", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", "sp-inherents", "sp-keystore", "sp-runtime", @@ -9308,6 +9363,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.50.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "futures", "jsonrpsee", @@ -9329,6 +9385,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.49.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9341,6 +9398,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.35.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "ahash", "array-bytes", @@ -9374,7 +9432,7 @@ dependencies = [ "sp-consensus", "sp-consensus-grandpa", "sp-core", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", @@ -9384,6 +9442,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" version = "0.35.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "finality-grandpa", "futures", @@ -9403,6 +9462,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.49.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "futures", @@ -9425,6 +9485,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.42.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", @@ -9447,6 +9508,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.38.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "polkavm", "sc-allocator", @@ -9459,6 +9521,7 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" version = "0.35.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "log", "polkavm", @@ -9469,6 +9532,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.38.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "anyhow", "log", @@ -9484,6 +9548,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.49.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "console", "futures", @@ -9499,6 +9564,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "35.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "array-bytes", "parking_lot 0.12.4", @@ -9512,6 +9578,7 @@ dependencies = [ [[package]] name = "sc-mixnet" version = "0.20.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "array-bytes", "arrayvec 0.7.6", @@ -9539,6 +9606,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.50.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -9588,6 +9656,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.48.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -9597,6 +9666,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.50.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "ahash", "futures", @@ -9615,6 +9685,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.49.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -9635,6 +9706,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.49.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -9669,6 +9741,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.49.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "array-bytes", "futures", @@ -9687,6 +9760,7 @@ dependencies = [ [[package]] name = "sc-network-types" version = "0.16.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "bs58", "bytes", @@ -9705,6 +9779,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "45.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "bytes", "fnv", @@ -9738,6 +9813,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.20.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9746,6 +9822,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "45.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "futures", "jsonrpsee", @@ -9777,6 +9854,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.49.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -9796,6 +9874,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "22.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "dyn-clone", "forwarded-header-value", @@ -9819,6 +9898,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.50.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "array-bytes", "futures", @@ -9851,12 +9931,13 @@ dependencies = [ [[package]] name = "sc-runtime-utilities" version = "0.2.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "sc-executor", "sc-executor-common", "sp-core", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", "sp-state-machine", "sp-wasm-interface", "thiserror 1.0.69", @@ -9865,6 +9946,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.51.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "directories", @@ -9928,6 +10010,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.38.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "log", "parity-scale-codec", @@ -9938,6 +10021,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.50.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -9956,6 +10040,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "42.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "derive_more 0.99.20", "futures", @@ -9968,13 +10053,14 @@ dependencies = [ "serde", "serde_json", "sp-core", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", "sp-io", ] [[package]] name = "sc-telemetry" version = "28.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "chrono", "futures", @@ -9993,6 +10079,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "39.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "chrono", "console", @@ -10020,6 +10107,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "11.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", @@ -10030,6 +10118,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "39.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "futures", @@ -10047,7 +10136,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", "sp-runtime", "sp-tracing", "sp-transaction-pool", @@ -10061,6 +10150,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "39.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "futures", @@ -10077,6 +10167,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "18.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-channel 1.9.0", "futures", @@ -10796,6 +10887,7 @@ dependencies = [ [[package]] name = "sp-api" version = "36.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "docify", "hash-db", @@ -10817,6 +10909,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "22.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "Inflector", "blake2 0.10.6", @@ -10830,6 +10923,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "40.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "scale-info", @@ -10841,6 +10935,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "26.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "docify", "integer-sqrt", @@ -10854,6 +10949,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "36.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "scale-info", @@ -10865,6 +10961,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "36.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "sp-api", "sp-inherents", @@ -10874,6 +10971,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "39.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "futures", "parity-scale-codec", @@ -10892,6 +10990,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.42.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "futures", @@ -10905,6 +11004,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.42.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "parity-scale-codec", @@ -10920,6 +11020,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.42.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "parity-scale-codec", @@ -10937,6 +11038,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "23.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "finality-grandpa", "log", @@ -10953,6 +11055,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.42.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "scale-info", @@ -10963,6 +11066,7 @@ dependencies = [ [[package]] name = "sp-core" version = "36.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "ark-vrf", "array-bytes", @@ -10992,7 +11096,7 @@ dependencies = [ "secp256k1 0.28.2", "secrecy 0.8.0", "serde", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", "sp-debug-derive", "sp-externalities", "sp-runtime-interface", @@ -11009,6 +11113,8 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9927a7f81334ed5b8a98a4a978c81324d12bd9713ec76b5c68fd410174c5eb" dependencies = [ "blake2b_simd", "byteorder", @@ -11021,8 +11127,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9927a7f81334ed5b8a98a4a978c81324d12bd9713ec76b5c68fd410174c5eb" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "blake2b_simd", "byteorder", @@ -11035,15 +11140,17 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "quote", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", "syn 2.0.106", ] [[package]] name = "sp-database" version = "10.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "kvdb", "parking_lot 0.12.4", @@ -11052,6 +11159,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "proc-macro2", "quote", @@ -11061,6 +11169,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.30.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "environmental", "parity-scale-codec", @@ -11070,6 +11179,7 @@ dependencies = [ [[package]] name = "sp-genesis-builder" version = "0.17.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "scale-info", @@ -11081,6 +11191,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "36.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11093,6 +11204,7 @@ dependencies = [ [[package]] name = "sp-io" version = "40.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "bytes", "docify", @@ -11104,7 +11216,7 @@ dependencies = [ "rustversion", "secp256k1 0.28.2", "sp-core", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", "sp-externalities", "sp-keystore", "sp-runtime-interface", @@ -11118,6 +11230,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "41.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "sp-core", "sp-runtime", @@ -11127,6 +11240,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.42.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", @@ -11137,6 +11251,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -11145,6 +11260,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.10.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "frame-metadata 20.0.0", "parity-scale-codec", @@ -11154,6 +11270,7 @@ dependencies = [ [[package]] name = "sp-mixnet" version = "0.14.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "scale-info", @@ -11164,6 +11281,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "36.2.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "scale-info", @@ -11176,6 +11294,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "36.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "sp-api", "sp-core", @@ -11185,6 +11304,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "13.0.2" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "backtrace", "regex", @@ -11193,6 +11313,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "34.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "rustc-hash 1.1.0", "serde", @@ -11202,6 +11323,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "41.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "binary-merkle-tree", "docify", @@ -11230,6 +11352,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "29.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11248,6 +11371,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "18.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "Inflector", "expander", @@ -11260,6 +11384,7 @@ dependencies = [ [[package]] name = "sp-session" version = "38.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "scale-info", @@ -11273,6 +11398,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "38.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11285,6 +11411,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.45.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "hash-db", "log", @@ -11304,6 +11431,7 @@ dependencies = [ [[package]] name = "sp-statement-store" version = "20.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "aes-gcm", "curve25519-dalek", @@ -11316,7 +11444,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0", + "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", "sp-externalities", "sp-runtime", "sp-runtime-interface", @@ -11327,10 +11455,12 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" [[package]] name = "sp-storage" version = "22.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11342,6 +11472,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "36.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "parity-scale-codec", @@ -11353,6 +11484,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "17.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "tracing", @@ -11363,6 +11495,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "36.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "sp-api", "sp-runtime", @@ -11371,6 +11504,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "36.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "async-trait", "parity-scale-codec", @@ -11384,6 +11518,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "39.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "ahash", "hash-db", @@ -11405,6 +11540,7 @@ dependencies = [ [[package]] name = "sp-version" version = "39.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11421,6 +11557,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "15.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "parity-scale-codec", "proc-macro-warning", @@ -11432,6 +11569,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "21.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -11443,6 +11581,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "31.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -11508,6 +11647,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "staging-xcm" version = "16.2.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "array-bytes", "bounded-collections", @@ -11528,6 +11668,7 @@ dependencies = [ [[package]] name = "staging-xcm-builder" version = "20.1.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "environmental", "frame-support", @@ -11551,6 +11692,7 @@ dependencies = [ [[package]] name = "staging-xcm-executor" version = "19.1.2" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "environmental", "frame-benchmarking", @@ -11651,6 +11793,7 @@ dependencies = [ [[package]] name = "substrate-bip39" version = "0.6.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "hmac 0.12.1", "pbkdf2", @@ -11662,10 +11805,12 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "11.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" [[package]] name = "substrate-frame-rpc-system" version = "44.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "docify", "frame-system-rpc-runtime-api", @@ -11685,6 +11830,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.17.2" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "http-body-util", "hyper 1.7.0", @@ -11698,10 +11844,12 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "3.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" [[package]] name = "substrate-wasm-builder" version = "26.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "build-helper", "cargo_metadata", @@ -12393,6 +12541,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "19.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "coarsetime", "polkadot-primitives", @@ -12403,6 +12552,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "5.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "expander", "proc-macro-crate 3.3.0", @@ -13854,6 +14004,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "11.0.2" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" dependencies = [ "Inflector", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 0017f54fad..ec0eaf323a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,99 +11,99 @@ path = "src/main.rs" # Path build to use our Substrate version from github, `branch = "polymesh-v8-monthly-2023-08"`. [patch.crates-io] -frame-benchmarking = { path = "../polkadot-sdk/substrate/frame/benchmarking" } -frame-benchmarking-cli = { path = "../polkadot-sdk/substrate/utils/frame/benchmarking-cli" } -frame-executive = { path = "../polkadot-sdk/substrate/frame/executive" } -frame-support = { path = "../polkadot-sdk/substrate/frame/support" } -frame-election-provider-support = { path = "../polkadot-sdk/substrate/frame/election-provider-support" } -frame-system = { path = "../polkadot-sdk/substrate/frame/system" } -frame-system-benchmarking = { path = "../polkadot-sdk/substrate/frame/system/benchmarking" } -frame-system-rpc-runtime-api = { path = "../polkadot-sdk/substrate/frame/system/rpc/runtime-api" } -pallet-authority-discovery = { path = "../polkadot-sdk/substrate/frame/authority-discovery" } -pallet-authorship = { path = "../polkadot-sdk/substrate/frame/authorship" } -pallet-babe = { path = "../polkadot-sdk/substrate/frame/babe" } -pallet-balances = { path = "../polkadot-sdk/substrate/frame/balances" } -pallet-contracts = { path = "../polkadot-sdk/substrate/frame/contracts" } -pallet-election-provider-multi-phase = { path = "../polkadot-sdk/substrate/frame/election-provider-multi-phase" } -pallet-grandpa = { path = "../polkadot-sdk/substrate/frame/grandpa" } -pallet-im-online = { path = "../polkadot-sdk/substrate/frame/im-online" } -pallet-indices = { path = "../polkadot-sdk/substrate/frame/indices" } -pallet-offences = { path = "../polkadot-sdk/substrate/frame/offences" } -pallet-preimage = { path = "../polkadot-sdk/substrate/frame/preimage" } -pallet-insecure-randomness-collective-flip = { path = "../polkadot-sdk/substrate/frame/insecure-randomness-collective-flip" } -pallet-scheduler = { path = "../polkadot-sdk/substrate/frame/scheduler" } -pallet-session = { path = "../polkadot-sdk/substrate/frame/session" } -pallet-staking = { path = "../polkadot-sdk/substrate/frame/staking" } -pallet-staking-runtime-api = { path = "../polkadot-sdk/substrate/frame/staking/runtime-api" } -pallet-staking-reward-curve = { path = "../polkadot-sdk/substrate/frame/staking/reward-curve" } -pallet-timestamp = { path = "../polkadot-sdk/substrate/frame/timestamp" } -sc-authority-discovery = { path = "../polkadot-sdk/substrate/client/authority-discovery" } -sc-basic-authorship = { path = "../polkadot-sdk/substrate/client/basic-authorship" } -sc-block-builder = { path = "../polkadot-sdk/substrate/client/block-builder" } -sc-chain-spec = { path = "../polkadot-sdk/substrate/client/chain-spec" } -sc-cli = { path = "../polkadot-sdk/substrate/client/cli" } -sc-client-api = { path = "../polkadot-sdk/substrate/client/api" } -sc-client-db = { path = "../polkadot-sdk/substrate/client/db" } -sc-consensus = { path = "../polkadot-sdk/substrate/client/consensus/common" } -sc-consensus-babe = { path = "../polkadot-sdk/substrate/client/consensus/babe" } -sc-consensus-babe-rpc = { path = "../polkadot-sdk/substrate/client/consensus/babe/rpc" } -sc-consensus-epochs = { path = "../polkadot-sdk/substrate/client/consensus/epochs" } -sc-consensus-slots = { path = "../polkadot-sdk/substrate/client/consensus/slots" } -sc-executor = { path = "../polkadot-sdk/substrate/client/executor" } -sc-consensus-grandpa = { path = "../polkadot-sdk/substrate/client/consensus/grandpa" } -sc-consensus-grandpa-rpc = { path = "../polkadot-sdk/substrate/client/consensus/grandpa/rpc" } -sc-keystore = { path = "../polkadot-sdk/substrate/client/keystore" } -sc-network = { path = "../polkadot-sdk/substrate/client/network" } -sc-network-common = { path = "../polkadot-sdk/substrate/client/network/common" } -sc-network-sync = { path = "../polkadot-sdk/substrate/client/network/sync" } -sc-rpc = { path = "../polkadot-sdk/substrate/client/rpc" } -sc-rpc-api = { path = "../polkadot-sdk/substrate/client/rpc-api" } -sc-rpc-spec-v2 = { path = "../polkadot-sdk/substrate/client/rpc-spec-v2" } -sc-service = { path = "../polkadot-sdk/substrate/client/service" } -sc-telemetry = { path = "../polkadot-sdk/substrate/client/telemetry" } -sc-transaction-pool = { path = "../polkadot-sdk/substrate/client/transaction-pool" } -sc-transaction-pool-api = { path = "../polkadot-sdk/substrate/client/transaction-pool/api" } -sc-sync-state-rpc = { path = "../polkadot-sdk/substrate/client/sync-state-rpc" } -sc-offchain = { path = "../polkadot-sdk/substrate/client/offchain" } -sp-api = { path = "../polkadot-sdk/substrate/primitives/api" } -sp-application-crypto = { path = "../polkadot-sdk/substrate/primitives/application-crypto" } -sp-arithmetic = { path = "../polkadot-sdk/substrate/primitives/arithmetic" } -sp-authority-discovery = { path = "../polkadot-sdk/substrate/primitives/authority-discovery" } -sp-block-builder = { path = "../polkadot-sdk/substrate/primitives/block-builder" } -sp-blockchain = { path = "../polkadot-sdk/substrate/primitives/blockchain" } -sp-consensus = { path = "../polkadot-sdk/substrate/primitives/consensus/common" } -sp-consensus-babe = { path = "../polkadot-sdk/substrate/primitives/consensus/babe" } -sp-consensus-slots = { path = "../polkadot-sdk/substrate/primitives/consensus/slots" } -sp-core = { path = "../polkadot-sdk/substrate/primitives/core" } -sp-debug-derive = { path = "../polkadot-sdk/substrate/primitives/debug-derive" } -sp-externalities = { path = "../polkadot-sdk/substrate/primitives/externalities" } -sp-consensus-grandpa = { path = "../polkadot-sdk/substrate/primitives/consensus/grandpa" } -sp-inherents = { path = "../polkadot-sdk/substrate/primitives/inherents" } -sp-io = { path = "../polkadot-sdk/substrate/primitives/io" } -sp-keystore = { path = "../polkadot-sdk/substrate/primitives/keystore" } -sp-keyring = { path = "../polkadot-sdk/substrate/primitives/keyring" } -sp-npos-elections = { path = "../polkadot-sdk/substrate/primitives/npos-elections" } -sp-offchain = { path = "../polkadot-sdk/substrate/primitives/offchain" } -sp-rpc = { path = "../polkadot-sdk/substrate/primitives/rpc" } -sp-runtime = { path = "../polkadot-sdk/substrate/primitives/runtime" } -sp-weights = { path = "../polkadot-sdk/substrate/primitives/weights" } -sp-runtime-interface = { path = "../polkadot-sdk/substrate/primitives/runtime-interface" } -sp-session = { path = "../polkadot-sdk/substrate/primitives/session" } -sp-staking = { path = "../polkadot-sdk/substrate/primitives/staking" } -sp-state-machine = { path = "../polkadot-sdk/substrate/primitives/state-machine" } -sp-std = { path = "../polkadot-sdk/substrate/primitives/std" } -sp-storage = { path = "../polkadot-sdk/substrate/primitives/storage" } -sp-timestamp = { path = "../polkadot-sdk/substrate/primitives/timestamp" } -sp-tracing = { path = "../polkadot-sdk/substrate/primitives/tracing" } -sp-transaction-pool = { path = "../polkadot-sdk/substrate/primitives/transaction-pool" } -sp-transaction-storage-proof = { path = "../polkadot-sdk/substrate/primitives/transaction-storage-proof" } -sp-trie = { path = "../polkadot-sdk/substrate/primitives/trie" } -sp-version = { path = "../polkadot-sdk/substrate/primitives/version" } -substrate-frame-rpc-system = { path = "../polkadot-sdk/substrate/utils/frame/rpc/system" } -substrate-prometheus-endpoint = { path = "../polkadot-sdk/substrate/utils/prometheus" } -substrate-build-script-utils = { path = "../polkadot-sdk/substrate/utils/build-script-utils" } -substrate-wasm-builder = { path = "../polkadot-sdk/substrate/utils/wasm-builder" } -substrate-test-utils = { path = "../polkadot-sdk/substrate/test-utils" } +frame-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +frame-benchmarking-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +frame-executive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +frame-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +frame-election-provider-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +frame-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +frame-system-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +frame-system-rpc-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-balances = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-contracts = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-election-provider-multi-phase = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-im-online = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-indices = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-offences = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-preimage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-insecure-randomness-collective-flip = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-scheduler = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-staking-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-staking-reward-curve = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +pallet-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-basic-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-chain-spec = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-client-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-client-db = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-consensus-babe-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-consensus-epochs = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-executor = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-consensus-grandpa-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-network = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-network-common = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-network-sync = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-rpc-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-rpc-spec-v2 = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-service = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-telemetry = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-transaction-pool-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-sync-state-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sc-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-application-crypto = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-arithmetic = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-blockchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-core = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-debug-derive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-externalities = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-inherents = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-io = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-keyring = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-npos-elections = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-runtime = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-weights = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-runtime-interface = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-state-machine = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-std = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-storage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-tracing = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-transaction-storage-proof = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-trie = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-version = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +substrate-frame-rpc-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +substrate-prometheus-endpoint = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +substrate-build-script-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +substrate-wasm-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +substrate-test-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } [workspace] members = [ diff --git a/pallets/runtime/mainnet/Cargo.toml b/pallets/runtime/mainnet/Cargo.toml index e0166e4c75..08edc19601 100644 --- a/pallets/runtime/mainnet/Cargo.toml +++ b/pallets/runtime/mainnet/Cargo.toml @@ -184,3 +184,5 @@ std = [ "sp-transaction-pool/std", "sp-version/std", ] + +runtime-benchmarks = [] \ No newline at end of file diff --git a/pallets/sudo/src/lib.rs b/pallets/sudo/src/lib.rs index 05ff5b6d8a..a913823a09 100644 --- a/pallets/sudo/src/lib.rs +++ b/pallets/sudo/src/lib.rs @@ -176,14 +176,16 @@ pub mod pallet { /// ## Complexity /// - O(1). #[pallet::call_index(1)] - #[pallet::weight((_weight.max(MIN_WEIGHT), call.get_dispatch_info().class))] + #[pallet::weight((weight.max(MIN_WEIGHT), call.get_dispatch_info().class))] pub fn sudo_unchecked_weight( origin: OriginFor, call: Box<::RuntimeCall>, - _weight: Weight, + weight: Weight, ) -> DispatchResultWithPostInfo { Self::ensure_sudo(origin)?; + let _ = weight; // We don't check the weight witness since it is a root call. + let res = call.dispatch_bypass_filter(frame_system::RawOrigin::Root.into()); Self::deposit_event(Event::Sudid { sudo_result: res.map(|_| ()).map_err(|e| e.error), diff --git a/pallets/treasury/src/lib.rs b/pallets/treasury/src/lib.rs index c30afd7c3e..8beebebaa6 100644 --- a/pallets/treasury/src/lib.rs +++ b/pallets/treasury/src/lib.rs @@ -39,7 +39,7 @@ pub mod benchmarking; use frame_support::dispatch::DispatchResult; use frame_support::ensure; use frame_support::pallet_prelude::DispatchError; -use frame_support::traits::{Currency, ExistenceRequirement, Imbalance, OnUnbalanced}; +use frame_support::traits::{Currency, ExistenceRequirement, OnUnbalanced}; use frame_support::weights::Weight; use frame_system::ensure_root; use sp_runtime::traits::{AccountIdConversion, Saturating}; diff --git a/pallets/utility/src/lib.rs b/pallets/utility/src/lib.rs index 0fd863e25a..eb5d441133 100644 --- a/pallets/utility/src/lib.rs +++ b/pallets/utility/src/lib.rs @@ -544,13 +544,16 @@ pub mod pallet { /// /// The dispatch origin for this call must be _Root_. #[pallet::call_index(5)] - #[pallet::weight((*_weight, call.get_dispatch_info().class))] + #[pallet::weight((*weight, call.get_dispatch_info().class))] pub fn with_weight( origin: OriginFor, call: Box<::RuntimeCall>, - _weight: Weight, + weight: Weight, ) -> DispatchResultWithPostInfo { Self::ensure_root(origin)?; + + let _ = weight; // We don't check the weight witness since it is a root call. + call.dispatch_bypass_filter(frame_system::RawOrigin::Root.into()) .map_err(|e| e.error)?; Ok(().into()) From 136b550ffa44530f1607dcef7535a7beeb8ed28f Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 2 Sep 2025 11:24:09 -0300 Subject: [PATCH 66/97] Impl TransactionExtension --- pallets/permissions/src/lib.rs | 2 +- pallets/sudo/src/extension.rs | 60 ++++++---- pallets/transaction-payment/src/lib.rs | 156 ++++++++++++++----------- 3 files changed, 130 insertions(+), 88 deletions(-) diff --git a/pallets/permissions/src/lib.rs b/pallets/permissions/src/lib.rs index 136f5a307e..17cb7587fb 100644 --- a/pallets/permissions/src/lib.rs +++ b/pallets/permissions/src/lib.rs @@ -196,7 +196,7 @@ where type Pre = (); fn weight(&self, _: &T::RuntimeCall) -> Weight { - unimplemented!() + Weight::zero() } fn validate( diff --git a/pallets/sudo/src/extension.rs b/pallets/sudo/src/extension.rs index d5aa8371bb..b90d7fba76 100644 --- a/pallets/sudo/src/extension.rs +++ b/pallets/sudo/src/extension.rs @@ -17,16 +17,16 @@ use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::dispatch::DispatchInfo; +use frame_support::ensure; use frame_support::pallet_prelude::Weight; use scale_info::TypeInfo; -use sp_runtime::traits::{DispatchInfoOf, Dispatchable, PostDispatchInfoOf, TransactionExtension}; -use sp_runtime::transaction_validity::TransactionSource; -use sp_runtime::transaction_validity::TransactionValidityError; -use sp_runtime::transaction_validity::ValidTransaction; -use sp_runtime::DispatchResult; +use sp_runtime::traits::{AsSystemOriginSigner, DispatchInfoOf}; +use sp_runtime::traits::{Dispatchable, TransactionExtension}; +use sp_runtime::transaction_validity::{InvalidTransaction, TransactionValidityError}; +use sp_runtime::transaction_validity::{TransactionPriority, TransactionSource, ValidTransaction}; use sp_std::{fmt, marker::PhantomData}; -use crate::Config; +use crate::{Config, Key}; /// Ensure that signed transactions are only valid if they are signed by sudo account. /// @@ -69,6 +69,7 @@ impl TransactionExtension<::RuntimeCall> for CheckOnlySudoAccount where ::RuntimeCall: Dispatchable, + <::RuntimeCall as Dispatchable>::RuntimeOrigin: AsSystemOriginSigner, { const IDENTIFIER: &'static str = "CheckOnlySudoAccount"; type Implicit = (); @@ -76,14 +77,14 @@ where type Pre = (); fn weight(&self, _: &::RuntimeCall) -> Weight { - unimplemented!() + Weight::zero() } fn validate( &self, - _origin: <::RuntimeCall as Dispatchable>::RuntimeOrigin, + origin: <::RuntimeCall as Dispatchable>::RuntimeOrigin, _call: &::RuntimeCall, - _info: &DispatchInfoOf<::RuntimeCall>, + info: &DispatchInfoOf<::RuntimeCall>, _len: usize, _: (), _implication: &impl Encode, @@ -96,27 +97,44 @@ where ), TransactionValidityError, > { - unimplemented!() + let sudo_key: T::AccountId = Key::::get().ok_or(InvalidTransaction::Custom(0))?; + + let caller_acc = origin + .as_system_origin_signer() + .ok_or(InvalidTransaction::BadSigner)?; + + ensure!( + sudo_key == *caller_acc, + TransactionValidityError::Invalid(InvalidTransaction::BadSigner) + ); + + let valid_transaction = ValidTransaction { + priority: info.call_weight.ref_time() as TransactionPriority, + ..Default::default() + }; + + Ok((valid_transaction, (), origin)) } fn prepare( self, _val: Self::Val, - _origin: &<::RuntimeCall as Dispatchable>::RuntimeOrigin, + origin: &<::RuntimeCall as Dispatchable>::RuntimeOrigin, _call: &::RuntimeCall, _info: &DispatchInfoOf<::RuntimeCall>, _len: usize, ) -> Result { - unimplemented!(); - } + let sudo_key: T::AccountId = Key::::get().ok_or(InvalidTransaction::Custom(0))?; - fn post_dispatch( - _pre: Self::Pre, - _info: &DispatchInfoOf<::RuntimeCall>, - _post_info: &mut PostDispatchInfoOf<::RuntimeCall>, - _len: usize, - _result: &DispatchResult, - ) -> Result<(), TransactionValidityError> { - unimplemented!(); + let caller_acc = origin + .as_system_origin_signer() + .ok_or(InvalidTransaction::BadSigner)?; + + ensure!( + sudo_key == *caller_acc, + TransactionValidityError::Invalid(InvalidTransaction::BadSigner) + ); + + Ok(()) } } diff --git a/pallets/transaction-payment/src/lib.rs b/pallets/transaction-payment/src/lib.rs index f568654070..e4753743ca 100644 --- a/pallets/transaction-payment/src/lib.rs +++ b/pallets/transaction-payment/src/lib.rs @@ -51,23 +51,20 @@ #![cfg_attr(not(feature = "std"), no_std)] use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; -use frame_support::dispatch::{ - DispatchClass, DispatchInfo, DispatchResult, GetDispatchInfo, Pays, PostDispatchInfo, -}; +use frame_support::dispatch::{DispatchClass, DispatchInfo, DispatchResult}; +use frame_support::dispatch::{GetDispatchInfo, Pays, PostDispatchInfo}; use frame_support::pallet_prelude::*; use frame_support::traits::Get; use frame_support::weights::{Weight, WeightToFee}; use frame_support::RuntimeDebugNoBound; use frame_system::pallet_prelude::{BlockNumberFor, OriginFor}; use scale_info::TypeInfo; -use sp_runtime::traits::{ - Convert, DispatchInfoOf, Dispatchable, PostDispatchInfoOf, Saturating, TransactionExtension, - Zero, -}; +use sp_runtime::traits::SaturatedConversion; +use sp_runtime::traits::{AsSystemOriginSigner, Saturating, TransactionExtension, Zero}; +use sp_runtime::traits::{Convert, DispatchInfoOf, Dispatchable, PostDispatchInfoOf}; use sp_runtime::transaction_validity::{TransactionValidityError, ValidTransaction}; -use sp_runtime::{ - FixedPointNumber, FixedPointOperand, FixedU128, Perbill, Perquintill, RuntimeDebug, -}; +use sp_runtime::{FixedPointNumber, FixedPointOperand, FixedU128}; +use sp_runtime::{Perbill, Perquintill, RuntimeDebug}; use polymesh_primitives::traits::group::GroupTrait; use polymesh_primitives::traits::{CddAndFeeDetails, IdentityFnTrait, SubsidiserTrait}; @@ -786,12 +783,12 @@ where self.0 } - fn withdraw_fee( + pub(crate) fn can_withdraw_fee( &self, who: &T::AccountId, call: &T::RuntimeCall, info: &DispatchInfoOf, - fee: BalanceOf, + len: usize, ) -> Result< ( BalanceOf, @@ -801,6 +798,7 @@ where TransactionValidityError, > { let tip = self.0; + let fee = Pallet::::compute_fee(len as u32, info, tip); // Polymesh change // ----------------------------------------------------------------- @@ -830,43 +828,6 @@ where // ----------------------------------------------------------------- } - fn can_withdraw_fee( - &self, - who: &T::AccountId, - call: &T::RuntimeCall, - info: &DispatchInfoOf, - len: usize, - ) -> Result, TransactionValidityError> { - let tip = self.0; - let fee = Pallet::::compute_fee(len as u32, info, tip); - - // Polymesh change - // ----------------------------------------------------------------- - - if fee.is_zero() { - return Ok(fee); - } - - // Get the payer for this transaction. - let payers_key = - T::CddHandler::get_valid_payer(call, who)?.ok_or(InvalidTransaction::Payment)?; - - // Check if the payer is being subsidised. - let subsidiser = T::Subsidiser::check_subsidy(&payers_key, fee.into(), Some(call))?; - - // key to pay the fee. - let fee_key = subsidiser.as_ref().unwrap_or(&payers_key); - - <::OnChargeTransaction as OnChargeTransaction>::withdraw_fee( - fee_key, call, info, fee, tip, - )?; - - T::CddHandler::set_payer_context(Some(payers_key)); - Ok(fee) - - // ----------------------------------------------------------------- - } - // Polymesh change: Used to allow GC/CDD member to include a `tip`. // ----------------------------------------------------------------- @@ -881,7 +842,7 @@ where /// /// Tipping is allowed for `DispatchClass::Operational` created by a Governance or CDD Provider member. /// Mandatory transactions are going to be included in the block, so adding a tip does not matter. - fn ensure_valid_tip( + pub(crate) fn ensure_valid_tip( &self, who: &T::AccountId, info: &DispatchInfoOf, @@ -948,6 +909,8 @@ impl sp_std::fmt::Debug for ChargeTransactionPayment { impl TransactionExtension for ChargeTransactionPayment where T::RuntimeCall: Dispatchable, + ::RuntimeOrigin: AsSystemOriginSigner, + BalanceOf: Send + Sync + Into, { const IDENTIFIER: &'static str = "ChargeTransactionPayment"; type Implicit = (); @@ -955,15 +918,15 @@ where type Pre = Pre; fn weight(&self, _: &T::RuntimeCall) -> Weight { - unimplemented!() + Weight::zero() } fn validate( &self, - _origin: ::RuntimeOrigin, - _call: &T::RuntimeCall, - _info: &DispatchInfoOf, - _len: usize, + origin: ::RuntimeOrigin, + call: &T::RuntimeCall, + info: &DispatchInfoOf, + len: usize, _: (), _implication: &impl Encode, _source: TransactionSource, @@ -975,28 +938,89 @@ where ), TransactionValidityError, > { - unimplemented!() + let caller_acc = origin + .as_system_origin_signer() + .ok_or(InvalidTransaction::BadSigner)?; + + let tip = self.ensure_valid_tip(caller_acc, info)?; + + let (fee, _, subsidiser) = self.can_withdraw_fee(caller_acc, call, info, len)?; + + let valid_transaction = ValidTransaction { + priority: tip.saturated_into::(), + ..Default::default() + }; + + let val = Val::Charge { + tip, + who: subsidiser.unwrap_or(caller_acc.clone()), + fee, + }; + + Ok((valid_transaction, val, origin)) } fn prepare( self, _val: Self::Val, - _origin: &::RuntimeOrigin, - _call: &T::RuntimeCall, - _info: &DispatchInfoOf, - _len: usize, + origin: &::RuntimeOrigin, + call: &T::RuntimeCall, + info: &DispatchInfoOf, + len: usize, ) -> Result { - unimplemented!() + let caller_acc = origin + .as_system_origin_signer() + .ok_or(InvalidTransaction::BadSigner)?; + + let tip = self.ensure_valid_tip(caller_acc, info)?; + + let (_, imbalance, subsidiser) = self.can_withdraw_fee(caller_acc, call, info, len)?; + + let pre = Pre::Charge { + tip, + who: subsidiser.unwrap_or(caller_acc.clone()), + imbalance, + }; + + Ok(pre) } fn post_dispatch( - _pre: Self::Pre, - _info: &DispatchInfoOf, - _post_info: &mut PostDispatchInfoOf, - _len: usize, + pre: Self::Pre, + info: &DispatchInfoOf, + post_info: &mut PostDispatchInfoOf, + len: usize, _result: &DispatchResult, ) -> Result<(), TransactionValidityError> { - unimplemented!() + let (tip, who, imbalance) = { + match pre { + Pre::Charge { + tip, + who, + imbalance, + } => (tip, who, imbalance), + Pre::NoCharge { .. } => return Ok(()), + } + }; + + let actual_fee = Pallet::::compute_actual_fee(len as u32, info, post_info, tip); + + // Fee returned to original payer. + let payer_key = T::CddHandler::get_payer_from_context().unwrap_or(who.clone()); + + T::OnChargeTransaction::correct_and_deposit_fee( + &payer_key, info, post_info, actual_fee, tip, imbalance, + )?; + + Pallet::::deposit_event(Event::::TransactionFeePaid { + who: payer_key, + actual_fee, + tip, + }); + + // It clears the identity and payer in the context after transaction. + T::CddHandler::clear_context(); + Ok(()) } } From f1f19ec5d351ce89563cc23bc5c5558178a62caa Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Wed, 3 Sep 2025 10:06:31 -0300 Subject: [PATCH 67/97] Add missing GenesisBuilder impl; Use camel case for json genesis; Add validators genesis config --- Cargo.lock | 5 ++ Cargo.toml | 3 ++ pallets/runtime/common/Cargo.toml | 4 +- pallets/runtime/common/src/runtime.rs | 15 ++++++ pallets/runtime/develop/Cargo.toml | 2 + pallets/runtime/mainnet/Cargo.toml | 2 + pallets/runtime/testnet/Cargo.toml | 3 +- src/chain_spec/ci_runtime.rs | 21 -------- src/chain_spec/common.rs | 75 ++++++++++++++++++--------- src/chain_spec/develop_runtime.rs | 27 +++++----- src/chain_spec/mainnet_runtime.rs | 23 ++++---- src/chain_spec/mod.rs | 1 - src/chain_spec/testnet_runtime.rs | 26 +++++----- 13 files changed, 124 insertions(+), 83 deletions(-) delete mode 100644 src/chain_spec/ci_runtime.rs diff --git a/Cargo.lock b/Cargo.lock index fdba7335c8..c93f07dca8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7469,6 +7469,7 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-slots", "sp-core", + "sp-genesis-builder", "sp-inherents", "sp-io", "sp-keyring", @@ -7625,6 +7626,7 @@ dependencies = [ "polymesh-common-utilities", "polymesh-primitives", "smallvec", + "sp-genesis-builder", "sp-io", "sp-runtime", "sp-std", @@ -7703,6 +7705,7 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-grandpa", "sp-core", + "sp-genesis-builder", "sp-inherents", "sp-io", "sp-offchain", @@ -7786,6 +7789,7 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-grandpa", "sp-core", + "sp-genesis-builder", "sp-inherents", "sp-io", "sp-offchain", @@ -7869,6 +7873,7 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-grandpa", "sp-core", + "sp-genesis-builder", "sp-inherents", "sp-io", "sp-offchain", diff --git a/Cargo.toml b/Cargo.toml index ec0eaf323a..d17743843b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -78,6 +78,7 @@ sp-core = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch sp-debug-derive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } sp-externalities = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } sp-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } +sp-genesis-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } sp-inherents = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } sp-io = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } sp-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2503-7" } @@ -246,6 +247,7 @@ sp-consensus-grandpa = { version = "23.1.0", default-features = false } sp-consensus-slots = { version = "0.42.1", default-features = false } sp-core = { version = "36.1.0", default-features = false } sp-debug-derive = { version = "14.0.0", default-features = false } +sp-genesis-builder = { version = "0.17.0", default-features = false } sp-inherents = { version = "36.0.0", default-features = false } sp-io = { version = "40.0.1", default-features = false } sp-keyring = { version = "41.0.0", default-features = false } @@ -388,6 +390,7 @@ sp-consensus-babe = { workspace = true } sp-consensus-slots = { workspace = true } sp-keyring = { workspace = true } sp-core = { workspace = true } +sp-genesis-builder = { workspace = true } sp-inherents = { workspace = true } sp-io = { workspace = true } sp-transaction-storage-proof = { workspace = true } diff --git a/pallets/runtime/common/Cargo.toml b/pallets/runtime/common/Cargo.toml index fb008410c5..218a8a1c81 100644 --- a/pallets/runtime/common/Cargo.toml +++ b/pallets/runtime/common/Cargo.toml @@ -28,6 +28,7 @@ frame-support = { workspace = true, default-features = false } frame-system = { workspace = true, default-features = false } pallet-authorship = { workspace = true, default-features = false } pallet-election-provider-multi-phase = { workspace = true, default-features = false } +sp-genesis-builder = { workspace = true, default-features = false } sp-io = { workspace = true, default-features = false } sp-std = { workspace = true, default-features = false } sp-runtime = { workspace = true, default-features = false } @@ -53,7 +54,8 @@ std = [ "sp-std/std", "frame-election-provider-support/std", "pallet-election-provider-multi-phase/std", - "sp-io/std" + "sp-io/std", + "sp-genesis-builder/std", ] runtime-benchmarks = [ "pallet-balances/runtime-benchmarks", diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 357cefe3ee..3b6daced45 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -1304,6 +1304,21 @@ macro_rules! runtime_apis { } } + impl sp_genesis_builder::GenesisBuilder for Runtime { + fn build_state(config: Vec) -> sp_genesis_builder::Result { + frame_support::genesis_builder_helper::build_state::(config) + } + + fn get_preset(id: &Option) -> Option> { + frame_support::genesis_builder_helper::get_preset::(id, |_| None) + } + + + fn preset_names() -> Vec { + vec![] + } + } + $($extra)* } } diff --git a/pallets/runtime/develop/Cargo.toml b/pallets/runtime/develop/Cargo.toml index e7f294d863..4c606403df 100644 --- a/pallets/runtime/develop/Cargo.toml +++ b/pallets/runtime/develop/Cargo.toml @@ -66,6 +66,7 @@ sp-authority-discovery = { workspace = true, default-features = false } sp-transaction-pool = { workspace = true, default-features = false } sp-block-builder = { workspace = true, default-features = false } sp-arithmetic = { workspace = true, default-features = false } +sp-genesis-builder = { workspace = true, default-features = false } # pallet-authorship = { workspace = true, default-features = false } pallet-contracts = { workspace = true, default-features = false } @@ -194,6 +195,7 @@ std = [ "sp-transaction-pool/std", "sp-version/std", "polymesh-contracts/std", + "sp-genesis-builder/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", diff --git a/pallets/runtime/mainnet/Cargo.toml b/pallets/runtime/mainnet/Cargo.toml index 08edc19601..bb03651ae4 100644 --- a/pallets/runtime/mainnet/Cargo.toml +++ b/pallets/runtime/mainnet/Cargo.toml @@ -86,6 +86,7 @@ sp-consensus-babe = { workspace = true, default-features = false } sp-consensus-grandpa = { workspace = true, default-features = false } sp-core = { workspace = true, default-features = false } sp-inherents = { workspace = true, default-features = false } +sp-genesis-builder = { workspace = true, default-features = false } sp-io = { workspace = true, default-features = false } sp-offchain = { workspace = true, default-features = false } sp-runtime = { workspace = true, default-features = false } @@ -183,6 +184,7 @@ std = [ "sp-std/std", "sp-transaction-pool/std", "sp-version/std", + "sp-genesis-builder/std", ] runtime-benchmarks = [] \ No newline at end of file diff --git a/pallets/runtime/testnet/Cargo.toml b/pallets/runtime/testnet/Cargo.toml index a6f7c2df08..fe82fa7916 100644 --- a/pallets/runtime/testnet/Cargo.toml +++ b/pallets/runtime/testnet/Cargo.toml @@ -63,6 +63,7 @@ sp-io = { workspace = true, default-features = false } sp-runtime = { workspace = true, default-features = false } sp-version = { workspace = true, default-features = false } sp-api = { workspace = true, default-features = false } +sp-genesis-builder = { workspace = true, default-features = false } sp-inherents = { workspace = true, default-features = false } sp-offchain = { workspace = true, default-features = false } sp-staking = { workspace = true, default-features = false } @@ -76,7 +77,6 @@ sp-arithmetic = { workspace = true, default-features = false } pallet-authorship = { workspace = true, default-features = false } pallet-contracts = { workspace = true, default-features = false } -#pallet-contracts-primitives = { workspace = true, default-features = false} pallet-election-provider-multi-phase = { workspace = true, default-features = false } pallet-grandpa = { workspace = true, default-features = false } pallet-im-online = { workspace = true, default-features = false } @@ -186,6 +186,7 @@ std = [ "sp-transaction-pool/std", "sp-version/std", "polymesh-contracts/std", + "sp-genesis-builder/std", ] runtime-benchmarks = [ diff --git a/src/chain_spec/ci_runtime.rs b/src/chain_spec/ci_runtime.rs deleted file mode 100644 index d073f81764..0000000000 --- a/src/chain_spec/ci_runtime.rs +++ /dev/null @@ -1,21 +0,0 @@ -use sc_chain_spec::ChainType; -use serde_json::json; - -use crate::chain_spec::common::{polymesh_properties, ChainSpec}; - -pub fn develop_genesis_config() -> serde_json::Value { - unimplemented!() -} - -pub fn develop_chain_spec() -> ChainSpec { - let code = polymesh_runtime_develop::runtime::WASM_BINARY - .expect("Development wasm binary is not available."); - - ChainSpec::builder(code, Default::default()) - .with_name("Polymesh CI Develop") - .with_id("dev_ci") - .with_chain_type(ChainType::Development) - .with_genesis_config_patch(develop_genesis_config()) - .with_properties(polymesh_properties(42)) - .build() -} diff --git a/src/chain_spec/common.rs b/src/chain_spec/common.rs index 1b1bc68f62..a8082ea6ef 100644 --- a/src/chain_spec/common.rs +++ b/src/chain_spec/common.rs @@ -128,9 +128,9 @@ pub(crate) fn asset_genesis_config() -> serde_json::Value { }; serde_json::json!({ - "ticker_registration_config": ticker_reg_config, - "reserved_country_currency_codes": currency_codes(), - "asset_metadata": asset_metadata(), + "tickerRegistrationConfig": ticker_reg_config, + "reservedCountryCurrencyCodes": currency_codes(), + "assetMetadata": asset_metadata(), }) } @@ -141,16 +141,41 @@ pub(crate) fn checkpoint_genesis_config() -> serde_json::Value { }; serde_json::json!({ - "schedules_max_complexity": period.complexity(), + "schedulesMaxComplexity": period.complexity(), + }) +} + +pub(crate) fn validators_genesis_config( + initial_stakers: &[StakersData], + validator_commission_cap: Perbill, +) -> serde_json::Value { + serde_json::json!({ + "validators": initial_stakers.iter().filter_map(|x| { + if let StakerStatus::Validator = x.status { + Some(x.identity_id) + } else { + None + } + }) + .collect::>(), + "validatorCommissionCap": validator_commission_cap, }) } pub(crate) fn staking_genesis_config(initial_stakers: &[StakersData]) -> serde_json::Value { serde_json::json!({ - "validator_count": 40, - "minimum_validator_count": 1, - "stakers": initial_stakers, - "slash_reward_fraction": Perbill::from_percent(10), + "validatorCount": 40, + "minimumValidatorCount": 1, + "stakers": initial_stakers.iter().map(|x| { + ( + x.stash_id.clone(), + x.controller_id.clone(), + x.bonded_amount, + x.status.clone(), + ) + }) + .collect::>(), + "slashRewardFraction": Perbill::from_percent(10), }) } @@ -160,19 +185,19 @@ pub(crate) fn pips_genesis_config( active_pip_limit: u32, ) -> serde_json::Value { serde_json::json!({ - "prune_historical_pips": false, - "min_proposal_deposit": 2_000_000_000, - "default_enactment_period": enactment_period, - "pending_pip_expiry": pending_pip_expiry, - "max_pip_skip_count": 2, - "active_pip_limit": active_pip_limit, + "pruneHistoricalPips": false, + "minProposalDeposit": 2_000_000_000, + "defaultEnactmentPeriod": enactment_period, + "pendingPipExpiry": pending_pip_expiry, + "maxPipSkipCount": 2, + "activePipLimit": active_pip_limit, }) } pub(crate) fn group_genesis_config(active_members_ids: Vec) -> serde_json::Value { serde_json::json!({ - "active_members_limit": 20, - "active_members": active_members_ids, + "activeMembersLimit": 20, + "activeMembers": active_members_ids, }) } @@ -181,8 +206,8 @@ pub(crate) fn committee_genesis_config( release_coordinator: IdentityId, ) -> serde_json::Value { serde_json::json!({ - "vote_threshold": vote_threshold, - "release_coordinator": release_coordinator, + "voteThreshold": vote_threshold, + "releaseCoordinator": release_coordinator, }) } @@ -193,14 +218,14 @@ pub(crate) fn protocol_fee_genesis_config() -> serde_json::Value { ]; serde_json::json!({ - "base_fees": protocol_fee, + "baseFees": protocol_fee, "coefficient": PosRatio(1, 1) }) } pub(crate) fn corporate_actions_genesis_config() -> serde_json::Value { serde_json::json!({ - "max_details_length": 1_024, + "maxDetailsLength": 1_024, }) } @@ -208,11 +233,11 @@ pub(crate) fn polymesh_contracts_genesis_config(upgradable_owner: AccountId) -> let upgradable_description: [u8; 4] = "POLY".as_bytes().try_into().unwrap(); serde_json::json!({ - "call_whitelist": contracts_call_whitelist(), - "upgradable_code": upgradable_code(), - "upgradable_description": upgradable_description, - "upgradable_major": 7, - "upgradable_owner": upgradable_owner, + "callWhitelist": contracts_call_whitelist(), + "upgradableCode": upgradable_code(), + "upgradableDescription": upgradable_description, + "upgradableMajor": 7, + "upgradableOwner": upgradable_owner, }) } diff --git a/src/chain_spec/develop_runtime.rs b/src/chain_spec/develop_runtime.rs index cdcb149d5c..dfcdebe3ca 100644 --- a/src/chain_spec/develop_runtime.rs +++ b/src/chain_spec/develop_runtime.rs @@ -1,5 +1,6 @@ use sc_chain_spec::ChainType; use sp_runtime::traits::AccountIdConversion; +use sp_runtime::PerThing; use pallet_staking::StakerStatus; use polymesh_primitives::constants::TREASURY_PALLET_ID; @@ -8,12 +9,13 @@ use polymesh_primitives::{AccountId, Balance, IdentityId, MaybeBlock, SecondaryK use polymesh_runtime_develop::constants::time::MINUTES; use polymesh_runtime_develop::runtime::{SessionKeys, BABE_GENESIS_EPOCH_CONFIG}; -use crate::chain_spec::common::{asset_genesis_config, protocol_fee_genesis_config}; +use crate::chain_spec::common::asset_genesis_config; use crate::chain_spec::common::{checkpoint_genesis_config, committee_genesis_config}; use crate::chain_spec::common::{corporate_actions_genesis_config, staking_genesis_config}; use crate::chain_spec::common::{get_authority_keys_from_seed, pips_genesis_config}; use crate::chain_spec::common::{group_genesis_config, polymesh_properties}; use crate::chain_spec::common::{polymesh_contracts_genesis_config, seeded_acc_id}; +use crate::chain_spec::common::{protocol_fee_genesis_config, validators_genesis_config}; use crate::chain_spec::common::{ChainSpec, DEV_KEYS, DEV_TREASURY, INITIAL_BOND}; use crate::chain_spec::common::{ChainSpecMode, GenesisData, InitialAuth, StakersData}; @@ -105,21 +107,22 @@ fn develop_genesis_config( "session": { "keys": session_keys, }, + "validators": validators_genesis_config(&genesis_data.stakers_data, PerThing::from_rational(1u64, 4u64)), "staking": staking_genesis_config(&genesis_data.stakers_data), "pips": pips_genesis_config(MINUTES, MaybeBlock::None, 25), "babe": { - "epoch_config": Some(BABE_GENESIS_EPOCH_CONFIG), + "epochConfig": Some(BABE_GENESIS_EPOCH_CONFIG), }, - "committee_membership": group_genesis_config, - "polymesh_committee": committee_genesis_config, - "cdd_service_providers": group_genesis_config, - "technical_committee_membership": group_genesis_config, - "technical_committee": committee_genesis_config, - "upgrade_committee_membership": group_genesis_config, - "upgrade_committee": committee_genesis_config, - "protocol_fee": protocol_fee_genesis_config(), - "corporate_action": corporate_actions_genesis_config(), - "polymesh_contracts": polymesh_contracts_genesis_config(root_key), + "committeeMembership": group_genesis_config, + "polymeshCommittee": committee_genesis_config, + "cddServiceProviders": group_genesis_config, + "technicalCommitteeMembership": group_genesis_config, + "technicalCommittee": committee_genesis_config, + "upgradeCommitteeMembership": group_genesis_config, + "upgradeCommittee": committee_genesis_config, + "protocolFee": protocol_fee_genesis_config(), + "corporateAction": corporate_actions_genesis_config(), + "polymeshContracts": polymesh_contracts_genesis_config(root_key), }) } diff --git a/src/chain_spec/mainnet_runtime.rs b/src/chain_spec/mainnet_runtime.rs index 8ac465fbb0..331b99e158 100644 --- a/src/chain_spec/mainnet_runtime.rs +++ b/src/chain_spec/mainnet_runtime.rs @@ -3,6 +3,7 @@ use sc_chain_spec::ChainType; use sc_network::config::MultiaddrWithPeerId; use sc_telemetry::TelemetryEndpoints; use sp_runtime::traits::AccountIdConversion; +use sp_runtime::PerThing; use polymesh_primitives::constants::TREASURY_PALLET_ID; use polymesh_primitives::identity_id::GenesisIdentityRecord; @@ -11,12 +12,13 @@ use polymesh_primitives::{Balance, IdentityId, SystematicIssuers}; use polymesh_runtime_mainnet::constants::time::DAYS; use polymesh_runtime_mainnet::runtime::{SessionKeys, BABE_GENESIS_EPOCH_CONFIG}; +use crate::chain_spec::common::asset_genesis_config; use crate::chain_spec::common::{adjust_last, get_authority_keys_from_seed}; -use crate::chain_spec::common::{asset_genesis_config, protocol_fee_genesis_config}; use crate::chain_spec::common::{checkpoint_genesis_config, committee_genesis_config}; use crate::chain_spec::common::{corporate_actions_genesis_config, staking_genesis_config}; use crate::chain_spec::common::{group_genesis_config, polymesh_properties, seeded_acc_id}; use crate::chain_spec::common::{pips_genesis_config, polymesh_contracts_genesis_config}; +use crate::chain_spec::common::{protocol_fee_genesis_config, validators_genesis_config}; use crate::chain_spec::common::{ChainSpec, ChainSpecMode}; use crate::chain_spec::common::{GenesisData, InitialAuth, StakersData}; use crate::chain_spec::common::{BOOTSTRAP_KEYS, BOOTSTRAP_TREASURY}; @@ -118,25 +120,26 @@ fn mainnet_genesis_config( "session": { "keys": session_keys, }, + "validators": validators_genesis_config(&genesis_data.stakers_data, PerThing::from_rational(1u64, 4u64)), "staking": staking_genesis_config(&genesis_data.stakers_data), "pips": pips_genesis_config(DAYS * 30, MaybeBlock::Some(DAYS * 90), 1_000), "babe": { "epoch_config": Some(BABE_GENESIS_EPOCH_CONFIG), }, // Governing council - "committee_membership": group_genesis_config(vec![identity_1, identity_2, identity_3]), // three GC members + "committeeMembership": group_genesis_config(vec![identity_1, identity_2, identity_3]), // three GC members "polymesh_committee": committee_genesis_config((2, 3), identity_1), // RC = 1, 2/3 votes required // CDD providers - "cdd_service_providers": group_genesis_config(vec![identity_1]), // GC_1 is also a CDD provider + "cddServiceProviders": group_genesis_config(vec![identity_1]), // GC_1 is also a CDD provider // Technical Committee - "technical_committee_membership": group_genesis_config(vec![identity_1]), // One GC member - "technical_committee": committee_genesis_config((1, 2), identity_1), // 1/2 votes required + "technicalCommitteeMembership": group_genesis_config(vec![identity_1]), // One GC member + "technicalCommittee": committee_genesis_config((1, 2), identity_1), // 1/2 votes required // Upgrade Committee - "upgrade_committee_membership": group_genesis_config(vec![identity_1]), // One GC member - "upgrade_committee": committee_genesis_config((1, 2), identity_1), // 1/2 votes required - "protocol_fee": protocol_fee_genesis_config(), - "corporate_action": corporate_actions_genesis_config(), - "polymesh_contracts": polymesh_contracts_genesis_config(root_key), + "upgradeCommitteeMembership": group_genesis_config(vec![identity_1]), // One GC member + "upgradeCommittee": committee_genesis_config((1, 2), identity_1), // 1/2 votes required + "protocolFee": protocol_fee_genesis_config(), + "corporateAction": corporate_actions_genesis_config(), + "polymeshContracts": polymesh_contracts_genesis_config(root_key), }) } diff --git a/src/chain_spec/mod.rs b/src/chain_spec/mod.rs index 6f1278053c..32864bc7af 100644 --- a/src/chain_spec/mod.rs +++ b/src/chain_spec/mod.rs @@ -1,4 +1,3 @@ -//mod ci_runtime; pub(crate) mod common; pub(crate) mod develop_runtime; pub(crate) mod mainnet_runtime; diff --git a/src/chain_spec/testnet_runtime.rs b/src/chain_spec/testnet_runtime.rs index 96312dd5d8..3858ccae89 100644 --- a/src/chain_spec/testnet_runtime.rs +++ b/src/chain_spec/testnet_runtime.rs @@ -1,17 +1,18 @@ use sc_chain_spec::ChainType; use sc_network::config::MultiaddrWithPeerId; use sc_telemetry::TelemetryEndpoints; +use sp_runtime::PerThing; use polymesh_primitives::{AccountId, IdentityId, MaybeBlock}; use polymesh_runtime_testnet::constants::time::DAYS; use polymesh_runtime_testnet::runtime::{SessionKeys, BABE_GENESIS_EPOCH_CONFIG}; -use crate::chain_spec::common::group_genesis_config; -use crate::chain_spec::common::{asset_genesis_config, protocol_fee_genesis_config}; +use crate::chain_spec::common::{asset_genesis_config, group_genesis_config}; use crate::chain_spec::common::{checkpoint_genesis_config, committee_genesis_config}; use crate::chain_spec::common::{corporate_actions_genesis_config, staking_genesis_config}; use crate::chain_spec::common::{get_authority_keys_from_seed, polymesh_properties, seeded_acc_id}; use crate::chain_spec::common::{pips_genesis_config, polymesh_contracts_genesis_config}; +use crate::chain_spec::common::{protocol_fee_genesis_config, validators_genesis_config}; use crate::chain_spec::common::{ChainSpec, ChainSpecMode, InitialAuth, STAGING_TELEMETRY_URL}; pub fn testnet_chain_spec(chain_spec_mode: ChainSpecMode) -> ChainSpec { @@ -110,25 +111,26 @@ fn testnet_genesis_config( "session": { "keys": session_keys, }, + "validators": validators_genesis_config(&genesis_data.stakers_data, PerThing::from_rational(1u64, 4u64)), "staking": staking_genesis_config(&genesis_data.stakers_data), "pips": pips_genesis_config(DAYS * 30, MaybeBlock::None, 1_000), "babe": { "epoch_config": Some(BABE_GENESIS_EPOCH_CONFIG), }, // Governing council - "committee_membership": group_genesis_config(vec![identity_1, identity_2, identity_3]), // three GC members - "polymesh_committee": committee_genesis_config((2, 3), identity_1), // RC = 1, 2/3 votes required + "committeeMembership": group_genesis_config(vec![identity_1, identity_2, identity_3]), // three GC members + "polymeshCommittee": committee_genesis_config((2, 3), identity_1), // RC = 1, 2/3 votes required // CDD providers - "cdd_service_providers": group_genesis_config(vec![identity_1]), + "cddServiceProviders": group_genesis_config(vec![identity_1]), // Technical Committee - "technical_committee_membership": group_genesis_config(vec![identity_3, identity_4, identity_5]), // One GC member + genesis operator + Bridge Multisig - "technical_committee": committee_genesis_config((1, 2), identity_3), // RC = 3, 1/2 votes required + "technicalCommitteeMembership": group_genesis_config(vec![identity_3, identity_4, identity_5]), // One GC member + genesis operator + Bridge Multisig + "technicalCommittee": committee_genesis_config((1, 2), identity_3), // RC = 3, 1/2 votes required // Upgrade Committee - "upgrade_committee_membership": group_genesis_config(vec![identity_1]), // One GC member - "upgrade_committee": committee_genesis_config((1, 2), identity_1), // 1/2 votes required - "protocol_fee": protocol_fee_genesis_config(), - "corporate_action": corporate_actions_genesis_config(), - "polymesh_contracts": polymesh_contracts_genesis_config(root_key), + "upgradeCommitteeMembership": group_genesis_config(vec![identity_1]), // One GC member + "upgradeCommittee": committee_genesis_config((1, 2), identity_1), // 1/2 votes required + "protocolFee": protocol_fee_genesis_config(), + "corporateAction": corporate_actions_genesis_config(), + "polymeshContracts": polymesh_contracts_genesis_config(root_key), }) } From 00dc86610a56033beaac9912576db508b114a79e Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Thu, 4 Sep 2025 09:27:39 -0300 Subject: [PATCH 68/97] Remove duplicated chainspec merge; Update toml; Cargo fmt --- Cargo.lock | 243 +++++++++++++++++++------------------------- node-rpc/src/lib.rs | 83 ++++++++------- src/service.rs | 8 +- 3 files changed, 152 insertions(+), 182 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c93f07dca8..3f5b67151d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -620,9 +620,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" dependencies = [ "async-task", "concurrent-queue", @@ -961,9 +961,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.3" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" [[package]] name = "bitvec" @@ -1174,9 +1174,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.11" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0" +checksum = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5" dependencies = [ "serde", ] @@ -1206,10 +1206,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.34" +version = "1.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" +checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -1363,9 +1364,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.46" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57" +checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" dependencies = [ "clap_builder", "clap_derive", @@ -1373,9 +1374,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.46" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41" +checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" dependencies = [ "anstream", "anstyle", @@ -1386,9 +1387,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.45" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" +checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -1442,9 +1443,9 @@ dependencies = [ [[package]] name = "comfy-table" -version = "7.1.4" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" +checksum = "3f8e18d0dca9578507f13f9803add0df13362b02c501c1c17734f0dbb52eaf0b" dependencies = [ "unicode-segmentation", "unicode-width", @@ -1948,9 +1949,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.169" +version = "1.0.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df881e2764e20d320c9c8ddd8670018b1abaa2557e73811f03d5b2643da671d7" +checksum = "84aa1f8258b77022835f4ce5bd3b5aa418b969494bd7c3cb142c88424eb4c715" dependencies = [ "cc", "cxxbridge-cmd", @@ -1962,9 +1963,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.169" +version = "1.0.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acef58f684c0c9b7bffc111657c9f1364e4fa47af46fd7f03b71b7a4066ac372" +checksum = "d4e2aa0ea9f398b72f329197cfad624fcb16b2538d3ffb0f71f51cd19fa2a512" dependencies = [ "cc", "codespan-reporting", @@ -1977,9 +1978,9 @@ dependencies = [ [[package]] name = "cxxbridge-cmd" -version = "1.0.169" +version = "1.0.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "669616995d33251cb7215f96820d78a810ee218573246830fb96f29961e1712a" +checksum = "902e9553c7db1cc00baee88d6a531792d3e1aaab06ed6d1dcd606647891ea693" dependencies = [ "clap", "codespan-reporting", @@ -1991,15 +1992,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.169" +version = "1.0.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aebcb754a24722d34e7f4e021376862179194cc5ec83ded2dd84b9db36be106" +checksum = "35b2b0b4d405850b0048447786b70c2502c84e4d5c4c757416abc0500336edfc" [[package]] name = "cxxbridge-macro" -version = "1.0.169" +version = "1.0.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea9594efbebf2f822925b6368eea741dd2677bb411313e50c2de8ba8c3d3a62" +checksum = "fd2a8fe0dfa4a2207b80ca9492c0d5dc8752b66f5631d93b23065f40f6a943d3" dependencies = [ "indexmap 2.11.0", "proc-macro2", @@ -2123,9 +2124,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", ] @@ -2707,6 +2708,12 @@ dependencies = [ "scale-info", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650" + [[package]] name = "fixed-hash" version = "0.8.0" @@ -3328,7 +3335,7 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.3+wasi-0.2.4", "wasm-bindgen", ] @@ -4236,7 +4243,7 @@ version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "cfg-if", "libc", ] @@ -5075,7 +5082,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "libc", "redox_syscall 0.5.17", ] @@ -5156,9 +5163,9 @@ dependencies = [ [[package]] name = "link-cplusplus" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6f6da007f968f9def0d65a05b187e2960183de70c160204ecfccf0ee330212" +checksum = "8c349c75e1ab4a03bd6b33fe6cbd3c479c5dd443e44ad732664d72cb0e755475" dependencies = [ "cc", ] @@ -5193,12 +5200,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - [[package]] name = "linux-raw-sys" version = "0.9.4" @@ -5282,9 +5283,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "loom" @@ -5359,11 +5360,11 @@ checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -5390,11 +5391,11 @@ checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memfd" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" dependencies = [ - "rustix 0.38.44", + "rustix 1.0.8", ] [[package]] @@ -5844,12 +5845,11 @@ checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "overload", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -6050,12 +6050,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "pallet-asset" version = "0.1.0" @@ -8042,9 +8036,9 @@ checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -8387,9 +8381,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases 0.2.1", @@ -8399,7 +8393,7 @@ dependencies = [ "quinn-udp", "rustc-hash 2.1.1", "rustls", - "socket2 0.5.10", + "socket2 0.6.0", "thiserror 2.0.16", "tokio", "tracing", @@ -8408,9 +8402,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.12" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", "getrandom 0.3.3", @@ -8429,16 +8423,16 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases 0.2.1", "libc", "once_cell", - "socket2 0.5.10", + "socket2 0.6.0", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -8587,7 +8581,7 @@ version = "11.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", ] [[package]] @@ -8643,7 +8637,7 @@ version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", ] [[package]] @@ -8710,17 +8704,8 @@ checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.10", - "regex-syntax 0.8.6", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] @@ -8731,15 +8716,9 @@ checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.6", + "regex-syntax", ] -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - [[package]] name = "regex-syntax" version = "0.8.6" @@ -8920,26 +8899,13 @@ dependencies = [ "windows-sys 0.45.0", ] -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.9.3", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] - [[package]] name = "rustix" version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.9.4", @@ -9075,9 +9041,9 @@ dependencies = [ [[package]] name = "safe_arch" -version = "0.9.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb5032219cc30e5bb98749b19a18ceb2cf15e24ba8d517a7e64dff4f1f1eca5" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" dependencies = [ "bytemuck", ] @@ -10483,7 +10449,7 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -10684,7 +10650,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dee851d0e5e7af3721faea1843e8015e820a234f81fda3dea9247e15bac9a86a" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", ] [[package]] @@ -12104,7 +12070,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -12262,9 +12228,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" dependencies = [ "deranged", "itoa", @@ -12276,15 +12242,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -12478,7 +12444,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "bytes", "http 1.3.1", "http-body 1.0.1", @@ -12579,15 +12545,15 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", "parking_lot 0.12.4", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -12807,9 +12773,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ "getrandom 0.3.3", "js-sys", @@ -12941,11 +12907,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.3+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] @@ -13030,12 +12996,12 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.237.0" +version = "0.238.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efe92d1321afa53ffc88a57c497bb7330c3cf84c98ffdba4a4caf6a0684fad3c" +checksum = "d50d48c31c615f77679b61c607b8151378a5d03159616bf3d17e8e2005afdaf5" dependencies = [ "leb128fmt", - "wasmparser 0.237.0", + "wasmparser 0.238.1", ] [[package]] @@ -13163,11 +13129,11 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.237.0" +version = "0.238.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d2a40ca0d2bdf4b0bf36c13a737d0b2c58e4c8aaefe1c57f336dd75369ca250" +checksum = "3fa99c8328024423875ae4a55345cfde8f0371327fb2d0f33b0f52a06fc44408" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "indexmap 2.11.0", "semver 1.0.26", ] @@ -13378,9 +13344,9 @@ dependencies = [ [[package]] name = "wast" -version = "237.0.0" +version = "238.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf66f545acbd55082485cb9a6daab54579cb8628a027162253e8e9f5963c767" +checksum = "b0a564e7eab2abb8920c1302b90eb2c98a15efbbe30fc060d4e2d88483aa23fe" dependencies = [ "bumpalo", "leb128fmt", @@ -13391,9 +13357,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.237.0" +version = "1.238.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27975186f549e4b8d6878b627be732863883c72f7bf4dcf8f96e5f8242f73da9" +checksum = "0eb84e6ac2997025f80482266fdc9f60fa28ba791b674bfd33855e77fe867631" dependencies = [ "wast", ] @@ -13444,9 +13410,9 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "wide" -version = "0.7.34" +version = "0.7.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a0ab08c041f0cbb00a12fd091b2877dcec2311f90f87a88391d4b0961ffb4fe" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" dependencies = [ "bytemuck", "safe_arch", @@ -13937,13 +13903,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.3", -] +checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" [[package]] name = "writeable" diff --git a/node-rpc/src/lib.rs b/node-rpc/src/lib.rs index b9dd5e6705..fabbf814e0 100644 --- a/node-rpc/src/lib.rs +++ b/node-rpc/src/lib.rs @@ -90,7 +90,15 @@ pub struct FullDeps { /// Instantiate all Full RPC extensions. pub fn create_full( - full_client_deps: FullDeps, + FullDeps { + client, + pool, + select_chain, + chain_spec, + babe, + grandpa, + .. + }: FullDeps, ) -> Result, Box> where C: ProvideRuntimeApi @@ -130,65 +138,64 @@ where use sc_consensus_babe_rpc::{Babe, BabeApiServer}; use sc_consensus_grandpa_rpc::{Grandpa, GrandpaApiServer}; use sc_rpc::dev::{Dev, DevApiServer}; - use sc_rpc_spec_v2::chain_spec::{ChainSpec, ChainSpecApiServer}; use sc_sync_state_rpc::{SyncState, SyncStateApiServer}; use substrate_frame_rpc_system::{System, SystemApiServer}; let mut io = RpcModule::new(()); - let chain_name = full_client_deps.chain_spec.name().to_string(); - let genesis_hash = full_client_deps - .client - .block_hash(0) - .ok() - .flatten() - .expect("Genesis block exists; qed"); - let properties = full_client_deps.chain_spec.properties(); - io.merge(ChainSpec::new(chain_name, genesis_hash, properties).into_rpc())?; - - io.merge(System::new(full_client_deps.client.clone(), full_client_deps.pool).into_rpc())?; - - io.merge(TransactionPayment::new(full_client_deps.client.clone()).into_rpc())?; - + let BabeDeps { + keystore, + babe_worker_handle, + } = babe; + let GrandpaDeps { + shared_voter_state, + shared_authority_set, + justification_stream, + subscription_executor, + finality_provider, + } = grandpa; + + io.merge(System::new(client.clone(), pool).into_rpc())?; + io.merge(TransactionPayment::new(client.clone()).into_rpc())?; io.merge( Babe::new( - full_client_deps.client.clone(), - full_client_deps.babe.babe_worker_handle.clone(), - full_client_deps.babe.keystore, - full_client_deps.select_chain, + client.clone(), + babe_worker_handle.clone(), + keystore, + select_chain, ) .into_rpc(), )?; - io.merge( Grandpa::new( - full_client_deps.grandpa.subscription_executor, - full_client_deps.grandpa.shared_authority_set.clone(), - full_client_deps.grandpa.shared_voter_state, - full_client_deps.grandpa.justification_stream, - full_client_deps.grandpa.finality_provider, + subscription_executor, + shared_authority_set.clone(), + shared_voter_state, + justification_stream, + finality_provider, ) .into_rpc(), )?; io.merge( SyncState::new( - full_client_deps.chain_spec, - full_client_deps.client.clone(), - full_client_deps.grandpa.shared_authority_set.clone(), - full_client_deps.babe.babe_worker_handle.clone(), + chain_spec, + client.clone(), + shared_authority_set, + babe_worker_handle, )? .into_rpc(), )?; - io.merge(Dev::new(full_client_deps.client.clone()).into_rpc())?; - io.merge(Pips::new(full_client_deps.client.clone()).into_rpc())?; - io.merge(Identity::new(full_client_deps.client.clone()).into_rpc())?; - io.merge(ProtocolFee::new(full_client_deps.client.clone()).into_rpc())?; - io.merge(Asset::new(full_client_deps.client.clone()).into_rpc())?; - io.merge(Group::from(full_client_deps.client.clone()).into_rpc())?; - io.merge(NFT::new(full_client_deps.client.clone()).into_rpc())?; - io.merge(Settlement::new(full_client_deps.client.clone()).into_rpc())?; + io.merge(Dev::new(client.clone()).into_rpc())?; + + io.merge(Pips::new(client.clone()).into_rpc())?; + io.merge(Identity::new(client.clone()).into_rpc())?; + io.merge(ProtocolFee::new(client.clone()).into_rpc())?; + io.merge(Asset::new(client.clone()).into_rpc())?; + io.merge(Group::from(client.clone()).into_rpc())?; + io.merge(NFT::new(client.clone()).into_rpc())?; + io.merge(Settlement::new(client).into_rpc())?; Ok(io) } diff --git a/src/service.rs b/src/service.rs index d40ce4feed..d224e8e385 100644 --- a/src/service.rs +++ b/src/service.rs @@ -451,10 +451,10 @@ where let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); let slot = - sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - *timestamp, - slot_duration, - ); + sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration( + *timestamp, + slot_duration, + ); let storage_proof = sp_transaction_storage_proof::registration::new_data_provider( From 39e7e40c2b1fc848098e9690fd6abbbd3243b48a Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Thu, 4 Sep 2025 10:10:52 -0300 Subject: [PATCH 69/97] Update rust version --- .circleci/config.yml | 24 ++++++++++++------------ integration/rust-toolchain.toml | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7578ef2e57..dbaff9dfd0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -39,7 +39,7 @@ commands: jobs: lint: docker: - - image: polymeshassociation/rust:debian-nightly-2024-11-14 + - image: polymeshassociation/rust:debian-nightly-2025-07-16 resource_class: small environment: VERBOSE: "1" @@ -53,7 +53,7 @@ jobs: command: ./scripts/check_spec_and_cargo_version.sh check-storage-version: docker: - - image: polymeshassociation/rust:debian-nightly-2024-11-14 + - image: polymeshassociation/rust:debian-nightly-2025-07-16 resource_class: small environment: VERBOSE: "1" @@ -64,7 +64,7 @@ jobs: command: ./scripts/check_storage_versions.sh build: docker: - - image: polymeshassociation/rust:debian-nightly-2024-11-14 + - image: polymeshassociation/rust:debian-nightly-2025-07-16 resource_class: xlarge environment: - VERBOSE: "1" @@ -95,7 +95,7 @@ jobs: - save-sccache-cache build-ci: docker: - - image: polymeshassociation/rust:debian-nightly-2024-11-14 + - image: polymeshassociation/rust:debian-nightly-2025-07-16 resource_class: xlarge environment: - VERBOSE: "1" @@ -124,7 +124,7 @@ jobs: - . build-arm64: docker: - - image: polymeshassociation/rust-arm64:debian-nightly-2024-11-14 + - image: polymeshassociation/rust-arm64:debian-nightly-2025-07-16 resource_class: arm.xlarge environment: - VERBOSE: "1" @@ -151,7 +151,7 @@ jobs: - save-sccache-cache benchmark-build: docker: - - image: polymeshassociation/rust:debian-nightly-2024-11-14 + - image: polymeshassociation/rust:debian-nightly-2025-07-16 resource_class: xlarge environment: - VERBOSE: "1" @@ -273,7 +273,7 @@ jobs: metadata-tools-build: docker: - - image: polymeshassociation/rust:debian-nightly-2024-11-14 + - image: polymeshassociation/rust:debian-nightly-2025-07-16 resource_class: small steps: - checkout @@ -386,7 +386,7 @@ jobs: no_output_timeout: 30m migration-tests: docker: - - image: polymeshassociation/rust:debian-nightly-2024-11-14 + - image: polymeshassociation/rust:debian-nightly-2025-07-16 resource_class: large environment: - VERBOSE: "1" @@ -403,7 +403,7 @@ jobs: - save-sccache-cache test: docker: - - image: polymeshassociation/rust:debian-nightly-2024-11-14 + - image: polymeshassociation/rust:debian-nightly-2025-07-16 resource_class: large environment: - VERBOSE: "1" @@ -432,7 +432,7 @@ jobs: - save-sccache-cache coverage: docker: - - image: polymeshassociation/rust:debian-nightly-2024-11-14 + - image: polymeshassociation/rust:debian-nightly-2025-07-16 resource_class: xlarge environment: - VERBOSE: "1" @@ -447,7 +447,7 @@ jobs: - save-sccache-cache rust-integration-test: docker: - - image: polymeshassociation/rust:debian-nightly-2024-11-14 + - image: polymeshassociation/rust:debian-nightly-2025-07-16 resource_class: xlarge environment: - VERBOSE: "1" @@ -518,7 +518,7 @@ jobs: no_output_timeout: 10m clippy: docker: - - image: polymeshassociation/rust:debian-nightly-2024-11-14 + - image: polymeshassociation/rust:debian-nightly-2025-07-16 resource_class: xlarge environment: - VERBOSE: "1" diff --git a/integration/rust-toolchain.toml b/integration/rust-toolchain.toml index 4962bfc2f0..7322ebbc59 100644 --- a/integration/rust-toolchain.toml +++ b/integration/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "nightly-2024-11-14" +channel = "nightly-2025-07-16" components = [ "rustfmt" ] profile = "minimal" From 774b4e79cc9e0a64a28da278161cf21510a801c0 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Thu, 4 Sep 2025 15:00:58 -0300 Subject: [PATCH 70/97] Add ci_runtime --- src/chain_spec/ci_runtime.rs | 119 ++++++++++++++++++++++++++++++ src/chain_spec/develop_runtime.rs | 4 +- src/chain_spec/mod.rs | 1 + src/command.rs | 17 ++++- 4 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 src/chain_spec/ci_runtime.rs diff --git a/src/chain_spec/ci_runtime.rs b/src/chain_spec/ci_runtime.rs new file mode 100644 index 0000000000..26a2a1058a --- /dev/null +++ b/src/chain_spec/ci_runtime.rs @@ -0,0 +1,119 @@ +use sc_chain_spec::ChainType; +use sp_runtime::PerThing; + +use polymesh_primitives::{AccountId, IdentityId, MaybeBlock}; +use polymesh_runtime_develop::constants::time::DAYS; +use polymesh_runtime_develop::runtime::{BABE_GENESIS_EPOCH_CONFIG}; + +use crate::chain_spec::common::asset_genesis_config; +use crate::chain_spec::common::{checkpoint_genesis_config, committee_genesis_config}; +use crate::chain_spec::common::{corporate_actions_genesis_config, staking_genesis_config}; +use crate::chain_spec::common::{get_authority_keys_from_seed, pips_genesis_config}; +use crate::chain_spec::common::{group_genesis_config, polymesh_properties}; +use crate::chain_spec::common::{polymesh_contracts_genesis_config, seeded_acc_id}; +use crate::chain_spec::common::{protocol_fee_genesis_config, validators_genesis_config}; +use crate::chain_spec::common::{ChainSpec}; +use crate::chain_spec::common::{ChainSpecMode, InitialAuth}; + +pub(crate) fn ci_chain_spec(chain_spec_mode: ChainSpecMode) -> ChainSpec { + let code = polymesh_runtime_develop::runtime::WASM_BINARY + .expect("Development wasm binary is not available."); + + match chain_spec_mode { + ChainSpecMode::Bootstrap => unimplemented!(), + ChainSpecMode::Development => dev_chain_spec(code), + ChainSpecMode::Local => local_chain_spec(code), + } +} + +/// Returns [`ChainSpec`] for creating a development chain. +fn dev_chain_spec(code: &[u8]) -> ChainSpec { + let initial_authorities = vec![get_authority_keys_from_seed("Bob", false)]; + + let root_key = seeded_acc_id("Alice"); + + let genesis_json_config = ci_genesis_config(initial_authorities, root_key); + + ChainSpec::builder(code, Default::default()) + .with_name("Polymesh CI Develop") + .with_id("dev_ci") + .with_chain_type(ChainType::Development) + .with_properties(polymesh_properties(42)) + .with_genesis_config_patch(genesis_json_config) + .build() +} + +/// Returns [`ChainSpec`] for creating a local development chain. +fn local_chain_spec(code: &[u8]) -> ChainSpec { + let initial_authorities = vec![ + get_authority_keys_from_seed("Alice", false), + get_authority_keys_from_seed("Bob", false), + get_authority_keys_from_seed("Charlie", false), + ]; + + let root_key = seeded_acc_id("Alice"); + + let genesis_json_config = ci_genesis_config(initial_authorities, root_key); + + ChainSpec::builder(code, Default::default()) + .with_name("Polymesh CI Local") + .with_id("local_ci") + .with_chain_type(ChainType::Local) + .with_properties(polymesh_properties(42)) + .with_genesis_config_patch(genesis_json_config) + .build() +} + +fn ci_genesis_config( + initial_authorities: Vec, + root_key: AccountId, +) -> serde_json::Value { + let genesis_data = + crate::chain_spec::mainnet_runtime::genesis_data(&initial_authorities, root_key.clone()); + + let session_keys = crate::chain_spec::develop_runtime::session_keys(&initial_authorities); + + let (identity_1, identity_2, identity_3, identity_5) = ( + IdentityId::from(1), + IdentityId::from(2), + IdentityId::from(3), + IdentityId::from(5), + ); + + serde_json::json!({ + "asset": asset_genesis_config(), + "checkpoint": checkpoint_genesis_config(), + "identity": { + "identities": genesis_data.identities_record, + }, + "balances": { + "balances": genesis_data.identities_balance, + }, + "sudo": { + "key": Some(root_key.clone()), + }, + "session": { + "keys": session_keys, + }, + "validators": validators_genesis_config(&genesis_data.stakers_data, PerThing::zero()), + "staking": staking_genesis_config(&genesis_data.stakers_data), + "pips": pips_genesis_config(DAYS * 7, MaybeBlock::None, 1_000), + "babe": { + "epochConfig": Some(BABE_GENESIS_EPOCH_CONFIG), + }, + // Governing council + "committeeMembership": group_genesis_config(vec![identity_1, identity_2, identity_3, identity_5]), + "polymeshCommittee": committee_genesis_config((2, 4), identity_1), + // CDD providers + "cddServiceProviders": group_genesis_config(vec![identity_1, identity_2, identity_3, identity_5]), + // Technical Committee + "technicalCommitteeMembership": group_genesis_config(vec![identity_3, identity_5]), + "technicalCommittee": committee_genesis_config((1, 2), identity_5), + // Upgrade Committee + "upgradeCommitteeMembership": group_genesis_config(vec![identity_1, identity_5]), + "upgradeCommittee": committee_genesis_config((1, 2), identity_5), + "protocolFee": protocol_fee_genesis_config(), + "corporateAction": corporate_actions_genesis_config(), + "polymeshContracts": polymesh_contracts_genesis_config(root_key), + }) +} diff --git a/src/chain_spec/develop_runtime.rs b/src/chain_spec/develop_runtime.rs index dfcdebe3ca..ce6c2ed67c 100644 --- a/src/chain_spec/develop_runtime.rs +++ b/src/chain_spec/develop_runtime.rs @@ -186,7 +186,9 @@ fn add_secondary_key( } /// Returns the initial list of validator at genesis representing by their `(AccountId, ValidatorId, Keys)`. -fn session_keys(init_authorities: &[InitialAuth]) -> Vec<(AccountId, AccountId, SessionKeys)> { +pub(crate) fn session_keys( + init_authorities: &[InitialAuth], +) -> Vec<(AccountId, AccountId, SessionKeys)> { let mut initial_session_keys = Vec::new(); for initial_auth in init_authorities { diff --git a/src/chain_spec/mod.rs b/src/chain_spec/mod.rs index 32864bc7af..63dd8b26bd 100644 --- a/src/chain_spec/mod.rs +++ b/src/chain_spec/mod.rs @@ -1,3 +1,4 @@ +pub(crate) mod ci_runtime; pub(crate) mod common; pub(crate) mod develop_runtime; pub(crate) mod mainnet_runtime; diff --git a/src/command.rs b/src/command.rs index 773f65ab9c..630237c68b 100644 --- a/src/command.rs +++ b/src/command.rs @@ -29,6 +29,7 @@ use sp_runtime::traits::HashingFor; use polymesh_primitives::Block; use crate::benchmarking::{inherent_benchmark_data, RemarkBuilder, TransferBuilder}; +use crate::chain_spec::ci_runtime::ci_chain_spec; use crate::chain_spec::common::{ChainSpec as GenericChainSpec, ChainSpecMode}; use crate::chain_spec::develop_runtime::develop_chain_spec; use crate::chain_spec::mainnet_runtime::mainnet_chain_spec; @@ -69,8 +70,20 @@ impl SubstrateCli for Cli { fn load_spec(&self, id: &str) -> std::result::Result, String> { Ok(match id { - "dev" => Box::new(develop_chain_spec(ChainSpecMode::Development)), - "local" => Box::new(develop_chain_spec(ChainSpecMode::Local)), + "dev" => { + if cfg!(feature = "ci-runtime") { + Box::new(ci_chain_spec(ChainSpecMode::Development)) + } else { + Box::new(develop_chain_spec(ChainSpecMode::Development)) + } + } + "local" => { + if cfg!(feature = "ci-runtime") { + Box::new(ci_chain_spec(ChainSpecMode::Local)) + } else { + Box::new(develop_chain_spec(ChainSpecMode::Local)) + } + } "testnet-dev" => Box::new(testnet_chain_spec(ChainSpecMode::Development)), "testnet-local" => Box::new(testnet_chain_spec(ChainSpecMode::Local)), "testnet-bootstrap" => Box::new(testnet_chain_spec(ChainSpecMode::Bootstrap)), From 5aaf419e3ee1f5b210a74fe5f66a83956be42108 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 5 Sep 2025 10:43:43 -0300 Subject: [PATCH 71/97] Fix sudo mock --- pallets/sudo/Cargo.toml | 1 + pallets/sudo/src/mock.rs | 61 ++++++++++++++++----------------------- pallets/sudo/src/tests.rs | 40 +++++++++---------------- 3 files changed, 39 insertions(+), 63 deletions(-) diff --git a/pallets/sudo/Cargo.toml b/pallets/sudo/Cargo.toml index e7193007f3..49d5265396 100644 --- a/pallets/sudo/Cargo.toml +++ b/pallets/sudo/Cargo.toml @@ -38,3 +38,4 @@ std = [ "sp-std/std", ] try-runtime = ["frame-support/try-runtime"] +runtime-benchmarks = [] diff --git a/pallets/sudo/src/mock.rs b/pallets/sudo/src/mock.rs index 150226e212..359dd32c71 100644 --- a/pallets/sudo/src/mock.rs +++ b/pallets/sudo/src/mock.rs @@ -17,15 +17,12 @@ //! Test utilities +use frame_support::{derive_impl, traits::Contains}; +use sp_io; +use sp_runtime::BuildStorage; + use super::*; use crate as sudo; -use frame_support::traits::{ConstU32, ConstU64, Contains}; -use sp_core::H256; -use sp_io; -use sp_runtime::{ - traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, -}; // Logger module to track execution. #[frame_support::pallet] @@ -39,7 +36,7 @@ pub mod logger { } #[pallet::pallet] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::call] impl Pallet { @@ -92,21 +89,23 @@ pub mod logger { } #[pallet::storage] - pub type AccountLog = + #[pallet::getter(fn account_log)] + pub(crate) type AccountLog = StorageValue<_, BoundedVec>, ValueQuery>; #[pallet::storage] - pub type I32Log = StorageValue<_, BoundedVec>, ValueQuery>; + #[pallet::getter(fn i32_log)] + pub(crate) type I32Log = StorageValue<_, BoundedVec>, ValueQuery>; } type Block = frame_system::mocking::MockBlock; frame_support::construct_runtime!( - pub struct Test + pub enum Test { - System: frame_system::{Pallet, Call, Config, Storage, Event}, - Sudo: sudo::{Pallet, Call, Config, Storage, Event}, - Logger: logger::{Pallet, Call, Storage, Event}, + System: frame_system, + Sudo: sudo, + Logger: logger, } ); @@ -117,30 +116,10 @@ impl Contains for BlockEverything { } } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig)] impl frame_system::Config for Test { type BaseCallFilter = BlockEverything; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Nonce = u64; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = u64; - type Lookup = IdentityLookup; type Block = Block; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = (); - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = (); - type OnSetCode = (); - type MaxConsumers = ConstU32<16>; } // Implement the logger module's `Config` on the Test runtime. @@ -168,5 +147,15 @@ pub fn new_test_ext(root_key: u64) -> sp_io::TestExternalities { } .assimilate_storage(&mut t) .unwrap(); - t.into() + let mut ext: sp_io::TestExternalities = t.into(); + ext.execute_with(|| System::set_block_number(1)); + ext +} + +#[cfg(feature = "runtime-benchmarks")] +pub fn new_bench_ext() -> sp_io::TestExternalities { + frame_system::GenesisConfig::::default() + .build_storage() + .unwrap() + .into() } diff --git a/pallets/sudo/src/tests.rs b/pallets/sudo/src/tests.rs index eb7c986938..a4111ff3b7 100644 --- a/pallets/sudo/src/tests.rs +++ b/pallets/sudo/src/tests.rs @@ -17,22 +17,20 @@ //! Tests for the module. +use super::*; use frame_support::{assert_noop, assert_ok, weights::Weight}; - -use crate::mock::logger::{AccountLog, I32Log}; -use crate::mock::{ - new_test_ext, LoggerCall, RuntimeCall, RuntimeEvent as TestEvent, RuntimeOrigin, Sudo, +use mock::{ + new_test_ext, Logger, LoggerCall, RuntimeCall, RuntimeEvent as TestEvent, RuntimeOrigin, Sudo, SudoCall, System, Test, }; -use crate::*; #[test] fn test_setup_works() { // Environment setup, logger storage, and sudo `key` retrieval should work as expected. new_test_ext(1).execute_with(|| { assert_eq!(Key::::get(), Some(1u64)); - assert!(I32Log::::get().is_empty()); - assert!(AccountLog::::get().is_empty()); + assert!(Logger::i32_log().is_empty()); + assert!(Logger::account_log().is_empty()); }); } @@ -46,7 +44,7 @@ fn sudo_basics() { weight: Weight::from_parts(1_000, 0), })); assert_ok!(Sudo::sudo(RuntimeOrigin::signed(1), call)); - assert_eq!(I32Log::::get(), vec![42i32]); + assert_eq!(Logger::i32_log(), vec![42i32]); // A privileged function should not work when `sudo` is passed a non-root `key` as `origin`. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { @@ -66,9 +64,6 @@ fn sudo_basics() { #[test] fn sudo_emits_events_correctly() { new_test_ext(1).execute_with(|| { - // Set block number to 1 because events are not emitted on block 0. - System::set_block_number(1); - // Should emit event to indicate success when called with the root `key` and `call` is `Ok`. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { i: 42, @@ -94,7 +89,7 @@ fn sudo_unchecked_weight_basics() { call, Weight::from_parts(1_000, 0) )); - assert_eq!(I32Log::::get(), vec![42i32]); + assert_eq!(Logger::i32_log(), vec![42i32]); // A privileged function should not work when called with a non-root `key`. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { @@ -113,7 +108,7 @@ fn sudo_unchecked_weight_basics() { } ); // `I32Log` is unchanged after unsuccessful call. - assert_eq!(I32Log::::get(), vec![42i32]); + assert_eq!(Logger::i32_log(), vec![42i32]); // Controls the dispatched weight. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { @@ -125,16 +120,13 @@ fn sudo_unchecked_weight_basics() { weight: Weight::from_parts(1_000, 0), }; let info = sudo_unchecked_weight_call.get_dispatch_info(); - assert_eq!(info.weight, Weight::from_parts(1_000, 0)); + assert_eq!(info.call_weight, Weight::from_parts(1_000, 0)); }); } #[test] fn sudo_unchecked_weight_emits_events_correctly() { new_test_ext(1).execute_with(|| { - // Set block number to 1 because events are not emitted on block 0. - System::set_block_number(1); - // Should emit event to indicate success when called with the root `key` and `call` is `Ok`. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { i: 42, @@ -175,9 +167,6 @@ fn set_key_basics() { #[test] fn set_key_emits_events_correctly() { new_test_ext(1).execute_with(|| { - // Set block number to 1 because events are not emitted on block 0. - System::set_block_number(1); - // A root `key` can change the root `key`. assert_ok!(Sudo::set_key(RuntimeOrigin::signed(1), 2)); System::assert_has_event(TestEvent::Sudo(Event::KeyChanged { @@ -200,8 +189,8 @@ fn sudo_as_basics() { weight: Weight::from_parts(1_000, 0), })); assert_ok!(Sudo::sudo_as(RuntimeOrigin::signed(1), 2, call)); - assert!(I32Log::::get().is_empty()); - assert!(AccountLog::::get().is_empty()); + assert!(Logger::i32_log().is_empty()); + assert!(Logger::account_log().is_empty()); // A non-privileged function should not work when called with a non-root `key`. let call = Box::new(RuntimeCall::Logger(LoggerCall::non_privileged_log { @@ -222,18 +211,15 @@ fn sudo_as_basics() { weight: Weight::from_parts(1, 0), })); assert_ok!(Sudo::sudo_as(RuntimeOrigin::signed(1), 2, call)); - assert_eq!(I32Log::::get(), vec![42i32]); + assert_eq!(Logger::i32_log(), vec![42i32]); // The correct user makes the call within `sudo_as`. - assert_eq!(AccountLog::::get(), vec![2]); + assert_eq!(Logger::account_log(), vec![2]); }); } #[test] fn sudo_as_emits_events_correctly() { new_test_ext(1).execute_with(|| { - // Set block number to 1 because events are not emitted on block 0. - System::set_block_number(1); - // A non-privileged function will work when passed to `sudo_as` with the root `key`. let call = Box::new(RuntimeCall::Logger(LoggerCall::non_privileged_log { i: 42, From d7ab956a10282b4aa3a913c7699388c08dbf4ae0 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 5 Sep 2025 16:01:31 -0300 Subject: [PATCH 72/97] Fix tests - part I; Fix storage and builder --- Cargo.lock | 3 +- pallets/runtime/mainnet/Cargo.toml | 1 - pallets/runtime/tests/Cargo.toml | 29 +- .../runtime/tests/src/asset_metadata_test.rs | 20 +- .../asset_pallet/accept_ticker_transfer.rs | 32 +- .../tests/src/asset_pallet/base_transfer.rs | 36 +- .../src/asset_pallet/controller_transfer.rs | 6 +- .../runtime/tests/src/asset_pallet/issue.rs | 22 +- .../src/asset_pallet/link_ticker_to_asset.rs | 20 +- .../src/asset_pallet/register_metadata.rs | 4 +- .../tests/src/asset_pallet/register_ticker.rs | 20 +- .../asset_pallet/unlink_ticker_from_asset.rs | 16 +- pallets/runtime/tests/src/asset_test.rs | 138 +++--- pallets/runtime/tests/src/balances_test.rs | 28 +- pallets/runtime/tests/src/committee_test.rs | 120 ++--- .../tests/src/compliance_manager_test.rs | 114 ++--- pallets/runtime/tests/src/contracts_test.rs | 12 +- .../tests/src/corporate_actions_test.rs | 18 +- pallets/runtime/tests/src/ext_builder.rs | 35 +- .../runtime/tests/src/external_agents_test.rs | 30 +- pallets/runtime/tests/src/fee_details.rs | 32 +- pallets/runtime/tests/src/group_test.rs | 76 ++-- pallets/runtime/tests/src/identity_test.rs | 350 +++++++------- pallets/runtime/tests/src/lib.rs | 68 +-- pallets/runtime/tests/src/multisig.rs | 296 ++++++------ pallets/runtime/tests/src/nft.rs | 82 ++-- pallets/runtime/tests/src/pips_test.rs | 162 +++---- pallets/runtime/tests/src/portfolio.rs | 58 +-- pallets/runtime/tests/src/protocol_fee.rs | 8 +- pallets/runtime/tests/src/relayer_test.rs | 48 +- .../settlement_pallet/execute_instruction.rs | 12 +- .../src/settlement_pallet/lock_instruction.rs | 118 ++--- .../src/settlement_pallet/manual_execution.rs | 60 +-- .../settlement_pallet/reject_instruction.rs | 34 +- .../settlement_pallet/withdraw_affirmation.rs | 8 +- pallets/runtime/tests/src/settlement_test.rs | 358 +++++++-------- pallets/runtime/tests/src/signed_extra.rs | 12 +- .../runtime/tests/src/staking_extra_tests.rs | 10 +- pallets/runtime/tests/src/sto_test.rs | 18 +- pallets/runtime/tests/src/storage.rs | 429 ++++++++++-------- .../tests/src/transaction_payment_test.rs | 30 +- .../tests/src/transfer_compliance_test.rs | 12 +- pallets/runtime/tests/src/treasury_test.rs | 12 +- pallets/runtime/tests/src/utility_test.rs | 94 ++-- scripts/test.sh | 1 - src/chain_spec/ci_runtime.rs | 4 +- 46 files changed, 1587 insertions(+), 1509 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3f5b67151d..96fec70812 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7946,7 +7946,7 @@ dependencies = [ "polymesh-runtime-common", "polymesh-runtime-develop", "polymesh-weights", - "rand 0.7.3", + "rand 0.8.5", "scale-info", "serde", "serde_json", @@ -7958,6 +7958,7 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-grandpa", "sp-core", + "sp-genesis-builder", "sp-inherents", "sp-io", "sp-keyring", diff --git a/pallets/runtime/mainnet/Cargo.toml b/pallets/runtime/mainnet/Cargo.toml index bb03651ae4..6b94a1965d 100644 --- a/pallets/runtime/mainnet/Cargo.toml +++ b/pallets/runtime/mainnet/Cargo.toml @@ -65,7 +65,6 @@ pallet-authority-discovery = { workspace = true, default-features = false } pallet-authorship = { workspace = true, default-features = false } pallet-babe = { workspace = true, default-features = false } pallet-contracts = { workspace = true, default-features = false } -#pallet-contracts-primitives = { workspace = true, default-features = false} pallet-election-provider-multi-phase = { workspace = true, default-features = false } pallet-grandpa = { workspace = true, default-features = false } pallet-im-online = { workspace = true, default-features = false } diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index f407e6fab8..3c0e4591c1 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -43,15 +43,15 @@ polymesh-weights = { workspace = true, default-features = false } polymesh-exec-macro = { path = "exec_macro" } # General -serde = { version = "1.0.104", default-features = false } -rand = { version = "0.7.3", default-features = false } +serde = { version = "1.0", default-features = false } +rand = { version = "0.8", default-features = false } chrono = { version = "0.4", default-features = false } -smallvec = "1.4.1" -lazy_static = "1.4.0" -parking_lot = "0.12.0" +smallvec = "1.4" +lazy_static = "1.4" +parking_lot = "0.12" env_logger = "0.7" -serde_json = { version = "1.0.48", default-features = false } -log = "0.4.8" +serde_json = { version = "1.0", default-features = false } +log = "0.4" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } @@ -85,6 +85,7 @@ sp-block-builder = { workspace = true, default-features = false } sp-consensus-babe = { workspace = true, default-features = false } sp-consensus-grandpa = { workspace = true, default-features = false } sp-core = { workspace = true, default-features = false } +sp-genesis-builder = { workspace = true, default-features = false } sp-inherents = { workspace = true, default-features = false } sp-io = { workspace = true, default-features = false } sp-npos-elections = { workspace = true, default-features = false } @@ -111,9 +112,7 @@ only-staking = [] # Backends u64_backend = ["polymesh-primitives/u64_backend"] -no_std = [ - "u64_backend" -] +no_std = ["u64_backend"] std = [ "u64_backend", @@ -167,8 +166,10 @@ std = [ "sp-runtime/std", "sp-staking/std", "sp-std/std", + "sp-genesis-builder/std", + "rand/std", ] -runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks", -] -try-runtime = [] + +runtime-benchmarks = ["frame-benchmarking/runtime-benchmarks"] + +try-runtime = [] \ No newline at end of file diff --git a/pallets/runtime/tests/src/asset_metadata_test.rs b/pallets/runtime/tests/src/asset_metadata_test.rs index da83c32fd1..8ca3bbf0ae 100644 --- a/pallets/runtime/tests/src/asset_metadata_test.rs +++ b/pallets/runtime/tests/src/asset_metadata_test.rs @@ -12,7 +12,7 @@ use polymesh_primitives::asset_metadata::{ AssetMetadataKey, AssetMetadataLockStatus, AssetMetadataName, AssetMetadataSpec, AssetMetadataValue, AssetMetadataValueDetail, }; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; type Origin = ::RuntimeOrigin; type Moment = ::Moment; @@ -109,8 +109,8 @@ fn register_metadata_type(owner: User, asset_id: Option, name: &str) -> #[test] fn set_asset_metadata_local_type() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); - let other = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Dave); + let other = User::new(Sr25519Keyring::Alice); // Create asset. let asset_id = create_and_issue_sample_asset(&owner); @@ -307,8 +307,8 @@ fn set_asset_metadata_local_type() { #[test] fn register_and_set_local_asset_metadata() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); - let other = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Dave); + let other = User::new(Sr25519Keyring::Alice); // Create asset. let asset_id = create_and_issue_sample_asset(&owner); @@ -358,8 +358,8 @@ fn register_and_set_local_asset_metadata() { #[test] fn register_asset_metadata_local_type() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); - let other = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Dave); + let other = User::new(Sr25519Keyring::Alice); // Create asset. let asset_id = create_and_issue_sample_asset(&owner); @@ -396,7 +396,7 @@ fn register_asset_metadata_local_type() { #[test] fn register_asset_metadata_global_type() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let root = Origin::from(frame_system::RawOrigin::Root); let (name, spec) = make_metadata_type("TEST"); @@ -425,7 +425,7 @@ fn register_asset_metadata_global_type() { #[test] fn register_asset_metadata_local_type_limits() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); + let owner = User::new(Sr25519Keyring::Dave); // Create asset. let asset_id = create_and_issue_sample_asset(&owner); @@ -508,7 +508,7 @@ fn register_asset_metadata_global_type_limits() { #[test] fn check_locked_until() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); + let owner = User::new(Sr25519Keyring::Dave); // Create asset. let asset_id = create_and_issue_sample_asset(&owner); diff --git a/pallets/runtime/tests/src/asset_pallet/accept_ticker_transfer.rs b/pallets/runtime/tests/src/asset_pallet/accept_ticker_transfer.rs index 7cd98a4feb..f2bdff9292 100644 --- a/pallets/runtime/tests/src/asset_pallet/accept_ticker_transfer.rs +++ b/pallets/runtime/tests/src/asset_pallet/accept_ticker_transfer.rs @@ -1,5 +1,5 @@ use frame_support::{assert_noop, assert_ok}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use pallet_asset::{ TickerConfig, TickerRegistration, TickersOwnedByUser, UniqueTickerRegistration, @@ -19,8 +19,8 @@ type IdentityError = pallet_identity::Error; #[test] fn accept_ticker_transfer() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); assert_ok!(Asset::register_unique_ticker(alice.origin(), ticker,)); @@ -55,8 +55,8 @@ fn accept_ticker_transfer() { #[test] fn accept_ticker_transfer_missing_auth() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); assert_ok!(Asset::register_unique_ticker(alice.origin(), ticker,)); @@ -70,8 +70,8 @@ fn accept_ticker_transfer_missing_auth() { #[test] fn accept_ticker_transfer_asset_exists() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); create_and_issue_sample_asset_linked_to_ticker(&alice, ticker); @@ -94,8 +94,8 @@ fn accept_ticker_transfer_asset_exists() { fn accept_ticker_transfer_auth_expired() { ExtBuilder::default().build().execute_with(|| { set_timestamp(now()); - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); assert_ok!(Asset::register_unique_ticker(alice.origin(), ticker,)); @@ -117,8 +117,8 @@ fn accept_ticker_transfer_auth_expired() { //fn accept_ticker_transfer_registration_expired() { // ExtBuilder::default().build().execute_with(|| { // set_time_to_now(); -// let bob = User::new(AccountKeyring::Bob); -// let alice = User::new(AccountKeyring::Alice); +// let bob = User::new(Sr25519Keyring::Bob); +// let alice = User::new(Sr25519Keyring::Alice); // let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); // // assert_ok!(Asset::register_ticker(alice.origin(), ticker,)); @@ -139,9 +139,9 @@ fn accept_ticker_transfer_auth_expired() { #[test] fn accept_ticker_transfer_illegal_auth() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); assert_ok!(Asset::register_unique_ticker(alice.origin(), ticker,)); @@ -170,8 +170,8 @@ fn accept_ticker_transfer_illegal_auth() { #[test] fn accept_ticker_transfer_bad_type() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); assert_ok!(Asset::register_unique_ticker(alice.origin(), ticker,)); diff --git a/pallets/runtime/tests/src/asset_pallet/base_transfer.rs b/pallets/runtime/tests/src/asset_pallet/base_transfer.rs index 3ccdea876c..bf2e0c4eb1 100644 --- a/pallets/runtime/tests/src/asset_pallet/base_transfer.rs +++ b/pallets/runtime/tests/src/asset_pallet/base_transfer.rs @@ -1,5 +1,5 @@ use frame_support::{assert_noop, assert_ok}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use pallet_asset::BalanceOf; use pallet_portfolio::PortfolioAssetBalances; @@ -27,8 +27,8 @@ type System = frame_system::Pallet; #[test] fn base_transfer() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId { did: alice.did, kind: PortfolioKind::Default, @@ -81,8 +81,8 @@ fn base_transfer() { #[test] fn base_transfer_invalid_token_type() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let bob_default_portfolio = PortfolioId { did: bob.did, kind: PortfolioKind::Default, @@ -113,8 +113,8 @@ fn base_transfer_invalid_token_type() { #[test] fn base_transfer_invalid_granularity() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let bob_default_portfolio = PortfolioId { did: bob.did, kind: PortfolioKind::Default, @@ -161,8 +161,8 @@ fn base_transfer_invalid_granularity() { #[test] fn base_transfer_insufficient_balance() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let bob_default_portfolio = PortfolioId { did: bob.did, kind: PortfolioKind::Default, @@ -201,8 +201,8 @@ fn base_transfer_insufficient_balance() { #[test] fn base_transfer_locked_asset() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let bob_default_portfolio = PortfolioId { did: bob.did, kind: PortfolioKind::Default, @@ -255,8 +255,8 @@ fn base_transfer_locked_asset() { #[test] fn base_transfer_invalid_portfolio() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId { did: alice.did, kind: PortfolioKind::Default, @@ -287,9 +287,9 @@ fn base_transfer_invalid_portfolio() { #[test] fn base_transfer_invalid_compliance() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); - let dave: User = User::new(AccountKeyring::Dave); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let dave: User = User::new(Sr25519Keyring::Dave); let alice_default_portfolio = PortfolioId { did: alice.did, kind: PortfolioKind::Default, @@ -339,8 +339,8 @@ fn base_transfer_invalid_compliance() { #[test] fn base_transfer_frozen_asset() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId { did: alice.did, kind: PortfolioKind::Default, diff --git a/pallets/runtime/tests/src/asset_pallet/controller_transfer.rs b/pallets/runtime/tests/src/asset_pallet/controller_transfer.rs index 06e619b75f..42bed9d7d5 100644 --- a/pallets/runtime/tests/src/asset_pallet/controller_transfer.rs +++ b/pallets/runtime/tests/src/asset_pallet/controller_transfer.rs @@ -1,5 +1,5 @@ use frame_support::{assert_noop, assert_ok}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use polymesh_primitives::agent::AgentGroup; use polymesh_primitives::settlement::{ @@ -24,8 +24,8 @@ type System = frame_system::Pallet; #[test] fn controller_transfer_locked_asset() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let bob_default_portfolio = PortfolioId { did: bob.did, kind: PortfolioKind::Default, diff --git a/pallets/runtime/tests/src/asset_pallet/issue.rs b/pallets/runtime/tests/src/asset_pallet/issue.rs index 3a798b6863..ce7f27c9a5 100644 --- a/pallets/runtime/tests/src/asset_pallet/issue.rs +++ b/pallets/runtime/tests/src/asset_pallet/issue.rs @@ -1,5 +1,5 @@ use frame_support::{assert_noop, assert_ok}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use pallet_asset::{Assets, BalanceOf}; use pallet_portfolio::{PortfolioAssetBalances, PortfolioAssetCount, PortfolioLockedAssets}; @@ -23,7 +23,7 @@ type Settlement = pallet_settlement::Pallet; #[test] fn issue_tokens_default_portfolio() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId { did: alice.did, kind: PortfolioKind::Default, @@ -56,7 +56,7 @@ fn issue_tokens_default_portfolio() { #[test] fn issue_tokens_user_portfolio() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_user_portfolio = PortfolioId { did: alice.did, kind: PortfolioKind::User(PortfolioNumber(1)), @@ -105,7 +105,7 @@ fn issue_tokens_user_portfolio() { #[test] fn issue_tokens_invalid_portfolio() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_user_portfolio = PortfolioKind::User(PortfolioNumber(1)); let asset_id = Asset::generate_asset_id(alice.acc(), false); @@ -128,8 +128,8 @@ fn issue_tokens_invalid_portfolio() { #[test] fn issue_tokens_assigned_custody() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let portfolio_kind = PortfolioKind::User(PortfolioNumber(1)); let portfolio_id = PortfolioId::new(alice.did, portfolio_kind); @@ -180,7 +180,7 @@ fn issue_tokens_assigned_custody() { #[test] fn issue_tokens_no_asset() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); assert_noop!( Asset::issue( alice.origin(), @@ -196,8 +196,8 @@ fn issue_tokens_no_asset() { #[test] fn issue_tokens_no_auth() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); assert_ok!(Asset::create_asset( @@ -218,7 +218,7 @@ fn issue_tokens_no_auth() { #[test] fn issue_tokens_not_granular() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); assert_ok!(Asset::create_asset( @@ -239,7 +239,7 @@ fn issue_tokens_not_granular() { #[test] fn issue_tokens_invalid_token_type() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); assert_ok!(Asset::create_asset( diff --git a/pallets/runtime/tests/src/asset_pallet/link_ticker_to_asset.rs b/pallets/runtime/tests/src/asset_pallet/link_ticker_to_asset.rs index dabaf6a04c..97a338a5c2 100644 --- a/pallets/runtime/tests/src/asset_pallet/link_ticker_to_asset.rs +++ b/pallets/runtime/tests/src/asset_pallet/link_ticker_to_asset.rs @@ -1,5 +1,5 @@ use frame_support::{assert_noop, assert_ok}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use pallet_asset::{AssetIdTicker, TickerAssetId}; use polymesh_primitives::Ticker; @@ -15,7 +15,7 @@ type ExternalAgentsError = pallet_external_agents::Error; #[test] fn link_ticker_to_asset_id_successfully() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); @@ -44,8 +44,8 @@ fn link_ticker_to_asset_id_successfully() { #[test] fn link_ticker_to_asset_id_ticker_not_registered_to_caller() { ExtBuilder::default().build().execute_with(|| { - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(dave.acc(), false); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); @@ -70,8 +70,8 @@ fn link_ticker_to_asset_id_ticker_not_registered_to_caller() { #[test] fn link_ticker_to_asset_id_ticker_unauthorized_agent() { ExtBuilder::default().build().execute_with(|| { - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(dave.acc(), false); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); @@ -96,7 +96,7 @@ fn link_ticker_to_asset_id_ticker_unauthorized_agent() { #[test] fn link_ticker_to_asset_id_expired_ticker() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); @@ -122,7 +122,7 @@ fn link_ticker_to_asset_id_expired_ticker() { #[test] fn link_ticker_to_asset_id_ticker_already_linked() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); assert_ok!(Asset::register_unique_ticker(alice.origin(), ticker,)); @@ -163,7 +163,7 @@ fn link_ticker_to_asset_id_ticker_already_linked() { #[test] fn link_ticker_to_asset_asset_already_linked() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); let ticker_1: Ticker = Ticker::from_slice_truncated(b"TICKER1"); @@ -196,7 +196,7 @@ fn link_ticker_to_asset_asset_already_linked() { #[test] fn link_ticker_to_asset_id_after_unlink() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); let ticker_1: Ticker = Ticker::from_slice_truncated(b"TICKER1"); diff --git a/pallets/runtime/tests/src/asset_pallet/register_metadata.rs b/pallets/runtime/tests/src/asset_pallet/register_metadata.rs index 65bc49f3e8..c45036378b 100644 --- a/pallets/runtime/tests/src/asset_pallet/register_metadata.rs +++ b/pallets/runtime/tests/src/asset_pallet/register_metadata.rs @@ -1,5 +1,5 @@ use frame_support::assert_ok; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use pallet_asset::{ AssetMetadataGlobalKeyToName, AssetMetadataGlobalNameToKey, AssetMetadataGlobalSpecs, @@ -63,7 +63,7 @@ fn register_multiple_global_metadata() { #[test] fn register_multiple_local_metadata() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&alice); diff --git a/pallets/runtime/tests/src/asset_pallet/register_ticker.rs b/pallets/runtime/tests/src/asset_pallet/register_ticker.rs index 7899ba20c9..b7c0523527 100644 --- a/pallets/runtime/tests/src/asset_pallet/register_ticker.rs +++ b/pallets/runtime/tests/src/asset_pallet/register_ticker.rs @@ -1,6 +1,6 @@ use frame_support::{assert_noop, assert_ok}; use rand::Rng; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_std::collections::btree_set::BTreeSet; use pallet_asset::{ @@ -73,7 +73,7 @@ fn verify_ticker_characters() { fn register_ticker() { ExtBuilder::default().build().execute_with(|| { let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); assert_ok!(Asset::register_unique_ticker(alice.origin(), ticker,)); @@ -98,7 +98,7 @@ fn register_ticker() { fn register_ticker_invalid_ticker_character() { ExtBuilder::default().build().execute_with(|| { let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER+"); - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); assert_noop!( Asset::register_unique_ticker(alice.origin(), ticker,), @@ -111,7 +111,7 @@ fn register_ticker_invalid_ticker_character() { fn register_ticker_already_linked() { ExtBuilder::default().build().execute_with(|| { let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); assert_ok!(Asset::register_unique_ticker(alice.origin(), ticker,)); @@ -144,7 +144,7 @@ fn register_ticker_too_long() { let max_ticker_len = TickerConfig::::get().max_ticker_length; let ticker_bytes: Vec = (65..65 + max_ticker_len + 1).collect(); let ticker: Ticker = Ticker::from_slice_truncated(&ticker_bytes); - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); assert_noop!( Asset::register_unique_ticker(alice.origin(), ticker,), @@ -157,8 +157,8 @@ fn register_ticker_too_long() { fn register_ticker_already_registered() { ExtBuilder::default().build().execute_with(|| { let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER00"); - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); assert_ok!(Asset::register_unique_ticker(alice.origin(), ticker,)); assert_noop!( @@ -172,8 +172,8 @@ fn register_ticker_already_registered() { fn register_already_expired_ticker() { ExtBuilder::default().build().execute_with(|| { let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER00"); - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); assert_ok!(Asset::register_unique_ticker(alice.origin(), ticker,)); set_timestamp(now() + 10001); @@ -200,7 +200,7 @@ fn register_already_expired_ticker() { fn register_ticker_renewal() { ExtBuilder::default().build().execute_with(|| { let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER00"); - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); assert_ok!(Asset::register_unique_ticker(alice.origin(), ticker,)); let ticker_registration = UniqueTickerRegistration::::get(&ticker).unwrap(); diff --git a/pallets/runtime/tests/src/asset_pallet/unlink_ticker_from_asset.rs b/pallets/runtime/tests/src/asset_pallet/unlink_ticker_from_asset.rs index 063e142356..25cd552765 100644 --- a/pallets/runtime/tests/src/asset_pallet/unlink_ticker_from_asset.rs +++ b/pallets/runtime/tests/src/asset_pallet/unlink_ticker_from_asset.rs @@ -1,5 +1,5 @@ use frame_support::{assert_noop, assert_ok}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use pallet_asset::{AssetIdTicker, TickerAssetId, TickersOwnedByUser, UniqueTickerRegistration}; use polymesh_primitives::agent::AgentGroup; @@ -17,7 +17,7 @@ type Identity = pallet_identity::Pallet; #[test] fn unlink_ticker_from_asset_id_successfully() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); @@ -57,8 +57,8 @@ fn unlink_ticker_from_asset_id_successfully() { #[test] fn unlink_ticker_from_asset_id_unauthorized_agent() { ExtBuilder::default().build().execute_with(|| { - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); @@ -89,7 +89,7 @@ fn unlink_ticker_from_asset_id_unauthorized_agent() { #[test] fn unlink_ticker_from_asset_id_ticker_registration_not_found() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); let ticker_1: Ticker = Ticker::from_slice_truncated(b"TICKER1"); @@ -121,8 +121,8 @@ fn unlink_ticker_from_asset_id_ticker_registration_not_found() { #[test] fn unlink_ticker_from_asset_id_ticker_not_registered_to_caller() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); @@ -162,7 +162,7 @@ fn unlink_ticker_from_asset_id_ticker_not_registered_to_caller() { #[test] fn unlink_ticker_from_asset_id_ticker_not_linked() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = Asset::generate_asset_id(alice.acc(), false); let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER"); let ticker_1: Ticker = Ticker::from_slice_truncated(b"TICKER1"); diff --git a/pallets/runtime/tests/src/asset_test.rs b/pallets/runtime/tests/src/asset_test.rs index 10115fdea5..ad5143d20d 100644 --- a/pallets/runtime/tests/src/asset_test.rs +++ b/pallets/runtime/tests/src/asset_test.rs @@ -47,7 +47,7 @@ use polymesh_primitives::{ FundDescription, IdentityId, Memo, Moment, NFTCollectionKeys, Permissions, PortfolioId, PortfolioKind, PortfolioName, PortfolioNumber, Signatory, Ticker, WeightMeter, }; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use crate::asset_pallet::setup::{ create_and_issue_sample_asset, create_and_issue_sample_asset_linked_to_ticker, create_asset, @@ -206,7 +206,7 @@ pub fn check_schedules(asset_id: AssetId, schedules: &[(ScheduleId, ScheduleChec #[test] fn issuers_can_create_and_rename_tokens() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); + let owner = User::new(Sr25519Keyring::Dave); let asset_id = Asset::generate_asset_id(owner.acc(), false); let funding_round_name: FundingRoundName = b"MyFundingRound".into(); let sample_security_token = sample_security_token(owner.did); @@ -243,7 +243,7 @@ fn issuers_can_create_and_rename_tokens() { ); // Unauthorized agents cannot rename the token. - let eve = User::new(AccountKeyring::Eve); + let eve = User::new(Sr25519Keyring::Eve); assert_noop!( Asset::rename_asset(eve.origin(), asset_id, vec![0xde, 0xad, 0xbe, 0xef].into()), EAError::UnauthorizedAgent @@ -261,8 +261,8 @@ fn issuers_can_create_and_rename_tokens() { #[test] fn valid_transfers_pass() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&owner); @@ -286,8 +286,8 @@ fn valid_transfers_pass() { #[test] fn issuers_can_redeem_tokens() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); - let bob = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Dave); + let bob = User::new(Sr25519Keyring::Bob); let owner_portfolio_id = PortfolioId { did: owner.did, kind: PortfolioKind::Default, @@ -342,8 +342,8 @@ fn checkpoints_fuzz_test() { // When fuzzing in local, feel free to bump this number to add more fuzz runs. ExtBuilder::default().build().execute_with(|| { set_timestamp(now()); - let owner = User::new(AccountKeyring::Dave); - let bob = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Dave); + let bob = User::new(Sr25519Keyring::Bob); let asset_id = create_and_issue_sample_asset(&owner); @@ -385,8 +385,8 @@ fn checkpoints_fuzz_test() { #[test] fn controller_transfer() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&owner); @@ -420,9 +420,9 @@ fn transfer_token_ownership() { ExtBuilder::default().build().execute_with(|| { set_timestamp(now()); - let owner = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let ticker = Ticker::from_slice_truncated(b"MYTICKER"); let asset_id = create_and_issue_sample_asset_linked_to_ticker(&owner, ticker); @@ -539,7 +539,7 @@ fn transfer_token_ownership() { #[test] fn update_identifiers() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); + let owner = User::new(Sr25519Keyring::Dave); // Create: A correct entry was added. let asset_ident = Some(vec![cusip()]); @@ -581,7 +581,7 @@ fn update_identifiers() { #[test] fn adding_removing_documents() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); + let owner = User::new(Sr25519Keyring::Dave); let asset_id = create_and_issue_sample_asset(&owner); @@ -631,8 +631,8 @@ fn adding_removing_documents() { #[test] fn freeze_unfreeze_asset() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let asset_id = create_and_issue_sample_asset(&owner); @@ -686,9 +686,9 @@ fn freeze_unfreeze_asset() { fn frozen_secondary_keys_create_asset_we() { ExtBuilder::default().build().execute_with(|| { // 0. Create identities. - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); - let _charlie_id = register_keyring_account(AccountKeyring::Charlie).unwrap(); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); + let _charlie_id = register_keyring_account(Sr25519Keyring::Charlie).unwrap(); // 1. Add Bob as signatory to Alice ID. add_secondary_key(alice.did, bob.acc()); @@ -731,8 +731,8 @@ fn next_checkpoint_is_updated_we() { set_timestamp(start); assert_eq!(start, ::UnixTime::now()); - let owner = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let asset_id = create_and_issue_sample_asset(&owner); @@ -800,8 +800,8 @@ fn non_recurring_schedule_works_we() { set_timestamp(start); assert_eq!(start, ::UnixTime::now()); - let owner = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let asset_id = create_and_issue_sample_asset(&owner); @@ -850,8 +850,8 @@ fn schedule_remaining_works() { let start = 1_000; set_timestamp(start); - let owner = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let asset_id = create_and_issue_sample_asset(&owner); @@ -943,7 +943,7 @@ fn schedule_remaining_works() { fn mesh_1531_ts_collission_regression_test() { ExtBuilder::default().build().execute_with(|| { // Create the assets. - let owner = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&owner); let asset_id2 = create_and_issue_sample_asset(&owner); @@ -965,14 +965,14 @@ fn mesh_1531_ts_collission_regression_test() { #[test] fn secondary_key_not_authorized_for_asset_test() { - let charlie = vec![AccountKeyring::Charlie.to_account_id()]; + let charlie = vec![Sr25519Keyring::Charlie.to_account_id()]; ExtBuilder::default() .cdd_providers(charlie) .build() .execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); - let eve = User::new_with(alice.did, AccountKeyring::Eve); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); + let eve = User::new_with(alice.did, Sr25519Keyring::Eve); let asset_id = create_and_issue_sample_asset(&alice); let eve_permissions = Permissions { asset: AssetPermissions::elems(vec![AssetId::new([0; 16])]), @@ -1020,7 +1020,7 @@ fn bytes_of_len>>(e: u8, len: usize) -> R { #[test] fn create_asset_errors() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let create = |name, is_divisible, funding_name| { Asset::create_asset( @@ -1071,7 +1071,7 @@ fn create_asset_errors() { #[test] fn asset_type_custom_too_long() { ExtBuilder::default().build().execute_with(|| { - let user = User::new(AccountKeyring::Alice); + let user = User::new(Sr25519Keyring::Alice); let case = |add| Asset::register_custom_asset_type(user.origin(), max_len_bytes(add)); assert_too_long!(case(1)); assert_ok!(case(0)); @@ -1081,7 +1081,7 @@ fn asset_type_custom_too_long() { #[test] fn asset_type_custom_works() { ExtBuilder::default().build().execute_with(|| { - let user = User::new(AccountKeyring::Alice); + let user = User::new(Sr25519Keyring::Alice); let register = |ty: &str| Asset::register_custom_asset_type(user.origin(), ty.into()); let seq_is = |num| { assert_eq!(CustomTypeIdSequence::::get().0, num); @@ -1126,7 +1126,7 @@ fn asset_type_custom_works() { #[test] fn invalid_custom_asset_type_check() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); + let owner = User::new(Sr25519Keyring::Dave); assert_noop!( Asset::create_asset( @@ -1145,7 +1145,7 @@ fn invalid_custom_asset_type_check() { #[test] fn asset_doc_field_too_long() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&owner); let add_doc = |doc| Asset::add_documents(owner.origin(), vec![doc], asset_id); assert_too_long!(add_doc(Document { @@ -1171,10 +1171,10 @@ fn asset_doc_field_too_long() { #[track_caller] fn test_with_owner(test: impl FnOnce(User)) { - let owner = AccountKeyring::Alice; + let owner = Sr25519Keyring::Alice; ExtBuilder::default() .add_regular_users_from_accounts(&[owner.to_account_id()]) - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(|| test(User::existing(owner))); } @@ -1224,15 +1224,15 @@ fn update_identifiers_errors_test() { #[test] fn issuers_can_redeem_tokens_from_portfolio() { - let alice = AccountKeyring::Alice.to_account_id(); + let alice = Sr25519Keyring::Alice.to_account_id(); ExtBuilder::default() .cdd_providers(vec![alice.clone()]) .build() .execute_with(|| { set_timestamp(now()); - let owner = User::new(AccountKeyring::Dave); - let bob = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Dave); + let bob = User::new(Sr25519Keyring::Bob); // Create asset. let asset_id = create_and_issue_sample_asset(&owner); @@ -1370,8 +1370,8 @@ fn issuers_can_redeem_tokens_from_portfolio() { #[test] fn issuers_can_change_asset_type() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); // Create an asset let asset_id = create_and_issue_sample_asset(&owner); @@ -1407,7 +1407,7 @@ fn issuers_can_change_asset_type() { #[test] fn prevent_locking_an_empty_key() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&alice); let asset_metadata_name = AssetMetadataName(b"mylocalkey".to_vec()); let asset_metadata_spec = AssetMetadataSpec { @@ -1442,7 +1442,7 @@ fn prevent_locking_an_empty_key() { #[test] fn remove_local_metadata_key_missing_key() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&alice); let local_key = AssetMetadataLocalKey(1); assert_noop!( @@ -1456,7 +1456,7 @@ fn remove_local_metadata_key_missing_key() { #[test] fn remove_local_metadata_key_locked_value() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&alice); let asset_metadata_name = AssetMetadataName(b"mylocalkey".to_vec()); let asset_metadata_spec = AssetMetadataSpec { @@ -1499,7 +1499,7 @@ fn remove_local_metadata_key_locked_value() { #[test] fn remove_nft_collection_metada_key() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_metada_key = AssetMetadataKey::Local(AssetMetadataLocalKey(1)); let collection_keys: NFTCollectionKeys = vec![asset_metada_key.clone()].into(); let asset_id = create_nft_collection( @@ -1525,7 +1525,7 @@ fn remove_nft_collection_metada_key() { #[test] fn remove_local_metadata_key() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&alice); let asset_metadata_name = AssetMetadataName(b"mylocalkey".to_vec()); let asset_metadata_spec = AssetMetadataSpec { @@ -1575,7 +1575,7 @@ fn remove_local_metadata_key() { #[test] fn remove_local_metadata_value_missing_key() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&alice); assert_noop!( Asset::remove_metadata_value( @@ -1592,7 +1592,7 @@ fn remove_local_metadata_value_missing_key() { #[test] fn remove_local_metadata_value_locked_value() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&alice); let asset_metadata_name = AssetMetadataName(b"mylocalkey".to_vec()); let asset_metadata_spec = AssetMetadataSpec { @@ -1635,7 +1635,7 @@ fn remove_local_metadata_value_locked_value() { #[test] fn remove_metadata_value() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&alice); let asset_metadata_name = AssetMetadataName(b"mylocalkey".to_vec()); let asset_metadata_spec = AssetMetadataSpec { @@ -1685,7 +1685,7 @@ fn remove_metadata_value() { fn issue_token_unassigned_custody() { ExtBuilder::default().build().execute_with(|| { let issued_amount = ONE_UNIT; - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_user_portfolio = PortfolioKind::User(PortfolioNumber(1)); assert_ok!(Portfolio::create_portfolio( @@ -1718,7 +1718,7 @@ fn issue_token_unassigned_custody() { #[test] fn redeem_token_unassigned_custody() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&alice); assert_ok!(Asset::redeem( alice.origin(), @@ -1733,8 +1733,8 @@ fn redeem_token_unassigned_custody() { #[test] fn redeem_token_assigned_custody() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let portfolio_kind = PortfolioKind::User(PortfolioNumber(1)); let portfolio_id = PortfolioId::new(alice.did, portfolio_kind); @@ -1768,7 +1768,7 @@ fn redeem_token_assigned_custody() { fn pre_approve_asset() { ExtBuilder::default().build().execute_with(|| { let asset_id = AssetId::new([0; 16]); - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); Asset::pre_approve_asset(alice.origin(), asset_id).unwrap(); assert!(PreApprovedAsset::::get(alice.did, asset_id)); @@ -1781,7 +1781,7 @@ fn pre_approve_asset() { fn remove_asset_pre_approval() { ExtBuilder::default().build().execute_with(|| { let asset_id = AssetId::new([0; 16]); - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); Asset::pre_approve_asset(alice.origin(), asset_id).unwrap(); Asset::remove_asset_pre_approval(alice.origin(), asset_id).unwrap(); @@ -1795,7 +1795,7 @@ fn remove_asset_pre_approval() { fn unauthorized_custodian_ticker_exemption() { ExtBuilder::default().build().execute_with(|| { let asset_id = AssetId::new([0; 16]); - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); assert_noop!( Asset::exempt_asset_affirmation(alice.origin(), asset_id), @@ -1822,8 +1822,8 @@ fn unauthorized_custodian_ticker_exemption() { #[test] fn unauthorized_add_mandatory_mediators() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let max_mediators = ::MaxAssetMediators::get(); let mediators: BTreeSet = (0..max_mediators) .map(|i| IdentityId::from(i as u128)) @@ -1840,7 +1840,7 @@ fn unauthorized_add_mandatory_mediators() { #[test] fn successfully_add_mandatory_mediators() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let max_mediators = ::MaxAssetMediators::get(); let mediators: BTreeSet = (0..max_mediators) .map(|i| IdentityId::from(i as u128)) @@ -1866,7 +1866,7 @@ fn successfully_add_mandatory_mediators() { #[test] fn add_mandatory_mediators_exceed_limit() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let max_mediators = ::MaxAssetMediators::get(); let mediators: BTreeSet = (0..max_mediators) .map(|i| IdentityId::from(i as u128)) @@ -1894,8 +1894,8 @@ fn add_mandatory_mediators_exceed_limit() { #[test] fn unauthorized_remove_mediators() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let max_mediators = ::MaxAssetMediators::get(); let mediators: BTreeSet = (0..max_mediators) .map(|i| IdentityId::from(i as u128)) @@ -1916,7 +1916,7 @@ fn unauthorized_remove_mediators() { #[test] fn successfully_remove_mediators() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let max_mediators = ::MaxAssetMediators::get(); let mediators: BTreeSet = (0..max_mediators) .map(|i| IdentityId::from(i as u128)) @@ -1948,8 +1948,8 @@ fn successfully_remove_mediators() { #[test] fn controller_transfer_locked_asset() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let bob_default_portfolio = PortfolioId { did: bob.did, kind: PortfolioKind::Default, @@ -2009,7 +2009,7 @@ fn controller_transfer_locked_asset() { #[test] fn issue_tokens_user_portfolio() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_user_portfolio = PortfolioId { did: alice.did, kind: PortfolioKind::User(PortfolioNumber(1)), diff --git a/pallets/runtime/tests/src/balances_test.rs b/pallets/runtime/tests/src/balances_test.rs index 4c21878b07..7e57fc4884 100644 --- a/pallets/runtime/tests/src/balances_test.rs +++ b/pallets/runtime/tests/src/balances_test.rs @@ -10,7 +10,7 @@ use frame_support::{ }; use pallet_transaction_payment::ChargeTransactionPayment; use polymesh_primitives::Memo; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_runtime::traits::SignedExtension; pub type Balances = balances::Pallet; @@ -37,7 +37,7 @@ fn signed_extension_charge_transaction_payment_work() { .build() .execute_with(|| { let len = 10; - let alice_id = AccountKeyring::Alice.to_account_id(); + let alice_id = Sr25519Keyring::Alice.to_account_id(); let call = runtime::RuntimeCall::System(frame_system::Call::remark { remark: vec![] }); @@ -74,7 +74,7 @@ fn tipping_fails() { .monied(true) .build() .execute_with(|| { - let alice_id = AccountKeyring::Alice.to_account_id(); + let alice_id = Sr25519Keyring::Alice.to_account_id(); let call = runtime::RuntimeCall::System(frame_system::Call::remark { remark: vec![] }); let len = 10; assert!( @@ -95,14 +95,14 @@ fn transfer_with_memo() { ExtBuilder::default() .balance_factor(1_000) .monied(true) - .cdd_providers(vec![AccountKeyring::Ferdie.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Ferdie.to_account_id()]) .build() .execute_with(transfer_with_memo_we); } fn transfer_with_memo_we() { - let alice = AccountKeyring::Alice.to_account_id(); - let bob = AccountKeyring::Bob.to_account_id(); + let alice = Sr25519Keyring::Alice.to_account_id(); + let bob = Sr25519Keyring::Bob.to_account_id(); let memo_1 = Some(Memo([7u8; 32])); assert_ok!(Balances::transfer_with_memo( @@ -139,8 +139,8 @@ fn transfer_with_memo_we() { assert_eq!( system_events.pop().unwrap().event, crate::storage::RuntimeEvent::Balances(BalancesRawEvent::TransferMemo { - from: AccountKeyring::Alice.to_account_id(), - to: AccountKeyring::Bob.to_account_id(), + from: Sr25519Keyring::Alice.to_account_id(), + to: Sr25519Keyring::Bob.to_account_id(), amount: 300, memo: None }) @@ -148,16 +148,16 @@ fn transfer_with_memo_we() { assert_eq!( system_events.pop().unwrap().event, crate::storage::RuntimeEvent::Balances(BalancesRawEvent::Transfer { - from: AccountKeyring::Alice.to_account_id(), - to: AccountKeyring::Bob.to_account_id(), + from: Sr25519Keyring::Alice.to_account_id(), + to: Sr25519Keyring::Bob.to_account_id(), amount: 300, }) ); assert_eq!( system_events.pop().unwrap().event, crate::storage::RuntimeEvent::Balances(BalancesRawEvent::TransferMemo { - from: AccountKeyring::Alice.to_account_id(), - to: AccountKeyring::Bob.to_account_id(), + from: Sr25519Keyring::Alice.to_account_id(), + to: Sr25519Keyring::Bob.to_account_id(), amount: 200, memo: memo_2 }) @@ -165,8 +165,8 @@ fn transfer_with_memo_we() { assert_eq!( system_events.pop().unwrap().event, crate::storage::RuntimeEvent::Balances(BalancesRawEvent::Transfer { - from: AccountKeyring::Alice.to_account_id(), - to: AccountKeyring::Bob.to_account_id(), + from: Sr25519Keyring::Alice.to_account_id(), + to: Sr25519Keyring::Bob.to_account_id(), amount: 200, }) ); diff --git a/pallets/runtime/tests/src/committee_test.rs b/pallets/runtime/tests/src/committee_test.rs index ae75187bd1..3d88d9a5fe 100644 --- a/pallets/runtime/tests/src/committee_test.rs +++ b/pallets/runtime/tests/src/committee_test.rs @@ -19,7 +19,7 @@ use pallet_identity as identity; use pallet_pips::{PipId, ProposalState, ProposalStates, SnapshotResult}; use polymesh_primitives::{IdentityId, MaybeBlock}; use sp_core::H256; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_runtime::traits::Hash; use std::convert::TryFrom; @@ -33,8 +33,8 @@ type Origin = ::RuntimeOrigin; #[test] fn motions_basic_environment_works() { let committee = [ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), ] .to_vec(); ExtBuilder::default() @@ -44,7 +44,7 @@ fn motions_basic_environment_works() { } fn motions_basic_environment_works_we() { - let mut committee = [AccountKeyring::Alice, AccountKeyring::Bob] + let mut committee = [Sr25519Keyring::Alice, Sr25519Keyring::Bob] .iter() .map(|key| get_identity_id(*key).unwrap()) .collect::>(); @@ -93,7 +93,7 @@ fn abdicate_membership(who: IdentityId, signer: &Origin, n: u32) { assert_mem_len(n - 1); } -fn prepare_proposal(ring: AccountKeyring) { +fn prepare_proposal(ring: Sr25519Keyring) { let proposal = make_proposal(42); let acc = ring.to_account_id(); assert_ok!(Pips::propose( @@ -142,7 +142,7 @@ fn single_member_committee_works() { fn single_member_committee_works_we() { System::set_block_number(1); - let alice_ring = AccountKeyring::Alice; + let alice_ring = Sr25519Keyring::Alice; let alice_signer = Origin::signed(alice_ring.to_account_id()); let alice_did = register_keyring_account(alice_ring).unwrap(); @@ -181,7 +181,7 @@ fn preventing_motions_from_non_members_works() { fn preventing_motions_from_non_members_works_we() { System::set_block_number(1); - let alice_ring = AccountKeyring::Alice; + let alice_ring = Sr25519Keyring::Alice; let alice_signer = Origin::signed(alice_ring.to_account_id()); let _ = register_keyring_account(alice_ring).unwrap(); @@ -210,11 +210,11 @@ fn preventing_voting_from_non_members_works() { fn preventing_voting_from_non_members_works_we() { System::set_block_number(1); - let alice_ring = AccountKeyring::Alice; + let alice_ring = Sr25519Keyring::Alice; let alice_signer = Origin::signed(alice_ring.to_account_id()); let alice_did = register_keyring_account(alice_ring).unwrap(); - let bob_signer = Origin::signed(AccountKeyring::Bob.to_account_id()); - let _ = register_keyring_account(AccountKeyring::Bob).unwrap(); + let bob_signer = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let _ = register_keyring_account(Sr25519Keyring::Bob).unwrap(); set_members(vec![alice_did]); prepare_proposal(alice_ring); @@ -239,13 +239,13 @@ fn motions_revoting_works() { fn motions_revoting_works_we() { System::set_block_number(1); - let alice_ring = AccountKeyring::Alice; + let alice_ring = Sr25519Keyring::Alice; let alice_signer = Origin::signed(alice_ring.to_account_id()); let alice_did = register_keyring_account(alice_ring).unwrap(); - let _bob_signer = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_did = register_keyring_account(AccountKeyring::Bob).unwrap(); - let _charlie_signer = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let charlie_did = register_keyring_account(AccountKeyring::Charlie).unwrap(); + let _bob_signer = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_did = register_keyring_account(Sr25519Keyring::Bob).unwrap(); + let _charlie_signer = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let charlie_did = register_keyring_account(Sr25519Keyring::Charlie).unwrap(); set_members(vec![alice_did, bob_did, charlie_did]); prepare_proposal(alice_ring); @@ -295,10 +295,10 @@ fn first_vote_cannot_be_reject() { fn first_vote_cannot_be_reject_we() { System::set_block_number(1); - let alice_ring = AccountKeyring::Alice; + let alice_ring = Sr25519Keyring::Alice; let alice_did = register_keyring_account(alice_ring).unwrap(); - let bob_did = register_keyring_account(AccountKeyring::Bob).unwrap(); - let charlie_did = register_keyring_account(AccountKeyring::Charlie).unwrap(); + let bob_did = register_keyring_account(Sr25519Keyring::Bob).unwrap(); + let charlie_did = register_keyring_account(Sr25519Keyring::Charlie).unwrap(); set_members(vec![alice_did, bob_did, charlie_did]); prepare_proposal(alice_ring); @@ -326,10 +326,10 @@ pub fn gc_vmo() -> Origin { } fn changing_vote_threshold_works_we() { - let alice_signer = Origin::signed(AccountKeyring::Alice.to_account_id()); - let alice_did = register_keyring_account(AccountKeyring::Alice).unwrap(); - let bob_signer = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_did = register_keyring_account(AccountKeyring::Bob).unwrap(); + let alice_signer = Origin::signed(Sr25519Keyring::Alice.to_account_id()); + let alice_did = register_keyring_account(Sr25519Keyring::Alice).unwrap(); + let bob_signer = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_did = register_keyring_account(Sr25519Keyring::Bob).unwrap(); set_members(vec![alice_did, bob_did]); assert_eq!( @@ -367,16 +367,16 @@ fn rage_quit() { fn rage_quit_we() { // 1. Add members to committee - let alice_ring = AccountKeyring::Alice; + let alice_ring = Sr25519Keyring::Alice; let alice_signer = Origin::signed(alice_ring.to_account_id()); - let alice_did = register_keyring_account(AccountKeyring::Alice).unwrap(); - let bob_signer = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_did = register_keyring_account(AccountKeyring::Bob).unwrap(); - let charlie_signer = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let charlie_did = register_keyring_account(AccountKeyring::Charlie).unwrap(); - let dave_did = register_keyring_account(AccountKeyring::Dave).unwrap(); - let ferdie_signer = Origin::signed(AccountKeyring::Ferdie.to_account_id()); - let ferdie_did = register_keyring_account(AccountKeyring::Ferdie).unwrap(); + let alice_did = register_keyring_account(Sr25519Keyring::Alice).unwrap(); + let bob_signer = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_did = register_keyring_account(Sr25519Keyring::Bob).unwrap(); + let charlie_signer = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let charlie_did = register_keyring_account(Sr25519Keyring::Charlie).unwrap(); + let dave_did = register_keyring_account(Sr25519Keyring::Dave).unwrap(); + let ferdie_signer = Origin::signed(Sr25519Keyring::Ferdie.to_account_id()); + let ferdie_did = register_keyring_account(Sr25519Keyring::Ferdie).unwrap(); set_members(vec![alice_did, bob_did, charlie_did, dave_did]); assert_mem_len(4); @@ -487,8 +487,8 @@ fn rage_quit_we() { #[test] fn release_coordinator() { let committee = [ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), ] .to_vec(); ExtBuilder::default() @@ -499,11 +499,11 @@ fn release_coordinator() { } fn release_coordinator_we() { - let alice = Origin::signed(AccountKeyring::Alice.to_account_id()); - let alice_id = get_identity_id(AccountKeyring::Alice).expect("Alice is part of the committee"); - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_id = get_identity_id(AccountKeyring::Bob).expect("Bob is part of the committee"); - let charlie_id = register_keyring_account(AccountKeyring::Charlie).unwrap(); + let alice = Origin::signed(Sr25519Keyring::Alice.to_account_id()); + let alice_id = get_identity_id(Sr25519Keyring::Alice).expect("Alice is part of the committee"); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_id = get_identity_id(Sr25519Keyring::Bob).expect("Bob is part of the committee"); + let charlie_id = register_keyring_account(Sr25519Keyring::Charlie).unwrap(); assert_eq!( ReleaseCoordinator::::get(), @@ -543,8 +543,8 @@ fn release_coordinator_we() { #[test] fn release_coordinator_majority() { let committee = [ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), ] .to_vec(); ExtBuilder::default() @@ -555,9 +555,9 @@ fn release_coordinator_majority() { } fn release_coordinator_majority_we() { - let alice = Origin::signed(AccountKeyring::Alice.to_account_id()); - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_id = get_identity_id(AccountKeyring::Bob).expect("Bob is part of the committee"); + let alice = Origin::signed(Sr25519Keyring::Alice.to_account_id()); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_id = get_identity_id(Sr25519Keyring::Bob).expect("Bob is part of the committee"); assert_eq!( ReleaseCoordinator::::get(), @@ -594,9 +594,9 @@ fn release_coordinator_majority_we() { #[test] fn enact() { let committee = vec![ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id(), - AccountKeyring::Charlie.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), + Sr25519Keyring::Charlie.to_account_id(), ]; ExtBuilder::default() .governance_committee(committee) @@ -607,13 +607,13 @@ fn enact() { fn enact_we() { System::set_block_number(1); - let alice = AccountKeyring::Alice; + let alice = Sr25519Keyring::Alice; let alice_signer = Origin::signed(alice.to_account_id()); let _ = register_keyring_account(alice); - let bob = AccountKeyring::Bob.to_account_id(); - let _ = register_keyring_account(AccountKeyring::Bob); - let dave = AccountKeyring::Dave.to_account_id(); - let _ = register_keyring_account(AccountKeyring::Dave); + let bob = Sr25519Keyring::Bob.to_account_id(); + let _ = register_keyring_account(Sr25519Keyring::Bob); + let dave = Sr25519Keyring::Dave.to_account_id(); + let _ = register_keyring_account(Sr25519Keyring::Dave); // 1. Create the PIP. prepare_proposal(alice); @@ -638,10 +638,10 @@ fn mesh_1065_regression_test() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let alice_did = register_keyring_account(AccountKeyring::Alice).unwrap(); - let bob_signer = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_did = register_keyring_account(AccountKeyring::Bob).unwrap(); - let charlie_did = register_keyring_account(AccountKeyring::Charlie).unwrap(); + let alice_did = register_keyring_account(Sr25519Keyring::Alice).unwrap(); + let bob_signer = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_did = register_keyring_account(Sr25519Keyring::Bob).unwrap(); + let charlie_did = register_keyring_account(Sr25519Keyring::Charlie).unwrap(); set_members(vec![alice_did, bob_did, charlie_did]); assert_mem_len(3); @@ -684,13 +684,13 @@ fn expiry_works() { assert_ok!(Committee::set_expires_after(gc_vmo(), MaybeBlock::Some(13))); - let alice_ring = AccountKeyring::Alice; + let alice_ring = Sr25519Keyring::Alice; let alice_signer = Origin::signed(alice_ring.to_account_id()); let alice_did = register_keyring_account(alice_ring).unwrap(); - let _bob_signer = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_did = register_keyring_account(AccountKeyring::Bob).unwrap(); - let _charlie_signer = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let charlie_did = register_keyring_account(AccountKeyring::Charlie).unwrap(); + let _bob_signer = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_did = register_keyring_account(Sr25519Keyring::Bob).unwrap(); + let _charlie_signer = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let charlie_did = register_keyring_account(Sr25519Keyring::Charlie).unwrap(); set_members(vec![alice_did, bob_did, charlie_did]); prepare_proposal(alice_ring); diff --git a/pallets/runtime/tests/src/compliance_manager_test.rs b/pallets/runtime/tests/src/compliance_manager_test.rs index 478dbb6ca1..dbd633cc0f 100644 --- a/pallets/runtime/tests/src/compliance_manager_test.rs +++ b/pallets/runtime/tests/src/compliance_manager_test.rs @@ -14,7 +14,7 @@ use polymesh_primitives::{ CountryCode, IdentityId, PortfolioId, Scope, Signatory, TargetIdentity, TrustedFor, WeightMeter, }; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use crate::asset_pallet::setup::ISSUE_AMOUNT; @@ -88,9 +88,9 @@ fn should_add_and_verify_compliance_requirement() { fn should_add_and_verify_compliance_requirement_we() { // 0. Create accounts let root = Origin::from(frame_system::RawOrigin::Root); - let owner = User::new(AccountKeyring::Alice); - let token_rec = User::new(AccountKeyring::Charlie); - let cdd = User::new(AccountKeyring::Eve); + let owner = User::new(Sr25519Keyring::Alice); + let token_rec = User::new(Sr25519Keyring::Charlie); + let cdd = User::new(Sr25519Keyring::Eve); assert_ok!(CDDGroup::reset_members(root, vec![cdd.did])); // Create & mint token @@ -98,9 +98,9 @@ fn should_add_and_verify_compliance_requirement_we() { Balances::make_free_balance_be(&owner.acc(), 1_000_000); - let claim_issuer = User::new(AccountKeyring::Bob); + let claim_issuer = User::new(Sr25519Keyring::Bob); Balances::make_free_balance_be(&claim_issuer.acc(), 1_000_000); - let ferdie = User::new(AccountKeyring::Ferdie); + let ferdie = User::new(Sr25519Keyring::Ferdie); let claim = Claim::Blocked(asset_id.into()); assert_ok!(Identity::add_claim( @@ -432,7 +432,7 @@ fn should_replace_asset_compliance() { } fn should_replace_asset_compliance_we() { - let owner = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Alice); // Create & mint token let asset_id = create_and_issue_sample_asset(&owner); @@ -475,7 +475,7 @@ fn test_dedup_replace_asset_compliance() { } fn test_dedup_replace_asset_compliance_we() { - let owner = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Alice); // Create & mint token let asset_id = create_and_issue_sample_asset(&owner); @@ -523,7 +523,7 @@ fn should_reset_asset_compliance() { } fn should_reset_asset_compliance_we() { - let owner = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Alice); // Create & mint token let asset_id = create_and_issue_sample_asset(&owner); @@ -548,15 +548,15 @@ fn should_reset_asset_compliance_we() { #[test] fn pause_resume_asset_compliance() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(pause_resume_asset_compliance_we); } fn pause_resume_asset_compliance_we() { // 0. Create accounts - let owner = User::new(AccountKeyring::Alice); - let receiver = User::new(AccountKeyring::Charlie); + let owner = User::new(Sr25519Keyring::Alice); + let receiver = User::new(Sr25519Keyring::Charlie); // 1. Create & mint token let asset_id = create_and_issue_sample_asset(&owner); @@ -616,11 +616,11 @@ fn should_successfully_add_and_use_default_issuers() { fn should_successfully_add_and_use_default_issuers_we() { // 0. Create accounts let root = Origin::from(frame_system::RawOrigin::Root); - let owner = User::new(AccountKeyring::Alice); - let trusted_issuer = User::new(AccountKeyring::Charlie); - let receiver = User::new(AccountKeyring::Dave); - let eve = User::new(AccountKeyring::Eve); - let ferdie = User::new(AccountKeyring::Ferdie); + let owner = User::new(Sr25519Keyring::Alice); + let trusted_issuer = User::new(Sr25519Keyring::Charlie); + let receiver = User::new(Sr25519Keyring::Dave); + let eve = User::new(Sr25519Keyring::Eve); + let ferdie = User::new(Sr25519Keyring::Ferdie); assert_ok!(CDDGroup::reset_members(root, vec![trusted_issuer.did])); @@ -734,10 +734,10 @@ fn should_modify_vector_of_trusted_issuer() { fn should_modify_vector_of_trusted_issuer_we() { // 0. Create accounts let root = Origin::from(frame_system::RawOrigin::Root); - let owner = User::new(AccountKeyring::Alice); - let trusted_issuer_1 = User::new(AccountKeyring::Charlie); - let trusted_issuer_2 = User::new(AccountKeyring::Ferdie); - let receiver = User::new(AccountKeyring::Dave); + let owner = User::new(Sr25519Keyring::Alice); + let trusted_issuer_1 = User::new(Sr25519Keyring::Charlie); + let trusted_issuer_2 = User::new(Sr25519Keyring::Ferdie); + let receiver = User::new(Sr25519Keyring::Dave); // Providing a random DID to root but in real world Root should posses a DID assert_ok!(CDDGroup::reset_members( @@ -895,15 +895,15 @@ fn should_modify_vector_of_trusted_issuer_we() { #[test] fn jurisdiction_asset_compliance() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(jurisdiction_asset_compliance_we); } fn jurisdiction_asset_compliance_we() { // 0. Create accounts - let owner = User::new(AccountKeyring::Alice); - let cdd = User::new(AccountKeyring::Bob); - let user = User::new(AccountKeyring::Charlie); + let owner = User::new(Sr25519Keyring::Alice); + let cdd = User::new(Sr25519Keyring::Bob); + let user = User::new(Sr25519Keyring::Charlie); // 1. Create & mint token let asset_id = create_and_issue_sample_asset(&owner); @@ -953,15 +953,15 @@ fn jurisdiction_asset_compliance_we() { #[test] fn scope_asset_compliance() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(scope_asset_compliance_we); } fn scope_asset_compliance_we() { // 0. Create accounts - let owner = User::new(AccountKeyring::Alice); - let cdd = User::new(AccountKeyring::Bob); - let user = User::new(AccountKeyring::Charlie); + let owner = User::new(Sr25519Keyring::Alice); + let cdd = User::new(Sr25519Keyring::Bob); + let user = User::new(Sr25519Keyring::Charlie); // 1. Create a token. let asset_id = create_and_issue_sample_asset(&owner); @@ -994,7 +994,7 @@ fn scope_asset_compliance_we() { #[test] fn ensure_custom_scopes_limited() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Alice); let asset_id = create_and_issue_sample_asset(&owner); let fill = Condition::from_dids( @@ -1063,15 +1063,15 @@ fn ensure_custom_scopes_limited() { #[test] fn cm_test_case_9() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::One.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::One.to_account_id()]) .build() .execute_with(cm_test_case_9_we); } /// Is any of: KYC’d, Affiliate, Accredited, Exempted fn cm_test_case_9_we() { // 0. Create accounts - let owner = User::new(AccountKeyring::Alice); - let issuer = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Alice); + let issuer = User::new(Sr25519Keyring::Bob); // 1. Create a token. let asset_id = create_and_issue_sample_asset(&owner); @@ -1094,10 +1094,10 @@ fn cm_test_case_9_we() { )); // 3. Validate behaviour. - let charlie = User::new(AccountKeyring::Charlie); - let dave = User::new(AccountKeyring::Dave); - let eve = User::new(AccountKeyring::Eve); - let ferdie = User::new(AccountKeyring::Ferdie); + let charlie = User::new(Sr25519Keyring::Charlie); + let dave = User::new(Sr25519Keyring::Dave); + let eve = User::new(Sr25519Keyring::Eve); + let ferdie = User::new(Sr25519Keyring::Ferdie); let get_compliance_report = |user: User, claim| { assert_ok!(Identity::add_claim(issuer.origin(), user.did, claim, None)); @@ -1174,7 +1174,7 @@ fn cm_test_case_9_we() { #[test] fn cm_test_case_11() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Ferdie.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Ferdie.to_account_id()]) .build() .execute_with(cm_test_case_11_we); } @@ -1182,8 +1182,8 @@ fn cm_test_case_11() { // Is any of: KYC’d, Affiliate, Accredited, Exempted, is none of: Jurisdiction=x, y, z, fn cm_test_case_11_we() { // 0. Create accounts - let owner = User::new(AccountKeyring::Alice); - let issuer = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Alice); + let issuer = User::new(Sr25519Keyring::Bob); // 1. Create a token. let asset_id = create_and_issue_sample_asset(&owner); @@ -1215,9 +1215,9 @@ fn cm_test_case_11_we() { )); // 3. Validate behaviour. - let charlie = User::new(AccountKeyring::Charlie); - let dave = User::new(AccountKeyring::Dave); - let eve = User::new(AccountKeyring::Eve); + let charlie = User::new(Sr25519Keyring::Charlie); + let dave = User::new(Sr25519Keyring::Dave); + let eve = User::new(Sr25519Keyring::Eve); // 3.1. Charlie has a 'KnowYourCustomer' Claim. assert_ok!(Identity::add_claim( @@ -1297,7 +1297,7 @@ fn cm_test_case_11_we() { #[test] fn cm_test_case_13() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Ferdie.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Ferdie.to_account_id()]) .build() .execute_with(cm_test_case_13_we); } @@ -1305,8 +1305,8 @@ fn cm_test_case_13() { // Must be KYC’d, is any of: Affiliate, Exempted, Accredited, is none of: Jurisdiction=x, y, z, etc. fn cm_test_case_13_we() { // 0. Create accounts - let owner = User::new(AccountKeyring::Alice); - let issuer = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Alice); + let issuer = User::new(Sr25519Keyring::Bob); // 1. Create a token. let asset_id = create_and_issue_sample_asset(&owner); @@ -1341,9 +1341,9 @@ fn cm_test_case_13_we() { )); // 3. Validate behaviour. - let charlie = User::new(AccountKeyring::Charlie); - let dave = User::new(AccountKeyring::Dave); - let eve = User::new(AccountKeyring::Eve); + let charlie = User::new(Sr25519Keyring::Charlie); + let dave = User::new(Sr25519Keyring::Dave); + let eve = User::new(Sr25519Keyring::Eve); // 3.1. Charlie has a 'KnowYourCustomer' Claim BUT he does not have any of { 'Affiliate', // 'Accredited', 'Exempted'}. @@ -1441,15 +1441,15 @@ fn cm_test_case_13_we() { #[test] fn can_verify_restriction_with_primary_issuance_agent() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(can_verify_restriction_with_primary_issuance_agent_we); } fn can_verify_restriction_with_primary_issuance_agent_we() { - let owner = User::new(AccountKeyring::Alice); - let issuer = User::new(AccountKeyring::Bob); - let other = User::new(AccountKeyring::Charlie); + let owner = User::new(Sr25519Keyring::Alice); + let issuer = User::new(Sr25519Keyring::Bob); + let other = User::new(Sr25519Keyring::Charlie); // 1. Create a token. let asset_id = create_and_issue_sample_asset(&owner); @@ -1511,7 +1511,7 @@ fn should_limit_compliance_requirement_complexity() { } fn should_limit_compliance_requirements_complexity_we() { - let owner = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Alice); // 1. Create & mint token let asset_id = create_and_issue_sample_asset(&owner); @@ -1551,7 +1551,7 @@ fn should_limit_compliance_requirements_complexity_we() { )); // Complexity = 30*1 + 15*2 = 60 - let other = User::new(AccountKeyring::Bob); + let other = User::new(Sr25519Keyring::Bob); assert_noop!( ComplianceManager::add_default_trusted_claim_issuer( owner.origin(), @@ -1569,8 +1569,8 @@ fn should_limit_compliance_requirements_complexity_we() { fn check_new_return_type_of_rpc() { ExtBuilder::default().build().execute_with(|| { // 0. Create accounts - let owner = User::new(AccountKeyring::Alice); - let receiver = User::new(AccountKeyring::Charlie); + let owner = User::new(Sr25519Keyring::Alice); + let receiver = User::new(Sr25519Keyring::Charlie); // 1. Create & mint token let asset_id = create_and_issue_sample_asset(&owner); diff --git a/pallets/runtime/tests/src/contracts_test.rs b/pallets/runtime/tests/src/contracts_test.rs index c06ef71f85..e93b877c1e 100644 --- a/pallets/runtime/tests/src/contracts_test.rs +++ b/pallets/runtime/tests/src/contracts_test.rs @@ -4,7 +4,7 @@ use frame_support::{assert_err_ignore_postinfo, assert_noop, assert_ok, assert_s use polymesh_contracts::{ Api, ApiCodeHash, ApiNextUpgrade, ChainVersion, ExtrinsicId, NextUpgrade, }; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_runtime::traits::Hash; use pallet_asset::TickersOwnedByUser; @@ -60,7 +60,7 @@ fn update_call_runtime_whitelist(extrinsics: Vec<(ExtrinsicId, bool)>) { #[test] fn deploy_as_secondary_key() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); Balances::make_free_balance_be(&alice.acc(), 1_000_000 * POLY); let permissions = Permissions { @@ -107,8 +107,8 @@ fn deploy_as_secondary_key() { #[test] fn chain_extension_calls() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let ticker = Ticker::from_slice_truncated(b"A" as &[u8]); Balances::make_free_balance_be(&alice.acc(), 1_000_000 * POLY); @@ -204,7 +204,7 @@ fn deploy_as_child_identity() { let salt = vec![0xFF]; let (code, _) = chain_extension(); let hash = Hashing::hash(&code); - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); Balances::make_free_balance_be(&alice.acc(), 1_000_000 * POLY); assert_ok!(Contracts::instantiate_with_code_as_primary_key( @@ -226,7 +226,7 @@ fn deploy_as_child_identity() { #[test] fn upgrade_api_unauthorized_caller() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let api = Api::new(*b"POLY", 6); let chain_version = ChainVersion::new(6, 0); let api_code_hash = ApiCodeHash { diff --git a/pallets/runtime/tests/src/corporate_actions_test.rs b/pallets/runtime/tests/src/corporate_actions_test.rs index 7ee005f0d1..ae71d37ace 100644 --- a/pallets/runtime/tests/src/corporate_actions_test.rs +++ b/pallets/runtime/tests/src/corporate_actions_test.rs @@ -34,7 +34,7 @@ use polymesh_primitives::{ Moment, PortfolioId, PortfolioNumber, Scope, Signatory, TrustedFor, TrustedIssuer, }; use sp_arithmetic::Permill; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use std::convert::TryInto; type System = frame_system::Pallet; @@ -63,7 +63,7 @@ type Details = pallet_corporate_actions::Details; type CAIdSequence = pallet_corporate_actions::CAIdSequence; type CorporateActions = pallet_corporate_actions::CorporateActions; -const CDDP: AccountKeyring = AccountKeyring::Eve; +const CDDP: Sr25519Keyring = Sr25519Keyring::Eve; const P0: Permill = Permill::zero(); const P25: Permill = Permill::from_percent(25); @@ -79,9 +79,9 @@ fn test(logic: impl FnOnce(AssetId, [User; 3])) { System::set_block_number(1); // Create some users. - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); // Create the asset. let asset_id = create_and_issue_sample_asset(&alice); @@ -476,7 +476,7 @@ fn set_did_withholding_tax_works() { #[test] fn set_max_details_length_only_root() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice).origin(); + let alice = User::new(Sr25519Keyring::Alice).origin(); assert_noop!( CA::set_max_details_length(alice, 5), DispatchError::BadOrigin, @@ -2029,7 +2029,7 @@ fn dist_claim_misc_bad() { owner.origin(), asset_id2 )); - let dave = User::new(AccountKeyring::Dave); + let dave = User::new(Sr25519Keyring::Dave); assert_ok!(ComplianceManager::add_compliance_requirement( owner.origin(), asset_id2, @@ -2084,7 +2084,7 @@ fn dist_claim_not_targeted() { #[test] fn dist_claim_works() { currency_test(|asset_id, currency, [owner, foo, bar]| { - let baz = User::new(AccountKeyring::Dave); + let baz = User::new(Sr25519Keyring::Dave); // Transfer 500 to `foo`, 1000 to `bar`, and `500` to `baz`. transfer(&asset_id, owner, foo); @@ -2172,7 +2172,7 @@ fn dist_claim_works() { #[test] fn dist_claim_rounding_indivisible() { currency_test(|asset_id, currency, [owner, foo, bar]| { - let baz = User::new(AccountKeyring::Dave); + let baz = User::new(Sr25519Keyring::Dave); // Make `currency` indivisible. // This the crucial aspect different about this test. diff --git a/pallets/runtime/tests/src/ext_builder.rs b/pallets/runtime/tests/src/ext_builder.rs index cf2be72bce..b06e6e7f87 100644 --- a/pallets/runtime/tests/src/ext_builder.rs +++ b/pallets/runtime/tests/src/ext_builder.rs @@ -1,5 +1,11 @@ -use crate::TestStorage; -use frame_support::dispatch::Weight; +use sp_std::prelude::Vec; +use sp_std::{cell::RefCell, convert::From, iter}; + +use frame_support::weights::Weight; +use sp_io::TestExternalities; +use sp_keyring::Sr25519Keyring; +use sp_runtime::{BuildStorage, Storage}; + use pallet_asset::{self as asset, TickerRegistrationConfig}; use pallet_balances as balances; use pallet_committee as committee; @@ -7,15 +13,11 @@ use pallet_group as group; use pallet_identity as identity; use pallet_pips as pips; use polymesh_common_utilities::protocol_fee::ProtocolOp; +use polymesh_primitives::identity_id::GenesisIdentityRecord; use polymesh_primitives::{constants::currency::POLY, SystematicIssuers, GC_DID}; -use polymesh_primitives::{ - identity_id::GenesisIdentityRecord, AccountId, IdentityId, PosRatio, SecondaryKey, -}; -use sp_io::TestExternalities; -use sp_keyring::AccountKeyring; -use sp_runtime::{BuildStorage, Storage}; -use sp_std::prelude::Vec; -use sp_std::{cell::RefCell, convert::From, iter}; +use polymesh_primitives::{AccountId, IdentityId, PosRatio, SecondaryKey}; + +use crate::TestStorage; /// Identity information. #[derive(Clone, PartialEq, Debug)] @@ -239,24 +241,24 @@ impl ExtBuilder { if self.monied { vec![ ( - AccountKeyring::Alice.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), 1_000 * POLY * self.balance_factor, ), ( - AccountKeyring::Bob.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), 2_000 * POLY * self.balance_factor, ), ( - AccountKeyring::Charlie.to_account_id(), + Sr25519Keyring::Charlie.to_account_id(), 3_000 * POLY * self.balance_factor, ), ( - AccountKeyring::Dave.to_account_id(), + Sr25519Keyring::Dave.to_account_id(), 4_000 * POLY * self.balance_factor, ), // CDD Accounts - (AccountKeyring::Eve.to_account_id(), 1_000_000), - (AccountKeyring::Ferdie.to_account_id(), 1_000_000), + (Sr25519Keyring::Eve.to_account_id(), 1_000_000), + (Sr25519Keyring::Ferdie.to_account_id(), 1_000_000), ] } else { vec![] @@ -315,6 +317,7 @@ impl ExtBuilder { fn build_balances_genesis(&self, storage: &mut Storage) { balances::GenesisConfig:: { balances: self.make_balances(), + dev_accounts: None, } .assimilate_storage(storage) .unwrap(); diff --git a/pallets/runtime/tests/src/external_agents_test.rs b/pallets/runtime/tests/src/external_agents_test.rs index 3891375db8..e5d40dfee9 100644 --- a/pallets/runtime/tests/src/external_agents_test.rs +++ b/pallets/runtime/tests/src/external_agents_test.rs @@ -5,7 +5,7 @@ use pallet_permissions::StoreCallMetadata; use polymesh_primitives::agent::{AGId, AgentGroup}; use polymesh_primitives::asset::AssetId; use polymesh_primitives::{AuthorizationData, ExtrinsicPermissions, PalletPermissions, Signatory}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use crate::asset_pallet::setup::create_and_issue_sample_asset; use crate::ext_builder::ExtBuilder; @@ -59,7 +59,7 @@ fn add_become_agent( #[test] fn create_group_set_perms_works() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Alice); assert_noop!( ExternalAgents::create_group(owner.origin(), [0; 16].into(), <_>::default()), @@ -88,7 +88,7 @@ fn create_group_set_perms_works() { }); // Still, `other` doesn't have agent permissions. - let other = User::new(AccountKeyring::Bob); + let other = User::new(Sr25519Keyring::Bob); let other_create = |perms| ExternalAgents::create_group(other.origin(), asset_id, perms); let other_set = |id, perms| ExternalAgents::set_group_permissions(other.origin(), asset_id, id, perms); @@ -141,8 +141,8 @@ fn create_group_set_perms_works() { #[test] fn remove_abdicate_change_works() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Alice); - let other = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Alice); + let other = User::new(Sr25519Keyring::Bob); // No asset made, so cannot remove non-agent. assert_noop!( @@ -249,10 +249,10 @@ fn remove_abdicate_change_works() { #[test] fn add_works() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); - let dave = User::new(AccountKeyring::Dave); + let owner = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); + let dave = User::new(Sr25519Keyring::Dave); let asset_id = create_and_issue_sample_asset(&owner); let check_num = |n| assert_eq!(NumFullAgents::get(asset_id), n); @@ -315,10 +315,10 @@ fn add_works() { #[test] fn agent_of_mapping_works() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); - let dave = User::new(AccountKeyring::Dave); + let owner = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); + let dave = User::new(Sr25519Keyring::Dave); let mut assets = (b'A'..b'Z') .map(|_| create_and_issue_sample_asset(&owner)) .collect::>(); @@ -381,8 +381,8 @@ fn agent_of_mapping_works() { #[test] fn atredis_multi_group_perms() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Alice); - let other = User::new(AccountKeyring::Bob); + let owner = User::new(Sr25519Keyring::Alice); + let other = User::new(Sr25519Keyring::Bob); let asset_id = create_and_issue_sample_asset(&owner); // Helpers for creating and setting permissions. diff --git a/pallets/runtime/tests/src/fee_details.rs b/pallets/runtime/tests/src/fee_details.rs index 9901689692..2c3269534c 100644 --- a/pallets/runtime/tests/src/fee_details.rs +++ b/pallets/runtime/tests/src/fee_details.rs @@ -1,5 +1,5 @@ use frame_support::assert_noop; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_runtime::transaction_validity::InvalidTransaction; use pallet_balances as balances; @@ -21,18 +21,18 @@ type Origin = ::RuntimeOrigin; #[test] fn cdd_checks() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Bob.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Bob.to_account_id()]) .monied(true) .build() .execute_with(|| { // alice does not have cdd - make_account_without_cdd(AccountKeyring::Alice.to_account_id()).unwrap(); - let alice_account = AccountKeyring::Alice.to_account_id(); + make_account_without_cdd(Sr25519Keyring::Alice.to_account_id()).unwrap(); + let alice_account = Sr25519Keyring::Alice.to_account_id(); let alice_signatory = Signatory::Account(alice_account.clone()); // charlie has valid cdd - let _ = register_keyring_account(AccountKeyring::Charlie).unwrap(); - let charlie_account = AccountKeyring::Charlie.to_account_id(); + let _ = register_keyring_account(Sr25519Keyring::Charlie).unwrap(); + let charlie_account = Sr25519Keyring::Charlie.to_account_id(); let charlie_signatory = Signatory::Account(charlie_account.clone()); assert_eq!( @@ -42,7 +42,7 @@ fn cdd_checks() { }), &alice_account ), - Ok(Some(AccountKeyring::Alice.to_account_id())) + Ok(Some(Sr25519Keyring::Alice.to_account_id())) ); // call to accept being a multisig signer should fail when invalid auth @@ -68,7 +68,7 @@ fn cdd_checks() { }), &alice_account ), - Ok(Some(AccountKeyring::Charlie.to_account_id())) + Ok(Some(Sr25519Keyring::Charlie.to_account_id())) ); assert_eq!( @@ -80,7 +80,7 @@ fn cdd_checks() { }), &alice_account ), - Ok(Some(AccountKeyring::Charlie.to_account_id())) + Ok(Some(Sr25519Keyring::Charlie.to_account_id())) ); assert_eq!( @@ -92,7 +92,7 @@ fn cdd_checks() { }), &alice_account ), - Ok(Some(AccountKeyring::Alice.to_account_id())) + Ok(Some(Sr25519Keyring::Alice.to_account_id())) ); // check that authorisation can be removed correctly @@ -112,7 +112,7 @@ fn cdd_checks() { }), &alice_account ), - Ok(Some(AccountKeyring::Alice.to_account_id())) + Ok(Some(Sr25519Keyring::Alice.to_account_id())) ); assert_eq!( @@ -124,7 +124,7 @@ fn cdd_checks() { }), &alice_account ), - Ok(Some(AccountKeyring::Charlie.to_account_id())) + Ok(Some(Sr25519Keyring::Charlie.to_account_id())) ); // create an authorisation where the target has a CDD claim and the issuer does not @@ -144,7 +144,7 @@ fn cdd_checks() { }), &charlie_account ), - Ok(Some(AccountKeyring::Alice.to_account_id())) + Ok(Some(Sr25519Keyring::Alice.to_account_id())) ); // call to remove authorisation with caller paying should succeed as caller has CDD @@ -157,7 +157,7 @@ fn cdd_checks() { }), &charlie_account ), - Ok(Some(AccountKeyring::Charlie.to_account_id())) + Ok(Some(Sr25519Keyring::Charlie.to_account_id())) ); // call to accept being a multisig signer should succeed when authorizer has a valid cdd but signer key does not @@ -176,7 +176,7 @@ fn cdd_checks() { }), &alice_account ), - Ok(Some(AccountKeyring::Charlie.to_account_id())) + Ok(Some(Sr25519Keyring::Charlie.to_account_id())) ); // normal tx with cdd should succeed @@ -187,7 +187,7 @@ fn cdd_checks() { }), &charlie_account ), - Ok(Some(AccountKeyring::Charlie.to_account_id())) + Ok(Some(Sr25519Keyring::Charlie.to_account_id())) ); }); } diff --git a/pallets/runtime/tests/src/group_test.rs b/pallets/runtime/tests/src/group_test.rs index 3d879b4b29..5ea41fdda8 100644 --- a/pallets/runtime/tests/src/group_test.rs +++ b/pallets/runtime/tests/src/group_test.rs @@ -8,7 +8,7 @@ use polymesh_primitives::traits::group::GroupTrait; use polymesh_primitives::IdentityId; use frame_support::{assert_noop, assert_ok, dispatch::DispatchError}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; type CommitteeGroup = group::Pallet; type Origin = ::RuntimeOrigin; @@ -18,8 +18,8 @@ type Identity = identity::Pallet; fn query_membership_works() { // TODO(Centril): This `let` is duplicated across the file. Let's dedup. let committee = [ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), ] .to_vec(); @@ -28,8 +28,8 @@ fn query_membership_works() { .build() .execute_with(|| { let committee = [ - get_identity_id(AccountKeyring::Bob).unwrap(), - get_identity_id(AccountKeyring::Alice).unwrap(), + get_identity_id(Sr25519Keyring::Bob).unwrap(), + get_identity_id(Sr25519Keyring::Alice).unwrap(), ] .to_vec(); @@ -39,7 +39,7 @@ fn query_membership_works() { #[test] fn add_member_works() { - let committee = [AccountKeyring::Alice.to_account_id()].to_vec(); + let committee = [Sr25519Keyring::Alice.to_account_id()].to_vec(); ExtBuilder::default() .governance_committee(committee) .build() @@ -48,14 +48,14 @@ fn add_member_works() { fn add_member_works_we() { let root = Origin::from(frame_system::RawOrigin::Root); - let non_root = Origin::signed(AccountKeyring::Bob.to_account_id()); + let non_root = Origin::signed(Sr25519Keyring::Bob.to_account_id()); assert_noop!( CommitteeGroup::add_member(non_root, IdentityId::from(3)), DispatchError::BadOrigin ); - let alice_id = get_identity_id(AccountKeyring::Alice).unwrap(); + let alice_id = get_identity_id(Sr25519Keyring::Alice).unwrap(); assert_noop!( CommitteeGroup::add_member(root.clone(), alice_id), @@ -74,12 +74,12 @@ fn add_member_works_we() { #[test] fn active_limit_works() { ExtBuilder::default() - .governance_committee([AccountKeyring::Alice.to_account_id()].to_vec()) + .governance_committee([Sr25519Keyring::Alice.to_account_id()].to_vec()) .build() .execute_with(|| { let root = Origin::from(frame_system::RawOrigin::Root); - let alice_signer = Origin::signed(AccountKeyring::Alice.to_account_id()); - let alice_id = get_identity_id(AccountKeyring::Alice).unwrap(); + let alice_signer = Origin::signed(Sr25519Keyring::Alice.to_account_id()); + let alice_id = get_identity_id(Sr25519Keyring::Alice).unwrap(); assert_ok!(CommitteeGroup::add_member( root.clone(), @@ -90,8 +90,8 @@ fn active_limit_works() { vec![alice_id, IdentityId::from(4)] ); - let bob_id = register_keyring_account(AccountKeyring::Bob).unwrap(); - let charlie_id = register_keyring_account(AccountKeyring::Charlie).unwrap(); + let bob_id = register_keyring_account(Sr25519Keyring::Bob).unwrap(); + let charlie_id = register_keyring_account(Sr25519Keyring::Charlie).unwrap(); assert_ok!(CommitteeGroup::set_active_members_limit(root.clone(), 1)); assert_noop!( CommitteeGroup::add_member(root.clone(), bob_id), @@ -151,8 +151,8 @@ fn active_limit_works() { #[test] fn remove_member_works() { let committee = [ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), ] .to_vec(); @@ -164,7 +164,7 @@ fn remove_member_works() { fn remove_member_works_we() { let root = Origin::from(frame_system::RawOrigin::Root); - let non_root = Origin::signed(AccountKeyring::Charlie.to_account_id()); + let non_root = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); assert_noop!( CommitteeGroup::remove_member(non_root, IdentityId::from(3)), @@ -174,8 +174,8 @@ fn remove_member_works_we() { CommitteeGroup::remove_member(root.clone(), IdentityId::from(5)), group::Error::::NoSuchMember ); - let alice_id = get_identity_id(AccountKeyring::Alice).unwrap(); - let bob_id = get_identity_id(AccountKeyring::Bob).unwrap(); + let alice_id = get_identity_id(Sr25519Keyring::Alice).unwrap(); + let bob_id = get_identity_id(Sr25519Keyring::Bob).unwrap(); assert_ok!(CommitteeGroup::remove_member(root, alice_id)); assert_eq!(CommitteeGroup::get_members(), [bob_id].to_vec()); } @@ -183,8 +183,8 @@ fn remove_member_works_we() { #[test] fn swap_member_works() { let committee = [ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), ] .to_vec(); @@ -196,10 +196,10 @@ fn swap_member_works() { fn swap_member_works_we() { let root = Origin::from(frame_system::RawOrigin::Root); - let non_root = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let alice_id = get_identity_id(AccountKeyring::Alice).unwrap(); - let bob_id = get_identity_id(AccountKeyring::Bob).unwrap(); - let charlie_id = register_keyring_account(AccountKeyring::Charlie).unwrap(); + let non_root = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let alice_id = get_identity_id(Sr25519Keyring::Alice).unwrap(); + let bob_id = get_identity_id(Sr25519Keyring::Bob).unwrap(); + let charlie_id = register_keyring_account(Sr25519Keyring::Charlie).unwrap(); assert_noop!( CommitteeGroup::swap_member(non_root, alice_id, IdentityId::from(5)), @@ -226,8 +226,8 @@ fn swap_member_works_we() { #[test] fn reset_members_works() { let committee = [ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), ] .to_vec(); ExtBuilder::default() @@ -238,7 +238,7 @@ fn reset_members_works() { fn reset_members_works_we() { let root = Origin::from(frame_system::RawOrigin::Root); - let non_root = Origin::signed(AccountKeyring::Bob.to_account_id()); + let non_root = Origin::signed(Sr25519Keyring::Bob.to_account_id()); let new_committee = (4..=6).map(IdentityId::from).collect::>(); assert_noop!( CommitteeGroup::reset_members(non_root, new_committee.clone()), @@ -257,14 +257,14 @@ fn rage_quit_we() { let root = Origin::from(frame_system::RawOrigin::Root); // 1. Add members to committee - let alice_signer = Origin::signed(AccountKeyring::Alice.to_account_id()); - let alice_did = register_keyring_account(AccountKeyring::Alice).unwrap(); - let bob_signer = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_did = register_keyring_account(AccountKeyring::Bob).unwrap(); - let charlie_signer = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let charlie_did = register_keyring_account(AccountKeyring::Charlie).unwrap(); - let ferdie_signer = Origin::signed(AccountKeyring::Ferdie.to_account_id()); - let ferdie_did = register_keyring_account(AccountKeyring::Ferdie).unwrap(); + let alice_signer = Origin::signed(Sr25519Keyring::Alice.to_account_id()); + let alice_did = register_keyring_account(Sr25519Keyring::Alice).unwrap(); + let bob_signer = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_did = register_keyring_account(Sr25519Keyring::Bob).unwrap(); + let charlie_signer = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let charlie_did = register_keyring_account(Sr25519Keyring::Charlie).unwrap(); + let ferdie_signer = Origin::signed(Sr25519Keyring::Ferdie.to_account_id()); + let ferdie_did = register_keyring_account(Sr25519Keyring::Ferdie).unwrap(); // 0. Threshold is 2/3 let committee = vec![alice_did, bob_did, charlie_did]; @@ -306,9 +306,9 @@ fn disable_member() { fn disable_member_we() { let root = Origin::from(frame_system::RawOrigin::Root); - let alice_id = register_keyring_account(AccountKeyring::Alice).unwrap(); - let bob_id = register_keyring_account(AccountKeyring::Bob).unwrap(); - let charlie_id = register_keyring_account(AccountKeyring::Charlie).unwrap(); + let alice_id = register_keyring_account(Sr25519Keyring::Alice).unwrap(); + let bob_id = register_keyring_account(Sr25519Keyring::Bob).unwrap(); + let charlie_id = register_keyring_account(Sr25519Keyring::Charlie).unwrap(); let mut committee = vec![alice_id, bob_id, charlie_id]; committee.sort(); diff --git a/pallets/runtime/tests/src/identity_test.rs b/pallets/runtime/tests/src/identity_test.rs index 3b2aae6fb5..b6b85850b0 100644 --- a/pallets/runtime/tests/src/identity_test.rs +++ b/pallets/runtime/tests/src/identity_test.rs @@ -33,7 +33,7 @@ use polymesh_primitives::{ }; use polymesh_runtime_develop::runtime::{CddHandler, RuntimeCall}; use sp_core::H512; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_std::iter; use std::convert::From; @@ -107,12 +107,12 @@ macro_rules! assert_add_cdd_claim { #[test] fn only_primary_or_secondary_keys_can_authenticate_as_an_identity() { ExtBuilder::default().monied(true).build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); // Add charlie's key as a secondary key of bob. - let charlie = User::new_with(bob.did, AccountKeyring::Charlie); + let charlie = User::new_with(bob.did, Sr25519Keyring::Charlie); add_secondary_key(bob.did, charlie.acc()); // Check primary key. @@ -134,7 +134,7 @@ fn only_primary_or_secondary_keys_can_authenticate_as_an_identity() { #[test] fn gc_add_remove_cdd_claim() { ExtBuilder::default().build().execute_with(|| { - let target = User::new(AccountKeyring::Charlie); + let target = User::new(Sr25519Keyring::Charlie); let fetch = || Identity::fetch_claim(target.did, ClaimType::CustomerDueDiligence, GC_DID, None); @@ -159,9 +159,9 @@ fn gc_add_remove_cdd_claim() { #[test] fn revoking_claims() { ExtBuilder::default().build().execute_with(|| { - let _owner = User::new(AccountKeyring::Alice); - let _issuer = User::new(AccountKeyring::Bob); - let claim_issuer = User::new(AccountKeyring::Charlie); + let _owner = User::new(Sr25519Keyring::Alice); + let _issuer = User::new(Sr25519Keyring::Bob); + let claim_issuer = User::new(Sr25519Keyring::Charlie); let scope = Scope::from(IdentityId::from(0)); let fetch = || { @@ -192,9 +192,9 @@ fn revoking_claims() { #[test] fn revoking_batch_claims() { ExtBuilder::default().build().execute_with(|| { - let _owner = User::new(AccountKeyring::Alice); - let _issuer = User::new(AccountKeyring::Bob); - let claim_issuer = User::new(AccountKeyring::Charlie); + let _owner = User::new(Sr25519Keyring::Alice); + let _issuer = User::new(Sr25519Keyring::Bob); + let claim_issuer = User::new(Sr25519Keyring::Charlie); let scope = Scope::from(IdentityId::from(0)); let add = |claim, scope| { @@ -232,9 +232,9 @@ fn only_primary_key_can_add_secondary_key_permissions() { .execute_with(&only_primary_key_can_add_secondary_key_permissions_with_externalities); } fn only_primary_key_can_add_secondary_key_permissions_with_externalities() { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); - let charlie = User::new_with(alice.did, AccountKeyring::Charlie); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); + let charlie = User::new_with(alice.did, Sr25519Keyring::Charlie); add_secondary_key(alice.did, charlie.acc()); add_secondary_key(alice.did, bob.acc()); @@ -268,8 +268,8 @@ fn add_permissions_to_multiple_tokens() { .execute_with(&do_add_permissions_to_multiple_tokens); } fn do_add_permissions_to_multiple_tokens() { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); // Add bob with default permissions. add_secondary_key(alice.did, bob.acc()); @@ -308,8 +308,8 @@ fn do_add_permissions_to_multiple_tokens() { #[test] fn set_secondary_key_permissions_with_bad_perms() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); add_secondary_key(alice.did, bob.acc()); test_with_bad_perms(alice.did, |perms| { assert_too_long!(Identity::set_secondary_key_permissions( @@ -331,11 +331,11 @@ fn freeze_secondary_keys_test() { } fn freeze_secondary_keys_with_externalities() { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let [bob, charlie, dave] = [ - AccountKeyring::Bob, - AccountKeyring::Charlie, - AccountKeyring::Dave, + Sr25519Keyring::Bob, + Sr25519Keyring::Charlie, + Sr25519Keyring::Dave, ] .map(|r| User::new_with(alice.did, r)); @@ -385,9 +385,9 @@ fn remove_frozen_secondary_keys_test() { } fn remove_frozen_secondary_keys_with_externalities() { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); - let charlie = User::new_with(alice.did, AccountKeyring::Charlie); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); + let charlie = User::new_with(alice.did, Sr25519Keyring::Charlie); // Add secondary keys. add_secondary_key(alice.did, bob.acc()); @@ -418,13 +418,13 @@ fn frozen_secondary_keys_cdd_verification_test() { fn frozen_secondary_keys_cdd_verification_test_we() { // 0. Create identity for Alice and secondary key from Bob. - let alice = AccountKeyring::Alice.to_account_id(); - let bob = AccountKeyring::Bob.to_account_id(); - let charlie = AccountKeyring::Charlie.to_account_id(); + let alice = Sr25519Keyring::Alice.to_account_id(); + let bob = Sr25519Keyring::Bob.to_account_id(); + let charlie = Sr25519Keyring::Charlie.to_account_id(); TestStorage::set_payer_context(Some(alice.clone())); - let alice_id = register_keyring_account(AccountKeyring::Alice).unwrap(); + let alice_id = register_keyring_account(Sr25519Keyring::Alice).unwrap(); TestStorage::set_payer_context(Some(charlie.clone())); - let _charlie_id = register_keyring_account_with_balance(AccountKeyring::Charlie, 100).unwrap(); + let _charlie_id = register_keyring_account_with_balance(Sr25519Keyring::Charlie, 100).unwrap(); assert_eq!(Balances::free_balance(charlie.clone()), 100); // 1. Add Bob as signatory to Alice ID. @@ -457,11 +457,11 @@ fn frozen_secondary_keys_cdd_verification_test_we() { // Balances::transfer_with_memo(Origin::signed(bob), charlie, 1_000, None), let payer = CddHandler::get_valid_payer( &RuntimeCall::Balances(balances::Call::transfer_with_memo { - dest: AccountKeyring::Charlie.to_account_id().into(), + dest: Sr25519Keyring::Charlie.to_account_id().into(), value: 1_000, memo: None, }), - &AccountKeyring::Bob.to_account_id(), + &Sr25519Keyring::Bob.to_account_id(), ); assert!(payer.is_ok()); @@ -490,7 +490,7 @@ fn frozen_secondary_keys_cdd_verification_test_we() { fn run_add_secondary_key_with_perm_test( add_key_with_perms: impl Fn(User, Permissions) -> DispatchResult, ) { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let perm1 = Permissions::empty(); let perm2 = Permissions::from_pallet_permissions(vec![PalletPermissions::entire_pallet( @@ -527,7 +527,7 @@ fn join_identity_as_key_with_perm_test() { fn do_join_identity_as_key_with_perm_test() { // Use `add_auth` and `join_identity_as_key` to add a secondary key. run_add_secondary_key_with_perm_test(move |alice, perms| { - let bob = User::new_with(alice.did, AccountKeyring::Bob); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); let data = AuthorizationData::JoinIdentity(perms); let auth_id = Identity::add_auth(alice.did, bob.signatory_acc(), data, None).unwrap(); Identity::join_identity_as_key(bob.origin(), auth_id) @@ -543,8 +543,8 @@ fn add_secondary_keys_with_permissions_test() { } fn do_add_secondary_keys_with_permissions_test() { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); // Add bob with default permissions add_secondary_key(alice.did, bob.acc()); @@ -613,9 +613,9 @@ fn remove_secondary_keys_test() { } fn do_remove_secondary_keys_test() { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); - let dave = User::new_with(alice.did, AccountKeyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); + let dave = User::new_with(alice.did, Sr25519Keyring::Dave); add_secondary_key(alice.did, bob.acc()); add_secondary_key(alice.did, dave.acc()); @@ -683,12 +683,12 @@ fn remove_secondary_keys_test_with_externalities() { } fn do_remove_secondary_keys_test_with_externalities() { - let bob_key = AccountKeyring::Bob.to_account_id(); - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); - let dave_key = AccountKeyring::Dave.to_account_id(); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let bob_key = Sr25519Keyring::Bob.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); + let dave_key = Sr25519Keyring::Dave.to_account_id(); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -779,12 +779,12 @@ fn leave_identity_test() { } fn leave_identity_test_with_externalities() { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); let bob_sk = SecondaryKey::new(bob.acc(), Permissions::empty()); - let dave_key = AccountKeyring::Dave.to_account_id(); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let dave_key = Sr25519Keyring::Dave.to_account_id(); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -860,11 +860,11 @@ fn enforce_uniqueness_keys_in_identity_tests() { fn enforce_uniqueness_keys_in_identity() { // Register identities. - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); // Check external signed key uniqueness. - let charlie = User::new_with(alice.did, AccountKeyring::Charlie); + let charlie = User::new_with(alice.did, Sr25519Keyring::Charlie); add_secondary_key(alice.did, charlie.acc()); let auth_id = Identity::add_auth( alice.did, @@ -900,15 +900,15 @@ fn one_step_join_id() { } fn one_step_join_id_with_ext() { - let a = User::new(AccountKeyring::Alice); + let a = User::new(Sr25519Keyring::Alice); let (authorization, expires_at) = target_id_auth(a); let auth_encoded = authorization.encode(); let keys = [ - AccountKeyring::Bob, - AccountKeyring::Charlie, - AccountKeyring::Dave, + Sr25519Keyring::Bob, + Sr25519Keyring::Charlie, + Sr25519Keyring::Dave, ]; let users @ [b, c, _] = keys.map(|r| User::new_with(a.did, r)); let secondary_keys_with_auth = secondary_keys_with_auth(&users, &auth_encoded); @@ -937,11 +937,11 @@ fn one_step_join_id_with_ext() { System::inc_account_nonce(a.acc()); set_timestamp(expires_at); - let f = User::new(AccountKeyring::Ferdie); + let f = User::new(Sr25519Keyring::Ferdie); let (ferdie_auth, _) = target_id_auth(a); let ferdie_secondary_key_with_auth = SecondaryKeyWithAuth { secondary_key: SecondaryKey::from_account_id(f.acc()).into(), - auth_signature: H512::from(AccountKeyring::Eve.sign(ferdie_auth.encode().as_slice())), + auth_signature: H512::from(Sr25519Keyring::Eve.sign(ferdie_auth.encode().as_slice())), }; assert_noop!( @@ -1003,8 +1003,8 @@ pub(crate) fn test_with_bad_perms(did: IdentityId, test: impl Fn(Permissions)) { #[test] fn add_secondary_keys_with_authorization_duplicate_keys() { ExtBuilder::default().build().execute_with(|| { - let user = User::new(AccountKeyring::Alice); - let bob = User::new_with(user.did, AccountKeyring::Bob); + let user = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(user.did, Sr25519Keyring::Bob); let expires_at = 100; let auth = || { @@ -1040,8 +1040,8 @@ fn add_secondary_keys_with_authorization_duplicate_keys() { #[test] fn add_secondary_keys_with_authorization_too_many_sks() { ExtBuilder::default().build().execute_with(|| { - let user = User::new(AccountKeyring::Alice); - let bob = User::new_with(user.did, AccountKeyring::Bob); + let user = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(user.did, Sr25519Keyring::Bob); let expires_at = 100; let auth = || { @@ -1095,14 +1095,14 @@ fn secondary_key_with_bad_permissions() { .balance_factor(1_000) .monied(true) .cdd_providers(vec![ - AccountKeyring::Eve.to_account_id(), - AccountKeyring::Ferdie.to_account_id(), + Sr25519Keyring::Eve.to_account_id(), + Sr25519Keyring::Ferdie.to_account_id(), ]) .build() .execute_with(|| { - let cdd1 = AccountKeyring::Eve.to_account_id(); - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); + let cdd1 = Sr25519Keyring::Eve.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); test_with_bad_perms(bob.did, |perms| { let bob_sk = SecondaryKey::new(bob.acc(), perms); @@ -1121,7 +1121,7 @@ fn secondary_key_with_bad_permissions() { #[test] fn adding_authorizations_bad_perms() { ExtBuilder::default().build().execute_with(|| { - let user = User::new(AccountKeyring::Alice); + let user = User::new(Sr25519Keyring::Alice); test_with_bad_perms(user.did, |perms| { assert_too_long!(Identity::add_authorization( user.origin(), @@ -1136,8 +1136,8 @@ fn adding_authorizations_bad_perms() { #[test] fn adding_authorizations() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let ticker50 = Ticker::from_slice_truncated(&[0x50][..]); let mut auth_id = Identity::add_auth( alice.did, @@ -1201,8 +1201,8 @@ fn adding_authorizations() { #[test] fn removing_authorizations() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let ticker50 = Ticker::from_slice_truncated(&[0x50][..]); let auth_id = Identity::add_auth( alice.did, @@ -1239,20 +1239,20 @@ fn removing_authorizations() { fn changing_primary_key() { ExtBuilder::default() .monied(true) - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(changing_primary_key_we); } fn changing_primary_key_we() { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); // Primary key matches Alice's key let alice_pk = || get_primary_key(alice.did); assert_eq!(alice_pk(), alice.acc()); - let add = |ring: AccountKeyring| { + let add = |ring: Sr25519Keyring| { Identity::add_auth( alice.did, Signatory::Account(ring.to_account_id()), @@ -1261,7 +1261,7 @@ fn changing_primary_key_we() { ) .unwrap() }; - let accept = |ring: AccountKeyring, auth| { + let accept = |ring: Sr25519Keyring, auth| { Identity::accept_primary_key(Origin::signed(ring.to_account_id()), auth, None) }; @@ -1276,7 +1276,7 @@ fn changing_primary_key_we() { // Do it again, but for Charlie, who isn't attached to a DID. // Alice's primary key will be Charlie's.' - let charlie = AccountKeyring::Charlie; + let charlie = Sr25519Keyring::Charlie; assert_ok!(accept(charlie, add(charlie))); assert_eq!(alice_pk(), charlie.to_account_id()); assert_ok!(Identity::ensure_key_did_unlinked(&alice.acc())); @@ -1301,17 +1301,17 @@ fn changing_primary_key_we() { fn changing_primary_key_with_cdd_auth() { ExtBuilder::default() .monied(true) - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(|| changing_primary_key_with_cdd_auth_we()); } fn changing_primary_key_with_cdd_auth_we() { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_pk = || get_primary_key(alice.did); - let new = User::new_with(alice.did, AccountKeyring::Bob); + let new = User::new_with(alice.did, Sr25519Keyring::Bob); - let cdd_did = get_identity_id(AccountKeyring::Eve).unwrap(); + let cdd_did = get_identity_id(Sr25519Keyring::Eve).unwrap(); // Primary key matches Alice's key assert_eq!(alice_pk(), alice.acc()); @@ -1356,21 +1356,21 @@ fn changing_primary_key_with_cdd_auth_we() { )); // Alice's primary key is now Bob's - assert_eq!(alice_pk(), AccountKeyring::Bob.to_account_id()); + assert_eq!(alice_pk(), Sr25519Keyring::Bob.to_account_id()); } #[test] fn rotating_primary_key_to_secondary() { ExtBuilder::default() .monied(true) - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(rotating_primary_key_to_secondary_we); } fn rotating_primary_key_to_secondary_we() { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let charlie = AccountKeyring::Charlie; + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = Sr25519Keyring::Charlie; let charlie_origin = Origin::signed(charlie.to_account_id()); // Primary key matches Alice's key @@ -1424,22 +1424,22 @@ fn rotating_primary_key_to_secondary_we() { fn rotating_primary_key_to_secondary_with_cdd_auth() { ExtBuilder::default() .monied(true) - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(|| rotating_primary_key_to_secondary_with_cdd_auth_we()); } fn rotating_primary_key_to_secondary_with_cdd_auth_we() { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_pk = || get_primary_key(alice.did); - let charlie = AccountKeyring::Charlie; + let charlie = Sr25519Keyring::Charlie; let charlie_origin = Origin::signed(charlie.to_account_id()); let rotate = |from: Origin, auth_id: u64, cdd: Option| { Identity::rotate_primary_key_to_secondary(from, auth_id, cdd) }; - let cdd_did = get_identity_id(AccountKeyring::Eve).unwrap(); + let cdd_did = get_identity_id(Sr25519Keyring::Eve).unwrap(); let rotate_auth = Identity::add_auth( alice.did, @@ -1487,20 +1487,20 @@ fn cdd_register_did_test() { .balance_factor(1_000) .monied(true) .cdd_providers(vec![ - AccountKeyring::Eve.to_account_id(), - AccountKeyring::Ferdie.to_account_id(), + Sr25519Keyring::Eve.to_account_id(), + Sr25519Keyring::Ferdie.to_account_id(), ]) .build() .execute_with(|| cdd_register_did_test_we()); } fn cdd_register_did_test_we() { - let cdd1 = Origin::signed(AccountKeyring::Eve.to_account_id()); - let cdd2 = Origin::signed(AccountKeyring::Ferdie.to_account_id()); - let non_id = Origin::signed(AccountKeyring::Charlie.to_account_id()); + let cdd1 = Origin::signed(Sr25519Keyring::Eve.to_account_id()); + let cdd2 = Origin::signed(Sr25519Keyring::Ferdie.to_account_id()); + let non_id = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); - let alice = AccountKeyring::Alice.to_account_id(); - let bob_acc = AccountKeyring::Bob.to_account_id(); + let alice = Sr25519Keyring::Alice.to_account_id(); + let bob_acc = Sr25519Keyring::Bob.to_account_id(); // CDD 1 registers correctly the Alice's ID. assert_ok!(Identity::cdd_register_did( @@ -1508,7 +1508,7 @@ fn cdd_register_did_test_we() { alice.clone(), vec![] )); - let alice_id = get_identity_id(AccountKeyring::Alice).unwrap(); + let alice_id = get_identity_id(Sr25519Keyring::Alice).unwrap(); assert_add_cdd_claim!(cdd1.clone(), alice_id); // Check that Alice's ID is attested by CDD 1. @@ -1523,7 +1523,7 @@ fn cdd_register_did_test_we() { // CDD 2 registers properly Bob's ID. assert_ok!(Identity::cdd_register_did(cdd2.clone(), bob_acc, vec![])); - let bob_id = get_identity_id(AccountKeyring::Bob).unwrap(); + let bob_id = get_identity_id(Sr25519Keyring::Bob).unwrap(); assert_add_cdd_claim!(cdd2, bob_id); assert_eq!(Identity::has_valid_cdd(bob_id), true); @@ -1531,8 +1531,8 @@ fn cdd_register_did_test_we() { // Register with secondary_keys // ============================================== // Register Charlie with secondary keys. - let charlie = AccountKeyring::Charlie.to_account_id(); - let dave = AccountKeyring::Dave.to_account_id(); + let charlie = Sr25519Keyring::Charlie.to_account_id(); + let dave = Sr25519Keyring::Dave.to_account_id(); let dave_si = SecondaryKey::from_account_id(dave.clone()); let secondary_keys = vec![dave_si.clone().into()]; assert_ok!(Identity::cdd_register_did( @@ -1540,7 +1540,7 @@ fn cdd_register_did_test_we() { charlie.clone(), secondary_keys )); - let charlie_id = get_identity_id(AccountKeyring::Charlie).unwrap(); + let charlie_id = get_identity_id(Sr25519Keyring::Charlie).unwrap(); assert_add_cdd_claim!(cdd1.clone(), charlie_id); Balances::make_free_balance_be(&charlie, 10_000_000_000); @@ -1560,12 +1560,12 @@ fn cdd_register_did_test_we() { #[test] fn cdd_register_did_duplicate_keys_test() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(|| { - let cdd = Origin::signed(AccountKeyring::Eve.to_account_id()); - let alice = AccountKeyring::Alice.to_account_id(); - let bob_acc = AccountKeyring::Bob.to_account_id(); + let cdd = Origin::signed(Sr25519Keyring::Eve.to_account_id()); + let alice = Sr25519Keyring::Alice.to_account_id(); + let bob_acc = Sr25519Keyring::Bob.to_account_id(); let secondary_key = SecondaryKey::new(bob_acc, Permissions::default()); let secondary_keys = vec![secondary_key.clone().into(), secondary_key.into()]; @@ -1579,10 +1579,10 @@ fn cdd_register_did_duplicate_keys_test() { #[test] fn add_identity_signers() { ExtBuilder::default().monied(true).build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); - let dave = User::new_with(alice.did, AccountKeyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); + let dave = User::new_with(alice.did, Sr25519Keyring::Dave); let add_auth = |from: User, to| { let data = AuthorizationData::JoinIdentity(Permissions::default()); @@ -1624,7 +1624,7 @@ fn add_identity_signers() { let alice_secondary_keys = get_secondary_keys(alice.did); let charlie_secondary_keys = get_secondary_keys(charlie.did); - let mut dave_sk = SecondaryKey::from_account_id(AccountKeyring::Dave.to_account_id()); + let mut dave_sk = SecondaryKey::from_account_id(Sr25519Keyring::Dave.to_account_id()); // Correct the permissions to ones set by `add_secondary_key`. dave_sk.permissions = Permissions::default(); assert!(alice_secondary_keys @@ -1652,8 +1652,8 @@ fn invalidate_cdd_claims() { .balance_factor(1_000) .monied(true) .cdd_providers(vec![ - AccountKeyring::Eve.to_account_id(), - AccountKeyring::Ferdie.to_account_id(), + Sr25519Keyring::Eve.to_account_id(), + Sr25519Keyring::Ferdie.to_account_id(), ]) .build() .execute_with(invalidate_cdd_claims_we); @@ -1661,15 +1661,15 @@ fn invalidate_cdd_claims() { fn invalidate_cdd_claims_we() { let root = Origin::from(frame_system::RawOrigin::Root); - let cdd = AccountKeyring::Eve.to_account_id(); - let alice_acc = AccountKeyring::Alice.to_account_id(); - let bob_acc = AccountKeyring::Bob.to_account_id(); + let cdd = Sr25519Keyring::Eve.to_account_id(); + let alice_acc = Sr25519Keyring::Alice.to_account_id(); + let bob_acc = Sr25519Keyring::Bob.to_account_id(); assert_ok!(Identity::cdd_register_did( Origin::signed(cdd.clone()), alice_acc, vec![] )); - let alice_id = get_identity_id(AccountKeyring::Alice).unwrap(); + let alice_id = get_identity_id(Sr25519Keyring::Alice).unwrap(); assert_add_cdd_claim!(Origin::signed(cdd.clone()), alice_id); // Check that Alice's ID is attested by CDD 1. @@ -1700,8 +1700,8 @@ fn invalidate_cdd_claims_we() { #[test] fn cdd_provider_with_systematic_cdd_claims() { let cdd_providers = [ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), ] .to_vec(); @@ -1715,9 +1715,9 @@ fn cdd_provider_with_systematic_cdd_claims() { fn cdd_provider_with_systematic_cdd_claims_we() { // 0. Get Bob & Alice IDs. let root = Origin::from(frame_system::RawOrigin::Root); - let bob_id = get_identity_id(AccountKeyring::Bob).expect("Bob should be one of CDD providers"); + let bob_id = get_identity_id(Sr25519Keyring::Bob).expect("Bob should be one of CDD providers"); let alice_id = - get_identity_id(AccountKeyring::Alice).expect("Bob should be one of CDD providers"); + get_identity_id(Sr25519Keyring::Alice).expect("Bob should be one of CDD providers"); // 1. Each CDD provider has a *systematic* CDD claim. let cdd_providers = CddServiceProviders::get_members(); @@ -1736,8 +1736,8 @@ fn cdd_provider_with_systematic_cdd_claims_we() { // 3. Add DID with CDD claim to CDD providers, and check that systematic CDD claim was added. // Then remove that DID from CDD provides, it should keep its previous CDD claim. - let alice = Origin::signed(AccountKeyring::Alice.to_account_id()); - let charlie_acc = AccountKeyring::Charlie.to_account_id(); + let alice = Origin::signed(Sr25519Keyring::Alice.to_account_id()); + let charlie_acc = Sr25519Keyring::Charlie.to_account_id(); // 3.1. Add CDD claim to Charlie, by Alice. assert_ok!(Identity::cdd_register_did( @@ -1746,7 +1746,7 @@ fn cdd_provider_with_systematic_cdd_claims_we() { vec![] )); let charlie_id = - get_identity_id(AccountKeyring::Charlie).expect("Charlie should have an Identity Id"); + get_identity_id(Sr25519Keyring::Charlie).expect("Charlie should have an Identity Id"); assert_add_cdd_claim!(alice, charlie_id); let charlie_cdd_claim = @@ -1766,13 +1766,13 @@ fn cdd_provider_with_systematic_cdd_claims_we() { #[test] fn gc_with_systematic_cdd_claims() { let cdd_providers = [ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), ] .to_vec(); let governance_committee = [ - AccountKeyring::Charlie.to_account_id(), - AccountKeyring::Dave.to_account_id(), + Sr25519Keyring::Charlie.to_account_id(), + Sr25519Keyring::Dave.to_account_id(), ] .to_vec(); @@ -1787,9 +1787,9 @@ fn gc_with_systematic_cdd_claims() { fn gc_with_systematic_cdd_claims_we() { // 0. let root = Origin::from(frame_system::RawOrigin::Root); - let charlie_id = get_identity_id(AccountKeyring::Charlie) + let charlie_id = get_identity_id(Sr25519Keyring::Charlie) .expect("Charlie should be a Governance Committee member"); - let dave_id = get_identity_id(AccountKeyring::Dave) + let dave_id = get_identity_id(Sr25519Keyring::Dave) .expect("Dave should be a Governance Committee member"); // 1. Each GC member has a *systematic* CDD claim. @@ -1809,8 +1809,8 @@ fn gc_with_systematic_cdd_claims_we() { // 3. Add DID with CDD claim to CDD providers, and check that systematic CDD claim was added. // Then remove that DID from CDD provides, it should keep its previous CDD claim. - let alice = Origin::signed(AccountKeyring::Alice.to_account_id()); - let ferdie_acc = AccountKeyring::Ferdie.to_account_id(); + let alice = Origin::signed(Sr25519Keyring::Alice.to_account_id()); + let ferdie_acc = Sr25519Keyring::Ferdie.to_account_id(); // 3.1. Add CDD claim to Ferdie, by Alice. assert_ok!(Identity::cdd_register_did( @@ -1819,7 +1819,7 @@ fn gc_with_systematic_cdd_claims_we() { vec![] )); let ferdie_id = - get_identity_id(AccountKeyring::Ferdie).expect("Ferdie should have an Identity Id"); + get_identity_id(Sr25519Keyring::Ferdie).expect("Ferdie should have an Identity Id"); assert_add_cdd_claim!(alice, ferdie_id); let ferdie_cdd_claim = @@ -1839,8 +1839,8 @@ fn gc_with_systematic_cdd_claims_we() { #[test] fn gc_and_cdd_with_systematic_cdd_claims() { let gc_and_cdd_providers = [ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), ] .to_vec(); @@ -1855,7 +1855,7 @@ fn gc_and_cdd_with_systematic_cdd_claims() { fn gc_and_cdd_with_systematic_cdd_claims_we() { // 0. Accounts let root = Origin::from(frame_system::RawOrigin::Root); - let alice_id = get_identity_id(AccountKeyring::Alice) + let alice_id = get_identity_id(Sr25519Keyring::Alice) .expect("Alice should be a Governance Committee member"); // 1. Alice should have 2 systematic CDD claims: One as GC member & another one as CDD @@ -1880,15 +1880,15 @@ fn add_permission_with_secondary_key() { .balance_factor(1_000) .monied(true) .cdd_providers(vec![ - AccountKeyring::Eve.to_account_id(), - AccountKeyring::Ferdie.to_account_id(), + Sr25519Keyring::Eve.to_account_id(), + Sr25519Keyring::Ferdie.to_account_id(), ]) .build() .execute_with(|| { - let cdd_1_acc = AccountKeyring::Eve.to_account_id(); - let alice_acc = AccountKeyring::Alice.to_account_id(); - let bob_acc = AccountKeyring::Bob.to_account_id(); - let charlie_acc = AccountKeyring::Charlie.to_account_id(); + let cdd_1_acc = Sr25519Keyring::Eve.to_account_id(); + let alice_acc = Sr25519Keyring::Alice.to_account_id(); + let bob_acc = Sr25519Keyring::Bob.to_account_id(); + let charlie_acc = Sr25519Keyring::Charlie.to_account_id(); // Add secondary keys. let sk = |acc: &AccountId| SecondaryKey { @@ -1930,7 +1930,7 @@ fn add_permission_with_secondary_key() { #[test] fn ensure_custom_scopes_limited() { ExtBuilder::default().build().execute_with(|| { - let user = User::new(AccountKeyring::Alice); + let user = User::new(Sr25519Keyring::Alice); let data = |n| Scope::Custom([b'1'].repeat(n)); let add = |n| Identity::add_claim(user.origin(), user.did, Claim::Affiliate(data(n)), None); // Check <= 32. @@ -1944,7 +1944,7 @@ fn ensure_custom_scopes_limited() { #[test] fn custom_claim_type_too_long() { ExtBuilder::default().build().execute_with(|| { - let user = User::new(AccountKeyring::Alice); + let user = User::new(Sr25519Keyring::Alice); let case = |add| Identity::register_custom_claim_type(user.origin(), max_len_bytes(add)); assert_too_long!(case(1)); assert_ok!(case(0)); @@ -1954,7 +1954,7 @@ fn custom_claim_type_too_long() { #[test] fn custom_claim_type_works() { ExtBuilder::default().build().execute_with(|| { - let user = User::new(AccountKeyring::Alice); + let user = User::new(Sr25519Keyring::Alice); let register = |ty: &str| Identity::register_custom_claim_type(user.origin(), ty.into()); let seq_is = |num| { assert_eq!(CustomClaimIdSequence::::get().0, num); @@ -1999,7 +1999,7 @@ fn custom_claim_type_works() { #[test] fn invalid_custom_claim_type() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); assert_noop!( Identity::base_add_claim( alice.did, @@ -2015,23 +2015,23 @@ fn invalid_custom_claim_type() { #[test] fn cdd_register_did_events() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(|| { System::set_block_number(1); // Register an Identity for alice with two secundary keys - let cdd_provider = Origin::signed(AccountKeyring::Eve.to_account_id()); - let alice_account_id = AccountKeyring::Alice.to_account_id(); + let cdd_provider = Origin::signed(Sr25519Keyring::Eve.to_account_id()); + let alice_account_id = Sr25519Keyring::Alice.to_account_id(); let alice_secundary_keys = vec![ - SecondaryKey::from_account_id(AccountKeyring::Dave.to_account_id()), - SecondaryKey::from_account_id(AccountKeyring::Charlie.to_account_id()), + SecondaryKey::from_account_id(Sr25519Keyring::Dave.to_account_id()), + SecondaryKey::from_account_id(Sr25519Keyring::Charlie.to_account_id()), ]; assert_ok!(Identity::cdd_register_did( cdd_provider, alice_account_id.clone(), alice_secundary_keys.clone() )); - let alice_did = get_identity_id(AccountKeyring::Alice).unwrap(); + let alice_did = get_identity_id(Sr25519Keyring::Alice).unwrap(); // Make sure one Authorization event was sent for each secundary key let mut system_events = System::events(); assert_eq!( @@ -2039,7 +2039,7 @@ fn cdd_register_did_events() { super::storage::EventTest::Identity(Event::AuthorizationAdded( alice_did, None, - Some(AccountKeyring::Charlie.to_account_id()), + Some(Sr25519Keyring::Charlie.to_account_id()), CurrentAuthId::::get(), AuthorizationData::JoinIdentity(alice_secundary_keys[1].permissions.clone()), None, @@ -2050,7 +2050,7 @@ fn cdd_register_did_events() { super::storage::EventTest::Identity(Event::AuthorizationAdded( alice_did, None, - Some(AccountKeyring::Dave.to_account_id()), + Some(Sr25519Keyring::Dave.to_account_id()), CurrentAuthId::::get() - 1, AuthorizationData::JoinIdentity(alice_secundary_keys[0].permissions.clone()), None, @@ -2073,18 +2073,18 @@ fn child_identity_test() { ExtBuilder::default() .balance_factor(1_000) .monied(true) - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(&do_child_identity_test); } fn do_child_identity_test() { - let cdd = Origin::signed(AccountKeyring::Eve.to_account_id()); - let alice = User::new(AccountKeyring::Alice); - let bob = User::new_with(alice.did, AccountKeyring::Bob); - let dave = User::new_with(alice.did, AccountKeyring::Dave); + let cdd = Origin::signed(Sr25519Keyring::Eve.to_account_id()); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); + let dave = User::new_with(alice.did, Sr25519Keyring::Dave); - let charlie = User::new(AccountKeyring::Charlie); + let charlie = User::new(Sr25519Keyring::Charlie); // Helper functions. let did_of = |u: User| Identity::get_identity(&u.acc()); @@ -2134,7 +2134,7 @@ fn do_child_identity_test() { exec_ok!(Identity::create_child_identity(alice.origin(), bob.acc())); // Update bob's identity. let bob_did = did_of(bob).expect("Bob's new identity"); - let bob = User::new_with(bob_did, AccountKeyring::Bob); + let bob = User::new_with(bob_did, Sr25519Keyring::Bob); // Ensure bob has a new identity. assert!(valid_cdd(bob)); @@ -2143,7 +2143,7 @@ fn do_child_identity_test() { assert_eq!(ChildDid::::get(alice.did, bob.did), true); // Attach secondary key to child identity. - let ferdie = User::new_with(bob.did, AccountKeyring::Ferdie); + let ferdie = User::new_with(bob.did, Sr25519Keyring::Ferdie); add_secondary_key(bob.did, ferdie.acc()); // Child identity can't create a child identity. @@ -2213,7 +2213,7 @@ fn do_child_identity_test() { exec_ok!(Identity::create_child_identity(bob.origin(), ferdie.acc())); // Update ferdie's identity. let ferdie_did = did_of(ferdie).expect("Ferdie's new identity"); - let ferdie = User::new_with(ferdie_did, AccountKeyring::Ferdie); + let ferdie = User::new_with(ferdie_did, Sr25519Keyring::Ferdie); assert!(valid_cdd(ferdie)); assert_eq!(ParentDid::::get(ferdie.did), Some(bob.did)); assert_eq!(ChildDid::::get(bob.did, ferdie.did), true); @@ -2224,14 +2224,14 @@ fn create_child_identities_with_auth_test() { ExtBuilder::default() .balance_factor(1_000) .monied(true) - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(&do_create_child_identities_with_auth_test); } fn do_create_child_identities_with_auth_test() { - let alice = User::new(AccountKeyring::Alice); - let charlie = User::new_with(alice.did, AccountKeyring::Charlie); + let alice = User::new(Sr25519Keyring::Alice); + let charlie = User::new_with(alice.did, Sr25519Keyring::Charlie); // Create some secondary keys. add_secondary_key(alice.did, charlie.acc()); @@ -2244,7 +2244,7 @@ fn do_create_child_identities_with_auth_test() { }; auth.encode() }; - let create_with_auth = |child: AccountKeyring| { + let create_with_auth = |child: Sr25519Keyring| { let auth_encoded = auth(); CreateChildIdentityWithAuth { key: child.to_account_id(), @@ -2261,10 +2261,10 @@ fn do_create_child_identities_with_auth_test() { // Repeat a key. let child_keys = vec![ - create_with_auth(AccountKeyring::Bob), - create_with_auth(AccountKeyring::Dave), - create_with_auth(AccountKeyring::Ferdie), - create_with_auth(AccountKeyring::Bob), // Duplicate key. + create_with_auth(Sr25519Keyring::Bob), + create_with_auth(Sr25519Keyring::Dave), + create_with_auth(Sr25519Keyring::Ferdie), + create_with_auth(Sr25519Keyring::Bob), // Duplicate key. ]; assert_noop!( Identity::create_child_identities(alice.origin(), child_keys, expires_at), @@ -2273,9 +2273,9 @@ fn do_create_child_identities_with_auth_test() { // Create multiple child identities from unlinked keys. let child_keys = vec![ - create_with_auth(AccountKeyring::Bob), - create_with_auth(AccountKeyring::Dave), - create_with_auth(AccountKeyring::Ferdie), + create_with_auth(Sr25519Keyring::Bob), + create_with_auth(Sr25519Keyring::Dave), + create_with_auth(Sr25519Keyring::Ferdie), ]; assert_ok!(Identity::create_child_identities( alice.origin(), diff --git a/pallets/runtime/tests/src/lib.rs b/pallets/runtime/tests/src/lib.rs index 9fcb365f31..3fcb4b60d6 100644 --- a/pallets/runtime/tests/src/lib.rs +++ b/pallets/runtime/tests/src/lib.rs @@ -3,43 +3,43 @@ // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. #![recursion_limit = "1024"] -pub mod storage; -pub use storage::{ +pub(crate) use storage::{ account_from, add_secondary_key, fast_forward_blocks, fast_forward_to_block, get_identity_id, make_account, make_account_with_balance, make_account_without_cdd, next_block, register_keyring_account_with_balance, TestStorage, }; -pub mod ext_builder; -pub use ext_builder::ExtBuilder; +pub(crate) use ext_builder::ExtBuilder; -mod asset_pallet; -#[macro_use] -mod asset_test; -mod asset_metadata_test; -mod balances_test; -mod committee_test; -mod compliance_manager_test; -mod contracts_test; -mod corporate_actions_test; -#[macro_use] -mod external_agents_test; -mod fee_details; -mod group_test; -mod identity_test; -mod multisig; -mod nft; -mod pips_test; -mod portfolio; -mod protocol_fee; -mod relayer_test; -mod settlement_pallet; -mod settlement_test; -mod signed_extra; -mod staking; -mod staking_extra_tests; -mod sto_test; -mod transaction_payment_test; -mod transfer_compliance_test; -mod treasury_test; -mod utility_test; +//mod asset_pallet; +//#[macro_use] +//mod asset_test; +//mod asset_metadata_test; +//mod balances_test; +//mod committee_test; +//mod compliance_manager_test; +//mod contracts_test; +//mod corporate_actions_test; +//#[macro_use] +//mod external_agents_test; +pub(crate) mod ext_builder; +//mod fee_details; +//mod group_test; +//mod identity_test; +//mod multisig; +//mod nft; +//mod pips_test; +//mod portfolio; +//mod protocol_fee; +//mod relayer_test; +//mod settlement_pallet; +//mod settlement_test; +//mod signed_extra; +//mod staking; +//mod staking_extra_tests; +pub(crate) mod storage; +//mod sto_test; +//mod transaction_payment_test; +//mod transfer_compliance_test; +//mod treasury_test; +//mod utility_test; diff --git a/pallets/runtime/tests/src/multisig.rs b/pallets/runtime/tests/src/multisig.rs index 2552d2e182..ab13106fc0 100644 --- a/pallets/runtime/tests/src/multisig.rs +++ b/pallets/runtime/tests/src/multisig.rs @@ -11,7 +11,7 @@ use pallet_multisig::{ use polymesh_primitives::constants::currency::POLY; use polymesh_primitives::multisig::ProposalState; use polymesh_primitives::{AccountId, AuthorizationData, Permissions, SecondaryKey, Signatory}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use super::asset_test::set_timestamp; use super::next_block; @@ -86,9 +86,9 @@ fn create_multisig_result( #[test] fn create_multisig_required_signers() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let eve_signer = AccountKeyring::Eve.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let eve_signer = Sr25519Keyring::Eve.to_account_id(); let ms_address = MultiSig::get_next_multisig_address(alice.acc()).expect("Next MS"); @@ -107,18 +107,18 @@ fn create_multisig_required_signers() { #[test] fn join_multisig() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ferdie = Origin::signed(ferdie_key.clone()); let ferdie_signer = ferdie_key; - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie = User::new(AccountKeyring::Charlie); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie = User::new(Sr25519Keyring::Charlie); // Add dave's key as a secondary key of charlie. - let dave = User::new_with(charlie.did, AccountKeyring::Dave); + let dave = User::new_with(charlie.did, Sr25519Keyring::Dave); add_secondary_key(charlie.did, dave.acc()); let ms_address = create_multisig_default_perms( @@ -202,11 +202,11 @@ fn join_multisig() { #[test] fn change_multisig_sigs_required() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -260,11 +260,11 @@ fn change_multisig_sigs_required() { #[test] fn remove_multisig_signers() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -300,7 +300,7 @@ fn remove_multisig_signers() { // No direct identity for Bob as he is only a signer assert_eq!( - Identity::get_identity(&AccountKeyring::Bob.to_account_id()), + Identity::get_identity(&Sr25519Keyring::Bob.to_account_id()), None ); @@ -329,7 +329,7 @@ fn remove_multisig_signers() { assert_eq!(MultiSig::ms_signers(ms_address.clone(), bob_signer), false); assert_eq!( - Identity::get_identity(&AccountKeyring::Bob.to_account_id()), + Identity::get_identity(&Sr25519Keyring::Bob.to_account_id()), None ); @@ -359,13 +359,13 @@ fn remove_multisig_signers() { #[test] fn add_multisig_signers() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); - let dave = Origin::signed(AccountKeyring::Dave.to_account_id()); - let dave_signer = AccountKeyring::Dave.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); + let dave = Origin::signed(Sr25519Keyring::Dave.to_account_id()); + let dave_signer = Sr25519Keyring::Dave.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -459,16 +459,16 @@ fn add_multisig_signers() { #[test] fn multisig_as_primary() { ExtBuilder::default().monied(true).build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ms_address = create_multisig_default_perms(alice.acc(), create_signers(vec![ferdie_key]), 1); assert_eq!( get_primary_key(alice.did), - AccountKeyring::Alice.to_account_id() + Sr25519Keyring::Alice.to_account_id() ); assert_err!( @@ -485,10 +485,10 @@ fn multisig_as_primary() { #[test] fn rotate_multisig_primary_key_with_balance() { ExtBuilder::default().monied(true).build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let dave_key = AccountKeyring::Dave.to_account_id(); - let charlie_key = AccountKeyring::Charlie.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave_key = Sr25519Keyring::Dave.to_account_id(); + let charlie_key = Sr25519Keyring::Charlie.to_account_id(); let ms_address = create_multisig_default_perms(alice.acc(), create_signers(vec![dave_key]), 1); @@ -536,8 +536,8 @@ fn rotate_multisig_primary_key_with_balance() { #[test] fn multisig_as_secondary_key_default_perms() { ExtBuilder::default().monied(true).build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ms_address = create_multisig_default_perms(alice.acc(), create_signers(vec![ferdie_key]), 1); @@ -550,12 +550,12 @@ fn multisig_as_secondary_key_default_perms() { #[test] fn remove_multisig_signers_via_admin() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); - let dave = User::new(AccountKeyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); + let dave = User::new(Sr25519Keyring::Dave); let ms_address = create_multisig_default_perms( alice.acc(), @@ -646,12 +646,12 @@ fn remove_multisig_signers_via_admin() { #[test] fn add_multisig_signers_via_admin() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); - let dave = User::new(AccountKeyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); + let dave = User::new(Sr25519Keyring::Dave); let ms_address = create_multisig_default_perms( alice.acc(), @@ -720,12 +720,12 @@ fn add_multisig_signers_via_admin() { #[test] fn check_for_approval_closure() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); - let dave = Origin::signed(AccountKeyring::Dave.to_account_id()); - let dave_signer = AccountKeyring::Dave.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); + let dave = Origin::signed(Sr25519Keyring::Dave.to_account_id()); + let dave_signer = Sr25519Keyring::Dave.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -799,21 +799,21 @@ fn check_for_approval_closure() { #[test] fn reject_proposals() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); - let bob_key = AccountKeyring::Bob.to_account_id(); + let bob_key = Sr25519Keyring::Bob.to_account_id(); let bob = Origin::signed(bob_key.clone()); - let charlie_key = AccountKeyring::Charlie.to_account_id(); + let charlie_key = Sr25519Keyring::Charlie.to_account_id(); let charlie = Origin::signed(charlie_key.clone()); - let dave_key = AccountKeyring::Dave.to_account_id(); + let dave_key = Sr25519Keyring::Dave.to_account_id(); let dave = Origin::signed(dave_key.clone()); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ferdie = Origin::signed(ferdie_key.clone()); - let eve_key = AccountKeyring::Eve.to_account_id(); + let eve_key = Sr25519Keyring::Eve.to_account_id(); let eve = Origin::signed(eve_key.clone()); let ms_address = setup_multisig( @@ -907,11 +907,11 @@ fn reject_proposals() { fn add_signers_via_admin_removed_controls() { ExtBuilder::default().build().execute_with(|| { // Multisig creator - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); // Multisig signers - let ferdie_signer = AccountKeyring::Ferdie.to_account_id(); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); + let ferdie_signer = Sr25519Keyring::Ferdie.to_account_id(); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -935,11 +935,11 @@ fn add_signers_via_admin_removed_controls() { fn remove_signers_via_admin_removed_controls() { ExtBuilder::default().build().execute_with(|| { // Multisig creator - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); // Multisig signers - let ferdie_signer = AccountKeyring::Ferdie.to_account_id(); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); + let ferdie_signer = Sr25519Keyring::Ferdie.to_account_id(); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -963,13 +963,13 @@ fn remove_signers_via_admin_removed_controls() { fn change_sigs_required_via_admin_id_not_creator() { ExtBuilder::default().build().execute_with(|| { // Multisig creator - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); // Multisig signers - let ferdie_signer = AccountKeyring::Ferdie.to_account_id(); - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); - let dave = User::new(AccountKeyring::Dave); + let ferdie_signer = Sr25519Keyring::Ferdie.to_account_id(); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); + let dave = User::new(Sr25519Keyring::Dave); let ms_address = create_multisig_default_perms( alice.acc(), @@ -993,11 +993,11 @@ fn change_sigs_required_via_admin_id_not_creator() { fn change_sigs_required_via_admin_removed_controls() { ExtBuilder::default().build().execute_with(|| { // Multisig creator - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); // Multisig signers - let ferdie_signer = AccountKeyring::Ferdie.to_account_id(); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); + let ferdie_signer = Sr25519Keyring::Ferdie.to_account_id(); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -1017,12 +1017,12 @@ fn change_sigs_required_via_admin_removed_controls() { fn change_sigs_required_via_admin_not_enough_signers() { ExtBuilder::default().build().execute_with(|| { // Multisig creator - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); // Multisig signers - let ferdie_signer = AccountKeyring::Ferdie.to_account_id(); - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); + let ferdie_signer = Sr25519Keyring::Ferdie.to_account_id(); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -1045,12 +1045,12 @@ fn change_sigs_required_via_admin_not_enough_signers() { fn change_sigs_required_via_admin_successfully() { ExtBuilder::default().build().execute_with(|| { // Multisig creator - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); // Multisig signers - let ferdie_signer = AccountKeyring::Ferdie.to_account_id(); - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); + let ferdie_signer = Sr25519Keyring::Ferdie.to_account_id(); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -1073,13 +1073,13 @@ fn change_sigs_required_via_admin_successfully() { fn remove_admin_via_admin_id_not_creator() { ExtBuilder::default().build().execute_with(|| { // Multisig creator - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); // Multisig signers - let ferdie_signer = AccountKeyring::Ferdie.to_account_id(); - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); - let dave = User::new(AccountKeyring::Dave); + let ferdie_signer = Sr25519Keyring::Ferdie.to_account_id(); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); + let dave = User::new(Sr25519Keyring::Dave); let ms_address = create_multisig_default_perms( alice.acc(), @@ -1103,11 +1103,11 @@ fn remove_admin_via_admin_id_not_creator() { fn remove_admin_via_admin_successfully() { ExtBuilder::default().build().execute_with(|| { // Multisig creator - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); // Multisig signers - let ferdie_signer = AccountKeyring::Ferdie.to_account_id(); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); + let ferdie_signer = Sr25519Keyring::Ferdie.to_account_id(); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -1126,17 +1126,17 @@ fn remove_admin_via_admin_successfully() { #[test] fn proposal_owner_rejection() { ExtBuilder::default().build().execute_with(|| { - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); - let bob_key = AccountKeyring::Bob.to_account_id(); + let bob_key = Sr25519Keyring::Bob.to_account_id(); let bob = Origin::signed(bob_key.clone()); - let dave_key = AccountKeyring::Dave.to_account_id(); + let dave_key = Sr25519Keyring::Dave.to_account_id(); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ferdie = Origin::signed(ferdie_key.clone()); - let eve_key = AccountKeyring::Eve.to_account_id(); + let eve_key = Sr25519Keyring::Eve.to_account_id(); // Creates a multi-signature let ms_address = setup_multisig( @@ -1192,17 +1192,17 @@ fn proposal_owner_rejection() { #[test] fn proposal_owner_rejection_denied() { ExtBuilder::default().build().execute_with(|| { - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); - let bob_key = AccountKeyring::Bob.to_account_id(); + let bob_key = Sr25519Keyring::Bob.to_account_id(); let bob = Origin::signed(bob_key.clone()); - let dave_key = AccountKeyring::Dave.to_account_id(); + let dave_key = Sr25519Keyring::Dave.to_account_id(); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ferdie = Origin::signed(ferdie_key.clone()); - let eve_key = AccountKeyring::Eve.to_account_id(); + let eve_key = Sr25519Keyring::Eve.to_account_id(); // Creates a multi-signature let ms_address = setup_multisig( @@ -1261,11 +1261,11 @@ fn proposal_owner_rejection_denied() { fn remove_admin_successfully() { ExtBuilder::default().build().execute_with(|| { // Multisig creator - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); // Multisig signers - let ferdie_signer = AccountKeyring::Ferdie.to_account_id(); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); + let ferdie_signer = Sr25519Keyring::Ferdie.to_account_id(); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), @@ -1283,11 +1283,11 @@ fn remove_admin_successfully() { fn remove_admin_not_multsig() { ExtBuilder::default().build().execute_with(|| { // Multisig creator - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); // Multisig signers - let ferdie_signer = AccountKeyring::Ferdie.to_account_id(); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); + let ferdie_signer = Sr25519Keyring::Ferdie.to_account_id(); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); create_multisig_default_perms( alice.acc(), @@ -1304,15 +1304,15 @@ fn remove_admin_not_multsig() { fn expired_proposals() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); - let bob_key = AccountKeyring::Bob.to_account_id(); + let bob_key = Sr25519Keyring::Bob.to_account_id(); let bob = Origin::signed(bob_key.clone()); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ferdie = Origin::signed(ferdie_key.clone()); - let charlie_key = AccountKeyring::Charlie.to_account_id(); + let charlie_key = Sr25519Keyring::Charlie.to_account_id(); let charlie = Origin::signed(charlie_key.clone()); let ms_address = setup_multisig( @@ -1399,9 +1399,9 @@ fn expired_proposals() { #[test] fn multisig_nesting_not_allowed() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let dave = Origin::signed(AccountKeyring::Dave.to_account_id()); - let dave_signer = AccountKeyring::Dave.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let dave = Origin::signed(Sr25519Keyring::Dave.to_account_id()); + let dave_signer = Sr25519Keyring::Dave.to_account_id(); // Created the first top-level multisig. let ms1_address = create_multisig_default_perms( @@ -1447,11 +1447,11 @@ fn multisig_nesting_not_allowed() { #[test] fn create_expired_proposal() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob_key = AccountKeyring::Bob.to_account_id(); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob_key = Sr25519Keyring::Bob.to_account_id(); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ferdie = Origin::signed(ferdie_key.clone()); - let charlie_key = AccountKeyring::Charlie.to_account_id(); + let charlie_key = Sr25519Keyring::Charlie.to_account_id(); let ms_address = setup_multisig( alice.acc(), @@ -1478,11 +1478,11 @@ fn create_expired_proposal() { #[test] fn invalidate_proposals_change_sigs_required() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob_key = AccountKeyring::Bob.to_account_id(); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob_key = Sr25519Keyring::Bob.to_account_id(); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ferdie = Origin::signed(ferdie_key.clone()); - let charlie_key = AccountKeyring::Charlie.to_account_id(); + let charlie_key = Sr25519Keyring::Charlie.to_account_id(); let ms_address = setup_multisig( alice.acc(), @@ -1528,12 +1528,12 @@ fn invalidate_proposals_change_sigs_required() { #[test] fn invalidate_proposals_add_signer() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob_key = AccountKeyring::Bob.to_account_id(); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob_key = Sr25519Keyring::Bob.to_account_id(); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ferdie = Origin::signed(ferdie_key.clone()); - let charlie = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let charlie_key = AccountKeyring::Charlie.to_account_id(); + let charlie = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let charlie_key = Sr25519Keyring::Charlie.to_account_id(); let ms_address = setup_multisig(alice.acc(), 2, create_signers(vec![ferdie_key, bob_key])); @@ -1583,11 +1583,11 @@ fn invalidate_proposals_add_signer() { #[test] fn invalidate_proposals_remove_signer() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob_key = AccountKeyring::Bob.to_account_id(); - let ferdie_key = AccountKeyring::Ferdie.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob_key = Sr25519Keyring::Bob.to_account_id(); + let ferdie_key = Sr25519Keyring::Ferdie.to_account_id(); let ferdie = Origin::signed(ferdie_key.clone()); - let charlie_key = AccountKeyring::Charlie.to_account_id(); + let charlie_key = Sr25519Keyring::Charlie.to_account_id(); let ms_address = setup_multisig( alice.acc(), @@ -1633,11 +1633,11 @@ fn invalidate_proposals_remove_signer() { #[test] fn invalidate_proposals_via_executed_proposal() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = Origin::signed(AccountKeyring::Bob.to_account_id()); - let bob_signer = AccountKeyring::Bob.to_account_id(); - let charlie = Origin::signed(AccountKeyring::Charlie.to_account_id()); - let charlie_signer = AccountKeyring::Charlie.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob = Origin::signed(Sr25519Keyring::Bob.to_account_id()); + let bob_signer = Sr25519Keyring::Bob.to_account_id(); + let charlie = Origin::signed(Sr25519Keyring::Charlie.to_account_id()); + let charlie_signer = Sr25519Keyring::Charlie.to_account_id(); let ms_address = create_multisig_default_perms( alice.acc(), diff --git a/pallets/runtime/tests/src/nft.rs b/pallets/runtime/tests/src/nft.rs index db00983fe3..a8ade05641 100644 --- a/pallets/runtime/tests/src/nft.rs +++ b/pallets/runtime/tests/src/nft.rs @@ -19,7 +19,7 @@ use polymesh_primitives::{ PortfolioKind, PortfolioName, PortfolioNumber, PortfolioUpdateReason, Scope, Signatory, TrustedFor, TrustedIssuer, WeightMeter, }; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use super::asset_test::{get_asset_details, set_timestamp}; use crate::asset_pallet::setup::{create_and_issue_sample_asset, create_and_issue_sample_nft}; @@ -43,7 +43,7 @@ fn create_collection_unregistered_ticker() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let nft_type = NonFungibleType::Derivative; let collection_keys: NFTCollectionKeys = vec![].into(); @@ -68,7 +68,7 @@ fn create_collection_invalid_asset_type() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let collection_keys: NFTCollectionKeys = vec![].into(); let asset_id = create_and_issue_sample_asset(&alice); @@ -85,7 +85,7 @@ fn create_collection_already_registered() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let nft_type = NonFungibleType::Derivative; let collection_keys: NFTCollectionKeys = vec![].into(); @@ -108,7 +108,7 @@ fn create_collection_max_keys_exceeded() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let nft_type = NonFungibleType::Derivative; let collection_keys: Vec = (0..256) .map(|key| AssetMetadataKey::Local(AssetMetadataLocalKey(key))) @@ -131,7 +131,7 @@ fn create_collection_duplicate_key() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let nft_type = NonFungibleType::Derivative; let collection_keys: NFTCollectionKeys = vec![ AssetMetadataKey::Local(AssetMetadataLocalKey(0)), @@ -157,7 +157,7 @@ fn create_collection_unregistered_key() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let nft_type = NonFungibleType::Derivative; let collection_keys: NFTCollectionKeys = @@ -225,7 +225,7 @@ fn mint_nft_collection_not_found() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); assert_noop!( NFT::issue_nft( alice.origin(), @@ -247,7 +247,7 @@ fn mint_nft_duplicate_key() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let collection_keys: NFTCollectionKeys = vec![ AssetMetadataKey::Local(AssetMetadataLocalKey(1)), AssetMetadataKey::Local(AssetMetadataLocalKey(2)), @@ -286,7 +286,7 @@ fn mint_nft_wrong_number_of_keys() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let collection_keys: NFTCollectionKeys = vec![AssetMetadataKey::Local(AssetMetadataLocalKey(1))].into(); @@ -327,7 +327,7 @@ fn mint_nft_wrong_key() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let collection_keys: NFTCollectionKeys = vec![AssetMetadataKey::Local(AssetMetadataLocalKey(1))].into(); @@ -358,7 +358,7 @@ fn mint_nft_portfolio_not_found() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let collection_keys: NFTCollectionKeys = vec![AssetMetadataKey::Local(AssetMetadataLocalKey(1))].into(); @@ -388,7 +388,7 @@ fn mint_nft_successfully() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId::new(alice.did, PortfolioKind::Default); let collection_keys: NFTCollectionKeys = @@ -455,7 +455,7 @@ fn burn_nft_collection_not_found() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); assert_noop!( NFT::redeem_nft( alice.origin(), @@ -475,7 +475,7 @@ fn burn_nft_not_found() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let collection_keys: NFTCollectionKeys = vec![AssetMetadataKey::Local(AssetMetadataLocalKey(1))].into(); @@ -504,8 +504,8 @@ fn burn_nft_no_custody() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let bob: User = User::new(AccountKeyring::Bob); - let alice: User = User::new(AccountKeyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); let portfolio_kind = PortfolioKind::User(PortfolioNumber(1)); let portfolio_id = PortfolioId::new(alice.did, portfolio_kind); @@ -560,7 +560,7 @@ fn burn_nft() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let collection_keys: NFTCollectionKeys = vec![AssetMetadataKey::Local(AssetMetadataLocalKey(1))].into(); @@ -615,8 +615,8 @@ fn transfer_nft_without_collection() { ExtBuilder::default().build().execute_with(|| { set_timestamp(Utc::now().timestamp() as _); - let alice: User = User::new(AccountKeyring::Alice); - let bob: User = User::new(AccountKeyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); let mut weight_meter = WeightMeter::max_limit_no_minimum(); let sender_portfolio = PortfolioId { @@ -653,7 +653,7 @@ fn transfer_nft_same_portfolio() { set_timestamp(Utc::now().timestamp() as _); // Creates a collection - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let collection_keys: NFTCollectionKeys = vec![AssetMetadataKey::Local(AssetMetadataLocalKey(1))].into(); @@ -698,8 +698,8 @@ fn transfer_nft_invalid_count() { set_timestamp(Utc::now().timestamp() as _); // First we need to create a collection and mint one NFT - let alice: User = User::new(AccountKeyring::Alice); - let bob: User = User::new(AccountKeyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); let mut weight_meter = WeightMeter::max_limit_no_minimum(); let collection_keys: NFTCollectionKeys = @@ -754,8 +754,8 @@ fn transfer_nft_not_owned() { set_timestamp(Utc::now().timestamp() as _); // First we need to create a collection and mint one NFT - let alice: User = User::new(AccountKeyring::Alice); - let bob: User = User::new(AccountKeyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); let mut weight_meter = WeightMeter::max_limit_no_minimum(); let collection_keys: NFTCollectionKeys = @@ -810,9 +810,9 @@ fn transfer_nft_failing_compliance() { set_timestamp(Utc::now().timestamp() as _); // First we need to create a collection and mint one NFT - let bob: User = User::new(AccountKeyring::Bob); - let dave: User = User::new(AccountKeyring::Dave); - let alice: User = User::new(AccountKeyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); + let dave: User = User::new(Sr25519Keyring::Dave); + let alice: User = User::new(Sr25519Keyring::Alice); let mut weight_meter = WeightMeter::max_limit_no_minimum(); let collection_keys: NFTCollectionKeys = @@ -884,8 +884,8 @@ fn transfer_nft() { System::set_block_number(1); // First we need to create a collection and mint one NFT - let alice: User = User::new(AccountKeyring::Alice); - let bob: User = User::new(AccountKeyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); let mut weight_meter = WeightMeter::max_limit_no_minimum(); let collection_keys: NFTCollectionKeys = @@ -972,8 +972,8 @@ fn controller_transfer() { // First we need to create a collection and mint one NFT set_timestamp(Utc::now().timestamp() as _); System::set_block_number(1); - let alice: User = User::new(AccountKeyring::Alice); - let bob: User = User::new(AccountKeyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); let mut weight_meter = WeightMeter::max_limit_no_minimum(); @@ -1072,8 +1072,8 @@ fn controller_transfer() { fn controller_transfer_unauthorized_agent() { ExtBuilder::default().build().execute_with(|| { // First we need to create a collection and mint one NFT - let alice: User = User::new(AccountKeyring::Alice); - let bob: User = User::new(AccountKeyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); let asset_id = create_nft_collection( alice.clone(), @@ -1108,8 +1108,8 @@ fn controller_transfer_unauthorized_agent() { fn controller_transfer_nft_not_owned() { ExtBuilder::default().build().execute_with(|| { // First we need to create a collection and mint one NFT - let alice: User = User::new(AccountKeyring::Alice); - let bob: User = User::new(AccountKeyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); let asset_id = create_nft_collection( alice.clone(), @@ -1143,7 +1143,7 @@ fn controller_transfer_nft_not_owned() { #[test] fn redeem_wrong_number_of_keys() { ExtBuilder::default().build().execute_with(|| { - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let collection_keys: NFTCollectionKeys = vec![ AssetMetadataKey::Local(AssetMetadataLocalKey(1)), @@ -1188,8 +1188,8 @@ fn redeem_wrong_number_of_keys() { #[test] fn redeem_locked_nft() { ExtBuilder::default().build().execute_with(|| { - let bob: User = User::new(AccountKeyring::Bob); - let alice: User = User::new(AccountKeyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); let asset_id = create_nft_collection( alice.clone(), @@ -1230,8 +1230,8 @@ fn redeem_locked_nft() { #[test] fn reject_instruction_with_locked_asset() { ExtBuilder::default().build().execute_with(|| { - let bob: User = User::new(AccountKeyring::Bob); - let alice: User = User::new(AccountKeyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); let asset_id = create_nft_collection( alice.clone(), diff --git a/pallets/runtime/tests/src/pips_test.rs b/pallets/runtime/tests/src/pips_test.rs index 6bb1b7f23b..1082669094 100644 --- a/pallets/runtime/tests/src/pips_test.rs +++ b/pallets/runtime/tests/src/pips_test.rs @@ -23,7 +23,7 @@ use pallet_pips::{ }; use pallet_treasury as treasury; use polymesh_primitives::{AccountId, BlockNumber, MaybeBlock, Url, GC_DID}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use std::ops::Deref; type System = frame_system::Pallet; @@ -218,7 +218,7 @@ fn updating_pips_variables_works() { fn updating_pips_variables_only_root() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let signer = Origin::signed(AccountKeyring::Alice.to_account_id()); + let signer = Origin::signed(Sr25519Keyring::Alice.to_account_id()); System::reset_events(); assert_noop!( @@ -252,8 +252,8 @@ fn historical_prune_works() { // We just test one case for brevity. System::set_block_number(1); assert_ok!(Pips::set_prune_historical_pips(root(), true)); - let proposer = User::new(AccountKeyring::Alice); - let member = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Alice); + let member = User::new(Sr25519Keyring::Bob); assert_pruned(rejected_proposal(proposer)); set_members(vec![member.did]); @@ -270,7 +270,7 @@ fn min_deposit_works() { let deposit = 40; assert_ok!(Pips::set_min_proposal_deposit(root(), deposit + 1)); - let alice = User::new(AccountKeyring::Alice).balance(300); + let alice = User::new(Sr25519Keyring::Alice).balance(300); // Error when min deposit requirements are not met. assert_eq!(PipIdSequence::::get(), PipId(0)); @@ -302,7 +302,7 @@ fn active_limit_works() { System::set_block_number(1); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); - let proposer = User::new(AccountKeyring::Alice); + let proposer = User::new(Sr25519Keyring::Alice); assert_eq!(PipIdSequence::::get(), PipId(0)); assert_eq!(ActivePipCount::::get(), 0); @@ -340,7 +340,7 @@ fn default_enactment_period_works_community() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let alice = User::new(AccountKeyring::Alice).balance(300); + let alice = User::new(Sr25519Keyring::Alice).balance(300); set_members(vec![alice.did]); let check_community = |period| { @@ -372,7 +372,7 @@ fn default_enactment_period_works_committee() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let alice = User::new(AccountKeyring::Alice).balance(300); + let alice = User::new(Sr25519Keyring::Alice).balance(300); set_members(vec![alice.did]); let check_committee = |period| { @@ -400,7 +400,7 @@ fn skip_limit_works() { System::set_block_number(1); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); - let alice = User::new(AccountKeyring::Alice).balance(300); + let alice = User::new(Sr25519Keyring::Alice).balance(300); set_members(vec![alice.did]); let snap = || Pips::snapshot(alice.origin()).unwrap(); @@ -461,7 +461,7 @@ fn proposal_details_are_correct() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(42); - let alice = User::new(AccountKeyring::Alice).balance(300); + let alice = User::new(Sr25519Keyring::Alice).balance(300); let call = make_remark_proposal(); let proposal_url: Url = b"www.abc.com".into(); @@ -513,7 +513,7 @@ fn proposal_details_are_correct() { fn proposal_limits_are_enforced() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(42); - let proposer = User::new(AccountKeyring::Alice).balance(300); + let proposer = User::new(Sr25519Keyring::Alice).balance(300); let propose = |url, desc| { proposal( &proposer.origin(), @@ -543,7 +543,7 @@ fn propose_committee_pip_only_zero_deposit() { fn vote_no_such_proposal() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let voter = User::new(AccountKeyring::Bob); + let voter = User::new(Sr25519Keyring::Bob); assert_no_pip!(Pips::vote(voter.origin(), PipId(0), false, 0)); }); } @@ -556,8 +556,8 @@ fn vote_not_pending() { assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); assert_ok!(Pips::set_prune_historical_pips(root(), false)); - let proposer = User::new(AccountKeyring::Alice); - let member = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Alice); + let member = User::new(Sr25519Keyring::Bob); set_members(vec![member.did]); op_and_check(member.origin(), rejected_proposal(proposer)); @@ -582,7 +582,7 @@ fn vote_bond_additional_deposit_works() { System::set_block_number(1); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); - let proposer = User::new(AccountKeyring::Alice); + let proposer = User::new(Sr25519Keyring::Alice); let init_free = Balances::free_balance(&proposer.acc()); let init_amount = 300; let then_amount = 137; @@ -607,8 +607,8 @@ fn vote_owner_below_min_deposit() { let sub = min - 1; assert_ok!(Pips::set_min_proposal_deposit(root(), min)); - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); assert_ok!(community_proposal(alice, 100)); assert_noop!( @@ -646,7 +646,7 @@ fn vote_unbond_deposit_works() { System::set_block_number(1); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); - let proposer = User::new(AccountKeyring::Alice); + let proposer = User::new(Sr25519Keyring::Alice); let init_free = Balances::free_balance(&proposer.acc()); let init_amount = 200; let then_amount = 100; @@ -667,7 +667,7 @@ fn vote_on_community_only() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); assert_ok!(committee_proposal(0)); - let voter = User::new(AccountKeyring::Alice); + let voter = User::new(Sr25519Keyring::Alice); assert_noop!( Pips::vote(voter.origin(), PipId(0), false, 0), Error::NotFromCommunity @@ -680,7 +680,7 @@ fn vote_duplicate_ok() { ExtBuilder::default().monied(true).build().execute_with(|| { System::set_block_number(1); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); - let proposer = User::new(AccountKeyring::Alice); + let proposer = User::new(Sr25519Keyring::Alice); let vote = |aye, power| Pips::vote(proposer.origin(), PipId(0), aye, power); let res = || ProposalResult::::get(PipId(0)); @@ -738,8 +738,8 @@ fn vote_stake_overflow() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let alice = User::new(AccountKeyring::Alice).balance(u128::MAX); - let bob = User::new(AccountKeyring::Bob).balance(100); + let alice = User::new(Sr25519Keyring::Alice).balance(u128::MAX); + let bob = User::new(Sr25519Keyring::Bob).balance(100); let id = PipId(0); assert_ok!(community_proposal(alice, u128::MAX)); @@ -771,7 +771,7 @@ fn vote_insufficient_reserve() { .execute_with(|| { System::set_block_number(1); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); - let proposer = User::new(AccountKeyring::Alice).balance(0); + let proposer = User::new(Sr25519Keyring::Alice).balance(0); let id = PipId(0); assert_ok!(community_proposal(proposer, 0)); assert_noop!( @@ -790,10 +790,10 @@ fn vote_works() { ExtBuilder::default().monied(true).build().execute_with(|| { System::set_block_number(1); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let bob_balance = Balances::free_balance(&bob.acc()); - let charlie = User::new(AccountKeyring::Charlie); + let charlie = User::new(Sr25519Keyring::Charlie); let charlie_balance = Balances::free_balance(&charlie.acc()); let id = PipId(0); @@ -840,7 +840,7 @@ fn voting_for_pip_uses_stack_over_overlay() { assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); // Initialize with 100 POLYX. - let alice = User::new(AccountKeyring::Alice).balance(100); + let alice = User::new(Sr25519Keyring::Alice).balance(100); // Lock all but 10. Balances::set_lock(*b"deadbeef", &alice.acc(), 90, WithdrawReasons::all()); assert_balance(alice.acc(), 100, 90); @@ -862,8 +862,8 @@ fn approve_committee_proposal_not_pending() { assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); assert_ok!(Pips::set_prune_historical_pips(root(), false)); - let proposer = User::new(AccountKeyring::Bob); - let member = User::new(AccountKeyring::Alice); + let proposer = User::new(Sr25519Keyring::Bob); + let member = User::new(Sr25519Keyring::Alice); set_members(vec![member.did]); let acp_bad_state = |id| assert_bad_state!(Pips::approve_committee_proposal(gc_vmo(), id)); @@ -888,7 +888,7 @@ fn approve_committee_proposal_not_by_committee() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); - let proposer = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Bob); assert_ok!(community_proposal(proposer, 0)); assert_noop!( Pips::approve_committee_proposal(gc_vmo(), PipId(0)), @@ -903,11 +903,11 @@ fn only_gc_majority_stuff() { System::set_block_number(1); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); - let proposer = User::new(AccountKeyring::Dave); + let proposer = User::new(Sr25519Keyring::Dave); - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); set_members(vec![bob.did, charlie.did]); // Make a proposal @@ -1116,8 +1116,8 @@ fn cannot_reject_incorrect_state() { assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); assert_ok!(Pips::set_prune_historical_pips(root(), false)); - let proposer = User::new(AccountKeyring::Alice); - let member = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Alice); + let member = User::new(Sr25519Keyring::Bob); set_members(vec![member.did]); let reject_bad_state = |id| assert_bad_state!(Pips::reject_proposal(gc_vmo(), id)); @@ -1158,8 +1158,8 @@ fn can_prune_states_that_cannot_be_rejected() { assert_ok!(Pips::set_prune_historical_pips(root(), false)); let init_bal = 1000; - let proposer = User::new(AccountKeyring::Alice).balance(init_bal); - let member = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Alice).balance(init_bal); + let member = User::new(Sr25519Keyring::Bob); set_members(vec![member.did]); // Can prune executed: @@ -1237,8 +1237,8 @@ fn cannot_prune_active() { System::set_block_number(1); let init_bal = 300; - let proposer = User::new(AccountKeyring::Bob).balance(init_bal); - let member = User::new(AccountKeyring::Alice); + let proposer = User::new(Sr25519Keyring::Bob).balance(init_bal); + let member = User::new(Sr25519Keyring::Alice); set_members(vec![member.did]); // Alice starts a proposal with some deposit. @@ -1278,8 +1278,8 @@ fn reject_proposal_works() { System::set_block_number(1); let init_bal = 300; - let proposer = User::new(AccountKeyring::Bob).balance(init_bal); - let member = User::new(AccountKeyring::Alice); + let proposer = User::new(Sr25519Keyring::Bob).balance(init_bal); + let member = User::new(Sr25519Keyring::Alice); set_members(vec![member.did]); // Alice starts a proposal with some deposit. @@ -1371,8 +1371,8 @@ fn reject_proposal_will_unsnapshot() { assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); assert_ok!(Pips::set_prune_historical_pips(root(), false)); - let proposer = User::new(AccountKeyring::Alice); - let member = User::new(AccountKeyring::Bob).balance(300); + let proposer = User::new(Sr25519Keyring::Alice); + let member = User::new(Sr25519Keyring::Bob).balance(300); set_members(vec![member.did]); let id = PipId(0); @@ -1391,7 +1391,7 @@ fn reject_proposal_will_unschedule() { assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); assert_ok!(Pips::set_prune_historical_pips(root(), false)); - let alice = User::new(AccountKeyring::Alice).balance(300); + let alice = User::new(Sr25519Keyring::Alice).balance(300); set_members(vec![alice.did]); let check = |id: PipId| { @@ -1425,9 +1425,9 @@ fn reschedule_execution_only_release_coordinator() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); set_members(vec![alice.did, bob.did, charlie.did]); assert_ok!(Committee::set_release_coordinator(gc_vmo(), charlie.did)); @@ -1456,7 +1456,7 @@ fn reschedule_execution_only_release_coordinator() { } fn init_rc() -> User { - let user = User::new(AccountKeyring::Alice); + let user = User::new(Sr25519Keyring::Alice); set_members(vec![user.did]); assert_ok!(Committee::set_release_coordinator(gc_vmo(), user.did)); user @@ -1476,7 +1476,7 @@ fn reschedule_execution_not_scheduled() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); let rc = init_rc(); - let proposer = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Bob); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); let id = PipIdSequence::::get(); assert_ok!(community_proposal(proposer, 0)); @@ -1499,7 +1499,7 @@ fn reschedule_execution_in_the_past() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); let rc = init_rc(); - let proposer = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Bob); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); let id = scheduled_proposal(proposer, rc, 0); let next = System::block_number() + 1; @@ -1521,7 +1521,7 @@ fn reschedule_execution_works() { // General setup. let rc = init_rc(); - let proposer = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Bob); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); // Schedule a proposal and verify that it is. @@ -1560,7 +1560,7 @@ fn clear_snapshot_not_gc_member() { System::set_block_number(1); init_rc(); assert_bad_origin!(Pips::clear_snapshot(root())); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); assert_noop!( Pips::clear_snapshot(bob.origin()), Error::NotACommitteeMember, @@ -1581,7 +1581,7 @@ fn clear_snapshot_works() { assert_eq!(SnapshotMeta::::get(), None); // Make a snapshot with something and clear it. - let proposer = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Bob); assert_ok!(community_proposal(proposer, 100)); assert_ok!(community_proposal(proposer, 200)); assert_ok!(community_proposal(proposer, 400)); @@ -1600,7 +1600,7 @@ fn snapshot_not_gc_member() { System::set_block_number(1); init_rc(); assert_bad_origin!(Pips::snapshot(root())); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); assert_noop!(Pips::snapshot(bob.origin()), Error::NotACommitteeMember); }); } @@ -1613,7 +1613,7 @@ fn snapshot_only_pending_hot_community() { assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); - let proposer = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Bob); let r = rejected_proposal(proposer); let e = executed_community_proposal(proposer, rc); @@ -1644,12 +1644,12 @@ fn snapshot_works() { ExtBuilder::default().monied(true).build().execute_with(|| { System::set_block_number(1); - let proposer = User::new(AccountKeyring::Alice); + let proposer = User::new(Sr25519Keyring::Alice); let propose = |d| { assert_ok!(community_proposal(proposer, d)); }; - let member = User::new(AccountKeyring::Bob); + let member = User::new(Sr25519Keyring::Bob); set_members(vec![member.did]); let vote = |id, aye, deposit| Pips::vote(member.origin(), PipId(id), aye, deposit); let snapshot = || Pips::snapshot(member.origin()); @@ -1710,8 +1710,8 @@ fn enact_snapshot_results_input_too_large() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let proposer = User::new(AccountKeyring::Alice); - let member = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Alice); + let member = User::new(Sr25519Keyring::Bob); set_members(vec![member.did]); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); @@ -1753,12 +1753,12 @@ fn enact_snapshot_results_id_mismatch() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let user = User::new(AccountKeyring::Bob); + let user = User::new(Sr25519Keyring::Bob); set_members(vec![user.did]); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); - let proposer = User::new(AccountKeyring::Alice); + let proposer = User::new(Sr25519Keyring::Alice); assert_ok!(community_proposal(proposer, 0)); assert_ok!(community_proposal(proposer, 0)); @@ -1785,12 +1785,12 @@ fn enact_snapshot_results_works() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let proposer = User::new(AccountKeyring::Alice); + let proposer = User::new(Sr25519Keyring::Alice); let propose = || { assert_ok!(community_proposal(proposer, 0)); }; - let member = User::new(AccountKeyring::Bob); + let member = User::new(Sr25519Keyring::Bob); set_members(vec![member.did]); assert_ok!(Pips::set_prune_historical_pips(root(), false)); @@ -1854,7 +1854,7 @@ fn expiry_works() { // Test non-prune logic. Prune logic is tested elsewhere. assert_ok!(Pips::set_prune_historical_pips(root(), false)); - let proposer = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Bob); let id = expired_proposal(proposer, 13); assert_state(id, true, ProposalState::Expired); // Travel back in time, and ensure expiry is sticky. @@ -1865,7 +1865,7 @@ fn expiry_works() { // Make sure non-pending PIPs cannot expire. assert_ok!(Pips::set_prune_historical_pips(root(), false)); assert_ok!(Pips::set_pending_pip_expiry(root(), MaybeBlock::Some(13))); - let member = User::new(AccountKeyring::Alice); + let member = User::new(Sr25519Keyring::Alice); set_members(vec![member.did]); let r = rejected_proposal(proposer); let e = executed_community_proposal(proposer, member); @@ -1892,7 +1892,7 @@ fn propose_dupe_live_insert_panics() { // Returns an error since pip_id is already in the live queue assert_eq!( - community_proposal(User::new(AccountKeyring::Alice), 0).unwrap_err(), + community_proposal(User::new(Sr25519Keyring::Alice), 0).unwrap_err(), Error::InvalidPipId.into() ); }); @@ -1905,7 +1905,7 @@ fn execute_scheduled_pip() { assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); assert_ok!(Pips::set_prune_historical_pips(root(), true)); let pip_id = PipIdSequence::::get(); - let user = User::new(AccountKeyring::Alice); + let user = User::new(Sr25519Keyring::Alice); assert_ok!(remark_proposal(user, 0)); set_members(vec![user.did]); assert_ok!(Pips::snapshot(user.origin())); @@ -1926,7 +1926,7 @@ fn expire_scheduled_pip() { assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); assert_ok!(Pips::set_prune_historical_pips(root(), true)); let pip_id = PipIdSequence::::get(); - let user = User::new(AccountKeyring::Alice); + let user = User::new(Sr25519Keyring::Alice); assert_ok!(remark_proposal(user, 0)); assert_state(pip_id, false, ProposalState::Pending); assert_ok!(Pips::expire_scheduled_pip(root(), GC_DID, pip_id)); @@ -1940,7 +1940,7 @@ fn live_queue_off_by_one_insertion_regression_test() { System::set_block_number(1); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); - let proposer = User::new(AccountKeyring::Alice); + let proposer = User::new(Sr25519Keyring::Alice); assert_ok!(community_proposal(proposer, 2)); assert_ok!(community_proposal(proposer, 4)); assert_eq!( @@ -1948,7 +1948,7 @@ fn live_queue_off_by_one_insertion_regression_test() { vec![spip(0, true, 2), spip(1, true, 4)] ); - let user = User::new(AccountKeyring::Bob); + let user = User::new(Sr25519Keyring::Bob); assert_ok!(Pips::vote(user.origin(), PipId(0), true, 1)); assert_eq!( LiveQueue::::get(), @@ -1964,8 +1964,8 @@ fn live_queue_off_by_one_insertion_regression_test2() { assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); assert_ok!(Pips::set_active_pip_limit(root(), 0)); - let proposer = User::new(AccountKeyring::Alice); - let voter = User::new(AccountKeyring::Bob); + let proposer = User::new(Sr25519Keyring::Alice); + let voter = User::new(Sr25519Keyring::Bob); assert_ok!(community_proposal(proposer, 0)); // 0 assert_ok!(community_proposal(proposer, 0)); // 1 @@ -1982,9 +1982,9 @@ fn live_queue_off_by_one_insertion_regression_test2() { #[test] fn pips_rpcs() { ExtBuilder::default().monied(true).build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); System::set_block_number(1); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); @@ -2014,7 +2014,7 @@ fn pips_rpcs() { } ); assert_eq!( - Pips::proposed_by(Proposer::Community(AccountKeyring::Alice.to_account_id())), + Pips::proposed_by(Proposer::Community(Sr25519Keyring::Alice.to_account_id())), vec![pip_id1, pip_id0], ); assert_eq!(Pips::voted_on(bob.acc()), vec![pip_id1, pip_id0]); @@ -2027,10 +2027,10 @@ fn prune_data_with_leftover() { System::set_block_number(1); // Creates a proposal and 3 users vote on it - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); + let charlie = User::new(Sr25519Keyring::Charlie); assert_ok!(Pips::set_min_proposal_deposit(root(), 0)); assert_ok!(community_proposal(alice, 0)); diff --git a/pallets/runtime/tests/src/portfolio.rs b/pallets/runtime/tests/src/portfolio.rs index f6af9c3aff..82261d7dc2 100644 --- a/pallets/runtime/tests/src/portfolio.rs +++ b/pallets/runtime/tests/src/portfolio.rs @@ -1,5 +1,5 @@ use frame_support::{assert_noop, assert_ok}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use pallet_nft::NFTOwner; use pallet_portfolio::{ @@ -34,7 +34,7 @@ type Portfolio = pallet_portfolio::Pallet; type Settlement = pallet_settlement::Pallet; fn create_portfolio() -> (User, PortfolioNumber) { - let owner = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Alice); let name = PortfolioName::from([42u8].to_vec()); let num = NextPortfolioNumber::::get(&owner.did); assert_eq!(num, PortfolioNumber(1)); @@ -70,7 +70,7 @@ macro_rules! assert_owner_is_custodian { #[test] fn portfolio_name_too_long() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Alice); let id = NextPortfolioNumber::::get(owner.did); let create = |name| Portfolio::create_portfolio(owner.origin(), name); let rename = |name| Portfolio::rename_portfolio(owner.origin(), id, name); @@ -85,7 +85,7 @@ fn portfolio_name_too_long() { #[test] fn portfolio_name_taken() { ExtBuilder::default().build().execute_with(|| { - let owner = User::new(AccountKeyring::Alice); + let owner = User::new(Sr25519Keyring::Alice); let id = NextPortfolioNumber::::get(owner.did); let create = |name: &str| Portfolio::create_portfolio(owner.origin(), name.into()); let rename = |name: &str| Portfolio::rename_portfolio(owner.origin(), id, name.into()); @@ -233,7 +233,7 @@ fn do_move_asset_from_portfolio(memo: Option) { System::set_block_number(1); // This is needed to enable events. let (owner, num) = create_portfolio(); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); let asset_id = create_and_issue_sample_asset(&owner); assert_eq!( Portfolio::default_portfolio_balance(owner.did, &asset_id), @@ -496,7 +496,7 @@ fn can_lock_unlock_assets() { fn can_take_custody_of_portfolios() { ExtBuilder::default().build().execute_with(|| { let (owner, num) = create_portfolio(); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); let owner_default_portfolio = PortfolioId::default_portfolio(owner.did); let owner_user_portfolio = PortfolioId::user_portfolio(owner.did, num); @@ -585,7 +585,7 @@ fn can_take_custody_of_portfolios() { fn quit_portfolio_custody() { ExtBuilder::default().build().execute_with(|| { let (alice, num) = create_portfolio(); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); let user_portfolio = PortfolioId::user_portfolio(alice.did, num); assert_noop!( @@ -607,7 +607,7 @@ fn quit_portfolio_custody() { fn delete_portfolio_with_nfts() { ExtBuilder::default().build().execute_with(|| { // First we need to create a collection and mint one NFT - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); Portfolio::create_portfolio( alice.clone().origin(), PortfolioName(b"MyPortfolio".to_vec()), @@ -643,8 +643,8 @@ fn delete_portfolio_with_nfts() { fn delete_portfolio_with_locked_nfts() { ExtBuilder::default().build().execute_with(|| { // First we need to create a collection, mint one NFT and lock it - let alice: User = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); Portfolio::create_portfolio( alice.clone().origin(), PortfolioName(b"MyPortfolio".to_vec()), @@ -704,7 +704,7 @@ fn delete_portfolio_with_locked_nfts() { fn move_nft_not_in_portfolio() { ExtBuilder::default().build().execute_with(|| { // First we need to create a collection, mint one NFT, and create one portfolio - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId { did: alice.did, kind: PortfolioKind::Default, @@ -755,7 +755,7 @@ fn move_nft_not_in_portfolio() { fn move_portfolio_nfts() { ExtBuilder::default().build().execute_with(|| { // First we need to create a collection, mint two NFTs, and create one portfolio - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId { did: alice.did, kind: PortfolioKind::Default, @@ -840,7 +840,7 @@ fn move_portfolio_nfts() { #[test] fn move_more_funds() { ExtBuilder::default().build().execute_with(|| { - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId { did: alice.did, kind: PortfolioKind::Default, @@ -890,7 +890,7 @@ fn move_more_funds() { #[test] fn empty_fungible_move() { ExtBuilder::default().build().execute_with(|| { - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId { did: alice.did, kind: PortfolioKind::Default, @@ -927,7 +927,7 @@ fn empty_fungible_move() { #[test] fn empty_nft_move() { ExtBuilder::default().build().execute_with(|| { - let alice: User = User::new(AccountKeyring::Alice); + let alice: User = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId { did: alice.did, kind: PortfolioKind::Default, @@ -961,7 +961,7 @@ fn empty_nft_move() { #[test] fn pre_approve_portfolio() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); let alice_user_porfolio = PortfolioId::user_portfolio(alice.did, PortfolioNumber(1)); Portfolio::create_portfolio(alice.origin(), b"AliceUserPortfolio".into()).unwrap(); @@ -992,7 +992,7 @@ fn pre_approve_portfolio() { #[test] fn remove_portfolio_pre_approval() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); let alice_user_porfolio = PortfolioId::user_portfolio(alice.did, PortfolioNumber(1)); Portfolio::create_portfolio(alice.origin(), b"AliceUserPortfolio".into()).unwrap(); @@ -1025,9 +1025,9 @@ fn remove_portfolio_pre_approval() { #[test] fn unauthorized_custodian_pre_approval() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let eve = User::new(AccountKeyring::Eve); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let eve = User::new(Sr25519Keyring::Eve); let alice_user_porfolio = PortfolioId::user_portfolio(alice.did, PortfolioNumber(1)); Portfolio::create_portfolio(alice.origin(), b"AliceUserPortfolio".into()).unwrap(); @@ -1055,8 +1055,8 @@ fn unauthorized_custodian_pre_approval() { #[test] fn create_custody_portfolio_missing_owners_permission() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let portfolio_name = PortfolioName("AliceOwnsBobControls".as_bytes().to_vec()); assert_noop!( @@ -1073,8 +1073,8 @@ fn create_custody_portfolio_missing_owners_permission() { #[test] fn create_custody_portfolio() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let portfolio_number = PortfolioNumber(1); let portfolio_name = PortfolioName("AliceOwnsBobControls".as_bytes().to_vec()); let portfolio_id = PortfolioId { @@ -1112,8 +1112,8 @@ fn create_custody_portfolio() { #[test] fn create_custody_portfolio_revoke_permission() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let portfolio_name = PortfolioName("AliceOwnsBobControls".as_bytes().to_vec()); assert_ok!(Portfolio::allow_identity_to_create_portfolios( @@ -1145,7 +1145,7 @@ fn create_custody_portfolio_revoke_permission() { #[test] fn allow_identity_to_create_portfolios_not_allowed() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); assert_noop!( Portfolio::allow_identity_to_create_portfolios(alice.origin(), alice.did), @@ -1157,8 +1157,8 @@ fn allow_identity_to_create_portfolios_not_allowed() { #[test] fn assign_custody_of_default_portfolio() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let portfolio_id = PortfolioId::new(alice.did, PortfolioKind::Default); let auth_id = Identity::add_auth( diff --git a/pallets/runtime/tests/src/protocol_fee.rs b/pallets/runtime/tests/src/protocol_fee.rs index f051848a2a..61dbf66e90 100644 --- a/pallets/runtime/tests/src/protocol_fee.rs +++ b/pallets/runtime/tests/src/protocol_fee.rs @@ -6,7 +6,7 @@ use super::{ use frame_support::{assert_noop, assert_ok}; use polymesh_common_utilities::protocol_fee::ProtocolOp; use polymesh_primitives::traits::CddAndFeeDetails; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; type Error = pallet_protocol_fee::Error; type ProtocolFee = pallet_protocol_fee::Pallet; @@ -25,12 +25,12 @@ fn can_compute_fee() { fn can_charge_fee_batch() { ExtBuilder::default().build().execute_with(|| { let _ = - register_keyring_account_with_balance(AccountKeyring::Alice, PROTOCOL_OP_BASE_FEE * 10) + register_keyring_account_with_balance(Sr25519Keyring::Alice, PROTOCOL_OP_BASE_FEE * 10) .unwrap(); - TestStorage::set_payer_context(Some(AccountKeyring::Alice.to_account_id())); + TestStorage::set_payer_context(Some(Sr25519Keyring::Alice.to_account_id())); assert_eq!( TestStorage::get_payer_from_context(), - Some(AccountKeyring::Alice.to_account_id()) + Some(Sr25519Keyring::Alice.to_account_id()) ); assert_ok!(ProtocolFee::batch_charge_fee(ProtocolOp::AssetIssue, 7)); assert_noop!( diff --git a/pallets/runtime/tests/src/relayer_test.rs b/pallets/runtime/tests/src/relayer_test.rs index 5f1a745f4b..a3899a71f7 100644 --- a/pallets/runtime/tests/src/relayer_test.rs +++ b/pallets/runtime/tests/src/relayer_test.rs @@ -14,7 +14,7 @@ use polymesh_primitives::{ TransactionError, }; use polymesh_runtime_develop::runtime::{CddHandler, RuntimeCall as DevRuntimeCall}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_runtime::{ traits::{Dispatchable, SignedExtension}, transaction_validity::{InvalidTransaction, TransactionValidityError}, @@ -37,7 +37,7 @@ type IdentityError = pallet_identity::Error; fn call_balance_transfer(val: Balance) -> RuntimeCall { RuntimeCall::Balances(pallet_balances::Call::transfer { - dest: MultiAddress::Id(AccountKeyring::Alice.to_account_id()), + dest: MultiAddress::Id(Sr25519Keyring::Alice.to_account_id()), value: val, }) } @@ -146,9 +146,9 @@ fn basic_relayer_paying_key_test() { .execute_with(&do_basic_relayer_paying_key_test); } fn do_basic_relayer_paying_key_test() { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); - let dave = User::new(AccountKeyring::Dave); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let dave = User::new(Sr25519Keyring::Dave); // Add authorization for using Alice as the paying key for Bob. assert_ok!(Relayer::set_paying_key(alice.origin(), bob.acc(), 10u128)); @@ -237,8 +237,8 @@ fn update_polyx_limit_test() { .execute_with(&do_update_polyx_limit_test); } fn do_update_polyx_limit_test() { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); enum Action { Set, @@ -293,9 +293,9 @@ fn accept_new_paying_key_test() { .execute_with(&do_accept_new_paying_key_test); } fn do_accept_new_paying_key_test() { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); - let dave = User::new(AccountKeyring::Dave); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let dave = User::new(Sr25519Keyring::Dave); let assert_usages = |bob_cnt, alice_cnt, dave_cnt| { assert_key_usage(bob, bob_cnt); @@ -335,8 +335,8 @@ fn user_remove_paying_key_test() { .execute_with(&do_user_remove_paying_key_test); } fn do_user_remove_paying_key_test() { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); setup_subsidy(bob, alice, 2000); @@ -364,8 +364,8 @@ fn relayer_user_key_missing_cdd_test() { .execute_with(&do_relayer_user_key_missing_cdd_test); } fn do_relayer_user_key_missing_cdd_test() { - let alice = User::new(AccountKeyring::Alice); - let bob_acc = AccountKeyring::Bob.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob_acc = Sr25519Keyring::Bob.to_account_id(); let (bob_sign, _) = make_account_without_cdd(bob_acc.clone()).unwrap(); // Add authorization for using Alice as the paying key for Bob. @@ -391,8 +391,8 @@ fn relayer_paying_key_missing_cdd_test() { .execute_with(&do_relayer_paying_key_missing_cdd_test); } fn do_relayer_paying_key_missing_cdd_test() { - let alice = User::new(AccountKeyring::Alice); - let bob_acc = AccountKeyring::Bob.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob_acc = Sr25519Keyring::Bob.to_account_id(); let (bob_sign, _) = make_account_without_cdd(bob_acc.clone()).unwrap(); // Add authorization for using Bob as the paying key for Alice. @@ -416,8 +416,8 @@ fn user_remove_paying_key_transaction_fee_test() { .execute_with(&do_user_remove_paying_key_transaction_fee_test); } fn do_user_remove_paying_key_transaction_fee_test() { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let prev_alice_balance = Balances::free_balance(&alice.acc()); let prev_bob_balance = Balances::free_balance(&bob.acc()); @@ -474,8 +474,8 @@ fn relayer_transaction_and_protocol_fees_test() { .execute_with(&do_relayer_transaction_and_protocol_fees_test); } fn do_relayer_transaction_and_protocol_fees_test() { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let prev_balance = Balances::free_balance(&alice.acc()); let remaining = 2_000 * POLY; @@ -565,8 +565,8 @@ fn relayer_batched_subsidy_calls_test() { .execute_with(&do_relayer_batched_subsidy_calls_test); } fn do_relayer_batched_subsidy_calls_test() { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let prev_balance = Balances::free_balance(&alice.acc()); let remaining = 2_000 * POLY; @@ -669,8 +669,8 @@ fn relayer_accept_cdd_and_fees_test() { .execute_with(&do_relayer_accept_cdd_and_fees_test); } fn do_relayer_accept_cdd_and_fees_test() { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let bob_sign = Signatory::Account(bob.acc()); // Alice creates authoration to subsidise for Bob. diff --git a/pallets/runtime/tests/src/settlement_pallet/execute_instruction.rs b/pallets/runtime/tests/src/settlement_pallet/execute_instruction.rs index 05d214af09..b04fba2de5 100644 --- a/pallets/runtime/tests/src/settlement_pallet/execute_instruction.rs +++ b/pallets/runtime/tests/src/settlement_pallet/execute_instruction.rs @@ -1,5 +1,5 @@ use frame_support::assert_ok; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use pallet_asset::BalanceOf; use pallet_portfolio::PortfolioLockedAssets; @@ -27,9 +27,9 @@ type PortfolioError = pallet_portfolio::Error; fn storage_pruning() { ExtBuilder::default().build().execute_with(|| { let inst_id = InstructionId(0); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let _ = add_and_affirm_simple_instruction( alice, @@ -80,8 +80,8 @@ fn storage_rollback() { System::set_block_number(1); let instruction_id = InstructionId(0); - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); diff --git a/pallets/runtime/tests/src/settlement_pallet/lock_instruction.rs b/pallets/runtime/tests/src/settlement_pallet/lock_instruction.rs index bba3e92d91..651d135fbe 100644 --- a/pallets/runtime/tests/src/settlement_pallet/lock_instruction.rs +++ b/pallets/runtime/tests/src/settlement_pallet/lock_instruction.rs @@ -1,5 +1,5 @@ use frame_support::{assert_noop, assert_ok}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_std::collections::btree_set::BTreeSet; use pallet_asset::BalanceOf; @@ -33,9 +33,9 @@ type NFTError = pallet_nft::Error; fn invalid_caller() { ExtBuilder::default().build().execute_with(|| { let inst_id = InstructionId(0); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); @@ -70,9 +70,9 @@ fn invalid_caller() { fn mediator_has_not_affirmed() { ExtBuilder::default().build().execute_with(|| { let inst_id = InstructionId(0); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); @@ -107,9 +107,9 @@ fn mediator_has_not_affirmed() { fn invalid_type() { ExtBuilder::default().build().execute_with(|| { let inst_id = InstructionId(0); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); @@ -146,9 +146,9 @@ fn invalid_type() { fn missing_affirmation() { ExtBuilder::default().build().execute_with(|| { let inst_id = InstructionId(0); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); @@ -184,9 +184,9 @@ fn missing_affirmation() { #[test] fn invalid_inst_status() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -203,9 +203,9 @@ fn invalid_inst_status() { #[test] fn expired_mediator_affirmation() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -221,9 +221,9 @@ fn expired_mediator_affirmation() { #[test] fn unauthorized_venue() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, _) = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -240,9 +240,9 @@ fn unauthorized_venue() { #[test] fn frozen_asset() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, _) = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -258,17 +258,17 @@ fn frozen_asset() { #[test] fn sender_missing_cdd_claim() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); Identity::revoke_claim( - RuntimeOrigin::signed(AccountKeyring::Eve.to_account_id()), + RuntimeOrigin::signed(Sr25519Keyring::Eve.to_account_id()), alice.did, Claim::CustomerDueDiligence(Default::default()), ) @@ -284,17 +284,17 @@ fn sender_missing_cdd_claim() { #[test] fn rcv_missing_cdd_claim() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); Identity::revoke_claim( - RuntimeOrigin::signed(AccountKeyring::Eve.to_account_id()), + RuntimeOrigin::signed(Sr25519Keyring::Eve.to_account_id()), bob.did, Claim::CustomerDueDiligence(Default::default()), ) @@ -311,9 +311,9 @@ fn rcv_missing_cdd_claim() { fn receivers_missing_portfolio() { ExtBuilder::default().build().execute_with(|| { let inst_id = InstructionId(0); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let bob_portfolio = PortfolioId::new(bob.did, PortfolioKind::User(PortfolioNumber(1))); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); @@ -369,9 +369,9 @@ fn receivers_missing_portfolio() { #[test] fn receivers_not_compliant() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, _) = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -403,9 +403,9 @@ fn receivers_not_compliant() { #[test] fn sender_tokens_are_locked() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, _) = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -422,9 +422,9 @@ fn sender_tokens_are_locked() { #[test] fn sender_invalid_portfolio_balance() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, _) = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -445,9 +445,9 @@ fn sender_invalid_portfolio_balance() { #[test] fn sender_invalid_balance() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, _) = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -464,9 +464,9 @@ fn sender_invalid_balance() { #[test] fn senders_not_compliant() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, _) = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -500,9 +500,9 @@ fn invalid_weight() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -522,9 +522,9 @@ fn success() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); diff --git a/pallets/runtime/tests/src/settlement_pallet/manual_execution.rs b/pallets/runtime/tests/src/settlement_pallet/manual_execution.rs index 3d64784a34..524f2fe6e1 100644 --- a/pallets/runtime/tests/src/settlement_pallet/manual_execution.rs +++ b/pallets/runtime/tests/src/settlement_pallet/manual_execution.rs @@ -1,5 +1,5 @@ use frame_support::{assert_err_ignore_postinfo, assert_noop, assert_ok, assert_storage_noop}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use pallet_asset::BalanceOf; use pallet_nft::{NFTOwner, NumberOfNFTs}; @@ -27,10 +27,10 @@ type PortfolioError = pallet_portfolio::Error; #[test] fn invalid_caller() { ExtBuilder::default().build().execute_with(|| { - let eve = User::new(AccountKeyring::Eve); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let eve = User::new(Sr25519Keyring::Eve); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -80,10 +80,10 @@ fn invalid_caller() { #[test] fn execute_settle_after_lock_before_lock() { ExtBuilder::default().build().execute_with(|| { - let eve = User::new(AccountKeyring::Eve); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let eve = User::new(Sr25519Keyring::Eve); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -131,9 +131,9 @@ fn execute_settle_after_lock_before_lock() { #[test] fn exceeded_maximum_locking_period() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -159,9 +159,9 @@ fn exceeded_maximum_locking_period() { #[test] fn controller_transfer_nft_is_locked() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let (_, asset_id) = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -183,9 +183,9 @@ fn controller_transfer_nft_is_locked() { #[test] fn controller_transfer_insufficient_balance() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, _) = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -207,9 +207,9 @@ fn controller_transfer_insufficient_balance() { #[test] fn unexpected_settle_on_affirmation() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleOnAffirmation); @@ -231,9 +231,9 @@ fn unexpected_settle_on_affirmation() { #[test] fn unexpected_settle_on_block() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction( alice, @@ -260,9 +260,9 @@ fn unexpected_settle_on_block() { #[test] fn execute_before_lock() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -284,9 +284,9 @@ fn execute_before_lock() { #[test] fn successfully_execute_after_locking() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, nft_asset_id) = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); diff --git a/pallets/runtime/tests/src/settlement_pallet/reject_instruction.rs b/pallets/runtime/tests/src/settlement_pallet/reject_instruction.rs index 8bd9c3aeb1..f5c24cb8c9 100644 --- a/pallets/runtime/tests/src/settlement_pallet/reject_instruction.rs +++ b/pallets/runtime/tests/src/settlement_pallet/reject_instruction.rs @@ -1,5 +1,5 @@ use frame_support::{assert_noop, assert_ok}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use pallet_portfolio::PortfolioLockedAssets; use pallet_settlement::{AffirmsReceived, InstructionAffirmsPending, InstructionLegs}; @@ -21,10 +21,10 @@ type Timestamp = pallet_timestamp::Pallet; #[test] fn invalid_caller() { ExtBuilder::default().build().execute_with(|| { - let eve = User::new(AccountKeyring::Eve); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let eve = User::new(Sr25519Keyring::Eve); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let _ = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -48,9 +48,9 @@ fn invalid_caller() { #[test] fn invalid_caller_locked_for_execution() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let _ = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -81,9 +81,9 @@ fn invalid_caller_locked_for_execution() { #[test] fn invalid_weight() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let _ = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -102,9 +102,9 @@ fn invalid_weight() { #[test] fn success() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, _) = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); @@ -166,9 +166,9 @@ fn success() { #[test] fn success_expired_lock() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let _ = add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); diff --git a/pallets/runtime/tests/src/settlement_pallet/withdraw_affirmation.rs b/pallets/runtime/tests/src/settlement_pallet/withdraw_affirmation.rs index 877abe72c0..253a4a80b6 100644 --- a/pallets/runtime/tests/src/settlement_pallet/withdraw_affirmation.rs +++ b/pallets/runtime/tests/src/settlement_pallet/withdraw_affirmation.rs @@ -1,5 +1,5 @@ use frame_support::{assert_noop, assert_ok}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use polymesh_primitives::settlement::{InstructionId, SettlementType}; use polymesh_primitives::PortfolioId; @@ -18,9 +18,9 @@ fn withdraw_after_locking() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock); diff --git a/pallets/runtime/tests/src/settlement_test.rs b/pallets/runtime/tests/src/settlement_test.rs index 8ffca3c3ce..bd1dfaf141 100644 --- a/pallets/runtime/tests/src/settlement_test.rs +++ b/pallets/runtime/tests/src/settlement_test.rs @@ -42,7 +42,7 @@ use polymesh_primitives::{ PortfolioId, PortfolioKind, PortfolioName, PortfolioNumber, Scope, Signatory, Ticker, TrustedFor, TrustedIssuer, WeightMeter, }; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use super::asset_pallet::setup::{create_and_issue_sample_asset, ISSUE_AMOUNT}; use super::asset_test::max_len_bytes; @@ -188,7 +188,7 @@ pub fn set_current_block_number(block: u32) { #[test] fn venue_details_length_limited() { ExtBuilder::default().build().execute_with(|| { - let actor = User::new(AccountKeyring::Alice); + let actor = User::new(Sr25519Keyring::Alice); let id = VenueCounter::::get(); let create = |d| Settlement::create_venue(actor.origin(), d, vec![], VenueType::Exchange); let update = |d| Settlement::update_venue_details(actor.origin(), id, d); @@ -216,14 +216,14 @@ fn user_venues(did: IdentityId) -> Vec { #[test] fn venue_registration() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let venue_counter = VenueCounter::::get(); assert_ok!(Settlement::create_venue( alice.origin(), VenueDetails::default(), vec![ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id() + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id() ], VenueType::Exchange )); @@ -245,13 +245,13 @@ fn venue_registration() { true ); assert_eq!( - VenueSigners::::get(venue_counter, AccountKeyring::Bob.to_account_id()), + VenueSigners::::get(venue_counter, Sr25519Keyring::Bob.to_account_id()), true ); assert_eq!( VenueSigners::::get( venue_counter, - AccountKeyring::Charlie.to_account_id() + Sr25519Keyring::Charlie.to_account_id() ), false ); @@ -260,7 +260,7 @@ fn venue_registration() { assert_ok!(Settlement::create_venue( alice.origin(), VenueDetails::default(), - vec![alice.acc(), AccountKeyring::Bob.to_account_id()], + vec![alice.acc(), Sr25519Keyring::Bob.to_account_id()], VenueType::Exchange )); assert_eq!( @@ -283,7 +283,7 @@ fn venue_registration() { } fn test_with_cdd_provider(test: impl FnOnce(AccountId)) { - let cdd = AccountKeyring::Eve.to_account_id(); + let cdd = Sr25519Keyring::Eve.to_account_id(); ExtBuilder::default() .cdd_providers(vec![cdd.clone()]) .build() @@ -293,8 +293,8 @@ fn test_with_cdd_provider(test: impl FnOnce(AccountId)) { #[test] fn basic_settlement() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let mut alice = UserWithBalance::new(alice, &[asset_id]); @@ -340,8 +340,8 @@ fn basic_settlement() { #[test] fn create_and_affirm_instruction() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let mut alice = UserWithBalance::new(alice, &[asset_id]); @@ -397,8 +397,8 @@ fn create_and_affirm_instruction() { #[test] fn overdraft_failure() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let mut alice = UserWithBalance::new(alice, &[asset_id]); @@ -440,8 +440,8 @@ fn overdraft_failure() { #[test] fn token_swap() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let asset_id2 = create_and_issue_sample_asset(&bob); @@ -567,8 +567,8 @@ fn token_swap() { #[test] fn settle_on_block() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let asset_id2 = create_and_issue_sample_asset(&bob); @@ -683,9 +683,9 @@ fn settle_on_block() { #[test] fn failed_execution() { ExtBuilder::default().build().execute_with(|| { - let dave: User = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let dave: User = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let asset_id2 = create_and_issue_sample_asset(&bob); @@ -694,7 +694,7 @@ fn failed_execution() { let instruction_id = InstructionCounter::::get(); assert_ok!(ComplianceManager::reset_asset_compliance( - Origin::signed(AccountKeyring::Bob.to_account_id()), + Origin::signed(Sr25519Keyring::Bob.to_account_id()), asset_id2, )); assert_ok!(ComplianceManager::add_compliance_requirement( @@ -848,8 +848,8 @@ fn failed_execution() { #[test] fn venue_filtering() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let block_number = System::block_number() + 1; let instruction_id = InstructionCounter::::get(); @@ -922,15 +922,15 @@ fn venue_filtering() { #[test] fn basic_fuzzing() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); - let dave = User::new(AccountKeyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); + let dave = User::new(Sr25519Keyring::Dave); let venue_counter = VenueCounter::::get(); assert_ok!(Settlement::create_venue( - Origin::signed(AccountKeyring::Alice.to_account_id()), + Origin::signed(Sr25519Keyring::Alice.to_account_id()), VenueDetails::default(), - vec![AccountKeyring::Alice.to_account_id()], + vec![Sr25519Keyring::Alice.to_account_id()], VenueType::Other )); let mut assets = Vec::with_capacity(40); @@ -1166,8 +1166,8 @@ fn basic_fuzzing() { #[test] fn claim_multiple_receipts_during_authorization() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let ticker = Ticker::from_slice_truncated(b"TICKER".as_ref()); let ticker2 = Ticker::from_slice_truncated(b"TICKER2".as_ref()); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); @@ -1219,16 +1219,16 @@ fn claim_multiple_receipts_during_authorization() { 0, id, LegId(0), - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Alice.sign(&msg1.encode()).into(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Alice.sign(&msg1.encode()).into(), None ), ReceiptDetails::new( 0, id, LegId(0), - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Alice.sign(&msg2.encode()).into(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Alice.sign(&msg2.encode()).into(), None ), ], @@ -1245,16 +1245,16 @@ fn claim_multiple_receipts_during_authorization() { 0, id, LegId(0), - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Alice.sign(&msg1.encode()).into(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Alice.sign(&msg1.encode()).into(), None ), ReceiptDetails::new( 1, id, LegId(1), - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Alice.sign(&msg3.encode()).into(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Alice.sign(&msg3.encode()).into(), None ), ], @@ -1273,12 +1273,12 @@ fn claim_multiple_receipts_during_authorization() { assert_leg_status( id, LegId(0), - LegStatus::ExecutionToBeSkipped(AccountKeyring::Alice.to_account_id(), 0), + LegStatus::ExecutionToBeSkipped(Sr25519Keyring::Alice.to_account_id(), 0), ); assert_leg_status( id, LegId(1), - LegStatus::ExecutionToBeSkipped(AccountKeyring::Alice.to_account_id(), 1), + LegStatus::ExecutionToBeSkipped(Sr25519Keyring::Alice.to_account_id(), 1), ); assert_locked_assets(&asset_id, &alice, 0); @@ -1299,8 +1299,8 @@ fn claim_multiple_receipts_during_authorization() { #[test] fn overload_instruction() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let leg_limit = ::MaxNumberOfFungibleAssets::get() as usize; @@ -1357,23 +1357,23 @@ fn encode_receipt() { Ticker::from_slice_truncated(b"TICKER".as_ref()), 100, ); - println!("{:?}", AccountKeyring::Alice.sign(&msg1.encode())); + println!("{:?}", Sr25519Keyring::Alice.sign(&msg1.encode())); }); } #[test] fn test_weights_for_settlement_transaction() { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(|| { - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); - let bob = AccountKeyring::Bob.to_account_id(); + let bob = Sr25519Keyring::Bob.to_account_id(); let (bob_signed, bob_did) = make_account_with_balance(bob, 10_000).unwrap(); - let dave = AccountKeyring::Dave.to_account_id(); + let dave = Sr25519Keyring::Dave.to_account_id(); let (dave_signed, dave_did) = make_account_with_balance(dave, 10_000).unwrap(); let instruction_id = InstructionCounter::::get(); @@ -1463,8 +1463,8 @@ fn test_weights_for_settlement_transaction() { #[test] fn cross_portfolio_settlement() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let mut alice = UserWithBalance::new(alice, &[asset_id]); @@ -1541,8 +1541,8 @@ fn cross_portfolio_settlement() { #[test] fn multiple_portfolio_settlement() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let mut alice = UserWithBalance::new(alice, &[asset_id]); @@ -1683,8 +1683,8 @@ fn multiple_portfolio_settlement() { #[test] fn multiple_custodian_settlement() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let mut alice = UserWithBalance::new(alice, &[asset_id]); @@ -1852,9 +1852,9 @@ fn multiple_custodian_settlement() { #[test] fn reject_instruction() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let amount = 100u128; @@ -1923,8 +1923,8 @@ fn reject_instruction() { #[test] fn dirty_storage_with_tx() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let mut alice = UserWithBalance::new(alice, &[asset_id]); @@ -1985,9 +1985,9 @@ fn dirty_storage_with_tx() { #[test] fn reject_failed_instruction() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let amount = 100u128; @@ -2049,16 +2049,16 @@ fn reject_failed_instruction() { #[test] fn modify_venue_signers() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let charlie = User::new(AccountKeyring::Charlie); + let alice = User::new(Sr25519Keyring::Alice); + let charlie = User::new(Sr25519Keyring::Charlie); let venue_counter = VenueCounter::::get(); assert_ok!(Settlement::create_venue( alice.origin(), VenueDetails::default(), vec![ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id() + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id() ], VenueType::Exchange )); @@ -2068,7 +2068,7 @@ fn modify_venue_signers() { Settlement::update_venue_signers( charlie.origin(), venue_counter, - vec![AccountKeyring::Dave.to_account_id(),], + vec![Sr25519Keyring::Dave.to_account_id(),], true ), Error::Unauthorized @@ -2078,7 +2078,7 @@ fn modify_venue_signers() { assert_ok!(Settlement::update_venue_signers( alice.origin(), venue_counter, - vec![AccountKeyring::Charlie.to_account_id(),], + vec![Sr25519Keyring::Charlie.to_account_id(),], true )); @@ -2087,7 +2087,7 @@ fn modify_venue_signers() { Settlement::update_venue_signers( alice.origin(), venue_counter, - vec![AccountKeyring::Dave.to_account_id(),], + vec![Sr25519Keyring::Dave.to_account_id(),], false ), Error::SignerDoesNotExist @@ -2098,7 +2098,7 @@ fn modify_venue_signers() { Settlement::update_venue_signers( alice.origin(), venue_counter, - vec![AccountKeyring::Charlie.to_account_id(),], + vec![Sr25519Keyring::Charlie.to_account_id(),], true ), Error::SignerAlreadyExists @@ -2108,7 +2108,7 @@ fn modify_venue_signers() { assert_ok!(Settlement::update_venue_signers( alice.origin(), venue_counter, - vec![AccountKeyring::Charlie.to_account_id(),], + vec![Sr25519Keyring::Charlie.to_account_id(),], false )); @@ -2118,13 +2118,13 @@ fn modify_venue_signers() { true ); assert_eq!( - VenueSigners::::get(venue_counter, AccountKeyring::Bob.to_account_id()), + VenueSigners::::get(venue_counter, Sr25519Keyring::Bob.to_account_id()), true ); assert_eq!( VenueSigners::::get( venue_counter, - AccountKeyring::Charlie.to_account_id() + Sr25519Keyring::Charlie.to_account_id() ), false ); @@ -2134,9 +2134,9 @@ fn modify_venue_signers() { alice.origin(), venue_counter, vec![ - AccountKeyring::Charlie.to_account_id(), - AccountKeyring::Dave.to_account_id(), - AccountKeyring::Eve.to_account_id(), + Sr25519Keyring::Charlie.to_account_id(), + Sr25519Keyring::Dave.to_account_id(), + Sr25519Keyring::Eve.to_account_id(), ], true )); @@ -2146,9 +2146,9 @@ fn modify_venue_signers() { alice.origin(), venue_counter, vec![ - AccountKeyring::Charlie.to_account_id(), - AccountKeyring::Dave.to_account_id(), - AccountKeyring::Eve.to_account_id(), + Sr25519Keyring::Charlie.to_account_id(), + Sr25519Keyring::Dave.to_account_id(), + Sr25519Keyring::Eve.to_account_id(), ], false )); @@ -2159,10 +2159,10 @@ fn modify_venue_signers() { alice.origin(), venue_counter, vec![ - AccountKeyring::Charlie.to_account_id(), - AccountKeyring::Dave.to_account_id(), - AccountKeyring::Eve.to_account_id(), - AccountKeyring::Bob.to_account_id() + Sr25519Keyring::Charlie.to_account_id(), + Sr25519Keyring::Dave.to_account_id(), + Sr25519Keyring::Eve.to_account_id(), + Sr25519Keyring::Bob.to_account_id() ], true ), @@ -2174,22 +2174,22 @@ fn modify_venue_signers() { true ); assert_eq!( - VenueSigners::::get(venue_counter, AccountKeyring::Bob.to_account_id()), + VenueSigners::::get(venue_counter, Sr25519Keyring::Bob.to_account_id()), true ); assert_eq!( VenueSigners::::get( venue_counter, - AccountKeyring::Charlie.to_account_id() + Sr25519Keyring::Charlie.to_account_id() ), false ); assert_eq!( - VenueSigners::::get(venue_counter, AccountKeyring::Dave.to_account_id()), + VenueSigners::::get(venue_counter, Sr25519Keyring::Dave.to_account_id()), false ); assert_eq!( - VenueSigners::::get(venue_counter, AccountKeyring::Eve.to_account_id()), + VenueSigners::::get(venue_counter, Sr25519Keyring::Eve.to_account_id()), false ); }); @@ -2201,7 +2201,7 @@ fn assert_number_of_venue_signers() { let max_signers = ::MaxNumberOfVenueSigners::get(); let venue_id = VenueId(0); - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let initial_signers: Vec = (0..max_signers as u8) .map(|i| AccountId32::from([i; 32])) .collect(); @@ -2266,8 +2266,8 @@ fn assert_number_of_venue_signers() { #[test] fn reject_instruction_with_zero_amount() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let mut alice = UserWithBalance::new(alice, &[asset_id]); @@ -2302,8 +2302,8 @@ fn reject_instruction_with_zero_amount() { #[test] fn basic_settlement_with_memo() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let mut alice = UserWithBalance::new(alice, &[asset_id]); @@ -2381,8 +2381,8 @@ fn create_instruction( #[test] fn settle_manual_instruction() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let mut alice = UserWithBalance::new(alice, &[asset_id]); @@ -2485,9 +2485,9 @@ fn settle_manual_instruction() { #[test] fn settle_manual_instruction_with_portfolio() { test_with_cdd_provider(|_eve| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let mut alice = UserWithBalance::new(alice, &[asset_id]); @@ -2611,8 +2611,8 @@ fn settle_manual_instruction_with_portfolio() { #[test] fn add_nft_instruction_with_duplicated_nfts() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let nfts = NFTs::new_unverified(asset_id, vec![NFTId(1), NFTId(1)]); @@ -2640,8 +2640,8 @@ fn add_nft_instruction_with_duplicated_nfts() { #[test] fn add_nft_instruction_exceeding_nfts() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let nfts = NFTs::new_unverified( @@ -2684,8 +2684,8 @@ fn add_nft_instruction_exceeding_nfts() { #[test] fn add_nft_instruction() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); let nfts = NFTs::new_unverified(asset_id, vec![NFTId(1)]); @@ -2711,8 +2711,8 @@ fn add_nft_instruction() { fn add_and_affirm_nft_instruction() { test_with_cdd_provider(|_eve| { // First we need to create a collection, mint one NFT, and create a venue - let alice: User = User::new(AccountKeyring::Alice); - let bob: User = User::new(AccountKeyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); let collection_keys: NFTCollectionKeys = vec![AssetMetadataKey::Local(AssetMetadataLocalKey(1))].into(); let asset_id = create_nft_collection( @@ -2821,8 +2821,8 @@ fn add_and_affirm_nft_instruction() { fn add_and_affirm_nft_not_owned() { test_with_cdd_provider(|_eve| { // First we need to create a collection, mint one NFT, and create a venue - let alice: User = User::new(AccountKeyring::Alice); - let bob: User = User::new(AccountKeyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); let collection_keys: NFTCollectionKeys = vec![AssetMetadataKey::Local(AssetMetadataLocalKey(1))].into(); let asset_id = create_nft_collection( @@ -2877,8 +2877,8 @@ fn add_and_affirm_nft_not_owned() { fn add_same_nft_different_legs() { test_with_cdd_provider(|_eve| { // First we need to create a collection, mint two NFTs, and create a venue - let alice: User = User::new(AccountKeyring::Alice); - let bob: User = User::new(AccountKeyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); let collection_keys: NFTCollectionKeys = vec![AssetMetadataKey::Local(AssetMetadataLocalKey(1))].into(); let asset_id = create_nft_collection( @@ -2947,8 +2947,8 @@ fn add_and_affirm_with_receipts_nfts() { // First we need to create a collection, mint one NFT, and create a venue let id = InstructionId(0); let ticker = Ticker::from_slice_truncated(b"TICKER".as_ref()); - let alice: User = User::new(AccountKeyring::Alice); - let bob: User = User::new(AccountKeyring::Bob); + let alice: User = User::new(Sr25519Keyring::Alice); + let bob: User = User::new(Sr25519Keyring::Bob); let collection_keys: NFTCollectionKeys = vec![AssetMetadataKey::Local(AssetMetadataLocalKey(1))].into(); let asset_id = create_nft_collection( @@ -2998,8 +2998,8 @@ fn add_and_affirm_with_receipts_nfts() { 0, id, LegId(0), - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Alice + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Alice .sign( &Receipt::new(0, id, LegId(0), alice.did, bob.did, ticker, 1).encode() ) @@ -3017,8 +3017,8 @@ fn add_and_affirm_with_receipts_nfts() { #[test] fn add_instruction_unexpected_offchain_asset() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let venue_counter = VenueCounter::::get(); Settlement::create_venue( alice.origin(), @@ -3071,10 +3071,10 @@ fn add_instruction_unexpected_offchain_asset() { #[test] fn add_and_execute_offchain_instruction() { ExtBuilder::default().build().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie); - let alice = User::new(AccountKeyring::Alice); - let dave = User::new(AccountKeyring::Dave); - let bob = User::new(AccountKeyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); + let alice = User::new(Sr25519Keyring::Alice); + let dave = User::new(Sr25519Keyring::Dave); + let bob = User::new(Sr25519Keyring::Bob); let ticker = Ticker::from_slice_truncated(b"TICKER".as_ref()); let (_, venue_id) = create_and_issue_sample_asset_with_venue(&alice); let amount = 1; @@ -3091,8 +3091,8 @@ fn add_and_execute_offchain_instruction() { 0, id, LegId(0), - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Alice.sign(&receipt.encode()).into(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Alice.sign(&receipt.encode()).into(), None, )]; @@ -3144,8 +3144,8 @@ fn add_and_execute_offchain_instruction() { #[test] fn affirm_offchain_asset_without_receipt() { ExtBuilder::default().build().execute_with(|| { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let venue = VenueCounter::::get(); Settlement::create_venue( alice.origin(), @@ -3185,9 +3185,9 @@ fn affirm_offchain_asset_without_receipt() { fn add_instruction_with_offchain_assets() { ExtBuilder::default().build().execute_with(|| { // Setup base parameters - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let (asset_id, venue) = create_and_issue_sample_asset_with_venue(&alice); let asset_id2 = AssetId::new([0; 16]); @@ -3252,9 +3252,9 @@ fn add_instruction_with_offchain_assets() { fn add_instruction_with_pre_affirmed_tickers() { ExtBuilder::default().build().execute_with(|| { // Setup base parameters - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let bob_user_porfolio = PortfolioId::user_portfolio(bob.did, PortfolioNumber(1)); let (asset_id, venue) = create_and_issue_sample_asset_with_venue(&alice); @@ -3311,9 +3311,9 @@ fn add_instruction_with_pre_affirmed_tickers() { fn add_instruction_with_pre_affirmed_tickers_with_assigned_custodian() { ExtBuilder::default().build().execute_with(|| { // Setup base parameters - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let charlie = User::new(Sr25519Keyring::Charlie); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); let bob_user_porfolio = PortfolioId::user_portfolio(bob.did, PortfolioNumber(1)); @@ -3381,10 +3381,10 @@ fn add_instruction_with_pre_affirmed_tickers_with_assigned_custodian() { fn add_instruction_with_pre_affirmed_portfolio() { ExtBuilder::default().build().execute_with(|| { // Setup base parameters - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); let alice_user_porfolio = PortfolioId::user_portfolio(alice.did, PortfolioNumber(1)); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let bob_user_porfolio = PortfolioId::user_portfolio(bob.did, PortfolioNumber(1)); let (asset_id, venue) = create_and_issue_sample_asset_with_venue(&alice); @@ -3446,9 +3446,9 @@ fn add_instruction_with_pre_affirmed_portfolio() { fn add_instruction_with_single_pre_affirmed() { ExtBuilder::default().build().execute_with(|| { // Setup base parameters - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let (asset_id, venue) = create_and_issue_sample_asset_with_venue(&alice); let instruction_memo = Some(Memo::default()); @@ -3504,9 +3504,9 @@ fn add_instruction_with_single_pre_affirmed() { fn manually_execute_failed_instruction() { ExtBuilder::default().build().execute_with(|| { // Setup base parameters - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let (asset_id, venue) = create_and_issue_sample_asset_with_venue(&alice); let instruction_memo = Some(Memo::default()); @@ -3584,9 +3584,9 @@ fn manually_execute_failed_instruction() { #[test] fn affirm_with_receipts_cost() { ExtBuilder::default().build().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie); - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let ticker = Ticker::from_slice_truncated(b"TICKER2".as_ref()); let (_, venue_id) = create_and_issue_sample_asset_with_venue(&alice); let amount = 1; @@ -3603,8 +3603,8 @@ fn affirm_with_receipts_cost() { 0, id, LegId(0), - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Alice.sign(&receipt.encode()).into(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Alice.sign(&receipt.encode()).into(), None, )]; assert_ok!(Settlement::add_instruction( @@ -3636,10 +3636,10 @@ fn affirm_with_receipts_cost() { fn affirm_instruction_cost() { ExtBuilder::default().build().execute_with(|| { // Setup base parameters - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); let alice_user_porfolio = PortfolioId::user_portfolio(alice.did, PortfolioNumber(1)); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let bob_user_porfolio = PortfolioId::user_portfolio(bob.did, PortfolioNumber(1)); let (asset_id, venue) = create_and_issue_sample_asset_with_venue(&alice); @@ -3700,9 +3700,9 @@ fn affirm_instruction_cost() { fn withdraw_affirmation_cost() { ExtBuilder::default().build().execute_with(|| { // Setup base parameters - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let (asset_id, venue) = create_and_issue_sample_asset_with_venue(&alice); let instruction_memo = Some(Memo::default()); @@ -3749,9 +3749,9 @@ fn withdraw_affirmation_cost() { fn reject_instruction_cost() { ExtBuilder::default().build().execute_with(|| { // Setup base parameters - let alice = User::new(AccountKeyring::Alice); + let alice = User::new(Sr25519Keyring::Alice); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); - let bob = User::new(AccountKeyring::Bob); + let bob = User::new(Sr25519Keyring::Bob); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let (asset_id, venue) = create_and_issue_sample_asset_with_venue(&alice); let instruction_memo = Some(Memo::default()); @@ -3812,10 +3812,10 @@ fn reject_instruction_cost() { #[test] fn add_instruction_with_mediators() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); + let charlie = User::new(Sr25519Keyring::Charlie); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); @@ -3866,10 +3866,10 @@ fn add_instruction_with_mediators() { #[test] fn affirm_as_mediator_invalid_mediator() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); + let charlie = User::new(Sr25519Keyring::Charlie); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); @@ -3900,9 +3900,9 @@ fn affirm_as_mediator_invalid_mediator() { #[test] fn affirm_as_mediator() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let charlie = User::new(Sr25519Keyring::Charlie); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); @@ -3950,10 +3950,10 @@ fn affirm_as_mediator() { #[test] fn withdraw_as_mediator_invalid_mediator() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); + let charlie = User::new(Sr25519Keyring::Charlie); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); @@ -3984,9 +3984,9 @@ fn withdraw_as_mediator_invalid_mediator() { #[test] fn withdraw_as_mediator_invalid_status() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let charlie = User::new(Sr25519Keyring::Charlie); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); @@ -4017,9 +4017,9 @@ fn withdraw_as_mediator_invalid_status() { #[test] fn withdraw_affirmation_as_mediator() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let charlie = User::new(Sr25519Keyring::Charlie); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); @@ -4071,9 +4071,9 @@ fn withdraw_affirmation_as_mediator() { #[test] fn expired_affirmation_execution() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let charlie = User::new(Sr25519Keyring::Charlie); let bob_default_portfolio = PortfolioId::default_portfolio(bob.did); let alice_default_portfolio = PortfolioId::default_portfolio(alice.did); @@ -4140,10 +4140,10 @@ fn expired_affirmation_execution() { #[test] fn reject_instruction_as_mediator() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); + let charlie = User::new(Sr25519Keyring::Charlie); let (asset_id, venue_counter) = create_and_issue_sample_asset_with_venue(&alice); @@ -4183,8 +4183,8 @@ fn reject_instruction_as_mediator() { #[test] fn missing_venue_for_offchain_asset() { ExtBuilder::default().build().execute_with(|| { - let bob = User::new(AccountKeyring::Bob); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); let (asset_id, _) = create_and_issue_sample_asset_with_venue(&alice); diff --git a/pallets/runtime/tests/src/signed_extra.rs b/pallets/runtime/tests/src/signed_extra.rs index ff41af8cad..d015a68e44 100644 --- a/pallets/runtime/tests/src/signed_extra.rs +++ b/pallets/runtime/tests/src/signed_extra.rs @@ -11,7 +11,7 @@ use frame_system::{ CheckEra, CheckGenesis, CheckNonce, CheckSpecVersion, CheckTxVersion, CheckWeight, }; use sp_io::TestExternalities; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_runtime::{generic, traits::SignedExtension, BuildStorage}; use sp_std::convert::From; @@ -48,9 +48,9 @@ fn make_signed_extra(current_block: u64, period: u64, nonce: Nonce, tip: u128) - /// - Those accounts are added as CDD providers, so auto-generated CDD claims are valid. fn make_min_storage() -> Result { let accounts = [ - AccountKeyring::Alice.to_account_id(), - AccountKeyring::Bob.to_account_id(), - AccountKeyring::Charlie.to_account_id(), + Sr25519Keyring::Alice.to_account_id(), + Sr25519Keyring::Bob.to_account_id(), + Sr25519Keyring::Charlie.to_account_id(), ]; let identities = accounts .iter() @@ -117,7 +117,7 @@ fn normal_tx_ext() -> Result<(), String> { /// - Normal transactions can not have a tip. /// - Priority of any transaction is its own tip. fn normal_tx() -> Result<(), String> { - let user = AccountKeyring::Alice.to_account_id(); + let user = Sr25519Keyring::Alice.to_account_id(); let (call, len) = make_call(); let info = DispatchInfo { weight: Weight::from_parts(100, 0), @@ -147,7 +147,7 @@ fn operational_tx_ext() -> Result<(), String> { /// - Operational transactions can have tip != 0. /// - Priority of any transaction is its own tip. fn operational_tx() -> Result<(), String> { - let user: AccountId = AccountKeyring::Alice.public().into(); + let user: AccountId = Sr25519Keyring::Alice.public().into(); let (call, len) = make_call(); let info = DispatchInfo { weight: Weight::from_parts(100, 0), diff --git a/pallets/runtime/tests/src/staking_extra_tests.rs b/pallets/runtime/tests/src/staking_extra_tests.rs index dd026f4c04..1a1c4b32ce 100644 --- a/pallets/runtime/tests/src/staking_extra_tests.rs +++ b/pallets/runtime/tests/src/staking_extra_tests.rs @@ -1,5 +1,5 @@ use frame_support::assert_ok; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use polymesh_primitives::{AuthorizationData, Permissions}; @@ -10,13 +10,13 @@ type Origin = ::RuntimeOrigin; #[test] fn updating_controller() { - let charlie = vec![AccountKeyring::Charlie.to_account_id()]; + let charlie = vec![Sr25519Keyring::Charlie.to_account_id()]; ExtBuilder::default() .cdd_providers(charlie) .build() .execute_with(|| { - let alice: User = User::new(AccountKeyring::Alice); - let eve: User = User::new_with(alice.did, AccountKeyring::Eve); + let alice: User = User::new(Sr25519Keyring::Alice); + let eve: User = User::new_with(alice.did, Sr25519Keyring::Eve); add_secondary_key(alice.did, eve.acc()); @@ -48,7 +48,7 @@ fn updating_controller() { )); assert_ok!(pallet_identity::Pallet::::revoke_claim( - Origin::signed(AccountKeyring::Charlie.to_account_id()), + Origin::signed(Sr25519Keyring::Charlie.to_account_id()), alice.did, polymesh_primitives::Claim::CustomerDueDiligence(Default::default()) )); diff --git a/pallets/runtime/tests/src/sto_test.rs b/pallets/runtime/tests/src/sto_test.rs index c5ebec262d..fc504756e3 100644 --- a/pallets/runtime/tests/src/sto_test.rs +++ b/pallets/runtime/tests/src/sto_test.rs @@ -1,5 +1,5 @@ use frame_support::{assert_noop, assert_ok}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_runtime::DispatchError; use pallet_asset::BalanceOf; @@ -34,7 +34,7 @@ type System = frame_system::Pallet; #[track_caller] fn test(logic: impl FnOnce()) { ExtBuilder::default() - .cdd_providers(vec![AccountKeyring::Eve.to_account_id()]) + .cdd_providers(vec![Sr25519Keyring::Eve.to_account_id()]) .build() .execute_with(logic); } @@ -83,8 +83,8 @@ struct RaiseContext { } fn init_raise_context() -> RaiseContext { - let (alice, alice_portfolio) = make_account_with_portfolio(AccountKeyring::Alice); - let (bob, bob_portfolio) = make_account_with_portfolio(AccountKeyring::Bob); + let (alice, alice_portfolio) = make_account_with_portfolio(Sr25519Keyring::Alice); + let (bob, bob_portfolio) = make_account_with_portfolio(Sr25519Keyring::Bob); // Register tokens let offering_asset = create_and_issue_sample_asset(&alice); @@ -131,7 +131,7 @@ fn raise_happy_path() { exec_ok!(Settlement::create_venue( alice.origin(), VenueDetails::default(), - vec![AccountKeyring::Alice.to_account_id()], + vec![Sr25519Keyring::Alice.to_account_id()], VenueType::Sto )); @@ -269,8 +269,8 @@ fn raise_happy_path() { } fn raise_unhappy_path() { - let (alice, alice_portfolio) = make_account_with_portfolio(AccountKeyring::Alice); - let (bob, bob_portfolio) = make_account_with_portfolio(AccountKeyring::Bob); + let (alice, alice_portfolio) = make_account_with_portfolio(Sr25519Keyring::Alice); + let (bob, bob_portfolio) = make_account_with_portfolio(Sr25519Keyring::Bob); // Offering asset not created assert_noop!( @@ -424,7 +424,7 @@ fn invalid_fundraiser() { assert_ok!(Settlement::create_venue( alice.origin(), VenueDetails::default(), - vec![AccountKeyring::Alice.to_account_id()], + vec![Sr25519Keyring::Alice.to_account_id()], VenueType::Sto )); @@ -487,7 +487,7 @@ fn basic_fundraiser() -> (FundraiserId, RaiseContext) { assert_ok!(Settlement::create_venue( context.alice.origin(), VenueDetails::default(), - vec![AccountKeyring::Alice.to_account_id()], + vec![Sr25519Keyring::Alice.to_account_id()], VenueType::Sto )); let fundraiser_id = FundraiserCount::::get(context.offering_asset); diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index b75b75a9ed..ad31c57ebd 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -5,34 +5,45 @@ use std::cell::RefCell; use std::convert::From; use codec::Encode; -use frame_support::dispatch::{DispatchResult, Weight}; -use frame_support::traits::{ - Currency, Imbalance, KeyOwnerProofSystem, OnInitialize, OnUnbalanced, TryCollect, -}; -use frame_support::weights::{ - RuntimeDbWeight, WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, -}; +use frame_support::traits::{Currency, Imbalance, KeyOwnerProofSystem}; +use frame_support::traits::{OnInitialize, OnUnbalanced, TryCollect}; +use frame_support::weights::Weight; +use frame_support::weights::{RuntimeDbWeight, WeightToFeeCoefficient}; +use frame_support::weights::{WeightToFeeCoefficients, WeightToFeePolynomial}; use frame_support::{assert_ok, parameter_types, BoundedBTreeSet}; use smallvec::smallvec; use sp_core::crypto::{key_types, Pair as PairTrait}; use sp_core::sr25519::Pair; use sp_core::Get; use sp_core::H256; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_runtime::curve::PiecewiseLinear; use sp_runtime::generic::Era; use sp_runtime::testing::UintAuthorityId; -use sp_runtime::traits::{ - BlakeTwo256, Block as BlockT, Extrinsic, IdentityLookup, NumberFor, OpaqueKeys, StaticLookup, - Verify, -}; +use sp_runtime::traits::{BlakeTwo256, Block as BlockT, Extrinsic, IdentityLookup}; +use sp_runtime::traits::{NumberFor, OpaqueKeys, StaticLookup, Verify}; use sp_runtime::transaction_validity::{InvalidTransaction, TransactionPriority}; -use sp_runtime::{create_runtime_str, AnySignature, KeyTypeId, Perbill, Permill}; +use sp_runtime::{AnySignature, Cow, KeyTypeId, Perbill, Permill}; use sp_staking::{EraIndex, SessionIndex}; use sp_version::RuntimeVersion; use frame_system::{EnsureRoot, RawOrigin}; use lazy_static::lazy_static; +use pallet_identity::Context; +use pallet_transaction_payment::RuntimeDispatchInfo; +use pallet_utility; +use polymesh_common_utilities::protocol_fee::ProtocolOp; +use polymesh_primitives::constants::currency::{DOLLARS, POLY}; +use polymesh_primitives::settlement::Leg; +use polymesh_primitives::traits::{group::GroupTrait, CddAndFeeDetails}; +use polymesh_primitives::{AccountId, Authorization, AuthorizationData, BlockNumber}; +use polymesh_primitives::{Claim, Moment, Permissions as AuthPermissions}; +use polymesh_primitives::{PortfolioNumber, Scope, SecondaryKey, TrustedFor, TrustedIssuer}; +use polymesh_runtime_common::merge_active_and_inactive; +use polymesh_runtime_common::runtime::{BENCHMARK_MAX_INCREASE, VMO}; +use polymesh_runtime_common::{AvailableBlockRatio, MaximumBlockWeight}; +use polymesh_runtime_develop::constants::time::{EPOCH_DURATION_IN_BLOCKS, MILLISECS_PER_BLOCK}; + use pallet_asset::checkpoint as pallet_checkpoint; use pallet_balances as balances; use pallet_committee as committee; @@ -40,28 +51,15 @@ use pallet_corporate_actions as corporate_actions; use pallet_corporate_actions::ballot as pallet_corporate_ballot; use pallet_corporate_actions::distribution as pallet_capital_distribution; use pallet_group as group; -use pallet_identity::{self as identity, Context}; +use pallet_identity as identity; use pallet_pips as pips; use pallet_protocol_fee as protocol_fee; use pallet_session::historical as pallet_session_historical; -use pallet_transaction_payment::RuntimeDispatchInfo; -use pallet_utility; -use polymesh_common_utilities::protocol_fee::ProtocolOp; -use polymesh_primitives::constants::currency::{DOLLARS, POLY}; -use polymesh_primitives::settlement::Leg; -use polymesh_primitives::{ - traits::{group::GroupTrait, CddAndFeeDetails}, - AccountId, Authorization, AuthorizationData, BlockNumber, Claim, Moment, - Permissions as AuthPermissions, PortfolioNumber, Scope, SecondaryKey, TrustedFor, - TrustedIssuer, -}; -use polymesh_runtime_common::merge_active_and_inactive; -use polymesh_runtime_common::runtime::{BENCHMARK_MAX_INCREASE, VMO}; -use polymesh_runtime_common::{AvailableBlockRatio, MaximumBlockWeight}; -use polymesh_runtime_develop::constants::time::{EPOCH_DURATION_IN_BLOCKS, MILLISECS_PER_BLOCK}; use super::ext_builder::{EXTRINSIC_BASE_WEIGHT, TRANSACTION_BYTE_FEE, WEIGHT_TO_FEE}; +type Runtime = TestStorage; + lazy_static! { pub static ref INTEGRATION_TEST: bool = std::env::var("INTEGRATION_TEST") .map(|var| var.parse().unwrap_or(false)) @@ -98,8 +96,8 @@ macro_rules! exec_noop { pub const PRIMARY_PROBABILITY: (u64, u64) = (1, 4); const GENESIS_HASH: [u8; 32] = [69u8; 32]; pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("test-storage"), - impl_name: create_runtime_str!("test-storage"), + spec_name: Cow::Borrowed("test-storage"), + impl_name: Cow::Borrowed("test-storage"), authoring_version: 1, // Per convention: if the runtime behavior changes, increment spec_version // and set impl_version to 0. If only runtime @@ -109,7 +107,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 7, - state_version: 1, + system_version: 1, }; impl_opaque_keys! { @@ -124,8 +122,6 @@ impl From for MockSessionKeys { } } -type Runtime = TestStorage; - // example module to test behaviors. #[frame_support::pallet(dev_mode)] pub mod example { @@ -243,98 +239,172 @@ parameter_types! { pub const MaxRefundsAndVotesPruned: u32 = 2; } -frame_support::construct_runtime!( - pub struct TestStorage { - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, - Indices: pallet_indices::{Pallet, Call, Storage, Config, Event} = 3, - // Authorship: pallet_authorship = 4, - - // Balance: Genesis config dependencies: System. - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 5, - - // TransactionPayment: Genesis config dependencies: Balance. - TransactionPayment: pallet_transaction_payment::{Pallet, Event, Storage} = 6, - - // Identity: Genesis config deps: Timestamp. - Identity: pallet_identity::{Pallet, Call, Storage, Event, Config} = 7, - - // Polymesh Committees - - // CddServiceProviders: Genesis config deps: Identity - CddServiceProviders: pallet_group::::{Pallet, Call, Storage, Event, Config} = 8, - - // Governance Council (committee) - PolymeshCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config} = 9, - // CommitteeMembership: Genesis config deps: PolymeshCommittee, Identity. - CommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 10, - - // Technical Committee - TechnicalCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config} = 11, - // TechnicalCommitteeMembership: Genesis config deps: TechnicalCommittee, Identity - TechnicalCommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 12, - - // Upgrade Committee - UpgradeCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config} = 13, - // UpgradeCommitteeMembership: Genesis config deps: UpgradeCommittee - UpgradeCommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 14, - - MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, - - Validators: pallet_validators = 16, - Staking: pallet_staking = 17, - - Offences: pallet_offences::{Pallet, Storage, Event} = 18, - - // Session: Genesis config deps: System. - Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 19, - AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, - Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, - Historical: pallet_session_historical::{Pallet} = 22, - ImOnline: pallet_im_online::{Pallet, Call, Storage, Event, ValidateUnsigned, Config} = 23, - RandomnessCollectiveFlip: pallet_insecure_randomness_collective_flip::{Pallet, Storage} = 24, - - // Sudo. Usable initially. - Sudo: pallet_sudo::{Pallet, Call, Config, Storage, Event} = 25, - - // Asset: Genesis config deps: Timestamp, - Asset: pallet_asset::{Pallet, Call, Storage, Config, Event} = 26, - CapitalDistribution: pallet_capital_distribution::{Pallet, Call, Storage, Event, Config} = 27, - Checkpoint: pallet_checkpoint::{Pallet, Call, Storage, Event, Config} = 28, - ComplianceManager: pallet_compliance_manager::{Pallet, Call, Storage, Event} = 29, - CorporateAction: pallet_corporate_actions::{Pallet, Call, Storage, Event, Config} = 30, - CorporateBallot: pallet_corporate_ballot::{Pallet, Call, Storage, Event, Config} = 31, - Permissions: pallet_permissions::{Pallet, Storage} = 32, - Pips: pallet_pips::{Pallet, Call, Storage, Event, Config} = 33, - Portfolio: pallet_portfolio::{Pallet, Call, Storage, Event, Config} = 34, - ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config} = 35, - Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event} = 36, - Settlement: pallet_settlement::{Pallet, Call, Storage, Event, Config} = 37, - Statistics: pallet_statistics::{Pallet, Call, Storage, Event, Config} = 38, - Sto: pallet_sto::{Pallet, Call, Storage, Event} = 39, - Treasury: pallet_treasury::{Pallet, Call, Event} = 40, - Utility: pallet_utility::{Pallet, Call, Storage, Event} = 41, - Base: pallet_base::{Pallet, Call, Event} = 42, - ExternalAgents: pallet_external_agents::{Pallet, Call, Storage, Event} = 43, - Relayer: pallet_relayer::{Pallet, Call, Storage, Event} = 44, - // Removed pallet_rewards = 45, - - // Contracts - Contracts: pallet_contracts::{Pallet, Call, Storage, Event} = 46, - PolymeshContracts: polymesh_contracts::{Pallet, Call, Storage, Event, Config} = 47, - - // Preimage register. Used by `pallet_scheduler`. - Preimage: pallet_preimage::{Pallet, Call, Storage, Event} = 48, - - Nft: pallet_nft::{Pallet, Call, Storage, Event} = 49, - - // Testing only. - Example: example::{Pallet, Call} = 201, - - ElectionProviderMultiPhase: pallet_election_provider_multi_phase::{Pallet, Call, Storage, Event, ValidateUnsigned}, - } -); +#[frame_support::runtime] +mod runtime { + use super::*; + + #[runtime::runtime] + #[runtime::derive( + RuntimeCall, + RuntimeEvent, + RuntimeError, + RuntimeOrigin, + RuntimeFreezeReason, + RuntimeHoldReason, + RuntimeSlashReason + )] + pub struct TestStorage; + + #[runtime::pallet_index(0)] + pub type System = frame_system::Pallet; + + #[runtime::pallet_index(1)] + pub type Babe = pallet_babe::Pallet; + + #[runtime::pallet_index(2)] + pub type Timestamp = pallet_timestamp::Pallet; + + #[runtime::pallet_index(3)] + pub type Indices = pallet_indices::Pallet; + + #[runtime::pallet_index(5)] + pub type Balances = pallet_balances::Pallet; + + #[runtime::pallet_index(6)] + pub type TransactionPayment = pallet_transaction_payment::Pallet; + + #[runtime::pallet_index(7)] + pub type Identity = pallet_identity::Pallet; + + #[runtime::pallet_index(8)] + pub type CddServiceProviders = pallet_group::Pallet; + + #[runtime::pallet_index(9)] + pub type PolymeshCommittee = pallet_committee::Pallet; + + #[runtime::pallet_index(10)] + pub type CommitteeMembership = pallet_group::Pallet; + + #[runtime::pallet_index(11)] + pub type TechnicalCommittee = pallet_committee::Pallet; + + #[runtime::pallet_index(12)] + pub type TechnicalCommitteeMembership = pallet_group::Pallet; + + #[runtime::pallet_index(13)] + pub type UpgradeCommittee = pallet_committee::Pallet; + + #[runtime::pallet_index(14)] + pub type UpgradeCommitteeMembership = pallet_group::Pallet; + + #[runtime::pallet_index(15)] + pub type MultiSig = pallet_multisig::Pallet; + + #[runtime::pallet_index(16)] + pub type Validators = pallet_validators::Pallet; + + #[runtime::pallet_index(17)] + pub type Staking = pallet_staking::Pallet; + + #[runtime::pallet_index(18)] + pub type Offences = pallet_offences::Pallet; + + #[runtime::pallet_index(19)] + pub type Session = pallet_session::Pallet; + + #[runtime::pallet_index(20)] + pub type AuthorityDiscovery = pallet_authority_discovery::Pallet; + + #[runtime::pallet_index(21)] + pub type Grandpa = pallet_grandpa::Pallet; + + #[runtime::pallet_index(22)] + pub type Historical = pallet_session_historical::Pallet; + + #[runtime::pallet_index(23)] + pub type ImOnline = pallet_im_online::Pallet; + + #[runtime::pallet_index(24)] + pub type RandomnessCollectiveFlip = pallet_insecure_randomness_collective_flip::Pallet; + + #[runtime::pallet_index(25)] + pub type Sudo = pallet_sudo::Pallet; + + #[runtime::pallet_index(26)] + pub type Asset = pallet_asset::Pallet; + + #[runtime::pallet_index(27)] + pub type CapitalDistribution = pallet_capital_distribution::Pallet; + + #[runtime::pallet_index(28)] + pub type Checkpoint = pallet_checkpoint::Pallet; + + #[runtime::pallet_index(29)] + pub type ComplianceManager = pallet_compliance_manager::Pallet; + + #[runtime::pallet_index(30)] + pub type CorporateAction = pallet_corporate_actions::Pallet; + + #[runtime::pallet_index(31)] + pub type CorporateBallot = pallet_corporate_ballot::Pallet; + + #[runtime::pallet_index(32)] + pub type Permissions = pallet_permissions::Pallet; + + #[runtime::pallet_index(33)] + pub type Pips = pallet_pips::Pallet; + + #[runtime::pallet_index(34)] + pub type Portfolio = pallet_portfolio::Pallet; + + #[runtime::pallet_index(35)] + pub type ProtocolFee = pallet_protocol_fee::Pallet; + + #[runtime::pallet_index(36)] + pub type Scheduler = pallet_scheduler::Pallet; + + #[runtime::pallet_index(37)] + pub type Settlement = pallet_settlement::Pallet; + + #[runtime::pallet_index(38)] + pub type Statistics = pallet_statistics::Pallet; + + #[runtime::pallet_index(39)] + pub type Sto = pallet_sto::Pallet; + + #[runtime::pallet_index(40)] + pub type Treasury = pallet_treasury::Pallet; + + #[runtime::pallet_index(41)] + pub type Utility = pallet_utility::Pallet; + + #[runtime::pallet_index(42)] + pub type Base = pallet_base::Pallet; + + #[runtime::pallet_index(43)] + pub type ExternalAgents = pallet_external_agents::Pallet; + + #[runtime::pallet_index(44)] + pub type Relayer = pallet_relayer::Pallet; + + #[runtime::pallet_index(46)] + pub type Contracts = pallet_contracts::Pallet; + + #[runtime::pallet_index(47)] + pub type PolymeshContracts = polymesh_contracts::Pallet; + + #[runtime::pallet_index(48)] + pub type Preimage = pallet_preimage::Pallet; + + #[runtime::pallet_index(49)] + pub type Nft = pallet_nft::Pallet; + + #[runtime::pallet_index(50)] + pub type ElectionProviderMultiPhase = pallet_election_provider_multi_phase::Pallet; + + #[runtime::pallet_index(200)] + pub type Example = example::Pallet; +} polymesh_runtime_common::runtime_apis! {} @@ -342,7 +412,7 @@ polymesh_runtime_common::runtime_apis! {} pub struct User { /// The `ring` of the `User` used to derive account related data, /// e.g., origins, keys, and balances. - pub ring: AccountKeyring, + pub ring: Sr25519Keyring, /// The DID of the `User`. /// The `ring` need not be the primary key of this DID. pub did: IdentityId, @@ -353,17 +423,17 @@ impl User { /// /// The function is useful when `ring` refers to a secondary key. /// At the time of calling, nothing is asserted about `did`'s registration. - pub const fn new_with(did: IdentityId, ring: AccountKeyring) -> Self { + pub const fn new_with(did: IdentityId, ring: Sr25519Keyring) -> Self { User { ring, did } } /// Creates and registers a `User` for the given `ring` which will act as the primary key. - pub fn new(ring: AccountKeyring) -> Self { + pub fn new(ring: Sr25519Keyring) -> Self { Self::new_with(register_keyring_account(ring).unwrap(), ring) } /// Creates a `User` for an already registered DID with `ring` as its primary key. - pub fn existing(ring: AccountKeyring) -> Self { + pub fn existing(ring: Sr25519Keyring) -> Self { Self::new_with(get_identity_id(ring).unwrap(), ring) } @@ -678,17 +748,18 @@ impl pallet_session::SessionManager for TestSessionManager { } } -impl pips::Config for TestStorage { - type Currency = balances::Pallet; - type VotingMajorityOrigin = VMO; +impl pallet_pips::Config for Runtime { + type Currency = Balances; + type VotingMajorityOrigin = VMO; type GovernanceCommittee = Committee; - type TechnicalCommitteeVMO = VMO; - type UpgradeCommitteeVMO = VMO; + type TechnicalCommitteeVMO = VMO; + type UpgradeCommitteeVMO = VMO; type RuntimeEvent = RuntimeEvent; type WeightInfo = polymesh_weights::pallet_pips::SubstrateWeight; type Scheduler = Scheduler; type SchedulerCall = RuntimeCall; type MaxRefundsAndVotesPruned = MaxRefundsAndVotesPruned; + type SchedulerPreimage = Preimage; } impl pallet_sudo::Config for Runtime { @@ -716,7 +787,7 @@ pub fn make_account( make_account_with_balance(id, 1_000_000) } -pub fn make_account_with_portfolio(ring: AccountKeyring) -> (User, PortfolioId) { +pub fn make_account_with_portfolio(ring: Sr25519Keyring) -> (User, PortfolioId) { let user = User::new(ring); let portfolio = PortfolioId::default_portfolio(user.did); (user, portfolio) @@ -780,12 +851,12 @@ pub fn make_account_without_cdd( Ok((signed_id, did)) } -pub fn register_keyring_account(acc: AccountKeyring) -> Result { +pub fn register_keyring_account(acc: Sr25519Keyring) -> Result { register_keyring_account_with_balance(acc, 10_000_000) } pub fn register_keyring_account_with_balance( - acc: AccountKeyring, + acc: Sr25519Keyring, balance: Balance, ) -> Result { let acc_id = acc.to_account_id(); @@ -830,7 +901,7 @@ pub fn account_from(id: u64) -> AccountId { pk.into() } -pub fn get_identity_id(acc: AccountKeyring) -> Option { +pub fn get_identity_id(acc: Sr25519Keyring) -> Option { Identity::get_identity(&acc.to_account_id()) } @@ -978,50 +1049,55 @@ macro_rules! assert_event_doesnt_exist { pub fn exec>(origin: RuntimeOrigin, call: C) -> DispatchResult { let origin: Result, RuntimeOrigin> = origin.into(); - let signed = match origin.unwrap() { - RawOrigin::Signed(acc) => { - let info = frame_system::Account::::get(&acc); - Some((acc, signed_extra(info.nonce))) + + let format = { + match origin.unwrap() { + RawOrigin::Signed(acc) => { + let info = frame_system::Account::::get(&acc); + generic::ExtrinsicFormat::Signed(acc, signed_extra(info.nonce)) + } + _ => generic::ExtrinsicFormat::Bare, } - _ => None, }; + Executive::apply_extrinsic(sign(CheckedExtrinsic { - signed, + format, function: call.into(), })) .unwrap() } -/// Sign given `CheckedExtrinsic` returning an `UncheckedExtrinsic` -/// usable for execution. -fn sign(xt: CheckedExtrinsic) -> UncheckedExtrinsic { - let CheckedExtrinsic { - signed, function, .. - } = xt; - UncheckedExtrinsic { - signature: signed.map(|(signed, extra)| { - let payload = ( - &function, - extra.clone(), - VERSION.spec_version, - VERSION.transaction_version, - GENESIS_HASH, - GENESIS_HASH, - ); - let key = AccountKeyring::from_account_id(&signed).unwrap(); - let signature = payload - .using_encoded(|b| { - if b.len() > 256 { - key.sign(&sp_io::hashing::blake2_256(b)) - } else { - key.sign(b) - } - }) - .into(); - (Address::Id(signed), signature, extra) - }), - function, - } +/// Sign given `CheckedExtrinsic` returning an `UncheckedExtrinsic` usable for execution. +fn sign(checked_extrinsic: CheckedExtrinsic) -> UncheckedExtrinsic { + let preamble = { + match checked_extrinsic.format { + generic::ExtrinsicFormat::Signed(acc, ext) => { + let payload = ( + &checked_extrinsic.function, + ext.clone(), + VERSION.spec_version, + VERSION.transaction_version, + GENESIS_HASH, + GENESIS_HASH, + ); + let key = Sr25519Keyring::from_account_id(&acc).unwrap(); + let signature = payload + .using_encoded(|b| { + if b.len() > 256 { + key.sign(&sp_io::hashing::blake2_256(b)) + } else { + key.sign(b) + } + }) + .into(); + generic::Preamble::Signed(Address::Id(acc), signature, ext) + } + _ => generic::Preamble::Bare(0), + } + }; + + let function = checked_extrinsic.function; + UncheckedExtrinsic { preamble, function } } /// Returns transaction extra. @@ -1049,6 +1125,5 @@ impl frame_election_provider_support::onchain::Config for OnChainSeqPhragmen { type DataProvider = ::DataProvider; type WeightInfo = frame_election_provider_support::weights::SubstrateWeight; type MaxWinners = ::MaxWinners; - type VotersBound = polymesh_runtime_common::MaxOnChainElectingVoters; - type TargetsBound = polymesh_runtime_common::MaxOnChainElectableTargets; + type Bounds = polymesh_runtime_common::ElectionBoundsOnChain; } diff --git a/pallets/runtime/tests/src/transaction_payment_test.rs b/pallets/runtime/tests/src/transaction_payment_test.rs index 38c78fa23f..440031916b 100644 --- a/pallets/runtime/tests/src/transaction_payment_test.rs +++ b/pallets/runtime/tests/src/transaction_payment_test.rs @@ -13,7 +13,7 @@ use pallet_transaction_payment::{ use polymesh_primitives::AccountId; use polymesh_primitives::TransactionError; use sp_arithmetic::traits::One; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_runtime::{ testing::TestXt, traits::SignedExtension, @@ -23,7 +23,7 @@ use sp_runtime::{ fn call() -> ::RuntimeCall { RuntimeCall::Balances(BalancesCall::transfer { - dest: MultiAddress::Id(AccountKeyring::Alice.to_account_id()), + dest: MultiAddress::Id(Sr25519Keyring::Alice.to_account_id()), value: 69, }) } @@ -74,8 +74,8 @@ fn signed_extension_transaction_payment_work() { .transaction_fees(5, 1, 1) .build() .execute_with(|| { - let bob = AccountKeyring::Bob.to_account_id(); - let alice = AccountKeyring::Alice.to_account_id(); + let bob = Sr25519Keyring::Bob.to_account_id(); + let alice = Sr25519Keyring::Alice.to_account_id(); let len = 10; let pre = ChargeTransactionPayment::::from(0) @@ -117,7 +117,7 @@ fn signed_extension_transaction_payment_multiplied_refund_works() { .transaction_fees(5, 1, 1) .build() .execute_with(|| { - let user = AccountKeyring::Alice.to_account_id(); + let user = Sr25519Keyring::Alice.to_account_id(); let len = 10; TransactionPayment::put_next_fee_multiplier(Multiplier::saturating_from_rational(3, 2)); @@ -148,7 +148,7 @@ fn signed_extension_transaction_payment_is_bounded() { .transaction_fees(0, 0, 1) .build() .execute_with(|| { - let user = AccountKeyring::Bob.to_account_id(); + let user = Sr25519Keyring::Bob.to_account_id(); let free_user = Balances::free_balance(&user); // Get the current weight settings. @@ -178,7 +178,7 @@ fn signed_extension_allows_free_transactions() { .balance_factor(0) .build() .execute_with(|| { - let user = AccountKeyring::Bob.to_account_id(); + let user = Sr25519Keyring::Bob.to_account_id(); // I ain't have a penny. assert_eq!(Balances::free_balance(&user), 0); @@ -217,7 +217,7 @@ fn signed_ext_length_fee_is_also_updated_per_congestion() { // all fees should be x1.5 TransactionPayment::put_next_fee_multiplier(Multiplier::saturating_from_rational(3, 2)); let len = 10; - let user = AccountKeyring::Bob.to_account_id(); + let user = Sr25519Keyring::Bob.to_account_id(); assert!(ChargeTransactionPayment::::from(0) // tipped .pre_dispatch(&user, &call(), &info_from_weight(3), len) .is_ok()); @@ -391,7 +391,7 @@ fn actual_weight_higher_than_max_refunds_nothing() { .build() .execute_with(|| { let len = 10; - let user = AccountKeyring::Alice.to_account_id(); + let user = Sr25519Keyring::Alice.to_account_id(); let pre = ChargeTransactionPayment::::from(0 /* tipped */) .pre_dispatch(&user, &call(), &info_from_weight(100), len) .unwrap(); @@ -424,7 +424,7 @@ fn zero_transfer_on_free_transaction() { pays_fee: Pays::No, class: DispatchClass::Normal, }; - let user = AccountKeyring::Alice.to_account_id(); + let user = Sr25519Keyring::Alice.to_account_id(); let bal_init = Balances::total_balance(&user); let pre = ChargeTransactionPayment::::from(0) .pre_dispatch(&user, &call(), &dispatch_info, len) @@ -453,7 +453,7 @@ fn refund_consistent_with_actual_weight() { .execute_with(|| { let info = info_from_weight(100); let post_info = post_info_from_weight(33); - let alice = AccountKeyring::Alice.to_account_id(); + let alice = Sr25519Keyring::Alice.to_account_id(); let prev_balance = Balances::free_balance(&alice); let len = 10; let tip = 0; @@ -494,7 +494,7 @@ fn normal_tx_with_tip() { fn normal_tx_with_tip_ext() { let len = 10; let tip = 42; - let user = AccountKeyring::Alice.to_account_id(); + let user = Sr25519Keyring::Alice.to_account_id(); let call = call(); let normal_info = info_from_weight(100); @@ -516,8 +516,8 @@ fn normal_tx_with_tip_ext() { #[test] fn operational_tx_with_tip() { - let cdd_provider = AccountKeyring::Bob.to_account_id(); - let gc_member = AccountKeyring::Charlie.to_account_id(); + let cdd_provider = Sr25519Keyring::Bob.to_account_id(); + let gc_member = Sr25519Keyring::Charlie.to_account_id(); ExtBuilder::default() .monied(true) @@ -530,7 +530,7 @@ fn operational_tx_with_tip() { fn operational_tx_with_tip_ext(cdd: AccountId, gc: AccountId) { let len = 10; let tip = 42; - let user = AccountKeyring::Alice.to_account_id(); + let user = Sr25519Keyring::Alice.to_account_id(); let call = call(); let operational_info = operational_info_from_weight(100); diff --git a/pallets/runtime/tests/src/transfer_compliance_test.rs b/pallets/runtime/tests/src/transfer_compliance_test.rs index 9ec6f30871..a3d4f662e5 100644 --- a/pallets/runtime/tests/src/transfer_compliance_test.rs +++ b/pallets/runtime/tests/src/transfer_compliance_test.rs @@ -14,7 +14,7 @@ use polymesh_primitives::{ Balance, Claim, ClaimType, IdentityId, PortfolioId, PortfolioKind, Scope, WeightMeter, }; use sp_arithmetic::Permill; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use std::collections::{HashMap, HashSet}; type Origin = ::RuntimeOrigin; @@ -26,7 +26,7 @@ type Error = pallet_statistics::Error; type AssetError = pallet_asset::Error; type System = frame_system::Pallet; -const CDD_PROVIDER: AccountKeyring = AccountKeyring::Eve; +const CDD_PROVIDER: Sr25519Keyring = Sr25519Keyring::Eve; #[derive(Clone)] struct InvestorState { @@ -664,7 +664,7 @@ fn multiple_stats_with_ext() { claim_issuer: None, }, ]; - let issuers = vec![User::new(AccountKeyring::Dave)]; + let issuers = vec![User::new(Sr25519Keyring::Dave)]; let claim_types = vec![ ClaimType::Accredited, ClaimType::Affiliate, @@ -824,7 +824,7 @@ fn claim_count_rule_with_ext() { // Create an asset. let mut tracker = AssetTracker::new(); - let issuer = User::new(AccountKeyring::Dave); + let issuer = User::new(Sr25519Keyring::Dave); let claim_types = vec![ClaimType::Accredited]; // Add issuer. tracker.add_issuer(&issuer, &claim_types[..]); @@ -912,7 +912,7 @@ fn jurisdiction_count_rule_with_ext() { // Create an asset. let mut tracker = AssetTracker::new(); - let issuer = User::new(AccountKeyring::Dave); + let issuer = User::new(Sr25519Keyring::Dave); let claim_type = ClaimType::Jurisdiction; // Add issuer. tracker.add_issuer(&issuer, &[claim_type]); @@ -998,7 +998,7 @@ fn jurisdiction_ownership_rule_with_ext() { // Create an asset. let mut tracker = AssetTracker::new(); - let issuer = User::new(AccountKeyring::Dave); + let issuer = User::new(Sr25519Keyring::Dave); let claim_type = ClaimType::Jurisdiction; // Add issuer. tracker.add_issuer(&issuer, &[claim_type]); diff --git a/pallets/runtime/tests/src/treasury_test.rs b/pallets/runtime/tests/src/treasury_test.rs index d37a3a6eea..73976d6a1d 100644 --- a/pallets/runtime/tests/src/treasury_test.rs +++ b/pallets/runtime/tests/src/treasury_test.rs @@ -5,7 +5,7 @@ use super::{ }; use polymesh_primitives::{Beneficiary, IdentityId}; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use sp_runtime::DispatchError; use pallet_balances::TotalIssuance; @@ -29,9 +29,9 @@ fn reimbursement_and_disbursement() { } fn reimbursement_and_disbursement_we() { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); - let charlie_acc = AccountKeyring::Charlie.to_account_id(); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let charlie_acc = Sr25519Keyring::Charlie.to_account_id(); let (_, charlie_did) = make_account_without_cdd(charlie_acc.clone()).unwrap(); let total_issuance = TotalIssuance::::get(); @@ -100,8 +100,8 @@ fn bad_disbursement_did() { } fn bad_disbursement_did_we() { - let alice = User::new(AccountKeyring::Alice); - let bob = User::new(AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); let default_key = pallet_identity::types::zero_account_id(); let total_issuance = TotalIssuance::::get(); diff --git a/pallets/runtime/tests/src/utility_test.rs b/pallets/runtime/tests/src/utility_test.rs index f471d4bfd9..e1e3a79e99 100644 --- a/pallets/runtime/tests/src/utility_test.rs +++ b/pallets/runtime/tests/src/utility_test.rs @@ -24,7 +24,7 @@ use polymesh_primitives::{ Permissions, PortfolioName, PortfolioNumber, SubsetRestriction, Ticker, }; use sp_core::sr25519::Signature; -use sp_keyring::AccountKeyring; +use sp_keyring::Sr25519Keyring; use super::committee_test::set_members; use super::pips_test::{assert_balance, assert_state, committee_proposal, community_proposal}; @@ -72,13 +72,13 @@ fn batch_test(test: impl FnOnce(AccountId, AccountId)) { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let alice = AccountKeyring::Alice.to_account_id(); + let alice = Sr25519Keyring::Alice.to_account_id(); TestStorage::set_payer_context(Some(alice.clone())); - let _ = register_keyring_account_with_balance(AccountKeyring::Alice, 1_000).unwrap(); + let _ = register_keyring_account_with_balance(Sr25519Keyring::Alice, 1_000).unwrap(); - let bob = AccountKeyring::Bob.to_account_id(); + let bob = Sr25519Keyring::Bob.to_account_id(); TestStorage::set_payer_context(Some(bob.clone())); - let _ = register_keyring_account_with_balance(AccountKeyring::Bob, 1_000).unwrap(); + let _ = register_keyring_account_with_balance(Sr25519Keyring::Bob, 1_000).unwrap(); assert_balance(alice.clone(), 1000, 0); assert_balance(bob.clone(), 1000, 0); @@ -217,14 +217,14 @@ fn relay_happy_case() { } fn _relay_happy_case() { - let alice = AccountKeyring::Alice.to_account_id(); - let _ = register_keyring_account_with_balance(AccountKeyring::Alice, 1_000).unwrap(); + let alice = Sr25519Keyring::Alice.to_account_id(); + let _ = register_keyring_account_with_balance(Sr25519Keyring::Alice, 1_000).unwrap(); - let bob = AccountKeyring::Bob.to_account_id(); - let _ = register_keyring_account_with_balance(AccountKeyring::Bob, 1_000).unwrap(); + let bob = Sr25519Keyring::Bob.to_account_id(); + let _ = register_keyring_account_with_balance(Sr25519Keyring::Bob, 1_000).unwrap(); - let charlie = AccountKeyring::Charlie.to_account_id(); - let _ = register_keyring_account_with_balance(AccountKeyring::Charlie, 1_000).unwrap(); + let charlie = Sr25519Keyring::Charlie.to_account_id(); + let _ = register_keyring_account_with_balance(Sr25519Keyring::Charlie, 1_000).unwrap(); // 41 Extra for registering a DID assert_balance(bob.clone(), 1041, 0); @@ -242,7 +242,7 @@ fn _relay_happy_case() { assert_ok!(Utility::relay_tx( origin, bob.clone(), - AccountKeyring::Bob.sign(&transaction.encode()).into(), + Sr25519Keyring::Bob.sign(&transaction.encode()).into(), transaction )); @@ -258,12 +258,12 @@ fn relay_unhappy_cases() { } fn _relay_unhappy_cases() { - let alice = AccountKeyring::Alice.to_account_id(); - let _ = register_keyring_account_with_balance(AccountKeyring::Alice, 1_000).unwrap(); + let alice = Sr25519Keyring::Alice.to_account_id(); + let _ = register_keyring_account_with_balance(Sr25519Keyring::Alice, 1_000).unwrap(); - let bob = AccountKeyring::Bob.to_account_id(); + let bob = Sr25519Keyring::Bob.to_account_id(); - let charlie = AccountKeyring::Charlie.to_account_id(); + let charlie = Sr25519Keyring::Charlie.to_account_id(); let origin = RuntimeOrigin::signed(alice); let transaction = UniqueCall::new( @@ -284,7 +284,7 @@ fn _relay_unhappy_cases() { Error::InvalidSignature ); - let _ = register_keyring_account_with_balance(AccountKeyring::Bob, 1_000).unwrap(); + let _ = register_keyring_account_with_balance(Sr25519Keyring::Bob, 1_000).unwrap(); let transaction = UniqueCall::new( Nonces::::get(bob.clone()) + 1, @@ -309,8 +309,8 @@ fn batch_secondary_with_permissions_works() { fn batch_secondary_with_permissions() { System::set_block_number(1); - let alice = User::new(AccountKeyring::Alice).balance(1_000); - let bob = User::new_with(alice.did, AccountKeyring::Bob); + let alice = User::new(Sr25519Keyring::Alice).balance(1_000); + let bob = User::new_with(alice.did, Sr25519Keyring::Bob); let check_name = |name| { assert_eq!( Portfolios::::get(&alice.did, &PortfolioNumber(1)), @@ -417,8 +417,8 @@ fn call_foobar(err: bool, start_weight: Weight, end_weight: Option) -> R #[test] fn sub_batch_with_root_works() { new_test_ext().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie).balance(10); - let ferdie = User::new(AccountKeyring::Ferdie).balance(10); + let charlie = User::new(Sr25519Keyring::Charlie).balance(10); + let ferdie = User::new(Sr25519Keyring::Ferdie).balance(10); let k = b"a".to_vec(); let call = RuntimeCall::System(frame_system::Call::set_storage { items: vec![(k.clone(), k.clone())], @@ -451,8 +451,8 @@ fn sub_batch_with_root_works() { #[test] fn sub_batch_with_signed_works() { new_test_ext().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie).balance(10); - let ferdie = User::new(AccountKeyring::Ferdie).balance(10); + let charlie = User::new(Sr25519Keyring::Charlie).balance(10); + let ferdie = User::new(Sr25519Keyring::Ferdie).balance(10); assert_eq!(Balances::free_balance(charlie.acc()), 10); assert_eq!(Balances::free_balance(ferdie.acc()), 10); assert_ok!(Utility::batch( @@ -467,7 +467,7 @@ fn sub_batch_with_signed_works() { #[test] fn sub_batch_with_signed_filters() { new_test_ext().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie); + let charlie = User::new(Sr25519Keyring::Charlie); assert_ok!(Utility::batch( charlie.origin(), vec![RuntimeCall::Example(ExampleCall::noop2 {})] @@ -485,7 +485,7 @@ fn sub_batch_with_signed_filters() { #[test] fn sub_batch_handles_weight_refund() { new_test_ext().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie); + let charlie = User::new(Sr25519Keyring::Charlie); let start_weight = Weight::from_parts(100, 0); let end_weight = Weight::from_parts(75, 0); let diff = start_weight - end_weight; @@ -578,8 +578,8 @@ fn sub_batch_handles_weight_refund() { #[test] fn sub_batch_all_works() { new_test_ext().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie).balance(10); - let ferdie = User::new(AccountKeyring::Ferdie).balance(10); + let charlie = User::new(Sr25519Keyring::Charlie).balance(10); + let ferdie = User::new(Sr25519Keyring::Ferdie).balance(10); assert_eq!(Balances::free_balance(charlie.acc()), 10); assert_eq!(Balances::free_balance(ferdie.acc()), 10); assert_ok!(Utility::batch_all( @@ -594,8 +594,8 @@ fn sub_batch_all_works() { #[test] fn sub_batch_all_revert() { new_test_ext().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie).balance(10); - let ferdie = User::new(AccountKeyring::Ferdie).balance(10); + let charlie = User::new(Sr25519Keyring::Charlie).balance(10); + let ferdie = User::new(Sr25519Keyring::Ferdie).balance(10); let call = transfer(ferdie.acc(), 5); let info = call.get_dispatch_info(); @@ -628,7 +628,7 @@ fn sub_batch_all_revert() { #[test] fn sub_batch_all_handles_weight_refund() { new_test_ext().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie).balance(10); + let charlie = User::new(Sr25519Keyring::Charlie).balance(10); let start_weight = Weight::from_parts(100, 0); let end_weight = Weight::from_parts(75, 0); let diff = start_weight - end_weight; @@ -700,8 +700,8 @@ fn sub_batch_all_handles_weight_refund() { #[test] fn sub_batch_all_does_not_nest() { new_test_ext().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie).balance(10); - let ferdie = User::new(AccountKeyring::Ferdie).balance(10); + let charlie = User::new(Sr25519Keyring::Charlie).balance(10); + let ferdie = User::new(Sr25519Keyring::Ferdie).balance(10); let batch_all = RuntimeCall::Utility(UtilityCall::batch_all { calls: vec![ transfer(ferdie.acc(), 1), @@ -752,7 +752,7 @@ fn sub_batch_all_does_not_nest() { #[test] fn sub_batch_limit() { new_test_ext().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie).balance(10); + let charlie = User::new(Sr25519Keyring::Charlie).balance(10); let calls = vec![RuntimeCall::System(SystemCall::remark { remark: vec![] }); 40_000]; assert_noop!( Utility::batch(charlie.origin(), calls.clone()), @@ -768,8 +768,8 @@ fn sub_batch_limit() { #[test] fn sub_force_batch_works() { new_test_ext().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie).balance(10); - let ferdie = User::new(AccountKeyring::Ferdie).balance(10); + let charlie = User::new(Sr25519Keyring::Charlie).balance(10); + let ferdie = User::new(Sr25519Keyring::Ferdie).balance(10); assert_eq!(Balances::free_balance(charlie.acc()), 10); assert_eq!(Balances::free_balance(ferdie.acc()), 10); assert_ok!(Utility::force_batch( @@ -820,7 +820,7 @@ fn sub_none_origin_does_not_work() { #[test] fn sub_batch_doesnt_work_with_inherents() { new_test_ext().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie).balance(10); + let charlie = User::new(Sr25519Keyring::Charlie).balance(10); // fails because inherents expect the origin to be none. assert_ok!(Utility::batch( charlie.origin(), @@ -851,7 +851,7 @@ fn sub_force_batch_doesnt_work_with_inherents() { #[test] fn sub_batch_all_doesnt_work_with_inherents() { new_test_ext().execute_with(|| { - let charlie = User::new(AccountKeyring::Charlie).balance(10); + let charlie = User::new(Sr25519Keyring::Charlie).balance(10); let batch_all = RuntimeCall::Utility(UtilityCall::batch_all { calls: vec![RuntimeCall::Timestamp(TimestampCall::set { now: 42 })], }); @@ -874,10 +874,10 @@ fn sub_batch_all_doesnt_work_with_inherents() { #[test] fn batch_works_with_committee_origin() { new_test_ext().execute_with(|| { - let proposer = User::new(AccountKeyring::Dave); + let proposer = User::new(Sr25519Keyring::Dave); - let bob = User::new(AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); set_members(vec![bob.did, charlie.did]); assert_ok!(Pips::set_min_proposal_deposit(RuntimeOrigin::root(), 10)); @@ -908,10 +908,10 @@ fn batch_works_with_committee_origin() { #[test] fn force_batch_works_with_committee_origin() { new_test_ext().execute_with(|| { - let proposer = User::new(AccountKeyring::Dave); + let proposer = User::new(Sr25519Keyring::Dave); - let bob = User::new(AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); set_members(vec![bob.did, charlie.did]); assert_ok!(Pips::set_min_proposal_deposit(RuntimeOrigin::root(), 10)); @@ -942,10 +942,10 @@ fn force_batch_works_with_committee_origin() { #[test] fn batch_all_works_with_committee_origin() { new_test_ext().execute_with(|| { - let proposer = User::new(AccountKeyring::Dave); + let proposer = User::new(Sr25519Keyring::Dave); - let bob = User::new(AccountKeyring::Bob); - let charlie = User::new(AccountKeyring::Charlie); + let bob = User::new(Sr25519Keyring::Bob); + let charlie = User::new(Sr25519Keyring::Charlie); set_members(vec![bob.did, charlie.did]); assert_ok!(Pips::set_min_proposal_deposit(RuntimeOrigin::root(), 10)); @@ -1004,7 +1004,7 @@ fn sub_with_weight_works() { fn as_derivative() { new_test_ext().execute_with(|| { let ticker: Ticker = Ticker::from_slice_truncated(b"TICKER".as_ref()); - let alice = User::new(AccountKeyring::Alice).balance(1_000_000); + let alice = User::new(Sr25519Keyring::Alice).balance(1_000_000); let derivative_alice_account = Utility::derivative_account_id(alice.acc(), 1).unwrap(); Identity::unsafe_join_identity( alice.did, diff --git a/scripts/test.sh b/scripts/test.sh index 01d45aaf34..8559648399 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -9,7 +9,6 @@ SKIP_WASM_BUILD=1 RUST_BACKTRACE=1 \ --package polymesh-primitives \ --package polymesh-contracts \ --package node-rpc-runtime-api \ - --package pallet-transaction-payment \ --package polymesh-runtime-tests \ --package asset-metadata \ "$@" diff --git a/src/chain_spec/ci_runtime.rs b/src/chain_spec/ci_runtime.rs index 26a2a1058a..7bfd8d975e 100644 --- a/src/chain_spec/ci_runtime.rs +++ b/src/chain_spec/ci_runtime.rs @@ -3,16 +3,16 @@ use sp_runtime::PerThing; use polymesh_primitives::{AccountId, IdentityId, MaybeBlock}; use polymesh_runtime_develop::constants::time::DAYS; -use polymesh_runtime_develop::runtime::{BABE_GENESIS_EPOCH_CONFIG}; +use polymesh_runtime_develop::runtime::BABE_GENESIS_EPOCH_CONFIG; use crate::chain_spec::common::asset_genesis_config; +use crate::chain_spec::common::ChainSpec; use crate::chain_spec::common::{checkpoint_genesis_config, committee_genesis_config}; use crate::chain_spec::common::{corporate_actions_genesis_config, staking_genesis_config}; use crate::chain_spec::common::{get_authority_keys_from_seed, pips_genesis_config}; use crate::chain_spec::common::{group_genesis_config, polymesh_properties}; use crate::chain_spec::common::{polymesh_contracts_genesis_config, seeded_acc_id}; use crate::chain_spec::common::{protocol_fee_genesis_config, validators_genesis_config}; -use crate::chain_spec::common::{ChainSpec}; use crate::chain_spec::common::{ChainSpecMode, InitialAuth}; pub(crate) fn ci_chain_spec(chain_spec_mode: ChainSpecMode) -> ChainSpec { From b2b2b55c0acbacb975a0e4f68cb948d09f6400e2 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 12 Sep 2025 15:23:11 -0300 Subject: [PATCH 73/97] Fix tests - part I --- pallets/runtime/tests/Cargo.toml | 4 +- .../runtime/tests/src/asset_metadata_test.rs | 28 +- .../tests/src/asset_pallet/register_ticker.rs | 7 +- pallets/runtime/tests/src/asset_test.rs | 16 +- pallets/runtime/tests/src/balances_test.rs | 84 +- pallets/runtime/tests/src/committee_test.rs | 23 +- pallets/runtime/tests/src/contracts_test.rs | 15 +- .../tests/src/corporate_actions_test.rs | 66 +- pallets/runtime/tests/src/group_test.rs | 12 +- pallets/runtime/tests/src/identity_test.rs | 8 +- pallets/runtime/tests/src/lib.rs | 50 +- pallets/runtime/tests/src/multisig.rs | 2 +- pallets/runtime/tests/src/pips_test.rs | 3 +- pallets/runtime/tests/src/relayer_test.rs | 102 +- pallets/runtime/tests/src/settlement_test.rs | 2 +- pallets/runtime/tests/src/signed_extra.rs | 81 +- pallets/runtime/tests/src/staking/mock.rs | 1242 +- pallets/runtime/tests/src/staking/mod.rs | 11156 ++++++++++------ pallets/runtime/tests/src/storage.rs | 5 +- .../tests/src/transaction_payment_test.rs | 230 +- .../tests/src/transfer_compliance_test.rs | 33 +- pallets/runtime/tests/src/utility_test.rs | 85 +- 22 files changed, 8222 insertions(+), 5032 deletions(-) diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index 3c0e4591c1..d6cf3fa1b4 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -45,7 +45,7 @@ polymesh-exec-macro = { path = "exec_macro" } # General serde = { version = "1.0", default-features = false } rand = { version = "0.8", default-features = false } -chrono = { version = "0.4", default-features = false } +chrono = { version = "0.4", default-features = false, features = ["now"]} smallvec = "1.4" lazy_static = "1.4" parking_lot = "0.12" @@ -84,7 +84,7 @@ sp-authority-discovery = { workspace = true, default-features = false } sp-block-builder = { workspace = true, default-features = false } sp-consensus-babe = { workspace = true, default-features = false } sp-consensus-grandpa = { workspace = true, default-features = false } -sp-core = { workspace = true, default-features = false } +sp-core = { workspace = true, default-features = false, features = ["full_crypto"] } sp-genesis-builder = { workspace = true, default-features = false } sp-inherents = { workspace = true, default-features = false } sp-io = { workspace = true, default-features = false } diff --git a/pallets/runtime/tests/src/asset_metadata_test.rs b/pallets/runtime/tests/src/asset_metadata_test.rs index 8ca3bbf0ae..cdac1e1021 100644 --- a/pallets/runtime/tests/src/asset_metadata_test.rs +++ b/pallets/runtime/tests/src/asset_metadata_test.rs @@ -1,18 +1,18 @@ -use super::{ - asset_pallet::setup::create_and_issue_sample_asset, - asset_test::set_timestamp, - exec_noop, exec_ok, - storage::{TestStorage, User}, - ExtBuilder, -}; -use frame_support::{assert_noop, assert_ok, dispatch::DispatchError}; +use frame_support::pallet_prelude::DispatchError; +use frame_support::traits::UnixTime; +use frame_support::{assert_noop, assert_ok}; +use sp_keyring::Sr25519Keyring; + use pallet_asset::{AssetMetadataGlobalNameToKey, AssetMetadataLocalNameToKey}; use polymesh_primitives::asset::AssetId; -use polymesh_primitives::asset_metadata::{ - AssetMetadataKey, AssetMetadataLockStatus, AssetMetadataName, AssetMetadataSpec, - AssetMetadataValue, AssetMetadataValueDetail, -}; -use sp_keyring::Sr25519Keyring; +use polymesh_primitives::asset_metadata::{AssetMetadataKey, AssetMetadataLockStatus}; +use polymesh_primitives::asset_metadata::{AssetMetadataName, AssetMetadataValueDetail}; +use polymesh_primitives::asset_metadata::{AssetMetadataSpec, AssetMetadataValue}; + +use super::asset_pallet::setup::create_and_issue_sample_asset; +use super::asset_test::set_timestamp; +use super::storage::{TestStorage, User}; +use super::{exec_noop, exec_ok, ExtBuilder}; type Origin = ::RuntimeOrigin; type Moment = ::Moment; @@ -537,7 +537,7 @@ fn check_locked_until() { details.clone() )); - let unlock_timestamp = Timestamp::now() + 1_000_000_000; + let unlock_timestamp = Timestamp::now().as_millis() as u64 + 1_000_000_000; let details_locked_until = AssetMetadataValueDetail { expire: None, lock_status: AssetMetadataLockStatus::LockedUntil(unlock_timestamp), diff --git a/pallets/runtime/tests/src/asset_pallet/register_ticker.rs b/pallets/runtime/tests/src/asset_pallet/register_ticker.rs index b7c0523527..90a2c88db9 100644 --- a/pallets/runtime/tests/src/asset_pallet/register_ticker.rs +++ b/pallets/runtime/tests/src/asset_pallet/register_ticker.rs @@ -32,7 +32,7 @@ fn verify_ticker_characters() { // Generates 10 random valid tickers for _ in 0..10 { let valid_ticker: Vec = (0..TICKER_LEN + 1) - .map(|_| all_valid_characters[rng.gen_range(0, all_valid_characters.len())]) + .map(|_| all_valid_characters[rng.gen_range(0..all_valid_characters.len())]) .collect(); assert_ok!(Asset::verify_ticker_characters( &Ticker::from_slice_truncated(&valid_ticker) @@ -46,10 +46,9 @@ fn verify_ticker_characters() { // Generates 10 random invalid tickers for _ in 0..10 { let mut invalid_ticker: Vec = (0..TICKER_LEN - 1) - .map(|_| all_valid_characters[rng.gen_range(0, all_valid_characters.len())]) + .map(|_| all_valid_characters[rng.gen_range(0..all_valid_characters.len())]) .collect(); - invalid_ticker.push(all_invalid_characters[rng.gen_range(0, all_invalid_characters.len())]); - + invalid_ticker.push(all_invalid_characters[rng.gen_range(0..all_invalid_characters.len())]); assert_eq!( Asset::verify_ticker_characters(&Ticker::from_slice_truncated(&invalid_ticker)) .unwrap_err(), diff --git a/pallets/runtime/tests/src/asset_test.rs b/pallets/runtime/tests/src/asset_test.rs index ad5143d20d..9b99b37e52 100644 --- a/pallets/runtime/tests/src/asset_test.rs +++ b/pallets/runtime/tests/src/asset_test.rs @@ -1,5 +1,7 @@ use chrono::prelude::Utc; -use frame_support::dispatch::{DispatchError, DispatchResult}; +use frame_support::dispatch::DispatchResult; +use frame_support::pallet_prelude::DispatchError; +use frame_support::traits::UnixTime; use frame_support::{assert_noop, assert_ok}; use rand::Rng; use sp_consensus_babe::Slot; @@ -351,7 +353,7 @@ fn checkpoints_fuzz_test() { let mut bob_balance: [u128; 100] = [0; 100]; let mut rng = rand::thread_rng(); for j in 1..100 { - let transfers = rng.gen_range(0, 10); + let transfers = rng.gen_range(0..10); owner_balance[j] = owner_balance[j - 1]; bob_balance[j] = bob_balance[j - 1]; for _k in 0..transfers { @@ -729,7 +731,10 @@ fn next_checkpoint_is_updated_we() { }; let period_ms = period_secs * 1000; set_timestamp(start); - assert_eq!(start, ::UnixTime::now()); + assert_eq!( + start as u128, + ::UnixTime::now().as_millis() + ); let owner = User::new(Sr25519Keyring::Alice); let bob = User::new(Sr25519Keyring::Bob); @@ -798,7 +803,10 @@ fn non_recurring_schedule_works_we() { // Non-recuring schedule. let period = CalendarPeriod::default(); set_timestamp(start); - assert_eq!(start, ::UnixTime::now()); + assert_eq!( + start as u128, + ::UnixTime::now().as_millis() + ); let owner = User::new(Sr25519Keyring::Alice); let bob = User::new(Sr25519Keyring::Bob); diff --git a/pallets/runtime/tests/src/balances_test.rs b/pallets/runtime/tests/src/balances_test.rs index 7e57fc4884..09b3dfebfc 100644 --- a/pallets/runtime/tests/src/balances_test.rs +++ b/pallets/runtime/tests/src/balances_test.rs @@ -1,17 +1,17 @@ -use super::{storage::TestStorage, ExtBuilder}; +use frame_support::assert_ok; +use frame_support::dispatch::DispatchInfo; +use frame_support::traits::Currency; +use frame_support::weights::Weight; +use sp_keyring::Sr25519Keyring; +use sp_runtime::traits::TransactionExtension; + use pallet_balances::{self as balances, Event as BalancesRawEvent}; use pallet_identity as identity; -use polymesh_runtime_develop::{runtime, Runtime}; - -use frame_support::{ - assert_ok, - dispatch::{DispatchInfo, Weight}, - traits::Currency, -}; -use pallet_transaction_payment::ChargeTransactionPayment; +use pallet_transaction_payment::{ChargeTransactionPayment, Val}; use polymesh_primitives::Memo; -use sp_keyring::Sr25519Keyring; -use sp_runtime::traits::SignedExtension; + +use super::storage::{RuntimeCall as StorageRuntimeCall, TestStorage}; +use super::ExtBuilder; pub type Balances = balances::Pallet; pub type System = frame_system::Pallet; @@ -22,7 +22,7 @@ type Error = balances::Error; /// create a transaction info struct from weight. Handy to avoid building the whole struct. pub fn info_from_weight(w: u64) -> DispatchInfo { DispatchInfo { - weight: Weight::from_parts(w, 0), + call_weight: Weight::from_parts(w, 0), ..Default::default() } } @@ -36,33 +36,34 @@ fn signed_extension_charge_transaction_payment_work() { .monied(true) .build() .execute_with(|| { - let len = 10; - let alice_id = Sr25519Keyring::Alice.to_account_id(); - - let call = runtime::RuntimeCall::System(frame_system::Call::remark { remark: vec![] }); + let alice_acc = Sr25519Keyring::Alice.to_account_id(); + let charge_tx_payment = ChargeTransactionPayment::::from(0); + let call = StorageRuntimeCall::System(frame_system::Call::remark { remark: vec![] }); - assert!( - as SignedExtension>::pre_dispatch( - ChargeTransactionPayment::from(0), - &alice_id, + assert!(charge_tx_payment + .clone() + .prepare( + Val::NoCharge, + &Origin::signed(alice_acc.clone()), &call, &info_from_weight(5), - len + 10 ) - .is_ok() - ); - assert_eq!(Balances::free_balance(&alice_id), 100 - 20 - 25); - assert!( - as SignedExtension>::pre_dispatch( - ChargeTransactionPayment::from(0 /* 0 tip */), - &alice_id, + .is_ok()); + + assert_eq!(Balances::free_balance(&alice_acc), 100 - 20 - 25); + + assert!(charge_tx_payment + .prepare( + Val::NoCharge, + &Origin::signed(alice_acc.clone()), &call, &info_from_weight(3), - len + 10 ) - .is_ok() - ); - assert_eq!(Balances::free_balance(&alice_id), 100 - 20 - 25 - 20 - 15); + .is_ok()); + + assert_eq!(Balances::free_balance(&alice_acc), 100 - 20 - 25 - 20 - 15); }); } @@ -74,19 +75,18 @@ fn tipping_fails() { .monied(true) .build() .execute_with(|| { - let alice_id = Sr25519Keyring::Alice.to_account_id(); - let call = runtime::RuntimeCall::System(frame_system::Call::remark { remark: vec![] }); - let len = 10; - assert!( - as SignedExtension>::pre_dispatch( - ChargeTransactionPayment::from(5 /* 5 tip */), - &alice_id, + let charge_tx_payment = ChargeTransactionPayment::::from(5); + + let call = StorageRuntimeCall::System(frame_system::Call::remark { remark: vec![] }); + assert!(charge_tx_payment + .prepare( + Val::NoCharge, + &Origin::signed(Sr25519Keyring::Alice.to_account_id()), &call, &info_from_weight(3), - len + 10, ) - .is_err() - ); + .is_err()); }); } diff --git a/pallets/runtime/tests/src/committee_test.rs b/pallets/runtime/tests/src/committee_test.rs index 3d88d9a5fe..a0a8fe0413 100644 --- a/pallets/runtime/tests/src/committee_test.rs +++ b/pallets/runtime/tests/src/committee_test.rs @@ -1,19 +1,8 @@ -use super::{ - ext_builder::{ExtBuilder, COOL_OFF_PERIOD}, - storage::{ - fast_forward_blocks, get_identity_id, register_keyring_account, root, EventTest, - RuntimeCall, TestStorage, - }, -}; -use frame_support::{ - assert_noop, assert_ok, - dispatch::{DispatchError, DispatchResult}, -}; +use frame_support::pallet_prelude::DispatchError; +use frame_support::{assert_noop, assert_ok, dispatch::DispatchResult}; use frame_system::{EventRecord, Phase}; -use pallet_committee::{ - self as committee, Event as CommitteeRawEvent, Members, PolymeshVotes, Proposals, - ReleaseCoordinator, VoteThreshold, Voting, -}; +use pallet_committee::{self as committee, Event as CommitteeRawEvent, Members}; +use pallet_committee::{PolymeshVotes, Proposals, ReleaseCoordinator, VoteThreshold, Voting}; use pallet_group as group; use pallet_identity as identity; use pallet_pips::{PipId, ProposalState, ProposalStates, SnapshotResult}; @@ -23,6 +12,10 @@ use sp_keyring::Sr25519Keyring; use sp_runtime::traits::Hash; use std::convert::TryFrom; +use super::ext_builder::{ExtBuilder, COOL_OFF_PERIOD}; +use super::storage::{fast_forward_blocks, get_identity_id, register_keyring_account}; +use super::storage::{root, EventTest, RuntimeCall, TestStorage}; + type Committee = committee::Pallet; type CommitteeGroup = group::Pallet; type System = frame_system::Pallet; diff --git a/pallets/runtime/tests/src/contracts_test.rs b/pallets/runtime/tests/src/contracts_test.rs index e93b877c1e..3ef308e4fd 100644 --- a/pallets/runtime/tests/src/contracts_test.rs +++ b/pallets/runtime/tests/src/contracts_test.rs @@ -1,18 +1,17 @@ use codec::Encode; -use frame_support::dispatch::{DispatchError, Weight}; +use frame_support::pallet_prelude::DispatchError; +use frame_support::weights::Weight; use frame_support::{assert_err_ignore_postinfo, assert_noop, assert_ok, assert_storage_noop}; -use polymesh_contracts::{ - Api, ApiCodeHash, ApiNextUpgrade, ChainVersion, ExtrinsicId, NextUpgrade, -}; +use polymesh_contracts::{Api, ApiCodeHash, ApiNextUpgrade}; +use polymesh_contracts::{ChainVersion, ExtrinsicId, NextUpgrade}; use sp_keyring::Sr25519Keyring; use sp_runtime::traits::Hash; use pallet_asset::TickersOwnedByUser; use pallet_identity::ParentDid; -use polymesh_primitives::{ - constants::currency::POLY, ExtrinsicPermissions, Gas, Permissions, PortfolioPermissions, - SubsetRestriction, Ticker, -}; +use polymesh_primitives::constants::currency::POLY; +use polymesh_primitives::{ExtrinsicPermissions, SubsetRestriction, Ticker}; +use polymesh_primitives::{Gas, Permissions, PortfolioPermissions}; use polymesh_runtime_common::Currency; use crate::ext_builder::ExtBuilder; diff --git a/pallets/runtime/tests/src/corporate_actions_test.rs b/pallets/runtime/tests/src/corporate_actions_test.rs index ae71d37ace..5c35ae0d55 100644 --- a/pallets/runtime/tests/src/corporate_actions_test.rs +++ b/pallets/runtime/tests/src/corporate_actions_test.rs @@ -1,41 +1,39 @@ -use super::{ - asset_test::max_len_bytes, - storage::{root, Balance, Checkpoint, MaxDidWhts, MaxTargetIds, TestStorage, User}, - ExtBuilder, -}; -use crate::asset_pallet::setup::create_and_issue_sample_asset; -use crate::asset_test::{check_schedules, next_schedule_id, set_timestamp}; +use std::convert::TryInto; + use core::iter; -use frame_support::{ - assert_noop, assert_ok, - dispatch::{DispatchError, DispatchResult}, -}; -use pallet_asset::checkpoint::{ - CheckpointIdSequence, ScheduleIdSequence, SchedulePoints, ScheduleRefCount, Timestamps, -}; +use frame_support::pallet_prelude::DispatchError; +use frame_support::{assert_noop, assert_ok, dispatch::DispatchResult}; +use sp_arithmetic::Permill; +use sp_keyring::Sr25519Keyring; + +use pallet_asset::checkpoint::{CheckpointIdSequence, ScheduleIdSequence}; +use pallet_asset::checkpoint::{SchedulePoints, ScheduleRefCount, Timestamps}; use pallet_asset::{Assets, BalanceOf}; -use pallet_corporate_actions::{ - ballot::{ - BallotMeta, BallotTimeRange, BallotVote, Metas, Motion, MotionNumChoices, Results, - TimeRanges, Votes, RCV, - }, - distribution::{self, Distribution, Distributions, PER_SHARE_PRECISION}, - CACheckpoint, CADetails, CADocLink, CAId, CAKind, CorporateAction, DefaultTargetIdentities, - DefaultWithholdingTax, DidWithholdingTax, LocalCAId, MaxDetailsLength, RecordDate, - RecordDateSpec, TargetIdentities, TargetTreatment, - TargetTreatment::{Exclude, Include}, - Tax, -}; +use pallet_corporate_actions::ballot::{BallotMeta, BallotTimeRange, BallotVote}; +use pallet_corporate_actions::ballot::{Metas, Motion, MotionNumChoices, Results}; +use pallet_corporate_actions::ballot::{TimeRanges, Votes, RCV}; +use pallet_corporate_actions::distribution::{self, Distribution}; +use pallet_corporate_actions::distribution::{Distributions, PER_SHARE_PRECISION}; +use pallet_corporate_actions::TargetTreatment::{Exclude, Include}; +use pallet_corporate_actions::{CACheckpoint, CADetails, DefaultWithholdingTax}; +use pallet_corporate_actions::{CADocLink, CAId, CAKind, CorporateAction, DefaultTargetIdentities}; +use pallet_corporate_actions::{DidWithholdingTax, LocalCAId, MaxDetailsLength, RecordDate}; +use pallet_corporate_actions::{RecordDateSpec, TargetIdentities, TargetTreatment, Tax}; use polymesh_common_utilities::checkpoint::{ScheduleCheckpoints, ScheduleId}; +use polymesh_primitives::agent::AgentGroup; use polymesh_primitives::asset::AssetId; -use polymesh_primitives::{ - agent::AgentGroup, asset::CheckpointId, constants::currency::ONE_UNIT, AuthorizationData, - Claim, ClaimType, Condition, ConditionType, CountryCode, Document, DocumentId, IdentityId, - Moment, PortfolioId, PortfolioNumber, Scope, Signatory, TrustedFor, TrustedIssuer, -}; -use sp_arithmetic::Permill; -use sp_keyring::Sr25519Keyring; -use std::convert::TryInto; +use polymesh_primitives::asset::CheckpointId; +use polymesh_primitives::constants::currency::ONE_UNIT; +use polymesh_primitives::{AuthorizationData, Claim, ClaimType, Condition}; +use polymesh_primitives::{ConditionType, CountryCode, Document}; +use polymesh_primitives::{DocumentId, IdentityId, Moment, PortfolioId, PortfolioNumber}; +use polymesh_primitives::{Scope, Signatory, TrustedFor, TrustedIssuer}; + +use super::asset_test::max_len_bytes; +use super::storage::{root, Balance, Checkpoint, MaxDidWhts, MaxTargetIds, TestStorage, User}; +use super::ExtBuilder; +use crate::asset_pallet::setup::create_and_issue_sample_asset; +use crate::asset_test::{check_schedules, next_schedule_id, set_timestamp}; type System = frame_system::Pallet; type Origin = ::RuntimeOrigin; diff --git a/pallets/runtime/tests/src/group_test.rs b/pallets/runtime/tests/src/group_test.rs index 5ea41fdda8..12b8e73182 100644 --- a/pallets/runtime/tests/src/group_test.rs +++ b/pallets/runtime/tests/src/group_test.rs @@ -1,14 +1,14 @@ -use super::{ - storage::{get_identity_id, register_keyring_account, TestStorage}, - ExtBuilder, -}; +use frame_support::pallet_prelude::DispatchError; +use frame_support::{assert_noop, assert_ok}; +use sp_keyring::Sr25519Keyring; + use pallet_group::{self as group}; use pallet_identity as identity; use polymesh_primitives::traits::group::GroupTrait; use polymesh_primitives::IdentityId; -use frame_support::{assert_noop, assert_ok, dispatch::DispatchError}; -use sp_keyring::Sr25519Keyring; +use super::storage::{get_identity_id, register_keyring_account, TestStorage}; +use super::ExtBuilder; type CommitteeGroup = group::Pallet; type Origin = ::RuntimeOrigin; diff --git a/pallets/runtime/tests/src/identity_test.rs b/pallets/runtime/tests/src/identity_test.rs index b6b85850b0..53c778fc8e 100644 --- a/pallets/runtime/tests/src/identity_test.rs +++ b/pallets/runtime/tests/src/identity_test.rs @@ -704,7 +704,7 @@ fn do_remove_secondary_keys_test_with_externalities() { add_secondary_key(alice.did, bob.acc()); // Fund the multisig - assert_ok!(Balances::transfer( + assert_ok!(Balances::transfer_allow_death( alice.origin(), ms_address.clone().into(), 2 * POLY @@ -749,7 +749,7 @@ fn do_remove_secondary_keys_test_with_externalities() { ); // Transfer funds back to Alice - assert_ok!(Balances::transfer( + assert_ok!(Balances::transfer_allow_death( Origin::signed(ms_address.clone()), alice.acc().into(), 2 * POLY @@ -814,7 +814,7 @@ fn leave_identity_test_with_externalities() { assert_eq!(Identity::get_identity(&ms_address), Some(alice.did)); // send funds to multisig - assert_ok!(Balances::transfer( + assert_ok!(Balances::transfer_allow_death( alice.origin(), ms_address.clone().into(), 2 * POLY @@ -831,7 +831,7 @@ fn leave_identity_test_with_externalities() { ); // send funds back to alice from multisig - assert_ok!(Balances::transfer( + assert_ok!(Balances::transfer_allow_death( Origin::signed(ms_address.clone()), alice.acc().into(), 2 * POLY diff --git a/pallets/runtime/tests/src/lib.rs b/pallets/runtime/tests/src/lib.rs index 3fcb4b60d6..43d4c64f5b 100644 --- a/pallets/runtime/tests/src/lib.rs +++ b/pallets/runtime/tests/src/lib.rs @@ -3,43 +3,39 @@ // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. #![recursion_limit = "1024"] -pub(crate) use storage::{ - account_from, add_secondary_key, fast_forward_blocks, fast_forward_to_block, get_identity_id, - make_account, make_account_with_balance, make_account_without_cdd, next_block, - register_keyring_account_with_balance, TestStorage, -}; +pub(crate) use storage::{next_block, TestStorage}; pub(crate) use ext_builder::ExtBuilder; -//mod asset_pallet; -//#[macro_use] -//mod asset_test; -//mod asset_metadata_test; -//mod balances_test; -//mod committee_test; -//mod compliance_manager_test; -//mod contracts_test; -//mod corporate_actions_test; -//#[macro_use] -//mod external_agents_test; +mod asset_pallet; +#[macro_use] +mod asset_test; +mod asset_metadata_test; +mod balances_test; +mod committee_test; +mod compliance_manager_test; +mod contracts_test; +mod corporate_actions_test; +#[macro_use] +mod external_agents_test; pub(crate) mod ext_builder; -//mod fee_details; -//mod group_test; -//mod identity_test; -//mod multisig; -//mod nft; +mod fee_details; +mod group_test; +mod identity_test; +mod multisig; +mod nft; //mod pips_test; -//mod portfolio; -//mod protocol_fee; +mod portfolio; +mod protocol_fee; //mod relayer_test; //mod settlement_pallet; //mod settlement_test; //mod signed_extra; //mod staking; -//mod staking_extra_tests; +mod staking_extra_tests; +mod sto_test; pub(crate) mod storage; -//mod sto_test; //mod transaction_payment_test; -//mod transfer_compliance_test; -//mod treasury_test; +mod transfer_compliance_test; +mod treasury_test; //mod utility_test; diff --git a/pallets/runtime/tests/src/multisig.rs b/pallets/runtime/tests/src/multisig.rs index ab13106fc0..6916581065 100644 --- a/pallets/runtime/tests/src/multisig.rs +++ b/pallets/runtime/tests/src/multisig.rs @@ -509,7 +509,7 @@ fn rotate_multisig_primary_key_with_balance() { assert_eq!(get_primary_key(alice.did), ms_address); // Fund the MultiSig. - assert_ok!(Balances::transfer( + assert_ok!(Balances::transfer_allow_death( bob.origin(), ms_address.clone().into(), 2 * POLY diff --git a/pallets/runtime/tests/src/pips_test.rs b/pallets/runtime/tests/src/pips_test.rs index 1082669094..76b532e059 100644 --- a/pallets/runtime/tests/src/pips_test.rs +++ b/pallets/runtime/tests/src/pips_test.rs @@ -9,7 +9,8 @@ use super::{ }; use frame_support::{ assert_noop, assert_ok, - dispatch::{DispatchError, DispatchResult}, + dispatch::DispatchResult, + pallet_prelude::DispatchError, traits::{LockableCurrency, WithdrawReasons}, }; use frame_system::{self, EventRecord}; diff --git a/pallets/runtime/tests/src/relayer_test.rs b/pallets/runtime/tests/src/relayer_test.rs index a3899a71f7..f31a2a2716 100644 --- a/pallets/runtime/tests/src/relayer_test.rs +++ b/pallets/runtime/tests/src/relayer_test.rs @@ -1,25 +1,23 @@ -use super::{ - storage::{get_last_auth_id, make_account_without_cdd, RuntimeCall, TestStorage, User}, - ExtBuilder, -}; -use frame_support::{ - assert_noop, assert_ok, - dispatch::{DispatchInfo, Pays, PostDispatchInfo, Weight}, -}; +use frame_support::dispatch::{DispatchInfo, Pays, PostDispatchInfo}; +use frame_support::weights::Weight; +use frame_support::{assert_noop, assert_ok}; use frame_system; +use sp_keyring::Sr25519Keyring; +use sp_runtime::traits::{Dispatchable, TransactionExtension, TxBaseImplication}; +use sp_runtime::transaction_validity::TransactionSource; +use sp_runtime::transaction_validity::{InvalidTransaction, TransactionValidityError}; +use sp_runtime::MultiAddress; + use pallet_relayer::Subsidy; +use pallet_transaction_payment::Val; use polymesh_common_utilities::protocol_fee::ProtocolOp; -use polymesh_primitives::{ - constants::currency::POLY, traits::CddAndFeeDetails, AccountId, Balance, Signatory, Ticker, - TransactionError, -}; +use polymesh_primitives::constants::currency::POLY; +use polymesh_primitives::traits::CddAndFeeDetails; +use polymesh_primitives::{AccountId, Balance, Signatory, Ticker, TransactionError}; use polymesh_runtime_develop::runtime::{CddHandler, RuntimeCall as DevRuntimeCall}; -use sp_keyring::Sr25519Keyring; -use sp_runtime::{ - traits::{Dispatchable, SignedExtension}, - transaction_validity::{InvalidTransaction, TransactionValidityError}, - MultiAddress, -}; + +use super::storage::{get_last_auth_id, make_account_without_cdd, RuntimeCall, TestStorage, User}; +use super::ExtBuilder; type Relayer = pallet_relayer::Pallet; type Subsidies = pallet_relayer::Subsidies; @@ -31,12 +29,13 @@ type TransactionPayment = pallet_transaction_payment::Pallet; type ChargeTransactionPayment = pallet_transaction_payment::ChargeTransactionPayment; type Error = pallet_relayer::Error; type IdentityError = pallet_identity::Error; +type RuntimeOrigin = ::RuntimeOrigin; // Relayer Test Helper functions // ======================================= fn call_balance_transfer(val: Balance) -> RuntimeCall { - RuntimeCall::Balances(pallet_balances::Call::transfer { + RuntimeCall::Balances(pallet_balances::Call::transfer_allow_death { dest: MultiAddress::Id(Sr25519Keyring::Alice.to_account_id()), value: val, }) @@ -71,7 +70,7 @@ fn call_relayer_remove_paying_key(user_key: AccountId, paying_key: AccountId) -> /// create a transaction info struct from weight. Handy to avoid building the whole struct. pub fn info_from_weight(w: u64) -> DispatchInfo { DispatchInfo { - weight: Weight::from_parts(w, 0), + call_weight: Weight::from_parts(w, 0), ..Default::default() } } @@ -101,21 +100,28 @@ fn assert_subsidy(user: User, subsidy: Option<(User, Balance)>) { } fn assert_invalid_subsidy_call(caller: &AccountId, call: &RuntimeCall) { - let len = 10; + let origin = RuntimeOrigin::signed(caller.clone()); + let expected_err = TransactionValidityError::Invalid(InvalidTransaction::Custom( TransactionError::PalletNotSubsidised as u8, )); - // test `validate` let pre_err = ChargeTransactionPayment::from(0) - .validate(caller, call, &info_from_weight(5), len) + .validate( + origin.clone(), + call, + &info_from_weight(5), + 10, + Default::default(), + &TxBaseImplication(()), + TransactionSource::InBlock, + ) .map(|_| ()) .unwrap_err(); assert_eq!(pre_err, expected_err); - // test `pre_dispatch` let pre_err = ChargeTransactionPayment::from(0) - .pre_dispatch(caller, call, &info_from_weight(5), len) + .prepare(Val::NoCharge, &origin, call, &info_from_weight(5), 10) .map(|_| ()) .unwrap_err(); assert_eq!(pre_err, expected_err); @@ -445,7 +451,13 @@ fn do_user_remove_paying_key_transaction_fee_test() { // 1. Call `pre_dispatch`. let pre = ChargeTransactionPayment::from(0) - .pre_dispatch(&bob.acc(), &call, &call_info, len) + .prepare( + Val::NoCharge, + &RuntimeOrigin::signed(bob.acc()), + &call, + &call_info, + len, + ) .unwrap(); // 2. Execute extrinsic. @@ -453,9 +465,9 @@ fn do_user_remove_paying_key_transaction_fee_test() { // 3. Call `post_dispatch`. assert!(ChargeTransactionPayment::post_dispatch( - Some(pre), + pre, &call_info, - &post_info_from_weight(5), + &mut post_info_from_weight(5), len, &Ok(()) ) @@ -497,10 +509,13 @@ fn do_relayer_transaction_and_protocol_fees_test() { // test `validate` let pre_err = ChargeTransactionPayment::from(0) .validate( - &bob.acc(), + RuntimeOrigin::signed(bob.acc()), &call_system_remark(42), &info_from_weight(5), len, + Default::default(), + &TxBaseImplication(()), + TransactionSource::InBlock, ) .map(|_| ()) .unwrap_err(); @@ -508,8 +523,9 @@ fn do_relayer_transaction_and_protocol_fees_test() { // test `pre_dispatch` let pre_err = ChargeTransactionPayment::from(0) - .pre_dispatch( - &bob.acc(), + .prepare( + Val::NoCharge, + &RuntimeOrigin::signed(bob.acc()), &call_system_remark(42), &info_from_weight(5), len, @@ -535,7 +551,13 @@ fn do_relayer_transaction_and_protocol_fees_test() { // 1. Call `pre_dispatch`. let pre = ChargeTransactionPayment::from(0) - .pre_dispatch(&bob.acc(), &call, &call_info, len) + .prepare( + Val::NoCharge, + &RuntimeOrigin::signed(bob.acc()), + &call, + &call_info, + len, + ) .unwrap(); // 2. Execute extrinsic. @@ -543,9 +565,9 @@ fn do_relayer_transaction_and_protocol_fees_test() { // 3. Call `post_dispatch`. assert!(ChargeTransactionPayment::post_dispatch( - Some(pre), + pre, &call_info, - &post_info_from_weight(50), + &mut post_info_from_weight(50), len, &Ok(()) ) @@ -640,7 +662,13 @@ fn do_relayer_batched_subsidy_calls_test() { // 1. Call `pre_dispatch`. let pre = ChargeTransactionPayment::from(0) - .pre_dispatch(&bob.acc(), &call, &call_info, len) + .prepare( + Val::NoCharge, + &RuntimeOrigin::signed(bob.acc()), + &call, + &call_info, + len, + ) .unwrap(); // 2. Execute extrinsic. @@ -648,9 +676,9 @@ fn do_relayer_batched_subsidy_calls_test() { // 3. Call `post_dispatch`. assert!(ChargeTransactionPayment::post_dispatch( - Some(pre), + pre, &call_info, - &post_info_from_weight(50), + &mut post_info_from_weight(50), len, &Ok(()) ) diff --git a/pallets/runtime/tests/src/settlement_test.rs b/pallets/runtime/tests/src/settlement_test.rs index bd1dfaf141..dc6ea27bfc 100644 --- a/pallets/runtime/tests/src/settlement_test.rs +++ b/pallets/runtime/tests/src/settlement_test.rs @@ -1074,7 +1074,7 @@ fn basic_fuzzing() { let fail: bool = random(); let mut rng = thread_rng(); - let failed_user = rng.gen_range(0, 4); + let failed_user = rng.gen_range(0..4); if fail { assert_ok!(Settlement::withdraw_affirmation( users[failed_user].origin(), diff --git a/pallets/runtime/tests/src/signed_extra.rs b/pallets/runtime/tests/src/signed_extra.rs index d015a68e44..7bd3e8726a 100644 --- a/pallets/runtime/tests/src/signed_extra.rs +++ b/pallets/runtime/tests/src/signed_extra.rs @@ -1,20 +1,22 @@ -use pallet_group as group; -use pallet_identity as identity; -use polymesh_primitives::{identity_id::GenesisIdentityRecord, AccountId, IdentityId, Nonce}; -use polymesh_runtime_develop::{ - runtime::{RuntimeCall, SignedExtra}, - Runtime, -}; - -use frame_support::dispatch::{DispatchClass, DispatchInfo, Weight}; -use frame_system::{ - CheckEra, CheckGenesis, CheckNonce, CheckSpecVersion, CheckTxVersion, CheckWeight, -}; +use frame_support::dispatch::{DispatchClass, DispatchInfo}; +use frame_support::weights::Weight; +use frame_system::{CheckEra, CheckGenesis, CheckNonce}; +use frame_system::{CheckSpecVersion, CheckTxVersion, CheckWeight}; use sp_io::TestExternalities; use sp_keyring::Sr25519Keyring; -use sp_runtime::{generic, traits::SignedExtension, BuildStorage}; +use sp_runtime::traits::{TransactionExtension, TxBaseImplication}; +use sp_runtime::transaction_validity::TransactionSource; +use sp_runtime::{generic, BuildStorage}; use sp_std::convert::From; +use pallet_group as group; +use pallet_identity as identity; +use polymesh_primitives::{identity_id::GenesisIdentityRecord, AccountId, IdentityId, Nonce}; +use polymesh_runtime_develop::runtime::{RuntimeCall, SignedExtra}; +use polymesh_runtime_develop::Runtime; + +type RuntimeOrigin = ::RuntimeOrigin; + pub fn make_call() -> (::RuntimeCall, usize) { ( RuntimeCall::System(frame_system::Call::remark { remark: vec![] }), @@ -81,6 +83,7 @@ fn make_min_storage() -> Result { .iter() .map(|acc| (acc.clone(), 1_000_000)) .collect::>(), + dev_accounts: None, } .assimilate_storage(&mut storage)?; @@ -118,23 +121,40 @@ fn normal_tx_ext() -> Result<(), String> { /// - Priority of any transaction is its own tip. fn normal_tx() -> Result<(), String> { let user = Sr25519Keyring::Alice.to_account_id(); + let alice_origin = RuntimeOrigin::signed(user.clone()); let (call, len) = make_call(); let info = DispatchInfo { - weight: Weight::from_parts(100, 0), + call_weight: Weight::from_parts(100, 0), ..Default::default() }; // Normat Tx with tip. Expected an error. let sign_extra = make_signed_extra(0, 10, 0, 42u128.into()); - let tx_validity = sign_extra.validate(&user, &call, &info, len); + let tx_validity = sign_extra.validate( + alice_origin.clone(), + &call, + &info, + len, + Default::default(), + &TxBaseImplication(()), + TransactionSource::InBlock, + ); assert!(tx_validity.is_err()); // Normal TX without any tip. let sign_extra = make_signed_extra(0, 10, 0, 0u128.into()); let tx_validity = sign_extra - .validate(&user, &call, &info, len) + .validate( + alice_origin, + &call, + &info, + len, + Default::default(), + &TxBaseImplication(()), + TransactionSource::InBlock, + ) .expect("Tx should be valid"); - assert_eq!(tx_validity.priority, 0); + assert_eq!(tx_validity.0.priority, 0); Ok(()) } @@ -148,9 +168,10 @@ fn operational_tx_ext() -> Result<(), String> { /// - Priority of any transaction is its own tip. fn operational_tx() -> Result<(), String> { let user: AccountId = Sr25519Keyring::Alice.public().into(); + let alice_origin = RuntimeOrigin::signed(user.clone()); let (call, len) = make_call(); let info = DispatchInfo { - weight: Weight::from_parts(100, 0), + call_weight: Weight::from_parts(100, 0), class: DispatchClass::Operational, ..Default::default() }; @@ -159,15 +180,31 @@ fn operational_tx() -> Result<(), String> { let tip = 42u128; let sign_extra = make_signed_extra(0, 10, 0, tip.into()); let tx_validity = sign_extra - .validate(&user, &call, &info, len) + .validate( + alice_origin.clone(), + &call, + &info, + len, + Default::default(), + &TxBaseImplication(()), + TransactionSource::InBlock, + ) .expect("Tx should be valid"); - assert_eq!(tx_validity.priority as u128, tip); + assert_eq!(tx_validity.0.priority as u128, tip); // Operational TX without any tip. let sign_extra = make_signed_extra(0, 10, 0, 0u128.into()); let tx_validity = sign_extra - .validate(&user, &call, &info, len) + .validate( + alice_origin, + &call, + &info, + len, + Default::default(), + &TxBaseImplication(()), + TransactionSource::InBlock, + ) .expect("Tx should be valid"); - assert_eq!(tx_validity.priority, 0); + assert_eq!(tx_validity.0.priority, 0); Ok(()) } diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index 6eea306a47..85c8e3919e 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -17,48 +17,25 @@ //! Test utilities -use std::collections::BTreeMap; - -use frame_election_provider_support::{onchain, SequentialPhragmen}; -use frame_support::dispatch::{DispatchResult, Weight}; -use frame_support::traits::{ - ConstU32, Currency, EitherOfDiverse, FindAuthor, Get, Hooks, Imbalance, KeyOwnerProofSystem, - OnUnbalanced, OneSessionHandler, -}; -use frame_support::weights::constants::RocksDbWeight; -use frame_support::{assert_ok, ord_parameter_types, parameter_types}; +use frame_election_provider_support::bounds::{ElectionBounds, ElectionBoundsBuilder}; +use frame_election_provider_support::{onchain, SequentialPhragmen, VoteWeight}; + +use frame_support::traits::{ConstU64, EitherOfDiverse, FindAuthor, Get}; +use frame_support::traits::{Imbalance, OnUnbalanced, OneSessionHandler}; +use frame_support::{assert_ok, derive_impl, ord_parameter_types, parameter_types}; use frame_system::{EnsureRoot, EnsureSignedBy}; -use sp_core::H256; -use sp_runtime::curve::PiecewiseLinear; -use sp_runtime::testing::{TestXt, UintAuthorityId}; -use sp_runtime::traits::{IdentityLookup, Zero}; -use sp_runtime::transaction_validity::InvalidTransaction; -use sp_runtime::BuildStorage; -use sp_runtime::{KeyTypeId, Perbill}; -use sp_staking::offence::{DisableStrategy, OffenceDetails, OnOffenceHandler}; -use sp_staking::{EraIndex, SessionIndex}; - -use pallet_balances::AccountData; -use pallet_staking::*; -use pallet_validators::types::SlashingSwitch; -use polymesh_primitives::asset::AssetId; -use polymesh_primitives::constants::currency::POLY; -use polymesh_primitives::identity_id::GenesisIdentityRecord; -use polymesh_primitives::{ - traits::{ - group::{GroupTrait, InactiveMember}, - CheckCdd, PortfolioSubTrait, SubsidiserTrait, - }, - Authorization, AuthorizationData, Claim, IdentityId, Moment, NFTId, Permissions, PortfolioId, - SecondaryKey, Signatory, -}; +use sp_io; +use sp_runtime::{curve::PiecewiseLinear, testing::UintAuthorityId, traits::Zero, BuildStorage}; +use sp_staking::offence::{OffenceDetails, OnOffenceHandler}; +use sp_staking::OnStakingUpdate; + +use pallet_staking::{self as pallet_staking, *}; pub const INIT_TIMESTAMP: u64 = 30_000; -pub const BLOCK_TIME: u64 = 1_000; +pub const BLOCK_TIME: u64 = 1000; /// The AccountId alias in this test module. pub(crate) type AccountId = u64; -pub(crate) type Nonce = u64; pub(crate) type BlockNumber = u64; pub(crate) type Balance = u128; @@ -89,7 +66,7 @@ impl sp_runtime::BoundToRuntimeAppPublic for OtherSessionHandler { } pub fn is_disabled(controller: AccountId) -> bool { - let stash = Staking::ledger(&controller).unwrap().stash; + let stash = Ledger::::get(&controller).unwrap().stash; let validator_index = match Session::validators().iter().position(|v| *v == stash) { Some(index) => index as u32, None => return false, @@ -99,29 +76,17 @@ pub fn is_disabled(controller: AccountId) -> bool { } type Block = frame_system::mocking::MockBlock; -pub type Call = RuntimeCall; frame_support::construct_runtime!( pub enum Test { - System: frame_system::{Pallet, Call, Config, Storage, Event}, - Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned}, - Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, + System: frame_system, Authorship: pallet_authorship, - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, - Validators: pallet_validators, - Staking: pallet_staking::{Pallet, Call, Config, Storage, Event}, - Session: pallet_session::{Pallet, Call, Storage, Event, Config}, - Historical: pallet_session::historical::{Pallet}, - Identity: pallet_identity::{Pallet, Call, Storage, Event, Config}, - CddServiceProviders: pallet_group::::{Pallet, Call, Storage, Event, Config}, - ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config}, - Preimage: pallet_preimage::{Pallet, Call, Storage, Event}, - Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event}, - Treasury: pallet_treasury::{Pallet, Call, Event}, - PolymeshCommittee: pallet_committee::::{Pallet, Call, Storage, Origin, Event, Config}, - Pips: pallet_pips::{Pallet, Call, Storage, Event, Config}, - Base: pallet_base::{Pallet, Call, Event}, + Timestamp: pallet_timestamp, + Balances: pallet_balances, + Staking: pallet_staking, + Session: pallet_session, + Historical: pallet_session::historical, } ); @@ -137,71 +102,26 @@ impl FindAuthor for Author11 { } parameter_types! { - pub static SessionsPerEra: sp_staking::SessionIndex = 3; + pub static SessionsPerEra: SessionIndex = 3; pub static ExistentialDeposit: Balance = 1; pub static SlashDeferDuration: EraIndex = 0; pub static Period: BlockNumber = 5; pub static Offset: BlockNumber = 0; - - pub const MaxLen: u32 = 256; - pub const MaxLocks: u32 = 1024; - pub const MaxHolds: u32 = 32; - pub const MaxFreezes: u32 = 32; - pub const MaxReserves: u32 = 50; - pub const BlockHashCount: u64 = 250; - pub const MaximumBlockWeight: Weight = Weight::from_parts(1024, 0); - pub BlockWeights: frame_system::limits::BlockWeights = - frame_system::limits::BlockWeights::simple_max( - Weight::from_parts(frame_support::weights::constants::WEIGHT_REF_TIME_PER_SECOND * 2, 0) - ); + pub static MaxControllersInDeprecationBatch: u32 = 5900; } +#[derive_impl(frame_system::config_preludes::TestDefaultConfig)] impl frame_system::Config for Test { - type BaseCallFilter = frame_support::traits::Everything; - type BlockWeights = (); - type BlockLength = (); type DbWeight = RocksDbWeight; - type RuntimeOrigin = RuntimeOrigin; - type Nonce = Nonce; - type RuntimeCall = RuntimeCall; - type Hash = H256; - type Hashing = ::sp_runtime::traits::BlakeTwo256; - type AccountId = AccountId; - type Lookup = IdentityLookup; type Block = Block; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = BlockHashCount; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = (); - type OnSetCode = (); - type MaxConsumers = frame_support::traits::ConstU32<16>; -} - -impl pallet_base::Config for Test { - type RuntimeEvent = RuntimeEvent; - type MaxLen = MaxLen; + type AccountData = pallet_balances::AccountData; } - +#[derive_impl(pallet_balances::config_preludes::TestDefaultConfig)] impl pallet_balances::Config for Test { + type MaxLocks = frame_support::traits::ConstU32<1024>; type Balance = Balance; - type DustRemoval = (); - type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; - type WeightInfo = polymesh_weights::pallet_balances::SubstrateWeight; - type MaxLocks = MaxLocks; - type MaxReserves = MaxReserves; - type ReserveIdentifier = [u8; 8]; - type Memo = polymesh_primitives::Memo; - type RuntimeHoldReason = [u8; 32]; - type FreezeIdentifier = [u8; 8]; - type MaxHolds = MaxHolds; - type MaxFreezes = MaxFreezes; } sp_runtime::impl_opaque_keys! { @@ -209,7 +129,6 @@ sp_runtime::impl_opaque_keys! { pub other: OtherSessionHandler, } } - impl pallet_session::Config for Test { type SessionManager = pallet_session::historical::NoteHistoricalRoot; type Keys = SessionKeys; @@ -217,285 +136,29 @@ impl pallet_session::Config for Test { type SessionHandler = (OtherSessionHandler,); type RuntimeEvent = RuntimeEvent; type ValidatorId = AccountId; - type ValidatorIdOf = pallet_staking::StashOf; + type ValidatorIdOf = crate::StashOf; type NextSessionRotation = pallet_session::PeriodicSessions; + type DisablingStrategy = + pallet_session::disabling::UpToLimitWithReEnablingDisablingStrategy; type WeightInfo = (); } -impl pallet_committee::Config for Test { - type RuntimeOrigin = RuntimeOrigin; - type Proposal = RuntimeCall; - type CommitteeOrigin = frame_system::EnsureRoot; - type VoteThresholdOrigin = Self::CommitteeOrigin; - type RuntimeEvent = RuntimeEvent; - type WeightInfo = polymesh_weights::pallet_committee::SubstrateWeight; -} - impl pallet_session::historical::Config for Test { - type FullIdentification = pallet_staking::Exposure; - type FullIdentificationOf = pallet_staking::ExposureOf; -} - -impl pallet_pips::Config for Test { - type Currency = pallet_balances::Pallet; - type VotingMajorityOrigin = frame_system::EnsureRoot; - type GovernanceCommittee = crate::storage::Committee; - type TechnicalCommitteeVMO = frame_system::EnsureRoot; - type UpgradeCommitteeVMO = frame_system::EnsureRoot; - type RuntimeEvent = RuntimeEvent; - type WeightInfo = polymesh_weights::pallet_pips::SubstrateWeight; - type Scheduler = Scheduler; - type SchedulerCall = RuntimeCall; - type MaxRefundsAndVotesPruned = MaxRefundsAndVotesPruned; + type FullIdentification = (); + type FullIdentificationOf = NullIdentity; } - -impl pallet_treasury::Config for Test { - type RuntimeEvent = RuntimeEvent; - type Currency = pallet_balances::Pallet; - type WeightInfo = polymesh_weights::pallet_treasury::SubstrateWeight; -} - impl pallet_authorship::Config for Test { type FindAuthor = Author11; - type EventHandler = pallet_staking::Pallet; -} - -parameter_types! { - pub const MinimumPeriod: u64 = 5; - // PIPs - pub const MaxRefundsAndVotesPruned: u32 = 128; + type EventHandler = (); } impl pallet_timestamp::Config for Test { type Moment = u64; type OnTimestampSet = (); - type MinimumPeriod = MinimumPeriod; + type MinimumPeriod = ConstU64<5>; type WeightInfo = (); } -impl pallet_group::Config for Test { - type RuntimeEvent = RuntimeEvent; - type LimitOrigin = frame_system::EnsureRoot; - type AddOrigin = frame_system::EnsureRoot; - type RemoveOrigin = frame_system::EnsureRoot; - type SwapOrigin = frame_system::EnsureRoot; - type ResetOrigin = frame_system::EnsureRoot; - type MembershipInitialized = (); - type MembershipChanged = (); - type WeightInfo = polymesh_weights::pallet_group::SubstrateWeight; -} - -impl pallet_protocol_fee::Config for Test { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type OnProtocolFeePayment = (); - type WeightInfo = polymesh_weights::pallet_protocol_fee::SubstrateWeight; - type Subsidiser = Test; -} - -impl pallet_identity::Config for Test { - type RuntimeEvent = RuntimeEvent; - type Proposal = RuntimeCall; - type CddServiceProviders = pallet_group::Pallet; - type Balances = Balances; - type CddHandler = Test; - type Public = UintAuthorityId; - type OffChainSignature = sp_runtime::testing::TestSignature; - type ProtocolFee = pallet_protocol_fee::Pallet; - type GCVotingMajorityOrigin = frame_system::EnsureRoot; - type WeightInfo = polymesh_weights::pallet_identity::SubstrateWeight; - type IdentityFn = pallet_identity::Pallet; - type SchedulerOrigin = OriginCaller; - type InitialPOLYX = InitialPOLYX; - type MaxGivenAuths = MaxGivenAuths; -} - -parameter_types! { - pub const InitialPOLYX: Balance = 0; - pub MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * MaximumBlockWeight::get(); - pub const MaxScheduledPerBlock: u32 = 50; - pub const MaxGivenAuths: u32 = 1024; -} - -impl pallet_scheduler::Config for Test { - type RuntimeEvent = RuntimeEvent; - type RuntimeOrigin = RuntimeOrigin; - type PalletsOrigin = OriginCaller; - type RuntimeCall = RuntimeCall; - type MaximumWeight = MaximumSchedulerWeight; - type ScheduleOrigin = EnsureRoot; - type MaxScheduledPerBlock = MaxScheduledPerBlock; - type WeightInfo = (); - type OriginPrivilegeCmp = frame_support::traits::EqualPrivilegeOnly; - type Preimages = Preimage; -} - -parameter_types! { - pub const PreimageMaxSize: u32 = 4096 * 1024; - pub const PreimageBaseDeposit: Balance = polymesh_runtime_common::deposit(2, 64); - pub const PreimageByteDeposit: Balance = polymesh_runtime_common::deposit(0, 1); -} - -impl pallet_preimage::Config for Test { - type WeightInfo = polymesh_weights::pallet_preimage::SubstrateWeight; - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type ManagerOrigin = EnsureRoot; - type BaseDeposit = PreimageBaseDeposit; - type ByteDeposit = PreimageByteDeposit; -} - -impl polymesh_primitives::traits::CddAndFeeDetails for Test { - fn get_valid_payer( - _: &Call, - _: &AccountId, - ) -> Result, sp_runtime::transaction_validity::InvalidTransaction> { - Ok(None) - } - fn clear_context() {} - fn set_payer_context(_: Option) {} - fn get_payer_from_context() -> Option { - None - } -} - -impl SubsidiserTrait for Test { - fn check_subsidy( - _: &AccountId, - _: Balance, - _: Option<&RuntimeCall>, - ) -> Result, InvalidTransaction> { - Ok(None) - } - fn debit_subsidy(_: &AccountId, _: Balance) -> Result, InvalidTransaction> { - Ok(None) - } -} - -impl GroupTrait for Test { - fn get_members() -> Vec { - return Group::active_members(); - } - - fn get_inactive_members() -> Vec> { - vec![] - } - - fn disable_member( - _who: IdentityId, - _expiry: Option, - _at: Option, - ) -> DispatchResult { - unimplemented!(); - } - - fn add_member(_who: IdentityId) -> DispatchResult { - unimplemented!() - } - - fn get_active_members() -> Vec { - Self::get_members() - } - - /// Current set size - fn member_count() -> usize { - Self::get_members().len() - } - - fn is_member(member_id: &IdentityId) -> bool { - Self::get_members().contains(member_id) - } - - /// It returns the current "active members" and any "inactive member" which its - /// expiration time-stamp is greater than `moment`. - fn get_valid_members_at(moment: Moment) -> Vec { - Self::get_active_members() - .into_iter() - .chain( - Self::get_inactive_members() - .into_iter() - .filter(|m| !Self::is_member_expired(&m, moment)) - .map(|m| m.id), - ) - .collect::>() - } - - fn is_member_expired(_member: &InactiveMember, _now: Moment) -> bool { - false - } -} - -impl PortfolioSubTrait for Test { - fn ensure_portfolio_custody(_: PortfolioId, _: IdentityId) -> DispatchResult { - unimplemented!() - } - - fn ensure_portfolio_validity(_: &PortfolioId) -> DispatchResult { - unimplemented!() - } - - fn lock_tokens(_: &PortfolioId, _: &AssetId, _: Balance) -> DispatchResult { - unimplemented!() - } - - fn unlock_tokens(_: &PortfolioId, _: &AssetId, _: Balance) -> DispatchResult { - unimplemented!() - } - - fn ensure_portfolio_custody_and_permission( - _: PortfolioId, - _: IdentityId, - _: Option<&SecondaryKey>, - ) -> DispatchResult { - unimplemented!() - } - - fn lock_nft(_: &PortfolioId, _: &AssetId, _: &NFTId) -> DispatchResult { - unimplemented!() - } - - fn unlock_nft(_: &PortfolioId, _: &AssetId, _: &NFTId) -> DispatchResult { - unimplemented!() - } - - fn skip_portfolio_affirmation(_: &PortfolioId, _: &AssetId) -> bool { - unimplemented!() - } -} - -impl CheckCdd for Test { - fn check_key_cdd(_key: &AccountId) -> bool { - true - } - fn get_key_cdd_did(_key: &AccountId) -> Option { - None - } -} - -impl pallet_permissions::Config for Test { - type Checker = Identity; -} - -parameter_types! { - pub const EpochDuration: u64 = 10; - pub const ExpectedBlockTime: u64 = 1; - pub const MaxAuthorities: u32 = 100; -} - -impl pallet_babe::Config for Test { - type WeightInfo = (); - type EpochDuration = EpochDuration; - type ExpectedBlockTime = ExpectedBlockTime; - type EpochChangeTrigger = pallet_babe::ExternalTrigger; - type DisabledValidators = Session; - - type MaxAuthorities = MaxAuthorities; - type MaxNominators = MaxNominatorRewardedPerValidator; - type KeyOwnerProof = - >::Proof; - type EquivocationReportSystem = pallet_babe::EquivocationReportSystem; -} - pallet_staking_reward_curve::build! { const I_NPOS: PiecewiseLinear<'static> = curve!( min_inflation: 0_025_000, @@ -509,11 +172,6 @@ pallet_staking_reward_curve::build! { parameter_types! { pub const BondingDuration: EraIndex = 3; pub const RewardCurve: &'static PiecewiseLinear<'static> = &I_NPOS; - pub const OffendingValidatorsThreshold: Perbill = Perbill::from_percent(75); - - pub const MaxNominatorRewardedPerValidator: u32 = 64; - pub const MaxVariableInflationTotalIssuance: Balance = 1_000_000_000 * POLY; - pub const FixedYearlyReward: Balance = 200_000_000 * POLY; } parameter_types! { @@ -536,11 +194,23 @@ const THRESHOLDS: [sp_npos_elections::VoteWeight; 9] = parameter_types! { pub static BagThresholds: &'static [sp_npos_elections::VoteWeight] = &THRESHOLDS; - pub static MaxNominations: u32 = 16; pub static HistoryDepth: u32 = 80; + pub static MaxExposurePageSize: u32 = 64; pub static MaxUnlockingChunks: u32 = 32; pub static RewardOnUnbalanceWasCalled: bool = false; pub static MaxWinners: u32 = 100; + pub static ElectionsBounds: ElectionBounds = ElectionBoundsBuilder::default().build(); + pub static AbsoluteMaxNominations: u32 = 16; +} + +type VoterBagsListInstance = pallet_bags_list::Instance1; +impl pallet_bags_list::Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); + // Staking is the source of truth for voter bags list, since they are not kept up to date. + type ScoreProvider = Staking; + type BagThresholds = BagThresholds; + type Score = VoteWeight; } pub struct OnChainSeqPhragmen; @@ -550,12 +220,10 @@ impl onchain::Config for OnChainSeqPhragmen { type DataProvider = Staking; type WeightInfo = (); type MaxWinners = MaxWinners; - type VotersBound = ConstU32<{ u32::MAX }>; - type TargetsBound = ConstU32<{ u32::MAX }>; + type Bounds = ElectionsBounds; } pub struct MockReward {} - impl OnUnbalanced> for MockReward { fn on_unbalanced(_: PositiveImbalanceOf) { RewardOnUnbalanceWasCalled::set(true); @@ -563,78 +231,96 @@ impl OnUnbalanced> for MockReward { } parameter_types! { - pub static LedgerSlashPerEra: - (BalanceOf, BTreeMap>) = - (Zero::zero(), BTreeMap::new()); + pub static LedgerSlashPerEra: + (BalanceOf, BTreeMap>) = + (Zero::zero(), BTreeMap::new()); + pub static SlashObserver: BTreeMap> = BTreeMap::new(); + pub static RestrictedAccounts: Vec = Vec::new(); } pub struct EventListenerMock; -impl sp_staking::OnStakingUpdate for EventListenerMock { +impl OnStakingUpdate for EventListenerMock { fn on_slash( - _pool_account: &AccountId, + pool_account: &AccountId, slashed_bonded: Balance, slashed_chunks: &BTreeMap, + total_slashed: Balance, ) { LedgerSlashPerEra::set((slashed_bonded, slashed_chunks.clone())); + SlashObserver::mutate(|map| { + map.insert( + *pool_account, + map.get(pool_account).unwrap_or(&0) + total_slashed, + ) + }); + } +} + +pub struct MockedRestrictList; +impl Contains for MockedRestrictList { + fn contains(who: &AccountId) -> bool { + RestrictedAccounts::get().contains(who) } } -impl pallet_staking::Config for Test { +// Disabling threshold for `UpToLimitDisablingStrategy` and +// `UpToLimitWithReEnablingDisablingStrategy`` +pub(crate) const DISABLING_LIMIT_FACTOR: usize = 3; + +#[derive_impl(pallet_staking::config_preludes::TestDefaultConfig)] +impl crate::pallet::pallet::Config for Test { + type OldCurrency = Balances; type Currency = Balances; - type CurrencyBalance = Balance; type UnixTime = Timestamp; - type CurrencyToVote = sp_staking::currency_to_vote::U128CurrencyToVote; - type ElectionProvider = onchain::OnChainExecution; - type GenesisElectionProvider = Self::ElectionProvider; - type MaxNominations = MaxNominations; - type HistoryDepth = HistoryDepth; type RewardRemainder = RewardRemainderMock; - type RuntimeEvent = RuntimeEvent; - type Slash = (); type Reward = MockReward; type SessionsPerEra = SessionsPerEra; - type BondingDuration = BondingDuration; type SlashDeferDuration = SlashDeferDuration; - type AdminOrigin = frame_system::EnsureRoot; + type AdminOrigin = EnsureOneOrRoot; type SessionInterface = Self; - type EraPayout = pallet_validators::PolymeshConvertCurve; + type EraPayout = ConvertCurve; type NextNewSession = Session; - type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; - type OffendingValidatorsThreshold = OffendingValidatorsThreshold; - type VoterList = pallet_staking::UseNominatorsAndValidatorsMap; - type TargetList = pallet_staking::UseValidatorsMap; + type MaxExposurePageSize = MaxExposurePageSize; + type ElectionProvider = onchain::OnChainExecution; + type GenesisElectionProvider = Self::ElectionProvider; + // NOTE: consider a macro and use `UseNominatorsAndValidatorsMap` as well. + type VoterList = VoterBagsList; + type TargetList = UseValidatorsMap; + type NominationsQuota = WeightedNominationsQuota<16>; type MaxUnlockingChunks = MaxUnlockingChunks; + type HistoryDepth = HistoryDepth; + type MaxControllersInDeprecationBatch = MaxControllersInDeprecationBatch; type EventListeners = EventListenerMock; - type BenchmarkingConfig = pallet_staking::TestBenchmarkingConfig; - type WeightInfo = polymesh_weights::pallet_staking::SubstrateWeight; - type Permissioned = Validators; + type Filter = MockedRestrictList; } -impl pallet_validators::Config for Test { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = polymesh_weights::pallet_validators::SubstrateWeight; - - type MaxValidatorPerIdentity = polymesh_runtime_common::MaxValidatorPerIdentity; - type MaxVariableInflationTotalIssuance = MaxVariableInflationTotalIssuance; - type FixedYearlyReward = FixedYearlyReward; - type Call = RuntimeCall; - type PalletsOrigin = OriginCaller; - type RewardScheduler = Scheduler; -} - -impl frame_system::offchain::SendTransactionTypes for Test +pub struct WeightedNominationsQuota; +impl NominationsQuota for WeightedNominationsQuota where - Call: From, + u128: From, { - type OverarchingCall = RuntimeCall; - type Extrinsic = Extrinsic; + type MaxNominations = AbsoluteMaxNominations; + + fn curve(balance: Balance) -> u32 { + match balance.into() { + // random curve for testing. + 0..=110 => MAX, + 111 => 0, + 222 => 2, + 333 => MAX + 10, + _ => MAX, + } + } } -pub type Extrinsic = TestXt; - -pub(crate) type StakingCall = pallet_staking::Call; +pub(crate) type StakingCall = crate::Call; pub(crate) type TestCall = ::RuntimeCall; +parameter_types! { + // if true, skips the try-state for the test running. + pub static SkipTryStateCheck: bool = false; +} + pub struct ExtBuilder { nominate: bool, validator_count: u32, @@ -647,14 +333,7 @@ pub struct ExtBuilder { balance_factor: Balance, status: BTreeMap>, stakes: BTreeMap, - stakers: Vec<( - IdentityId, - AccountId, - AccountId, - Balance, - StakerStatus, - )>, - slashing_allowed_for: SlashingSwitch, + stakers: Vec<(AccountId, AccountId, Balance, StakerStatus)>, } impl Default for ExtBuilder { @@ -672,7 +351,6 @@ impl Default for ExtBuilder { status: Default::default(), stakes: Default::default(), stakers: Default::default(), - slashing_allowed_for: SlashingSwitch::Validator, } } } @@ -740,49 +418,59 @@ impl ExtBuilder { } pub fn add_staker( mut self, - identity: IdentityId, stash: AccountId, ctrl: AccountId, stake: Balance, status: StakerStatus, ) -> Self { - self.stakers.push((identity, stash, ctrl, stake, status)); + self.stakers.push((stash, ctrl, stake, status)); self } pub fn balance_factor(mut self, factor: Balance) -> Self { self.balance_factor = factor; self } + pub fn try_state(self, enable: bool) -> Self { + SkipTryStateCheck::set(!enable); + self + } fn build(self) -> sp_io::TestExternalities { sp_tracing::try_init_simple(); let mut storage = frame_system::GenesisConfig::::default() .build_storage() .unwrap(); + let ed = ExistentialDeposit::get(); - pallet_balances::GenesisConfig:: { + let _ = pallet_balances::GenesisConfig:: { balances: vec![ (1, 10 * self.balance_factor), (2, 20 * self.balance_factor), (3, 300 * self.balance_factor), (4, 400 * self.balance_factor), - // controllers + // controllers (still used in some tests. Soon to be deprecated). (10, self.balance_factor), (20, self.balance_factor), (30, self.balance_factor), (40, self.balance_factor), (50, self.balance_factor), // stashes - (11, self.balance_factor * 1000), - (21, self.balance_factor * 2000), - (31, self.balance_factor * 2000), - (41, self.balance_factor * 2000), - (51, self.balance_factor * 2000), + // Note: Previously this pallet used locks and stakers could stake all their + // balance including ED. Now with holds, stakers are required to maintain + // (non-staked) ED in their accounts. Therefore, we drop an additional existential + // deposit to genesis stakers. + (11, self.balance_factor * 1000 + ed), + (21, self.balance_factor * 2000 + ed), + (31, self.balance_factor * 2000 + ed), + (41, self.balance_factor * 2000 + ed), + (51, self.balance_factor * 2000 + ed), + (201, self.balance_factor * 2000 + ed), + (202, self.balance_factor * 2000 + ed), // optional nominator - (100, self.balance_factor * 2000), - (101, self.balance_factor * 2000), + (100, self.balance_factor * 2000 + ed), + (101, self.balance_factor * 2000 + ed), // aux accounts (60, self.balance_factor), - (61, self.balance_factor * 2000), + (61, self.balance_factor * 2000 + ed), (70, self.balance_factor), (71, self.balance_factor * 2000), (80, self.balance_factor), @@ -790,90 +478,9 @@ impl ExtBuilder { // This allows us to have a total_payout different from 0. (999, 1_000_000_000_000), ], - } - .assimilate_storage(&mut storage) - .unwrap(); - - pallet_group::GenesisConfig:: { - active_members_limit: u32::MAX, - active_members: vec![IdentityId::from(1), IdentityId::from(2)], - phantom: Default::default(), - } - .assimilate_storage(&mut storage) - .unwrap(); - - pallet_identity::GenesisConfig:: { - identities: vec![ - // (primary_account_id, service provider did, target did, expiry time of CustomerDueDiligence claim i.e 10 days is ms) - // Provide Identity - GenesisIdentityRecord { - primary_key: Some(1005), - issuers: vec![IdentityId::from(1)], - did: IdentityId::from(1), - secondary_keys: Default::default(), - cdd_claim_expiry: None, - }, - GenesisIdentityRecord { - primary_key: Some(11), - issuers: vec![IdentityId::from(1)], - did: IdentityId::from(11), - secondary_keys: Default::default(), - cdd_claim_expiry: None, - }, - GenesisIdentityRecord { - primary_key: Some(21), - issuers: vec![IdentityId::from(1)], - did: IdentityId::from(21), - secondary_keys: Default::default(), - cdd_claim_expiry: None, - }, - GenesisIdentityRecord { - primary_key: Some(31), - issuers: vec![IdentityId::from(1)], - did: IdentityId::from(31), - secondary_keys: Default::default(), - cdd_claim_expiry: None, - }, - GenesisIdentityRecord { - primary_key: Some(41), - issuers: vec![IdentityId::from(1)], - did: IdentityId::from(41), - secondary_keys: Default::default(), - cdd_claim_expiry: None, - }, - GenesisIdentityRecord { - primary_key: Some(101), - issuers: vec![IdentityId::from(1)], - did: IdentityId::from(101), - secondary_keys: Default::default(), - cdd_claim_expiry: None, - }, - GenesisIdentityRecord { - primary_key: Some(61), - issuers: vec![IdentityId::from(1)], - did: IdentityId::from(61), - secondary_keys: Default::default(), - cdd_claim_expiry: None, - }, - GenesisIdentityRecord { - primary_key: Some(71), - issuers: vec![IdentityId::from(1)], - did: IdentityId::from(71), - secondary_keys: Default::default(), - cdd_claim_expiry: None, - }, - GenesisIdentityRecord { - primary_key: Some(81), - issuers: vec![IdentityId::from(1)], - did: IdentityId::from(81), - secondary_keys: Default::default(), - cdd_claim_expiry: None, - }, - ], ..Default::default() } - .assimilate_storage(&mut storage) - .unwrap(); + .assimilate_storage(&mut storage); let mut stakers = vec![]; if self.has_stakers { @@ -881,61 +488,71 @@ impl ExtBuilder { // (stash, ctrl, stake, status) // these two will be elected in the default test where we elect 2. ( - IdentityId::from(11), 11, - 10, + 11, self.balance_factor * 1000, StakerStatus::::Validator, ), ( - IdentityId::from(21), 21, - 20, + 21, self.balance_factor * 1000, StakerStatus::::Validator, ), // a loser validator ( - IdentityId::from(31), 31, - 30, + 31, self.balance_factor * 500, StakerStatus::::Validator, ), // an idle validator ( - IdentityId::from(41), 41, - 40, + 41, self.balance_factor * 1000, StakerStatus::::Idle, ), - ]; - // optionally add a nominator + ( + 51, + 51, + self.balance_factor * 1000, + StakerStatus::::Idle, + ), + ( + 201, + 201, + self.balance_factor * 1000, + StakerStatus::::Idle, + ), + ( + 202, + 202, + self.balance_factor * 1000, + StakerStatus::::Idle, + ), + ]; // optionally add a nominator if self.nominate { stakers.push(( - IdentityId::from(101), 101, - 100, + 101, self.balance_factor * 500, StakerStatus::::Nominator(vec![11, 21]), )) } - // replace any of the status if needed. self.status.into_iter().for_each(|(stash, status)| { - let (_, _, _, _, ref mut prev_status) = stakers + let (_, _, _, ref mut prev_status) = stakers .iter_mut() - .find(|s| s.1 == stash) + .find(|s| s.0 == stash) .expect("set_status staker should exist; qed"); *prev_status = status; }); - // replaced any of the stakes if needed. self.stakes.into_iter().for_each(|(stash, stake)| { - let (_, _, _, ref mut prev_stake, _) = stakers + let (_, _, ref mut prev_stake, _) = stakers .iter_mut() - .find(|s| s.1 == stash) + .find(|s| s.0 == stash) .expect("set_stake staker should exits; qed."); *prev_stake = stake; }); @@ -943,35 +560,8 @@ impl ExtBuilder { stakers.extend(self.stakers) } - pallet_validators::GenesisConfig:: { - validators: stakers - .iter() - .filter_map(|(did, _stash, _controller, _balance, status)| { - if let StakerStatus::Validator = status { - Some(*did) - } else { - None - } - }) - .collect::>(), - slashing_allowed_for: self.slashing_allowed_for, - ..Default::default() - } - .assimilate_storage(&mut storage) - .unwrap(); - - pallet_staking::GenesisConfig:: { - stakers: stakers - .iter() - .map(|(_, stash, controller, balance, status)| { - ( - stash.clone(), - controller.clone(), - balance.clone(), - status.clone(), - ) - }) - .collect::>(), + let _ = pallet_staking::GenesisConfig:: { + stakers: stakers.clone(), validator_count: self.validator_count, minimum_validator_count: self.minimum_validator_count, invulnerables: self.invulnerables, @@ -980,15 +570,14 @@ impl ExtBuilder { min_validator_bond: self.min_validator_bond, ..Default::default() } - .assimilate_storage(&mut storage) - .unwrap(); + .assimilate_storage(&mut storage); let _ = pallet_session::GenesisConfig:: { keys: if self.has_stakers { // set the keys for the first session. stakers .into_iter() - .map(|(_, id, ..)| (id, id, SessionKeys { other: id.into() })) + .map(|(id, ..)| (id, id, SessionKeys { other: id.into() })) .collect() } else { // set some dummy validators in genesis. @@ -996,19 +585,17 @@ impl ExtBuilder { .map(|id| (id, id, SessionKeys { other: id.into() })) .collect() }, + ..Default::default() } .assimilate_storage(&mut storage); let mut ext = sp_io::TestExternalities::from(storage); if self.initialize_first_session { - // We consider all test to start after timestamp is initialized This must be ensured by - // having `timestamp::on_initialize` called before `staking::on_initialize`. Also, if - // session length is 1, then it is already triggered. ext.execute_with(|| { - System::set_block_number(1); - Session::on_initialize(1); - >::on_initialize(1); + run_to_block(1); + + // Force reset the timestamp to the initial timestamp for easy testing. Timestamp::set_timestamp(INIT_TIMESTAMP); }); } @@ -1020,117 +607,32 @@ impl ExtBuilder { let mut ext = self.build(); ext.execute_with(test); ext.execute_with(|| { - Staking::do_try_state(System::block_number()).unwrap(); + if !SkipTryStateCheck::get() { + Staking::do_try_state(System::block_number()).unwrap(); + } }); } } -pub type Group = pallet_group::Pallet; - -pub fn provide_did_to_user(account: AccountId) -> bool { - if pallet_identity::KeyRecords::::contains_key(&account) { - return false; - } - - let cdd_account_id = 1005; - let cdd = RuntimeOrigin::signed(cdd_account_id); - assert!( - pallet_identity::KeyRecords::::contains_key(&cdd_account_id), - "CDD provider account not mapped to identity" - ); - - let cdd_did = pallet_identity::Pallet::::get_identity(&cdd_account_id) - .expect("CDD provider missing identity"); - assert!( - pallet_identity::DidRecords::::contains_key(&cdd_did), - "CDD provider identity has no DID record" - ); - - let cdd_did_record = pallet_identity::DidRecords::::get(&cdd_did).unwrap_or_default(); - assert!( - cdd_did_record.primary_key == Some(cdd_account_id), - "CDD identity primary key mismatch" - ); - assert!( - pallet_identity::Pallet::::cdd_register_did(cdd.clone(), account, vec![]).is_ok(), - "Error in registering the DID" - ); - - let did = pallet_identity::Pallet::::get_identity(&account) - .expect("DID not find in the storage"); - assert!( - pallet_identity::Pallet::::add_claim( - cdd.clone(), - did, - Claim::CustomerDueDiligence(Default::default()), - None - ) - .is_ok(), - "Error CDD Claim cannot be added to DID" - ); - true -} - -pub fn add_secondary_key(stash_key: AccountId, to_secondary_key: AccountId) { - if !get_identity(to_secondary_key) { - pallet_identity::Pallet::::get_identity(&stash_key).unwrap(); - assert!( - pallet_identity::Pallet::::add_authorization( - RuntimeOrigin::signed(stash_key), - Signatory::Account(to_secondary_key), - AuthorizationData::JoinIdentity(Permissions::default()), - None - ) - .is_ok(), - "Error in providing the authorization" - ); - - let auth_id = get_last_auth_id(&Signatory::Account(to_secondary_key)); - assert_ok!(pallet_identity::Pallet::::join_identity_as_key( - RuntimeOrigin::signed(to_secondary_key), - auth_id - )); - } -} - pub(crate) fn active_era() -> EraIndex { - Staking::active_era().unwrap().index + pallet_staking::ActiveEra::::get().unwrap().index } pub(crate) fn current_era() -> EraIndex { - Staking::current_era().unwrap() + pallet_staking::CurrentEra::::get().unwrap() } pub(crate) fn bond(who: AccountId, val: Balance) { - let _ = Balances::make_free_balance_be(&who, val); - - provide_did_to_user(who); - - if Staking::bonded(&who).is_none() { - assert_ok!(Staking::bond( - RuntimeOrigin::signed(who), - val, - RewardDestination::Controller, - )); - } + let _ = asset::set_stakeable_balance::(&who, val); + assert_ok!(Staking::bond( + RuntimeOrigin::signed(who), + val, + RewardDestination::Stash + )); } pub(crate) fn bond_validator(who: AccountId, val: Balance) { - bond_validator_with_intended_count(who, val, None) -} - -pub fn bond_validator_with_intended_count(who: AccountId, val: Balance, i_count: Option) { bond(who, val); - - let stash_id = Identity::get_identity(&who).unwrap(); - if Validators::permissioned_identity(stash_id).is_none() { - assert_ok!(Validators::add_permissioned_validator( - frame_system::RawOrigin::Root.into(), - stash_id, - i_count - )); - } - assert_ok!(Staking::validate( RuntimeOrigin::signed(who), ValidatorPrefs::default() @@ -1147,39 +649,50 @@ pub(crate) fn bond_nominator(who: AccountId, val: Balance, target: Vec, +) { + // Bond who virtually. + assert_ok!(::virtual_bond( + &who, val, &payee + )); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(who), target)); +} + /// Progress to the given block, triggering session and era changes as we progress. /// /// This will finalize the previous block, initialize up to the given block, essentially simulating /// a block import/propose process where we first initialize the block, then execute some stuff (not /// in the function), and then finalize the block. pub(crate) fn run_to_block(n: BlockNumber) { - Staking::on_finalize(System::block_number()); - for b in (System::block_number() + 1)..=n { - System::set_block_number(b); - Session::on_initialize(b); - >::on_initialize(b); - Timestamp::set_timestamp(System::block_number() * BLOCK_TIME + INIT_TIMESTAMP); - if b != n { - Staking::on_finalize(System::block_number()); - } - } + System::run_to_block_with::( + n, + frame_system::RunToBlockHooks::default().after_initialize(|bn| { + Timestamp::set_timestamp(bn * BLOCK_TIME + INIT_TIMESTAMP); + }), + ); } /// Progresses from the current block number (whatever that may be) to the `P * session_index + 1`. -pub(crate) fn start_session(session_index: SessionIndex) { +pub(crate) fn start_session(end_session_idx: SessionIndex) { + let period = Period::get(); let end: u64 = if Offset::get().is_zero() { - (session_index as u64) * Period::get() + (end_session_idx as u64) * period } else { - Offset::get() + (session_index.saturating_sub(1) as u64) * Period::get() + Offset::get() + (end_session_idx.saturating_sub(1) as u64) * period }; + run_to_block(end); + + let curr_session_idx = Session::current_index(); + // session must have progressed properly. assert_eq!( - Session::current_index(), - session_index, - "current session index = {}, expected = {}", - Session::current_index(), - session_index, + curr_session_idx, end_session_idx, + "current session index = {curr_session_idx}, expected = {end_session_idx}", ); } @@ -1199,31 +712,22 @@ pub(crate) fn start_active_era(era_index: EraIndex) { } pub(crate) fn current_total_payout_for_duration(duration: u64) -> Balance { - use pallet_validators::Config; - let reward = pallet_validators::inflation::compute_total_payout( - &I_NPOS, - Staking::eras_total_stake(active_era()), - Balances::total_issuance(), + let (payout, _rest) = ::EraPayout::era_payout( + pallet_staking::ErasTotalStake::::get(active_era()), + pallet_balances::TotalIssuance::::get(), duration, - ::MaxVariableInflationTotalIssuance::get(), - ::FixedYearlyReward::get(), - ) - .0; - assert!(reward > 0); - reward + ); + assert!(payout > 0); + payout } pub(crate) fn maximum_payout_for_duration(duration: u64) -> Balance { - use pallet_validators::Config; - pallet_validators::inflation::compute_total_payout( - &I_NPOS, - 0, - Balances::total_issuance(), + let (payout, rest) = ::EraPayout::era_payout( + pallet_staking::ErasTotalStake::::get(active_era()), + pallet_balances::TotalIssuance::::get(), duration, - ::MaxVariableInflationTotalIssuance::get(), - ::FixedYearlyReward::get(), - ) - .1 + ); + payout + rest } /// Time it takes to finish a session. @@ -1269,24 +773,26 @@ pub(crate) fn on_offence_in_era( >], slash_fraction: &[Perbill], era: EraIndex, - disable_strategy: DisableStrategy, ) { - let bonded_eras = pallet_staking::BondedEras::::get(); + let bonded_eras = crate::BondedEras::::get(); for &(bonded_era, start_session) in bonded_eras.iter() { if bonded_era == era { - let _ = Staking::on_offence(offenders, slash_fraction, start_session, disable_strategy); + let _ = >::on_offence( + offenders, + slash_fraction, + start_session, + ); return; } else if bonded_era > era { break; } } - if Staking::active_era().unwrap().index == era { - let _ = Staking::on_offence( + if pallet_staking::ActiveEra::::get().unwrap().index == era { + let _ = >::on_offence( offenders, slash_fraction, - Staking::eras_start_session_index(era).unwrap(), - disable_strategy, + pallet_staking::ErasStartSessionIndex::::get(era).unwrap(), ); } else { panic!("cannot slash in era {}", era); @@ -1300,18 +806,22 @@ pub(crate) fn on_offence_now( >], slash_fraction: &[Perbill], ) { - let now = Staking::active_era().unwrap().index; - on_offence_in_era(offenders, slash_fraction, now, DisableStrategy::WhenSlashed) + let now = pallet_staking::ActiveEra::::get().unwrap().index; + on_offence_in_era(offenders, slash_fraction, now) +} + +pub(crate) fn offence_from( + offender: AccountId, + reporter: Option>, +) -> OffenceDetails> { + OffenceDetails { + offender: (offender, ()), + reporters: reporter.unwrap_or_default(), + } } pub(crate) fn add_slash(who: &AccountId) { - on_offence_now( - &[OffenceDetails { - offender: (*who, Staking::eras_stakers(active_era(), *who)), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - ); + on_offence_now(&[offence_from(*who, None)], &[Perbill::from_percent(10)]); } /// Make all validator and nominator request their payment @@ -1325,14 +835,130 @@ pub(crate) fn make_all_reward_payment(era: EraIndex) { // reward validators for validator_controller in validators_with_reward.iter().filter_map(Staking::bonded) { let ledger = >::get(&validator_controller).unwrap(); - assert_ok!(Staking::payout_stakers( - RuntimeOrigin::signed(1337), - ledger.stash, - era - )); + for page in 0..EraInfo::::get_page_count(era, &ledger.stash) { + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + ledger.stash, + era, + page + )); + } } } +pub(crate) fn bond_controller_stash(controller: AccountId, stash: AccountId) -> Result<(), String> { + >::get(&stash).map_or(Ok(()), |_| Err("stash already bonded"))?; + >::get(&controller).map_or(Ok(()), |_| Err("controller already bonded"))?; + + >::insert(stash, controller); + >::insert(controller, StakingLedger::::default_from(stash)); + + Ok(()) +} + +// simulates `set_controller` without corrupted ledger checks for testing purposes. +pub(crate) fn set_controller_no_checks(stash: &AccountId) { + let controller = Bonded::::get(stash).expect("testing stash should be bonded"); + let ledger = Ledger::::get(&controller).expect("testing ledger should exist"); + + Ledger::::remove(&controller); + Ledger::::insert(stash, ledger); + Bonded::::insert(stash, stash); +} + +// simulates `bond_extra` without corrupted ledger checks for testing purposes. +pub(crate) fn bond_extra_no_checks(stash: &AccountId, amount: Balance) { + let controller = Bonded::::get(stash).expect("bond must exist to bond_extra"); + let mut ledger = Ledger::::get(&controller).expect("ledger must exist to bond_extra"); + + let new_total = ledger.total + amount; + let _ = asset::update_stake::(stash, new_total); + ledger.total = new_total; + ledger.active = new_total; + Ledger::::insert(controller, ledger); +} + +pub(crate) fn setup_double_bonded_ledgers() { + let init_ledgers = Ledger::::iter().count(); + + let _ = asset::set_stakeable_balance::(&333, 2000); + let _ = asset::set_stakeable_balance::(&444, 2000); + let _ = asset::set_stakeable_balance::(&555, 2000); + let _ = asset::set_stakeable_balance::(&777, 2000); + + assert_ok!(Staking::bond( + RuntimeOrigin::signed(333), + 10, + RewardDestination::Staked + )); + assert_ok!(Staking::bond( + RuntimeOrigin::signed(444), + 20, + RewardDestination::Staked + )); + assert_ok!(Staking::bond( + RuntimeOrigin::signed(555), + 20, + RewardDestination::Staked + )); + // not relevant to the test case, but ensures try-runtime checks pass. + [333, 444, 555] + .iter() + .for_each(|s| Payee::::insert(s, RewardDestination::Staked)); + + // we want to test the case where a controller can also be a stash of another ledger. + // for that, we change the controller/stash bonding so that: + // * 444 becomes controller of 333. + // * 555 becomes controller of 444. + // * 777 becomes controller of 555. + let ledger_333 = Ledger::::get(333).unwrap(); + let ledger_444 = Ledger::::get(444).unwrap(); + let ledger_555 = Ledger::::get(555).unwrap(); + + // 777 becomes controller of 555. + Bonded::::mutate(555, |controller| *controller = Some(777)); + Ledger::::insert(777, ledger_555); + + // 555 becomes controller of 444. + Bonded::::mutate(444, |controller| *controller = Some(555)); + Ledger::::insert(555, ledger_444); + + // 444 becomes controller of 333. + Bonded::::mutate(333, |controller| *controller = Some(444)); + Ledger::::insert(444, ledger_333); + + // 333 is not controller anymore. + Ledger::::remove(333); + + // checks. now we have: + // * +3 ledgers + assert_eq!(Ledger::::iter().count(), 3 + init_ledgers); + + // * stash 333 has controller 444. + assert_eq!(Bonded::::get(333), Some(444)); + assert_eq!( + StakingLedger::::paired_account(StakingAccount::Stash(333)), + Some(444) + ); + assert_eq!(Ledger::::get(444).unwrap().stash, 333); + + // * stash 444 has controller 555. + assert_eq!(Bonded::::get(444), Some(555)); + assert_eq!( + StakingLedger::::paired_account(StakingAccount::Stash(444)), + Some(555) + ); + assert_eq!(Ledger::::get(555).unwrap().stash, 444); + + // * stash 555 has controller 777. + assert_eq!(Bonded::::get(555), Some(777)); + assert_eq!( + StakingLedger::::paired_account(StakingAccount::Stash(555)), + Some(777) + ); + assert_eq!(Ledger::::get(777).unwrap().stash, 555); +} + #[macro_export] macro_rules! assert_session_era { ($session:expr, $era:expr) => { @@ -1344,16 +970,16 @@ macro_rules! assert_session_era { $session, ); assert_eq!( - Staking::current_era().unwrap(), + CurrentEra::::get().unwrap(), $era, "wrong current era {} != {}", - Staking::current_era().unwrap(), + CurrentEra::::get().unwrap(), $era, ); }; } -pub(crate) fn staking_events() -> Vec> { +pub(crate) fn staking_events() -> Vec> { System::events() .into_iter() .map(|r| r.event) @@ -1367,6 +993,20 @@ pub(crate) fn staking_events() -> Vec> { .collect() } +pub(crate) fn session_events() -> Vec> { + System::events() + .into_iter() + .map(|r| r.event) + .filter_map(|e| { + if let RuntimeEvent::Session(inner) = e { + Some(inner) + } else { + None + } + }) + .collect() +} + parameter_types! { static StakingEventsIndex: usize = 0; } @@ -1376,7 +1016,7 @@ ord_parameter_types! { type EnsureOneOrRoot = EitherOfDiverse, EnsureSignedBy>; -pub(crate) fn staking_events_since_last_call() -> Vec> { +pub(crate) fn staking_events_since_last_call() -> Vec> { let all: Vec<_> = System::events() .into_iter() .filter_map(|r| { @@ -1393,122 +1033,18 @@ pub(crate) fn staking_events_since_last_call() -> Vec (Balance, Balance) { - (Balances::free_balance(who), Balances::reserved_balance(who)) -} - -pub fn get_identity(key: AccountId) -> bool { - pallet_identity::KeyRecords::::contains_key(&key) -} - -pub fn bond_nominator_cdd(who: AccountId, val: Balance, target: Vec) { - provide_did_to_user(who); - bond_nominator(who, val, target); -} - -// `iter_prefix_values` has no guarantee that it will iterate in a sequential -// order. However, we need the latest `auth_id`. Which is why we search for the claim -// with the highest `auth_id`. -pub fn get_last_auth(signatory: &Signatory) -> Authorization { - pallet_identity::Authorizations::::iter_prefix_values(signatory) - .into_iter() - .max_by_key(|x| x.auth_id) - .expect("there are no authorizations") -} - -pub fn get_last_auth_id(signatory: &Signatory) -> u64 { - get_last_auth(signatory).auth_id -} - -// Polymesh change -// ----------------------------------------------------------------- - -pub type Origin = ::RuntimeOrigin; - -fn get_primary_key(target: IdentityId) -> AccountId { - Identity::get_primary_key(target).unwrap_or_default() -} - -pub fn make_account(account_id: AccountId) -> (Origin, IdentityId) { - make_account_with_balance(account_id, 1_000_000, None) -} - -/// It creates an Account and registers its DID. -pub fn make_account_with_balance( - account_id: AccountId, - balance: Balance, - expiry: Option, -) -> (Origin, IdentityId) { - Balances::make_free_balance_be(&account_id, balance); - - let signed_account = Origin::signed(account_id.clone()); - - let cdd_providers = Group::get_members(); - if let Some(cdd_provider_did) = cdd_providers.into_iter().nth(0) { - let cdd_provider_acc = get_primary_key(cdd_provider_did); - Identity::cdd_register_did(Origin::signed(cdd_provider_acc), account_id, vec![]).unwrap(); - let account_did = Identity::get_identity(&account_id).unwrap(); - Identity::add_claim( - Origin::signed(cdd_provider_acc), - account_did, - Claim::CustomerDueDiligence(Default::default()), - expiry, - ) - .unwrap(); - return (signed_account, account_did); - } - - Identity::testing_cdd_register_did(account_id.clone(), vec![]).unwrap(); - let account_did = Identity::get_identity(&account_id).unwrap(); - - (signed_account, account_did) -} - -pub fn add_trusted_cdd_provider(identity: IdentityId) { - assert_ok!(Group::add_member( - Origin::from(frame_system::RawOrigin::Root), - identity - )); + ( + asset::stakeable_balance::(who), + Balances::reserved_balance(who), + ) } -pub fn run_to_block_scheduler(n: u64) { - while System::block_number() < n { - Staking::on_finalize(System::block_number()); - Scheduler::on_finalize(System::block_number()); - System::set_block_number(System::block_number() + 1); - Scheduler::on_initialize(System::block_number()); - Session::on_initialize(System::block_number()); - Staking::on_initialize(System::block_number()); - Staking::on_finalize(System::block_number()); +pub(crate) fn restrict(who: &AccountId) { + if !RestrictedAccounts::get().contains(who) { + RestrictedAccounts::mutate(|l| l.push(*who)); } } -pub fn bond_nominator_with_expiry(acc: u64, val: u128, claim_expiry: u64, target: Vec) { - // a = stash - let stash = acc; - let _ = Balances::make_free_balance_be(&(stash), val); - assert_ok!(Staking::bond( - Origin::signed(stash), - val, - RewardDestination::Controller - )); - create_did_and_add_claim_with_expiry(stash, claim_expiry); - assert_ok!(Staking::nominate(Origin::signed(stash), target)); +pub(crate) fn remove_from_restrict_list(who: &AccountId) { + RestrictedAccounts::mutate(|l| l.retain(|x| x != who)); } - -pub fn create_did_and_add_claim_with_expiry(stash: AccountId, expiry: u64) { - Balances::make_free_balance_be(&1005, 1_000_000); - assert_ok!(Identity::cdd_register_did( - Origin::signed(1005), - stash, - vec![] - )); - let did = Identity::get_identity(&stash).unwrap(); - assert_ok!(Identity::add_claim( - Origin::signed(1005), - did, - Claim::CustomerDueDiligence(Default::default()), - Some(expiry.into()) - )); -} - -// ----------------------------------------------------------------- diff --git a/pallets/runtime/tests/src/staking/mod.rs b/pallets/runtime/tests/src/staking/mod.rs index e6a8918797..242d8a6886 100644 --- a/pallets/runtime/tests/src/staking/mod.rs +++ b/pallets/runtime/tests/src/staking/mod.rs @@ -19,48 +19,23 @@ mod mock; -use frame_election_provider_support::{ElectionProvider, SortedListProvider}; -use frame_support::{ - assert_noop, assert_ok, assert_storage_noop, bounded_vec, - dispatch::{extract_actual_weight, GetDispatchInfo, WithPostDispatchInfo}, - pallet_prelude::*, - traits::{Currency, Get, ReservableCurrency}, -}; -use mock::*; - -use pallet_balances::{Error as BalancesError, Locks}; -use pallet_pips::{ProposalVotes, Proposals}; -use polymesh_primitives::IdentityId; -use sp_runtime::{ - assert_eq_error_rate, - traits::{BadOrigin, Dispatchable}, - Perbill, Percent, Perquintill, Rounding, -}; -use sp_staking::{ - offence::{DisableStrategy, OffenceDetails, OnOffenceHandler}, - EraIndex, SessionIndex, -}; -use sp_std::prelude::*; +use frame_election_provider_support::bounds::{DataProviderBounds, ElectionBoundsBuilder}; +use frame_election_provider_support::{ElectionProvider, SortedListProvider, Support}; +use frame_support::dispatch::{extract_actual_weight, GetDispatchInfo, WithPostDispatchInfo}; +use frame_support::pallet_prelude::*; +use frame_support::traits::{fungible::Inspect, Currency, Get, InspectLockableCurrency}; +use frame_support::traits::{LockableCurrency, ReservableCurrency, WithdrawReasons}; +use frame_support::{assert_noop, assert_ok, assert_storage_noop, hypothetically}; +use pallet_balances::Error as BalancesError; +use pallet_session::{disabling::UpToLimitWithReEnablingDisablingStrategy, Event as SessionEvent}; +use sp_runtime::traits::{BadOrigin, Dispatchable}; +use sp_runtime::{assert_eq_error_rate, bounded_vec, Perbill, Percent}; +use sp_runtime::{Perquintill, Rounding, TokenError}; +use sp_staking::offence::{OffenceDetails, OnOffenceHandler}; +use sp_staking::SessionIndex; use substrate_test_utils::assert_eq_uvec; -use std::collections::BTreeMap; - -use sp_runtime::traits::Zero; - -use pallet_staking::{ConfigOp, Event, Validators, *}; -use pallet_validators::Error as ValidatorsError; - -type PalletValidators = pallet_validators::Pallet; - -macro_rules! assert_add_permissioned_validator { - ($acc_id:expr) => { - assert_ok!(PalletValidators::add_permissioned_validator( - RuntimeOrigin::root(), - pallet_identity::Pallet::::get_identity($acc_id).unwrap(), - None - )); - }; -} +use mock::*; #[test] fn set_staking_configs_works() { @@ -73,6 +48,7 @@ fn set_staking_configs_works() { ConfigOp::Set(10), ConfigOp::Set(20), ConfigOp::Set(Percent::from_percent(75)), + ConfigOp::Set(Zero::zero()), ConfigOp::Set(Zero::zero()) )); assert_eq!(MinNominatorBond::::get(), 1_500); @@ -84,6 +60,10 @@ fn set_staking_configs_works() { Some(Percent::from_percent(75)) ); assert_eq!(MinCommission::::get(), Perbill::from_percent(0)); + assert_eq!( + MaxStakedRewards::::get(), + Some(Percent::from_percent(0)) + ); // noop does nothing assert_storage_noop!(assert_ok!(Staking::set_staking_configs( @@ -93,6 +73,7 @@ fn set_staking_configs_works() { ConfigOp::Noop, ConfigOp::Noop, ConfigOp::Noop, + ConfigOp::Noop, ConfigOp::Noop ))); @@ -104,6 +85,7 @@ fn set_staking_configs_works() { ConfigOp::Remove, ConfigOp::Remove, ConfigOp::Remove, + ConfigOp::Remove, ConfigOp::Remove )); assert_eq!(MinNominatorBond::::get(), 0); @@ -112,6 +94,7 @@ fn set_staking_configs_works() { assert_eq!(MaxValidatorsCount::::get(), None); assert_eq!(ChillThreshold::::get(), None); assert_eq!(MinCommission::::get(), Perbill::from_percent(0)); + assert_eq!(MaxStakedRewards::::get(), None); }); } @@ -124,8 +107,8 @@ fn force_unstake_works() { add_slash(&11); // Cant transfer assert_noop!( - Balances::transfer(RuntimeOrigin::signed(11), 1, 10), - sp_runtime::TokenError::Frozen + Balances::transfer_allow_death(RuntimeOrigin::signed(11), 1, 10), + TokenError::FundsUnavailable, ); // Force unstake requires root. assert_noop!( @@ -142,7 +125,11 @@ fn force_unstake_works() { // No longer bonded. assert_eq!(Staking::bonded(&11), None); // Transfer works. - assert_ok!(Balances::transfer(RuntimeOrigin::signed(11), 1, 10)); + assert_ok!(Balances::transfer_allow_death( + RuntimeOrigin::signed(11), + 1, + 10 + )); }); } @@ -180,28 +167,28 @@ fn basic_setup_works() { // Account 11 controls its own stash, which is 100 * balance_factor units assert_eq!( - Staking::ledger(&11).unwrap(), - StakingLedger { + Ledger::get(&11).unwrap(), + StakingLedgerInspect:: { stash: 11, total: 1000, active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], + legacy_claimed_rewards: bounded_vec![], } ); // Account 21 controls its own stash, which is 200 * balance_factor units assert_eq!( - Staking::ledger(&21), - Some(StakingLedger { + Ledger::get(&21).unwrap(), + StakingLedgerInspect:: { stash: 21, total: 1000, active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Account 1 does not control any stash - assert_eq!(Staking::ledger(&1), None); + assert!(Staking::ledger(1.into()).is_err()); // ValidatorPrefs are default assert_eq_uvec!( @@ -214,19 +201,19 @@ fn basic_setup_works() { ); assert_eq!( - Staking::ledger(101), - Some(StakingLedger { + Staking::ledger(101.into()).unwrap(), + StakingLedgerInspect { stash: 101, total: 500, active: 500, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); - assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); + assert_eq!(Nominators::::get(101).unwrap().targets, vec![11, 21]); assert_eq!( - Staking::eras_stakers(active_era(), 11), + Staking::eras_stakers(active_era(), &11), Exposure { total: 1125, own: 1000, @@ -237,7 +224,7 @@ fn basic_setup_works() { }, ); assert_eq!( - Staking::eras_stakers(active_era(), 21), + Staking::eras_stakers(active_era(), &21), Exposure { total: 1375, own: 1000, @@ -249,20 +236,19 @@ fn basic_setup_works() { ); // initial total stake = 1125 + 1375 - assert_eq!(Staking::eras_total_stake(active_era()), 2500); + assert_eq!(ErasTotalStake::::get(active_era()), 2500); // The number of validators required. - assert_eq!(Staking::validator_count(), 2); + assert_eq!(ValidatorCount::::get(), 2); // Initial Era and session assert_eq!(active_era(), 0); // Account 10 has `balance_factor` free balance - assert_eq!(Balances::free_balance(10), 1); - assert_eq!(Balances::free_balance(10), 1); + assert_eq!(Balances::balance(&10), 1); // New era is not being forced - assert_eq!(Staking::force_era(), Forcing::NotForcing); + assert_eq!(ForceEra::::get(), Forcing::NotForcing); }); } @@ -277,9 +263,6 @@ fn change_controller_works() { ) .unwrap(); - provide_did_to_user(stash); - assert_add_permissioned_validator!(&stash); - // ensure `stash` and `controller` are bonded as stash controller pair. assert_eq!(Staking::bonded(&stash), Some(controller)); @@ -291,6 +274,20 @@ fn change_controller_works() { assert_eq!(Staking::bonded(&stash), Some(stash)); mock::start_active_era(1); + // fetch the ledger from storage and check if the controller is correct. + let ledger = Staking::ledger(StakingAccount::Stash(stash)).unwrap(); + assert_eq!(ledger.controller(), Some(stash)); + + // same if we fetch the ledger by controller. + let ledger = Staking::ledger(StakingAccount::Controller(stash)).unwrap(); + assert_eq!(ledger.controller, Some(stash)); + assert_eq!(ledger.controller(), Some(stash)); + + // the raw storage ledger's controller is always `None`. however, we can still fetch the + // correct controller with `ledger.controller()`. + let raw_ledger = >::get(&stash).unwrap(); + assert_eq!(raw_ledger.controller, None); + // `controller` is no longer in control. `stash` is now controller. assert_noop!( Staking::validate(RuntimeOrigin::signed(controller), ValidatorPrefs::default()), @@ -306,7 +303,7 @@ fn change_controller_works() { #[test] fn change_controller_already_paired_once_stash() { ExtBuilder::default().build_and_execute(|| { - // 10 and 11 are bonded as controller and stash respectively. + // 11 and 11 are bonded as controller and stash respectively. assert_eq!(Staking::bonded(&11), Some(11)); // 11 is initially a validator. @@ -338,14 +335,14 @@ fn rewards_should_work() { .nominate(true) .session_per_era(3) .build_and_execute(|| { - let init_balance_11 = Balances::total_balance(&11); - let init_balance_21 = Balances::total_balance(&21); - let init_balance_101 = Balances::total_balance(&101); + let init_balance_11 = asset::total_balance::(&11); + let init_balance_21 = asset::total_balance::(&21); + let init_balance_101 = asset::total_balance::(&101); // Set payees - Payee::::insert(11, RewardDestination::Controller); - Payee::::insert(21, RewardDestination::Controller); - Payee::::insert(101, RewardDestination::Controller); + Payee::::insert(11, RewardDestination::Account(11)); + Payee::::insert(21, RewardDestination::Account(21)); + Payee::::insert(101, RewardDestination::Account(101)); Pallet::::reward_by_ids(vec![(11, 50)]); Pallet::::reward_by_ids(vec![(11, 50)]); @@ -359,11 +356,11 @@ fn rewards_should_work() { start_session(1); assert_eq_uvec!(Session::validators(), vec![11, 21]); - assert_eq!(Balances::total_balance(&11), init_balance_11); - assert_eq!(Balances::total_balance(&21), init_balance_21); - assert_eq!(Balances::total_balance(&101), init_balance_101); + assert_eq!(asset::total_balance::(&11), init_balance_11); + assert_eq!(asset::total_balance::(&21), init_balance_21); + assert_eq!(asset::total_balance::(&101), init_balance_101); assert_eq!( - Staking::eras_reward_points(active_era()), + ErasRewardPoints::::get(active_era()), EraRewardPoints { total: 50 * 3, individual: vec![(11, 100), (21, 50)].into_iter().collect(), @@ -390,20 +387,28 @@ fn rewards_should_work() { remainder: maximum_payout - total_payout_0 } ); + + // make note of total issuance before rewards. + let total_issuance_0 = asset::total_issuance::(); + mock::make_all_reward_payment(0); + // total issuance should have increased + let total_issuance_1 = asset::total_issuance::(); + assert_eq!(total_issuance_1, total_issuance_0 + total_payout_0); + assert_eq_error_rate!( - Balances::total_balance(&11), + asset::total_balance::(&11), init_balance_11 + part_for_11 * total_payout_0 * 2 / 3, 2, ); assert_eq_error_rate!( - Balances::total_balance(&21), + asset::total_balance::(&21), init_balance_21 + part_for_21 * total_payout_0 * 1 / 3, 2, ); assert_eq_error_rate!( - Balances::total_balance(&101), + asset::total_balance::(&101), init_balance_101 + part_for_101_from_11 * total_payout_0 * 2 / 3 + part_for_101_from_21 * total_payout_0 * 1 / 3, @@ -431,18 +436,22 @@ fn rewards_should_work() { ); mock::make_all_reward_payment(1); + assert_eq!( + asset::total_issuance::(), + total_issuance_1 + total_payout_1 + ); assert_eq_error_rate!( - Balances::total_balance(&11), + asset::total_balance::(&11), init_balance_11 + part_for_11 * (total_payout_0 * 2 / 3 + total_payout_1), 2, ); assert_eq_error_rate!( - Balances::total_balance(&21), + asset::total_balance::(&21), init_balance_21 + part_for_21 * total_payout_0 * 1 / 3, 2, ); assert_eq_error_rate!( - Balances::total_balance(&101), + asset::total_balance::(&101), init_balance_101 + part_for_101_from_11 * (total_payout_0 * 2 / 3 + total_payout_1) + part_for_101_from_21 * total_payout_0 * 1 / 3, @@ -459,19 +468,17 @@ fn staking_should_work() { // put some money in account that we'll use. for i in 1..5 { - let _ = Balances::make_free_balance_be(&i, 2000); + let _ = asset::set_stakeable_balance::(&i, 2000); } // --- Block 2: start_session(2); - provide_did_to_user(3); // add a new candidate for being a validator. account 3 controlled by 4. assert_ok!(Staking::bond( RuntimeOrigin::signed(3), 1500, - RewardDestination::Controller + RewardDestination::Account(3) )); - assert_add_permissioned_validator!(&3); assert_ok!(Staking::validate( RuntimeOrigin::signed(3), ValidatorPrefs::default() @@ -519,20 +526,17 @@ fn staking_should_work() { // Note: the stashed value of 4 is still lock assert_eq!( - Staking::ledger(&3), - Some(StakingLedger { + Staking::ledger(3.into()).unwrap(), + StakingLedgerInspect { stash: 3, total: 1500, active: 1500, unlocking: Default::default(), - claimed_rewards: bounded_vec![0], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // e.g. it cannot reserve more than 500 that it has free from the total 2000 - assert_noop!( - Balances::reserve(&3, 501), - BalancesError::::LiquidityRestrictions - ); + assert_noop!(Balances::reserve(&3, 501), DispatchError::ConsumerRemaining); assert_ok!(Balances::reserve(&3, 409)); }); } @@ -575,8 +579,8 @@ fn less_than_needed_candidates_works() { .validator_count(4) .nominate(false) .build_and_execute(|| { - assert_eq!(Staking::validator_count(), 4); - assert_eq!(Staking::minimum_validator_count(), 1); + assert_eq!(ValidatorCount::::get(), 4); + assert_eq!(MinimumValidatorCount::::get(), 1); assert_eq_uvec!(validator_controllers(), vec![31, 21, 11]); mock::start_active_era(1); @@ -586,8 +590,10 @@ fn less_than_needed_candidates_works() { // But the exposure is updated in a simple way. No external votes exists. // This is purely self-vote. - assert!(ErasStakers::::iter_prefix_values(active_era()) - .all(|exposure| exposure.others.is_empty())); + assert!( + ErasStakersPaged::::iter_prefix_values((active_era(),)) + .all(|exposure| exposure.others.is_empty()) + ); }); } @@ -650,12 +656,10 @@ fn nominating_and_rewards_should_work() { assert_eq_uvec!(validator_controllers(), vec![41, 21]); // re-validate with 11 and 31. - assert_add_permissioned_validator!(&11); assert_ok!(Staking::validate( RuntimeOrigin::signed(11), Default::default() )); - assert_add_permissioned_validator!(&31); assert_ok!(Staking::validate( RuntimeOrigin::signed(31), Default::default() @@ -664,51 +668,40 @@ fn nominating_and_rewards_should_work() { // Set payee to controller. assert_ok!(Staking::set_payee( RuntimeOrigin::signed(11), - RewardDestination::Controller + RewardDestination::Stash )); assert_ok!(Staking::set_payee( RuntimeOrigin::signed(21), - RewardDestination::Controller + RewardDestination::Stash )); assert_ok!(Staking::set_payee( RuntimeOrigin::signed(31), - RewardDestination::Controller + RewardDestination::Stash )); assert_ok!(Staking::set_payee( RuntimeOrigin::signed(41), - RewardDestination::Controller + RewardDestination::Stash )); // give the man some money let initial_balance = 1000; for i in [1, 3, 5, 11, 21].iter() { - let _ = Balances::make_free_balance_be(i, initial_balance); + let _ = asset::set_stakeable_balance::(&i, initial_balance); } // bond two account pairs and state interest in nomination. - provide_did_to_user(1); assert_ok!(Staking::bond( RuntimeOrigin::signed(1), 1000, - RewardDestination::Controller + RewardDestination::Account(1) )); - assert_add_permissioned_validator!(&1); assert_ok!(Staking::nominate( RuntimeOrigin::signed(1), vec![11, 21, 31] )); - provide_did_to_user(3); - assert_ok!(Staking::bond( - RuntimeOrigin::signed(3), - 1000, - RewardDestination::Controller - )); - assert_add_permissioned_validator!(&3); - assert_ok!(Staking::nominate( - RuntimeOrigin::signed(3), - vec![11, 21, 41] - )); + // the second nominator is virtual. + bond_virtual_nominator(3, 333, 1000, vec![11, 21, 41]); // the total reward for era 0 let total_payout_0 = current_total_payout_for_duration(reward_time_per_era()); @@ -721,42 +714,42 @@ fn nominating_and_rewards_should_work() { assert_eq_uvec!(validator_controllers(), vec![21, 11]); // old validators must have already received some rewards. - let initial_balance_41 = Balances::total_balance(&41); - let mut initial_balance_21 = Balances::total_balance(&21); + let initial_balance_41 = asset::total_balance::(&41); + let mut initial_balance_21 = asset::total_balance::(&21); mock::make_all_reward_payment(0); assert_eq!( - Balances::total_balance(&41), + asset::total_balance::(&41), initial_balance_41 + total_payout_0 / 2 ); assert_eq!( - Balances::total_balance(&21), + asset::total_balance::(&21), initial_balance_21 + total_payout_0 / 2 ); - initial_balance_21 = Balances::total_balance(&21); + initial_balance_21 = asset::total_balance::(&21); assert_eq!( - ErasStakers::::iter_prefix_values(active_era()).count(), + ErasStakersPaged::::iter_prefix_values((active_era(),)).count(), 2 ); assert_eq!( - Staking::eras_stakers(active_era(), 11), + Staking::eras_stakers(active_era(), &11), Exposure { total: 1000 + 800, own: 1000, others: vec![ - IndividualExposure { who: 3, value: 400 }, IndividualExposure { who: 1, value: 400 }, + IndividualExposure { who: 3, value: 400 }, ] }, ); assert_eq!( - Staking::eras_stakers(active_era(), 21), + Staking::eras_stakers(active_era(), &21), Exposure { total: 1000 + 1200, own: 1000, others: vec![ - IndividualExposure { who: 3, value: 600 }, IndividualExposure { who: 1, value: 600 }, + IndividualExposure { who: 3, value: 600 }, ] }, ); @@ -777,28 +770,30 @@ fn nominating_and_rewards_should_work() { // Nominator 2: has [400/1800 ~ 2/9 from 10] + [600/2200 ~ 3/11 from 21]'s reward. ==> // 2/9 + 3/11 assert_eq_error_rate!( - Balances::total_balance(&1), + asset::total_balance::(&1), initial_balance + (2 * payout_for_11 / 9 + 3 * payout_for_21 / 11), 2, ); // Nominator 3: has [400/1800 ~ 2/9 from 10] + [600/2200 ~ 3/11 from 21]'s reward. ==> // 2/9 + 3/11 + assert_eq!(asset::stakeable_balance::(&3), initial_balance); + // 333 is the reward destination for 3. assert_eq_error_rate!( - Balances::total_balance(&3), - initial_balance + (2 * payout_for_11 / 9 + 3 * payout_for_21 / 11), - 2, + asset::total_balance::(&333), + 2 * payout_for_11 / 9 + 3 * payout_for_21 / 11, + 2 ); // Validator 11: got 800 / 1800 external stake => 8/18 =? 4/9 => Validator's share = 5/9 assert_eq_error_rate!( - Balances::total_balance(&11), + asset::total_balance::(&11), initial_balance + 5 * payout_for_11 / 9, 2, ); // Validator 21: got 1200 / 2200 external stake => 12/22 =? 6/11 => Validator's share = // 5/11 assert_eq_error_rate!( - Balances::total_balance(&21), + asset::total_balance::(&21), initial_balance_21 + 5 * payout_for_21 / 11, 2, ); @@ -807,107 +802,100 @@ fn nominating_and_rewards_should_work() { #[test] fn nominators_also_get_slashed_pro_rata() { - ExtBuilder::default().build_and_execute(|| { - mock::start_active_era(1); - let slash_percent = Perbill::from_percent(5); - let initial_exposure = Staking::eras_stakers(active_era(), 11); - // 101 is a nominator for 11 - assert_eq!(initial_exposure.others.first().unwrap().who, 101); - - // staked values; - let nominator_stake = Staking::ledger(101).unwrap().active; - let nominator_balance = balances(&101).0; - let validator_stake = Staking::ledger(11).unwrap().active; - let validator_balance = balances(&11).0; - let exposed_stake = initial_exposure.total; - let exposed_validator = initial_exposure.own; - let exposed_nominator = initial_exposure.others.first().unwrap().value; - - // 11 goes offline - on_offence_now( - &[OffenceDetails { - offender: (11, initial_exposure.clone()), - reporters: vec![], - }], - &[slash_percent], - ); - - // Polymesh change - // ----------------------------------------------------------------- - // Nominator slashing is switched of - // validator stake must have decreased - assert!(Staking::ledger(101).unwrap().active == nominator_stake); - assert!(Staking::ledger(11).unwrap().active < validator_stake); - // ----------------------------------------------------------------- - - let slash_amount = slash_percent * exposed_stake; - let validator_share = - Perbill::from_rational(exposed_validator, exposed_stake) * slash_amount; - let nominator_share = - Perbill::from_rational(exposed_nominator, exposed_stake) * slash_amount; - - // both slash amounts need to be positive for the test to make sense. - assert!(validator_share > 0); - assert!(nominator_share > 0); - - // both stakes must have been decreased pro-rata. - // assert_eq!( - // Staking::ledger(101).unwrap().active, - // nominator_stake - nominator_share - // ); - assert_eq!( - Staking::ledger(11).unwrap().active, - validator_stake - validator_share - ); - assert_eq!( - balances(&101).0, // free balance - nominator_balance, - ); - assert_eq!( - balances(&11).0, // free balance - validator_balance - validator_share, - ); - // Because slashing happened. - assert!(is_disabled(11)); - }); + ExtBuilder::default() + .validator_count(4) + .set_status(41, StakerStatus::Validator) + .build_and_execute(|| { + mock::start_active_era(1); + let slash_percent = Perbill::from_percent(5); + let initial_exposure = Staking::eras_stakers(active_era(), &11); + // 101 is a nominator for 11 + assert_eq!(initial_exposure.others.first().unwrap().who, 101); + + // staked values; + let nominator_stake = Staking::ledger(101.into()).unwrap().active; + let nominator_balance = balances(&101).0; + let validator_stake = Staking::ledger(11.into()).unwrap().active; + let validator_balance = balances(&11).0; + let exposed_stake = initial_exposure.total; + let exposed_validator = initial_exposure.own; + let exposed_nominator = initial_exposure.others.first().unwrap().value; + + // 11 goes offline + on_offence_now(&[offence_from(11, None)], &[slash_percent]); + + // both stakes must have been decreased. + assert!(Staking::ledger(101.into()).unwrap().active < nominator_stake); + assert!(Staking::ledger(11.into()).unwrap().active < validator_stake); + + let slash_amount = slash_percent * exposed_stake; + let validator_share = + Perbill::from_rational(exposed_validator, exposed_stake) * slash_amount; + let nominator_share = + Perbill::from_rational(exposed_nominator, exposed_stake) * slash_amount; + + // both slash amounts need to be positive for the test to make sense. + assert!(validator_share > 0); + assert!(nominator_share > 0); + + // both stakes must have been decreased pro-rata. + assert_eq!( + Staking::ledger(101.into()).unwrap().active, + nominator_stake - nominator_share + ); + assert_eq!( + Staking::ledger(11.into()).unwrap().active, + validator_stake - validator_share + ); + assert_eq!( + balances(&101).0, // free balance + nominator_balance - nominator_share, + ); + assert_eq!( + balances(&11).0, // free balance + validator_balance - validator_share, + ); + }); } #[test] fn double_staking_should_fail() { // should test (in the same order): - // * an account already bonded as stash cannot be be stashed again. + // * an account already bonded as stash cannot be stashed again. // * an account already bonded as stash cannot nominate. // * an account already bonded as controller can nominate. - ExtBuilder::default().build_and_execute(|| { - let arbitrary_value = 5; - let (stash, controller) = testing_utils::create_unique_stash_controller::( - 0, - arbitrary_value, - RewardDestination::default(), - false, - ) - .unwrap(); + ExtBuilder::default() + .try_state(false) + .build_and_execute(|| { + let arbitrary_value = 5; + let (stash, controller) = testing_utils::create_unique_stash_controller::( + 0, + arbitrary_value, + RewardDestination::Staked, + false, + ) + .unwrap(); - // 4 = not used so far, stash => not allowed. - assert_noop!( - Staking::bond( - RuntimeOrigin::signed(stash), - arbitrary_value.into(), - RewardDestination::default() - ), - Error::::AlreadyBonded, - ); - // stash => attempting to nominate should fail. - assert_noop!( - Staking::nominate(RuntimeOrigin::signed(stash), vec![1]), - Error::::NotController - ); - // controller => nominating should work. - assert_ok!(Staking::nominate( - RuntimeOrigin::signed(controller), - vec![1] - )); - }); + // 4 = not used so far, stash => not allowed. + assert_noop!( + Staking::bond( + RuntimeOrigin::signed(stash), + arbitrary_value.into(), + RewardDestination::Staked, + ), + Error::::AlreadyBonded, + ); + // stash => attempting to nominate should fail. + assert_noop!( + Staking::nominate(RuntimeOrigin::signed(stash), vec![1]), + Error::::NotController + ); + // controller => nominating should work. + assert_ok!(Staking::nominate( + RuntimeOrigin::signed(controller), + vec![1] + )); + }); } #[test] @@ -915,26 +903,28 @@ fn double_controlling_attempt_should_fail() { // should test (in the same order): // * an account already bonded as controller CANNOT be reused as the controller of another // account. - ExtBuilder::default().build_and_execute(|| { - let arbitrary_value = 5; - let (stash, _) = testing_utils::create_unique_stash_controller::( - 0, - arbitrary_value, - RewardDestination::default(), - false, - ) - .unwrap(); + ExtBuilder::default() + .try_state(false) + .build_and_execute(|| { + let arbitrary_value = 5; + let (stash, _) = testing_utils::create_unique_stash_controller::( + 0, + arbitrary_value, + RewardDestination::Staked, + false, + ) + .unwrap(); - // Note that controller (same as stash) is reused => no-op. - assert_noop!( - Staking::bond( - RuntimeOrigin::signed(stash), - arbitrary_value.into(), - RewardDestination::default() - ), - Error::::AlreadyBonded, - ); - }); + // Note that controller (same as stash) is reused => no-op. + assert_noop!( + Staking::bond( + RuntimeOrigin::signed(stash), + arbitrary_value.into(), + RewardDestination::Staked, + ), + Error::::AlreadyBonded, + ); + }); } #[test] @@ -1091,20 +1081,24 @@ fn cannot_transfer_staked_balance() { ExtBuilder::default().nominate(false).build_and_execute(|| { // Confirm account 11 is stashed assert_eq!(Staking::bonded(&11), Some(11)); - // Confirm account 11 has some free balance - assert_eq!(Balances::free_balance(11), 1000); - // Confirm account 11 (via controller) is totally staked - assert_eq!(Staking::eras_stakers(active_era(), 11).total, 1000); + // Confirm account 11 has some stakeable balance + assert_eq!(asset::stakeable_balance::(&11), 1000); + // Confirm account 11 is totally staked + assert_eq!(Staking::eras_stakers(active_era(), &11).total, 1000); // Confirm account 11 cannot transfer as a result assert_noop!( - Balances::transfer(RuntimeOrigin::signed(11), 20, 1), - sp_runtime::TokenError::Frozen + Balances::transfer_allow_death(RuntimeOrigin::signed(11), 21, 1), + TokenError::Frozen, ); // Give account 11 extra free balance - let _ = Balances::make_free_balance_be(&11, 10000); + let _ = asset::set_stakeable_balance::(&11, 10000); // Confirm that account 11 can now transfer some balance - assert_ok!(Balances::transfer(RuntimeOrigin::signed(11), 20, 1)); + assert_ok!(Balances::transfer_allow_death( + RuntimeOrigin::signed(11), + 21, + 1 + )); }); } @@ -1117,15 +1111,20 @@ fn cannot_transfer_staked_balance_2() { // Confirm account 21 is stashed assert_eq!(Staking::bonded(&21), Some(21)); // Confirm account 21 has some free balance - assert_eq!(Balances::free_balance(21), 2000); + assert_eq!(asset::stakeable_balance::(&21), 2000); // Confirm account 21 (via controller) is totally staked - assert_eq!(Staking::eras_stakers(active_era(), 21).total, 1000); - // Confirm account 21 can transfer at most 1000 + assert_eq!(Staking::eras_stakers(active_era(), &21).total, 1000); + // Confirm account 21 cannot transfer more than 1000 assert_noop!( - Balances::transfer(RuntimeOrigin::signed(21), 20, 1001), - sp_runtime::TokenError::Frozen - ); - assert_ok!(Balances::transfer(RuntimeOrigin::signed(21), 20, 1000)); + Balances::transfer_allow_death(RuntimeOrigin::signed(21), 21, 1001), + TokenError::Frozen, + ); + // Confirm account 21 needs to leave at least ED in free balance to be able to transfer + assert_ok!(Balances::transfer_allow_death( + RuntimeOrigin::signed(21), + 21, + 1000 + )); }); } @@ -1135,20 +1134,64 @@ fn cannot_reserve_staked_balance() { ExtBuilder::default().build_and_execute(|| { // Confirm account 11 is stashed assert_eq!(Staking::bonded(&11), Some(11)); - // Confirm account 11 has some free balance - assert_eq!(Balances::free_balance(11), 1000); - // Confirm account 11 (via controller 10) is totally staked - assert_eq!(Staking::eras_stakers(active_era(), 11).own, 1000); + // Confirm account 11 is totally staked + assert_eq!(asset::staked::(&11), 1000); + // Confirm account 11 cannot reserve as a result assert_noop!( - Balances::reserve(&11, 1), - BalancesError::::LiquidityRestrictions + Balances::reserve(&11, 2), + BalancesError::::InsufficientBalance ); + assert_noop!(Balances::reserve(&11, 1), DispatchError::ConsumerRemaining); // Give account 11 extra free balance - let _ = Balances::make_free_balance_be(&11, 10000); + let _ = asset::set_stakeable_balance::(&11, 1000 + 1000); + assert_eq!(asset::free_to_stake::(&11), 1000); + // Confirm account 11 can now reserve balance - assert_ok!(Balances::reserve(&11, 1)); + assert_ok!(Balances::reserve(&11, 500)); + + // free to stake balance has reduced + assert_eq!(asset::free_to_stake::(&11), 500); + }); +} + +#[test] +fn locked_balance_can_be_staked() { + // Checks that a bonded account cannot reserve balance from free balance + ExtBuilder::default().build_and_execute(|| { + // Confirm account 11 is stashed + assert_eq!(Staking::bonded(&11), Some(11)); + assert_eq!(asset::staked::(&11), 1000); + assert_eq!(asset::free_to_stake::(&11), 0); + + // add some staking balance to 11 + let _ = asset::set_stakeable_balance::(&11, 1000 + 1000); + // free to stake is 1000 + assert_eq!(asset::free_to_stake::(&11), 1000); + + // lock some balance + Balances::set_lock(*b"somelock", &11, 500, WithdrawReasons::all()); + + // locked balance still available for staking + assert_eq!(asset::free_to_stake::(&11), 1000); + + // can stake free balance + assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(11), 500)); + assert_eq!(asset::staked::(&11), 1500); + + // Can stake the locked balance + assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(11), 500)); + assert_eq!(asset::staked::(&11), 2000); + // no balance left to stake + assert_eq!(asset::free_to_stake::(&11), 0); + + // this does not fail if someone tries to stake more than free balance but just stakes + // whatever is available. (not sure if that is the best way, but we keep it backward + // compatible) + assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(11), 10)); + // no extra balance staked. + assert_eq!(asset::staked::(&11), 2000); }); } @@ -1159,19 +1202,19 @@ fn reward_destination_works() { // Check that account 11 is a validator assert!(Session::validators().contains(&11)); // Check the balance of the validator account - assert_eq!(Balances::free_balance(10), 1); + assert_eq!(asset::total_balance::(&10), 1); // Check the balance of the stash account - assert_eq!(Balances::free_balance(11), 1000); + assert_eq!(asset::total_balance::(&11), 1001); // Check how much is at stake assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Compute total payout now for whole duration as other parameter won't change @@ -1181,22 +1224,25 @@ fn reward_destination_works() { mock::start_active_era(1); mock::make_all_reward_payment(0); - // Check that RewardDestination is Staked (default) - assert_eq!(Staking::payee(&11), RewardDestination::Staked); + // Check that RewardDestination is Staked + assert_eq!(Staking::payee(11.into()), Some(RewardDestination::Staked)); // Check that reward went to the stash account of validator - assert_eq!(Balances::free_balance(11), 1000 + total_payout_0); + assert_eq!(asset::stakeable_balance::(&11), 1000 + total_payout_0); // Check that amount at stake increased accordingly assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000 + total_payout_0, active: 1000 + total_payout_0, unlocking: Default::default(), - claimed_rewards: bounded_vec![0], - }) + legacy_claimed_rewards: bounded_vec![], + } ); + // (era 0, page 0) is claimed + assert_eq!(ClaimedRewards::::get(0, &11), vec![0]); + // Change RewardDestination to Stash >::insert(&11, RewardDestination::Stash); @@ -1208,29 +1254,34 @@ fn reward_destination_works() { mock::make_all_reward_payment(1); // Check that RewardDestination is Stash - assert_eq!(Staking::payee(&11), RewardDestination::Stash); + assert_eq!(Staking::payee(11.into()), Some(RewardDestination::Stash)); // Check that reward went to the stash account assert_eq!( - Balances::free_balance(11), + asset::stakeable_balance::(&11), 1000 + total_payout_0 + total_payout_1 ); + // Record this value + let recorded_stash_balance = 1000 + total_payout_0 + total_payout_1; // Check that amount at stake is NOT increased assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000 + total_payout_0, active: 1000 + total_payout_0, unlocking: Default::default(), - claimed_rewards: bounded_vec![0, 1], - }) + legacy_claimed_rewards: bounded_vec![], + } ); - // Change RewardDestination to Controller - >::insert(&11, RewardDestination::Controller); + // (era 1, page 0) is claimed + assert_eq!(ClaimedRewards::::get(1, &11), vec![0]); + + // Change RewardDestination to Account + >::insert(&11, RewardDestination::Account(11)); // Check controller balance - assert_eq!(Balances::free_balance(11), 23150); + assert_eq!(asset::stakeable_balance::(&11), 23150); // Compute total payout now for whole duration as other parameter won't change let total_payout_2 = current_total_payout_for_duration(reward_time_per_era()); @@ -1239,21 +1290,30 @@ fn reward_destination_works() { mock::start_active_era(3); mock::make_all_reward_payment(2); - // Check that RewardDestination is Controller - assert_eq!(Staking::payee(&11), RewardDestination::Controller); + // Check that RewardDestination is Account(11) + assert_eq!( + Staking::payee(11.into()), + Some(RewardDestination::Account(11)) + ); // Check that reward went to the controller account - assert_eq!(Balances::free_balance(11), 23150 + total_payout_2); + assert_eq!( + asset::stakeable_balance::(&11), + recorded_stash_balance + total_payout_2 + ); // Check that amount at stake is NOT increased assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000 + total_payout_0, active: 1000 + total_payout_0, unlocking: Default::default(), - claimed_rewards: bounded_vec![0, 1, 2], - }) + legacy_claimed_rewards: bounded_vec![], + } ); + + // (era 2, page 0) is claimed + assert_eq!(ClaimedRewards::::get(2, &11), vec![0]); }); } @@ -1272,19 +1332,19 @@ fn validator_payment_prefs_work() { }, ); - // Reward controller so staked ratio doesn't change. - >::insert(&11, RewardDestination::Controller); - >::insert(&101, RewardDestination::Controller); + // Reward stash so staked ratio doesn't change. + >::insert(&11, RewardDestination::Stash); + >::insert(&101, RewardDestination::Stash); mock::start_active_era(1); mock::make_all_reward_payment(0); - let balance_era_1_11 = Balances::total_balance(&11); - let balance_era_1_101 = Balances::total_balance(&101); + let balance_era_1_11 = asset::total_balance::(&11); + let balance_era_1_101 = asset::total_balance::(&101); // Compute total payout now for whole duration as other parameter won't change let total_payout_1 = current_total_payout_for_duration(reward_time_per_era()); - let exposure_1 = Staking::eras_stakers(active_era(), 11); + let exposure_1 = Staking::eras_stakers(active_era(), &11); Pallet::::reward_by_ids(vec![(11, 1)]); mock::start_active_era(2); @@ -1295,12 +1355,12 @@ fn validator_payment_prefs_work() { let reward_of_10 = shared_cut * exposure_1.own / exposure_1.total + taken_cut; let reward_of_100 = shared_cut * exposure_1.others[0].value / exposure_1.total; assert_eq_error_rate!( - Balances::total_balance(&11), + asset::total_balance::(&11), balance_era_1_11 + reward_of_10, 2 ); assert_eq_error_rate!( - Balances::total_balance(&101), + asset::total_balance::(&101), balance_era_1_101 + reward_of_100, 2 ); @@ -1319,31 +1379,31 @@ fn bond_extra_works() { assert_eq!(Staking::bonded(&11), Some(11)); // Check how much is at stake assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Give account 11 some large free balance greater than total - let _ = Balances::make_free_balance_be(&11, 1000000); + let _ = asset::set_stakeable_balance::(&11, 1000000); // Call the bond_extra function from controller, add only 100 assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(11), 100)); // There should be 100 more `total` and `active` in the ledger assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000 + 100, active: 1000 + 100, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Call the bond_extra function with a large number, should handle it @@ -1353,18 +1413,45 @@ fn bond_extra_works() { )); // The full amount of the funds should now be in the total and active assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000000, active: 1000000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); }); } +#[test] +fn bond_extra_controller_bad_state_works() { + ExtBuilder::default() + .try_state(false) + .build_and_execute(|| { + assert_eq!( + StakingLedger::::get(StakingAccount::Stash(31)) + .unwrap() + .stash, + 31 + ); + + // simulate ledger in bad state: the controller 41 is associated to the stash 31 and 41. + Bonded::::insert(31, 41); + + // we confirm that the ledger is in bad state: 31 has 41 as controller and when fetching + // the ledger associated with the controller 41, its stash is 41 (and not 31). + assert_eq!(Ledger::::get(41).unwrap().stash, 41); + + // if the ledger is in this bad state, the `bond_extra` should fail. + assert_noop!( + Staking::bond_extra(RuntimeOrigin::signed(31), 10), + Error::::BadState + ); + }) +} + #[test] fn bond_extra_and_withdraw_unbonded_works() { // @@ -1374,37 +1461,37 @@ fn bond_extra_and_withdraw_unbonded_works() { // * it can unbond a portion of its funds from the stash account. // * Once the unbonding period is done, it can actually take the funds out of the stash. ExtBuilder::default().nominate(false).build_and_execute(|| { - // Set payee to controller. avoids confusion + // Set payee to stash. assert_ok!(Staking::set_payee( RuntimeOrigin::signed(11), - RewardDestination::Controller + RewardDestination::Stash )); // Give account 11 some large free balance greater than total - let _ = Balances::make_free_balance_be(&11, 1000000); + let _ = asset::set_stakeable_balance::(&11, 1000000); + + // ensure it has the correct balance. + assert_eq!(asset::stakeable_balance::(&11), 1000000); // Initial config should be correct assert_eq!(active_era(), 0); - // check the balance of a validator accounts. - assert_eq!(Balances::total_balance(&11), 1000000); - // confirm that 10 is a normal validator and gets paid at the end of the era. mock::start_active_era(1); // Initial state of 11 assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); assert_eq!( - Staking::eras_stakers(active_era(), 11), + Staking::eras_stakers(active_era(), &11), Exposure { total: 1000, own: 1000, @@ -1416,18 +1503,18 @@ fn bond_extra_and_withdraw_unbonded_works() { Staking::bond_extra(RuntimeOrigin::signed(11), 100).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000 + 100, active: 1000 + 100, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Exposure is a snapshot! only updated after the next era update. assert_ne!( - Staking::eras_stakers(active_era(), 11), + Staking::eras_stakers(active_era(), &11), Exposure { total: 1000 + 100, own: 1000 + 100, @@ -1441,18 +1528,18 @@ fn bond_extra_and_withdraw_unbonded_works() { // ledger should be the same. assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000 + 100, active: 1000 + 100, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Exposure is now updated. assert_eq!( - Staking::eras_stakers(active_era(), 11), + Staking::eras_stakers(active_era(), &11), Exposure { total: 1000 + 100, own: 1000 + 100, @@ -1463,8 +1550,8 @@ fn bond_extra_and_withdraw_unbonded_works() { // Unbond almost all of the funds in stash. Staking::unbond(RuntimeOrigin::signed(11), 1000).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000 + 100, active: 100, @@ -1472,15 +1559,15 @@ fn bond_extra_and_withdraw_unbonded_works() { value: 1000, era: 2 + 3 }], - claimed_rewards: bounded_vec![], - }), + legacy_claimed_rewards: bounded_vec![], + }, ); // Attempting to free the balances now will fail. 2 eras need to pass. assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(11), 0)); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000 + 100, active: 100, @@ -1488,8 +1575,8 @@ fn bond_extra_and_withdraw_unbonded_works() { value: 1000, era: 2 + 3 }], - claimed_rewards: bounded_vec![], - }), + legacy_claimed_rewards: bounded_vec![], + }, ); // trigger next era. @@ -1498,8 +1585,8 @@ fn bond_extra_and_withdraw_unbonded_works() { // nothing yet assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(11), 0)); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000 + 100, active: 100, @@ -1507,8 +1594,8 @@ fn bond_extra_and_withdraw_unbonded_works() { value: 1000, era: 2 + 3 }], - claimed_rewards: bounded_vec![], - }), + legacy_claimed_rewards: bounded_vec![], + }, ); // trigger next era. @@ -1517,14 +1604,14 @@ fn bond_extra_and_withdraw_unbonded_works() { assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(11), 0)); // Now the value is free and the staking ledger is updated. assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 100, active: 100, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }), + legacy_claimed_rewards: bounded_vec![], + }, ); }) } @@ -1551,7 +1638,9 @@ fn many_unbond_calls_should_work() { // `BondingDuration` == 3). assert_ok!(Staking::unbond(RuntimeOrigin::signed(11), 1)); assert_eq!( - Staking::ledger(&11).map(|l| l.unlocking.len()).unwrap(), + Staking::ledger(11.into()) + .map(|l| l.unlocking.len()) + .unwrap(), <::MaxUnlockingChunks as Get>::get() as usize ); @@ -1566,7 +1655,9 @@ fn many_unbond_calls_should_work() { // only slots within last `BondingDuration` are filled. assert_eq!( - Staking::ledger(&11).map(|l| l.unlocking.len()).unwrap(), + Staking::ledger(11.into()) + .map(|l| l.unlocking.len()) + .unwrap(), <::BondingDuration>::get() as usize ); }) @@ -1612,28 +1703,28 @@ fn rebond_works() { // * it can unbond a portion of its funds from the stash account. // * it can re-bond a portion of the funds scheduled to unlock. ExtBuilder::default().nominate(false).build_and_execute(|| { - // Set payee to controller. avoids confusion + // Set payee to stash. assert_ok!(Staking::set_payee( RuntimeOrigin::signed(11), - RewardDestination::Controller + RewardDestination::Stash )); // Give account 11 some large free balance greater than total - let _ = Balances::make_free_balance_be(&11, 1000000); + let _ = asset::set_stakeable_balance::(&11, 1000000); // confirm that 10 is a normal validator and gets paid at the end of the era. mock::start_active_era(1); // Initial state of 11 assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); mock::start_active_era(2); @@ -1648,8 +1739,8 @@ fn rebond_works() { // Unbond almost all of the funds in stash. Staking::unbond(RuntimeOrigin::signed(11), 900).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 100, @@ -1657,60 +1748,60 @@ fn rebond_works() { value: 900, era: 2 + 3 }], - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Re-bond all the funds unbonded. Staking::rebond(RuntimeOrigin::signed(11), 900).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Unbond almost all of the funds in stash. Staking::unbond(RuntimeOrigin::signed(11), 900).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 100, unlocking: bounded_vec![UnlockChunk { value: 900, era: 5 }], - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Re-bond part of the funds unbonded. Staking::rebond(RuntimeOrigin::signed(11), 500).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 600, unlocking: bounded_vec![UnlockChunk { value: 400, era: 5 }], - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Re-bond the remainder of the funds unbonded. Staking::rebond(RuntimeOrigin::signed(11), 500).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Unbond parts of the funds in stash. @@ -1718,27 +1809,27 @@ fn rebond_works() { Staking::unbond(RuntimeOrigin::signed(11), 300).unwrap(); Staking::unbond(RuntimeOrigin::signed(11), 300).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 100, unlocking: bounded_vec![UnlockChunk { value: 900, era: 5 }], - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Re-bond part of the funds unbonded. Staking::rebond(RuntimeOrigin::signed(11), 500).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 600, unlocking: bounded_vec![UnlockChunk { value: 400, era: 5 }], - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); }) } @@ -1747,28 +1838,28 @@ fn rebond_works() { fn rebond_is_fifo() { // Rebond should proceed by reversing the most recent bond operations. ExtBuilder::default().nominate(false).build_and_execute(|| { - // Set payee to controller. avoids confusion + // Set payee to stash. assert_ok!(Staking::set_payee( RuntimeOrigin::signed(11), - RewardDestination::Controller + RewardDestination::Stash )); // Give account 11 some large free balance greater than total - let _ = Balances::make_free_balance_be(&11, 1000000); + let _ = asset::set_stakeable_balance::(&11, 1000000); // confirm that 10 is a normal validator and gets paid at the end of the era. mock::start_active_era(1); // Initial state of 10 assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); mock::start_active_era(2); @@ -1776,8 +1867,8 @@ fn rebond_is_fifo() { // Unbond some of the funds in stash. Staking::unbond(RuntimeOrigin::signed(11), 400).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 600, @@ -1785,8 +1876,8 @@ fn rebond_is_fifo() { value: 400, era: 2 + 3 }], - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); mock::start_active_era(3); @@ -1794,8 +1885,8 @@ fn rebond_is_fifo() { // Unbond more of the funds in stash. Staking::unbond(RuntimeOrigin::signed(11), 300).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 300, @@ -1809,8 +1900,8 @@ fn rebond_is_fifo() { era: 3 + 3 }, ], - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); mock::start_active_era(4); @@ -1818,8 +1909,8 @@ fn rebond_is_fifo() { // Unbond yet more of the funds in stash. Staking::unbond(RuntimeOrigin::signed(11), 200).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 100, @@ -1837,15 +1928,15 @@ fn rebond_is_fifo() { era: 4 + 3 }, ], - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Re-bond half of the unbonding funds. Staking::rebond(RuntimeOrigin::signed(11), 400).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 500, @@ -1859,8 +1950,8 @@ fn rebond_is_fifo() { era: 3 + 3 }, ], - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); }) } @@ -1870,14 +1961,14 @@ fn rebond_emits_right_value_in_event() { // When a user calls rebond with more than can be rebonded, things succeed, // and the rebond event emits the actual value rebonded. ExtBuilder::default().nominate(false).build_and_execute(|| { - // Set payee to controller. avoids confusion + // Set payee to stash. assert_ok!(Staking::set_payee( RuntimeOrigin::signed(11), - RewardDestination::Controller + RewardDestination::Stash )); // Give account 11 some large free balance greater than total - let _ = Balances::make_free_balance_be(&11, 1000000); + let _ = asset::set_stakeable_balance::(&11, 1000000); // confirm that 10 is a normal validator and gets paid at the end of the era. mock::start_active_era(1); @@ -1885,8 +1976,8 @@ fn rebond_emits_right_value_in_event() { // Unbond almost all of the funds in stash. Staking::unbond(RuntimeOrigin::signed(11), 900).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 100, @@ -1894,15 +1985,15 @@ fn rebond_emits_right_value_in_event() { value: 900, era: 1 + 3 }], - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Re-bond less than the total Staking::rebond(RuntimeOrigin::signed(11), 100).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 200, @@ -1910,8 +2001,8 @@ fn rebond_emits_right_value_in_event() { value: 800, era: 1 + 3 }], - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Event emitted should be correct assert_eq!( @@ -1925,14 +2016,14 @@ fn rebond_emits_right_value_in_event() { // Re-bond way more than available Staking::rebond(RuntimeOrigin::signed(11), 100_000).unwrap(); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + legacy_claimed_rewards: bounded_vec![], + } ); // Event emitted should be correct, only 800 assert_eq!( @@ -1946,42 +2037,123 @@ fn rebond_emits_right_value_in_event() { } #[test] -fn reward_to_stake_works() { - ExtBuilder::default() - .nominate(false) - .set_status(31, StakerStatus::Idle) - .set_status(41, StakerStatus::Idle) - .set_stake(21, 2000) - .build_and_execute(|| { - assert_eq!(Staking::validator_count(), 2); - // Confirm account 10 and 20 are validators - assert!(>::contains_key(&11) && >::contains_key(&21)); +fn max_staked_rewards_default_works() { + ExtBuilder::default().build_and_execute(|| { + assert_eq!(>::get(), None); - assert_eq!(Staking::eras_stakers(active_era(), 11).total, 1000); - assert_eq!(Staking::eras_stakers(active_era(), 21).total, 2000); + let default_stakers_payout = current_total_payout_for_duration(reward_time_per_era()); + assert!(default_stakers_payout > 0); + start_active_era(1); - // Give the man some money. - let _ = Balances::make_free_balance_be(&10, 1000); - let _ = Balances::make_free_balance_be(&20, 1000); + // the final stakers reward is the same as the reward before applied the cap. + assert_eq!( + ErasValidatorReward::::get(0).unwrap(), + default_stakers_payout + ); - // Bypass logic and change current exposure - ErasStakers::::insert( - 0, - 21, - Exposure { - total: 69, - own: 69, - others: vec![], - }, - ); - >::insert( - &20, - StakingLedger { - stash: 21, + // which is the same behaviour if the `MaxStakedRewards` is set to 100%. + >::set(Some(Percent::from_parts(100))); + + let default_stakers_payout = current_total_payout_for_duration(reward_time_per_era()); + assert_eq!( + ErasValidatorReward::::get(0).unwrap(), + default_stakers_payout + ); + }) +} + +#[test] +fn max_staked_rewards_works() { + ExtBuilder::default().nominate(true).build_and_execute(|| { + let max_staked_rewards = 10; + + // sets new max staked rewards through set_staking_configs. + assert_ok!(Staking::set_staking_configs( + RuntimeOrigin::root(), + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Set(Percent::from_percent(max_staked_rewards)), + )); + + assert_eq!( + >::get(), + Some(Percent::from_percent(10)) + ); + + // check validators account state. + assert_eq!(Session::validators().len(), 2); + assert!(Session::validators().contains(&11) & Session::validators().contains(&21)); + // balance of the mock treasury account is 0 + assert_eq!(RewardRemainderUnbalanced::get(), 0); + + let max_stakers_payout = current_total_payout_for_duration(reward_time_per_era()); + + start_active_era(1); + + let treasury_payout = RewardRemainderUnbalanced::get(); + let validators_payout = ErasValidatorReward::::get(0).unwrap(); + let total_payout = treasury_payout + validators_payout; + + // max stakers payout (without max staked rewards cap applied) is larger than the final + // validator rewards. The final payment and remainder should be adjusted by redistributing + // the era inflation to apply the cap... + assert!(max_stakers_payout > validators_payout); + + // .. which means that the final validator payout is 10% of the total payout.. + assert_eq!( + validators_payout, + Percent::from_percent(max_staked_rewards) * total_payout + ); + // .. and the remainder 90% goes to the treasury. + assert_eq!( + treasury_payout, + Percent::from_percent(100 - max_staked_rewards) * (treasury_payout + validators_payout) + ); + }) +} + +#[test] +fn reward_to_stake_works() { + ExtBuilder::default() + .nominate(false) + .set_status(31, StakerStatus::Idle) + .set_status(41, StakerStatus::Idle) + .set_stake(21, 2000) + .try_state(false) + .build_and_execute(|| { + assert_eq!(ValidatorCount::::get(), 2); + // Confirm account 10 and 20 are validators + assert!(>::contains_key(&11) && >::contains_key(&21)); + + assert_eq!(Staking::eras_stakers(active_era(), &11).total, 1000); + assert_eq!(Staking::eras_stakers(active_era(), &21).total, 2000); + + // Give the man some money. + let _ = asset::set_stakeable_balance::(&10, 1000); + let _ = asset::set_stakeable_balance::(&20, 1000); + + // Bypass logic and change current exposure + EraInfo::::set_exposure( + 0, + &21, + Exposure { + total: 69, + own: 69, + others: vec![], + }, + ); + >::insert( + &20, + StakingLedgerInspect { + stash: 21, total: 69, active: 69, unlocking: Default::default(), - claimed_rewards: bounded_vec![], + legacy_claimed_rewards: bounded_vec![], }, ); @@ -1994,21 +2166,24 @@ fn reward_to_stake_works() { mock::start_active_era(1); mock::make_all_reward_payment(0); - assert_eq!(Staking::eras_stakers(active_era(), 11).total, 1000); - assert_eq!(Staking::eras_stakers(active_era(), 21).total, 2000); - - let _11_balance = Balances::free_balance(&11); - let _21_balance = Balances::free_balance(&21); + assert_eq!(Staking::eras_stakers(active_era(), &11).total, 1000); + assert_eq!(Staking::eras_stakers(active_era(), &21).total, 2000); + let _11_balance = asset::stakeable_balance::(&11); assert_eq!(_11_balance, 1000 + total_payout_0 / 2); - assert_eq!(_21_balance, 2000 + total_payout_0 / 2); // Trigger another new era as the info are frozen before the era start. mock::start_active_era(2); // -- new infos - assert_eq!(Staking::eras_stakers(active_era(), 11).total, _11_balance); - assert_eq!(Staking::eras_stakers(active_era(), 21).total, _21_balance); + assert_eq!( + Staking::eras_stakers(active_era(), &11).total, + 1000 + total_payout_0 / 2 + ); + assert_eq!( + Staking::eras_stakers(active_era(), &21).total, + 2000 + total_payout_0 / 2 + ); }); } @@ -2019,7 +2194,7 @@ fn reap_stash_works() { .balance_factor(10) .build_and_execute(|| { // given - assert_eq!(Balances::free_balance(11), 10 * 1000); + assert_eq!(asset::staked::(&11), 10 * 1000); assert_eq!(Staking::bonded(&11), Some(11)); assert!(>::contains_key(&11)); @@ -2032,29 +2207,49 @@ fn reap_stash_works() { Staking::reap_stash(RuntimeOrigin::signed(20), 11, 0), Error::::FundedTarget ); - // Polymesh change - // ----------------------------------------------------------------- - // controller or any other account is not reapable - assert_noop!( - Staking::reap_stash(RuntimeOrigin::signed(20), 10, 0), - Error::::NotStash - ); - // ----------------------------------------------------------------- // no easy way to cause an account to go below ED, we tweak their staking ledger // instead. + Ledger::::insert(11, StakingLedger::::new(11, 5)); - Ledger::::insert( - 11, - StakingLedger { - stash: 11, - total: 0, - active: 0, - unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }, + // reap-able + assert_ok!(Staking::reap_stash(RuntimeOrigin::signed(20), 11, 0)); + + // then + assert!(!>::contains_key(&11)); + assert!(!>::contains_key(&11)); + assert!(!>::contains_key(&11)); + assert!(!>::contains_key(&11)); + // lock is removed. + assert_eq!(asset::staked::(&11), 0); + }); +} + +#[test] +fn reap_stash_works_with_existential_deposit_zero() { + ExtBuilder::default() + .existential_deposit(0) + .balance_factor(10) + .build_and_execute(|| { + // given + assert_eq!(asset::staked::(&11), 10 * 1000); + assert_eq!(Staking::bonded(&11), Some(11)); + + assert!(>::contains_key(&11)); + assert!(>::contains_key(&11)); + assert!(>::contains_key(&11)); + assert!(>::contains_key(&11)); + + // stash is not reapable + assert_noop!( + Staking::reap_stash(RuntimeOrigin::signed(20), 11, 0), + Error::::FundedTarget ); + // no easy way to cause an account to go below ED, we tweak their staking ledger + // instead. + Ledger::::insert(11, StakingLedger::::new(11, 0)); + // reap-able assert_ok!(Staking::reap_stash(RuntimeOrigin::signed(20), 11, 0)); @@ -2063,6 +2258,8 @@ fn reap_stash_works() { assert!(!>::contains_key(&11)); assert!(!>::contains_key(&11)); assert!(!>::contains_key(&11)); + // lock is removed. + assert_eq!(asset::staked::(&11), 0); }); } @@ -2075,7 +2272,7 @@ fn switching_roles() { for i in &[11, 21] { assert_ok!(Staking::set_payee( RuntimeOrigin::signed(*i), - RewardDestination::Controller + RewardDestination::Stash )); } @@ -2086,31 +2283,27 @@ fn switching_roles() { let _ = Balances::deposit_creating(&i, 5000); } - provide_did_to_user(1); // add 2 nominators assert_ok!(Staking::bond( RuntimeOrigin::signed(1), 2000, - RewardDestination::Controller + RewardDestination::Account(1) )); assert_ok!(Staking::nominate(RuntimeOrigin::signed(1), vec![11, 5])); - provide_did_to_user(3); assert_ok!(Staking::bond( RuntimeOrigin::signed(3), 500, - RewardDestination::Controller + RewardDestination::Account(3) )); assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![21, 1])); - provide_did_to_user(5); // add a new validator candidate assert_ok!(Staking::bond( RuntimeOrigin::signed(5), 1000, - RewardDestination::Controller + RewardDestination::Account(5) )); - assert_add_permissioned_validator!(&5); assert_ok!(Staking::validate( RuntimeOrigin::signed(5), ValidatorPrefs::default() @@ -2126,7 +2319,6 @@ fn switching_roles() { // with current nominators 11 and 5 have the most stake assert_eq_uvec!(validator_controllers(), vec![5, 11]); - assert_add_permissioned_validator!(&1); // 2 decides to be a validator. Consequences: assert_ok!(Staking::validate( RuntimeOrigin::signed(1), @@ -2154,7 +2346,6 @@ fn switching_roles() { fn wrong_vote_is_moot() { ExtBuilder::default() .add_staker( - IdentityId::from(61), 61, 61, 500, @@ -2171,11 +2362,11 @@ fn wrong_vote_is_moot() { assert_eq_uvec!(validator_controllers(), vec![21, 11]); // our new voter is taken into account - assert!(Staking::eras_stakers(active_era(), 11) + assert!(Staking::eras_stakers(active_era(), &11) .others .iter() .any(|i| i.who == 61)); - assert!(Staking::eras_stakers(active_era(), 21) + assert!(Staking::eras_stakers(active_era(), &21) .others .iter() .any(|i| i.who == 61)); @@ -2188,64 +2379,51 @@ fn bond_with_no_staked_value() { // Particularly when they votes and the candidate is elected. ExtBuilder::default() .validator_count(3) - .existential_deposit(0) + .existential_deposit(5) .balance_factor(5) .nominate(false) .minimum_validator_count(1) .build_and_execute(|| { - provide_did_to_user(1); - // Polymesh change - // ----------------------------------------------------------------- - // The assertion below would fail as we have exestential deposit = 0 (Hard coded) // Can't bond with 1 - //assert_noop!( - // Staking::bond( - // RuntimeOrigin::signed(1), - // 1, - // RewardDestination::Controller - // ), - // Error::::InsufficientBond, - //); - // ----------------------------------------------------------------- + assert_noop!( + Staking::bond(RuntimeOrigin::signed(1), 1, RewardDestination::Account(1)), + Error::::InsufficientBond, + ); // bonded with absolute minimum value possible. assert_ok!(Staking::bond( RuntimeOrigin::signed(1), 5, - RewardDestination::Controller + RewardDestination::Account(1) )); - assert_eq!(Locks::::get(&1)[0].amount, 5); + assert_eq!(pallet_balances::Holds::::get(&1)[0].amount, 5); // unbonding even 1 will cause all to be unbonded. assert_ok!(Staking::unbond(RuntimeOrigin::signed(1), 1)); - // Polymesh change - // ----------------------------------------------------------------- - // The assertion below would fail as we have exestential deposit = 0 (Hard coded) assert_eq!( - Staking::ledger(1), - Some(StakingLedger { + Staking::ledger(1.into()).unwrap(), + StakingLedgerInspect { stash: 1, - active: 4, + active: 0, total: 5, - unlocking: bounded_vec![UnlockChunk { value: 1, era: 3 }], - claimed_rewards: bounded_vec![], - }) + unlocking: bounded_vec![UnlockChunk { value: 5, era: 3 }], + legacy_claimed_rewards: bounded_vec![], + } ); - // ----------------------------------------------------------------- mock::start_active_era(1); mock::start_active_era(2); // not yet removed. assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(1), 0)); - assert!(Staking::ledger(1).is_some()); - assert_eq!(Locks::::get(&1)[0].amount, 5); + assert!(Staking::ledger(1.into()).is_ok()); + assert_eq!(pallet_balances::Holds::::get(&1)[0].amount, 5); mock::start_active_era(3); // poof. Account 1 is removed from the staking system. assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(1), 0)); - assert!(Staking::ledger(1).is_some()); - assert_eq!(Locks::::get(&1).len(), 1); + assert!(Staking::ledger(1.into()).is_err()); + assert_eq!(pallet_balances::Holds::::get(&1).len(), 0); }); } @@ -2260,19 +2438,17 @@ fn bond_with_little_staked_value_bounded() { assert_ok!(Staking::chill(RuntimeOrigin::signed(31))); assert_ok!(Staking::set_payee( RuntimeOrigin::signed(11), - RewardDestination::Controller + RewardDestination::Stash )); - let init_balance_1 = Balances::free_balance(&1); - let init_balance_11 = Balances::free_balance(&11); + let init_balance_1 = asset::stakeable_balance::(&1); + let init_balance_11 = asset::stakeable_balance::(&11); - provide_did_to_user(1); // Stingy validator. assert_ok!(Staking::bond( RuntimeOrigin::signed(1), 1, - RewardDestination::Controller + RewardDestination::Account(1) )); - assert_add_permissioned_validator!(&1); assert_ok!(Staking::validate( RuntimeOrigin::signed(1), ValidatorPrefs::default() @@ -2291,18 +2467,18 @@ fn bond_with_little_staked_value_bounded() { mock::start_active_era(1); mock::make_all_reward_payment(0); - // 2 is elected. + // 1 is elected. assert_eq_uvec!(validator_controllers(), vec![21, 11, 1]); - assert_eq!(Staking::eras_stakers(active_era(), 2).total, 0); + assert_eq!(Staking::eras_stakers(active_era(), &2).total, 0); // Old ones are rewarded. assert_eq_error_rate!( - Balances::free_balance(11), + asset::stakeable_balance::(&11), init_balance_11 + total_payout_0 / 3, 1 ); // no rewards paid to 2. This was initial election. - assert_eq!(Balances::free_balance(1), init_balance_1); + assert_eq!(asset::stakeable_balance::(&1), init_balance_1); // reward era 2 let total_payout_1 = current_total_payout_for_duration(reward_time_per_era()); @@ -2311,16 +2487,16 @@ fn bond_with_little_staked_value_bounded() { mock::make_all_reward_payment(1); assert_eq_uvec!(validator_controllers(), vec![21, 11, 1]); - assert_eq!(Staking::eras_stakers(active_era(), 2).total, 0); + assert_eq!(Staking::eras_stakers(active_era(), &2).total, 0); // 2 is now rewarded. assert_eq_error_rate!( - Balances::free_balance(1), + asset::stakeable_balance::(&1), init_balance_1 + total_payout_1 / 3, 1 ); assert_eq_error_rate!( - Balances::free_balance(&11), + asset::stakeable_balance::(&11), init_balance_11 + total_payout_0 / 3 + total_payout_1 / 3, 2, ); @@ -2338,7 +2514,7 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider() { // ensure all have equal stake. assert_eq!( >::iter() - .map(|(v, _)| (v, Staking::ledger(v).unwrap().total)) + .map(|(v, _)| (v, Staking::ledger(v.into()).unwrap().total)) .collect::>(), vec![(31, 1000), (21, 1000), (11, 1000)], ); @@ -2351,54 +2527,48 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider() { // give the man some money. let initial_balance = 1000; for i in [1, 2, 3, 4].iter() { - let _ = Balances::make_free_balance_be(i, initial_balance); + let _ = asset::set_stakeable_balance::(&i, initial_balance); } - provide_did_to_user(1); assert_ok!(Staking::bond( RuntimeOrigin::signed(1), 1000, - RewardDestination::Controller + RewardDestination::Account(1) )); assert_ok!(Staking::nominate( RuntimeOrigin::signed(1), vec![11, 11, 11, 21, 31] )); - provide_did_to_user(3); assert_ok!(Staking::bond( RuntimeOrigin::signed(3), 1000, - RewardDestination::Controller + RewardDestination::Account(3) )); assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![21, 31])); // winners should be 21 and 31. Otherwise this election is taking duplicates into // account. let supports = ::ElectionProvider::elect().unwrap(); - assert_eq!(supports.len(), 2); - assert_eq!(supports[0].0, 21); - assert_eq!(supports[1].0, 31); - - //assert_eq!( - // supports, - // vec![ - // ( - // 21, - // Support { - // total: 1800, - // voters: vec![(21, 1000), (1, 400), (3, 400)] - // } - // ), - // ( - // 31, - // Support { - // total: 2200, - // voters: vec![(31, 1000), (1, 600), (3, 600)] - // } - // ) - // ], - //); + assert_eq!( + supports, + vec![ + ( + 21, + Support { + total: 1800, + voters: vec![(21, 1000), (1, 400), (3, 400)] + } + ), + ( + 31, + Support { + total: 2200, + voters: vec![(31, 1000), (1, 600), (3, 600)] + } + ) + ], + ); }); } @@ -2414,7 +2584,7 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider_elected() { // ensure all have equal stake. assert_eq!( >::iter() - .map(|(v, _)| (v, Staking::ledger(v).unwrap().total)) + .map(|(v, _)| (v, Staking::ledger(v.into()).unwrap().total)) .collect::>(), vec![(31, 1000), (21, 1000), (11, 1000)], ); @@ -2425,52 +2595,47 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider_elected() { // give the man some money. let initial_balance = 1000; for i in [1, 2, 3, 4].iter() { - let _ = Balances::make_free_balance_be(i, initial_balance); + let _ = asset::set_stakeable_balance::(&i, initial_balance); } - provide_did_to_user(1); assert_ok!(Staking::bond( RuntimeOrigin::signed(1), 1000, - RewardDestination::Controller + RewardDestination::Account(1) )); assert_ok!(Staking::nominate( RuntimeOrigin::signed(1), vec![11, 11, 11, 21] )); - provide_did_to_user(3); assert_ok!(Staking::bond( RuntimeOrigin::signed(3), 1000, - RewardDestination::Controller + RewardDestination::Account(3) )); assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![21])); // winners should be 21 and 11. let supports = ::ElectionProvider::elect().unwrap(); - assert_eq!(supports.len(), 2); - assert_eq!(supports[0].0, 11); - assert_eq!(supports[1].0, 21); - // assert_eq!( - // supports, - // vec![ - // ( - // 11, - // Support { - // total: 1500, - // voters: vec![(11, 1000), (1, 500)] - // } - // ), - // ( - // 21, - // Support { - // total: 2500, - // voters: vec![(21, 1000), (1, 500), (3, 1000)] - // } - // ) - // ], - // ); + assert_eq!( + supports, + vec![ + ( + 11, + Support { + total: 1500, + voters: vec![(11, 1000), (1, 500)] + } + ), + ( + 21, + Support { + total: 2500, + voters: vec![(21, 1000), (1, 500), (3, 1000)] + } + ) + ], + ); }); } @@ -2480,7 +2645,7 @@ fn new_era_elects_correct_number_of_validators() { .nominate(true) .validator_count(1) .build_and_execute(|| { - assert_eq!(Staking::validator_count(), 1); + assert_eq!(ValidatorCount::::get(), 1); assert_eq!(validator_controllers().len(), 1); Session::on_initialize(System::block_number()); @@ -2509,8 +2674,8 @@ fn phragmen_should_not_overflow() { assert_eq_uvec!(validator_controllers(), vec![3, 5]); // We can safely convert back to values within [u64, u128]. - assert!(Staking::eras_stakers(active_era(), 3).total > Votes::max_value() as Balance); - assert!(Staking::eras_stakers(active_era(), 5).total > Votes::max_value() as Balance); + assert!(Staking::eras_stakers(active_era(), &3).total > Votes::max_value() as Balance); + assert!(Staking::eras_stakers(active_era(), &5).total > Votes::max_value() as Balance); }) } @@ -2524,7 +2689,7 @@ fn reward_validator_slashing_validator_does_not_overflow() { assert!(stake.checked_mul(reward_slash).is_none()); // Set staker - let _ = Balances::make_free_balance_be(&11, stake); + let _ = asset::set_stakeable_balance::(&11, stake); let exposure = Exposure:: { total: stake, @@ -2538,27 +2703,42 @@ fn reward_validator_slashing_validator_does_not_overflow() { // Check reward ErasRewardPoints::::insert(0, reward); - ErasStakers::::insert(0, 11, &exposure); - ErasStakersClipped::::insert(0, 11, exposure); + EraInfo::::set_exposure(0, &11, exposure); ErasValidatorReward::::insert(0, stake); - assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 0)); - assert_eq!(Balances::total_balance(&11), stake * 2); + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 0, + 0 + )); + assert_eq!(asset::stakeable_balance::(&11), stake * 2); - // Set staker - let _ = Balances::make_free_balance_be(&11, stake); - let _ = Balances::make_free_balance_be(&2, stake); + // ensure ledger has `stake` and no more. + Ledger::::insert( + 11, + StakingLedgerInspect { + stash: 11, + total: stake, + active: stake, + unlocking: Default::default(), + legacy_claimed_rewards: bounded_vec![1], + }, + ); + // Set staker (unsafe, can reduce balance below actual stake) + let _ = asset::set_stakeable_balance::(&11, stake); + let _ = asset::set_stakeable_balance::(&2, stake); // only slashes out of bonded stake are applied. without this line, it is 0. Staking::bond( RuntimeOrigin::signed(2), stake - 1, - RewardDestination::default(), + RewardDestination::Staked, ) .unwrap(); // Override exposure of 11 - ErasStakers::::insert( + EraInfo::::set_exposure( 0, - 11, + &11, Exposure { total: stake, own: 1, @@ -2570,20 +2750,10 @@ fn reward_validator_slashing_validator_does_not_overflow() { ); // Check slashing - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(100)], - ); - - assert_eq!(Balances::total_balance(&11), stake - 1); - // Polymesh change - // ---------------------------------------------------------------- - // Nominators slashing is switched off - // assert_eq!(Balances::total_balance(&2), 1); - // ---------------------------------------------------------------- + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(100)]); + + assert_eq!(asset::stakeable_balance::(&11), stake - 1); + assert_eq!(asset::stakeable_balance::(&2), 1); }) } @@ -2654,13 +2824,13 @@ fn era_is_always_same_length() { mock::start_active_era(1); assert_eq!( - Staking::eras_start_session_index(current_era()).unwrap(), + ErasStartSessionIndex::::get(current_era()).unwrap(), session_per_era ); mock::start_active_era(2); assert_eq!( - Staking::eras_start_session_index(current_era()).unwrap(), + ErasStartSessionIndex::::get(current_era()).unwrap(), session_per_era * 2u32 ); @@ -2670,30 +2840,24 @@ fn era_is_always_same_length() { advance_session(); assert_eq!(current_era(), 3); assert_eq!( - Staking::eras_start_session_index(current_era()).unwrap(), + ErasStartSessionIndex::::get(current_era()).unwrap(), session + 2 ); mock::start_active_era(4); assert_eq!( - Staking::eras_start_session_index(current_era()).unwrap(), + ErasStartSessionIndex::::get(current_era()).unwrap(), session + 2u32 + session_per_era ); }); } #[test] -fn offence_forces_new_era() { +fn offence_doesnt_force_new_era() { ExtBuilder::default().build_and_execute(|| { - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(5)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(5)]); - assert_eq!(Staking::force_era(), Forcing::ForceNew); + assert_eq!(ForceEra::::get(), Forcing::NotForcing); }); } @@ -2701,41 +2865,11 @@ fn offence_forces_new_era() { fn offence_ensures_new_era_without_clobbering() { ExtBuilder::default().build_and_execute(|| { assert_ok!(Staking::force_new_era_always(RuntimeOrigin::root())); - assert_eq!(Staking::force_era(), Forcing::ForceAlways); - - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(5)], - ); - - assert_eq!(Staking::force_era(), Forcing::ForceAlways); - }); -} - -#[test] -fn offence_deselects_validator_even_when_slash_is_zero() { - ExtBuilder::default().build_and_execute(|| { - assert!(Session::validators().contains(&11)); - assert!(>::contains_key(11)); - - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(0)], - ); - - assert_eq!(Staking::force_era(), Forcing::ForceNew); - assert!(!>::contains_key(11)); + assert_eq!(ForceEra::::get(), Forcing::ForceAlways); - mock::start_active_era(1); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(5)]); - assert!(!Session::validators().contains(&11)); - assert!(!>::contains_key(11)); + assert_eq!(ForceEra::::get(), Forcing::ForceAlways); }); } @@ -2744,94 +2878,13 @@ fn slashing_performed_according_exposure() { // This test checks that slashing is performed according the exposure (or more precisely, // historical exposure), not the current balance. ExtBuilder::default().build_and_execute(|| { - assert_eq!(Staking::eras_stakers(active_era(), 11).own, 1000); + assert_eq!(Staking::eras_stakers(active_era(), &11).own, 1000); // Handle an offence with a historical exposure. - on_offence_now( - &[OffenceDetails { - offender: ( - 11, - Exposure { - total: 500, - own: 500, - others: vec![], - }, - ), - reporters: vec![], - }], - &[Perbill::from_percent(50)], - ); - - // The stash account should be slashed for 250 (50% of 500). - assert_eq!(Balances::free_balance(11), 1000 - 250); - }); -} - -#[test] -fn slash_in_old_span_does_not_deselect() { - ExtBuilder::default().build_and_execute(|| { - mock::start_active_era(1); - - assert!(>::contains_key(11)); - assert!(Session::validators().contains(&11)); - - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(0)], - ); - - assert_eq!(Staking::force_era(), Forcing::ForceNew); - assert!(!>::contains_key(11)); - - mock::start_active_era(2); - - Staking::validate(RuntimeOrigin::signed(11), Default::default()).unwrap(); - assert_eq!(Staking::force_era(), Forcing::NotForcing); - assert!(>::contains_key(11)); - assert!(!Session::validators().contains(&11)); - - mock::start_active_era(3); - - // this staker is in a new slashing span now, having re-registered after - // their prior slash. - - on_offence_in_era( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(0)], - 1, - DisableStrategy::WhenSlashed, - ); - - // the validator doesn't get chilled again - assert!(Validators::::iter().any(|(stash, _)| stash == 11)); - - // but we are still forcing a new era - assert_eq!(Staking::force_era(), Forcing::ForceNew); - - on_offence_in_era( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - // NOTE: A 100% slash here would clean up the account, causing de-registration. - &[Perbill::from_percent(95)], - 1, - DisableStrategy::WhenSlashed, - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(50)]); - // the validator doesn't get chilled again - assert!(Validators::::iter().any(|(stash, _)| stash == 11)); - - // but it's disabled - assert!(is_disabled(11)); - // and we are still forcing a new era - assert_eq!(Staking::force_era(), Forcing::ForceNew); + // The stash account should be slashed for 500 (50% of 1000). + assert_eq!(asset::stakeable_balance::(&11), 500); }); } @@ -2841,15 +2894,15 @@ fn reporters_receive_their_slice() { // amount. ExtBuilder::default().build_and_execute(|| { // The reporters' reward is calculated from the total exposure. - let initial_balance = 1_000; + let initial_balance = 1125; - assert_eq!(Staking::eras_stakers(active_era(), 11).own, initial_balance); + assert_eq!( + Staking::eras_stakers(active_era(), &11).total, + initial_balance + ); on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![1, 2], - }], + &[offence_from(11, Some(vec![1, 2]))], &[Perbill::from_percent(50)], ); @@ -2857,8 +2910,8 @@ fn reporters_receive_their_slice() { // 50% * (10% * initial_balance / 2) let reward = (initial_balance / 20) / 2; let reward_each = reward / 2; // split into two pieces. - assert_eq!(Balances::free_balance(1), 10 + reward_each); - assert_eq!(Balances::free_balance(2), 20 + reward_each); + assert_eq!(asset::total_balance::(&1), 10 + reward_each); + assert_eq!(asset::total_balance::(&2), 20 + reward_each); }); } @@ -2868,28 +2921,25 @@ fn subsequent_reports_in_same_span_pay_out_less() { // amount, but less and less if they submit multiple reports in one span. ExtBuilder::default().build_and_execute(|| { // The reporters' reward is calculated from the total exposure. - let initial_balance = 1_000; + let initial_balance = 1125; - assert_eq!(Staking::eras_stakers(active_era(), 11).own, initial_balance); + assert_eq!( + Staking::eras_stakers(active_era(), &11).total, + initial_balance + ); on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![1], - }], + &[offence_from(11, Some(vec![1]))], &[Perbill::from_percent(20)], ); // F1 * (reward_proportion * slash - 0) // 50% * (10% * initial_balance * 20%) let reward = (initial_balance / 5) / 20; - assert_eq!(Balances::free_balance(1), 10 + reward); + assert_eq!(asset::total_balance::(&1), 10 + reward); on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![1], - }], + &[offence_from(11, Some(vec![1]))], &[Perbill::from_percent(50)], ); @@ -2898,7 +2948,7 @@ fn subsequent_reports_in_same_span_pay_out_less() { // F1 * (reward_proportion * slash - prior_payout) // 50% * (10% * (initial_balance / 2) - prior_payout) let reward = ((initial_balance / 20) - prior_payout) / 2; - assert_eq!(Balances::free_balance(1), 10 + prior_payout + reward); + assert_eq!(asset::total_balance::(&1), 10 + prior_payout + reward); }); } @@ -2908,51 +2958,38 @@ fn invulnerables_are_not_slashed() { ExtBuilder::default() .invulnerables(vec![11]) .build_and_execute(|| { - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(21), 2000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&21), 2000); - let exposure = Staking::eras_stakers(active_era(), 21); + let exposure = Staking::eras_stakers(active_era(), &21); let initial_balance = Staking::slashable_balance_of(&21); - let _nominator_balances: Vec<_> = exposure + let nominator_balances: Vec<_> = exposure .others .iter() - .map(|o| Balances::free_balance(&o.who)) + .map(|o| asset::stakeable_balance::(&o.who)) .collect(); on_offence_now( - &[ - OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }, - OffenceDetails { - offender: (21, Staking::eras_stakers(active_era(), 21)), - reporters: vec![], - }, - ], + &[offence_from(11, None), offence_from(21, None)], &[Perbill::from_percent(50), Perbill::from_percent(20)], ); // The validator 11 hasn't been slashed, but 21 has been. - assert_eq!(Balances::free_balance(11), 1000); + assert_eq!(asset::stakeable_balance::(&11), 1000); // 2000 - (0.2 * initial_balance) assert_eq!( - Balances::free_balance(21), + asset::stakeable_balance::(&21), 2000 - (2 * initial_balance / 10) ); - // Polymesh change - // ----------------------------------------------------------------- - // Nominators slashing is switched off - // // ensure that nominators were slashed as well. - // for (initial_balance, other) in nominator_balances.into_iter().zip(exposure.others) { - // assert_eq!( - // Balances::free_balance(&other.who), - // initial_balance - (2 * other.value / 10), - // ); - // } - // ----------------------------------------------------------------- + // ensure that nominators were slashed as well. + for (initial_balance, other) in nominator_balances.into_iter().zip(exposure.others) { + assert_eq!( + asset::stakeable_balance::(&other.who), + initial_balance - (2 * other.value / 10), + ); + } }); } @@ -2960,19 +2997,13 @@ fn invulnerables_are_not_slashed() { fn dont_slash_if_fraction_is_zero() { // Don't slash if the fraction is zero. ExtBuilder::default().build_and_execute(|| { - assert_eq!(Balances::free_balance(11), 1000); + assert_eq!(asset::stakeable_balance::(&11), 1000); - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(0)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(0)]); // The validator hasn't been slashed. The new era is not forced. - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Staking::force_era(), Forcing::ForceNew); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(ForceEra::::get(), Forcing::NotForcing); }); } @@ -2981,41 +3012,23 @@ fn only_slash_for_max_in_era() { // multiple slashes within one era are only applied if it is more than any previous slash in the // same era. ExtBuilder::default().build_and_execute(|| { - assert_eq!(Balances::free_balance(11), 1000); + assert_eq!(asset::stakeable_balance::(&11), 1000); - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(50)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(50)]); // The validator has been slashed and has been force-chilled. - assert_eq!(Balances::free_balance(11), 500); - assert_eq!(Staking::force_era(), Forcing::ForceNew); + assert_eq!(asset::stakeable_balance::(&11), 500); + assert_eq!(ForceEra::::get(), Forcing::NotForcing); - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(25)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(25)]); // The validator has not been slashed additionally. - assert_eq!(Balances::free_balance(11), 500); + assert_eq!(asset::stakeable_balance::(&11), 500); - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(60)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(60)]); // The validator got slashed 10% more. - assert_eq!(Balances::free_balance(11), 400); + assert_eq!(asset::stakeable_balance::(&11), 400); }) } @@ -3023,36 +3036,25 @@ fn only_slash_for_max_in_era() { fn garbage_collection_after_slashing() { // ensures that `SlashingSpans` and `SpanSlash` of an account is removed after reaping. ExtBuilder::default() - .existential_deposit(0) + .existential_deposit(2) .balance_factor(2) .build_and_execute(|| { - assert_eq!(Balances::free_balance(11), 2000); + assert_eq!(asset::stakeable_balance::(&11), 2000); - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(10)]); - assert_eq!(Balances::free_balance(11), 2000 - 200); + assert_eq!(asset::stakeable_balance::(&11), 2000 - 200); assert!(SlashingSpans::::get(&11).is_some()); assert_eq!(SpanSlash::::get(&(11, 0)).amount(), &200); - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(100)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(100)]); // validator and nominator slash in era are garbage-collected by era change, // so we don't test those here. - assert_eq!(Balances::free_balance(11), 0); - assert_eq!(Balances::total_balance(&11), 0); + assert_eq!(asset::stakeable_balance::(&11), 0); + // Non staked balance is not touched. + assert_eq!(asset::total_balance::(&11), ExistentialDeposit::get()); let slashing_spans = SlashingSpans::::get(&11).unwrap(); assert_eq!(slashing_spans.iter().count(), 2); @@ -3076,35 +3078,28 @@ fn garbage_collection_on_window_pruning() { ExtBuilder::default().build_and_execute(|| { mock::start_active_era(1); - assert_eq!(Balances::free_balance(11), 1000); + assert_eq!(asset::stakeable_balance::(&11), 1000); let now = active_era(); - let exposure = Staking::eras_stakers(now, 11); - assert_eq!(Balances::free_balance(101), 2000); - let _nominated_value = exposure.others.iter().find(|o| o.who == 101).unwrap().value; + let exposure = Staking::eras_stakers(now, &11); + assert_eq!(asset::stakeable_balance::(&101), 2000); + let nominated_value = exposure.others.iter().find(|o| o.who == 101).unwrap().value; - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(now, 11)), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(10)]); - assert_eq!(Balances::free_balance(11), 900); - // Polymesh change - // ----------------------------------------------------------------- - // Nominators slashing is switched off - // assert_eq!(Balances::free_balance(101), 2000 - (nominated_value / 10)); - // ----------------------------------------------------------------- + assert_eq!(asset::stakeable_balance::(&11), 900); + assert_eq!( + asset::stakeable_balance::(&101), + 2000 - (nominated_value / 10) + ); assert!(ValidatorSlashInEra::::get(&now, &11).is_some()); - assert!(NominatorSlashInEra::::get(&now, &101).is_none()); + assert!(NominatorSlashInEra::::get(&now, &101).is_some()); // + 1 because we have to exit the bonding window. for era in (0..(BondingDuration::get() + 1)).map(|offset| offset + now + 1) { assert!(ValidatorSlashInEra::::get(&now, &11).is_some()); - assert!(NominatorSlashInEra::::get(&now, &101).is_none()); + assert!(NominatorSlashInEra::::get(&now, &101).is_some()); mock::start_active_era(era); } @@ -3121,13 +3116,13 @@ fn slashing_nominators_by_span_max() { mock::start_active_era(2); mock::start_active_era(3); - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(21), 2000); - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&21), 2000); + assert_eq!(asset::stakeable_balance::(&101), 2000); assert_eq!(Staking::slashable_balance_of(&21), 1000); - let exposure_11 = Staking::eras_stakers(active_era(), 11); - let exposure_21 = Staking::eras_stakers(active_era(), 21); + let exposure_11 = Staking::eras_stakers(active_era(), &11); + let exposure_21 = Staking::eras_stakers(active_era(), &21); let nominated_value_11 = exposure_11 .others .iter() @@ -3141,24 +3136,15 @@ fn slashing_nominators_by_span_max() { .unwrap() .value; - on_offence_in_era( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - 2, - DisableStrategy::WhenSlashed, - ); + on_offence_in_era(&[offence_from(11, None)], &[Perbill::from_percent(10)], 2); - assert_eq!(Balances::free_balance(11), 900); + assert_eq!(asset::stakeable_balance::(&11), 900); - // Polymesh change - // ----------------------------------------------------------------- - // Nominators slashing is switched off let slash_1_amount = Perbill::from_percent(10) * nominated_value_11; - assert_eq!(Balances::free_balance(101), 2000); - // ----------------------------------------------------------------- + assert_eq!( + asset::stakeable_balance::(&101), + 2000 - slash_1_amount + ); let expected_spans = vec![ slashing::SlashingSpan { @@ -3177,51 +3163,41 @@ fn slashing_nominators_by_span_max() { assert_eq!(get_span(11).iter().collect::>(), expected_spans); - //assert_eq!(get_span(101).iter().collect::>(), expected_spans); + assert_eq!(get_span(101).iter().collect::>(), expected_spans); // second slash: higher era, higher value, same span. - on_offence_in_era( - &[OffenceDetails { - offender: (21, Staking::eras_stakers(active_era(), 21)), - reporters: vec![], - }], - &[Perbill::from_percent(30)], - 3, - DisableStrategy::WhenSlashed, - ); + on_offence_in_era(&[offence_from(21, None)], &[Perbill::from_percent(30)], 3); // 11 was not further slashed, but 21 and 101 were. - assert_eq!(Balances::free_balance(11), 900); - assert_eq!(Balances::free_balance(21), 1700); + assert_eq!(asset::stakeable_balance::(&11), 900); + assert_eq!(asset::stakeable_balance::(&21), 1700); let slash_2_amount = Perbill::from_percent(30) * nominated_value_21; assert!(slash_2_amount > slash_1_amount); // only the maximum slash in a single span is taken. - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!( + asset::stakeable_balance::(&101), + 2000 - slash_2_amount + ); // third slash: in same era and on same validator as first, higher // in-era value, but lower slash value than slash 2. - on_offence_in_era( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(20)], - 2, - DisableStrategy::WhenSlashed, - ); + on_offence_in_era(&[offence_from(11, None)], &[Perbill::from_percent(20)], 2); // 11 was further slashed, but 21 and 101 were not. - assert_eq!(Balances::free_balance(11), 800); - assert_eq!(Balances::free_balance(21), 1700); + assert_eq!(asset::stakeable_balance::(&11), 800); + assert_eq!(asset::stakeable_balance::(&21), 1700); let slash_3_amount = Perbill::from_percent(20) * nominated_value_21; assert!(slash_3_amount < slash_2_amount); assert!(slash_3_amount > slash_1_amount); // only the maximum slash in a single span is taken. - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!( + asset::stakeable_balance::(&101), + 2000 - slash_2_amount + ); }); } @@ -3232,18 +3208,12 @@ fn slashes_are_summed_across_spans() { mock::start_active_era(2); mock::start_active_era(3); - assert_eq!(Balances::free_balance(21), 2000); + assert_eq!(asset::stakeable_balance::(&21), 2000); assert_eq!(Staking::slashable_balance_of(&21), 1000); let get_span = |account| SlashingSpans::::get(&account).unwrap(); - on_offence_now( - &[OffenceDetails { - offender: (21, Staking::eras_stakers(active_era(), 21)), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - ); + on_offence_now(&[offence_from(21, None)], &[Perbill::from_percent(10)]); let expected_spans = vec![ slashing::SlashingSpan { @@ -3259,7 +3229,7 @@ fn slashes_are_summed_across_spans() { ]; assert_eq!(get_span(21).iter().collect::>(), expected_spans); - assert_eq!(Balances::free_balance(21), 1900); + assert_eq!(asset::stakeable_balance::(&21), 1900); // 21 has been force-chilled. re-signal intent to validate. Staking::validate(RuntimeOrigin::signed(21), Default::default()).unwrap(); @@ -3268,13 +3238,7 @@ fn slashes_are_summed_across_spans() { assert_eq!(Staking::slashable_balance_of(&21), 900); - on_offence_now( - &[OffenceDetails { - offender: (21, Staking::eras_stakers(active_era(), 21)), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - ); + on_offence_now(&[offence_from(21, None)], &[Perbill::from_percent(10)]); let expected_spans = vec![ slashing::SlashingSpan { @@ -3295,7 +3259,7 @@ fn slashes_are_summed_across_spans() { ]; assert_eq!(get_span(21).iter().collect::>(), expected_spans); - assert_eq!(Balances::free_balance(21), 1810); + assert_eq!(asset::stakeable_balance::(&21), 1810); }); } @@ -3306,69 +3270,60 @@ fn deferred_slashes_are_deferred() { .build_and_execute(|| { mock::start_active_era(1); - assert_eq!(Balances::free_balance(11), 1000); + assert_eq!(asset::stakeable_balance::(&11), 1000); - let exposure = Staking::eras_stakers(active_era(), 11); - assert_eq!(Balances::free_balance(101), 2000); - let _nominated_value = exposure.others.iter().find(|o| o.who == 101).unwrap().value; + let exposure = Staking::eras_stakers(active_era(), &11); + assert_eq!(asset::stakeable_balance::(&101), 2000); + let nominated_value = exposure.others.iter().find(|o| o.who == 101).unwrap().value; System::reset_events(); - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(10)]); // nominations are not removed regardless of the deferring. - assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); + assert_eq!(Nominators::::get(101).unwrap().targets, vec![11, 21]); - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); mock::start_active_era(2); - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); mock::start_active_era(3); - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); // at the start of era 4, slashes from era 1 are processed, // after being deferred for at least 2 full eras. mock::start_active_era(4); - assert_eq!(Balances::free_balance(11), 900); - // Polymesh change - // ----------------------------------------------------------------- - // Nominators slashing is switched off - // assert_eq!(Balances::free_balance(101), 2000 - (nominated_value / 10)); - // ----------------------------------------------------------------- + assert_eq!(asset::stakeable_balance::(&11), 900); + assert_eq!( + asset::stakeable_balance::(&101), + 2000 - (nominated_value / 10) + ); + assert!(matches!( staking_events_since_last_call().as_slice(), &[ - Event::Chilled { stash: 11 }, - Event::ForceEra { - mode: Forcing::ForceNew - }, Event::SlashReported { validator: 11, slash_era: 1, .. }, Event::StakersElected, - Event::ForceEra { - mode: Forcing::NotForcing - }, .., Event::Slashed { staker: 11, amount: 100 }, + Event::Slashed { + staker: 101, + amount: 12 + } ] )); }) @@ -3381,22 +3336,15 @@ fn retroactive_deferred_slashes_two_eras_before() { .build_and_execute(|| { assert_eq!(BondingDuration::get(), 3); - mock::start_active_era(1); - let exposure_11_at_era1 = Staking::eras_stakers(active_era(), 11); - mock::start_active_era(3); - assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); + assert_eq!(Nominators::::get(101).unwrap().targets, vec![11, 21]); System::reset_events(); on_offence_in_era( - &[OffenceDetails { - offender: (11, exposure_11_at_era1), - reporters: vec![], - }], + &[offence_from(11, None)], &[Perbill::from_percent(10)], 1, // should be deferred for two full eras, and applied at the beginning of era 4. - DisableStrategy::Never, ); mock::start_active_era(4); @@ -3404,10 +3352,6 @@ fn retroactive_deferred_slashes_two_eras_before() { assert!(matches!( staking_events_since_last_call().as_slice(), &[ - Event::Chilled { stash: 11 }, - Event::ForceEra { - mode: Forcing::ForceNew - }, Event::SlashReported { validator: 11, slash_era: 1, @@ -3418,6 +3362,10 @@ fn retroactive_deferred_slashes_two_eras_before() { staker: 11, amount: 100 }, + Event::Slashed { + staker: 101, + amount: 12 + } ] )); }) @@ -3430,9 +3378,6 @@ fn retroactive_deferred_slashes_one_before() { .build_and_execute(|| { assert_eq!(BondingDuration::get(), 3); - mock::start_active_era(1); - let exposure_11_at_era1 = Staking::eras_stakers(active_era(), 11); - // unbond at slash era. mock::start_active_era(2); assert_ok!(Staking::chill(RuntimeOrigin::signed(11))); @@ -3441,18 +3386,14 @@ fn retroactive_deferred_slashes_one_before() { mock::start_active_era(3); System::reset_events(); on_offence_in_era( - &[OffenceDetails { - offender: (11, exposure_11_at_era1), - reporters: vec![], - }], + &[offence_from(11, None)], &[Perbill::from_percent(10)], 2, // should be deferred for two full eras, and applied at the beginning of era 5. - DisableStrategy::Never, ); mock::start_active_era(4); - assert_eq!(Staking::ledger(11).unwrap().total, 1000); + assert_eq!(Staking::ledger(11.into()).unwrap().total, 1000); // slash happens after the next line. mock::start_active_era(5); @@ -3469,13 +3410,17 @@ fn retroactive_deferred_slashes_one_before() { staker: 11, amount: 100 }, + Event::Slashed { + staker: 101, + amount: 12 + } ] )); // their ledger has already been slashed. - assert_eq!(Staking::ledger(11).unwrap().total, 900); + assert_eq!(Staking::ledger(11.into()).unwrap().total, 900); assert_ok!(Staking::unbond(RuntimeOrigin::signed(11), 1000)); - assert_eq!(Staking::ledger(11).unwrap().total, 900); + assert_eq!(Staking::ledger(11.into()).unwrap().total, 900); }) } @@ -3487,34 +3432,28 @@ fn staker_cannot_bail_deferred_slash() { .build_and_execute(|| { mock::start_active_era(1); - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); - let exposure = Staking::eras_stakers(active_era(), 11); - let _nominated_value = exposure.others.iter().find(|o| o.who == 101).unwrap().value; + let exposure = Staking::eras_stakers(active_era(), &11); + let nominated_value = exposure.others.iter().find(|o| o.who == 101).unwrap().value; - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(10)]); // now we chill assert_ok!(Staking::chill(RuntimeOrigin::signed(101))); assert_ok!(Staking::unbond(RuntimeOrigin::signed(101), 500)); - assert_eq!(Staking::current_era().unwrap(), 1); + assert_eq!(CurrentEra::::get().unwrap(), 1); assert_eq!(active_era(), 1); assert_eq!( Ledger::::get(101).unwrap(), - StakingLedger { + StakingLedgerInspect { active: 0, total: 500, stash: 101, - claimed_rewards: bounded_vec![], + legacy_claimed_rewards: bounded_vec![], unlocking: bounded_vec![UnlockChunk { era: 4u32, value: 500 @@ -3523,21 +3462,21 @@ fn staker_cannot_bail_deferred_slash() { ); // no slash yet. - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); // no slash yet. mock::start_active_era(2); - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(101), 2000); - assert_eq!(Staking::current_era().unwrap(), 2); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); + assert_eq!(CurrentEra::::get().unwrap(), 2); assert_eq!(active_era(), 2); // no slash yet. mock::start_active_era(3); - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(101), 2000); - assert_eq!(Staking::current_era().unwrap(), 3); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); + assert_eq!(CurrentEra::::get().unwrap(), 3); assert_eq!(active_era(), 3); // and cannot yet unbond: @@ -3558,12 +3497,11 @@ fn staker_cannot_bail_deferred_slash() { // after being deferred for at least 2 full eras. mock::start_active_era(4); - assert_eq!(Balances::free_balance(11), 900); - // Polymesh change - // ----------------------------------------------------------------- - // Nominators slashing is switched off - assert_eq!(Balances::free_balance(101), 2000); - // ----------------------------------------------------------------- + assert_eq!(asset::stakeable_balance::(&11), 900); + assert_eq!( + asset::stakeable_balance::(&101), + 2000 - (nominated_value / 10) + ); // and the leftover of the funds can now be unbonded. }) @@ -3576,37 +3514,23 @@ fn remove_deferred() { .build_and_execute(|| { mock::start_active_era(1); - assert_eq!(Balances::free_balance(11), 1000); + assert_eq!(asset::stakeable_balance::(&11), 1000); - let exposure = Staking::eras_stakers(active_era(), 11); - assert_eq!(Balances::free_balance(101), 2000); + let exposure = Staking::eras_stakers(active_era(), &11); + assert_eq!(asset::stakeable_balance::(&101), 2000); let nominated_value = exposure.others.iter().find(|o| o.who == 101).unwrap().value; // deferred to start of era 4. - on_offence_now( - &[OffenceDetails { - offender: (11, exposure.clone()), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(10)]); - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); mock::start_active_era(2); // reported later, but deferred to start of era 4 as well. System::reset_events(); - on_offence_in_era( - &[OffenceDetails { - offender: (11, exposure.clone()), - reporters: vec![], - }], - &[Perbill::from_percent(15)], - 1, - DisableStrategy::WhenSlashed, - ); + on_offence_in_era(&[offence_from(11, None)], &[Perbill::from_percent(15)], 1); // fails if empty assert_noop!( @@ -3621,13 +3545,13 @@ fn remove_deferred() { vec![0] )); - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); mock::start_active_era(3); - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); // at the start of era 4, slashes from era 1 are processed, // after being deferred for at least 2 full eras. @@ -3647,6 +3571,10 @@ fn remove_deferred() { staker: 11, amount: 50 }, + Event::Slashed { + staker: 101, + amount: 7 + } ] )); @@ -3655,15 +3583,11 @@ fn remove_deferred() { let initial_slash = slash_10 * nominated_value; let total_slash = slash_15 * nominated_value; - let _actual_slash = total_slash - initial_slash; + let actual_slash = total_slash - initial_slash; - // Polymesh change - // ----------------------------------------------------------------- - // Nominator slashing is switched off // 5% slash (15 - 10) processed now. - assert_eq!(Balances::free_balance(11), 950); - assert_eq!(Balances::free_balance(101), 2000); - // ----------------------------------------------------------------- + assert_eq!(asset::stakeable_balance::(&11), 950); + assert_eq!(asset::stakeable_balance::(&101), 2000 - actual_slash); }) } @@ -3671,53 +3595,24 @@ fn remove_deferred() { fn remove_multi_deferred() { ExtBuilder::default() .slash_defer_duration(2) + .validator_count(4) + .set_status(41, StakerStatus::Validator) + .set_status(51, StakerStatus::Validator) .build_and_execute(|| { mock::start_active_era(1); - assert_eq!(Balances::free_balance(11), 1000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); - let exposure = Staking::eras_stakers(active_era(), 11); - assert_eq!(Balances::free_balance(101), 2000); - - on_offence_now( - &[OffenceDetails { - offender: (11, exposure.clone()), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(10)]); - on_offence_now( - &[OffenceDetails { - offender: (21, Staking::eras_stakers(active_era(), 21)), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - ); + on_offence_now(&[offence_from(21, None)], &[Perbill::from_percent(10)]); - on_offence_now( - &[OffenceDetails { - offender: (11, exposure.clone()), - reporters: vec![], - }], - &[Perbill::from_percent(25)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(25)]); - on_offence_now( - &[OffenceDetails { - offender: (42, exposure.clone()), - reporters: vec![], - }], - &[Perbill::from_percent(25)], - ); + on_offence_now(&[offence_from(41, None)], &[Perbill::from_percent(25)]); - on_offence_now( - &[OffenceDetails { - offender: (69, exposure.clone()), - reporters: vec![], - }], - &[Perbill::from_percent(25)], - ); + on_offence_now(&[offence_from(51, None)], &[Perbill::from_percent(25)]); assert_eq!(UnappliedSlashes::::get(&4).len(), 5); @@ -3746,378 +3641,10 @@ fn remove_multi_deferred() { let slashes = UnappliedSlashes::::get(&4); assert_eq!(slashes.len(), 2); assert_eq!(slashes[0].validator, 21); - assert_eq!(slashes[1].validator, 42); + assert_eq!(slashes[1].validator, 41); }) } -#[test] -fn slash_kicks_validators_not_nominators_and_disables_nominator_for_kicked_validator() { - ExtBuilder::default().build_and_execute(|| { - mock::start_active_era(1); - assert_eq_uvec!(Session::validators(), vec![11, 21]); - - // pre-slash balance - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(101), 2000); - - // 100 has approval for 11 as of now - assert!(Staking::nominators(101).unwrap().targets.contains(&11)); - - // 11 and 21 both have the support of 100 - let exposure_11 = Staking::eras_stakers(active_era(), &11); - let exposure_21 = Staking::eras_stakers(active_era(), &21); - - assert_eq!(exposure_11.total, 1000 + 125); - assert_eq!(exposure_21.total, 1000 + 375); - - on_offence_now( - &[OffenceDetails { - offender: (11, exposure_11.clone()), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - ); - - assert_eq!( - staking_events_since_last_call(), - vec![ - Event::StakersElected, - Event::EraPaid { - era_index: 0, - validator_payout: 11075, - remainder: 33225 - }, - Event::Chilled { stash: 11 }, - Event::ForceEra { - mode: Forcing::ForceNew - }, - Event::SlashReported { - validator: 11, - fraction: Perbill::from_percent(10), - slash_era: 1 - }, - Event::Slashed { - staker: 11, - amount: 100 - }, - ] - ); - - // post-slash balance - let nominator_slash_amount_11 = 125 / 10; - assert_eq!(Balances::free_balance(11), 900); - // Polymesh change - // ----------------------------------------------------------------- - // Nominators slashing is switched off - assert_eq!(Balances::free_balance(101), 2000); - // ----------------------------------------------------------------- - - // check that validator was chilled. - assert!(Validators::::iter().all(|(stash, _)| stash != 11)); - - // actually re-bond the slashed validator - assert_ok!(Staking::validate( - RuntimeOrigin::signed(11), - Default::default() - )); - - mock::start_active_era(2); - let exposure_11 = Staking::eras_stakers(active_era(), &11); - let exposure_21 = Staking::eras_stakers(active_era(), &21); - - // 11's own expo is reduced. sum of support from 11 is less (448), which is 500 - // 900 + 146 - assert!(matches!( - exposure_11, - Exposure { - own: 900, - total: 1051, - .. - } - )); - // 1000 + 342 - assert!(matches!( - exposure_21, - Exposure { - own: 1000, - total: 1349, - .. - } - )); - assert_eq!(500 - 146 - 342, nominator_slash_amount_11); - }); -} - -#[test] -fn non_slashable_offence_doesnt_disable_validator() { - ExtBuilder::default().build_and_execute(|| { - mock::start_active_era(1); - assert_eq_uvec!(Session::validators(), vec![11, 21]); - - let exposure_11 = Staking::eras_stakers(Staking::active_era().unwrap().index, &11); - let exposure_21 = Staking::eras_stakers(Staking::active_era().unwrap().index, &21); - - // offence with no slash associated - on_offence_now( - &[OffenceDetails { - offender: (11, exposure_11.clone()), - reporters: vec![], - }], - &[Perbill::zero()], - ); - - // it does NOT affect the nominator. - assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); - - // offence that slashes 25% of the bond - on_offence_now( - &[OffenceDetails { - offender: (21, exposure_21.clone()), - reporters: vec![], - }], - &[Perbill::from_percent(25)], - ); - - // it DOES NOT affect the nominator. - assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); - - assert_eq!( - staking_events_since_last_call(), - vec![ - Event::StakersElected, - Event::EraPaid { - era_index: 0, - validator_payout: 11075, - remainder: 33225 - }, - Event::Chilled { stash: 11 }, - Event::ForceEra { - mode: Forcing::ForceNew - }, - Event::SlashReported { - validator: 11, - fraction: Perbill::from_percent(0), - slash_era: 1 - }, - Event::Chilled { stash: 21 }, - Event::SlashReported { - validator: 21, - fraction: Perbill::from_percent(25), - slash_era: 1 - }, - Event::Slashed { - staker: 21, - amount: 250 - }, - ] - ); - - // the offence for validator 10 wasn't slashable so it wasn't disabled - assert!(!is_disabled(11)); - // whereas validator 20 gets disabled - assert!(is_disabled(21)); - }); -} - -#[test] -fn slashing_independent_of_disabling_validator() { - ExtBuilder::default().build_and_execute(|| { - mock::start_active_era(1); - assert_eq_uvec!(Session::validators(), vec![11, 21]); - - let exposure_11 = Staking::eras_stakers(Staking::active_era().unwrap().index, &11); - let exposure_21 = Staking::eras_stakers(Staking::active_era().unwrap().index, &21); - - let now = Staking::active_era().unwrap().index; - - // offence with no slash associated, BUT disabling - on_offence_in_era( - &[OffenceDetails { - offender: (11, exposure_11.clone()), - reporters: vec![], - }], - &[Perbill::zero()], - now, - DisableStrategy::Always, - ); - - // nomination remains untouched. - assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); - - // offence that slashes 25% of the bond, BUT not disabling - on_offence_in_era( - &[OffenceDetails { - offender: (21, exposure_21.clone()), - reporters: vec![], - }], - &[Perbill::from_percent(25)], - now, - DisableStrategy::Never, - ); - - // nomination remains untouched. - assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); - - assert_eq!( - staking_events_since_last_call(), - vec![ - Event::StakersElected, - Event::EraPaid { - era_index: 0, - validator_payout: 11075, - remainder: 33225 - }, - Event::Chilled { stash: 11 }, - Event::ForceEra { - mode: Forcing::ForceNew - }, - Event::SlashReported { - validator: 11, - fraction: Perbill::from_percent(0), - slash_era: 1 - }, - Event::Chilled { stash: 21 }, - Event::SlashReported { - validator: 21, - fraction: Perbill::from_percent(25), - slash_era: 1 - }, - Event::Slashed { - staker: 21, - amount: 250 - }, - ] - ); - - // the offence for validator 10 was explicitly disabled - assert!(is_disabled(11)); - // whereas validator 21 is explicitly not disabled - assert!(!is_disabled(21)); - }); -} - -#[test] -fn offence_threshold_triggers_new_era() { - ExtBuilder::default() - .validator_count(4) - .set_status(41, StakerStatus::Validator) - .build_and_execute(|| { - mock::start_active_era(1); - assert_eq_uvec!(Session::validators(), vec![11, 21, 31, 41]); - - assert_eq!( - ::OffendingValidatorsThreshold::get(), - Perbill::from_percent(75), - ); - - // we have 4 validators and an offending validator threshold of 75%, - // once the third validator commits an offence a new era should be forced - - let exposure_11 = Staking::eras_stakers(Staking::active_era().unwrap().index, &11); - let exposure_21 = Staking::eras_stakers(Staking::active_era().unwrap().index, &21); - let exposure_31 = Staking::eras_stakers(Staking::active_era().unwrap().index, &31); - - on_offence_now( - &[OffenceDetails { - offender: (11, exposure_11.clone()), - reporters: vec![], - }], - &[Perbill::zero()], - ); - - assert_eq!(ForceEra::::get(), Forcing::NotForcing); - - on_offence_now( - &[OffenceDetails { - offender: (21, exposure_21.clone()), - reporters: vec![], - }], - &[Perbill::zero()], - ); - - assert_eq!(ForceEra::::get(), Forcing::NotForcing); - - on_offence_now( - &[OffenceDetails { - offender: (31, exposure_31.clone()), - reporters: vec![], - }], - &[Perbill::zero()], - ); - - assert_eq!(ForceEra::::get(), Forcing::ForceNew); - }); -} - -#[test] -fn disabled_validators_are_kept_disabled_for_whole_era() { - ExtBuilder::default() - .validator_count(4) - .set_status(41, StakerStatus::Validator) - .build_and_execute(|| { - mock::start_active_era(1); - assert_eq_uvec!(Session::validators(), vec![11, 21, 31, 41]); - assert_eq!(::SessionsPerEra::get(), 3); - - let exposure_11 = Staking::eras_stakers(Staking::active_era().unwrap().index, &11); - let exposure_21 = Staking::eras_stakers(Staking::active_era().unwrap().index, &21); - - on_offence_now( - &[OffenceDetails { - offender: (11, exposure_11.clone()), - reporters: vec![], - }], - &[Perbill::zero()], - ); - - on_offence_now( - &[OffenceDetails { - offender: (21, exposure_21.clone()), - reporters: vec![], - }], - &[Perbill::from_percent(25)], - ); - - // nominations are not updated. - assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); - - // validator 11 should not be disabled since the offence wasn't slashable - assert!(!is_disabled(11)); - // validator 21 gets disabled since it got slashed - assert!(is_disabled(21)); - - advance_session(); - - // disabled validators should carry-on through all sessions in the era - assert!(!is_disabled(11)); - assert!(is_disabled(21)); - - // validator 11 should now get disabled - on_offence_now( - &[OffenceDetails { - offender: (11, exposure_11.clone()), - reporters: vec![], - }], - &[Perbill::from_percent(25)], - ); - - // nominations are not updated. - assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); - - advance_session(); - - // and both are disabled in the last session of the era - assert!(is_disabled(11)); - assert!(is_disabled(21)); - - mock::start_active_era(2); - - // when a new era starts disabled validators get cleared - assert!(!is_disabled(11)); - assert!(!is_disabled(21)); - }); -} - #[test] fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() { // should check that: @@ -4128,15 +3655,15 @@ fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() { // Consumed weight for all payout_stakers dispatches that fail let err_weight = ::WeightInfo::payout_stakers_alive_staked(0); - let init_balance_11 = Balances::total_balance(&11); - let init_balance_101 = Balances::total_balance(&101); + let init_balance_11 = asset::total_balance::(&11); + let init_balance_101 = asset::total_balance::(&101); let part_for_11 = Perbill::from_rational::(1000, 1125); let part_for_101 = Perbill::from_rational::(125, 1125); // Check state - Payee::::insert(11, RewardDestination::Controller); - Payee::::insert(101, RewardDestination::Controller); + Payee::::insert(11, RewardDestination::Account(11)); + Payee::::insert(101, RewardDestination::Account(101)); Pallet::::reward_by_ids(vec![(11, 1)]); // Compute total payout now for whole duration as other parameter won't change @@ -4145,8 +3672,9 @@ fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() { mock::start_active_era(1); Pallet::::reward_by_ids(vec![(11, 1)]); - // Change total issuance in order to modify total payout + // Increase total token issuance to affect the total payout. let _ = Balances::deposit_creating(&999, 1_000_000_000); + // Compute total payout now for whole duration as other parameter won't change let total_payout_1 = current_total_payout_for_duration(reward_time_per_era()); assert!(total_payout_1 != total_payout_0); @@ -4154,7 +3682,7 @@ fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() { mock::start_active_era(2); Pallet::::reward_by_ids(vec![(11, 1)]); - // Change total issuance in order to modify total payout + // Increase total token issuance to affect the total payout. let _ = Balances::deposit_creating(&999, 1_000_000_000); // Compute total payout now for whole duration as other parameter won't change let total_payout_2 = current_total_payout_for_duration(reward_time_per_era()); @@ -4166,24 +3694,34 @@ fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() { let active_era = active_era(); // This is the latest planned era in staking, not the active era - let current_era = Staking::current_era().unwrap(); + let current_era = CurrentEra::::get().unwrap(); // Last kept is 1: assert!(current_era - HistoryDepth::get() == 1); assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 0), + Staking::payout_stakers_by_page(RuntimeOrigin::signed(1337), 11, 0, 0), // Fail: Era out of history Error::::InvalidEraToReward.with_weight(err_weight) ); - assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 1)); - assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 2)); + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 1, + 0 + )); + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 2, + 0 + )); assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 2), + Staking::payout_stakers_by_page(RuntimeOrigin::signed(1337), 11, 2, 0), // Fail: Double claim Error::::AlreadyClaimed.with_weight(err_weight) ); assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, active_era), + Staking::payout_stakers_by_page(RuntimeOrigin::signed(1337), 11, active_era, 0), // Fail: Era not finished yet Error::::InvalidEraToReward.with_weight(err_weight) ); @@ -4192,11 +3730,11 @@ fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() { // only era 1 and 2 can be rewarded. assert_eq!( - Balances::total_balance(&11), + asset::total_balance::(&11), init_balance_11 + part_for_11 * (total_payout_1 + total_payout_2), ); assert_eq!( - Balances::total_balance(&101), + asset::total_balance::(&101), init_balance_101 + part_for_101 * (total_payout_1 + total_payout_2), ); }); @@ -4204,30 +3742,28 @@ fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() { #[test] fn zero_slash_keeps_nominators() { - ExtBuilder::default().build_and_execute(|| { - mock::start_active_era(1); - - assert_eq!(Balances::free_balance(11), 1000); + ExtBuilder::default() + .validator_count(7) + .set_status(41, StakerStatus::Validator) + .set_status(51, StakerStatus::Validator) + .set_status(201, StakerStatus::Validator) + .set_status(202, StakerStatus::Validator) + .build_and_execute(|| { + mock::start_active_era(1); - let exposure = Staking::eras_stakers(active_era(), 11); - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); - on_offence_now( - &[OffenceDetails { - offender: (11, exposure.clone()), - reporters: vec![], - }], - &[Perbill::from_percent(0)], - ); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(0)]); - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(101), 2000); + assert_eq!(asset::stakeable_balance::(&11), 1000); + assert_eq!(asset::stakeable_balance::(&101), 2000); - // 11 is still removed.. - assert!(Validators::::iter().all(|(stash, _)| stash != 11)); - // but their nominations are kept. - assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); - }); + // 11 is not removed + assert!(Validators::::iter().any(|(stash, _)| stash == 11)); + // and their nominations are kept. + assert_eq!(Nominators::::get(101).unwrap().targets, vec![11, 21]); + }); } #[test] @@ -4296,19 +3832,19 @@ fn six_session_delay() { assert_eq!(active_era(), init_active_era + 2); // That reward are correct - assert_eq!(Staking::eras_reward_points(init_active_era).total, 1); - assert_eq!(Staking::eras_reward_points(init_active_era + 1).total, 2); + assert_eq!(ErasRewardPoints::::get(init_active_era).total, 1); + assert_eq!(ErasRewardPoints::::get(init_active_era + 1).total, 2); }); } #[test] -fn test_max_nominator_rewarded_per_validator_and_cant_steal_someone_else_reward() { +fn test_nominators_over_max_exposure_page_size_are_rewarded() { ExtBuilder::default().build_and_execute(|| { - for i in 0..=<::MaxNominatorRewardedPerValidator as Get>::get() as i32 - { + // bond one nominator more than the max exposure page size to validator 11. + for i in 0..=MaxExposurePageSize::get() { let stash = 10_000 + i as AccountId; let balance = 10_000 + i as Balance; - Balances::make_free_balance_be(&stash, balance); + asset::set_stakeable_balance::(&stash, balance); assert_ok!(Staking::bond( RuntimeOrigin::signed(stash), balance, @@ -4325,128 +3861,272 @@ fn test_max_nominator_rewarded_per_validator_and_cant_steal_someone_else_reward( mock::start_active_era(2); mock::make_all_reward_payment(1); - // Assert only nominators from 1 to Max are rewarded - for i in 0..=<::MaxNominatorRewardedPerValidator as Get>::get() as i32 - { + // Assert nominators from 1 to Max are rewarded + let mut i: u32 = 0; + while i < MaxExposurePageSize::get() { let stash = 10_000 + i as AccountId; let balance = 10_000 + i as Balance; - if stash == 10_000 { - assert!(Balances::free_balance(&stash) == balance); - } else { - assert!(Balances::free_balance(&stash) > balance); - } + assert!(asset::stakeable_balance::(&stash) > balance); + i += 1; } + + // Assert overflowing nominators from page 1 are also rewarded + let stash = 10_000 + i as AccountId; + assert!(asset::stakeable_balance::(&stash) > (10_000 + i) as Balance); }); } #[test] -fn test_payout_stakers() { - // Test that payout_stakers work in general, including that only the top - // `T::MaxNominatorRewardedPerValidator` nominators are rewarded. - ExtBuilder::default() - .has_stakers(false) - .build_and_execute(|| { - let balance = 1000; - // Track the exposure of the validator and all nominators. - let mut total_exposure = balance; - // Track the exposure of the validator and the nominators that will get paid out. - let mut payout_exposure = balance; - // Create a validator: - bond_validator(11, balance); // Default(64) - assert_eq!(Validators::::count(), 1); - - // Create nominators, targeting stash of validators - for i in 0..100 { - let bond_amount = balance + i as Balance; - bond_nominator(1000 + i, bond_amount, vec![11]); - total_exposure += bond_amount; - if i >= 36 { - payout_exposure += bond_amount; - }; - } - let payout_exposure_part = Perbill::from_rational(payout_exposure, total_exposure); +fn test_nominators_are_rewarded_for_all_exposure_page() { + ExtBuilder::default().build_and_execute(|| { + // 3 pages of exposure + let nominator_count = 2 * MaxExposurePageSize::get() + 1; + + for i in 0..nominator_count { + let stash = 10_000 + i as AccountId; + let balance = 10_000 + i as Balance; + asset::set_stakeable_balance::(&stash, balance); + assert_ok!(Staking::bond( + RuntimeOrigin::signed(stash), + balance, + RewardDestination::Stash + )); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(stash), vec![11])); + } + mock::start_active_era(1); + + Pallet::::reward_by_ids(vec![(11, 1)]); + // compute and ensure the reward amount is greater than zero. + let _ = current_total_payout_for_duration(reward_time_per_era()); + + mock::start_active_era(2); + mock::make_all_reward_payment(1); + + assert_eq!(EraInfo::::get_page_count(1, &11), 3); + + // Assert all nominators are rewarded according to their stake + for i in 0..nominator_count { + // balance of the nominator after the reward payout. + let current_balance = asset::stakeable_balance::(&((10000 + i) as AccountId)); + // balance of the nominator in the previous iteration. + let previous_balance = + asset::stakeable_balance::(&((10000 + i - 1) as AccountId)); + // balance before the reward. + let original_balance = 10_000 + i as Balance; + + assert!(current_balance > original_balance); + // since the stake of the nominator is increasing for each iteration, the final balance + // after the reward should also be higher than the previous iteration. + assert!(current_balance > previous_balance); + } + }); +} + +#[test] +fn test_multi_page_payout_stakers_by_page() { + // Test that payout_stakers work in general and that it pays the correct amount of reward. + ExtBuilder::default() + .has_stakers(false) + .build_and_execute(|| { + let balance = 1000; + // Track the exposure of the validator and all nominators. + let mut total_exposure = balance; + // Create a validator: + bond_validator(11, balance); // Default(64) + assert_eq!(Validators::::count(), 1); + + // Create nominators, targeting stash of validators + for i in 0..100 { + let bond_amount = balance + i as Balance; + bond_nominator(1000 + i, bond_amount, vec![11]); + // with multi page reward payout, payout exposure is same as total exposure. + total_exposure += bond_amount; + } mock::start_active_era(1); Staking::reward_by_ids(vec![(11, 1)]); + // Since `MaxExposurePageSize = 64`, there are two pages of validator exposure. + assert_eq!(EraInfo::::get_page_count(1, &11), 2); + // compute and ensure the reward amount is greater than zero. let payout = current_total_payout_for_duration(reward_time_per_era()); - let actual_paid_out = payout_exposure_part * payout; - mock::start_active_era(2); - let pre_payout_total_issuance = Balances::total_issuance(); + // verify the exposures are calculated correctly. + let actual_exposure_0 = EraInfo::::get_paged_exposure(1, &11, 0).unwrap(); + assert_eq!(actual_exposure_0.total(), total_exposure); + assert_eq!(actual_exposure_0.own(), 1000); + assert_eq!(actual_exposure_0.others().len(), 64); + let actual_exposure_1 = EraInfo::::get_paged_exposure(1, &11, 1).unwrap(); + assert_eq!(actual_exposure_1.total(), total_exposure); + // own stake is only included once in the first page + assert_eq!(actual_exposure_1.own(), 0); + assert_eq!(actual_exposure_1.others().len(), 100 - 64); + + let pre_payout_total_issuance = pallet_balances::TotalIssuance::::get(); RewardOnUnbalanceWasCalled::set(false); - assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 1)); - assert_eq_error_rate!( - Balances::total_issuance(), - pre_payout_total_issuance + actual_paid_out, + System::reset_events(); + + let controller_balance_before_p0_payout = asset::stakeable_balance::(&11); + // Payout rewards for first exposure page + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 1, + 0 + )); + + // verify `Rewarded` events are being executed + assert!(matches!( + staking_events_since_last_call().as_slice(), + &[ + Event::PayoutStarted { + era_index: 1, + validator_stash: 11, + page: 0, + next: Some(1) + }, + .., + Event::Rewarded { + stash: 1063, + dest: RewardDestination::Stash, + amount: 111 + }, + Event::Rewarded { + stash: 1064, + dest: RewardDestination::Stash, + amount: 111 + }, + ] + )); + + let controller_balance_after_p0_payout = asset::stakeable_balance::(&11); + + // verify rewards have been paid out but still some left + assert!(pallet_balances::TotalIssuance::::get() > pre_payout_total_issuance); + assert!( + pallet_balances::TotalIssuance::::get() < pre_payout_total_issuance + payout + ); + + // verify the validator has been rewarded + assert!(controller_balance_after_p0_payout > controller_balance_before_p0_payout); + + // Payout the second and last page of nominators + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 1, 1 + )); + + // verify `Rewarded` events are being executed for the second page. + let events = staking_events_since_last_call(); + assert!(matches!( + events.as_slice(), + &[ + Event::PayoutStarted { + era_index: 1, + validator_stash: 11, + page: 1, + next: None + }, + Event::Rewarded { + stash: 1065, + dest: RewardDestination::Stash, + amount: 111 + }, + Event::Rewarded { + stash: 1066, + dest: RewardDestination::Stash, + amount: 111 + }, + .. + ] + )); + // verify the validator was not rewarded the second time + assert_eq!( + asset::stakeable_balance::(&11), + controller_balance_after_p0_payout + ); + + // verify all rewards have been paid out + assert_eq_error_rate!( + pallet_balances::TotalIssuance::::get(), + pre_payout_total_issuance + payout, + 2 ); assert!(RewardOnUnbalanceWasCalled::get()); // Top 64 nominators of validator 11 automatically paid out, including the validator - // Validator payout goes to controller. - assert!(Balances::free_balance(&11) > balance); - for i in 36..100 { - assert!(Balances::free_balance(&(1000 + i)) > balance + i as Balance); - } - // The bottom 36 do not - for i in 0..36 { - assert_eq!(Balances::free_balance(&(1000 + i)), balance + i as Balance); + assert!(asset::stakeable_balance::(&11) > balance); + for i in 0..100 { + assert!(asset::stakeable_balance::(&(1000 + i)) > balance + i as Balance); } - // We track rewards in `claimed_rewards` vec + // verify we no longer track rewards in `legacy_claimed_rewards` vec assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { stash: 11, total: 1000, active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![1] - }) + legacy_claimed_rewards: bounded_vec![] + } ); + // verify rewards are tracked to prevent double claims + let ledger = Staking::ledger(11.into()); + for page in 0..EraInfo::::get_page_count(1, &11) { + assert_eq!( + EraInfo::::is_rewards_claimed_with_legacy_fallback( + 1, + ledger.as_ref().unwrap(), + &11, + page + ), + true + ); + } + for i in 3..16 { Staking::reward_by_ids(vec![(11, 1)]); // compute and ensure the reward amount is greater than zero. let payout = current_total_payout_for_duration(reward_time_per_era()); - let actual_paid_out = payout_exposure_part * payout; - let pre_payout_total_issuance = Balances::total_issuance(); + let pre_payout_total_issuance = pallet_balances::TotalIssuance::::get(); mock::start_active_era(i); RewardOnUnbalanceWasCalled::set(false); - assert_ok!(Staking::payout_stakers( - RuntimeOrigin::signed(1337), - 11, - i - 1 - )); + mock::make_all_reward_payment(i - 1); assert_eq_error_rate!( - Balances::total_issuance(), - pre_payout_total_issuance + actual_paid_out, - 1 + pallet_balances::TotalIssuance::::get(), + pre_payout_total_issuance + payout, + 2 ); assert!(RewardOnUnbalanceWasCalled::get()); + + // verify we track rewards for each era and page + for page in 0..EraInfo::::get_page_count(i - 1, &11) { + assert_eq!( + EraInfo::::is_rewards_claimed_with_legacy_fallback( + i - 1, + Staking::ledger(11.into()).as_ref().unwrap(), + &11, + page + ), + true + ); + } } - // We track rewards in `claimed_rewards` vec - assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { - stash: 11, - total: 1000, - active: 1000, - unlocking: Default::default(), - claimed_rewards: (1..=14).collect::>().try_into().unwrap() - }) - ); + assert_eq!(ClaimedRewards::::get(14, &11), vec![0, 1]); let last_era = 99; let history_depth = HistoryDepth::get(); - let expected_last_reward_era = last_era - 1; - let expected_start_reward_era = last_era - history_depth; + let last_reward_era = last_era - 1; + let first_claimable_reward_era = last_era - history_depth; for i in 16..=last_era { Staking::reward_by_ids(vec![(11, 1)]); // compute and ensure the reward amount is greater than zero. @@ -4454,2712 +4134,6544 @@ fn test_payout_stakers() { mock::start_active_era(i); } - // We clean it up as history passes - assert_ok!(Staking::payout_stakers( + // verify we clean up history as we go + for era in 0..15 { + assert_eq!( + ClaimedRewards::::get(era, &11), + Vec::::new() + ); + } + + // verify only page 0 is marked as claimed + assert_ok!(Staking::payout_stakers_by_page( RuntimeOrigin::signed(1337), 11, - expected_start_reward_era + first_claimable_reward_era, + 0 )); - assert_ok!(Staking::payout_stakers( + assert_eq!( + ClaimedRewards::::get(first_claimable_reward_era, &11), + vec![0] + ); + + // verify page 0 and 1 are marked as claimed + assert_ok!(Staking::payout_stakers_by_page( RuntimeOrigin::signed(1337), 11, - expected_last_reward_era + first_claimable_reward_era, + 1 )); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { - stash: 11, - total: 1000, - active: 1000, - unlocking: Default::default(), - claimed_rewards: bounded_vec![ - expected_start_reward_era, - expected_last_reward_era - ] - }) + ClaimedRewards::::get(first_claimable_reward_era, &11), + vec![0, 1] ); - // Out of order claims works. - assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 69)); - assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 23)); - assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 42)); + // verify only page 0 is marked as claimed + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + last_reward_era, + 0 + )); + assert_eq!(ClaimedRewards::::get(last_reward_era, &11), vec![0]); + + // verify page 0 and 1 are marked as claimed + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + last_reward_era, + 1 + )); assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { - stash: 11, - total: 1000, - active: 1000, - unlocking: Default::default(), - claimed_rewards: bounded_vec![ - expected_start_reward_era, - 23, - 42, - 69, - expected_last_reward_era - ] - }) + ClaimedRewards::::get(last_reward_era, &11), + vec![0, 1] ); + + // Out of order claims works. + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 69, + 0 + )); + assert_eq!(ClaimedRewards::::get(69, &11), vec![0]); + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 23, + 1 + )); + assert_eq!(ClaimedRewards::::get(23, &11), vec![1]); + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 42, + 0 + )); + assert_eq!(ClaimedRewards::::get(42, &11), vec![0]); }); } #[test] -fn payout_stakers_handles_basic_errors() { - // Here we will test payouts handle all errors. +fn test_multi_page_payout_stakers_backward_compatible() { + // Test that payout_stakers work in general and that it pays the correct amount of reward. ExtBuilder::default() .has_stakers(false) .build_and_execute(|| { - // Consumed weight for all payout_stakers dispatches that fail - let err_weight = ::WeightInfo::payout_stakers_alive_staked(0); - - // Same setup as the test above let balance = 1000; + // Track the exposure of the validator and all nominators. + let mut total_exposure = balance; + // Create a validator: bond_validator(11, balance); // Default(64) + assert_eq!(Validators::::count(), 1); - // Create nominators, targeting stash + let err_weight = ::WeightInfo::payout_stakers_alive_staked(0); + + // Create nominators, targeting stash of validators for i in 0..100 { - bond_nominator(1000 + i, balance + i as Balance, vec![11]); + let bond_amount = balance + i as Balance; + bond_nominator(1000 + i, bond_amount, vec![11]); + // with multi page reward payout, payout exposure is same as total exposure. + total_exposure += bond_amount; } mock::start_active_era(1); Staking::reward_by_ids(vec![(11, 1)]); - // compute and ensure the reward amount is greater than zero. - let _ = current_total_payout_for_duration(reward_time_per_era()); + // Since `MaxExposurePageSize = 64`, there are two pages of validator exposure. + assert_eq!(EraInfo::::get_page_count(1, &11), 2); + // compute and ensure the reward amount is greater than zero. + let payout = current_total_payout_for_duration(reward_time_per_era()); mock::start_active_era(2); - // Wrong Era, too big + // verify the exposures are calculated correctly. + let actual_exposure_0 = EraInfo::::get_paged_exposure(1, &11, 0).unwrap(); + assert_eq!(actual_exposure_0.total(), total_exposure); + assert_eq!(actual_exposure_0.own(), 1000); + assert_eq!(actual_exposure_0.others().len(), 64); + let actual_exposure_1 = EraInfo::::get_paged_exposure(1, &11, 1).unwrap(); + assert_eq!(actual_exposure_1.total(), total_exposure); + // own stake is only included once in the first page + assert_eq!(actual_exposure_1.own(), 0); + assert_eq!(actual_exposure_1.others().len(), 100 - 64); + + let pre_payout_total_issuance = pallet_balances::TotalIssuance::::get(); + RewardOnUnbalanceWasCalled::set(false); + + let controller_balance_before_p0_payout = asset::stakeable_balance::(&11); + // Payout rewards for first exposure page + assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 1)); + // page 0 is claimed assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 2), - Error::::InvalidEraToReward.with_weight(err_weight) + Staking::payout_stakers_by_page(RuntimeOrigin::signed(1337), 11, 1, 0), + Error::::AlreadyClaimed.with_weight(err_weight) ); - // Wrong Staker - assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(1337), 10, 1), - Error::::NotStash.with_weight(err_weight) + + let controller_balance_after_p0_payout = asset::stakeable_balance::(&11); + + // verify rewards have been paid out but still some left + assert!(pallet_balances::TotalIssuance::::get() > pre_payout_total_issuance); + assert!( + pallet_balances::TotalIssuance::::get() < pre_payout_total_issuance + payout ); - let last_era = 99; - for i in 3..=last_era { - Staking::reward_by_ids(vec![(11, 1)]); - // compute and ensure the reward amount is greater than zero. - let _ = current_total_payout_for_duration(reward_time_per_era()); - mock::start_active_era(i); - } + // verify the validator has been rewarded + assert!(controller_balance_after_p0_payout > controller_balance_before_p0_payout); - let history_depth = HistoryDepth::get(); - let expected_last_reward_era = last_era - 1; - let expected_start_reward_era = last_era - history_depth; + // This should payout the second and last page of nominators + assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 1)); - // We are at era last_era=99. Given history_depth=80, we should be able - // to payout era starting from expected_start_reward_era=19 through - // expected_last_reward_era=98 (80 total eras), but not 18 or 99. - assert_noop!( - Staking::payout_stakers( - RuntimeOrigin::signed(1337), - 11, - expected_start_reward_era - 1 - ), - Error::::InvalidEraToReward.with_weight(err_weight) - ); + // cannot claim any more pages assert_noop!( - Staking::payout_stakers( - RuntimeOrigin::signed(1337), - 11, - expected_last_reward_era + 1 - ), - Error::::InvalidEraToReward.with_weight(err_weight) + Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 1), + Error::::AlreadyClaimed.with_weight(err_weight) ); - assert_ok!(Staking::payout_stakers( - RuntimeOrigin::signed(1337), - 11, - expected_start_reward_era - )); - assert_ok!(Staking::payout_stakers( - RuntimeOrigin::signed(1337), - 11, - expected_last_reward_era - )); - // Can't claim again - assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, expected_start_reward_era), - Error::::AlreadyClaimed.with_weight(err_weight) + // verify the validator was not rewarded the second time + assert_eq!( + asset::stakeable_balance::(&11), + controller_balance_after_p0_payout ); - assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, expected_last_reward_era), - Error::::AlreadyClaimed.with_weight(err_weight) + + // verify all rewards have been paid out + assert_eq_error_rate!( + pallet_balances::TotalIssuance::::get(), + pre_payout_total_issuance + payout, + 2 ); - }); -} + assert!(RewardOnUnbalanceWasCalled::get()); -#[test] -fn payout_stakers_handles_weight_refund() { - // Note: this test relies on the assumption that `payout_stakers_alive_staked` is solely used by - // `payout_stakers` to calculate the weight of each payout op. - ExtBuilder::default() - .has_stakers(false) - .build_and_execute(|| { - let max_nom_rewarded = - <::MaxNominatorRewardedPerValidator as Get<_>>::get(); - // Make sure the configured value is meaningful for our use. - assert!(max_nom_rewarded >= 4); - let half_max_nom_rewarded = max_nom_rewarded / 2; - // Sanity check our max and half max nominator quantities. - assert!(half_max_nom_rewarded > 0); - assert!(max_nom_rewarded > half_max_nom_rewarded); + // verify all nominators of validator 11 are paid out, including the validator + // Validator payout goes to controller. + assert!(asset::stakeable_balance::(&11) > balance); + for i in 0..100 { + assert!(asset::stakeable_balance::(&(1000 + i)) > balance + i as Balance); + } - let max_nom_rewarded_weight = - ::WeightInfo::payout_stakers_alive_staked(max_nom_rewarded); - let half_max_nom_rewarded_weight = - ::WeightInfo::payout_stakers_alive_staked(half_max_nom_rewarded); - let zero_nom_payouts_weight = - ::WeightInfo::payout_stakers_alive_staked(0); - assert!(zero_nom_payouts_weight.any_gt(Weight::zero())); - assert!(half_max_nom_rewarded_weight.any_gt(zero_nom_payouts_weight)); - assert!(max_nom_rewarded_weight.any_gt(half_max_nom_rewarded_weight)); + // verify we no longer track rewards in `legacy_claimed_rewards` vec + let ledger = Staking::ledger(11.into()); + assert_eq!( + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { + stash: 11, + total: 1000, + active: 1000, + unlocking: Default::default(), + legacy_claimed_rewards: bounded_vec![] + } + ); - let balance = 1000; - bond_validator(11, balance); + // verify rewards are tracked to prevent double claims + for page in 0..EraInfo::::get_page_count(1, &11) { + assert_eq!( + EraInfo::::is_rewards_claimed_with_legacy_fallback( + 1, + ledger.as_ref().unwrap(), + &11, + page + ), + true + ); + } - // Era 1 - start_active_era(1); + for i in 3..16 { + Staking::reward_by_ids(vec![(11, 1)]); - // Reward just the validator. - Staking::reward_by_ids(vec![(11, 1)]); + // compute and ensure the reward amount is greater than zero. + let payout = current_total_payout_for_duration(reward_time_per_era()); + let pre_payout_total_issuance = pallet_balances::TotalIssuance::::get(); - // Add some `half_max_nom_rewarded` nominators who will start backing the validator in the - // next era. - for i in 0..half_max_nom_rewarded { - bond_nominator((1000 + i).into(), balance + i as Balance, vec![11]); + mock::start_active_era(i); + RewardOnUnbalanceWasCalled::set(false); + mock::make_all_reward_payment(i - 1); + assert_eq_error_rate!( + pallet_balances::TotalIssuance::::get(), + pre_payout_total_issuance + payout, + 2 + ); + assert!(RewardOnUnbalanceWasCalled::get()); + + // verify we track rewards for each era and page + for page in 0..EraInfo::::get_page_count(i - 1, &11) { + assert_eq!( + EraInfo::::is_rewards_claimed_with_legacy_fallback( + i - 1, + Staking::ledger(11.into()).as_ref().unwrap(), + &11, + page + ), + true + ); + } } - // Era 2 - start_active_era(2); + assert_eq!(ClaimedRewards::::get(14, &11), vec![0, 1]); - // Collect payouts when there are no nominators - let call = TestCall::Staking(StakingCall::payout_stakers { - validator_stash: 11, - era: 1, - }); - let info = call.get_dispatch_info(); - let result = call.dispatch(RuntimeOrigin::signed(20)); - assert_ok!(result); - assert_eq!( - extract_actual_weight(&result, &info), - zero_nom_payouts_weight - ); + let last_era = 99; + let history_depth = HistoryDepth::get(); + let last_reward_era = last_era - 1; + let first_claimable_reward_era = last_era - history_depth; + for i in 16..=last_era { + Staking::reward_by_ids(vec![(11, 1)]); + // compute and ensure the reward amount is greater than zero. + let _ = current_total_payout_for_duration(reward_time_per_era()); + mock::start_active_era(i); + } - // The validator is not rewarded in this era; so there will be zero payouts to claim for - // this era. + // verify we clean up history as we go + for era in 0..15 { + assert_eq!( + ClaimedRewards::::get(era, &11), + Vec::::new() + ); + } - // Era 3 - start_active_era(3); + // verify only page 0 is marked as claimed + assert_ok!(Staking::payout_stakers( + RuntimeOrigin::signed(1337), + 11, + first_claimable_reward_era + )); + assert_eq!( + ClaimedRewards::::get(first_claimable_reward_era, &11), + vec![0] + ); - // Collect payouts for an era where the validator did not receive any points. - let call = TestCall::Staking(StakingCall::payout_stakers { - validator_stash: 11, - era: 2, - }); - let info = call.get_dispatch_info(); - let result = call.dispatch(RuntimeOrigin::signed(20)); - assert_ok!(result); + // verify page 0 and 1 are marked as claimed + assert_ok!(Staking::payout_stakers( + RuntimeOrigin::signed(1337), + 11, + first_claimable_reward_era, + )); assert_eq!( - extract_actual_weight(&result, &info), - zero_nom_payouts_weight + ClaimedRewards::::get(first_claimable_reward_era, &11), + vec![0, 1] ); - // Reward the validator and its nominators. - Staking::reward_by_ids(vec![(11, 1)]); + // change order and verify only page 1 is marked as claimed + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + last_reward_era, + 1 + )); + assert_eq!(ClaimedRewards::::get(last_reward_era, &11), vec![1]); - // Era 4 - start_active_era(4); + // verify page 0 is claimed even when explicit page is not passed + assert_ok!(Staking::payout_stakers( + RuntimeOrigin::signed(1337), + 11, + last_reward_era, + )); - // Collect payouts when the validator has `half_max_nom_rewarded` nominators. - let call = TestCall::Staking(StakingCall::payout_stakers { - validator_stash: 11, - era: 3, - }); - let info = call.get_dispatch_info(); - let result = call.dispatch(RuntimeOrigin::signed(20)); - assert_ok!(result); assert_eq!( - extract_actual_weight(&result, &info), - half_max_nom_rewarded_weight + ClaimedRewards::::get(last_reward_era, &11), + vec![1, 0] ); - // Add enough nominators so that we are at the limit. They will be active nominators - // in the next era. - for i in half_max_nom_rewarded..max_nom_rewarded { - bond_nominator((1000 + i).into(), balance + i as Balance, vec![11]); + // cannot claim any more pages + assert_noop!( + Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, last_reward_era), + Error::::AlreadyClaimed.with_weight(err_weight) + ); + + // Create 4 nominator pages + for i in 100..200 { + let bond_amount = balance + i as Balance; + bond_nominator(1000 + i, bond_amount, vec![11]); } - // Era 5 - start_active_era(5); - // We now have `max_nom_rewarded` nominators actively nominating our validator. + let test_era = last_era + 1; + mock::start_active_era(test_era); - // Reward the validator so we can collect for everyone in the next era. Staking::reward_by_ids(vec![(11, 1)]); + // compute and ensure the reward amount is greater than zero. + let _ = current_total_payout_for_duration(reward_time_per_era()); + mock::start_active_era(test_era + 1); - // Era 6 - start_active_era(6); + // Out of order claims works. + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + test_era, + 2 + )); + assert_eq!(ClaimedRewards::::get(test_era, &11), vec![2]); - // Collect payouts when the validator had `half_max_nom_rewarded` nominators. - let call = TestCall::Staking(StakingCall::payout_stakers { - validator_stash: 11, - era: 5, - }); - let info = call.get_dispatch_info(); - let result = call.dispatch(RuntimeOrigin::signed(20)); - assert_ok!(result); - assert_eq!( - extract_actual_weight(&result, &info), - max_nom_rewarded_weight - ); + assert_ok!(Staking::payout_stakers( + RuntimeOrigin::signed(1337), + 11, + test_era + )); + assert_eq!(ClaimedRewards::::get(test_era, &11), vec![2, 0]); - // Try and collect payouts for an era that has already been collected. - let call = TestCall::Staking(StakingCall::payout_stakers { - validator_stash: 11, - era: 5, - }); - let info = call.get_dispatch_info(); - let result = call.dispatch(RuntimeOrigin::signed(20)); - assert!(result.is_err()); - // When there is an error the consumed weight == weight when there are 0 nominator payouts. - assert_eq!( - extract_actual_weight(&result, &info), - zero_nom_payouts_weight + // cannot claim page 2 again + assert_noop!( + Staking::payout_stakers_by_page(RuntimeOrigin::signed(1337), 11, test_era, 2), + Error::::AlreadyClaimed.with_weight(err_weight) ); + + assert_ok!(Staking::payout_stakers( + RuntimeOrigin::signed(1337), + 11, + test_era + )); + assert_eq!(ClaimedRewards::::get(test_era, &11), vec![2, 0, 1]); + + assert_ok!(Staking::payout_stakers( + RuntimeOrigin::signed(1337), + 11, + test_era + )); + assert_eq!(ClaimedRewards::::get(test_era, &11), vec![2, 0, 1, 3]); }); } #[test] -fn bond_during_era_correctly_populates_claimed_rewards() { +fn test_page_count_and_size() { + // Test that payout_stakers work in general and that it pays the correct amount of reward. ExtBuilder::default() .has_stakers(false) .build_and_execute(|| { - // Era = None - bond_validator(9, 1000); + let balance = 1000; + // Track the exposure of the validator and all nominators. + // Create a validator: + bond_validator(11, balance); // Default(64) + assert_eq!(Validators::::count(), 1); + + // Create nominators, targeting stash of validators + for i in 0..100 { + let bond_amount = balance + i as Balance; + bond_nominator(1000 + i, bond_amount, vec![11]); + } + + mock::start_active_era(1); + + // Since max exposure page size is 64, 2 pages of nominators are created. + assert_eq!(EraInfo::::get_page_count(1, &11), 2); + + // first page has 64 nominators assert_eq!( - Staking::ledger(&9), - Some(StakingLedger { - stash: 9, - total: 1000, - active: 1000, - unlocking: Default::default(), - claimed_rewards: bounded_vec![], - }) + EraInfo::::get_paged_exposure(1, &11, 0) + .unwrap() + .others() + .len(), + 64 ); - mock::start_active_era(5); - bond_validator(11, 1000); + // second page has 36 nominators assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { - stash: 11, - total: 1000, - active: 1000, - unlocking: Default::default(), - claimed_rewards: (0..5).collect::>().try_into().unwrap(), - }) + EraInfo::::get_paged_exposure(1, &11, 1) + .unwrap() + .others() + .len(), + 36 ); - // make sure only era upto history depth is stored - let current_era = 99; - let last_reward_era = 99 - HistoryDepth::get(); - mock::start_active_era(current_era); - bond_validator(13, 1000); + // now lets decrease page size + MaxExposurePageSize::set(32); + mock::start_active_era(2); + // now we expect 4 pages. + assert_eq!(EraInfo::::get_page_count(2, &11), 4); + // first 3 pages have 32 nominators each assert_eq!( - Staking::ledger(&13), - Some(StakingLedger { - stash: 13, - total: 1000, - active: 1000, - unlocking: Default::default(), - claimed_rewards: (last_reward_era..current_era) - .collect::>() - .try_into() - .unwrap(), - }) + EraInfo::::get_paged_exposure(2, &11, 0) + .unwrap() + .others() + .len(), + 32 ); + assert_eq!( + EraInfo::::get_paged_exposure(2, &11, 1) + .unwrap() + .others() + .len(), + 32 + ); + assert_eq!( + EraInfo::::get_paged_exposure(2, &11, 2) + .unwrap() + .others() + .len(), + 32 + ); + assert_eq!( + EraInfo::::get_paged_exposure(2, &11, 3) + .unwrap() + .others() + .len(), + 4 + ); + + // now lets decrease page size even more + MaxExposurePageSize::set(5); + mock::start_active_era(3); + + // now we expect the max 20 pages (100/5). + assert_eq!(EraInfo::::get_page_count(3, &11), 20); }); } #[test] -fn offences_weight_calculated_correctly() { - ExtBuilder::default().nominate(true).build_and_execute(|| { - // On offence with zero offenders: 4 Reads, 1 Write - let zero_offence_weight = - ::DbWeight::get().reads_writes(4, 1); - assert_eq!( - Staking::on_offence(&[], &[Perbill::from_percent(50)], 0, DisableStrategy::WhenSlashed), - zero_offence_weight - ); +fn payout_stakers_handles_basic_errors() { + // Here we will test payouts handle all errors. + ExtBuilder::default() + .has_stakers(false) + .build_and_execute(|| { + // Consumed weight for all payout_stakers dispatches that fail + let err_weight = ::WeightInfo::payout_stakers_alive_staked(0); - // On Offence with N offenders, Unapplied: 4 Reads, 1 Write + 4 Reads, 5 Writes - let n_offence_unapplied_weight = ::DbWeight::get() - .reads_writes(4, 1) + - ::DbWeight::get().reads_writes(4, 5); + // Same setup as the test above + let balance = 1000; + bond_validator(11, balance); // Default(64) - let offenders: Vec< - OffenceDetails< - ::AccountId, - pallet_session::historical::IdentificationTuple, - >, - > = (1..10) - .map(|i| OffenceDetails { - offender: (i, Staking::eras_stakers(active_era(), i)), - reporters: vec![], - }) - .collect(); - assert_eq!( - Staking::on_offence( - &offenders, - &[Perbill::from_percent(50)], - 0, - DisableStrategy::WhenSlashed - ), - n_offence_unapplied_weight - ); + // Create nominators, targeting stash + for i in 0..100 { + bond_nominator(1000 + i, balance + i as Balance, vec![11]); + } - // On Offence with one offenders, Applied - let one_offender = [OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![1], - }]; + mock::start_active_era(1); + Staking::reward_by_ids(vec![(11, 1)]); - let _n = 1; // Number of offenders - let rw = 3; // rw reads and writes - let one_offence_unapplied_weight = - ::DbWeight::get().reads_writes(4, 1) - + - ::DbWeight::get().reads_writes(rw, rw) - // One `slash_cost` - + ::DbWeight::get().reads_writes(6, 5) - // `slash_cost` * nominators (1) - //+ ::DbWeight::get().reads_writes(6, 5) - // `reward_cost` * reporters (1) - + ::DbWeight::get().reads_writes(2, 2) - ; + // compute and ensure the reward amount is greater than zero. + let _ = current_total_payout_for_duration(reward_time_per_era()); - assert_eq!( - Staking::on_offence( - &one_offender, - &[Perbill::from_percent(50)], - 0, - DisableStrategy::WhenSlashed{} - ), - one_offence_unapplied_weight - ); - }); -} + mock::start_active_era(2); -#[test] -fn payout_creates_controller() { - ExtBuilder::default() - .has_stakers(false) - .build_and_execute(|| { - let balance = 1000; - // Create a validator: - bond_validator(11, balance); + // Wrong Era, too big + assert_noop!( + Staking::payout_stakers_by_page(RuntimeOrigin::signed(1337), 11, 2, 0), + Error::::InvalidEraToReward.with_weight(err_weight) + ); + // Wrong Staker + assert_noop!( + Staking::payout_stakers_by_page(RuntimeOrigin::signed(1337), 10, 1, 0), + Error::::NotStash.with_weight(err_weight) + ); - // create a stash/controller pair and nominate - let (stash, controller) = testing_utils::create_unique_stash_controller::( - 0, - 100, - RewardDestination::Controller, - false, - ) - .unwrap(); - assert_ok!(Staking::nominate( - RuntimeOrigin::signed(controller), - vec![11] - )); + let last_era = 99; + for i in 3..=last_era { + Staking::reward_by_ids(vec![(11, 1)]); + // compute and ensure the reward amount is greater than zero. + let _ = current_total_payout_for_duration(reward_time_per_era()); + mock::start_active_era(i); + } - // kill controller - assert_ok!(Balances::transfer( - RuntimeOrigin::signed(controller), - stash, - 100 + let history_depth = HistoryDepth::get(); + let expected_last_reward_era = last_era - 1; + let expected_start_reward_era = last_era - history_depth; + + // We are at era last_era=99. Given history_depth=80, we should be able + // to payout era starting from expected_start_reward_era=19 through + // expected_last_reward_era=98 (80 total eras), but not 18 or 99. + assert_noop!( + Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + expected_start_reward_era - 1, + 0 + ), + Error::::InvalidEraToReward.with_weight(err_weight) + ); + assert_noop!( + Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + expected_last_reward_era + 1, + 0 + ), + Error::::InvalidEraToReward.with_weight(err_weight) + ); + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + expected_start_reward_era, + 0 + )); + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + expected_last_reward_era, + 0 )); - assert_eq!(Balances::free_balance(controller), 0); - mock::start_active_era(1); - Staking::reward_by_ids(vec![(11, 1)]); - // compute and ensure the reward amount is greater than zero. - let _ = current_total_payout_for_duration(reward_time_per_era()); - mock::start_active_era(2); - assert_ok!(Staking::payout_stakers( - RuntimeOrigin::signed(controller), + // can call page 1 + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), 11, + expected_last_reward_era, 1 )); - // Controller is created - assert!(Balances::free_balance(controller) > 0); - }) + // Can't claim again + assert_noop!( + Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + expected_start_reward_era, + 0 + ), + Error::::AlreadyClaimed.with_weight(err_weight) + ); + + assert_noop!( + Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + expected_last_reward_era, + 0 + ), + Error::::AlreadyClaimed.with_weight(err_weight) + ); + + assert_noop!( + Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + expected_last_reward_era, + 1 + ), + Error::::AlreadyClaimed.with_weight(err_weight) + ); + + // invalid page + assert_noop!( + Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + expected_last_reward_era, + 2 + ), + Error::::InvalidPage.with_weight(err_weight) + ); + }); } #[test] -fn payout_to_any_account_works() { +fn test_commission_paid_across_pages() { ExtBuilder::default() .has_stakers(false) .build_and_execute(|| { - let balance = 1000; + let balance = 1; + let commission = 50; // Create a validator: - bond_validator(11, balance); // Default(64) - - // Create a stash/controller pair - bond_nominator(1234, 100, vec![11]); - - // Update payout location - assert_ok!(Staking::set_payee( - RuntimeOrigin::signed(1234), - RewardDestination::Account(42) + bond_validator(11, balance); + assert_ok!(Staking::validate( + RuntimeOrigin::signed(11), + ValidatorPrefs { + commission: Perbill::from_percent(commission), + blocked: false + } )); + assert_eq!(Validators::::count(), 1); - // Reward Destination account doesn't exist - assert_eq!(Balances::free_balance(42), 0); + // Create nominators, targeting stash of validators + for i in 0..200 { + let bond_amount = balance + i as Balance; + bond_nominator(1000 + i, bond_amount, vec![11]); + } mock::start_active_era(1); Staking::reward_by_ids(vec![(11, 1)]); - // compute and ensure the reward amount is greater than zero. - let _ = current_total_payout_for_duration(reward_time_per_era()); - mock::start_active_era(2); - assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1234), 11, 1)); - - // Payment is successful - assert!(Balances::free_balance(42) > 0); - }) -} -#[test] -fn session_buffering_with_offset() { - // similar to live-chains, have some offset for the first session - ExtBuilder::default() - .offset(2) - .period(5) - .session_per_era(5) - .build_and_execute(|| { - assert_eq!(current_era(), 0); - assert_eq!(active_era(), 0); - assert_eq!(Session::current_index(), 0); + // Since `MaxExposurePageSize = 64`, there are four pages of validator + // exposure. + assert_eq!(EraInfo::::get_page_count(1, &11), 4); - start_session(1); - assert_eq!(current_era(), 0); - assert_eq!(active_era(), 0); - assert_eq!(Session::current_index(), 1); - assert_eq!(System::block_number(), 2); + // compute and ensure the reward amount is greater than zero. + let payout = current_total_payout_for_duration(reward_time_per_era()); + mock::start_active_era(2); - start_session(2); - assert_eq!(current_era(), 0); - assert_eq!(active_era(), 0); - assert_eq!(Session::current_index(), 2); - assert_eq!(System::block_number(), 7); + let initial_balance = asset::stakeable_balance::(&11); + // Payout rewards for first exposure page + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 1, + 0 + )); - start_session(3); - assert_eq!(current_era(), 0); - assert_eq!(active_era(), 0); - assert_eq!(Session::current_index(), 3); - assert_eq!(System::block_number(), 12); + let controller_balance_after_p0_payout = asset::stakeable_balance::(&11); - // active era is lagging behind by one session, because of how session module works. - start_session(4); - assert_eq!(current_era(), 1); - assert_eq!(active_era(), 0); - assert_eq!(Session::current_index(), 4); - assert_eq!(System::block_number(), 17); + // some commission is paid + assert!(initial_balance < controller_balance_after_p0_payout); - start_session(5); - assert_eq!(current_era(), 1); - assert_eq!(active_era(), 1); - assert_eq!(Session::current_index(), 5); - assert_eq!(System::block_number(), 22); + // payout all pages + for i in 1..4 { + let before_balance = asset::stakeable_balance::(&11); + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 1, + i + )); + let after_balance = asset::stakeable_balance::(&11); + // some commission is paid for every page + assert!(before_balance < after_balance); + } - // go all the way to active 2. - start_active_era(2); - assert_eq!(current_era(), 2); - assert_eq!(active_era(), 2); - assert_eq!(Session::current_index(), 10); + assert_eq_error_rate!( + asset::stakeable_balance::(&11), + initial_balance + payout / 2, + 1, + ); }); } #[test] -fn session_buffering_no_offset() { - // no offset, first session starts immediately +fn payout_stakers_handles_weight_refund() { + // Note: this test relies on the assumption that `payout_stakers_alive_staked` is solely used by + // `payout_stakers` to calculate the weight of each payout op. ExtBuilder::default() - .offset(0) - .period(5) - .session_per_era(5) + .has_stakers(false) .build_and_execute(|| { - assert_eq!(current_era(), 0); - assert_eq!(active_era(), 0); - assert_eq!(Session::current_index(), 0); + let max_nom_rewarded = MaxExposurePageSize::get(); + // Make sure the configured value is meaningful for our use. + assert!(max_nom_rewarded >= 4); + let half_max_nom_rewarded = max_nom_rewarded / 2; + // Sanity check our max and half max nominator quantities. + assert!(half_max_nom_rewarded > 0); + assert!(max_nom_rewarded > half_max_nom_rewarded); - start_session(1); - assert_eq!(current_era(), 0); - assert_eq!(active_era(), 0); - assert_eq!(Session::current_index(), 1); - assert_eq!(System::block_number(), 5); + let max_nom_rewarded_weight = + ::WeightInfo::payout_stakers_alive_staked(max_nom_rewarded); + let half_max_nom_rewarded_weight = + ::WeightInfo::payout_stakers_alive_staked(half_max_nom_rewarded); + let zero_nom_payouts_weight = + ::WeightInfo::payout_stakers_alive_staked(0); + assert!(zero_nom_payouts_weight.any_gt(Weight::zero())); + assert!(half_max_nom_rewarded_weight.any_gt(zero_nom_payouts_weight)); + assert!(max_nom_rewarded_weight.any_gt(half_max_nom_rewarded_weight)); - start_session(2); - assert_eq!(current_era(), 0); - assert_eq!(active_era(), 0); - assert_eq!(Session::current_index(), 2); - assert_eq!(System::block_number(), 10); + let balance = 1000; + bond_validator(11, balance); - start_session(3); - assert_eq!(current_era(), 0); - assert_eq!(active_era(), 0); - assert_eq!(Session::current_index(), 3); - assert_eq!(System::block_number(), 15); + // Era 1 + start_active_era(1); - // active era is lagging behind by one session, because of how session module works. - start_session(4); - assert_eq!(current_era(), 1); - assert_eq!(active_era(), 0); - assert_eq!(Session::current_index(), 4); - assert_eq!(System::block_number(), 20); + // Reward just the validator. + Staking::reward_by_ids(vec![(11, 1)]); - start_session(5); - assert_eq!(current_era(), 1); - assert_eq!(active_era(), 1); - assert_eq!(Session::current_index(), 5); - assert_eq!(System::block_number(), 25); + // Add some `half_max_nom_rewarded` nominators who will start backing the validator in the + // next era. + for i in 0..half_max_nom_rewarded { + bond_nominator((1000 + i).into(), balance + i as Balance, vec![11]); + } - // go all the way to active 2. + // Era 2 start_active_era(2); - assert_eq!(current_era(), 2); - assert_eq!(active_era(), 2); - assert_eq!(Session::current_index(), 10); - }); -} -#[test] -fn cannot_rebond_to_lower_than_ed() { - ExtBuilder::default() - .existential_deposit(0) - .balance_factor(11) - .build_and_execute(|| { - // initial stuff. + // Collect payouts when there are no nominators + let call = TestCall::Staking(StakingCall::payout_stakers_by_page { + validator_stash: 11, + era: 1, + page: 0, + }); + let info = call.get_dispatch_info(); + let result = call.dispatch(RuntimeOrigin::signed(20)); + assert_ok!(result); assert_eq!( - Staking::ledger(&21).unwrap(), - StakingLedger { - stash: 21, - total: 11 * 1000, - active: 11 * 1000, - unlocking: Default::default(), - claimed_rewards: bounded_vec![], - } + extract_actual_weight(&result, &info), + zero_nom_payouts_weight ); - // unbond all of it. must be chilled first. - assert_ok!(Staking::chill(RuntimeOrigin::signed(21))); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(21), 11 * 1000)); + // The validator is not rewarded in this era; so there will be zero payouts to claim for + // this era. + + // Era 3 + start_active_era(3); + + // Collect payouts for an era where the validator did not receive any points. + let call = TestCall::Staking(StakingCall::payout_stakers_by_page { + validator_stash: 11, + era: 2, + page: 0, + }); + let info = call.get_dispatch_info(); + let result = call.dispatch(RuntimeOrigin::signed(20)); + assert_ok!(result); assert_eq!( - Staking::ledger(&21).unwrap(), - StakingLedger { - stash: 21, - total: 11 * 1000, - active: 0, - unlocking: bounded_vec![UnlockChunk { - value: 11 * 1000, - era: 3 - }], - claimed_rewards: bounded_vec![], - } + extract_actual_weight(&result, &info), + zero_nom_payouts_weight ); - // now bond a wee bit more - // Polymesh change - // ----------------------------------------------------------------- - assert_ok!(Staking::rebond(RuntimeOrigin::signed(21), 5),); - // ----------------------------------------------------------------- - }) -} + // Reward the validator and its nominators. + Staking::reward_by_ids(vec![(11, 1)]); -#[test] -fn cannot_bond_extra_to_lower_than_ed() { - ExtBuilder::default() - .existential_deposit(0) - .balance_factor(11) - .build_and_execute(|| { - // initial stuff. + // Era 4 + start_active_era(4); + + // Collect payouts when the validator has `half_max_nom_rewarded` nominators. + let call = TestCall::Staking(StakingCall::payout_stakers_by_page { + validator_stash: 11, + era: 3, + page: 0, + }); + let info = call.get_dispatch_info(); + let result = call.dispatch(RuntimeOrigin::signed(20)); + assert_ok!(result); assert_eq!( - Staking::ledger(&21).unwrap(), - StakingLedger { - stash: 21, - total: 11 * 1000, - active: 11 * 1000, - unlocking: Default::default(), - claimed_rewards: bounded_vec![], - } + extract_actual_weight(&result, &info), + half_max_nom_rewarded_weight ); - // unbond all of it. must be chilled first. - assert_ok!(Staking::chill(RuntimeOrigin::signed(21))); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(21), 11 * 1000)); + // Add enough nominators so that we are at the limit. They will be active nominators + // in the next era. + for i in half_max_nom_rewarded..max_nom_rewarded { + bond_nominator((1000 + i).into(), balance + i as Balance, vec![11]); + } + + // Era 5 + start_active_era(5); + // We now have `max_nom_rewarded` nominators actively nominating our validator. + + // Reward the validator so we can collect for everyone in the next era. + Staking::reward_by_ids(vec![(11, 1)]); + + // Era 6 + start_active_era(6); + + // Collect payouts when the validator had `half_max_nom_rewarded` nominators. + let call = TestCall::Staking(StakingCall::payout_stakers_by_page { + validator_stash: 11, + era: 5, + page: 0, + }); + let info = call.get_dispatch_info(); + let result = call.dispatch(RuntimeOrigin::signed(20)); + assert_ok!(result); assert_eq!( - Staking::ledger(&21).unwrap(), - StakingLedger { - stash: 21, - total: 11 * 1000, - active: 0, - unlocking: bounded_vec![UnlockChunk { - value: 11 * 1000, - era: 3 - }], - claimed_rewards: bounded_vec![], - } + extract_actual_weight(&result, &info), + max_nom_rewarded_weight ); - // now bond a wee bit more - // Polymesh change - // ----------------------------------------------------------------- - assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(21), 5),); - // ----------------------------------------------------------------- - }) + // Try and collect payouts for an era that has already been collected. + let call = TestCall::Staking(StakingCall::payout_stakers_by_page { + validator_stash: 11, + era: 5, + page: 0, + }); + let info = call.get_dispatch_info(); + let result = call.dispatch(RuntimeOrigin::signed(20)); + assert!(result.is_err()); + // When there is an error the consumed weight == weight when there are 0 nominator payouts. + assert_eq!( + extract_actual_weight(&result, &info), + zero_nom_payouts_weight + ); + }); } #[test] -fn do_not_die_when_active_is_ed() { - let ed = 10; +fn bond_during_era_does_not_populate_legacy_claimed_rewards() { ExtBuilder::default() - .existential_deposit(0) - .balance_factor(ed) + .has_stakers(false) .build_and_execute(|| { - // given + // Era = None + bond_validator(9, 1000); assert_eq!( - Staking::ledger(&21).unwrap(), - StakingLedger { - stash: 21, - total: 1000 * ed, - active: 1000 * ed, + Staking::ledger(9.into()).unwrap(), + StakingLedgerInspect { + stash: 9, + total: 1000, + active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], + legacy_claimed_rewards: bounded_vec![], + } + ); + mock::start_active_era(5); + bond_validator(11, 1000); + assert_eq!( + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { + stash: 11, + total: 1000, + active: 1000, + unlocking: Default::default(), + legacy_claimed_rewards: bounded_vec![], } ); - // when unbond all of it except ed. - assert_ok!(Staking::unbond(RuntimeOrigin::signed(21), 999 * ed)); - start_active_era(3); - assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(21), 100)); - - // then + // make sure only era up to history depth is stored + let current_era = 99; + mock::start_active_era(current_era); + bond_validator(13, 1000); assert_eq!( - Staking::ledger(&21).unwrap(), - StakingLedger { - stash: 21, - total: ed, - active: ed, + Staking::ledger(13.into()).unwrap(), + StakingLedgerInspect { + stash: 13, + total: 1000, + active: 1000, unlocking: Default::default(), - claimed_rewards: bounded_vec![], + legacy_claimed_rewards: Default::default(), } ); - }) + }); } #[test] -fn on_finalize_weight_is_nonzero() { - ExtBuilder::default().build_and_execute(|| { - let on_finalize_weight = ::DbWeight::get().reads(1); - assert!(>::on_initialize(1).all_gte(on_finalize_weight)); - }) -} - -mod election_data_provider { - use super::*; - use frame_election_provider_support::ElectionDataProvider; +fn offences_weight_calculated_correctly() { + ExtBuilder::default().nominate(true).build_and_execute(|| { + // On offence with zero offenders: 4 Reads, 1 Write + let zero_offence_weight = + ::DbWeight::get().reads_writes(4, 1); + assert_eq!( + >::on_offence(&[], &[Perbill::from_percent(50)], 0), + zero_offence_weight + ); - #[test] - fn targets_2sec_block() { - let mut validators = 1000; - while ::WeightInfo::get_npos_targets(validators).all_lt(Weight::from_parts( - 2u64 * frame_support::weights::constants::WEIGHT_REF_TIME_PER_SECOND, - u64::MAX, - )) { - validators += 1; - } + // On Offence with N offenders, Unapplied: 4 Reads, 1 Write + 4 Reads, 5 Writes, 2 Reads + 2 + // Writes for `SessionInterface::report_offence` call. + let n_offence_unapplied_weight = ::DbWeight::get() + .reads_writes(4, 1) + + ::DbWeight::get().reads_writes(4, 5) + + ::DbWeight::get().reads_writes(2, 2); - println!( - "Can create a snapshot of {} validators in 2sec block", - validators - ); - } + let offenders: Vec< + OffenceDetails< + ::AccountId, + pallet_session::historical::IdentificationTuple, + >, + > = (1..10) + .map(|i| OffenceDetails { + offender: (i, ()), + reporters: vec![], + }) + .collect(); + assert_eq!( + >::on_offence( + &offenders, + &[Perbill::from_percent(50)], + 0, + ), + n_offence_unapplied_weight + ); - #[test] - fn voters_2sec_block() { - // we assume a network only wants up to 1000 validators in most cases, thus having 2000 - // candidates is as high as it gets. - let validators = 2000; - let mut nominators = 1000; + // On Offence with one offenders, Applied + let one_offender = [offence_from(11, Some(vec![1]))]; - while ::WeightInfo::get_npos_voters(validators, nominators).all_lt( - Weight::from_parts( - 2u64 * frame_support::weights::constants::WEIGHT_REF_TIME_PER_SECOND, - u64::MAX, + let n = 1; // Number of offenders + let rw = 3 + 3 * n; // rw reads and writes + let one_offence_unapplied_weight = + ::DbWeight::get().reads_writes(4, 1) + + + ::DbWeight::get().reads_writes(rw, rw) + // One `slash_cost` + + ::DbWeight::get().reads_writes(6, 5) + // `slash_cost` * nominators (1) + + ::DbWeight::get().reads_writes(6, 5) + // `reward_cost` * reporters (1) + + ::DbWeight::get().reads_writes(2, 2) + // `SessionInterface::report_offence` + + ::DbWeight::get().reads_writes(2, 2); + + assert_eq!( + >::on_offence( + &one_offender, + &[Perbill::from_percent(50)], + 0, + ), + one_offence_unapplied_weight + ); + }); +} + +#[test] +fn payout_to_any_account_works() { + ExtBuilder::default() + .has_stakers(false) + .build_and_execute(|| { + let balance = 1000; + // Create a validator: + bond_validator(11, balance); // Default(64) + + // Create a stash/controller pair + bond_nominator(1234, 100, vec![11]); + + // Update payout location + assert_ok!(Staking::set_payee( + RuntimeOrigin::signed(1234), + RewardDestination::Account(42) + )); + + // Reward Destination account doesn't exist + assert_eq!(asset::stakeable_balance::(&42), 0); + + mock::start_active_era(1); + Staking::reward_by_ids(vec![(11, 1)]); + // compute and ensure the reward amount is greater than zero. + let _ = current_total_payout_for_duration(reward_time_per_era()); + mock::start_active_era(2); + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 1, + 0 + )); + + // Payment is successful + assert!(asset::stakeable_balance::(&42) > 0); + }) +} + +#[test] +fn session_buffering_with_offset() { + // similar to live-chains, have some offset for the first session + ExtBuilder::default() + .offset(2) + .period(5) + .session_per_era(5) + .build_and_execute(|| { + assert_eq!(current_era(), 0); + assert_eq!(active_era(), 0); + assert_eq!(Session::current_index(), 0); + + start_session(1); + assert_eq!(current_era(), 0); + assert_eq!(active_era(), 0); + assert_eq!(Session::current_index(), 1); + assert_eq!(System::block_number(), 2); + + start_session(2); + assert_eq!(current_era(), 0); + assert_eq!(active_era(), 0); + assert_eq!(Session::current_index(), 2); + assert_eq!(System::block_number(), 7); + + start_session(3); + assert_eq!(current_era(), 0); + assert_eq!(active_era(), 0); + assert_eq!(Session::current_index(), 3); + assert_eq!(System::block_number(), 12); + + // active era is lagging behind by one session, because of how session module works. + start_session(4); + assert_eq!(current_era(), 1); + assert_eq!(active_era(), 0); + assert_eq!(Session::current_index(), 4); + assert_eq!(System::block_number(), 17); + + start_session(5); + assert_eq!(current_era(), 1); + assert_eq!(active_era(), 1); + assert_eq!(Session::current_index(), 5); + assert_eq!(System::block_number(), 22); + + // go all the way to active 2. + start_active_era(2); + assert_eq!(current_era(), 2); + assert_eq!(active_era(), 2); + assert_eq!(Session::current_index(), 10); + }); +} + +#[test] +fn session_buffering_no_offset() { + // no offset, first session starts immediately + ExtBuilder::default() + .offset(0) + .period(5) + .session_per_era(5) + .build_and_execute(|| { + assert_eq!(current_era(), 0); + assert_eq!(active_era(), 0); + assert_eq!(Session::current_index(), 0); + + start_session(1); + assert_eq!(current_era(), 0); + assert_eq!(active_era(), 0); + assert_eq!(Session::current_index(), 1); + assert_eq!(System::block_number(), 5); + + start_session(2); + assert_eq!(current_era(), 0); + assert_eq!(active_era(), 0); + assert_eq!(Session::current_index(), 2); + assert_eq!(System::block_number(), 10); + + start_session(3); + assert_eq!(current_era(), 0); + assert_eq!(active_era(), 0); + assert_eq!(Session::current_index(), 3); + assert_eq!(System::block_number(), 15); + + // active era is lagging behind by one session, because of how session module works. + start_session(4); + assert_eq!(current_era(), 1); + assert_eq!(active_era(), 0); + assert_eq!(Session::current_index(), 4); + assert_eq!(System::block_number(), 20); + + start_session(5); + assert_eq!(current_era(), 1); + assert_eq!(active_era(), 1); + assert_eq!(Session::current_index(), 5); + assert_eq!(System::block_number(), 25); + + // go all the way to active 2. + start_active_era(2); + assert_eq!(current_era(), 2); + assert_eq!(active_era(), 2); + assert_eq!(Session::current_index(), 10); + }); +} + +#[test] +fn cannot_rebond_to_lower_than_ed() { + ExtBuilder::default() + .existential_deposit(11) + .balance_factor(11) + .build_and_execute(|| { + // initial stuff. + assert_eq!( + Staking::ledger(21.into()).unwrap(), + StakingLedgerInspect { + stash: 21, + total: 11 * 1000, + active: 11 * 1000, + unlocking: Default::default(), + legacy_claimed_rewards: bounded_vec![], + } + ); + + // unbond all of it. must be chilled first. + assert_ok!(Staking::chill(RuntimeOrigin::signed(21))); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(21), 11 * 1000)); + assert_eq!( + Staking::ledger(21.into()).unwrap(), + StakingLedgerInspect { + stash: 21, + total: 11 * 1000, + active: 0, + unlocking: bounded_vec![UnlockChunk { + value: 11 * 1000, + era: 3 + }], + legacy_claimed_rewards: bounded_vec![], + } + ); + + // now bond a wee bit more + assert_noop!( + Staking::rebond(RuntimeOrigin::signed(21), 5), + Error::::InsufficientBond + ); + }) +} + +#[test] +fn cannot_bond_extra_to_lower_than_ed() { + ExtBuilder::default() + .existential_deposit(11) + .balance_factor(11) + .build_and_execute(|| { + // initial stuff. + assert_eq!( + Staking::ledger(21.into()).unwrap(), + StakingLedgerInspect { + stash: 21, + total: 11 * 1000, + active: 11 * 1000, + unlocking: Default::default(), + legacy_claimed_rewards: bounded_vec![], + } + ); + + // unbond all of it. must be chilled first. + assert_ok!(Staking::chill(RuntimeOrigin::signed(21))); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(21), 11 * 1000)); + assert_eq!( + Staking::ledger(21.into()).unwrap(), + StakingLedgerInspect { + stash: 21, + total: 11 * 1000, + active: 0, + unlocking: bounded_vec![UnlockChunk { + value: 11 * 1000, + era: 3 + }], + legacy_claimed_rewards: bounded_vec![], + } + ); + + // now bond a wee bit more + assert_noop!( + Staking::bond_extra(RuntimeOrigin::signed(21), 5), + Error::::InsufficientBond, + ); + }) +} + +#[test] +fn do_not_die_when_active_is_ed() { + let ed = 10; + ExtBuilder::default() + .existential_deposit(ed) + .balance_factor(ed) + .build_and_execute(|| { + // given + assert_eq!( + Staking::ledger(21.into()).unwrap(), + StakingLedgerInspect { + stash: 21, + total: 1000 * ed, + active: 1000 * ed, + unlocking: Default::default(), + legacy_claimed_rewards: bounded_vec![], + } + ); + + // when unbond all of it except ed. + assert_ok!(Staking::unbond(RuntimeOrigin::signed(21), 999 * ed)); + start_active_era(3); + assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(21), 100)); + + // then + assert_eq!( + Staking::ledger(21.into()).unwrap(), + StakingLedgerInspect { + stash: 21, + total: ed, + active: ed, + unlocking: Default::default(), + legacy_claimed_rewards: bounded_vec![], + } + ); + }) +} + +#[test] +fn on_finalize_weight_is_nonzero() { + ExtBuilder::default().build_and_execute(|| { + let on_finalize_weight = ::DbWeight::get().reads(1); + assert!(>::on_initialize(1).all_gte(on_finalize_weight)); + }) +} + +#[test] +fn restricted_accounts_can_only_withdraw() { + ExtBuilder::default().build_and_execute(|| { + start_active_era(1); + // alice is a non blacklisted account. + let alice = 301; + let _ = Balances::make_free_balance_be(&alice, 500); + // alice can bond + assert_ok!(Staking::bond( + RuntimeOrigin::signed(alice), + 100, + RewardDestination::Staked + )); + // and bob is a blacklisted account + let bob = 302; + let _ = Balances::make_free_balance_be(&bob, 500); + restrict(&bob); + + // Bob cannot bond + assert_noop!( + Staking::bond(RuntimeOrigin::signed(bob), 100, RewardDestination::Staked,), + Error::::Restricted + ); + + // alice is blacklisted now and cannot bond anymore + restrict(&alice); + assert_noop!( + Staking::bond_extra(RuntimeOrigin::signed(alice), 100), + Error::::Restricted + ); + // but she can unbond her existing bond + assert_ok!(Staking::unbond(RuntimeOrigin::signed(alice), 100)); + + // she cannot rebond the unbonded amount + start_active_era(2); + assert_noop!( + Staking::rebond(RuntimeOrigin::signed(alice), 50), + Error::::Restricted + ); + + // move to era when alice fund can be withdrawn + start_active_era(4); + // alice can withdraw now + assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(alice), 0)); + // she still cannot bond + assert_noop!( + Staking::bond(RuntimeOrigin::signed(alice), 100, RewardDestination::Staked,), + Error::::Restricted + ); + + // bob is removed from restrict list + remove_from_restrict_list(&bob); + // bob can bond now + assert_ok!(Staking::bond( + RuntimeOrigin::signed(bob), + 100, + RewardDestination::Staked + )); + // and bond extra + assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(bob), 100)); + + start_active_era(6); + // unbond also works. + assert_ok!(Staking::unbond(RuntimeOrigin::signed(bob), 100)); + // bob can withdraw as well. + start_active_era(9); + assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(bob), 0)); + }) +} + +mod election_data_provider { + use super::*; + use frame_election_provider_support::ElectionDataProvider; + + #[test] + fn targets_2sec_block() { + let mut validators = 1000; + while ::WeightInfo::get_npos_targets(validators).all_lt(Weight::from_parts( + 2u64 * frame_support::weights::constants::WEIGHT_REF_TIME_PER_SECOND, + u64::MAX, + )) { + validators += 1; + } + + println!( + "Can create a snapshot of {} validators in 2sec block", + validators + ); + } + + #[test] + fn voters_2sec_block() { + // we assume a network only wants up to 1000 validators in most cases, thus having 2000 + // candidates is as high as it gets. + let validators = 2000; + let mut nominators = 1000; + + while ::WeightInfo::get_npos_voters(validators, nominators).all_lt( + Weight::from_parts( + 2u64 * frame_support::weights::constants::WEIGHT_REF_TIME_PER_SECOND, + u64::MAX, + ), + ) { + nominators += 1; + } + + println!( + "Can create a snapshot of {} nominators [{} validators, each 1 slashing] in 2sec block", + nominators, validators + ); + } + + #[test] + fn set_minimum_active_stake_is_correct() { + ExtBuilder::default() + .nominate(false) + .add_staker( + 61, + 61, + 2_000, + StakerStatus::::Nominator(vec![21]), + ) + .add_staker(71, 71, 10, StakerStatus::::Nominator(vec![21])) + .add_staker(81, 81, 50, StakerStatus::::Nominator(vec![21])) + .build_and_execute(|| { + // default bounds are unbounded. + assert_ok!(::electing_voters( + DataProviderBounds::default() + )); + assert_eq!(MinimumActiveStake::::get(), 10); + + // remove staker with lower bond by limiting the number of voters and check + // `MinimumActiveStake` again after electing voters. + let bounds = ElectionBoundsBuilder::default() + .voters_count(5.into()) + .build(); + assert_ok!(::electing_voters( + bounds.voters + )); + assert_eq!(MinimumActiveStake::::get(), 50); + }); + } + + #[test] + fn set_minimum_active_stake_lower_bond_works() { + // if there are no voters, minimum active stake is zero (should not happen). + ExtBuilder::default() + .has_stakers(false) + .build_and_execute(|| { + // default bounds are unbounded. + assert_ok!(::electing_voters( + DataProviderBounds::default() + )); + assert_eq!(::VoterList::count(), 0); + assert_eq!(MinimumActiveStake::::get(), 0); + }); + + // lower non-zero active stake below `MinNominatorBond` is the minimum active stake if + // it is selected as part of the npos voters. + ExtBuilder::default() + .has_stakers(true) + .nominate(true) + .build_and_execute(|| { + assert_eq!(MinNominatorBond::::get(), 1); + assert_eq!(::VoterList::count(), 4); + + assert_ok!(Staking::bond( + RuntimeOrigin::signed(4), + 5, + RewardDestination::Staked, + )); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(4), vec![1])); + assert_eq!(::VoterList::count(), 5); + + let voters_before = ::electing_voters( + DataProviderBounds::default(), + ) + .unwrap(); + assert_eq!(MinimumActiveStake::::get(), 5); + + // update minimum nominator bond. + MinNominatorBond::::set(10); + assert_eq!(MinNominatorBond::::get(), 10); + // voter list still considers nominator 4 for voting, even though its active stake is + // lower than `MinNominatorBond`. + assert_eq!(::VoterList::count(), 5); + + let voters = ::electing_voters( + DataProviderBounds::default(), + ) + .unwrap(); + assert_eq!(voters_before, voters); + + // minimum active stake is lower than `MinNominatorBond`. + assert_eq!(MinimumActiveStake::::get(), 5); + }); + } + + #[test] + fn set_minimum_active_bond_corrupt_state() { + ExtBuilder::default() + .has_stakers(true) + .nominate(true) + .add_staker( + 61, + 61, + 2_000, + StakerStatus::::Nominator(vec![21]), + ) + .build_and_execute(|| { + assert_eq!(Staking::weight_of(&101), 500); + let voters = ::electing_voters( + DataProviderBounds::default(), + ) + .unwrap(); + assert_eq!(voters.len(), 5); + assert_eq!(MinimumActiveStake::::get(), 500); + + assert_ok!(Staking::unbond(RuntimeOrigin::signed(101), 200)); + start_active_era(10); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(101), 100)); + start_active_era(20); + + // corrupt ledger state by lowering max unlocking chunks bounds. + MaxUnlockingChunks::set(1); + + let voters = ::electing_voters( + DataProviderBounds::default(), + ) + .unwrap(); + // number of returned voters decreases since ledger entry of stash 101 is now + // corrupt. + assert_eq!(voters.len(), 4); + // minimum active stake does not take into consideration the corrupt entry. + assert_eq!(MinimumActiveStake::::get(), 2_000); + + // voter weight of corrupted ledger entry is 0. + assert_eq!(Staking::weight_of(&101), 0); + + // reset max unlocking chunks for try_state to pass. + MaxUnlockingChunks::set(32); + }) + } + + #[test] + fn voters_include_self_vote() { + ExtBuilder::default().nominate(false).build_and_execute(|| { + // default bounds are unbounded. + assert!(>::iter() + .map(|(x, _)| x) + .all(|v| Staking::electing_voters(DataProviderBounds::default()) + .unwrap() + .into_iter() + .any(|(w, _, t)| { v == w && t[0] == w }))) + }) + } + + // Tests the criteria that in `ElectionDataProvider::voters` function, we try to get at most + // `maybe_max_len` voters, and if some of them end up being skipped, we iterate at most `2 * + // maybe_max_len`. + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn only_iterates_max_2_times_max_allowed_len() { + ExtBuilder::default() + .nominate(false) + // the best way to invalidate a bunch of nominators is to have them nominate a lot of + // ppl, but then lower the MaxNomination limit. + .add_staker( + 61, + 61, + 2_000, + StakerStatus::::Nominator(vec![21, 22, 23, 24, 25]), + ) + .add_staker( + 71, + 71, + 2_000, + StakerStatus::::Nominator(vec![21, 22, 23, 24, 25]), + ) + .add_staker( + 81, + 81, + 2_000, + StakerStatus::::Nominator(vec![21, 22, 23, 24, 25]), + ) + .build_and_execute(|| { + let bounds_builder = ElectionBoundsBuilder::default(); + // all voters ordered by stake, + assert_eq!( + ::VoterList::iter().collect::>(), + vec![61, 71, 81, 11, 21, 31] + ); + + AbsoluteMaxNominations::set(2); + + // we want 2 voters now, and in maximum we allow 4 iterations. This is what happens: + // 61 is pruned; + // 71 is pruned; + // 81 is pruned; + // 11 is taken; + // we finish since the 2x limit is reached. + assert_eq!( + Staking::electing_voters(bounds_builder.voters_count(2.into()).build().voters) + .unwrap() + .iter() + .map(|(stash, _, _)| stash) + .copied() + .collect::>(), + vec![11], + ); + }); + } + + #[test] + fn respects_snapshot_count_limits() { + ExtBuilder::default() + .set_status(41, StakerStatus::Validator) + .build_and_execute(|| { + // sum of all nominators who'd be voters (1), plus the self-votes (4). + assert_eq!(::VoterList::count(), 5); + + let bounds_builder = ElectionBoundsBuilder::default(); + + // if voter count limit is less.. + assert_eq!( + Staking::electing_voters(bounds_builder.voters_count(1.into()).build().voters) + .unwrap() + .len(), + 1 + ); + + // if voter count limit is equal.. + assert_eq!( + Staking::electing_voters(bounds_builder.voters_count(5.into()).build().voters) + .unwrap() + .len(), + 5 + ); + + // if voter count limit is more. + assert_eq!( + Staking::electing_voters(bounds_builder.voters_count(55.into()).build().voters) + .unwrap() + .len(), + 5 + ); + + // if target count limit is more.. + assert_eq!( + Staking::electable_targets( + bounds_builder.targets_count(6.into()).build().targets + ) + .unwrap() + .len(), + 4 + ); + + // if target count limit is equal.. + assert_eq!( + Staking::electable_targets( + bounds_builder.targets_count(4.into()).build().targets + ) + .unwrap() + .len(), + 4 + ); + + // if target limit count is less, then we return an error. + assert_eq!( + Staking::electable_targets( + bounds_builder.targets_count(1.into()).build().targets + ) + .unwrap_err(), + "Target snapshot too big" + ); + }); + } + + #[test] + fn respects_snapshot_size_limits() { + ExtBuilder::default().build_and_execute(|| { + // voters: set size bounds that allows only for 1 voter. + let bounds = ElectionBoundsBuilder::default() + .voters_size(26.into()) + .build(); + let elected = Staking::electing_voters(bounds.voters).unwrap(); + assert!(elected.encoded_size() == 26 as usize); + let prev_len = elected.len(); + + // larger size bounds means more quota for voters. + let bounds = ElectionBoundsBuilder::default() + .voters_size(100.into()) + .build(); + let elected = Staking::electing_voters(bounds.voters).unwrap(); + assert!(elected.encoded_size() <= 100 as usize); + assert!(elected.len() > 1 && elected.len() > prev_len); + + // targets: set size bounds that allows for only one target to fit in the snapshot. + let bounds = ElectionBoundsBuilder::default() + .targets_size(10.into()) + .build(); + let elected = Staking::electable_targets(bounds.targets).unwrap(); + assert!(elected.encoded_size() == 9 as usize); + let prev_len = elected.len(); + + // larger size bounds means more space for targets. + let bounds = ElectionBoundsBuilder::default() + .targets_size(100.into()) + .build(); + let elected = Staking::electable_targets(bounds.targets).unwrap(); + assert!(elected.encoded_size() <= 100 as usize); + assert!(elected.len() > 1 && elected.len() > prev_len); + }); + } + + #[test] + fn nomination_quota_checks_at_nominate_works() { + ExtBuilder::default().nominate(false).build_and_execute(|| { + // stash bond of 222 has a nomination quota of 2 targets. + bond(61, 222); + assert_eq!(Staking::api_nominations_quota(222), 2); + + // nominating with targets below the nomination quota works. + assert_ok!(Staking::nominate(RuntimeOrigin::signed(61), vec![11])); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(61), vec![11, 12])); + + // nominating with targets above the nomination quota returns error. + assert_noop!( + Staking::nominate(RuntimeOrigin::signed(61), vec![11, 12, 13]), + Error::::TooManyTargets + ); + }); + } + + #[test] + fn lazy_quota_npos_voters_works_above_quota() { + ExtBuilder::default() + .nominate(false) + .add_staker( + 61, + 60, + 300, // 300 bond has 16 nomination quota. + StakerStatus::::Nominator(vec![21, 22, 23, 24, 25]), + ) + .build_and_execute(|| { + // unbond 78 from stash 60 so that it's bonded balance is 222, which has a lower + // nomination quota than at nomination time (max 2 targets). + assert_ok!(Staking::unbond(RuntimeOrigin::signed(61), 78)); + assert_eq!(Staking::api_nominations_quota(300 - 78), 2); + + // even through 61 has nomination quota of 2 at the time of the election, all the + // nominations (5) will be used. + assert_eq!( + Staking::electing_voters(DataProviderBounds::default()) + .unwrap() + .iter() + .map(|(stash, _, targets)| (*stash, targets.len())) + .collect::>(), + vec![(11, 1), (21, 1), (31, 1), (61, 5)], + ); + }); + } + + #[test] + fn nominations_quota_limits_size_work() { + ExtBuilder::default() + .nominate(false) + .add_staker( + 71, + 70, + 333, + StakerStatus::::Nominator(vec![16, 15, 14, 13, 12, 11, 10]), + ) + .build_and_execute(|| { + // nominations of controller 70 won't be added due to voter size limit exceeded. + let bounds = ElectionBoundsBuilder::default() + .voters_size(100.into()) + .build(); + assert_eq!( + Staking::electing_voters(bounds.voters) + .unwrap() + .iter() + .map(|(stash, _, targets)| (*stash, targets.len())) + .collect::>(), + vec![(11, 1), (21, 1), (31, 1)], + ); + + assert_eq!( + *staking_events().last().unwrap(), + Event::SnapshotVotersSizeExceeded { size: 75 } + ); + + // however, if the election voter size bounds were larger, the snapshot would + // include the electing voters of 70. + let bounds = ElectionBoundsBuilder::default() + .voters_size(1_000.into()) + .build(); + assert_eq!( + Staking::electing_voters(bounds.voters) + .unwrap() + .iter() + .map(|(stash, _, targets)| (*stash, targets.len())) + .collect::>(), + vec![(11, 1), (21, 1), (31, 1), (71, 7)], + ); + }); + } + + #[test] + fn estimate_next_election_works() { + ExtBuilder::default() + .session_per_era(5) + .period(5) + .build_and_execute(|| { + // first session is always length 0. + for b in 1..20 { + run_to_block(b); + assert_eq!( + Staking::next_election_prediction(System::block_number()), + 20 + ); + } + + // election + run_to_block(20); + assert_eq!( + Staking::next_election_prediction(System::block_number()), + 45 + ); + assert_eq!(staking_events().len(), 1); + assert_eq!(*staking_events().last().unwrap(), Event::StakersElected); + + for b in 21..45 { + run_to_block(b); + assert_eq!( + Staking::next_election_prediction(System::block_number()), + 45 + ); + } + + // election + run_to_block(45); + assert_eq!( + Staking::next_election_prediction(System::block_number()), + 70 + ); + assert_eq!(staking_events().len(), 3); + assert_eq!(*staking_events().last().unwrap(), Event::StakersElected); + + Staking::force_no_eras(RuntimeOrigin::root()).unwrap(); + assert_eq!( + Staking::next_election_prediction(System::block_number()), + u64::MAX + ); + + Staking::force_new_era_always(RuntimeOrigin::root()).unwrap(); + assert_eq!( + Staking::next_election_prediction(System::block_number()), + 45 + 5 + ); + + Staking::force_new_era(RuntimeOrigin::root()).unwrap(); + assert_eq!( + Staking::next_election_prediction(System::block_number()), + 45 + 5 + ); + + // Do a fail election + MinimumValidatorCount::::put(1000); + run_to_block(50); + // Election: failed, next session is a new election + assert_eq!( + Staking::next_election_prediction(System::block_number()), + 50 + 5 + ); + // The new era is still forced until a new era is planned. + assert_eq!(ForceEra::::get(), Forcing::ForceNew); + + MinimumValidatorCount::::put(2); + run_to_block(55); + assert_eq!( + Staking::next_election_prediction(System::block_number()), + 55 + 25 + ); + assert_eq!(staking_events().len(), 10); + assert_eq!( + *staking_events().last().unwrap(), + Event::ForceEra { + mode: Forcing::NotForcing + } + ); + assert_eq!( + *staking_events().get(staking_events().len() - 2).unwrap(), + Event::StakersElected + ); + // The new era has been planned, forcing is changed from `ForceNew` to `NotForcing`. + assert_eq!(ForceEra::::get(), Forcing::NotForcing); + }) + } +} + +#[test] +#[should_panic] +fn count_check_works() { + ExtBuilder::default().build_and_execute(|| { + // We should never insert into the validators or nominators map directly as this will + // not keep track of the count. This test should panic as we verify the count is accurate + // after every test using the `post_checks` in `mock`. + Validators::::insert(987654321, ValidatorPrefs::default()); + Nominators::::insert( + 987654321, + Nominations { + targets: Default::default(), + submitted_in: Default::default(), + suppressed: false, + }, + ); + }) +} + +#[test] +#[should_panic = "called `Result::unwrap()` on an `Err` value: Other(\"number of entries in payee storage items does not match the number of bonded ledgers\")"] +fn check_payee_invariant1_works() { + // A bonded ledger should always have an assigned `Payee` This test should panic as we verify + // that a bad state will panic due to the `try_state` checks in the `post_checks` in `mock`. + ExtBuilder::default().build_and_execute(|| { + let rogue_ledger = StakingLedger::::new(123456, 20); + Ledger::::insert(123456, rogue_ledger); + }) +} + +#[test] +#[should_panic = "called `Result::unwrap()` on an `Err` value: Other(\"number of entries in payee storage items does not match the number of bonded ledgers\")"] +fn check_payee_invariant2_works() { + // The number of entries in both `Payee` and of bonded staking ledgers should match. This test + // should panic as we verify that a bad state will panic due to the `try_state` checks in the + // `post_checks` in `mock`. + ExtBuilder::default().build_and_execute(|| { + Payee::::insert(1111, RewardDestination::Staked); + }) +} + +#[test] +fn min_bond_checks_work() { + ExtBuilder::default() + .existential_deposit(100) + .balance_factor(100) + .min_nominator_bond(1_000) + .min_validator_bond(1_500) + .build_and_execute(|| { + // 500 is not enough for any role + assert_ok!(Staking::bond( + RuntimeOrigin::signed(3), + 500, + RewardDestination::Stash + )); + assert_noop!( + Staking::nominate(RuntimeOrigin::signed(3), vec![1]), + Error::::InsufficientBond + ); + assert_noop!( + Staking::validate(RuntimeOrigin::signed(3), ValidatorPrefs::default()), + Error::::InsufficientBond, + ); + + // 1000 is enough for nominator + assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(3), 500)); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![1])); + assert_noop!( + Staking::validate(RuntimeOrigin::signed(3), ValidatorPrefs::default()), + Error::::InsufficientBond, + ); + + // 1500 is enough for validator + assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(3), 500)); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![1])); + assert_ok!(Staking::validate( + RuntimeOrigin::signed(3), + ValidatorPrefs::default() + )); + + // Can't unbond anything as validator + assert_noop!( + Staking::unbond(RuntimeOrigin::signed(3), 500), + Error::::InsufficientBond + ); + + // Once they are a nominator, they can unbond 500 + assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![1])); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(3), 500)); + assert_noop!( + Staking::unbond(RuntimeOrigin::signed(3), 500), + Error::::InsufficientBond + ); + + // Once they are chilled they can unbond everything + assert_ok!(Staking::chill(RuntimeOrigin::signed(3))); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(3), 1000)); + }) +} + +#[test] +fn chill_other_works() { + ExtBuilder::default() + .existential_deposit(100) + .balance_factor(100) + .min_nominator_bond(1_000) + .min_validator_bond(1_500) + .build_and_execute(|| { + // Valid messing with existing validators and nominators. + let base = 200; + let initial_validators = Validators::::count(); + let initial_nominators = Nominators::::count(); + for i in 0..15 { + let a = base + 4 * i; + let b = base + 4 * i + 2; + let c = base + 4 * i + 3; + asset::set_stakeable_balance::(&a, 100_000); + asset::set_stakeable_balance::(&b, 100_000); + asset::set_stakeable_balance::(&c, 100_000); + + // Nominator + assert_ok!(Staking::bond( + RuntimeOrigin::signed(a), + 1000, + RewardDestination::Stash + )); + assert_ok!(Staking::nominate(RuntimeOrigin::signed(a), vec![1])); + + // Validator + assert_ok!(Staking::bond( + RuntimeOrigin::signed(b), + 1500, + RewardDestination::Stash + )); + assert_ok!(Staking::validate( + RuntimeOrigin::signed(b), + ValidatorPrefs::default() + )); + } + + // To chill other users, we need to: + // * Set a minimum bond amount + // * Set a limit + // * Set a threshold + // + // If any of these are missing, we do not have enough information to allow the + // `chill_other` to succeed from one user to another. + // + // Out of 8 possible cases, only one will allow the use of `chill_other`, which is + // when all 3 conditions are met. + + // 1. No limits whatsoever + assert_ok!(Staking::set_staking_configs( + RuntimeOrigin::root(), + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Remove, + )); + + // Can't chill these users + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 0), + Error::::CannotChillOther + ); + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 2), + Error::::CannotChillOther + ); + + // 2. Change only the minimum bonds. + assert_ok!(Staking::set_staking_configs( + RuntimeOrigin::root(), + ConfigOp::Set(1_500), + ConfigOp::Set(2_000), + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Noop, + )); + + // Still can't chill these users + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 0), + Error::::CannotChillOther + ); + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 2), + Error::::CannotChillOther + ); + + // 3. Add nominator/validator count limits, but no other threshold. + assert_ok!(Staking::set_staking_configs( + RuntimeOrigin::root(), + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Set(10), + ConfigOp::Set(10), + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Noop, + )); + + // Still can't chill these users + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 0), + Error::::CannotChillOther + ); + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 2), + Error::::CannotChillOther + ); + + // 4. Add chil threshold, but no other limits + assert_ok!(Staking::set_staking_configs( + RuntimeOrigin::root(), + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Set(Percent::from_percent(75)), + ConfigOp::Noop, + ConfigOp::Noop, + )); + + // Still can't chill these users + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 0), + Error::::CannotChillOther + ); + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 2), + Error::::CannotChillOther + ); + + // 5. Add bond and count limits, but no threshold + assert_ok!(Staking::set_staking_configs( + RuntimeOrigin::root(), + ConfigOp::Set(1_500), + ConfigOp::Set(2_000), + ConfigOp::Set(10), + ConfigOp::Set(10), + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Remove, + )); + + // Still can't chill these users + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 0), + Error::::CannotChillOther + ); + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 2), + Error::::CannotChillOther + ); + + // 6. Add bond and threshold limits, but no count limits + assert_ok!(Staking::set_staking_configs( + RuntimeOrigin::root(), + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Set(Percent::from_percent(75)), + ConfigOp::Noop, + ConfigOp::Noop, + )); + + // Still can't chill these users + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 0), + Error::::CannotChillOther + ); + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 2), + Error::::CannotChillOther + ); + + // 7. Add count limits and a chill threshold, but no bond limits + assert_ok!(Staking::set_staking_configs( + RuntimeOrigin::root(), + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Set(10), + ConfigOp::Set(10), + ConfigOp::Set(Percent::from_percent(75)), + ConfigOp::Noop, + ConfigOp::Noop, + )); + + // Still can't chill these users + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 0), + Error::::CannotChillOther + ); + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 2), + Error::::CannotChillOther + ); + + // 8. Add all limits + assert_ok!(Staking::set_staking_configs( + RuntimeOrigin::root(), + ConfigOp::Set(1_500), + ConfigOp::Set(2_000), + ConfigOp::Set(10), + ConfigOp::Set(10), + ConfigOp::Set(Percent::from_percent(75)), + ConfigOp::Noop, + ConfigOp::Noop, + )); + + // 16 people total because tests start with 2 active one + assert_eq!(Nominators::::count(), 15 + initial_nominators); + assert_eq!(Validators::::count(), 15 + initial_validators); + + // Users can now be chilled down to 7 people, so we try to remove 9 of them (starting + // with 16) + for i in 6..15 { + let b = base + 4 * i; + let d = base + 4 * i + 2; + assert_ok!(Staking::chill_other(RuntimeOrigin::signed(1337), b)); + assert_eq!( + *staking_events().last().unwrap(), + Event::Chilled { stash: b } + ); + assert_ok!(Staking::chill_other(RuntimeOrigin::signed(1337), d)); + assert_eq!( + *staking_events().last().unwrap(), + Event::Chilled { stash: d } + ); + } + + // chill a nominator. Limit is not reached, not chill-able + assert_eq!(Nominators::::count(), 7); + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1337), base + 0), + Error::::CannotChillOther + ); + // chill a validator. Limit is reached, chill-able. + assert_eq!(Validators::::count(), 9); + assert_ok!(Staking::chill_other(RuntimeOrigin::signed(1337), base + 2)); + }) +} + +#[test] +fn capped_stakers_works() { + ExtBuilder::default().build_and_execute(|| { + let validator_count = Validators::::count(); + assert_eq!(validator_count, 3); + let nominator_count = Nominators::::count(); + assert_eq!(nominator_count, 1); + + // Change the maximums + let max = 10; + assert_ok!(Staking::set_staking_configs( + RuntimeOrigin::root(), + ConfigOp::Set(10), + ConfigOp::Set(10), + ConfigOp::Set(max), + ConfigOp::Set(max), + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Noop, + )); + + // can create `max - validator_count` validators + let mut some_existing_validator = AccountId::default(); + for i in 0..max - validator_count { + let (_, controller) = testing_utils::create_stash_controller::( + i + 10_000_000, + 100, + RewardDestination::Stash, + ) + .unwrap(); + assert_ok!(Staking::validate( + RuntimeOrigin::signed(controller), + ValidatorPrefs::default() + )); + some_existing_validator = controller; + } + + // but no more + let (_, last_validator) = + testing_utils::create_stash_controller::(1337, 100, RewardDestination::Stash) + .unwrap(); + + assert_noop!( + Staking::validate( + RuntimeOrigin::signed(last_validator), + ValidatorPrefs::default() + ), + Error::::TooManyValidators, + ); + + // same with nominators + let mut some_existing_nominator = AccountId::default(); + for i in 0..max - nominator_count { + let (_, controller) = testing_utils::create_stash_controller::( + i + 20_000_000, + 100, + RewardDestination::Stash, + ) + .unwrap(); + assert_ok!(Staking::nominate( + RuntimeOrigin::signed(controller), + vec![1] + )); + some_existing_nominator = controller; + } + + // one more is too many. + let (_, last_nominator) = testing_utils::create_stash_controller::( + 30_000_000, + 100, + RewardDestination::Stash, + ) + .unwrap(); + assert_noop!( + Staking::nominate(RuntimeOrigin::signed(last_nominator), vec![1]), + Error::::TooManyNominators + ); + + // Re-nominate works fine + assert_ok!(Staking::nominate( + RuntimeOrigin::signed(some_existing_nominator), + vec![1] + )); + // Re-validate works fine + assert_ok!(Staking::validate( + RuntimeOrigin::signed(some_existing_validator), + ValidatorPrefs::default() + )); + + // No problem when we set to `None` again + assert_ok!(Staking::set_staking_configs( + RuntimeOrigin::root(), + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Noop, + ConfigOp::Noop, + ConfigOp::Noop, + )); + assert_ok!(Staking::nominate( + RuntimeOrigin::signed(last_nominator), + vec![1] + )); + assert_ok!(Staking::validate( + RuntimeOrigin::signed(last_validator), + ValidatorPrefs::default() + )); + }) +} + +#[test] +fn min_commission_works() { + ExtBuilder::default().build_and_execute(|| { + // account 11 controls the stash of itself. + assert_ok!(Staking::validate( + RuntimeOrigin::signed(11), + ValidatorPrefs { + commission: Perbill::from_percent(5), + blocked: false + } + )); + + // event emitted should be correct + assert_eq!( + *staking_events().last().unwrap(), + Event::ValidatorPrefsSet { + stash: 11, + prefs: ValidatorPrefs { + commission: Perbill::from_percent(5), + blocked: false + } + } + ); + + assert_ok!(Staking::set_staking_configs( + RuntimeOrigin::root(), + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Remove, + ConfigOp::Set(Perbill::from_percent(10)), + ConfigOp::Noop, + )); + + // can't make it less than 10 now + assert_noop!( + Staking::validate( + RuntimeOrigin::signed(11), + ValidatorPrefs { + commission: Perbill::from_percent(5), + blocked: false + } + ), + Error::::CommissionTooLow + ); + + // can only change to higher. + assert_ok!(Staking::validate( + RuntimeOrigin::signed(11), + ValidatorPrefs { + commission: Perbill::from_percent(10), + blocked: false + } + )); + + assert_ok!(Staking::validate( + RuntimeOrigin::signed(11), + ValidatorPrefs { + commission: Perbill::from_percent(15), + blocked: false + } + )); + }) +} + +#[test] +#[should_panic] +#[cfg(debug_assertions)] +fn change_of_absolute_max_nominations() { + use frame_election_provider_support::ElectionDataProvider; + ExtBuilder::default() + .add_staker(61, 61, 10, StakerStatus::Nominator(vec![1])) + .add_staker(71, 71, 10, StakerStatus::Nominator(vec![1, 2, 3])) + .balance_factor(10) + .build_and_execute(|| { + // pre-condition + assert_eq!(AbsoluteMaxNominations::get(), 16); + + assert_eq!( + Nominators::::iter() + .map(|(k, n)| (k, n.targets.len())) + .collect::>(), + vec![(101, 2), (71, 3), (61, 1)] + ); + + // default bounds are unbounded. + let bounds = DataProviderBounds::default(); + + // 3 validators and 3 nominators + assert_eq!(Staking::electing_voters(bounds).unwrap().len(), 3 + 3); + + // abrupt change from 16 to 4, everyone should be fine. + AbsoluteMaxNominations::set(4); + + assert_eq!( + Nominators::::iter() + .map(|(k, n)| (k, n.targets.len())) + .collect::>(), + vec![(101, 2), (71, 3), (61, 1)] + ); + assert_eq!(Staking::electing_voters(bounds).unwrap().len(), 3 + 3); + + // No one can be chilled on account of non-decodable keys. + for k in Nominators::::iter_keys() { + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1), k), + Error::::CannotChillOther + ); + } + + // abrupt change from 4 to 3, everyone should be fine. + AbsoluteMaxNominations::set(3); + + assert_eq!( + Nominators::::iter() + .map(|(k, n)| (k, n.targets.len())) + .collect::>(), + vec![(101, 2), (71, 3), (61, 1)] + ); + assert_eq!(Staking::electing_voters(bounds).unwrap().len(), 3 + 3); + + // As before, no one can be chilled on account of non-decodable keys. + for k in Nominators::::iter_keys() { + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1), k), + Error::::CannotChillOther + ); + } + + // abrupt change from 3 to 2, this should cause some nominators to be non-decodable, and + // thus non-existent unless they update. + AbsoluteMaxNominations::set(2); + + assert_eq!( + Nominators::::iter() + .map(|(k, n)| (k, n.targets.len())) + .collect::>(), + vec![(101, 2), (61, 1)] + ); + + // 101 and 61 still cannot be chilled by someone else. + for k in [101, 61].iter() { + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1), *k), + Error::::CannotChillOther + ); + } + + // 71 is still in storage.. + assert!(Nominators::::contains_key(71)); + // but its value cannot be decoded and default is returned. + assert!(Nominators::::get(71).is_none()); + + assert_eq!(Staking::electing_voters(bounds).unwrap().len(), 3 + 2); + assert!(Nominators::::contains_key(101)); + + // abrupt change from 2 to 1, this should cause some nominators to be non-decodable, and + // thus non-existent unless they update. + AbsoluteMaxNominations::set(1); + + assert_eq!( + Nominators::::iter() + .map(|(k, n)| (k, n.targets.len())) + .collect::>(), + vec![(61, 1)] + ); + + // 61 *still* cannot be chilled by someone else. + assert_noop!( + Staking::chill_other(RuntimeOrigin::signed(1), 61), + Error::::CannotChillOther + ); + + assert!(Nominators::::contains_key(71)); + assert!(Nominators::::contains_key(61)); + assert!(Nominators::::get(71).is_none()); + assert!(Nominators::::get(61).is_some()); + assert_eq!(Staking::electing_voters(bounds).unwrap().len(), 3 + 1); + + // now one of them can revive themselves by re-nominating to a proper value. + assert_ok!(Staking::nominate(RuntimeOrigin::signed(71), vec![1])); + assert_eq!( + Nominators::::iter() + .map(|(k, n)| (k, n.targets.len())) + .collect::>(), + vec![(71, 1), (61, 1)] + ); + + // or they can be chilled by any account. + assert!(Nominators::::contains_key(101)); + assert!(Nominators::::get(101).is_none()); + assert_ok!(Staking::chill_other(RuntimeOrigin::signed(71), 101)); + assert_eq!( + *staking_events().last().unwrap(), + Event::Chilled { stash: 101 } + ); + assert!(!Nominators::::contains_key(101)); + assert!(Nominators::::get(101).is_none()); + }) +} + +#[test] +fn nomination_quota_max_changes_decoding() { + use frame_election_provider_support::ElectionDataProvider; + ExtBuilder::default() + .add_staker(60, 61, 10, StakerStatus::Nominator(vec![1])) + .add_staker(70, 71, 10, StakerStatus::Nominator(vec![1, 2, 3])) + .add_staker(30, 330, 10, StakerStatus::Nominator(vec![1, 2, 3, 4])) + .add_staker(50, 550, 10, StakerStatus::Nominator(vec![1, 2, 3, 4])) + .balance_factor(11) + .build_and_execute(|| { + // pre-condition. + assert_eq!(MaxNominationsOf::::get(), 16); + + let unbonded_election = DataProviderBounds::default(); + + assert_eq!( + Nominators::::iter() + .map(|(k, n)| (k, n.targets.len())) + .collect::>(), + vec![(70, 3), (101, 2), (50, 4), (30, 4), (60, 1)] + ); + // 4 validators and 4 nominators + assert_eq!( + Staking::electing_voters(unbonded_election).unwrap().len(), + 4 + 4 + ); + }); +} + +#[test] +fn api_nominations_quota_works() { + ExtBuilder::default().build_and_execute(|| { + assert_eq!( + Staking::api_nominations_quota(10), + MaxNominationsOf::::get() + ); + assert_eq!( + Staking::api_nominations_quota(333), + MaxNominationsOf::::get() + ); + assert_eq!(Staking::api_nominations_quota(222), 2); + assert_eq!(Staking::api_nominations_quota(111), 1); + }) +} + +mod sorted_list_provider { + use super::*; + use frame_election_provider_support::SortedListProvider; + + #[test] + fn re_nominate_does_not_change_counters_or_list() { + ExtBuilder::default().nominate(true).build_and_execute(|| { + // given + let pre_insert_voter_count = + (Nominators::::count() + Validators::::count()) as u32; + assert_eq!(::VoterList::count(), pre_insert_voter_count); + + assert_eq!( + ::VoterList::iter().collect::>(), + vec![11, 21, 31, 101] + ); + + // when account 101 renominates + assert_ok!(Staking::nominate(RuntimeOrigin::signed(101), vec![41])); + + // then counts don't change + assert_eq!(::VoterList::count(), pre_insert_voter_count); + // and the list is the same + assert_eq!( + ::VoterList::iter().collect::>(), + vec![11, 21, 31, 101] + ); + }); + } + + #[test] + fn re_validate_does_not_change_counters_or_list() { + ExtBuilder::default().nominate(false).build_and_execute(|| { + // given + let pre_insert_voter_count = + (Nominators::::count() + Validators::::count()) as u32; + assert_eq!(::VoterList::count(), pre_insert_voter_count); + + assert_eq!( + ::VoterList::iter().collect::>(), + vec![11, 21, 31] + ); + + // when account 11 re-validates + assert_ok!(Staking::validate( + RuntimeOrigin::signed(11), + Default::default() + )); + + // then counts don't change + assert_eq!(::VoterList::count(), pre_insert_voter_count); + // and the list is the same + assert_eq!( + ::VoterList::iter().collect::>(), + vec![11, 21, 31] + ); + }); + } +} + +#[test] +fn force_apply_min_commission_works() { + let prefs = |c| ValidatorPrefs { + commission: Perbill::from_percent(c), + blocked: false, + }; + let validators = || Validators::::iter().collect::>(); + ExtBuilder::default().build_and_execute(|| { + assert_ok!(Staking::validate(RuntimeOrigin::signed(31), prefs(10))); + assert_ok!(Staking::validate(RuntimeOrigin::signed(21), prefs(5))); + + // Given + assert_eq!( + validators(), + vec![(31, prefs(10)), (21, prefs(5)), (11, prefs(0))] + ); + MinCommission::::set(Perbill::from_percent(5)); + + // When applying to a commission greater than min + assert_ok!(Staking::force_apply_min_commission( + RuntimeOrigin::signed(1), + 31 + )); + // Then the commission is not changed + assert_eq!( + validators(), + vec![(31, prefs(10)), (21, prefs(5)), (11, prefs(0))] + ); + + // When applying to a commission that is equal to min + assert_ok!(Staking::force_apply_min_commission( + RuntimeOrigin::signed(1), + 21 + )); + // Then the commission is not changed + assert_eq!( + validators(), + vec![(31, prefs(10)), (21, prefs(5)), (11, prefs(0))] + ); + + // When applying to a commission that is less than the min + assert_ok!(Staking::force_apply_min_commission( + RuntimeOrigin::signed(1), + 11 + )); + // Then the commission is bumped to the min + assert_eq!( + validators(), + vec![(31, prefs(10)), (21, prefs(5)), (11, prefs(5))] + ); + + // When applying commission to a validator that doesn't exist then storage is not altered + assert_noop!( + Staking::force_apply_min_commission(RuntimeOrigin::signed(1), 420), + Error::::NotStash + ); + }); +} + +#[test] +fn proportional_slash_stop_slashing_if_remaining_zero() { + ExtBuilder::default().nominate(true).build_and_execute(|| { + let c = |era, value| UnlockChunk:: { era, value }; + + // we have some chunks, but they are not affected. + let unlocking = bounded_vec![c(1, 10), c(2, 10)]; + + // Given + let mut ledger = StakingLedger::::new(123, 20); + ledger.total = 40; + ledger.unlocking = unlocking; + + assert_eq!(BondingDuration::get(), 3); + + // should not slash more than the amount requested, by accidentally slashing the first + // chunk. + assert_eq!(ledger.slash(18, 1, 0), 18); + }); +} + +#[test] +fn proportional_ledger_slash_works() { + ExtBuilder::default().nominate(true).build_and_execute(|| { + let c = |era, value| UnlockChunk:: { era, value }; + // Given + let mut ledger = StakingLedger::::new(123, 10); + assert_eq!(BondingDuration::get(), 3); + + // When we slash a ledger with no unlocking chunks + assert_eq!(ledger.slash(5, 1, 0), 5); + // Then + assert_eq!(ledger.total, 5); + assert_eq!(ledger.active, 5); + assert_eq!(LedgerSlashPerEra::get().0, 5); + assert_eq!(LedgerSlashPerEra::get().1, Default::default()); + + // When we slash a ledger with no unlocking chunks and the slash amount is greater then the + // total + assert_eq!(ledger.slash(11, 1, 0), 5); + // Then + assert_eq!(ledger.total, 0); + assert_eq!(ledger.active, 0); + assert_eq!(LedgerSlashPerEra::get().0, 0); + assert_eq!(LedgerSlashPerEra::get().1, Default::default()); + + // Given + ledger.unlocking = bounded_vec![c(4, 10), c(5, 10)]; + ledger.total = 2 * 10; + ledger.active = 0; + // When all the chunks overlap with the slash eras + assert_eq!(ledger.slash(20, 0, 0), 20); + // Then + assert_eq!(ledger.unlocking, vec![]); + assert_eq!(ledger.total, 0); + assert_eq!(LedgerSlashPerEra::get().0, 0); + assert_eq!(LedgerSlashPerEra::get().1, BTreeMap::from([(4, 0), (5, 0)])); + + // Given + ledger.unlocking = bounded_vec![c(4, 100), c(5, 100), c(6, 100), c(7, 100)]; + ledger.total = 4 * 100; + ledger.active = 0; + // When the first 2 chunks don't overlap with the affected range of unlock eras. + assert_eq!(ledger.slash(140, 0, 3), 140); + // Then + assert_eq!( + ledger.unlocking, + vec![c(4, 100), c(5, 100), c(6, 30), c(7, 30)] + ); + assert_eq!(ledger.total, 4 * 100 - 140); + assert_eq!(LedgerSlashPerEra::get().0, 0); + assert_eq!( + LedgerSlashPerEra::get().1, + BTreeMap::from([(6, 30), (7, 30)]) + ); + + // Given + ledger.unlocking = bounded_vec![c(4, 100), c(5, 100), c(6, 100), c(7, 100)]; + ledger.total = 4 * 100; + ledger.active = 0; + // When the first 2 chunks don't overlap with the affected range of unlock eras. + assert_eq!(ledger.slash(15, 0, 3), 15); + // Then + assert_eq!( + ledger.unlocking, + vec![c(4, 100), c(5, 100), c(6, 100 - 8), c(7, 100 - 7)] + ); + assert_eq!(ledger.total, 4 * 100 - 15); + assert_eq!(LedgerSlashPerEra::get().0, 0); + assert_eq!( + LedgerSlashPerEra::get().1, + BTreeMap::from([(6, 92), (7, 93)]) + ); + + // Given + ledger.unlocking = bounded_vec![c(4, 40), c(5, 100), c(6, 10), c(7, 250)]; + ledger.active = 500; + // 900 + ledger.total = 40 + 10 + 100 + 250 + 500; + // When we have a partial slash that touches all chunks + assert_eq!(ledger.slash(900 / 2, 0, 0), 450); + // Then + assert_eq!(ledger.active, 500 / 2); + assert_eq!( + ledger.unlocking, + vec![c(4, 40 / 2), c(5, 100 / 2), c(6, 10 / 2), c(7, 250 / 2)] + ); + assert_eq!(ledger.total, 900 / 2); + assert_eq!(LedgerSlashPerEra::get().0, 500 / 2); + assert_eq!( + LedgerSlashPerEra::get().1, + BTreeMap::from([(4, 40 / 2), (5, 100 / 2), (6, 10 / 2), (7, 250 / 2)]) + ); + + // slash 1/4th with not chunk. + ledger.unlocking = bounded_vec![]; + ledger.active = 500; + ledger.total = 500; + // When we have a partial slash that touches all chunks + assert_eq!(ledger.slash(500 / 4, 0, 0), 500 / 4); + // Then + assert_eq!(ledger.active, 3 * 500 / 4); + assert_eq!(ledger.unlocking, vec![]); + assert_eq!(ledger.total, ledger.active); + assert_eq!(LedgerSlashPerEra::get().0, 3 * 500 / 4); + assert_eq!(LedgerSlashPerEra::get().1, Default::default()); + + // Given we have the same as above, + ledger.unlocking = bounded_vec![c(4, 40), c(5, 100), c(6, 10), c(7, 250)]; + ledger.active = 500; + ledger.total = 40 + 10 + 100 + 250 + 500; // 900 + assert_eq!(ledger.total, 900); + // When we have a higher min balance + assert_eq!( + ledger.slash( + 900 / 2, + 25, /* min balance - chunks with era 0 & 2 will be slashed to <=25, causing it + * to get swept */ + 0 + ), + 450 + ); + assert_eq!(ledger.active, 500 / 2); + // the last chunk was not slashed 50% like all the rest, because some other earlier chunks + // got dusted. + assert_eq!(ledger.unlocking, vec![c(5, 100 / 2), c(7, 150)]); + assert_eq!(ledger.total, 900 / 2); + assert_eq!(LedgerSlashPerEra::get().0, 500 / 2); + assert_eq!( + LedgerSlashPerEra::get().1, + BTreeMap::from([(4, 0), (5, 100 / 2), (6, 0), (7, 150)]) + ); + + // Given + // slash order --------------------NA--------2----------0----------1---- + ledger.unlocking = bounded_vec![c(4, 40), c(5, 100), c(6, 10), c(7, 250)]; + ledger.active = 500; + ledger.total = 40 + 10 + 100 + 250 + 500; // 900 + assert_eq!( + ledger.slash( + 500 + 10 + 250 + 100 / 2, // active + era 6 + era 7 + era 5 / 2 + 0, + 3 /* slash era 6 first, so the affected parts are era 6, era 7 and + * ledge.active. This will cause the affected to go to zero, and then we will + * start slashing older chunks */ + ), + 500 + 250 + 10 + 100 / 2 + ); + // Then + assert_eq!(ledger.active, 0); + assert_eq!(ledger.unlocking, vec![c(4, 40), c(5, 100 / 2)]); + assert_eq!(ledger.total, 90); + assert_eq!(LedgerSlashPerEra::get().0, 0); + assert_eq!( + LedgerSlashPerEra::get().1, + BTreeMap::from([(5, 100 / 2), (6, 0), (7, 0)]) + ); + + // Given + // iteration order------------------NA---------2----------0----------1---- + ledger.unlocking = bounded_vec![c(4, 100), c(5, 100), c(6, 100), c(7, 100)]; + ledger.active = 100; + ledger.total = 5 * 100; + // When + assert_eq!( + ledger.slash( + 351, // active + era 6 + era 7 + era 5 / 2 + 1 + 50, // min balance - everything slashed below 50 will get dusted + 3 /* slash era 3+3 first, so the affected parts are era 6, era 7 and + * ledge.active. This will cause the affected to go to zero, and then we + * will start slashing older chunks */ + ), + 400 + ); + // Then + assert_eq!(ledger.active, 0); + assert_eq!(ledger.unlocking, vec![c(4, 100)]); + assert_eq!(ledger.total, 100); + assert_eq!(LedgerSlashPerEra::get().0, 0); + assert_eq!( + LedgerSlashPerEra::get().1, + BTreeMap::from([(5, 0), (6, 0), (7, 0)]) + ); + + // Tests for saturating arithmetic + + // Given + let slash = u64::MAX as Balance * 2; + // The value of the other parts of ledger that will get slashed + let value = slash - (10 * 4); + + ledger.active = 10; + ledger.unlocking = bounded_vec![c(4, 10), c(5, 10), c(6, 10), c(7, value)]; + ledger.total = value + 40; + // When + let slash_amount = ledger.slash(slash, 0, 0); + assert_eq_error_rate!(slash_amount, slash, 5); + // Then + assert_eq!(ledger.active, 0); // slash of 9 + assert_eq!(ledger.unlocking, vec![]); + assert_eq!(ledger.total, 0); + assert_eq!(LedgerSlashPerEra::get().0, 0); + assert_eq!( + LedgerSlashPerEra::get().1, + BTreeMap::from([(4, 0), (5, 0), (6, 0), (7, 0)]) + ); + + // Given + use sp_runtime::PerThing as _; + let slash = u64::MAX as Balance * 2; + let value = u64::MAX as Balance * 2; + let unit = 100; + // slash * value that will saturate + assert!(slash.checked_mul(value).is_none()); + // but slash * unit won't. + assert!(slash.checked_mul(unit).is_some()); + ledger.unlocking = bounded_vec![c(4, unit), c(5, value), c(6, unit), c(7, unit)]; + //--------------------------------------note value^^^ + ledger.active = unit; + ledger.total = unit * 4 + value; + // When + assert_eq!(ledger.slash(slash, 0, 0), slash); + // Then + // The amount slashed out of `unit` + let affected_balance = value + unit * 4; + let ratio = Perquintill::from_rational_with_rounding(slash, affected_balance, Rounding::Up) + .unwrap(); + // `unit` after the slash is applied + let unit_slashed = { + let unit_slash = ratio.mul_ceil(unit); + unit - unit_slash + }; + let value_slashed = { + let value_slash = ratio.mul_ceil(value); + value - value_slash + }; + assert_eq!(ledger.active, unit_slashed); + assert_eq!(ledger.unlocking, vec![c(5, value_slashed), c(7, 32)]); + assert_eq!(ledger.total, value_slashed + 32); + assert_eq!(LedgerSlashPerEra::get().0, 0); + assert_eq!( + LedgerSlashPerEra::get().1, + BTreeMap::from([(4, 0), (5, value_slashed), (6, 0), (7, 32)]) + ); + }); +} + +#[test] +fn reducing_max_unlocking_chunks_abrupt() { + // Concern is on validators only + // By Default 11, 10 are stash and ctlr and 21,20 + ExtBuilder::default().build_and_execute(|| { + // given a staker at era=10 and MaxUnlockChunks set to 2 + MaxUnlockingChunks::set(2); + start_active_era(10); + assert_ok!(Staking::bond( + RuntimeOrigin::signed(3), + 300, + RewardDestination::Staked + )); + assert!(matches!(Staking::ledger(3.into()), Ok(_))); + + // when staker unbonds + assert_ok!(Staking::unbond(RuntimeOrigin::signed(3), 20)); + + // then an unlocking chunk is added at `current_era + bonding_duration` + // => 10 + 3 = 13 + let expected_unlocking: BoundedVec, MaxUnlockingChunks> = + bounded_vec![UnlockChunk { + value: 20 as Balance, + era: 13 as EraIndex + }]; + assert!(matches!(Staking::ledger(3.into()), + Ok(StakingLedger { + unlocking, + .. + }) if unlocking==expected_unlocking)); + + // when staker unbonds at next era + start_active_era(11); + assert_ok!(Staking::unbond(RuntimeOrigin::signed(3), 50)); + // then another unlock chunk is added + let expected_unlocking: BoundedVec, MaxUnlockingChunks> = bounded_vec![ + UnlockChunk { value: 20, era: 13 }, + UnlockChunk { value: 50, era: 14 } + ]; + assert!(matches!(Staking::ledger(3.into()), + Ok(StakingLedger { + unlocking, + .. + }) if unlocking==expected_unlocking)); + + // when staker unbonds further + start_active_era(12); + // then further unbonding not possible + assert_noop!( + Staking::unbond(RuntimeOrigin::signed(3), 20), + Error::::NoMoreChunks + ); + + // when max unlocking chunks is reduced abruptly to a low value + MaxUnlockingChunks::set(1); + // then unbond, rebond ops are blocked with ledger in corrupt state + assert_noop!( + Staking::unbond(RuntimeOrigin::signed(3), 20), + Error::::NotController + ); + assert_noop!( + Staking::rebond(RuntimeOrigin::signed(3), 100), + Error::::NotController + ); + + // reset the ledger corruption + MaxUnlockingChunks::set(2); + }) +} + +#[test] +fn cannot_set_unsupported_validator_count() { + ExtBuilder::default().build_and_execute(|| { + MaxWinners::set(50); + // set validator count works + assert_ok!(Staking::set_validator_count(RuntimeOrigin::root(), 30)); + assert_ok!(Staking::set_validator_count(RuntimeOrigin::root(), 50)); + // setting validator count above 100 does not work + assert_noop!( + Staking::set_validator_count(RuntimeOrigin::root(), 51), + Error::::TooManyValidators, + ); + }) +} + +#[test] +fn increase_validator_count_errors() { + ExtBuilder::default().build_and_execute(|| { + MaxWinners::set(50); + assert_ok!(Staking::set_validator_count(RuntimeOrigin::root(), 40)); + + // increase works + assert_ok!(Staking::increase_validator_count(RuntimeOrigin::root(), 6)); + assert_eq!(ValidatorCount::::get(), 46); + + // errors + assert_noop!( + Staking::increase_validator_count(RuntimeOrigin::root(), 5), + Error::::TooManyValidators, + ); + }) +} + +#[test] +fn scale_validator_count_errors() { + ExtBuilder::default().build_and_execute(|| { + MaxWinners::set(50); + assert_ok!(Staking::set_validator_count(RuntimeOrigin::root(), 20)); + + // scale value works + assert_ok!(Staking::scale_validator_count( + RuntimeOrigin::root(), + Percent::from_percent(200) + )); + assert_eq!(ValidatorCount::::get(), 40); + + // errors + assert_noop!( + Staking::scale_validator_count(RuntimeOrigin::root(), Percent::from_percent(126)), + Error::::TooManyValidators, + ); + }) +} + +#[test] +fn set_min_commission_works_with_admin_origin() { + ExtBuilder::default().build_and_execute(|| { + // no minimum commission set initially + assert_eq!(MinCommission::::get(), Zero::zero()); + + // root can set min commission + assert_ok!(Staking::set_min_commission( + RuntimeOrigin::root(), + Perbill::from_percent(10) + )); + + assert_eq!(MinCommission::::get(), Perbill::from_percent(10)); + + // Non privileged origin can not set min_commission + assert_noop!( + Staking::set_min_commission(RuntimeOrigin::signed(2), Perbill::from_percent(15)), + BadOrigin + ); + + // Admin Origin can set min commission + assert_ok!(Staking::set_min_commission( + RuntimeOrigin::signed(1), + Perbill::from_percent(15), + )); + + // setting commission below min_commission fails + assert_noop!( + Staking::validate( + RuntimeOrigin::signed(11), + ValidatorPrefs { + commission: Perbill::from_percent(14), + blocked: false + } ), - ) { - nominators += 1; + Error::::CommissionTooLow + ); + + // setting commission >= min_commission works + assert_ok!(Staking::validate( + RuntimeOrigin::signed(11), + ValidatorPrefs { + commission: Perbill::from_percent(15), + blocked: false + } + )); + }) +} + +#[test] +fn can_page_exposure() { + let mut others: Vec> = vec![]; + let mut total_stake: Balance = 0; + // 19 nominators + for i in 1..20 { + let individual_stake: Balance = 100 * i as Balance; + others.push(IndividualExposure { + who: i, + value: individual_stake, + }); + total_stake += individual_stake; + } + let own_stake: Balance = 500; + total_stake += own_stake; + assert_eq!(total_stake, 19_500); + // build full exposure set + let exposure: Exposure = Exposure { + total: total_stake, + own: own_stake, + others, + }; + + // when + let (exposure_metadata, exposure_page): ( + PagedExposureMetadata, + Vec>, + ) = exposure.clone().into_pages(3); + + // then + // 7 pages of nominators. + assert_eq!(exposure_page.len(), 7); + assert_eq!(exposure_metadata.page_count, 7); + // first page stake = 100 + 200 + 300 + assert!(matches!( + exposure_page[0], + ExposurePage { + page_total: 600, + .. + } + )); + // second page stake = 0 + 400 + 500 + 600 + assert!(matches!( + exposure_page[1], + ExposurePage { + page_total: 1500, + .. + } + )); + // verify overview has the total + assert_eq!(exposure_metadata.total, 19_500); + // verify total stake is same as in the original exposure. + assert_eq!( + exposure_page + .iter() + .map(|a| a.page_total) + .reduce(|a, b| a + b) + .unwrap(), + 19_500 - exposure_metadata.own + ); + // verify own stake is correct + assert_eq!(exposure_metadata.own, 500); + // verify number of nominators are same as in the original exposure. + assert_eq!( + exposure_page + .iter() + .map(|a| a.others.len()) + .reduce(|a, b| a + b) + .unwrap(), + 19 + ); + assert_eq!(exposure_metadata.nominator_count, 19); +} + +#[test] +fn should_retain_era_info_only_upto_history_depth() { + ExtBuilder::default().build_and_execute(|| { + // remove existing exposure + Pallet::::clear_era_information(0); + let validator_stash = 10; + + for era in 0..4 { + ClaimedRewards::::insert(era, &validator_stash, vec![0, 1, 2]); + for page in 0..3 { + ErasStakersPaged::::insert( + (era, &validator_stash, page), + ExposurePage { + page_total: 100, + others: vec![], + }, + ); + } + } + + for i in 0..4 { + // Count of entries remaining in ClaimedRewards = total - cleared_count + assert_eq!(ClaimedRewards::::iter().count(), (4 - i)); + // 1 claimed_rewards entry for each era + assert_eq!( + ClaimedRewards::::iter_prefix(i as EraIndex).count(), + 1 + ); + // 3 entries (pages) for each era + assert_eq!( + ErasStakersPaged::::iter_prefix((i as EraIndex,)).count(), + 3 + ); + + // when clear era info + Pallet::::clear_era_information(i as EraIndex); + + // then all era entries are cleared + assert_eq!( + ClaimedRewards::::iter_prefix(i as EraIndex).count(), + 0 + ); + assert_eq!( + ErasStakersPaged::::iter_prefix((i as EraIndex,)).count(), + 0 + ); + } + }); +} + +#[test] +fn test_legacy_claimed_rewards_is_checked_at_reward_payout() { + ExtBuilder::default() + .has_stakers(false) + .build_and_execute(|| { + // Create a validator: + bond_validator(11, 1000); + + // reward validator for next 2 eras + mock::start_active_era(1); + Pallet::::reward_by_ids(vec![(11, 1)]); + mock::start_active_era(2); + Pallet::::reward_by_ids(vec![(11, 1)]); + mock::start_active_era(3); + + //verify rewards are not claimed + assert_eq!( + EraInfo::::is_rewards_claimed_with_legacy_fallback( + 1, + Staking::ledger(11.into()).as_ref().unwrap(), + &11, + 0 + ), + false + ); + assert_eq!( + EraInfo::::is_rewards_claimed_with_legacy_fallback( + 2, + Staking::ledger(11.into()).as_ref().unwrap(), + &11, + 0 + ), + false + ); + + // assume reward claim for era 1 was stored in legacy storage + Ledger::::insert( + 11, + StakingLedgerInspect { + stash: 11, + total: 1000, + active: 1000, + unlocking: Default::default(), + legacy_claimed_rewards: bounded_vec![1], + }, + ); + + // verify rewards for era 1 cannot be claimed + assert_noop!( + Staking::payout_stakers_by_page(RuntimeOrigin::signed(1337), 11, 1, 0), + Error::::AlreadyClaimed + .with_weight(::WeightInfo::payout_stakers_alive_staked(0)), + ); + assert_eq!( + EraInfo::::is_rewards_claimed_with_legacy_fallback( + 1, + Staking::ledger(11.into()).as_ref().unwrap(), + &11, + 0 + ), + true + ); + + // verify rewards for era 2 can be claimed + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 2, + 0 + )); + assert_eq!( + EraInfo::::is_rewards_claimed_with_legacy_fallback( + 2, + Staking::ledger(11.into()).as_ref().unwrap(), + &11, + 0 + ), + true + ); + // but the new claimed rewards for era 2 is not stored in legacy storage + assert_eq!( + Ledger::::get(11).unwrap(), + StakingLedgerInspect { + stash: 11, + total: 1000, + active: 1000, + unlocking: Default::default(), + legacy_claimed_rewards: bounded_vec![1], + }, + ); + // instead it is kept in `ClaimedRewards` + assert_eq!(ClaimedRewards::::get(2, 11), vec![0]); + }); +} + +#[test] +fn test_validator_exposure_is_backward_compatible_with_non_paged_rewards_payout() { + ExtBuilder::default() + .has_stakers(false) + .build_and_execute(|| { + // case 1: exposure exist in clipped. + // set page cap to 10 + MaxExposurePageSize::set(10); + bond_validator(11, 1000); + let mut expected_individual_exposures: Vec> = + vec![]; + let mut total_exposure: Balance = 0; + // 1st exposure page + for i in 0..10 { + let who = 1000 + i; + let value = 1000 + i as Balance; + bond_nominator(who, value, vec![11]); + expected_individual_exposures.push(IndividualExposure { who, value }); + total_exposure += value; + } + + for i in 10..15 { + let who = 1000 + i; + let value = 1000 + i as Balance; + bond_nominator(who, value, vec![11]); + expected_individual_exposures.push(IndividualExposure { who, value }); + total_exposure += value; + } + + mock::start_active_era(1); + // reward validator for current era + Pallet::::reward_by_ids(vec![(11, 1)]); + + // start new era + mock::start_active_era(2); + // verify exposure for era 1 is stored in paged storage, that each exposure is stored in + // one and only one page, and no exposure is repeated. + let actual_exposure_page_0 = ErasStakersPaged::::get((1, 11, 0)).unwrap(); + let actual_exposure_page_1 = ErasStakersPaged::::get((1, 11, 1)).unwrap(); + expected_individual_exposures.iter().for_each(|exposure| { + assert!( + actual_exposure_page_0.others.contains(exposure) + || actual_exposure_page_1.others.contains(exposure) + ); + }); + assert_eq!( + expected_individual_exposures.len(), + actual_exposure_page_0.others.len() + actual_exposure_page_1.others.len() + ); + // verify `EraInfo` returns page from paged storage + assert_eq!( + EraInfo::::get_paged_exposure(1, &11, 0) + .unwrap() + .others(), + &actual_exposure_page_0.others + ); + assert_eq!( + EraInfo::::get_paged_exposure(1, &11, 1) + .unwrap() + .others(), + &actual_exposure_page_1.others + ); + assert_eq!(EraInfo::::get_page_count(1, &11), 2); + + // validator is exposed + assert!(::is_exposed_in_era(&11, &1)); + // nominators are exposed + for i in 10..15 { + let who: AccountId = 1000 + i; + assert!(::is_exposed_in_era(&who, &1)); + } + + // case 2: exposure exist in ErasStakers and ErasStakersClipped (legacy). + // delete paged storage and add exposure to clipped storage + >::remove((1, 11, 0)); + >::remove((1, 11, 1)); + >::remove(1, 11); + + >::insert( + 1, + 11, + Exposure { + total: total_exposure, + own: 1000, + others: expected_individual_exposures.clone(), + }, + ); + let mut clipped_exposure = expected_individual_exposures.clone(); + clipped_exposure.sort_by(|a, b| b.who.cmp(&a.who)); + clipped_exposure.truncate(10); + >::insert( + 1, + 11, + Exposure { + total: total_exposure, + own: 1000, + others: clipped_exposure.clone(), + }, + ); + + // verify `EraInfo` returns exposure from clipped storage + let actual_exposure_paged = EraInfo::::get_paged_exposure(1, &11, 0).unwrap(); + assert_eq!(actual_exposure_paged.others(), &clipped_exposure); + assert_eq!(actual_exposure_paged.own(), 1000); + assert_eq!(actual_exposure_paged.exposure_metadata.page_count, 1); + + let actual_exposure_full = EraInfo::::get_full_exposure(1, &11); + assert_eq!(actual_exposure_full.others, expected_individual_exposures); + assert_eq!(actual_exposure_full.own, 1000); + assert_eq!(actual_exposure_full.total, total_exposure); + + // validator is exposed + assert!(::is_exposed_in_era(&11, &1)); + // nominators are exposed + for i in 10..15 { + let who: AccountId = 1000 + i; + assert!(::is_exposed_in_era(&who, &1)); + } + + // for pages other than 0, clipped storage returns empty exposure + assert_eq!(EraInfo::::get_paged_exposure(1, &11, 1), None); + // page size is 1 for clipped storage + assert_eq!(EraInfo::::get_page_count(1, &11), 1); + + // payout for page 0 works + assert_ok!(Staking::payout_stakers_by_page( + RuntimeOrigin::signed(1337), + 11, + 0, + 0 + )); + // payout for page 1 fails + assert_noop!( + Staking::payout_stakers_by_page(RuntimeOrigin::signed(1337), 11, 0, 1), + Error::::InvalidPage + .with_weight(::WeightInfo::payout_stakers_alive_staked(0)) + ); + }); +} + +#[test] +fn test_runtime_api_pending_rewards() { + ExtBuilder::default().build_and_execute(|| { + // GIVEN + let err_weight = ::WeightInfo::payout_stakers_alive_staked(0); + let stake = 100; + + // validator with non-paged exposure, rewards marked in legacy claimed rewards. + let validator_one = 301; + // validator with non-paged exposure, rewards marked in paged claimed rewards. + let validator_two = 302; + // validator with paged exposure. + let validator_three = 303; + + // Set staker + for v in validator_one..=validator_three { + let _ = asset::set_stakeable_balance::(&v, stake); + assert_ok!(Staking::bond( + RuntimeOrigin::signed(v), + stake, + RewardDestination::Staked + )); + } + + // Add reward points + let reward = EraRewardPoints:: { + total: 1, + individual: vec![(validator_one, 1), (validator_two, 1), (validator_three, 1)] + .into_iter() + .collect(), + }; + ErasRewardPoints::::insert(0, reward); + + // build exposure + let mut individual_exposures: Vec> = vec![]; + for i in 0..=MaxExposurePageSize::get() { + individual_exposures.push(IndividualExposure { + who: i.into(), + value: stake, + }); } + let exposure = Exposure:: { + total: stake * (MaxExposurePageSize::get() as Balance + 2), + own: stake, + others: individual_exposures, + }; + + // add non-paged exposure for one and two. + >::insert(0, validator_one, exposure.clone()); + >::insert(0, validator_two, exposure.clone()); + // add paged exposure for third validator + EraInfo::::set_exposure(0, &validator_three, exposure); + + // add some reward to be distributed + ErasValidatorReward::::insert(0, 1000); + + // mark rewards claimed for validator_one in legacy claimed rewards + >::insert( + validator_one, + StakingLedgerInspect { + stash: validator_one, + total: stake, + active: stake, + unlocking: Default::default(), + legacy_claimed_rewards: bounded_vec![0], + }, + ); + + // SCENARIO ONE: rewards already marked claimed in legacy storage. + // runtime api should return false for pending rewards for validator_one. + assert!(!EraInfo::::pending_rewards(0, &validator_one)); + // and if we try to pay, we get an error. + assert_noop!( + Staking::payout_stakers(RuntimeOrigin::signed(1337), validator_one, 0), + Error::::AlreadyClaimed.with_weight(err_weight) + ); + + // SCENARIO TWO: non-paged exposure + // validator two has not claimed rewards, so pending rewards is true. + assert!(EraInfo::::pending_rewards(0, &validator_two)); + // and payout works + assert_ok!(Staking::payout_stakers( + RuntimeOrigin::signed(1337), + validator_two, + 0 + )); + // now pending rewards is false. + assert!(!EraInfo::::pending_rewards(0, &validator_two)); + // and payout fails + assert_noop!( + Staking::payout_stakers(RuntimeOrigin::signed(1337), validator_two, 0), + Error::::AlreadyClaimed.with_weight(err_weight) + ); + + // SCENARIO THREE: validator with paged exposure (two pages). + // validator three has not claimed rewards, so pending rewards is true. + assert!(EraInfo::::pending_rewards(0, &validator_three)); + // and payout works + assert_ok!(Staking::payout_stakers( + RuntimeOrigin::signed(1337), + validator_three, + 0 + )); + // validator three has two pages of exposure, so pending rewards is still true. + assert!(EraInfo::::pending_rewards(0, &validator_three)); + // payout again + assert_ok!(Staking::payout_stakers( + RuntimeOrigin::signed(1337), + validator_three, + 0 + )); + // now pending rewards is false. + assert!(!EraInfo::::pending_rewards(0, &validator_three)); + // and payout fails + assert_noop!( + Staking::payout_stakers(RuntimeOrigin::signed(1337), validator_three, 0), + Error::::AlreadyClaimed.with_weight(err_weight) + ); + + // for eras with no exposure, pending rewards is false. + assert!(!EraInfo::::pending_rewards(0, &validator_one)); + assert!(!EraInfo::::pending_rewards(0, &validator_two)); + assert!(!EraInfo::::pending_rewards(0, &validator_three)); + }); +} + +mod staking_interface { + use frame_support::storage::with_storage_layer; + use sp_staking::StakingInterface; + + use super::*; + + #[test] + fn force_unstake_with_slash_works() { + ExtBuilder::default().build_and_execute(|| { + // without slash + let _ = with_storage_layer::<(), _, _>(|| { + // bond an account, can unstake + assert_eq!(Staking::bonded(&11), Some(11)); + assert_ok!(::force_unstake(11)); + Err(DispatchError::from("revert")) + }); + + // bond again and add a slash, still can unstake. + assert_eq!(Staking::bonded(&11), Some(11)); + add_slash(&11); + assert_ok!(::force_unstake(11)); + }); + } + + #[test] + fn do_withdraw_unbonded_with_wrong_slash_spans_works_as_expected() { + ExtBuilder::default().build_and_execute(|| { + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(100)]); + + assert_eq!(Staking::bonded(&11), Some(11)); + + assert_noop!( + Staking::withdraw_unbonded(RuntimeOrigin::signed(11), 0), + Error::::IncorrectSlashingSpans + ); + + let num_slashing_spans = + SlashingSpans::::get(&11).map_or(0, |s| s.iter().count()); + assert_ok!(Staking::withdraw_unbonded( + RuntimeOrigin::signed(11), + num_slashing_spans as u32 + )); + }); + } + + #[test] + fn do_withdraw_unbonded_can_kill_stash_with_existential_deposit_zero() { + ExtBuilder::default() + .existential_deposit(0) + .nominate(false) + .build_and_execute(|| { + // Initial state of 11 + assert_eq!(Staking::bonded(&11), Some(11)); + assert_eq!( + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { + stash: 11, + total: 1000, + active: 1000, + unlocking: Default::default(), + legacy_claimed_rewards: bounded_vec![], + } + ); + assert_eq!( + Staking::eras_stakers(active_era(), &11), + Exposure { + total: 1000, + own: 1000, + others: vec![] + } + ); + + // Unbond all of the funds in stash. + Staking::chill(RuntimeOrigin::signed(11)).unwrap(); + Staking::unbond(RuntimeOrigin::signed(11), 1000).unwrap(); + assert_eq!( + Staking::ledger(11.into()).unwrap(), + StakingLedgerInspect { + stash: 11, + total: 1000, + active: 0, + unlocking: bounded_vec![UnlockChunk { + value: 1000, + era: 3 + }], + legacy_claimed_rewards: bounded_vec![], + }, + ); + + // trigger future era. + mock::start_active_era(3); + + // withdraw unbonded + assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(11), 0)); + + // empty stash has been reaped + assert!(!>::contains_key(&11)); + assert!(!>::contains_key(&11)); + assert!(!>::contains_key(&11)); + assert!(!>::contains_key(&11)); + // lock is removed. + assert_eq!(asset::staked::(&11), 0); + }); + } + + #[test] + fn status() { + ExtBuilder::default().build_and_execute(|| { + // stash of a validator is identified as a validator + assert_eq!(Staking::status(&11).unwrap(), StakerStatus::Validator); + // .. but not the controller. + assert!(Staking::status(&10).is_err()); + + // stash of nominator is identified as a nominator + assert_eq!( + Staking::status(&101).unwrap(), + StakerStatus::Nominator(vec![11, 21]) + ); + // .. but not the controller. + assert!(Staking::status(&100).is_err()); + + // stash of chilled is identified as a chilled + assert_eq!(Staking::status(&41).unwrap(), StakerStatus::Idle); + // .. but not the controller. + assert!(Staking::status(&40).is_err()); + + // random other account. + assert!(Staking::status(&42).is_err()); + }) + } +} + +mod staking_unchecked { + use sp_staking::{Stake, StakingInterface, StakingUnchecked}; + + use super::*; + + #[test] + fn virtual_bond_does_not_lock() { + ExtBuilder::default().build_and_execute(|| { + mock::start_active_era(1); + assert_eq!(asset::total_balance::(&10), 1); + // 10 can bond more than its balance amount since we do not require lock for virtual + // bonding. + assert_ok!(::virtual_bond(&10, 100, &15)); + // nothing is locked on 10. + assert_eq!(asset::staked::(&10), 0); + // adding more balance does not lock anything as well. + assert_ok!(::bond_extra(&10, 1000)); + // but ledger is updated correctly. + assert_eq!( + ::stake(&10), + Ok(Stake { + total: 1100, + active: 1100 + }) + ); + + // lets try unbonding some amount. + assert_ok!(::unbond(&10, 200)); + assert_eq!( + Staking::ledger(10.into()).unwrap(), + StakingLedgerInspect { + stash: 10, + total: 1100, + active: 1100 - 200, + unlocking: bounded_vec![UnlockChunk { + value: 200, + era: 1 + 3 + }], + legacy_claimed_rewards: bounded_vec![], + } + ); + + assert_eq!( + ::stake(&10), + Ok(Stake { + total: 1100, + active: 900 + }) + ); + // still no locks. + assert_eq!(asset::staked::(&10), 0); + + mock::start_active_era(2); + // cannot withdraw without waiting for unbonding period. + assert_ok!(::withdraw_unbonded(10, 0)); + assert_eq!( + ::stake(&10), + Ok(Stake { + total: 1100, + active: 900 + }) + ); + + // in era 4, 10 can withdraw unlocking amount. + mock::start_active_era(4); + assert_ok!(::withdraw_unbonded(10, 0)); + assert_eq!( + ::stake(&10), + Ok(Stake { + total: 900, + active: 900 + }) + ); + + // unbond all. + assert_ok!(::unbond(&10, 900)); + assert_eq!( + ::stake(&10), + Ok(Stake { + total: 900, + active: 0 + }) + ); + mock::start_active_era(7); + assert_ok!(::withdraw_unbonded(10, 0)); + + // ensure withdrawing all amount cleans up storage. + assert_eq!(Staking::ledger(10.into()), Err(Error::::NotStash)); + assert_eq!(VirtualStakers::::contains_key(10), false); + }) + } + + #[test] + fn virtual_staker_cannot_pay_reward_to_self_account() { + ExtBuilder::default().build_and_execute(|| { + // cannot set payee to self + assert_noop!( + ::virtual_bond(&10, 100, &10), + Error::::RewardDestinationRestricted + ); + + // to another account works + assert_ok!(::virtual_bond(&10, 100, &11)); + + // cannot set via set_payee as well. + assert_noop!( + ::set_payee(&10, &10), + Error::::RewardDestinationRestricted + ); + }); + } + + #[test] + fn virtual_staker_cannot_bond_again() { + ExtBuilder::default().build_and_execute(|| { + // 200 virtual bonds + bond_virtual_nominator(200, 201, 500, vec![11, 21]); + + // Tries bonding again + assert_noop!( + ::virtual_bond(&200, 200, &201), + Error::::AlreadyBonded + ); + + // And again with a different reward destination. + assert_noop!( + ::virtual_bond(&200, 200, &202), + Error::::AlreadyBonded + ); + + // Direct bond is not allowed as well. + assert_noop!( + ::bond(&200, 200, &202), + Error::::AlreadyBonded + ); + }); + } + + #[test] + fn normal_staker_cannot_virtual_bond() { + ExtBuilder::default().build_and_execute(|| { + // 101 is a nominator trying to virtual bond + assert_noop!( + ::virtual_bond(&101, 200, &102), + Error::::AlreadyBonded + ); + + // validator 21 tries to virtual bond + assert_noop!( + ::virtual_bond(&21, 200, &22), + Error::::AlreadyBonded + ); + }); + } + + #[test] + fn migrate_virtual_staker() { + ExtBuilder::default().build_and_execute(|| { + // give some balance to 200 + asset::set_stakeable_balance::(&200, 2000); + + // stake + assert_ok!(Staking::bond( + RuntimeOrigin::signed(200), + 1000, + RewardDestination::Staked + )); + assert_eq!(asset::staked::(&200), 1000); + + // migrate them to virtual staker + assert_ok!(::migrate_to_virtual_staker( + &200 + )); + // payee needs to be updated to a non-stash account. + assert_ok!(::set_payee(&200, &201)); + + // ensure the balance is not locked anymore + assert_eq!(asset::staked::(&200), 0); + + // and they are marked as virtual stakers + assert_eq!(Pallet::::is_virtual_staker(&200), true); + }); + } + + #[test] + fn virtual_nominators_are_lazily_slashed() { + ExtBuilder::default() + .validator_count(7) + .set_status(41, StakerStatus::Validator) + .set_status(51, StakerStatus::Validator) + .set_status(201, StakerStatus::Validator) + .set_status(202, StakerStatus::Validator) + .build_and_execute(|| { + mock::start_active_era(1); + let slash_percent = Perbill::from_percent(5); + let initial_exposure = Staking::eras_stakers(active_era(), &11); + // 101 is a nominator for 11 + assert_eq!(initial_exposure.others.first().unwrap().who, 101); + // make 101 a virtual nominator + assert_ok!(::migrate_to_virtual_staker( + &101 + )); + // set payee different to self. + assert_ok!(::set_payee(&101, &102)); + + // cache values + let nominator_stake = Staking::ledger(101.into()).unwrap().active; + let nominator_balance = balances(&101).0; + let validator_stake = Staking::ledger(11.into()).unwrap().active; + let validator_balance = balances(&11).0; + let exposed_stake = initial_exposure.total; + let exposed_validator = initial_exposure.own; + let exposed_nominator = initial_exposure.others.first().unwrap().value; + + // 11 goes offline + on_offence_now(&[offence_from(11, None)], &[slash_percent]); + + let slash_amount = slash_percent * exposed_stake; + let validator_share = + Perbill::from_rational(exposed_validator, exposed_stake) * slash_amount; + let nominator_share = + Perbill::from_rational(exposed_nominator, exposed_stake) * slash_amount; + + // both slash amounts need to be positive for the test to make sense. + assert!(validator_share > 0); + assert!(nominator_share > 0); + + // both stakes must have been decreased pro-rata. + assert_eq!( + Staking::ledger(101.into()).unwrap().active, + nominator_stake - nominator_share + ); + assert_eq!( + Staking::ledger(11.into()).unwrap().active, + validator_stake - validator_share + ); + + // validator balance is slashed as usual + assert_eq!(balances(&11).0, validator_balance - validator_share); + // Because slashing happened. + assert!(is_disabled(11)); + + // but virtual nominator's balance is not slashed. + assert_eq!(asset::stakeable_balance::(&101), nominator_balance); + // but slash is broadcasted to slash observers. + assert_eq!(SlashObserver::get().get(&101).unwrap(), &nominator_share); + }) + } + + #[test] + fn virtual_stakers_cannot_be_reaped() { + ExtBuilder::default() + // we need enough validators such that disables are allowed. + .validator_count(7) + .set_status(41, StakerStatus::Validator) + .set_status(51, StakerStatus::Validator) + .set_status(201, StakerStatus::Validator) + .set_status(202, StakerStatus::Validator) + .build_and_execute(|| { + // make 101 only nominate 11. + assert_ok!(Staking::nominate(RuntimeOrigin::signed(101), vec![11])); + + mock::start_active_era(1); + + // slash all stake. + let slash_percent = Perbill::from_percent(100); + let initial_exposure = Staking::eras_stakers(active_era(), &11); + // 101 is a nominator for 11 + assert_eq!(initial_exposure.others.first().unwrap().who, 101); + // make 101 a virtual nominator + assert_ok!(::migrate_to_virtual_staker( + &101 + )); + // set payee different to self. + assert_ok!(::set_payee(&101, &102)); + + // cache values + let validator_balance = asset::stakeable_balance::(&11); + let validator_stake = Staking::ledger(11.into()).unwrap().total; + let nominator_balance = asset::stakeable_balance::(&101); + let nominator_stake = Staking::ledger(101.into()).unwrap().total; + + // 11 goes offline + on_offence_now(&[offence_from(11, None)], &[slash_percent]); + + // both stakes must have been decreased to 0. + assert_eq!(Staking::ledger(101.into()).unwrap().active, 0); + assert_eq!(Staking::ledger(11.into()).unwrap().active, 0); + + // all validator stake is slashed + assert_eq_error_rate!( + validator_balance - validator_stake, + asset::stakeable_balance::(&11), + 1 + ); + // Because slashing happened. + assert!(is_disabled(11)); + + // Virtual nominator's balance is not slashed. + assert_eq!(asset::stakeable_balance::(&101), nominator_balance); + // Slash is broadcasted to slash observers. + assert_eq!(SlashObserver::get().get(&101).unwrap(), &nominator_stake); + + // validator can be reaped. + assert_ok!(Staking::reap_stash(RuntimeOrigin::signed(10), 11, u32::MAX)); + // nominator is a virtual staker and cannot be reaped. + assert_noop!( + Staking::reap_stash(RuntimeOrigin::signed(10), 101, u32::MAX), + Error::::VirtualStakerNotAllowed + ); + }) + } + + #[test] + fn restore_ledger_not_allowed_for_virtual_stakers() { + ExtBuilder::default() + .has_stakers(true) + .build_and_execute(|| { + setup_double_bonded_ledgers(); + assert_eq!( + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Ok + ); + set_controller_no_checks(&444); + // 333 is corrupted + assert_eq!( + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Corrupted + ); + // migrate to virtual staker. + assert_ok!(::migrate_to_virtual_staker( + &333 + )); + + // recover the ledger won't work for virtual staker + assert_noop!( + Staking::restore_ledger(RuntimeOrigin::root(), 333, None, None, None), + Error::::VirtualStakerNotAllowed + ); + + // migrate 333 back to normal staker + >::remove(333); + + // try restore again + assert_ok!(Staking::restore_ledger( + RuntimeOrigin::root(), + 333, + None, + None, + None + )); + }) + } +} +mod ledger { + use super::*; + + #[test] + fn paired_account_works() { + ExtBuilder::default() + .try_state(false) + .build_and_execute(|| { + assert_ok!(Staking::bond( + RuntimeOrigin::signed(10), + 100, + RewardDestination::Account(10) + )); + + assert_eq!(>::get(&10), Some(10)); + assert_eq!( + StakingLedger::::paired_account(StakingAccount::Controller(10)), + Some(10) + ); + assert_eq!( + StakingLedger::::paired_account(StakingAccount::Stash(10)), + Some(10) + ); + + assert_eq!(>::get(&42), None); + assert_eq!( + StakingLedger::::paired_account(StakingAccount::Controller(42)), + None + ); + assert_eq!( + StakingLedger::::paired_account(StakingAccount::Stash(42)), + None + ); + + // bond manually stash with different controller. This is deprecated but the migration + // has not been complete yet (controller: 100, stash: 200) + assert_ok!(bond_controller_stash(100, 200)); + assert_eq!(>::get(&200), Some(100)); + assert_eq!( + StakingLedger::::paired_account(StakingAccount::Controller(100)), + Some(200) + ); + assert_eq!( + StakingLedger::::paired_account(StakingAccount::Stash(200)), + Some(100) + ); + }) + } + + #[test] + fn get_ledger_works() { + ExtBuilder::default() + .try_state(false) + .build_and_execute(|| { + // stash does not exist + assert!(StakingLedger::::get(StakingAccount::Stash(42)).is_err()); + + // bonded and paired + assert_eq!(>::get(&11), Some(11)); + + match StakingLedger::::get(StakingAccount::Stash(11)) { + Ok(ledger) => { + assert_eq!(ledger.controller(), Some(11)); + assert_eq!(ledger.stash, 11); + } + Err(_) => panic!("staking ledger must exist"), + }; + + // bond manually stash with different controller. This is deprecated but the migration + // has not been complete yet (controller: 100, stash: 200) + assert_ok!(bond_controller_stash(100, 200)); + assert_eq!(>::get(&200), Some(100)); + + match StakingLedger::::get(StakingAccount::Stash(200)) { + Ok(ledger) => { + assert_eq!(ledger.controller(), Some(100)); + assert_eq!(ledger.stash, 200); + } + Err(_) => panic!("staking ledger must exist"), + }; - println!( - "Can create a snapshot of {} nominators [{} validators, each 1 slashing] in 2sec block", - nominators, validators - ); + match StakingLedger::::get(StakingAccount::Controller(100)) { + Ok(ledger) => { + assert_eq!(ledger.controller(), Some(100)); + assert_eq!(ledger.stash, 200); + } + Err(_) => panic!("staking ledger must exist"), + }; + }) } #[test] - fn set_minimum_active_stake_is_correct() { + fn get_ledger_bad_state_fails() { ExtBuilder::default() - .nominate(false) - .add_staker( - IdentityId::from(61), - 61, - 61, - 2_000, - StakerStatus::::Nominator(vec![21]), - ) - .add_staker( - IdentityId::from(71), - 71, - 71, + .has_stakers(false) + .try_state(false) + .build_and_execute(|| { + setup_double_bonded_ledgers(); + + // Case 1: double bonded but not corrupted: + // stash 444 has controller 555: + assert_eq!(Bonded::::get(444), Some(555)); + assert_eq!(Ledger::::get(555).unwrap().stash, 444); + + // stash 444 is also a controller of 333: + assert_eq!(Bonded::::get(333), Some(444)); + assert_eq!( + StakingLedger::::paired_account(StakingAccount::Stash(333)), + Some(444) + ); + assert_eq!(Ledger::::get(444).unwrap().stash, 333); + + // although 444 is double bonded (it is a controller and a stash of different ledgers), + // we can safely retrieve the ledger and mutate it since the correct ledger is + // returned. + let ledger_result = StakingLedger::::get(StakingAccount::Stash(444)); + assert_eq!(ledger_result.unwrap().stash, 444); // correct ledger. + + let ledger_result = StakingLedger::::get(StakingAccount::Controller(444)); + assert_eq!(ledger_result.unwrap().stash, 333); // correct ledger. + + // fetching ledger 333 by its stash works. + let ledger_result = StakingLedger::::get(StakingAccount::Stash(333)); + assert_eq!(ledger_result.unwrap().stash, 333); + + // Case 2: corrupted ledger bonding. + // in this case, we simulate what happens when fetching a ledger by stash returns a + // ledger with a different stash. when this happens, we return an error instead of the + // ledger to prevent ledger mutations. + let mut ledger = Ledger::::get(444).unwrap(); + assert_eq!(ledger.stash, 333); + ledger.stash = 444; + Ledger::::insert(444, ledger); + + // now, we are prevented from fetching the ledger by stash from 1. It's associated + // controller (2) is now bonding a ledger with a different stash (2, not 1). + assert!(StakingLedger::::get(StakingAccount::Stash(333)).is_err()); + }) + } + + #[test] + fn bond_works() { + ExtBuilder::default().build_and_execute(|| { + assert!(!StakingLedger::::is_bonded(StakingAccount::Stash(42))); + assert!(>::get(&42).is_none()); + + let mut ledger: StakingLedger = StakingLedger::default_from(42); + let reward_dest = RewardDestination::Account(10); + + assert_ok!(ledger.clone().bond(reward_dest)); + assert!(StakingLedger::::is_bonded(StakingAccount::Stash(42))); + assert!(>::get(&42).is_some()); + assert_eq!(>::get(&42), Some(reward_dest)); + + // cannot bond again. + assert!(ledger.clone().bond(reward_dest).is_err()); + + // once bonded, update works as expected. + ledger.legacy_claimed_rewards = bounded_vec![1]; + assert_ok!(ledger.update()); + }) + } + + #[test] + fn bond_controller_cannot_be_stash_works() { + ExtBuilder::default().build_and_execute(|| { + let (stash, controller) = testing_utils::create_unique_stash_controller::( + 0, 10, - StakerStatus::::Nominator(vec![21]), - ) - .add_staker( - IdentityId::from(81), - 81, - 81, - 50, - StakerStatus::::Nominator(vec![21]), + RewardDestination::Staked, + false, ) + .unwrap(); + + assert_eq!(Bonded::::get(stash), Some(controller)); + assert_eq!( + Ledger::::get(controller).map(|l| l.stash), + Some(stash) + ); + + // existing controller should not be able become a stash. + assert_noop!( + Staking::bond( + RuntimeOrigin::signed(controller), + 10, + RewardDestination::Staked + ), + Error::::AlreadyPaired, + ); + }) + } + + #[test] + fn is_bonded_works() { + ExtBuilder::default().build_and_execute(|| { + assert!(!StakingLedger::::is_bonded(StakingAccount::Stash(42))); + assert!(!StakingLedger::::is_bonded( + StakingAccount::Controller(42) + )); + + // adds entry to Bonded without Ledger pair (should not happen). + >::insert(42, 42); + assert!(!StakingLedger::::is_bonded( + StakingAccount::Controller(42) + )); + + assert_eq!(>::get(&11), Some(11)); + assert!(StakingLedger::::is_bonded(StakingAccount::Stash(11))); + assert!(StakingLedger::::is_bonded( + StakingAccount::Controller(11) + )); + + >::remove(42); // ensures try-state checks pass. + }) + } + + #[test] + #[allow(deprecated)] + fn set_payee_errors_on_controller_destination() { + ExtBuilder::default().build_and_execute(|| { + Payee::::insert(11, RewardDestination::Staked); + assert_noop!( + Staking::set_payee(RuntimeOrigin::signed(11), RewardDestination::Controller), + Error::::ControllerDeprecated + ); + assert_eq!(Payee::::get(&11), Some(RewardDestination::Staked)); + }) + } + + #[test] + #[allow(deprecated)] + fn update_payee_migration_works() { + ExtBuilder::default().build_and_execute(|| { + // migrate a `Controller` variant to `Account` variant. + Payee::::insert(11, RewardDestination::Controller); + assert_eq!(Payee::::get(&11), Some(RewardDestination::Controller)); + assert_ok!(Staking::update_payee(RuntimeOrigin::signed(11), 11)); + assert_eq!( + Payee::::get(&11), + Some(RewardDestination::Account(11)) + ); + + // Do not migrate a variant if not `Controller`. + Payee::::insert(21, RewardDestination::Stash); + assert_eq!(Payee::::get(&21), Some(RewardDestination::Stash)); + assert_noop!( + Staking::update_payee(RuntimeOrigin::signed(11), 21), + Error::::NotController + ); + assert_eq!(Payee::::get(&21), Some(RewardDestination::Stash)); + }) + } + + #[test] + fn deprecate_controller_batch_works_full_weight() { + ExtBuilder::default() + .try_state(false) .build_and_execute(|| { - assert_ok!(::electing_voters(None)); - assert_eq!(MinimumActiveStake::::get(), 10); + // Given: + + let start = 1001; + let mut controllers: Vec<_> = vec![]; + for n in start..(start + MaxControllersInDeprecationBatch::get()).into() { + let ctlr: u64 = n.into(); + let stash: u64 = (n + 10000).into(); + + Ledger::::insert( + ctlr, + StakingLedger { + controller: None, + total: (10 + ctlr).into(), + active: (10 + ctlr).into(), + ..StakingLedger::default_from(stash) + }, + ); + Bonded::::insert(stash, ctlr); + Payee::::insert(stash, RewardDestination::Staked); - // remove staker with lower bond by limiting the number of voters and check - // `MinimumActiveStake` again after electing voters. - assert_ok!(::electing_voters(Some(4))); - assert_eq!(MinimumActiveStake::::get(), 50); - }); + controllers.push(ctlr); + } + + // When: + + let bounded_controllers: BoundedVec< + _, + ::MaxControllersInDeprecationBatch, + > = BoundedVec::try_from(controllers).unwrap(); + + // Only `AdminOrigin` can sign. + assert_noop!( + Staking::deprecate_controller_batch( + RuntimeOrigin::signed(2), + bounded_controllers.clone() + ), + BadOrigin + ); + + let result = + Staking::deprecate_controller_batch(RuntimeOrigin::root(), bounded_controllers); + assert_ok!(result); + assert_eq!( + result.unwrap().actual_weight.unwrap(), + ::WeightInfo::deprecate_controller_batch( + ::MaxControllersInDeprecationBatch::get() + ) + ); + + // Then: + + for n in start..(start + MaxControllersInDeprecationBatch::get()).into() { + let ctlr: u64 = n.into(); + let stash: u64 = (n + 10000).into(); + + // Ledger no longer keyed by controller. + assert_eq!(Ledger::::get(ctlr), None); + // Bonded now maps to the stash. + assert_eq!(Bonded::::get(stash), Some(stash)); + + // Ledger is now keyed by stash. + let ledger_updated = Ledger::::get(stash).unwrap(); + assert_eq!(ledger_updated.stash, stash); + + // Check `active` and `total` values match the original ledger set by controller. + assert_eq!(ledger_updated.active, (10 + ctlr).into()); + assert_eq!(ledger_updated.total, (10 + ctlr).into()); + } + }) } #[test] - fn set_minimum_active_stake_lower_bond_works() { - // if there are no voters, minimum active stake is zero (should not happen). + fn deprecate_controller_batch_works_half_weight() { + ExtBuilder::default().build_and_execute(|| { + // Given: + + let start = 1001; + let mut controllers: Vec<_> = vec![]; + for n in start..(start + MaxControllersInDeprecationBatch::get()).into() { + let ctlr: u64 = n.into(); + + // Only half of entries are unique pairs. + let stash: u64 = if n % 2 == 0 { (n + 10000).into() } else { ctlr }; + + Ledger::::insert( + ctlr, + StakingLedger { + controller: None, + ..StakingLedger::default_from(stash) + }, + ); + Bonded::::insert(stash, ctlr); + Payee::::insert(stash, RewardDestination::Staked); + + controllers.push(ctlr); + } + + // When: + let bounded_controllers: BoundedVec< + _, + ::MaxControllersInDeprecationBatch, + > = BoundedVec::try_from(controllers.clone()).unwrap(); + + let result = + Staking::deprecate_controller_batch(RuntimeOrigin::root(), bounded_controllers); + assert_ok!(result); + assert_eq!( + result.unwrap().actual_weight.unwrap(), + ::WeightInfo::deprecate_controller_batch(controllers.len() as u32) + ); + + // Then: + + for n in start..(start + MaxControllersInDeprecationBatch::get()).into() { + let unique_pair = n % 2 == 0; + let ctlr: u64 = n.into(); + let stash: u64 = if unique_pair { + (n + 10000).into() + } else { + ctlr + }; + + // Side effect of migration for unique pair. + if unique_pair { + assert_eq!(Ledger::::get(ctlr), None); + } + // Bonded maps to the stash. + assert_eq!(Bonded::::get(stash), Some(stash)); + + // Ledger is keyed by stash. + let ledger_updated = Ledger::::get(stash).unwrap(); + assert_eq!(ledger_updated.stash, stash); + } + }) + } + + #[test] + fn deprecate_controller_batch_skips_unmigrated_controller_payees() { + ExtBuilder::default() + .try_state(false) + .build_and_execute(|| { + // Given: + + let stash: u64 = 1000; + let ctlr: u64 = 1001; + + Ledger::::insert( + ctlr, + StakingLedger { + controller: None, + ..StakingLedger::default_from(stash) + }, + ); + Bonded::::insert(stash, ctlr); + #[allow(deprecated)] + Payee::::insert(stash, RewardDestination::Controller); + + // When: + + let bounded_controllers: BoundedVec< + _, + ::MaxControllersInDeprecationBatch, + > = BoundedVec::try_from(vec![ctlr]).unwrap(); + + let result = + Staking::deprecate_controller_batch(RuntimeOrigin::root(), bounded_controllers); + assert_ok!(result); + assert_eq!( + result.unwrap().actual_weight.unwrap(), + ::WeightInfo::deprecate_controller_batch(1 as u32) + ); + + // Then: + + // Esure deprecation did not happen. + assert_eq!(Ledger::::get(ctlr).is_some(), true); + + // Bonded still keyed by controller. + assert_eq!(Bonded::::get(stash), Some(ctlr)); + + // Ledger is still keyed by controller. + let ledger_updated = Ledger::::get(ctlr).unwrap(); + assert_eq!(ledger_updated.stash, stash); + }) + } + + #[test] + fn deprecate_controller_batch_with_bad_state_ok() { ExtBuilder::default() .has_stakers(false) + .nominate(false) .build_and_execute(|| { - assert_eq!(::VoterList::count(), 0); - assert_ok!(::electing_voters(None)); - assert_eq!(MinimumActiveStake::::get(), 0); - }); + setup_double_bonded_ledgers(); - // lower non-zero active stake below `MinNominatorBond` is the minimum active stake if - // it is selected as part of the npos voters. + // now let's deprecate all the controllers for all the existing ledgers. + let bounded_controllers: BoundedVec< + _, + ::MaxControllersInDeprecationBatch, + > = BoundedVec::try_from(vec![333, 444, 555, 777]).unwrap(); + + assert_ok!(Staking::deprecate_controller_batch( + RuntimeOrigin::root(), + bounded_controllers + )); + + assert_eq!( + *staking_events().last().unwrap(), + Event::ControllerBatchDeprecated { failures: 0 } + ); + }) + } + + #[test] + fn deprecate_controller_batch_with_bad_state_failures() { ExtBuilder::default() - .has_stakers(true) - .nominate(true) + .has_stakers(false) + .try_state(false) .build_and_execute(|| { - assert_eq!(MinNominatorBond::::get(), 1); - assert_eq!(::VoterList::count(), 4); + setup_double_bonded_ledgers(); - assert_ok!(Staking::bond( - RuntimeOrigin::signed(4), - 5, - Default::default(), + // now let's deprecate all the controllers for all the existing ledgers. + let bounded_controllers: BoundedVec< + _, + ::MaxControllersInDeprecationBatch, + > = BoundedVec::try_from(vec![777, 555, 444, 333]).unwrap(); + + assert_ok!(Staking::deprecate_controller_batch( + RuntimeOrigin::root(), + bounded_controllers )); - assert_ok!(Staking::nominate(RuntimeOrigin::signed(4), vec![1])); - assert_eq!(::VoterList::count(), 5); - let voters_before = - ::electing_voters(None).unwrap(); - assert_eq!(MinimumActiveStake::::get(), 5); + assert_eq!( + *staking_events().last().unwrap(), + Event::ControllerBatchDeprecated { failures: 2 } + ); + }) + } - // update minimum nominator bond. - MinNominatorBond::::set(10); - assert_eq!(MinNominatorBond::::get(), 10); - // voter list still considers nominator 4 for voting, even though its active stake is - // lower than `MinNominatorBond`. - assert_eq!(::VoterList::count(), 5); + #[test] + fn set_controller_with_bad_state_ok() { + ExtBuilder::default() + .has_stakers(false) + .nominate(false) + .build_and_execute(|| { + setup_double_bonded_ledgers(); - let voters = ::electing_voters(None).unwrap(); - assert_eq!(voters_before, voters); + // in this case, setting controller works due to the ordering of the calls. + assert_ok!(Staking::set_controller(RuntimeOrigin::signed(333))); + assert_ok!(Staking::set_controller(RuntimeOrigin::signed(444))); + assert_ok!(Staking::set_controller(RuntimeOrigin::signed(555))); + }) + } - // minimum active stake is lower than `MinNominatorBond`. - assert_eq!(MinimumActiveStake::::get(), 5); - }); + #[test] + fn set_controller_with_bad_state_fails() { + ExtBuilder::default() + .has_stakers(false) + .try_state(false) + .build_and_execute(|| { + setup_double_bonded_ledgers(); + + // setting the controller of ledger associated with stash 555 fails since its stash is a + // controller of another ledger. + assert_noop!( + Staking::set_controller(RuntimeOrigin::signed(555)), + Error::::BadState + ); + assert_noop!( + Staking::set_controller(RuntimeOrigin::signed(444)), + Error::::BadState + ); + assert_ok!(Staking::set_controller(RuntimeOrigin::signed(333))); + }) } +} + +mod ledger_recovery { + use super::*; #[test] - fn set_minimum_active_bond_corrupt_state() { + fn inspect_recovery_ledger_simple_works() { ExtBuilder::default() .has_stakers(true) - .nominate(true) - .add_staker( - IdentityId::from(61), - 61, - 61, - 2_000, - StakerStatus::::Nominator(vec![21]), - ) + .try_state(false) .build_and_execute(|| { - assert_eq!(Staking::weight_of(&101), 500); - let voters = ::electing_voters(None).unwrap(); - assert_eq!(voters.len(), 5); - assert_eq!(MinimumActiveStake::::get(), 500); + setup_double_bonded_ledgers(); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(101), 200)); - start_active_era(10); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(101), 100)); - start_active_era(20); + // non corrupted ledger. + assert_eq!( + Staking::inspect_bond_state(&11).unwrap(), + LedgerIntegrityState::Ok + ); - // corrupt ledger state by lowering max unlocking chunks bounds. - MaxUnlockingChunks::set(1); + // non bonded stash. + assert!(Bonded::::get(&1111).is_none()); + assert!(Staking::inspect_bond_state(&1111).is_err()); + + // double bonded but not corrupted. + assert_eq!( + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Ok + ); + }) + } + + #[test] + fn inspect_recovery_ledger_corupted_killed_works() { + ExtBuilder::default() + .has_stakers(true) + .try_state(false) + .build_and_execute(|| { + setup_double_bonded_ledgers(); + + let lock_333_before = asset::staked::(&333); + + // get into corrupted and killed ledger state by killing a corrupted ledger: + // init state: + // (333, 444) + // (444, 555) + // set_controller(444) to 444 + // (333, 444) -> corrupted + // (444, 444) + // kill(333) + // (444, 444) -> corrupted and None. + assert_eq!( + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Ok + ); + set_controller_no_checks(&444); + + // now try-state fails. + assert!(Staking::do_try_state(System::block_number()).is_err()); + + // 333 is corrupted since it's controller is linking 444 ledger. + assert_eq!( + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Corrupted + ); + // 444 however is OK. + assert_eq!( + Staking::inspect_bond_state(&444).unwrap(), + LedgerIntegrityState::Ok + ); - let voters = ::electing_voters(None).unwrap(); - // number of returned voters decreases since ledger entry of stash 101 is now - // corrupt. - assert_eq!(voters.len(), 4); - // minimum active stake does not take into consideration the corrupt entry. - assert_eq!(MinimumActiveStake::::get(), 2_000); + // kill the corrupted ledger that is associated with stash 333. + assert_ok!(StakingLedger::::kill(&333)); - // voter weight of corrupted ledger entry is 0. - assert_eq!(Staking::weight_of(&101), 0); + // 333 bond is no more but it returns `BadState` because the lock on this stash is + // still set (see checks below). + assert_eq!( + Staking::inspect_bond_state(&333), + Err(Error::::BadState) + ); + // now the *other* ledger associated with 444 has been corrupted and killed (None). + assert_eq!( + Staking::inspect_bond_state(&444), + Ok(LedgerIntegrityState::CorruptedKilled) + ); - // reset max unlocking chunks for try_state to pass. - MaxUnlockingChunks::set(32); + // side effects on 333 - ledger, bonded, payee, lock should be completely empty. + // however, 333 lock remains. + assert_eq!(asset::staked::(&333), lock_333_before); // NOK + assert!(Bonded::::get(&333).is_none()); // OK + assert!(Payee::::get(&333).is_none()); // OK + assert!(Ledger::::get(&444).is_none()); // OK + + // side effects on 444 - ledger, bonded, payee, lock should remain be intact. + // however, 444 lock was removed. + assert_eq!(asset::staked::(&444), 0); // NOK + assert!(Bonded::::get(&444).is_some()); // OK + assert!(Payee::::get(&444).is_some()); // OK + assert!(Ledger::::get(&555).is_none()); // NOK + + assert!(Staking::do_try_state(System::block_number()).is_err()); }) } #[test] - fn voters_include_self_vote() { - ExtBuilder::default().nominate(false).build_and_execute(|| { - assert!(>::iter() - .map(|(x, _)| x) - .all(|v| Staking::electing_voters(None) - .unwrap() - .into_iter() - .any(|(w, _, t)| { v == w && t[0] == w }))) - }) - } - - #[test] - fn respects_snapshot_len_limits() { + fn inspect_recovery_ledger_corupted_killed_other_works() { ExtBuilder::default() - .set_status(41, StakerStatus::Validator) + .has_stakers(true) + .try_state(false) .build_and_execute(|| { - // sum of all nominators who'd be voters (1), plus the self-votes (4). - assert_eq!(::VoterList::count(), 5); - - // if limits is less.. - assert_eq!(Staking::electing_voters(Some(1)).unwrap().len(), 1); + setup_double_bonded_ledgers(); + + let lock_333_before = asset::staked::(&333); + + // get into corrupted and killed ledger state by killing a corrupted ledger: + // init state: + // (333, 444) + // (444, 555) + // set_controller(444) to 444 + // (333, 444) -> corrupted + // (444, 444) + // kill(444) + // (333, 444) -> corrupted and None + assert_eq!( + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Ok + ); + set_controller_no_checks(&444); - // if limit is equal.. - assert_eq!(Staking::electing_voters(Some(5)).unwrap().len(), 5); + // now try-state fails. + assert!(Staking::do_try_state(System::block_number()).is_err()); - // if limit is more. - assert_eq!(Staking::electing_voters(Some(55)).unwrap().len(), 5); + // 333 is corrupted since it's controller is linking 444 ledger. + assert_eq!( + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Corrupted + ); + // 444 however is OK. + assert_eq!( + Staking::inspect_bond_state(&444).unwrap(), + LedgerIntegrityState::Ok + ); - // if target limit is more.. - assert_eq!(Staking::electable_targets(Some(6)).unwrap().len(), 4); - assert_eq!(Staking::electable_targets(Some(4)).unwrap().len(), 4); + // kill the *other* ledger that is double bonded but not corrupted. + assert_ok!(StakingLedger::::kill(&444)); - // if target limit is less, then we return an error. + // now 333 is corrupted and None through the *other* ledger being killed. assert_eq!( - Staking::electable_targets(Some(1)).unwrap_err(), - "Target snapshot too big" + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::CorruptedKilled, ); - }); + // 444 is cleaned and not a stash anymore; no lock left behind. + assert_eq!(Ledger::::get(&444), None); + assert_eq!( + Staking::inspect_bond_state(&444), + Err(Error::::NotStash) + ); + + // side effects on 333 - ledger, bonded, payee, lock should be intact. + assert_eq!(asset::staked::(&333), lock_333_before); // OK + assert_eq!(Bonded::::get(&333), Some(444)); // OK + assert!(Payee::::get(&333).is_some()); + // however, ledger associated with its controller was killed. + assert!(Ledger::::get(&444).is_none()); // NOK + + // side effects on 444 - ledger, bonded, payee, lock should be completely removed. + assert_eq!(asset::staked::(&444), 0); // OK + assert!(Bonded::::get(&444).is_none()); // OK + assert!(Payee::::get(&444).is_none()); // OK + assert!(Ledger::::get(&555).is_none()); // OK + + assert!(Staking::do_try_state(System::block_number()).is_err()); + }) } - // Tests the criteria that in `ElectionDataProvider::voters` function, we try to get at most - // `maybe_max_len` voters, and if some of them end up being skipped, we iterate at most `2 * - // maybe_max_len`. #[test] - fn only_iterates_max_2_times_max_allowed_len() { + fn inspect_recovery_ledger_lock_corrupted_works() { ExtBuilder::default() - .nominate(false) - // the best way to invalidate a bunch of nominators is to have them nominate a lot of - // ppl, but then lower the MaxNomination limit. - .add_staker( - IdentityId::from(61), - 61, - 61, - 2_000, - StakerStatus::::Nominator(vec![21, 22, 23, 24, 25]), - ) - .add_staker( - IdentityId::from(71), - 71, - 71, - 2_000, - StakerStatus::::Nominator(vec![21, 22, 23, 24, 25]), - ) - .add_staker( - IdentityId::from(81), - 81, - 81, - 2_000, - StakerStatus::::Nominator(vec![21, 22, 23, 24, 25]), - ) + .has_stakers(true) + .try_state(false) .build_and_execute(|| { - // all voters ordered by stake, + setup_double_bonded_ledgers(); + + // get into lock corrupted ledger state by bond_extra on a ledger that is double bonded + // with a corrupted ledger. + // init state: + // (333, 444) + // (444, 555) + // set_controller(444) to 444 + // (333, 444) -> corrupted + // (444, 444) + // bond_extra(333, 10) -> lock corrupted on 444 assert_eq!( - ::VoterList::iter().collect::>(), - vec![31, 21, 11, 81, 71, 61] + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Ok ); + set_controller_no_checks(&444); + bond_extra_no_checks(&333, 10); - MaxNominations::set(2); + // now try-state fails. + assert!(Staking::do_try_state(System::block_number()).is_err()); - // we want 2 voters now, and in maximum we allow 4 iterations. This is what happens: - // 61 is pruned; - // 71 is pruned; - // 81 is pruned; - // 11 is taken; - // we finish since the 2x limit is reached. + // 333 is corrupted since it's controller is linking 444 ledger. assert_eq!( - Staking::electing_voters(Some(2)) - .unwrap() - .iter() - .map(|(stash, _, _)| stash) - .copied() - .collect::>(), - vec![31, 21], + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Corrupted ); - }); + // 444 ledger is not corrupted but locks got out of sync. + assert_eq!( + Staking::inspect_bond_state(&444).unwrap(), + LedgerIntegrityState::LockCorrupted + ); + }) } + // Corrupted ledger restore. + // + // * Double bonded and corrupted ledger. #[test] - fn estimate_next_election_works() { + fn restore_ledger_corrupted_works() { ExtBuilder::default() - .session_per_era(5) - .period(5) + .has_stakers(true) .build_and_execute(|| { - // first session is always length 0. - for b in 1..20 { - run_to_block(b); - assert_eq!( - Staking::next_election_prediction(System::block_number()), - 20 - ); - } + setup_double_bonded_ledgers(); + + // get into corrupted and killed ledger state. + // init state: + // (333, 444) + // (444, 555) + // set_controller(444) to 444 + // (333, 444) -> corrupted + // (444, 444) + assert_eq!( + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Ok + ); + set_controller_no_checks(&444); - // election - run_to_block(20); assert_eq!( - Staking::next_election_prediction(System::block_number()), - 45 + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Corrupted ); - assert_eq!(staking_events().len(), 1); - assert_eq!(*staking_events().last().unwrap(), Event::StakersElected); - for b in 21..45 { - run_to_block(b); - assert_eq!( - Staking::next_election_prediction(System::block_number()), - 45 - ); - } + // now try-state fails. + assert!(Staking::do_try_state(System::block_number()).is_err()); - // election - run_to_block(45); + // recover the ledger bonded by 333 stash. + assert_ok!(Staking::restore_ledger( + RuntimeOrigin::root(), + 333, + None, + None, + None + )); + + // try-state checks are ok now. + assert_ok!(Staking::do_try_state(System::block_number())); + }) + } + + // Corrupted and killed ledger restore. + // + // * Double bonded and corrupted ledger. + // * Ledger killed by own controller. + #[test] + fn restore_ledger_corrupted_killed_works() { + ExtBuilder::default() + .has_stakers(true) + .build_and_execute(|| { + setup_double_bonded_ledgers(); + + // ledger.total == lock + let total_444_before_corruption = asset::staked::(&444); + + // get into corrupted and killed ledger state by killing a corrupted ledger: + // init state: + // (333, 444) + // (444, 555) + // set_controller(444) to 444 + // (333, 444) -> corrupted + // (444, 444) + // kill(333) + // (444, 444) -> corrupted and None. assert_eq!( - Staking::next_election_prediction(System::block_number()), - 70 + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Ok ); - assert_eq!(staking_events().len(), 3); - assert_eq!(*staking_events().last().unwrap(), Event::StakersElected); + set_controller_no_checks(&444); - Staking::force_no_eras(RuntimeOrigin::root()).unwrap(); + // kill the corrupted ledger that is associated with stash 333. + assert_ok!(StakingLedger::::kill(&333)); + + // 333 bond is no more but it returns `BadState` because the lock on this stash is + // still set (see checks below). assert_eq!( - Staking::next_election_prediction(System::block_number()), - u64::MAX + Staking::inspect_bond_state(&333), + Err(Error::::BadState) ); + // now the *other* ledger associated with 444 has been corrupted and killed (None). + assert!(Staking::ledger(StakingAccount::Stash(444)).is_err()); - Staking::force_new_era_always(RuntimeOrigin::root()).unwrap(); - assert_eq!( - Staking::next_election_prediction(System::block_number()), - 45 + 5 + // try-state should fail. + assert!(Staking::do_try_state(System::block_number()).is_err()); + + // recover the ledger bonded by 333 stash. + assert_ok!(Staking::restore_ledger( + RuntimeOrigin::root(), + 333, + None, + None, + None + )); + + // for the try-state checks to pass, we also need to recover the stash 444 which is + // corrupted too by proxy of kill(333). Currently, both the lock and the ledger of 444 + // have been cleared so we need to provide the new amount to restore the ledger. + assert_noop!( + Staking::restore_ledger(RuntimeOrigin::root(), 444, None, None, None), + Error::::CannotRestoreLedger ); - Staking::force_new_era(RuntimeOrigin::root()).unwrap(); + assert_ok!(Staking::restore_ledger( + RuntimeOrigin::root(), + 444, + None, + Some(total_444_before_corruption), + None, + )); + + // try-state checks are ok now. + assert_ok!(Staking::do_try_state(System::block_number())); + }) + } + + // Corrupted and killed by *other* ledger restore. + // + // * Double bonded and corrupted ledger. + // * Ledger killed by own controller. + #[test] + fn restore_ledger_corrupted_killed_other_works() { + ExtBuilder::default() + .has_stakers(true) + .build_and_execute(|| { + setup_double_bonded_ledgers(); + + // get into corrupted and killed ledger state by killing a corrupted ledger: + // init state: + // (333, 444) + // (444, 555) + // set_controller(444) to 444 + // (333, 444) -> corrupted + // (444, 444) + // kill(444) + // (333, 444) -> corrupted and None assert_eq!( - Staking::next_election_prediction(System::block_number()), - 45 + 5 + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Ok ); + set_controller_no_checks(&444); - // Do a fail election - MinimumValidatorCount::::put(1000); - run_to_block(50); - // Election: failed, next session is a new election + // now try-state fails. + assert!(Staking::do_try_state(System::block_number()).is_err()); + + // 333 is corrupted since it's controller is linking 444 ledger. assert_eq!( - Staking::next_election_prediction(System::block_number()), - 50 + 5 + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Corrupted ); - // The new era is still forced until a new era is planned. - assert_eq!(ForceEra::::get(), Forcing::ForceNew); - - MinimumValidatorCount::::put(2); - run_to_block(55); + // 444 however is OK. assert_eq!( - Staking::next_election_prediction(System::block_number()), - 55 + 25 + Staking::inspect_bond_state(&444).unwrap(), + LedgerIntegrityState::Ok ); - assert_eq!(staking_events().len(), 10); + + // kill the *other* ledger that is double bonded but not corrupted. + assert_ok!(StakingLedger::::kill(&444)); + + // recover the ledger bonded by 333 stash. + assert_ok!(Staking::restore_ledger( + RuntimeOrigin::root(), + 333, + None, + None, + None + )); + + // 444 does not need recover in this case since it's been killed successfully. assert_eq!( - *staking_events().last().unwrap(), - Event::ForceEra { - mode: Forcing::NotForcing - } + Staking::inspect_bond_state(&444), + Err(Error::::NotStash) ); + + // try-state checks are ok now. + assert_ok!(Staking::do_try_state(System::block_number())); + }) + } + + // Corrupted with bond_extra. + // + // * Double bonded and corrupted ledger. + // * Corrupted ledger calls `bond_extra` + #[test] + fn restore_ledger_corrupted_bond_extra_works() { + ExtBuilder::default() + .has_stakers(true) + .build_and_execute(|| { + setup_double_bonded_ledgers(); + + let lock_333_before = asset::staked::(&333); + let lock_444_before = asset::staked::(&444); + + // get into corrupted and killed ledger state by killing a corrupted ledger: + // init state: + // (333, 444) + // (444, 555) + // set_controller(444) to 444 + // (333, 444) -> corrupted + // (444, 444) + // bond_extra(444, 40) -> OK + // bond_extra(333, 30) -> locks out of sync + assert_eq!( - *staking_events().get(staking_events().len() - 2).unwrap(), - Event::StakersElected + Staking::inspect_bond_state(&333).unwrap(), + LedgerIntegrityState::Ok ); - // The new era has been planned, forcing is changed from `ForceNew` to `NotForcing`. - assert_eq!(ForceEra::::get(), Forcing::NotForcing); + set_controller_no_checks(&444); + + // now try-state fails. + assert!(Staking::do_try_state(System::block_number()).is_err()); + + // if 444 bonds extra, the locks remain in sync. + bond_extra_no_checks(&444, 40); + assert_eq!(asset::staked::(&333), lock_333_before); + assert_eq!(asset::staked::(&444), lock_444_before + 40); + + // however if 333 bonds extra, the wrong lock is updated. + bond_extra_no_checks(&333, 30); + assert_eq!(asset::staked::(&333), lock_444_before + 40 + 30); //not OK + assert_eq!(asset::staked::(&444), lock_444_before + 40); // OK + + // recover the ledger bonded by 333 stash. Note that the total/lock needs to be + // re-written since on-chain data lock has become out of sync. + assert_ok!(Staking::restore_ledger( + RuntimeOrigin::root(), + 333, + None, + Some(lock_333_before + 30), + None + )); + + // now recover 444 that although it's not corrupted, its lock and ledger.total are out + // of sync. in which case, we need to explicitly set the ledger's lock and amount, + // otherwise the ledger recover will fail. + assert_noop!( + Staking::restore_ledger(RuntimeOrigin::root(), 444, None, None, None), + Error::::CannotRestoreLedger + ); + + //and enforcing a new ledger lock/total on this non-corrupted ledger will work. + assert_ok!(Staking::restore_ledger( + RuntimeOrigin::root(), + 444, + None, + Some(lock_444_before + 40), + None + )); + + // double-check that ledgers got to expected state and bond_extra done during the + // corrupted state is part of the recovered ledgers. + let ledger_333 = Bonded::::get(&333) + .and_then(Ledger::::get) + .unwrap(); + let ledger_444 = Bonded::::get(&444) + .and_then(Ledger::::get) + .unwrap(); + + assert_eq!(ledger_333.total, lock_333_before + 30); + assert_eq!(asset::staked::(&333), ledger_333.total); + assert_eq!(ledger_444.total, lock_444_before + 40); + assert_eq!(asset::staked::(&444), ledger_444.total); + + // try-state checks are ok now. + assert_ok!(Staking::do_try_state(System::block_number())); }) } } -#[ignore] -#[test] -#[should_panic] -fn count_check_works() { - ExtBuilder::default().build_and_execute(|| { - // We should never insert into the validators or nominators map directly as this will - // not keep track of the count. This test should panic as we verify the count is accurate - // after every test using the `post_checks` in `mock`. - Validators::::insert(987654321, ValidatorPrefs::default()); - Nominators::::insert( - 987654321, - Nominations { - targets: Default::default(), - submitted_in: Default::default(), - suppressed: false, - }, - ); - }) -} +mod validator_disabling_integration { + use super::*; -#[test] -fn min_bond_checks_work() { - ExtBuilder::default() - .existential_deposit(100) - .balance_factor(100) - .min_nominator_bond(1_000) - .min_validator_bond(1_500) - .build_and_execute(|| { - // 500 is not enough for any role - assert_ok!(Staking::bond( - RuntimeOrigin::signed(3), - 500, - RewardDestination::Controller - )); - assert_noop!( - Staking::nominate(RuntimeOrigin::signed(3), vec![1]), - Error::::InsufficientBond - ); - assert_noop!( - Staking::validate(RuntimeOrigin::signed(3), ValidatorPrefs::default()), - Error::::InsufficientBond, - ); + #[test] + fn reenable_lower_offenders() { + ExtBuilder::default() + .validator_count(7) + .set_status(41, StakerStatus::Validator) + .set_status(51, StakerStatus::Validator) + .set_status(201, StakerStatus::Validator) + .set_status(202, StakerStatus::Validator) + .build_and_execute(|| { + mock::start_active_era(1); + assert_eq_uvec!(Session::validators(), vec![11, 21, 31, 41, 51, 201, 202]); + + // offence with a low slash + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(10)]); + on_offence_now(&[offence_from(21, None)], &[Perbill::from_percent(20)]); + + // it does NOT affect the nominator. + assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]); - // 1000 is enough for nominator - provide_did_to_user(3); - assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(3), 500)); - assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![1])); - assert_noop!( - Staking::validate(RuntimeOrigin::signed(3), ValidatorPrefs::default()), - Error::::InsufficientBond, - ); + // both validators should be disabled + assert!(is_disabled(11)); + assert!(is_disabled(21)); - // 1500 is enough for validator - assert_add_permissioned_validator!(&3); - assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(3), 500)); - assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![1])); - assert_ok!(Staking::validate( - RuntimeOrigin::signed(3), - ValidatorPrefs::default() - )); + // offence with a higher slash + on_offence_now(&[offence_from(31, None)], &[Perbill::from_percent(50)]); - // Can't unbond anything as validator - assert_noop!( - Staking::unbond(RuntimeOrigin::signed(3), 500), - Error::::InsufficientBond - ); + // First offender is no longer disabled + assert!(!is_disabled(11)); + // Mid offender is still disabled + assert!(is_disabled(21)); + // New offender is disabled + assert!(is_disabled(31)); - // Once they are a nominator, they can unbond 500 - assert_ok!(Staking::nominate(RuntimeOrigin::signed(3), vec![1])); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(3), 500)); - assert_noop!( - Staking::unbond(RuntimeOrigin::signed(3), 500), - Error::::InsufficientBond - ); + assert_eq!( + staking_events_since_last_call(), + vec![ + Event::StakersElected, + Event::EraPaid { + era_index: 0, + validator_payout: 11075, + remainder: 33225 + }, + Event::SlashReported { + validator: 11, + fraction: Perbill::from_percent(10), + slash_era: 1 + }, + Event::Slashed { + staker: 11, + amount: 100 + }, + Event::Slashed { + staker: 101, + amount: 12 + }, + Event::SlashReported { + validator: 21, + fraction: Perbill::from_percent(20), + slash_era: 1 + }, + Event::Slashed { + staker: 21, + amount: 200 + }, + Event::Slashed { + staker: 101, + amount: 75 + }, + Event::SlashReported { + validator: 31, + fraction: Perbill::from_percent(50), + slash_era: 1 + }, + Event::Slashed { + staker: 31, + amount: 250 + }, + ] + ); - // Once they are chilled they can unbond everything - assert_ok!(Staking::chill(RuntimeOrigin::signed(3))); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(3), 1000)); - }) -} + assert!(matches!( + session_events().as_slice(), + &[ + .., + SessionEvent::ValidatorDisabled { validator: 11 }, + SessionEvent::ValidatorDisabled { validator: 21 }, + SessionEvent::ValidatorDisabled { validator: 31 }, + SessionEvent::ValidatorReenabled { validator: 11 }, + ] + )); + }); + } -#[ignore] -#[test] -fn chill_other_works() {} + #[test] + fn do_not_reenable_higher_offenders_mock() { + ExtBuilder::default() + .validator_count(7) + .set_status(41, StakerStatus::Validator) + .set_status(51, StakerStatus::Validator) + .set_status(201, StakerStatus::Validator) + .set_status(202, StakerStatus::Validator) + .build_and_execute(|| { + mock::start_active_era(1); + assert_eq_uvec!(Session::validators(), vec![11, 21, 31, 41, 51, 201, 202]); -#[ignore] -#[test] -fn capped_stakers_works() {} + // offence with a major slash + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(50)]); + on_offence_now(&[offence_from(21, None)], &[Perbill::from_percent(50)]); -#[test] -fn min_commission_works() { - ExtBuilder::default().build_and_execute(|| { - assert_ok!(PalletValidators::set_commission_cap( - RuntimeOrigin::root(), - Perbill::from_percent(60) - )); - // account 10 controls the stash from account 11 - assert_ok!(Staking::validate( - RuntimeOrigin::signed(11), - ValidatorPrefs { - commission: Perbill::from_percent(5), - blocked: false - } - )); + // both validators should be disabled + assert!(is_disabled(11)); + assert!(is_disabled(21)); - // event emitted should be correct - assert_eq!( - *staking_events().last().unwrap(), - Event::ValidatorPrefsSet { - stash: 11, - prefs: ValidatorPrefs { - commission: Perbill::from_percent(5), - blocked: false - } - } - ); + // offence with a minor slash + on_offence_now(&[offence_from(31, None)], &[Perbill::from_percent(10)]); - assert_ok!(Staking::set_staking_configs( - RuntimeOrigin::root(), - ConfigOp::Remove, - ConfigOp::Remove, - ConfigOp::Remove, - ConfigOp::Remove, - ConfigOp::Remove, - ConfigOp::Set(Perbill::from_percent(10)), - )); + // First and second offenders are still disabled + assert!(is_disabled(11)); + assert!(is_disabled(21)); + // New offender is not disabled as limit is reached and his prio is lower + assert!(!is_disabled(31)); - // can't make it less than 10 now - assert_noop!( - Staking::validate( - RuntimeOrigin::signed(11), - ValidatorPrefs { - commission: Perbill::from_percent(5), - blocked: false - } - ), - Error::::CommissionTooLow - ); + assert_eq!( + staking_events_since_last_call(), + vec![ + Event::StakersElected, + Event::EraPaid { + era_index: 0, + validator_payout: 11075, + remainder: 33225 + }, + Event::SlashReported { + validator: 11, + fraction: Perbill::from_percent(50), + slash_era: 1 + }, + Event::Slashed { + staker: 11, + amount: 500 + }, + Event::Slashed { + staker: 101, + amount: 62 + }, + Event::SlashReported { + validator: 21, + fraction: Perbill::from_percent(50), + slash_era: 1 + }, + Event::Slashed { + staker: 21, + amount: 500 + }, + Event::Slashed { + staker: 101, + amount: 187 + }, + Event::SlashReported { + validator: 31, + fraction: Perbill::from_percent(10), + slash_era: 1 + }, + Event::Slashed { + staker: 31, + amount: 50 + }, + ] + ); - // can only change to higher. - assert_ok!(Staking::validate( - RuntimeOrigin::signed(11), - ValidatorPrefs { - commission: Perbill::from_percent(10), - blocked: false - } - )); + assert!(matches!( + session_events().as_slice(), + &[ + .., + SessionEvent::ValidatorDisabled { validator: 11 }, + SessionEvent::ValidatorDisabled { validator: 21 }, + ] + )); + }); + } - assert_ok!(Staking::validate( - RuntimeOrigin::signed(11), - ValidatorPrefs { - commission: Perbill::from_percent(15), - blocked: false - } - )); - }) -} + #[test] + fn clear_disabled_only_on_era_change() { + ExtBuilder::default() + .validator_count(7) + .set_status(41, StakerStatus::Validator) + .set_status(51, StakerStatus::Validator) + .set_status(201, StakerStatus::Validator) + .set_status(202, StakerStatus::Validator) + .session_per_era(3) + .build_and_execute(|| { + assert_eq_uvec!(Session::validators(), vec![11, 21, 31, 41, 51, 201, 202]); -#[test] -fn change_of_max_nominations() { - use frame_election_provider_support::ElectionDataProvider; - ExtBuilder::default() - .add_staker( - IdentityId::from(61), - 61, - 61, - 10, - StakerStatus::Nominator(vec![1]), - ) - .add_staker( - IdentityId::from(71), - 71, - 71, - 10, - StakerStatus::Nominator(vec![1, 2, 3]), - ) - .balance_factor(10) - .build_and_execute(|| { - // pre-condition - assert_eq!(MaxNominations::get(), 16); + // offence with a major slash + on_offence_now( + &[offence_from(11, None), offence_from(21, None)], + &[Perbill::from_percent(50), Perbill::from_percent(50)], + ); - assert_eq!( - Nominators::::iter() - .map(|(k, n)| (k, n.targets.len())) - .collect::>(), - vec![(101, 2), (71, 3), (61, 1)] - ); - // 3 validators and 3 nominators - assert_eq!(Staking::electing_voters(None).unwrap().len(), 3 + 3); + // both validators should be disabled + assert!(is_disabled(11)); + assert!(is_disabled(21)); - // abrupt change from 16 to 4, everyone should be fine. - MaxNominations::set(4); + // progress session and check if disablement is retained + start_session(2); + assert!(is_disabled(11)); + assert!(is_disabled(21)); - assert_eq!( - Nominators::::iter() - .map(|(k, n)| (k, n.targets.len())) - .collect::>(), - vec![(101, 2), (71, 3), (61, 1)] - ); - assert_eq!(Staking::electing_voters(None).unwrap().len(), 3 + 3); + // progress era (3 sessions per era) and clear disablement + start_session(3); + assert!(!is_disabled(11)); + assert!(!is_disabled(21)); + }); + } - // abrupt change from 4 to 3, everyone should be fine. - MaxNominations::set(3); + #[test] + fn validator_is_not_disabled_for_an_offence_in_previous_era() { + ExtBuilder::default() + .validator_count(4) + .set_status(41, StakerStatus::Validator) + .build_and_execute(|| { + mock::start_active_era(1); - assert_eq!( - Nominators::::iter() - .map(|(k, n)| (k, n.targets.len())) - .collect::>(), - vec![(101, 2), (71, 3), (61, 1)] - ); - assert_eq!(Staking::electing_voters(None).unwrap().len(), 3 + 3); + assert!(>::contains_key(11)); + assert!(Session::validators().contains(&11)); - // abrupt change from 3 to 2, this should cause some nominators to be non-decodable, and - // thus non-existent unless if they update. - MaxNominations::set(2); + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(0)]); - assert_eq!( - Nominators::::iter() - .map(|(k, n)| (k, n.targets.len())) - .collect::>(), - vec![(101, 2), (61, 1)] - ); - // 70 is still in storage.. - assert!(Nominators::::contains_key(71)); - // but its value cannot be decoded and default is returned. - assert!(Nominators::::get(71).is_none()); + assert_eq!(ForceEra::::get(), Forcing::NotForcing); + assert!(is_disabled(11)); - assert_eq!(Staking::electing_voters(None).unwrap().len(), 3 + 2); - assert!(Nominators::::contains_key(101)); + mock::start_active_era(2); - // abrupt change from 2 to 1, this should cause some nominators to be non-decodable, and - // thus non-existent unless if they update. - MaxNominations::set(1); + // the validator is not disabled in the new era + Staking::validate(RuntimeOrigin::signed(11), Default::default()).unwrap(); + assert_eq!(ForceEra::::get(), Forcing::NotForcing); + assert!(>::contains_key(11)); + assert!(Session::validators().contains(&11)); - assert_eq!( - Nominators::::iter() - .map(|(k, n)| (k, n.targets.len())) - .collect::>(), - vec![(61, 1)] - ); - assert!(Nominators::::contains_key(71)); - assert!(Nominators::::contains_key(61)); - assert!(Nominators::::get(71).is_none()); - assert!(Nominators::::get(61).is_some()); - assert_eq!(Staking::electing_voters(None).unwrap().len(), 3 + 1); + mock::start_active_era(3); - // now one of them can revive themselves by re-nominating to a proper value. - assert_ok!(Staking::nominate(RuntimeOrigin::signed(71), vec![1])); - assert_eq!( - Nominators::::iter() - .map(|(k, n)| (k, n.targets.len())) - .collect::>(), - vec![(71, 1), (61, 1)] - ); + // an offence committed in era 1 is reported in era 3 + on_offence_in_era(&[offence_from(11, None)], &[Perbill::from_percent(0)], 1); - // or they can be chilled by any account. - assert!(Nominators::::contains_key(101)); - assert!(Nominators::::get(101).is_none()); - assert_ok!(Staking::chill_other(RuntimeOrigin::signed(71), 101)); - assert!(!Nominators::::contains_key(101)); - assert!(Nominators::::get(101).is_none()); - }) -} + // the validator doesn't get disabled for an old offence + assert!(Validators::::iter().any(|(stash, _)| stash == 11)); + assert!(!is_disabled(11)); -mod sorted_list_provider { - use super::*; - use frame_election_provider_support::SortedListProvider; + // and we are not forcing a new era + assert_eq!(ForceEra::::get(), Forcing::NotForcing); + + on_offence_in_era( + &[offence_from(11, None)], + // NOTE: A 100% slash here would clean up the account, causing de-registration. + &[Perbill::from_percent(95)], + 1, + ); + + // the validator doesn't get disabled again + assert!(Validators::::iter().any(|(stash, _)| stash == 11)); + assert!(!is_disabled(11)); + // and we are still not forcing a new era + assert_eq!(ForceEra::::get(), Forcing::NotForcing); + }); + } #[test] - fn re_nominate_does_not_change_counters_or_list() { - ExtBuilder::default().nominate(true).build_and_execute(|| { - // given - let pre_insert_voter_count = - (Nominators::::count() + Validators::::count()) as u32; - assert_eq!(::VoterList::count(), pre_insert_voter_count); + fn non_slashable_offence_disables_validator() { + ExtBuilder::default() + .validator_count(7) + .set_status(41, StakerStatus::Validator) + .set_status(51, StakerStatus::Validator) + .set_status(201, StakerStatus::Validator) + .set_status(202, StakerStatus::Validator) + .build_and_execute(|| { + mock::start_active_era(1); + assert_eq_uvec!(Session::validators(), vec![11, 21, 31, 41, 51, 201, 202]); - // Polymesh change - // ----------------------------------------------------------------- - // UseNominatorsAndValidatorsMap does not provide nominators is sorted order - // assert_eq!( - // ::VoterList::iter().collect::>(), - // vec![11, 21, 31, 101] - // ); - // ----------------------------------------------------------------- + // offence with no slash associated + on_offence_now(&[offence_from(11, None)], &[Perbill::zero()]); - // when account 101 renominates - assert_ok!(Staking::nominate(RuntimeOrigin::signed(101), vec![41])); + // it does NOT affect the nominator. + assert_eq!(Nominators::::get(101).unwrap().targets, vec![11, 21]); - // then counts don't change - assert_eq!(::VoterList::count(), pre_insert_voter_count); - // Polymesh change - // ----------------------------------------------------------------- - // UseNominatorsAndValidatorsMap does not provide nominators is sorted order - // assert_eq!( - // ::VoterList::iter().collect::>(), - // vec![11, 21, 31, 101] - // ); - // ----------------------------------------------------------------- - }); + // offence that slashes 25% of the bond + on_offence_now(&[offence_from(21, None)], &[Perbill::from_percent(25)]); + + // it DOES NOT affect the nominator. + assert_eq!(Nominators::::get(101).unwrap().targets, vec![11, 21]); + + assert_eq!( + staking_events_since_last_call(), + vec![ + Event::StakersElected, + Event::EraPaid { + era_index: 0, + validator_payout: 11075, + remainder: 33225 + }, + Event::SlashReported { + validator: 11, + fraction: Perbill::from_percent(0), + slash_era: 1 + }, + Event::SlashReported { + validator: 21, + fraction: Perbill::from_percent(25), + slash_era: 1 + }, + Event::Slashed { + staker: 21, + amount: 250 + }, + Event::Slashed { + staker: 101, + amount: 94 + } + ] + ); + + assert!(matches!( + session_events().as_slice(), + &[ + .., + SessionEvent::ValidatorDisabled { validator: 11 }, + SessionEvent::ValidatorDisabled { validator: 21 }, + ] + )); + + // the offence for validator 11 wasn't slashable but it is disabled + assert!(is_disabled(11)); + // validator 21 gets disabled too + assert!(is_disabled(21)); + }); } #[test] - fn re_validate_does_not_change_counters_or_list() { - ExtBuilder::default().nominate(false).build_and_execute(|| { - // given - let pre_insert_voter_count = - (Nominators::::count() + Validators::::count()) as u32; - assert_eq!(::VoterList::count(), pre_insert_voter_count); + fn slashing_independent_of_disabling_validator() { + ExtBuilder::default() + .validator_count(5) + .set_status(41, StakerStatus::Validator) + .set_status(51, StakerStatus::Validator) + .build_and_execute(|| { + mock::start_active_era(1); + assert_eq_uvec!(Session::validators(), vec![11, 21, 31, 41, 51]); - // Polymesh change - // ----------------------------------------------------------------- - // UseNominatorsAndValidatorsMap does not provide nominators is sorted order - // assert_eq!( - // ::VoterList::iter().collect::>(), - // vec![11, 21, 31] - // ); - // ----------------------------------------------------------------- + let now = ActiveEra::::get().unwrap().index; - // when account 11 re-validates - assert_ok!(Staking::validate( - RuntimeOrigin::signed(11), - Default::default() - )); + // --- Disable without a slash --- + // offence with no slash associated + on_offence_in_era(&[offence_from(11, None)], &[Perbill::zero()], now); - // then counts don't change - assert_eq!(::VoterList::count(), pre_insert_voter_count); - // Polymesh change - // ----------------------------------------------------------------- - // UseNominatorsAndValidatorsMap does not provide nominators is sorted order - // assert_eq!( - // ::VoterList::iter().collect::>(), - // vec![11, 21, 31] - // ); - // ----------------------------------------------------------------- - }); + // nomination remains untouched. + assert_eq!(Nominators::::get(101).unwrap().targets, vec![11, 21]); + + // first validator is disabled + assert!(is_disabled(11)); + + // --- Slash without disabling (because limit reached) --- + // offence that slashes 50% of the bond (setup for next slash) + on_offence_in_era(&[offence_from(11, None)], &[Perbill::from_percent(50)], now); + + // offence that slashes 25% of the bond but does not disable + on_offence_in_era(&[offence_from(21, None)], &[Perbill::from_percent(25)], now); + + // nomination remains untouched. + assert_eq!(Nominators::::get(101).unwrap().targets, vec![11, 21]); + + // second validator is slashed but not disabled + assert!(!is_disabled(21)); + assert!(is_disabled(11)); + + assert_eq!( + staking_events_since_last_call(), + vec![ + Event::StakersElected, + Event::EraPaid { + era_index: 0, + validator_payout: 11075, + remainder: 33225 + }, + Event::SlashReported { + validator: 11, + fraction: Perbill::from_percent(0), + slash_era: 1 + }, + Event::SlashReported { + validator: 11, + fraction: Perbill::from_percent(50), + slash_era: 1 + }, + Event::Slashed { + staker: 11, + amount: 500 + }, + Event::Slashed { + staker: 101, + amount: 62 + }, + Event::SlashReported { + validator: 21, + fraction: Perbill::from_percent(25), + slash_era: 1 + }, + Event::Slashed { + staker: 21, + amount: 250 + }, + Event::Slashed { + staker: 101, + amount: 94 + } + ] + ); + + assert_eq!( + session_events(), + vec![ + SessionEvent::NewSession { session_index: 1 }, + SessionEvent::NewSession { session_index: 2 }, + SessionEvent::NewSession { session_index: 3 }, + SessionEvent::ValidatorDisabled { validator: 11 } + ] + ); + }); } -} -#[test] -fn force_apply_min_commission_works() { - let prefs = |c| ValidatorPrefs { - commission: Perbill::from_percent(c), - blocked: false, - }; - let validators = || Validators::::iter().collect::>(); - ExtBuilder::default().build_and_execute(|| { - assert_ok!(Staking::validate(RuntimeOrigin::signed(31), prefs(10))); - assert_ok!(Staking::validate(RuntimeOrigin::signed(21), prefs(5))); + #[test] + fn offence_threshold_doesnt_force_new_era() { + ExtBuilder::default() + .validator_count(4) + .set_status(41, StakerStatus::Validator) + .build_and_execute(|| { + mock::start_active_era(1); + assert_eq_uvec!(Session::validators(), vec![11, 21, 31, 41]); - // Given - assert_eq!( - validators(), - vec![(31, prefs(10)), (21, prefs(5)), (11, prefs(0))] - ); - MinCommission::::set(Perbill::from_percent(5)); + assert_eq!( + UpToLimitWithReEnablingDisablingStrategy::::disable_limit( + Session::validators().len() + ), + 1 + ); - // When applying to a commission greater than min - assert_ok!(Staking::force_apply_min_commission( - RuntimeOrigin::signed(1), - 31 - )); - // Then the commission is not changed - assert_eq!( - validators(), - vec![(31, prefs(10)), (21, prefs(5)), (11, prefs(0))] - ); + // we have 4 validators and an offending validator threshold of 1, + // even if two validators commit an offence a new era should not be forced + on_offence_now(&[offence_from(11, None)], &[Perbill::from_percent(50)]); - // When applying to a commission that is equal to min - assert_ok!(Staking::force_apply_min_commission( - RuntimeOrigin::signed(1), - 21 - )); - // Then the commission is not changed - assert_eq!( - validators(), - vec![(31, prefs(10)), (21, prefs(5)), (11, prefs(0))] - ); + // 11 should be disabled because the byzantine threshold is 1 + assert!(is_disabled(11)); - // When applying to a commission that is less than the min - assert_ok!(Staking::force_apply_min_commission( - RuntimeOrigin::signed(1), - 11 - )); - // Then the commission is bumped to the min - assert_eq!( - validators(), - vec![(31, prefs(10)), (21, prefs(5)), (11, prefs(5))] - ); + assert_eq!(ForceEra::::get(), Forcing::NotForcing); - // When applying commission to a validator that doesn't exist then storage is not altered - assert_noop!( - Staking::force_apply_min_commission(RuntimeOrigin::signed(1), 420), - Error::::NotStash - ); - }); -} + on_offence_now(&[offence_from(21, None)], &[Perbill::zero()]); -#[test] -fn proportional_slash_stop_slashing_if_remaining_zero() { - let c = |era, value| UnlockChunk:: { era, value }; - // Given - let mut ledger = StakingLedger:: { - stash: 123, - total: 40, - active: 20, - // we have some chunks, but they are not affected. - unlocking: bounded_vec![c(1, 10), c(2, 10)], - claimed_rewards: bounded_vec![], - }; + // 21 should not be disabled because the number of disabled validators will be above + // the byzantine threshold + assert!(!is_disabled(21)); - assert_eq!(BondingDuration::get(), 3); + assert_eq!(ForceEra::::get(), Forcing::NotForcing); - // should not slash more than the amount requested, by accidentally slashing the first chunk. - assert_eq!(ledger.slash(18, 1, 0), 18); -} + on_offence_now(&[offence_from(31, None)], &[Perbill::zero()]); -#[test] -fn proportional_ledger_slash_works() { - let c = |era, value| UnlockChunk:: { era, value }; - // Given - let mut ledger = StakingLedger:: { - stash: 123, - total: 10, - active: 10, - unlocking: bounded_vec![], - claimed_rewards: bounded_vec![], - }; - assert_eq!(BondingDuration::get(), 3); - - // When we slash a ledger with no unlocking chunks - assert_eq!(ledger.slash(5, 1, 0), 5); - // Then - assert_eq!(ledger.total, 5); - assert_eq!(ledger.active, 5); - assert_eq!(LedgerSlashPerEra::get().0, 5); - assert_eq!(LedgerSlashPerEra::get().1, Default::default()); - - // When we slash a ledger with no unlocking chunks and the slash amount is greater then the - // total - assert_eq!(ledger.slash(11, 1, 0), 5); - // Then - assert_eq!(ledger.total, 0); - assert_eq!(ledger.active, 0); - assert_eq!(LedgerSlashPerEra::get().0, 0); - assert_eq!(LedgerSlashPerEra::get().1, Default::default()); - - // Given - ledger.unlocking = bounded_vec![c(4, 10), c(5, 10)]; - ledger.total = 2 * 10; - ledger.active = 0; - // When all the chunks overlap with the slash eras - assert_eq!(ledger.slash(20, 0, 0), 20); - // Then - assert_eq!(ledger.unlocking, vec![]); - assert_eq!(ledger.total, 0); - assert_eq!(LedgerSlashPerEra::get().0, 0); - assert_eq!(LedgerSlashPerEra::get().1, BTreeMap::from([(4, 0), (5, 0)])); - - // Given - ledger.unlocking = bounded_vec![c(4, 100), c(5, 100), c(6, 100), c(7, 100)]; - ledger.total = 4 * 100; - ledger.active = 0; - // When the first 2 chunks don't overlap with the affected range of unlock eras. - assert_eq!(ledger.slash(140, 0, 3), 140); - // Then - assert_eq!( - ledger.unlocking, - vec![c(4, 100), c(5, 100), c(6, 30), c(7, 30)] - ); - assert_eq!(ledger.total, 4 * 100 - 140); - assert_eq!(LedgerSlashPerEra::get().0, 0); - assert_eq!( - LedgerSlashPerEra::get().1, - BTreeMap::from([(6, 30), (7, 30)]) - ); + // same for 31 + assert!(!is_disabled(31)); - // Given - ledger.unlocking = bounded_vec![c(4, 100), c(5, 100), c(6, 100), c(7, 100)]; - ledger.total = 4 * 100; - ledger.active = 0; - // When the first 2 chunks don't overlap with the affected range of unlock eras. - assert_eq!(ledger.slash(15, 0, 3), 15); - // Then - assert_eq!( - ledger.unlocking, - vec![c(4, 100), c(5, 100), c(6, 100 - 8), c(7, 100 - 7)] - ); - assert_eq!(ledger.total, 4 * 100 - 15); - assert_eq!(LedgerSlashPerEra::get().0, 0); - assert_eq!( - LedgerSlashPerEra::get().1, - BTreeMap::from([(6, 92), (7, 93)]) - ); + assert_eq!(ForceEra::::get(), Forcing::NotForcing); + }); + } +} - // Given - ledger.unlocking = bounded_vec![c(4, 40), c(5, 100), c(6, 10), c(7, 250)]; - ledger.active = 500; - // 900 - ledger.total = 40 + 10 + 100 + 250 + 500; - // When we have a partial slash that touches all chunks - assert_eq!(ledger.slash(900 / 2, 0, 0), 450); - // Then - assert_eq!(ledger.active, 500 / 2); - assert_eq!( - ledger.unlocking, - vec![c(4, 40 / 2), c(5, 100 / 2), c(6, 10 / 2), c(7, 250 / 2)] - ); - assert_eq!(ledger.total, 900 / 2); - assert_eq!(LedgerSlashPerEra::get().0, 500 / 2); - assert_eq!( - LedgerSlashPerEra::get().1, - BTreeMap::from([(4, 40 / 2), (5, 100 / 2), (6, 10 / 2), (7, 250 / 2)]) - ); +#[cfg(all(feature = "try-runtime", test))] +mod migration_tests { + use super::*; + use frame_support::traits::UncheckedOnRuntimeUpgrade; + use migrations::{v15, v16}; - // slash 1/4th with not chunk. - ledger.unlocking = bounded_vec![]; - ledger.active = 500; - ledger.total = 500; - // When we have a partial slash that touches all chunks - assert_eq!(ledger.slash(500 / 4, 0, 0), 500 / 4); - // Then - assert_eq!(ledger.active, 3 * 500 / 4); - assert_eq!(ledger.unlocking, vec![]); - assert_eq!(ledger.total, ledger.active); - assert_eq!(LedgerSlashPerEra::get().0, 3 * 500 / 4); - assert_eq!(LedgerSlashPerEra::get().1, Default::default()); - - // Given we have the same as above, - ledger.unlocking = bounded_vec![c(4, 40), c(5, 100), c(6, 10), c(7, 250)]; - ledger.active = 500; - ledger.total = 40 + 10 + 100 + 250 + 500; // 900 - assert_eq!(ledger.total, 900); - // When we have a higher min balance - assert_eq!( - ledger.slash( - 900 / 2, - 25, /* min balance - chunks with era 0 & 2 will be slashed to <=25, causing it to - * get swept */ - 0 - ), - 450 - ); - assert_eq!(ledger.active, 500 / 2); - // the last chunk was not slashed 50% like all the rest, because some other earlier chunks got - // dusted. - assert_eq!(ledger.unlocking, vec![c(5, 100 / 2), c(7, 150)]); - assert_eq!(ledger.total, 900 / 2); - assert_eq!(LedgerSlashPerEra::get().0, 500 / 2); - assert_eq!( - LedgerSlashPerEra::get().1, - BTreeMap::from([(4, 0), (5, 100 / 2), (6, 0), (7, 150)]) - ); + #[test] + fn migrate_v15_to_v16_with_try_runtime() { + ExtBuilder::default() + .validator_count(7) + .build_and_execute(|| { + // Initial setup: Create old `DisabledValidators` in the form of `Vec` + let old_disabled_validators = vec![1u32, 2u32]; + v15::DisabledValidators::::put(old_disabled_validators.clone()); + + // Run pre-upgrade checks + let pre_upgrade_result = + v16::VersionUncheckedMigrateV15ToV16::::pre_upgrade(); + assert!(pre_upgrade_result.is_ok()); + let pre_upgrade_state = pre_upgrade_result.unwrap(); + + // Run the migration + v16::VersionUncheckedMigrateV15ToV16::::on_runtime_upgrade(); + + // Run post-upgrade checks + let post_upgrade_result = + v16::VersionUncheckedMigrateV15ToV16::::post_upgrade(pre_upgrade_state); + assert!(post_upgrade_result.is_ok()); + }); + } +} - // Given - // slash order --------------------NA--------2----------0----------1---- - ledger.unlocking = bounded_vec![c(4, 40), c(5, 100), c(6, 10), c(7, 250)]; - ledger.active = 500; - ledger.total = 40 + 10 + 100 + 250 + 500; // 900 - assert_eq!( - ledger.slash( - 500 + 10 + 250 + 100 / 2, // active + era 6 + era 7 + era 5 / 2 - 0, - 3 /* slash era 6 first, so the affected parts are era 6, era 7 and - * ledge.active. This will cause the affected to go to zero, and then we will - * start slashing older chunks */ - ), - 500 + 250 + 10 + 100 / 2 - ); - // Then - assert_eq!(ledger.active, 0); - assert_eq!(ledger.unlocking, vec![c(4, 40), c(5, 100 / 2)]); - assert_eq!(ledger.total, 90); - assert_eq!(LedgerSlashPerEra::get().0, 0); - assert_eq!( - LedgerSlashPerEra::get().1, - BTreeMap::from([(5, 100 / 2), (6, 0), (7, 0)]) - ); +mod getters { + use crate::staking::mock::*; + use pallet_staking::*; + use sp_staking::{EraIndex, Exposure, IndividualExposure, Page, SessionIndex}; - // Given - // iteration order------------------NA---------2----------0----------1---- - ledger.unlocking = bounded_vec![c(4, 100), c(5, 100), c(6, 100), c(7, 100)]; - ledger.active = 100; - ledger.total = 5 * 100; - // When - assert_eq!( - ledger.slash( - 351, // active + era 6 + era 7 + era 5 / 2 + 1 - 50, // min balance - everything slashed below 50 will get dusted - 3 /* slash era 3+3 first, so the affected parts are era 6, era 7 and - * ledge.active. This will cause the affected to go to zero, and then we will - * start slashing older chunks */ - ), - 400 - ); - // Then - assert_eq!(ledger.active, 0); - assert_eq!(ledger.unlocking, vec![c(4, 100)]); - assert_eq!(ledger.total, 100); - assert_eq!(LedgerSlashPerEra::get().0, 0); - assert_eq!( - LedgerSlashPerEra::get().1, - BTreeMap::from([(5, 0), (6, 0), (7, 0)]) - ); + #[test] + fn get_validator_count_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let v: u32 = 12; + ValidatorCount::::put(v); - // Tests for saturating arithmetic - - // Given - let slash = u64::MAX as Balance * 2; - // The value of the other parts of ledger that will get slashed - let value = slash - (10 * 4); - - ledger.active = 10; - ledger.unlocking = bounded_vec![c(4, 10), c(5, 10), c(6, 10), c(7, value)]; - ledger.total = value + 40; - // When - let slash_amount = ledger.slash(slash, 0, 0); - assert_eq_error_rate!(slash_amount, slash, 5); - // Then - assert_eq!(ledger.active, 0); // slash of 9 - assert_eq!(ledger.unlocking, vec![]); - assert_eq!(ledger.total, 0); - assert_eq!(LedgerSlashPerEra::get().0, 0); - assert_eq!( - LedgerSlashPerEra::get().1, - BTreeMap::from([(4, 0), (5, 0), (6, 0), (7, 0)]) - ); + // when + let result = Staking::validator_count(); - // Given - use sp_runtime::PerThing as _; - let slash = u64::MAX as Balance * 2; - let value = u64::MAX as Balance * 2; - let unit = 100; - // slash * value that will saturate - assert!(slash.checked_mul(value).is_none()); - // but slash * unit won't. - assert!(slash.checked_mul(unit).is_some()); - ledger.unlocking = bounded_vec![c(4, unit), c(5, value), c(6, unit), c(7, unit)]; - //--------------------------------------note value^^^ - ledger.active = unit; - ledger.total = unit * 4 + value; - // When - assert_eq!(ledger.slash(slash, 0, 0), slash); - // Then - // The amount slashed out of `unit` - let affected_balance = value + unit * 4; - let ratio = - Perquintill::from_rational_with_rounding(slash, affected_balance, Rounding::Up).unwrap(); - // `unit` after the slash is applied - let unit_slashed = { - let unit_slash = ratio.mul_ceil(unit); - unit - unit_slash - }; - let value_slashed = { - let value_slash = ratio.mul_ceil(value); - value - value_slash - }; - assert_eq!(ledger.active, unit_slashed); - assert_eq!(ledger.unlocking, vec![c(5, value_slashed), c(7, 32)]); - assert_eq!(ledger.total, value_slashed + 32); - assert_eq!(LedgerSlashPerEra::get().0, 0); - assert_eq!( - LedgerSlashPerEra::get().1, - BTreeMap::from([(4, 0), (5, value_slashed), (6, 0), (7, 32)]) - ); -} + // then + assert_eq!(result, v); + }); + } -#[test] -fn pre_bonding_era_cannot_be_claimed() { - // Verifies initial conditions of mock - ExtBuilder::default().nominate(false).build_and_execute(|| { - let history_depth = HistoryDepth::get(); - // jump to some era above history_depth - let mut current_era = history_depth + 10; - let last_reward_era = current_era - 1; - let start_reward_era = current_era - history_depth; - - // put some money in stash=3 and controller=4. - for i in 3..5 { - let _ = Balances::make_free_balance_be(&i, 2000); - } + #[test] + fn get_minimum_validator_count_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let v: u32 = 12; + MinimumValidatorCount::::put(v); - mock::start_active_era(current_era); + // when + let result = Staking::minimum_validator_count(); - // add a new candidate for being a validator. account 3 controlled by 4. - assert_ok!(Staking::bond( - RuntimeOrigin::signed(3), - 1500, - RewardDestination::Controller - )); + // then + assert_eq!(result, v); + }); + } - let claimed_rewards: BoundedVec<_, _> = (start_reward_era..=last_reward_era) - .collect::>() - .try_into() - .unwrap(); - assert_eq!( - Staking::ledger(&3).unwrap(), - StakingLedger { - stash: 3, - total: 1500, - active: 1500, - unlocking: Default::default(), - claimed_rewards, - } - ); + #[test] + fn get_invulnerables_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let v: Vec = vec![1, 2, 3]; + Invulnerables::::put(v.clone()); - // start next era - current_era = current_era + 1; - mock::start_active_era(current_era); + // when + let result = Staking::invulnerables(); - // claiming reward for last era in which validator was active works - assert_ok!(Staking::payout_stakers( - RuntimeOrigin::signed(3), - 3, - current_era - 1 - )); + // then + assert_eq!(result, v); + }); + } - // consumed weight for all payout_stakers dispatches that fail - let err_weight = ::WeightInfo::payout_stakers_alive_staked(0); - // cannot claim rewards for an era before bonding occured as it is - // already marked as claimed. - assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(3), 3, current_era - 2), - Error::::AlreadyClaimed.with_weight(err_weight) - ); + #[test] + fn get_validators_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let account_id: mock::AccountId = 1; + let validator_prefs = ValidatorPrefs::default(); - // decoding will fail now since Staking Ledger is in corrupt state - HistoryDepth::set(history_depth - 1); - assert_eq!(Staking::ledger(&4), None); + Validators::::insert(account_id, validator_prefs.clone()); - // make sure stakers still cannot claim rewards that they are not meant to - assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(3), 3, current_era - 2), - Error::::NotController - ); + // when + let result = Staking::validators(&account_id); - // fix the corrupted state for post conditions check - HistoryDepth::set(history_depth); - }); -} + // then + assert_eq!(result, validator_prefs); + }); + } -#[test] -fn reducing_history_depth_abrupt() { - // Verifies initial conditions of mock - ExtBuilder::default().nominate(false).build_and_execute(|| { - let original_history_depth = HistoryDepth::get(); - let mut current_era = original_history_depth + 10; - let last_reward_era = current_era - 1; - let start_reward_era = current_era - original_history_depth; - - // put some money in (stash, controller)=(3,3),(5,5). - for i in 3..7 { - let _ = Balances::make_free_balance_be(&i, 2000); - } + #[test] + fn get_nominators_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let account_id: mock::AccountId = 1; + let nominations: Nominations = Nominations { + targets: Default::default(), + submitted_in: Default::default(), + suppressed: false, + }; - // start current era - mock::start_active_era(current_era); + Nominators::::insert(account_id, nominations.clone()); - // add a new candidate for being a staker. account 3 controlled by 3. - assert_ok!(Staking::bond( - RuntimeOrigin::signed(3), - 1500, - RewardDestination::Controller - )); + // when + let result = Staking::nominators(account_id); - // all previous era before the bonding action should be marked as - // claimed. - let claimed_rewards: BoundedVec<_, _> = (start_reward_era..=last_reward_era) - .collect::>() - .try_into() - .unwrap(); - assert_eq!( - Staking::ledger(&3).unwrap(), - StakingLedger { - stash: 3, - total: 1500, - active: 1500, - unlocking: Default::default(), - claimed_rewards, - } - ); + // then + assert_eq!(result, Some(nominations)); + }); + } - // next era - current_era = current_era + 1; - mock::start_active_era(current_era); + #[test] + fn get_current_era_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let era: EraIndex = 12; + CurrentEra::::put(era); - // claiming reward for last era in which validator was active works - assert_ok!(Staking::payout_stakers( - RuntimeOrigin::signed(3), - 3, - current_era - 1 - )); + // when + let result = Staking::current_era(); - // next era - current_era = current_era + 1; - mock::start_active_era(current_era); + // then + assert_eq!(result, Some(era)); + }); + } - // history_depth reduced without migration - let history_depth = original_history_depth - 1; - HistoryDepth::set(history_depth); - // claiming reward does not work anymore - assert_noop!( - Staking::payout_stakers(RuntimeOrigin::signed(3), 3, current_era - 1), - Error::::NotController - ); + #[test] + fn get_active_era_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let era = ActiveEraInfo { + index: 2, + start: None, + }; + ActiveEra::::put(era); - // new stakers can still bond - assert_ok!(Staking::bond( - RuntimeOrigin::signed(5), - 1200, - RewardDestination::Controller - )); + // when + let result: Option = Staking::active_era(); - // new staking ledgers created will be bounded by the current history depth - let last_reward_era = current_era - 1; - let start_reward_era = current_era - history_depth; - let claimed_rewards: BoundedVec<_, _> = (start_reward_era..=last_reward_era) - .collect::>() - .try_into() - .unwrap(); - assert_eq!( - Staking::ledger(&5).unwrap(), - StakingLedger { - stash: 5, - total: 1200, - active: 1200, - unlocking: Default::default(), - claimed_rewards, - } - ); + // then + if let Some(era_info) = result { + assert_eq!(era_info.index, 2); + assert_eq!(era_info.start, None); + } else { + panic!("Expected Some(era_info), got None"); + }; + }); + } - // fix the corrupted state for post conditions check - HistoryDepth::set(original_history_depth); - }); -} + #[test] + fn get_eras_start_session_index_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let era: EraIndex = 12; + let session_index: SessionIndex = 14; + ErasStartSessionIndex::::insert(era, session_index); -#[test] -fn reducing_max_unlocking_chunks_abrupt() { - // Concern is on validators only - // By Default 11, 10 are stash and ctrl and 21,20 - ExtBuilder::default().build_and_execute(|| { - // given a staker at era=10 and MaxUnlockChunks set to 2 - MaxUnlockingChunks::set(2); - start_active_era(10); - assert_ok!(Staking::bond( - RuntimeOrigin::signed(3), - 300, - RewardDestination::Staked - )); - assert!(matches!(Staking::ledger(3), Some(_))); + // when + let result = Staking::eras_start_session_index(era); - // when staker unbonds - assert_ok!(Staking::unbond(RuntimeOrigin::signed(3), 20)); + // then + assert_eq!(result, Some(session_index)); + }); + } - // then an unlocking chunk is added at `current_era + bonding_duration` - // => 10 + 3 = 13 - let expected_unlocking: BoundedVec, MaxUnlockingChunks> = - bounded_vec![UnlockChunk { - value: 20 as Balance, - era: 13 as EraIndex - }]; - assert!(matches!(Staking::ledger(3), - Some(StakingLedger { - unlocking, - .. - }) if unlocking==expected_unlocking)); + #[test] + fn get_eras_stakers_clipped_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let era: EraIndex = 12; + let account_id: mock::AccountId = 1; + let exposure: Exposure> = Exposure { + total: 1125, + own: 1000, + others: vec![IndividualExposure { + who: 101, + value: 125, + }], + }; + ErasStakersClipped::::insert(era, account_id, exposure.clone()); - // when staker unbonds at next era - start_active_era(11); - assert_ok!(Staking::unbond(RuntimeOrigin::signed(3), 50)); - // then another unlock chunk is added - let expected_unlocking: BoundedVec, MaxUnlockingChunks> = bounded_vec![ - UnlockChunk { value: 20, era: 13 }, - UnlockChunk { value: 50, era: 14 } - ]; - assert!(matches!(Staking::ledger(3), - Some(StakingLedger { - unlocking, - .. - }) if unlocking==expected_unlocking)); + // when + let result = Staking::eras_stakers_clipped(era, &account_id); - // when staker unbonds further - start_active_era(12); - // then further unbonding not possible - assert_noop!( - Staking::unbond(RuntimeOrigin::signed(3), 20), - Error::::NoMoreChunks - ); + // then + assert_eq!(result, exposure); + }); + } - // when max unlocking chunks is reduced abruptly to a low value - MaxUnlockingChunks::set(1); - // then unbond, rebond ops are blocked with ledger in corrupt state - assert_noop!( - Staking::unbond(RuntimeOrigin::signed(3), 20), - Error::::NotController - ); - assert_noop!( - Staking::rebond(RuntimeOrigin::signed(3), 100), - Error::::NotController - ); + #[test] + fn get_claimed_rewards_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let era: EraIndex = 12; + let account_id: mock::AccountId = 1; + let rewards = Vec::::new(); + ClaimedRewards::::insert(era, account_id, rewards.clone()); - // reset the ledger corruption - MaxUnlockingChunks::set(2); - }) -} + // when + let result = Staking::claimed_rewards(era, &account_id); -#[test] -fn cannot_set_unsupported_validator_count() { - ExtBuilder::default().build_and_execute(|| { - MaxWinners::set(50); - // set validator count works - assert_ok!(Staking::set_validator_count(RuntimeOrigin::root(), 30)); - assert_ok!(Staking::set_validator_count(RuntimeOrigin::root(), 50)); - // setting validator count above 100 does not work - assert_noop!( - Staking::set_validator_count(RuntimeOrigin::root(), 51), - Error::::TooManyValidators, - ); - }) -} + // then + assert_eq!(result, rewards); + }); + } -#[test] -fn increase_validator_count_errors() { - ExtBuilder::default().build_and_execute(|| { - MaxWinners::set(50); - assert_ok!(Staking::set_validator_count(RuntimeOrigin::root(), 40)); + #[test] + fn get_eras_validator_prefs_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let era: EraIndex = 12; + let account_id: mock::AccountId = 1; + let validator_prefs = ValidatorPrefs::default(); - // increase works - assert_ok!(Staking::increase_validator_count(RuntimeOrigin::root(), 6)); - assert_eq!(ValidatorCount::::get(), 46); + ErasValidatorPrefs::::insert(era, account_id, validator_prefs.clone()); - // errors - assert_noop!( - Staking::increase_validator_count(RuntimeOrigin::root(), 5), - Error::::TooManyValidators, - ); - }) -} + // when + let result = Staking::eras_validator_prefs(era, &account_id); -#[test] -fn scale_validator_count_errors() { - ExtBuilder::default().build_and_execute(|| { - MaxWinners::set(50); - assert_ok!(Staking::set_validator_count(RuntimeOrigin::root(), 20)); + // then + assert_eq!(result, validator_prefs); + }); + } - // scale value works - assert_ok!(Staking::scale_validator_count( - RuntimeOrigin::root(), - Percent::from_percent(200) - )); - assert_eq!(ValidatorCount::::get(), 40); + #[test] + fn get_eras_validator_reward_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let era: EraIndex = 12; + let balance_of = BalanceOf::::default(); - // errors - assert_noop!( - Staking::scale_validator_count(RuntimeOrigin::root(), Percent::from_percent(126)), - Error::::TooManyValidators, - ); - }) -} + ErasValidatorReward::::insert(era, balance_of); -#[test] -fn set_min_commission_works_with_admin_origin() { - ExtBuilder::default().build_and_execute(|| { - // no minimum commission set initially - assert_eq!(MinCommission::::get(), Zero::zero()); + // when + let result = Staking::eras_validator_reward(era); - // root can set min commission - assert_ok!(Staking::set_min_commission( - RuntimeOrigin::root(), - Perbill::from_percent(10) - )); + // then + assert_eq!(result, Some(balance_of)); + }); + } - assert_eq!(MinCommission::::get(), Perbill::from_percent(10)); + #[test] + fn get_eras_reward_points_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let era: EraIndex = 12; + let reward_points = EraRewardPoints:: { + total: 1, + individual: vec![(11, 1)].into_iter().collect(), + }; + ErasRewardPoints::::insert(era, reward_points); - // Non privileged origin can not set min_commission - assert_noop!( - Staking::set_min_commission(RuntimeOrigin::signed(2), Perbill::from_percent(15)), - BadOrigin - ); + // when + let result = Staking::eras_reward_points(era); - // Admin Origin can set min commission - assert_ok!(Staking::set_min_commission( - RuntimeOrigin::root(), - Perbill::from_percent(15), - )); + // then + assert_eq!(result.total, 1); + }); + } - // setting commission below min_commission fails - assert_noop!( - Staking::validate( - RuntimeOrigin::signed(11), - ValidatorPrefs { - commission: Perbill::from_percent(14), - blocked: false - } - ), - Error::::CommissionTooLow - ); + #[test] + fn get_eras_total_stake_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let era: EraIndex = 12; + let balance_of = BalanceOf::::default(); - // setting commission >= min_commission works - assert_ok!(Staking::validate( - RuntimeOrigin::signed(11), - ValidatorPrefs { - commission: Perbill::from_percent(15), - blocked: false - } - )); - }) -} + ErasTotalStake::::insert(era, balance_of); -mod staking_interface { - use frame_support::storage::with_storage_layer; - use sp_staking::StakingInterface; + // when + let result = Staking::eras_total_stake(era); - use super::*; + // then + assert_eq!(result, balance_of); + }); + } #[test] - fn force_unstake_with_slash_works() { - ExtBuilder::default().build_and_execute(|| { - // without slash - let _ = with_storage_layer::<(), _, _>(|| { - // bond an account, can unstake - assert_eq!(Staking::bonded(&11), Some(11)); - assert_ok!(::force_unstake(11)); - Err(DispatchError::from("revert")) - }); + fn get_force_era_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let forcing = Forcing::NotForcing; + ForceEra::::put(forcing); - // bond again and add a slash, still can unstake. - assert_eq!(Staking::bonded(&11), Some(11)); - add_slash(&11); - assert_ok!(::force_unstake(11)); + // when + let result = Staking::force_era(); + + // then + assert_eq!(result, forcing); }); } #[test] - fn do_withdraw_unbonded_with_wrong_slash_spans_works_as_expected() { - ExtBuilder::default().build_and_execute(|| { - on_offence_now( - &[OffenceDetails { - offender: (11, Staking::eras_stakers(active_era(), 11)), - reporters: vec![], - }], - &[Perbill::from_percent(100)], - ); + fn get_slash_reward_fraction_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let perbill = Perbill::one(); + SlashRewardFraction::::put(perbill); - assert_eq!(Staking::bonded(&11), Some(11)); + // when + let result = Staking::slash_reward_fraction(); - assert_noop!( - Staking::withdraw_unbonded(RuntimeOrigin::signed(11), 0), - Error::::IncorrectSlashingSpans - ); + // then + assert_eq!(result, perbill); + }); + } - let num_slashing_spans = Staking::slashing_spans(&11).map_or(0, |s| s.iter().count()); - assert_ok!(Staking::withdraw_unbonded( - RuntimeOrigin::signed(11), - num_slashing_spans as u32 - )); + #[test] + fn get_canceled_payout_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let balance_of = BalanceOf::::default(); + CanceledSlashPayout::::put(balance_of); + + // when + let result = Staking::canceled_payout(); + + // then + assert_eq!(result, balance_of); }); } #[test] - fn status() { - ExtBuilder::default().build_and_execute(|| { - // stash of a validator is identified as a validator - assert_eq!(Staking::status(&11).unwrap(), StakerStatus::Validator); - // .. but not the controller. - assert!(Staking::status(&10).is_err()); + fn get_slashing_spans_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let account_id: mock::AccountId = 1; + let spans = slashing::SlashingSpans::new(2); + SlashingSpans::::insert(account_id, spans); - // stash of nominator is identified as a nominator - assert_eq!( - Staking::status(&101).unwrap(), - StakerStatus::Nominator(vec![11, 21]) - ); - // .. but not the controller. - assert!(Staking::status(&100).is_err()); + // when + let result: Option = Staking::slashing_spans(&account_id); - // stash of chilled is identified as a chilled - assert_eq!(Staking::status(&41).unwrap(), StakerStatus::Idle); - // .. but not the controller. - assert!(Staking::status(&40).is_err()); + // then + // simple check so as not to add extra macros to slashing::SlashingSpans struct + assert!(result.is_some()); + }); + } - // random other account. - assert!(Staking::status(&42).is_err()); - }) + #[test] + fn get_current_planned_session_returns_value_from_storage() { + sp_io::TestExternalities::default().execute_with(|| { + // given + let session_index = SessionIndex::default(); + CurrentPlannedSession::::put(session_index); + + // when + let result = Staking::current_planned_session(); + + // then + assert_eq!(result, session_index); + }); } } -// Polymesh change -// ----------------------------------------------------------------- +mod hold_migration { + use super::*; + use frame_support::traits::fungible::Mutate; + use sp_staking::{Stake, StakingInterface}; -use chrono::Utc; + #[test] + fn ledger_update_creates_hold() { + ExtBuilder::default() + .has_stakers(true) + .build_and_execute(|| { + // GIVEN alice who is a nominator with old currency + let alice = 300; + bond_nominator(alice, 1000, vec![11]); + assert_eq!(asset::staked::(&alice), 1000); + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), 0); + // migrate alice currency to legacy locks + testing_utils::migrate_to_old_currency::(alice); + // no more holds + assert_eq!(asset::staked::(&alice), 0); + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), 1000); + assert_eq!( + ::stake(&alice), + Ok(Stake { + total: 1000, + active: 1000 + }) + ); -use crate::asset_test::set_timestamp; -use pallet_validators::types::{PermissionedIdentityPrefs, SlashingSwitch}; + // any ledger mutation should create a hold + hypothetically!({ + // give some extra balance to alice. + let _ = asset::mint_into_existing::(&alice, 100); -type PError = pallet_pips::Error; + // WHEN new fund is bonded to ledger. + assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(alice), 100)); -macro_rules! assert_absent_identity { - ($acc_id:expr) => { - assert!(PalletValidators::permissioned_identity( - mock::Identity::get_identity($acc_id).unwrap() - ) - .is_none()); - }; -} + // THEN new hold is created + assert_eq!(asset::staked::(&alice), 1000 + 100); + assert_eq!( + ::stake(&alice), + Ok(Stake { + total: 1100, + active: 1100 + }) + ); -macro_rules! assert_present_identity { - ($acc_id:expr) => { - assert!(PalletValidators::permissioned_identity( - mock::Identity::get_identity($acc_id).unwrap() - ) - .is_some()); - }; -} + // old locked balance is untouched + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), 1000); + }); + + hypothetically!({ + // WHEN new fund is unbonded from ledger. + assert_ok!(Staking::unbond(RuntimeOrigin::signed(alice), 100)); + + // THEN hold is updated. + assert_eq!(asset::staked::(&alice), 1000); + assert_eq!( + ::stake(&alice), + Ok(Stake { + total: 1000, + active: 900 + }) + ); + + // old locked balance is untouched + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), 1000); + }); + + // WHEN alice currency is migrated. + assert_ok!(Staking::migrate_currency(RuntimeOrigin::signed(1), alice)); + + // THEN hold is updated. + assert_eq!(asset::staked::(&alice), 1000); + assert_eq!( + ::stake(&alice), + Ok(Stake { + total: 1000, + active: 1000 + }) + ); + + // ensure cannot migrate again. + assert_noop!( + Staking::migrate_currency(RuntimeOrigin::signed(1), alice), + Error::::AlreadyMigrated + ); -macro_rules! assert_permissioned_identity_prefs { - ($id:expr, $i_count:expr, $r_count:expr) => { - assert_eq!( - PalletValidators::permissioned_identity($id).unwrap(), - PermissionedIdentityPrefs { - intended_count: $i_count, - running_count: $r_count - } - ); - }; -} + // locked balance is removed + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), 0); + }); + } -fn create_on_offence_now(offender: u64) { - on_offence_now( - &[OffenceDetails { - offender: ( - offender, - Staking::eras_stakers(Staking::active_era().unwrap().index, offender), - ), - reporters: vec![], - }], - &[Perbill::from_percent(10)], - ); -} + #[test] + fn migrate_removes_old_lock() { + ExtBuilder::default() + .has_stakers(true) + .build_and_execute(|| { + // GIVEN alice who is a nominator with old currency + let alice = 300; + bond_nominator(alice, 1000, vec![11]); + testing_utils::migrate_to_old_currency::(alice); + assert_eq!(asset::staked::(&alice), 0); + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), 1000); + let pre_migrate_consumer = System::consumers(&alice); + System::reset_events(); + + // WHEN alice currency is migrated. + assert_ok!(Staking::migrate_currency(RuntimeOrigin::signed(1), alice)); + + // THEN + // the extra consumer from old code is removed. + assert_eq!(System::consumers(&alice), pre_migrate_consumer - 1); + // ensure no lock + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), 0); + // ensure stake and hold are same. + assert_eq!( + ::stake(&alice), + Ok(Stake { + total: 1000, + active: 1000 + }) + ); + assert_eq!(asset::staked::(&alice), 1000); + // ensure events are emitted. + assert_eq!( + staking_events_since_last_call(), + vec![Event::CurrencyMigrated { + stash: alice, + force_withdraw: 0 + }] + ); -#[test] -fn add_nominator_without_cdd() { - ExtBuilder::default().nominate(true).build_and_execute(|| { - let alice_acc = 500; - let alice_controller_signed = RuntimeOrigin::signed(alice_acc); - let (_, _) = - make_account_with_balance(alice_acc, 1_000_000, Some(Utc::now().timestamp() as u64)); + // ensure cannot migrate again. + assert_noop!( + Staking::migrate_currency(RuntimeOrigin::signed(1), alice), + Error::::AlreadyMigrated + ); + }); + } + #[test] + fn cannot_hold_all_stake() { + // When there is not enough funds to hold all stake, part of the stake if force withdrawn. + // At end of the migration, the stake and hold should be same. + ExtBuilder::default() + .has_stakers(true) + .build_and_execute(|| { + // GIVEN alice who is a nominator with old currency. + let alice = 300; + let stake = 1000; + bond_nominator(alice, stake, vec![11]); + testing_utils::migrate_to_old_currency::(alice); + assert_eq!(asset::staked::(&alice), 0); + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), stake); + // ledger has 1000 staked. + assert_eq!( + ::stake(&alice), + Ok(Stake { + total: stake, + active: stake + }) + ); - let bob_acc = 600; - let (_, bob_did) = make_account(bob_acc); - add_trusted_cdd_provider(bob_did); + // Get rid of the extra ED to emulate all their balance including ED is staked. + assert_ok!(Balances::transfer_allow_death( + RuntimeOrigin::signed(alice), + 10, + ExistentialDeposit::get() + )); - assert_ok!(Staking::bond( - RuntimeOrigin::signed(alice_acc.clone()), - 1000, - RewardDestination::Stash - )); + let expected_force_withdraw = ExistentialDeposit::get(); - set_timestamp(Utc::now().timestamp() as u64); - assert_ok!(Staking::nominate(alice_controller_signed, vec![10, 20, 30]),); - assert!(Staking::nominators(&alice_acc).is_some()); - }); -} + // ledger mutation would fail in this case before migration because of failing hold. + assert_noop!( + Staking::unbond(RuntimeOrigin::signed(alice), 100), + Error::::NotEnoughFunds + ); -#[test] -fn add_valid_nominator_with_multiple_claims() { - ExtBuilder::default().nominate(true).build_and_execute(|| { - let alice_acc = 500; - let alice_controller_signed = RuntimeOrigin::signed(alice_acc); - let (_, _) = make_account_with_balance(alice_acc, 1_000_000, None); + // clear events + System::reset_events(); - assert_ok!(Staking::bond( - Origin::signed(alice_acc.clone()), - 1000, - RewardDestination::Stash - )); + // WHEN alice currency is migrated. + assert_ok!(Staking::migrate_currency(RuntimeOrigin::signed(1), alice)); - set_timestamp(Utc::now().timestamp() as u64); - assert_ok!(Staking::nominate(alice_controller_signed, vec![10, 20, 30]),); - assert!(!Staking::nominators(&alice_acc).is_none()); - }); -} + // THEN + let expected_hold = stake - expected_force_withdraw; + // ensure no lock + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), 0); + // ensure stake and hold are same. + assert_eq!( + ::stake(&alice), + Ok(Stake { + total: expected_hold, + active: expected_hold + }) + ); + assert_eq!(asset::staked::(&alice), expected_hold); + // ensure events are emitted. + assert_eq!( + staking_events_since_last_call(), + vec![Event::CurrencyMigrated { + stash: alice, + force_withdraw: expected_force_withdraw + }] + ); -#[test] -fn validate_nominators_with_valid_cdd() { - ExtBuilder::default() - .nominate(true) - .min_nominator_bond(0) - .build_and_execute(|| { - let alice_acc = 500; - let alice_controller_signed = RuntimeOrigin::signed(alice_acc); - let (_, _) = make_account_with_balance( - alice_acc, - 1_000_000, - Some(Utc::now().timestamp() as u64 + 500u64), - ); + // ensure cannot migrate again. + assert_noop!( + Staking::migrate_currency(RuntimeOrigin::signed(1), alice), + Error::::AlreadyMigrated + ); - let (_, claim_issuer_1_did) = make_account(600); - add_trusted_cdd_provider(claim_issuer_1_did); + // unbond works after migration. + assert_ok!(Staking::unbond(RuntimeOrigin::signed(alice), 100)); + }); + } - let eve_acc = 700; - let eve_controller_signed = Origin::signed(eve_acc); - let (_, _) = make_account_with_balance( - eve_acc, - 1_000_000, - Some(Utc::now().timestamp() as u64 + 7000u64), - ); + #[test] + fn overstaked_and_partially_unbonding() { + ExtBuilder::default() + .has_stakers(true) + .build_and_execute(|| { + // GIVEN alice who is a nominator with T::OldCurrency. + let alice = 300; + // 1000 + ED + let _ = Balances::make_free_balance_be(&alice, 1001); + let stake = 600; + let reserved_by_another_pallet = 400; + assert_ok!(Staking::bond( + RuntimeOrigin::signed(alice), + stake, + RewardDestination::Staked + )); - assert_ok!(Staking::bond( - RuntimeOrigin::signed(alice_acc.clone()), - 1000, - RewardDestination::Stash - )); - assert_ok!(Staking::bond( - Origin::signed(eve_acc), - 1000, - RewardDestination::Stash - )); + // AND Alice is partially unbonding. + assert_ok!(Staking::unbond(RuntimeOrigin::signed(alice), 300)); - set_timestamp(Utc::now().timestamp() as u64); - assert_ok!(Staking::nominate(alice_controller_signed, vec![10, 20, 30])); - assert!(!Staking::nominators(&alice_acc).is_none()); + // AND Alice has some funds reserved with another pallet. + assert_ok!(Balances::reserve(&alice, reserved_by_another_pallet)); - assert_ok!(Staking::nominate(eve_controller_signed, vec![11, 21, 31])); - assert!(!Staking::nominators(&eve_acc).is_none()); - }); -} + // convert stake to T::OldCurrency. + testing_utils::migrate_to_old_currency::(alice); + assert_eq!(asset::staked::(&alice), 0); + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), stake); -#[test] -fn should_initialize_stakers_and_validators() { - // Verifies initial conditions of mock - ExtBuilder::default().build_and_execute(|| { - assert_eq!(Staking::bonded(&11), Some(11)); // Account 11 is stashed and locked, and account 10 is the controller - assert_eq!(Staking::bonded(&21), Some(21)); // Account 21 is stashed and locked, and account 20 is the controller - assert_eq!(Staking::bonded(&500), None); // Account 1 is not a stashed + // ledger has correct amount staked. + assert_eq!( + ::stake(&alice), + Ok(Stake { + total: stake, + active: stake - 300 + }) + ); - // Account 10 controls the stash from account 11, which is 100 * balance_factor units - assert_eq!( - Staking::ledger(&11), - Some(StakingLedger { - stash: 11, - total: 1000, - active: 1000, - unlocking: Default::default(), - claimed_rewards: Default::default(), - }) - ); - // Account 20 controls the stash from account 21, which is 200 * balance_factor units - assert_eq!( - Staking::ledger(&21), - Some(StakingLedger { - stash: 21, - total: 1000, - active: 1000, - unlocking: Default::default(), - claimed_rewards: Default::default(), - }) - ); - // Account 1 does not control any stash - assert_eq!(Staking::ledger(&500), None); - }); -} + // Alice becomes overstaked by withdrawing some staked balance. + assert_ok!(Balances::transfer_allow_death( + RuntimeOrigin::signed(alice), + 10, + reserved_by_another_pallet + )); -#[test] -fn should_add_permissioned_validators() { - ExtBuilder::default().build_and_execute(|| { - let acc_10 = 10; - let acc_20 = 20; + let expected_force_withdraw = reserved_by_another_pallet; - provide_did_to_user(10); - provide_did_to_user(20); + // ledger mutation would fail in this case before migration because of failing hold. + assert_noop!( + Staking::unbond(RuntimeOrigin::signed(alice), 100), + Error::::NotEnoughFunds + ); - assert_add_permissioned_validator!(&acc_10); - assert_add_permissioned_validator!(&acc_20); - assert_present_identity!(&acc_10); - assert_present_identity!(&acc_20); - }); -} + // clear events + System::reset_events(); -#[test] -fn should_remove_permissioned_validators() { - ExtBuilder::default().build_and_execute(|| { - let acc_10 = 10; - let acc_20 = 20; - let acc_30 = 30; + // WHEN alice currency is migrated. + assert_ok!(Staking::migrate_currency(RuntimeOrigin::signed(1), alice)); - provide_did_to_user(10); - provide_did_to_user(20); - provide_did_to_user(30); + // THEN + let expected_hold = stake - expected_force_withdraw; + // ensure no lock + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), 0); + // ensure stake and hold are same. + assert_eq!( + ::stake(&alice), + // expected stake is 0 since force withdrawn (400) is taken out completely of + // active stake. + Ok(Stake { + total: expected_hold, + active: 0 + }) + ); - assert_add_permissioned_validator!(&acc_10); - assert_add_permissioned_validator!(&acc_20); + assert_eq!(asset::staked::(&alice), expected_hold); + // ensure events are emitted. + assert_eq!( + staking_events_since_last_call(), + vec![Event::CurrencyMigrated { + stash: alice, + force_withdraw: expected_force_withdraw + }] + ); - assert_ok!(PalletValidators::remove_permissioned_validator( - RuntimeOrigin::root(), - mock::Identity::get_identity(&acc_20).unwrap() - )); + // ensure cannot migrate again. + assert_noop!( + Staking::migrate_currency(RuntimeOrigin::signed(1), alice), + Error::::AlreadyMigrated + ); - assert_present_identity!(&acc_10); - assert_absent_identity!(&acc_20); - assert_absent_identity!(&acc_30); - }); -} + // unbond works after migration. + assert_ok!(Staking::unbond(RuntimeOrigin::signed(alice), 100)); + }); + } -#[test] -fn voting_for_pip_overlays_with_staking() { - use crate::staking::mock::RuntimeCall; + #[test] + fn virtual_staker_consumer_provider_dec() { + // Ensure virtual stakers consumer and provider count is decremented. + ExtBuilder::default() + .has_stakers(true) + .build_and_execute(|| { + // 200 virtual bonds + bond_virtual_nominator(200, 201, 500, vec![11, 21]); + + // previously the virtual nominator had a provider inc by the delegation system as + // well as a consumer by this pallet. + System::inc_providers(&200); + System::inc_consumers(&200).expect("has provider, can consume"); + + hypothetically!({ + // migrate 200 + assert_ok!(Staking::migrate_currency(RuntimeOrigin::signed(1), 200)); + + // ensure account does not exist in system anymore. + assert_eq!(System::consumers(&200), 0); + assert_eq!(System::providers(&200), 0); + assert!(!System::account_exists(&200)); + + // ensure cannot migrate again. + assert_noop!( + Staking::migrate_currency(RuntimeOrigin::signed(1), 200), + Error::::AlreadyMigrated + ); + }); - ExtBuilder::default().build_and_execute(|| { - System::set_block_number(1); + hypothetically!({ + // 200 has an erroneously extra provider + System::inc_providers(&200); - assert_ok!(Pips::set_min_proposal_deposit(RuntimeOrigin::root(), 0)); + // causes migration to fail. + assert_noop!( + Staking::migrate_currency(RuntimeOrigin::signed(1), 200), + Error::::BadState + ); + }); - // Initialize with 100 POLYX. - let alice_acc = 500; - let (alice_signer, _) = make_account_with_balance(alice_acc, 100, None); + // 200 is funded for more than ED by a random account. + assert_ok!(Balances::transfer_allow_death( + RuntimeOrigin::signed(999), + 200, + 10 + )); - let alice_proposal = |deposit: u128| { - let signer = Origin::signed(alice_acc); - let proposal = Box::new(RuntimeCall::Pips( - pallet_pips::Call::set_min_proposal_deposit { deposit: 0 }, - )); - Pips::propose(signer, proposal, deposit, None, None) - }; + // it has an extra provider now. + assert_eq!(System::providers(&200), 2); - // Bond all but 10. - assert_ok!(Staking::bond(alice_signer, 90, RewardDestination::Stash)); - // OK, because we're overlaying with 90 tokens already locked. - assert_ok!(alice_proposal(50)); - // OK, because we're still overlaying, but also increasing it by 10. - assert_ok!(alice_proposal(50)); - // Error, because we don't have 101 tokens to bond. - assert_noop!(alice_proposal(1), PError::InsufficientDeposit); - }); -} + // migrate 200 + assert_ok!(Staking::migrate_currency(RuntimeOrigin::signed(1), 200)); -#[test] -fn slashing_leaves_pips_untouched() { - use crate::staking::mock::RuntimeCall; - use pallet_pips::PipId; + // 1 provider is left, consumers is 0. + assert_eq!(System::providers(&200), 1); + assert_eq!(System::consumers(&200), 0); - ExtBuilder::default().build_and_execute(|| { - let acc = 11; - let propose = |deposit| { - let signer = Origin::signed(acc); - let proposal = Box::new(RuntimeCall::Pips(pallet_pips::Call::set_active_pip_limit { - limit: 0, - })); - Pips::propose(signer, proposal, deposit, None, None) - }; - let slash = |amount| { - let exposure = Exposure { - total: amount, - own: amount, - others: vec![], - }; - let details = OffenceDetails { - offender: (acc, exposure), - reporters: vec![], - }; - on_offence_now(&[details], &[Perbill::from_percent(100)]); - }; - let balance_is = |bal| { - assert_eq!(Balances::free_balance(acc), bal); - }; - let id = PipId(0); - let vote_is = |bal| { - Proposals::::get(id).unwrap(); - assert_eq!(ProposalVotes::::get(id, acc).unwrap().1, bal); - }; - let vote = |bal| Pips::vote(Origin::signed(acc), id, true, bal); + // ensure cannot migrate again. + assert_noop!( + Staking::migrate_currency(RuntimeOrigin::signed(1), 200), + Error::::AlreadyMigrated + ); + }); + } - // Ensure we start with 1000 balance. - balance_is(1000); + #[test] + fn remove_old_lock_when_stake_already_on_hold() { + // When the hold is already migrated because of interactions with the ledger, we still + // want to remove the old lock via the explicit `migrate_currency`. + ExtBuilder::default() + .has_stakers(true) + .build_and_execute(|| { + // GIVEN alice and bob who are bonded with old currency. + let alice = 300; + let bob = 301; + Balances::set_balance(&alice, 3000); + Balances::set_balance(&bob, 3000); + + mock::start_active_era(1); + let init_stake = 1000; + assert_ok!(Staking::bond( + RuntimeOrigin::signed(alice), + init_stake, + RewardDestination::Staked + )); + assert_ok!(Staking::bond( + RuntimeOrigin::signed(bob), + init_stake, + RewardDestination::Staked + )); - // Raise min deposit to 1000. - assert_ok!(Pips::set_prune_historical_pips( - RuntimeOrigin::root(), - false - )); - assert_ok!(Pips::set_min_proposal_deposit(RuntimeOrigin::root(), 1000)); + // convert hold to lock. + testing_utils::migrate_to_old_currency::(alice); + testing_utils::migrate_to_old_currency::(bob); - assert_ok!(propose(1000)); + // this returns the hold balance which is 0 because of the above migration. + assert_eq!(asset::staked::(&alice), 0); + assert_eq!(asset::staked::(&bob), 0); - // Fall below minimum deposit; still have 1000 as vote, and proposal exists. - slash(700); - balance_is(300); - vote_is(1000); - assert_ok!(vote(1000)); + // but instead of hold, the balance is locked. + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), init_stake); + assert_eq!(Balances::balance_locked(STAKING_ID, &bob), init_stake); - // Lower account balance to 1; ditto. - start_active_era(12); - slash(299); - balance_is(1); - vote_is(1000); - - // Cannot propose anything; still locked 1000 into PIPs. - assert_ok!(Pips::set_min_proposal_deposit(RuntimeOrigin::root(), 0)); - assert_noop!(propose(2), PError::InsufficientDeposit); - - // Lower vote to 1; locked decreases to 1. - assert_ok!(vote(1)); - vote_is(1); - - // Slash again, we'll have 0 in balance now, but 1 still locked. - slash(1); - vote_is(1); - assert_ok!(vote(1)); - }); -} + // ledger has 1000 staked. + assert_eq!( + ::stake(&alice), + Ok(Stake { + total: init_stake, + active: init_stake + }) + ); + assert_eq!( + ::stake(&bob), + Ok(Stake { + total: init_stake, + active: init_stake + }) + ); -#[test] -fn check_slashing_switch_for_validators_and_nominators() { - ExtBuilder::default() - .validator_count(4) - .build_and_execute(|| { - // Check the initial state of the Slashing Switch. - assert_eq!( - PalletValidators::slashing_allowed_for(), - SlashingSwitch::Validator - ); + // -- WHEN Alice interacts with ledger that updates the hold. + assert_ok!(Staking::bond_extra(RuntimeOrigin::signed(alice), 500)); - let change_slashing_allowed_for = |switch: SlashingSwitch| { - assert_ok!(PalletValidators::change_slashing_allowed_for( - RuntimeOrigin::root(), - switch - )); - assert_eq!(PalletValidators::slashing_allowed_for(), switch); - }; + // this will update the ledger and the held balance. + assert_eq!(asset::staked::(&alice), init_stake + 500); + // but the locked balance remains + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), init_stake); - change_slashing_allowed_for(SlashingSwitch::None); - change_slashing_allowed_for(SlashingSwitch::ValidatorAndNominator); - }); -} + // clear events + System::reset_events(); -#[test] -fn offence_is_blocked_when_slashing_status_is_off() { - ExtBuilder::default() - .validator_count(4) - .has_stakers(false) - .build_and_execute(|| { - assert_ok!(PalletValidators::change_slashing_allowed_for( - RuntimeOrigin::root(), - SlashingSwitch::None - )); - assert_eq!( - PalletValidators::slashing_allowed_for(), - SlashingSwitch::None - ); - let initial_balance = Balances::free_balance(10); - create_on_offence_now(10); - // No slashing happened. - assert_eq!(Balances::free_balance(10), initial_balance); - }); -} + // To remove the old locks, alice needs to migrate currency. + // AND alice currency is migrated. + assert_ok!(Staking::migrate_currency(RuntimeOrigin::signed(1), alice)); -#[test] -fn check_slashing_for_different_switches() { - ExtBuilder::default().build_and_execute(|| { - mock::start_active_era(1); + // THEN + let expected_hold = init_stake + 500; + // ensure no lock + assert_eq!(Balances::balance_locked(STAKING_ID, &alice), 0); + // ensure stake and hold are same. + assert_eq!( + ::stake(&alice), + Ok(Stake { + total: expected_hold, + active: expected_hold + }) + ); + assert_eq!(asset::staked::(&alice), expected_hold); - assert_eq!(Balances::free_balance(11), 1000); - assert_eq!(Balances::free_balance(21), 2000); + // ensure events are emitted. + assert_eq!( + staking_events_since_last_call(), + vec![Event::CurrencyMigrated { + stash: alice, + force_withdraw: 0 + }] + ); - // Switch to ValidatorAndNominator. - assert_ok!(PalletValidators::change_slashing_allowed_for( - RuntimeOrigin::root(), - SlashingSwitch::ValidatorAndNominator - )); - assert_eq!( - PalletValidators::slashing_allowed_for(), - SlashingSwitch::ValidatorAndNominator - ); + // ensure cannot migrate again. + assert_noop!( + Staking::migrate_currency(RuntimeOrigin::signed(1), alice), + Error::::AlreadyMigrated + ); - // Add nominator. - // add a new candidate for being a nominator. account 3 controlled by 4. - bond_nominator_with_expiry(3, 2000, 99999999, vec![11, 21]); + // -- WHEN Bob withdraws all stake before migration. + assert_ok!(Staking::unbond(RuntimeOrigin::signed(bob), init_stake)); - mock::start_active_era(2); + mock::start_active_era(4); + assert_ok!(Staking::withdraw_unbonded(RuntimeOrigin::signed(bob), 0)); - assert_eq!(Balances::free_balance(101), 2000); + // assert lock still exists but there is no stake. + assert_eq!(Balances::balance_locked(STAKING_ID, &bob), init_stake); + assert_eq!(asset::staked::(&bob), 0); + assert_eq!( + ::stake(&bob).unwrap_err(), + Error::::NotStash.into() + ); - create_on_offence_now(11); + // clear events + System::reset_events(); - create_on_offence_now(21); + // AND Bob wants to remove the old lock. + assert_ok!(Staking::migrate_currency(RuntimeOrigin::signed(1), bob)); - // Balance of account 11 [validator] get slashed by 10% i.e 10 % of 1000 (total staked). - assert_eq!(Balances::free_balance(11), 900); - // Balance of account 4 [nominator] get slashed by 10% i.e 10 % of 2000 (total staked). - assert_eq!(Balances::free_balance(3), 1800); - // Balance of account 21 [validator] get slashed by 10% i.e 10 % of 1000 (total staked). - assert_eq!(Balances::free_balance(21), 1900); - }) + // THEN ensure no lock + assert_eq!(Balances::balance_locked(STAKING_ID, &bob), 0); + + // And they cannot migrate again. + assert_noop!( + Staking::migrate_currency(RuntimeOrigin::signed(1), bob), + Error::::AlreadyMigrated + ); + }); + } } +// Tests for manual_slash extrinsic +// Covers the following scenarios: +// 1. Basic slashing functionality - verifies root origin slashing works correctly +// 2. Slashing with a lower percentage - should have no effect +// 3. Slashing with a higher percentage - should increase the slash amount +// 4. Slashing in non-existent eras - should fail with an error +// 5. Slashing in previous eras - should work within history depth #[test] -fn chill_from_governance() { +fn manual_slashing_works() { ExtBuilder::default() - .validator_count(8) - .minimum_validator_count(1) + .validator_count(2) .build_and_execute(|| { - // 50 stash - bond(50, 500000); - let entity_id = mock::Identity::get_identity(&50).unwrap(); - - // Add a new validator successfully. - bond_validator_with_intended_count(50, 500000, Some(2)); - assert_permissioned_identity_prefs!(entity_id, 2, 1); + // setup: Start with era 0 + start_active_era(0); + + let validator_stash = 11; + let initial_balance = Staking::slashable_balance_of(&validator_stash); + assert!( + initial_balance > 0, + "Validator must have stake to be slashed" + ); - // Add other stash and controller to the same did. - add_secondary_key(50, 60); + // scenario 1: basic slashing works + // this verifies that the manual_slash extrinsic properly slashes a validator when + // called with root origin + let current_era = CurrentEra::::get().unwrap(); + let slash_fraction_1 = Perbill::from_percent(25); - // Validate one more validator from the same entity. - // 60 stash - bond_validator(60, 500000); - assert_permissioned_identity_prefs!(entity_id, 2, 2); + // only root can call this function + assert_noop!( + Staking::manual_slash( + RuntimeOrigin::signed(10), + validator_stash, + current_era, + slash_fraction_1 + ), + BadOrigin + ); - // Removes 50 and 60 from being validators - assert_ok!(PalletValidators::chill_from_governance( + // root can slash + assert_ok!(Staking::manual_slash( RuntimeOrigin::root(), - entity_id, - vec![50, 60] + validator_stash, + current_era, + slash_fraction_1 )); - // No longer permissioned identity - assert_noop!( - PalletValidators::chill_from_governance( - RuntimeOrigin::root(), - entity_id, - vec![50, 60] - ), - ValidatorsError::::ValidatorNotFound - ); + // check if balance was slashed correctly (25%) + let balance_after_first_slash = Staking::slashable_balance_of(&validator_stash); + let expected_balance_1 = initial_balance - (initial_balance / 4); // 25% slash - // 70 stash - bond(70, 500000); - let entity_id_2 = mock::Identity::get_identity(&70).unwrap(); + assert!( + balance_after_first_slash <= expected_balance_1 + && balance_after_first_slash >= expected_balance_1 - 5, + "First slash was not applied correctly. Expected around {}, got {}", + expected_balance_1, + balance_after_first_slash + ); - // Add a new validator successfully. - bond_validator_with_intended_count(70, 500000, Some(2)); + // clear events from first slash + System::reset_events(); - // Add other stash and controller to the same did. - add_secondary_key(70, 80); + // scenario 2: slashing with a smaller fraction has no effect + // when a validator has already been slashed by a higher percentage, + // attempting to slash with a lower percentage should have no effect + let slash_fraction_2 = Perbill::from_percent(10); // Smaller than 25% + assert_ok!(Staking::manual_slash( + RuntimeOrigin::root(), + validator_stash, + current_era, + slash_fraction_2 + )); - // Check keys that aren't joined with identity gives error - assert_noop!( - PalletValidators::chill_from_governance( - RuntimeOrigin::root(), - entity_id_2, - vec![90, 95] - ), - Error::::NotStash + // balance should not change because we already slashed with a higher percentage + let balance_after_second_slash = Staking::slashable_balance_of(&validator_stash); + assert_eq!( + balance_after_first_slash, balance_after_second_slash, + "Balance changed after slashing with smaller fraction" ); - // Check key that is not GC gives error - assert_noop!( - PalletValidators::chill_from_governance( - Origin::signed(20), - entity_id_2, - vec![90, 95] - ), - BadOrigin + // verify no Slashed event since slash fraction is lower than previous + let no_slashed_events = !System::events().iter().any(|record| { + matches!( + record.event, + RuntimeEvent::Staking(Event::::Slashed { .. }) + ) + }); + assert!( + no_slashed_events, + "A Slashed event was incorrectly emitted immediately" ); - }); -} -#[test] -fn test_running_count() { - ExtBuilder::default() - .validator_count(8) - .minimum_validator_count(1) - .build_and_execute(|| { - // 50 stash - bond(50, 500000); - let entity_id = mock::Identity::get_identity(&50).unwrap(); + // clear events again + System::reset_events(); + + // scenario 3: slashing with a larger fraction works + // when a validator is slashed with a higher percentage than previous slashes, + // their stake should be further reduced to match the new larger slash percentage + let slash_fraction_3 = Perbill::from_percent(50); // Larger than 25% + assert_ok!(Staking::manual_slash( + RuntimeOrigin::root(), + validator_stash, + current_era, + slash_fraction_3 + )); - // Add a new validator successfully. - bond_validator_with_intended_count(50, 500000, Some(2)); - assert_permissioned_identity_prefs!(entity_id, 2, 1); + // check if balance was further slashed (from 75% to 50% of original) + let balance_after_third_slash = Staking::slashable_balance_of(&validator_stash); + let expected_balance_3 = initial_balance / 2; // 50% of original - // Add other stash and controller to the same did. - add_secondary_key(50, 60); + assert!( + balance_after_third_slash <= expected_balance_3 + && balance_after_third_slash >= expected_balance_3 - 5, + "Third slash was not applied correctly. Expected around {}, got {}", + expected_balance_3, + balance_after_third_slash + ); - // Validate one more validator from the same entity. - // 60 stash - bond_validator(60, 500000); - assert_permissioned_identity_prefs!(entity_id, 2, 2); + // verify a Slashed event was emitted + assert!( + System::events().iter().any(|record| { + matches!( + record.event, + RuntimeEvent::Staking(Event::::Slashed { staker, .. }) + if staker == validator_stash + ) + }), + "No Slashed event was emitted after effective slash" + ); - // Ensure that the validator's stash key can't be removed from it's identity. + // scenario 4: slashing in a non-existent era fails + // the manual_slash extrinsic should validate that the era exists within history depth assert_noop!( - mock::Identity::remove_secondary_keys(Origin::signed(50), vec![60]), - pallet_identity::Error::::AccountKeyIsBeingUsed + Staking::manual_slash( + RuntimeOrigin::root(), + validator_stash, + 999, + slash_fraction_1 + ), + Error::::InvalidEraToReward ); - // chill to remove the validator - assert_ok!(Staking::chill(Origin::signed(60))); + // move to next era + start_active_era(1); - // remove validator's stash key from it's identity - assert_ok!(mock::Identity::remove_secondary_keys( - Origin::signed(50), - vec![60] + // scenario 5: slashing in previous era still works + // as long as the era is within history depth, validators can be slashed for past eras + assert_ok!(Staking::manual_slash( + RuntimeOrigin::root(), + validator_stash, + 0, + Perbill::from_percent(75) )); - }); -} - -#[test] -fn validator_unbonding() { - ExtBuilder::default() - .validator_count(8) - .minimum_validator_count(1) - .build_and_execute(|| { - MinValidatorBond::::put(50_000); - - // Add a new validator successfully. - bond_validator_with_intended_count(50, 500_000, Some(2)); - let entity_id = mock::Identity::get_identity(&50).unwrap(); - assert_permissioned_identity_prefs!(entity_id, 2, 1); - // Check that an error is given when unbonding beyond the minimum bond threshold as a validator - assert_noop!( - Staking::unbond(Origin::signed(50), 480_000), - Error::::InsufficientBond - ); - // Check that validator can unbond once it doesn't go below the minimum bond threshold - assert_ok!(Staking::unbond(Origin::signed(50), 80_000)); - assert_ok!(Staking::unbond(Origin::signed(50), 80_000)); - assert_ok!(Staking::unbond(Origin::signed(50), 80_000)); - assert_ok!(Staking::unbond(Origin::signed(50), 80_000)); + // check balance was further reduced + let balance_after_fifth_slash = Staking::slashable_balance_of(&validator_stash); + let expected_balance_5 = initial_balance / 4; // 25% of original (75% slashed) - // Check the remaining bond amount can't all be unbond - assert_noop!( - Staking::unbond(Origin::signed(50), 180_000), - Error::::InsufficientBond + assert!( + balance_after_fifth_slash <= expected_balance_5 + && balance_after_fifth_slash >= expected_balance_5 - 5, + "Fifth slash was not applied correctly. Expected around {}, got {}", + expected_balance_5, + balance_after_fifth_slash ); - // Chill validator - assert_ok!(Staking::chill(Origin::signed(50))); - // After chilling validator checks that entity can unbond successfully - assert_ok!(Staking::unbond(Origin::signed(50), 180_000)); - }); + }) } - -// ----------------------------------------------------------------- diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index ad31c57ebd..e53a190496 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -20,7 +20,7 @@ use sp_keyring::Sr25519Keyring; use sp_runtime::curve::PiecewiseLinear; use sp_runtime::generic::Era; use sp_runtime::testing::UintAuthorityId; -use sp_runtime::traits::{BlakeTwo256, Block as BlockT, Extrinsic, IdentityLookup}; +use sp_runtime::traits::{BlakeTwo256, Block as BlockT, IdentityLookup}; use sp_runtime::traits::{NumberFor, OpaqueKeys, StaticLookup, Verify}; use sp_runtime::transaction_validity::{InvalidTransaction, TransactionPriority}; use sp_runtime::{AnySignature, Cow, KeyTypeId, Perbill, Permill}; @@ -52,7 +52,6 @@ use pallet_corporate_actions::ballot as pallet_corporate_ballot; use pallet_corporate_actions::distribution as pallet_capital_distribution; use pallet_group as group; use pallet_identity as identity; -use pallet_pips as pips; use pallet_protocol_fee as protocol_fee; use pallet_session::historical as pallet_session_historical; @@ -488,7 +487,7 @@ pub type EventTest = RuntimeEvent; type Hash = H256; type Hashing = BlakeTwo256; type Lookup = IdentityLookup; -type OffChainSignature = AnySignature; +pub(crate) type OffChainSignature = AnySignature; type AuthorityId = ::Signer; pub(crate) type Balance = u128; diff --git a/pallets/runtime/tests/src/transaction_payment_test.rs b/pallets/runtime/tests/src/transaction_payment_test.rs index 440031916b..e9e8ebe424 100644 --- a/pallets/runtime/tests/src/transaction_payment_test.rs +++ b/pallets/runtime/tests/src/transaction_payment_test.rs @@ -1,28 +1,29 @@ -use super::ext_builder::ExtBuilder; -use super::storage::{RuntimeCall, TestStorage}; use codec::Encode; -use frame_support::{ - dispatch::{DispatchClass, DispatchInfo, GetDispatchInfo, Pays, PostDispatchInfo, Weight}, - traits::Currency, - weights::WeightToFee, -}; +use frame_support::dispatch::{DispatchClass, DispatchInfo}; +use frame_support::dispatch::{GetDispatchInfo, Pays, PostDispatchInfo}; +use frame_support::traits::Currency; +use frame_support::weights::{Weight, WeightToFee}; +use sp_arithmetic::traits::One; +use sp_keyring::Sr25519Keyring; +use sp_runtime::generic::UncheckedExtrinsic; +use sp_runtime::traits::{TransactionExtension, TxBaseImplication}; +use sp_runtime::transaction_validity::TransactionSource; +use sp_runtime::transaction_validity::{InvalidTransaction, TransactionValidityError}; +use sp_runtime::{FixedPointNumber, MultiAddress}; + use pallet_balances::Call as BalancesCall; -use pallet_transaction_payment::{ - ChargeTransactionPayment, Multiplier, NextFeeMultiplier, RuntimeDispatchInfo, -}; +use pallet_transaction_payment::{ChargeTransactionPayment, Multiplier}; +use pallet_transaction_payment::{NextFeeMultiplier, RuntimeDispatchInfo, Val}; use polymesh_primitives::AccountId; use polymesh_primitives::TransactionError; -use sp_arithmetic::traits::One; -use sp_keyring::Sr25519Keyring; -use sp_runtime::{ - testing::TestXt, - traits::SignedExtension, - transaction_validity::{InvalidTransaction, TransactionValidityError}, - FixedPointNumber, MultiAddress, -}; + +use super::ext_builder::ExtBuilder; +use super::storage::{Address, RuntimeCall, TestStorage}; + +type RuntimeOrigin = ::RuntimeOrigin; fn call() -> ::RuntimeCall { - RuntimeCall::Balances(BalancesCall::transfer { + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: MultiAddress::Id(Sr25519Keyring::Alice.to_account_id()), value: 69, }) @@ -36,7 +37,7 @@ type TransactionPayment = pallet_transaction_payment::Pallet; pub fn info_from_weight(w: u64) -> DispatchInfo { // pays_fee: Pays::Yes -- class: DispatchClass::Normal DispatchInfo { - weight: Weight::from_parts(w, 0), + call_weight: Weight::from_parts(w, 0), ..Default::default() } } @@ -47,7 +48,7 @@ fn weight_to_fee(weight: Weight) -> u128 { fn operational_info_from_weight(w: u64) -> DispatchInfo { DispatchInfo { - weight: Weight::from_parts(w, 0), + call_weight: Weight::from_parts(w, 0), class: DispatchClass::Operational, ..Default::default() } @@ -78,30 +79,44 @@ fn signed_extension_transaction_payment_work() { let alice = Sr25519Keyring::Alice.to_account_id(); let len = 10; + let bob_origin = RuntimeOrigin::signed(bob.clone()); let pre = ChargeTransactionPayment::::from(0) - .pre_dispatch(&bob, &call(), &info_from_weight(5), len) + .prepare( + Val::NoCharge, + &bob_origin, + &call(), + &info_from_weight(5), + len, + ) .unwrap(); assert_eq!(Balances::free_balance(&bob), 1999969001); assert!(ChargeTransactionPayment::::post_dispatch( - Some(pre), + pre, &info_from_weight(5), - &default_post_info(), + &mut default_post_info(), len, &Ok(()) ) .is_ok()); assert_eq!(Balances::free_balance(&bob), 1999969001); + let alice_origin = RuntimeOrigin::signed(alice.clone()); let pre = ChargeTransactionPayment::::from(0 /* tipped */) - .pre_dispatch(&alice, &call(), &info_from_weight(100), len) + .prepare( + Val::NoCharge, + &alice_origin, + &call(), + &info_from_weight(100), + len, + ) .unwrap(); assert_eq!(Balances::free_balance(&alice), 999969001); assert!(ChargeTransactionPayment::::post_dispatch( - Some(pre), + pre, &info_from_weight(100), - &post_info_from_weight(50), + &mut post_info_from_weight(50), len, &Ok(()) ) @@ -121,16 +136,23 @@ fn signed_extension_transaction_payment_multiplied_refund_works() { let len = 10; TransactionPayment::put_next_fee_multiplier(Multiplier::saturating_from_rational(3, 2)); + let alice_origin = RuntimeOrigin::signed(user.clone()); let pre = ChargeTransactionPayment::::from(0 /* tipped */) - .pre_dispatch(&user, &call(), &info_from_weight(100), len) + .prepare( + Val::NoCharge, + &alice_origin, + &call(), + &info_from_weight(100), + len, + ) .unwrap(); // 5 base fee, 10 byte fee, 3/2 * 100 weight fee, 5 tip assert_eq!(Balances::free_balance(&user), 999969001); assert!(ChargeTransactionPayment::::post_dispatch( - Some(pre), + pre, &info_from_weight(100), - &post_info_from_weight(50), + &mut post_info_from_weight(50), len, &Ok(()) ) @@ -153,18 +175,28 @@ fn signed_extension_transaction_payment_is_bounded() { // Get the current weight settings. let weights = ::BlockWeights::get(); - let per_byte = - ::TransactionByteFee::get(); // Calculate maximum transaction fee. - let base_fee = weight_to_fee(weights.get(DispatchClass::Normal).base_extrinsic); - let len_fee = per_byte.saturating_mul(10); + let weight = weights.get(DispatchClass::Normal).base_extrinsic; + let base_fee = weight_to_fee(weight); + let len_fee = + ::LengthToFee::weight_to_fee( + &weight, + ) + .saturating_mul(10); let max_block_fee = weight_to_fee(weights.max_block); let max_fee = base_fee + len_fee + max_block_fee; // maximum weight possible + let bob_origin = RuntimeOrigin::signed(user.clone()); ChargeTransactionPayment::::from(0) - .pre_dispatch(&user, &call(), &info_from_weight(u64::MAX), 10) + .prepare( + Val::NoCharge, + &bob_origin, + &call(), + &info_from_weight(u64::MAX), + 10, + ) .unwrap(); // fee will be proportional to what is the actual maximum weight in the runtime. assert_eq!(Balances::free_balance(&user), (free_user - max_fee)); @@ -179,6 +211,7 @@ fn signed_extension_allows_free_transactions() { .build() .execute_with(|| { let user = Sr25519Keyring::Bob.to_account_id(); + let bob_origin = RuntimeOrigin::signed(user.clone()); // I ain't have a penny. assert_eq!(Balances::free_balance(&user), 0); @@ -186,22 +219,40 @@ fn signed_extension_allows_free_transactions() { // This is a completely free (and thus wholly insecure/DoS-ridden) transaction. let operational_transaction = DispatchInfo { - weight: Weight::from_parts(0, 0), + call_weight: Weight::from_parts(0, 0), + extension_weight: Default::default(), class: DispatchClass::Operational, pays_fee: Pays::No, }; assert!(ChargeTransactionPayment::::from(0) - .validate(&user, &call(), &operational_transaction, len) + .validate( + bob_origin.clone(), + &call(), + &operational_transaction, + len, + Default::default(), + &TxBaseImplication(()), + TransactionSource::InBlock, + ) .is_ok()); // like a InsecureFreeNormal let free_transaction = DispatchInfo { - weight: Weight::from_parts(0, 0), + call_weight: Weight::from_parts(0, 0), + extension_weight: Default::default(), class: DispatchClass::Normal, pays_fee: Pays::Yes, }; assert!(ChargeTransactionPayment::::from(0) - .validate(&user, &call(), &free_transaction, len) + .validate( + bob_origin, + &call(), + &free_transaction, + len, + Default::default(), + &TxBaseImplication(()), + TransactionSource::InBlock + ) .is_err()); }); } @@ -218,8 +269,15 @@ fn signed_ext_length_fee_is_also_updated_per_congestion() { TransactionPayment::put_next_fee_multiplier(Multiplier::saturating_from_rational(3, 2)); let len = 10; let user = Sr25519Keyring::Bob.to_account_id(); + let bob_origin = RuntimeOrigin::signed(user.clone()); assert!(ChargeTransactionPayment::::from(0) // tipped - .pre_dispatch(&user, &call(), &info_from_weight(3), len) + .prepare( + Val::NoCharge, + &bob_origin, + &call(), + &info_from_weight(3), + len + ) .is_ok()); assert_eq!(Balances::free_balance(&user), 19999969001); }) @@ -227,24 +285,28 @@ fn signed_ext_length_fee_is_also_updated_per_congestion() { #[test] fn query_info_works() { - let origin = 111111; - let extra = (); - let xt = TestXt::new(call(), Some((origin, extra))); - let info = xt.get_dispatch_info(); - let ext = xt.encode(); - let len = ext.len() as u32; ExtBuilder::default() .monied(true) .transaction_fees(5, 1, 2) .build() .execute_with(|| { + let acc = [1; 32].into(); + let key = Sr25519Keyring::from_account_id(&acc).unwrap(); + let signature = ().using_encoded(|b| key.sign(b)); + let unchecked_extrinsic = + UncheckedExtrinsic::new_signed(call(), Address::Id(acc), signature, ()); + let info = unchecked_extrinsic.get_dispatch_info(); + // all fees should be x1.5 TransactionPayment::put_next_fee_multiplier(Multiplier::saturating_from_rational(3, 2)); assert_eq!( - TransactionPayment::query_info(xt, len, None), + TransactionPayment::query_info( + unchecked_extrinsic.clone(), + unchecked_extrinsic.encode().len() as u32 + ), RuntimeDispatchInfo { - weight: info.weight, + weight: info.total_weight(), class: info.class, partial_fee: 34599 }, @@ -264,14 +326,16 @@ fn compute_fee_works_without_multiplier() { // Tip only, no fees works let dispatch_info = DispatchInfo { - weight: Weight::from_parts(0, 0), + call_weight: Weight::from_parts(0, 0), + extension_weight: Default::default(), class: DispatchClass::Operational, pays_fee: Pays::No, }; assert_eq!(TransactionPayment::compute_fee(0, &dispatch_info, 10), 10); // No tip, only base fee works let dispatch_info = DispatchInfo { - weight: Weight::from_parts(0, 0), + call_weight: Weight::from_parts(0, 0), + extension_weight: Default::default(), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -288,7 +352,8 @@ fn compute_fee_works_without_multiplier() { ); // Weight fee + base fee works let dispatch_info = DispatchInfo { - weight: Weight::from_parts(1000, 0), + call_weight: Weight::from_parts(1000, 0), + extension_weight: Default::default(), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -307,7 +372,8 @@ fn compute_fee_works_with_multiplier() { TransactionPayment::put_next_fee_multiplier(Multiplier::saturating_from_rational(3, 2)); // Base fee is unaffected by multiplier let dispatch_info = DispatchInfo { - weight: Weight::from_parts(0, 0), + call_weight: Weight::from_parts(0, 0), + extension_weight: Default::default(), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -315,7 +381,8 @@ fn compute_fee_works_with_multiplier() { // Everything works together :) let dispatch_info = DispatchInfo { - weight: Weight::from_parts(123, 0), + call_weight: Weight::from_parts(123, 0), + extension_weight: Default::default(), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -339,7 +406,8 @@ fn compute_fee_works_with_negative_multiplier() { // Base fee is unaffected by multiplier. let dispatch_info = DispatchInfo { - weight: Weight::from_parts(0, 0), + call_weight: Weight::from_parts(0, 0), + extension_weight: Default::default(), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -347,7 +415,8 @@ fn compute_fee_works_with_negative_multiplier() { // Everything works together. let dispatch_info = DispatchInfo { - weight: Weight::from_parts(123, 0), + call_weight: Weight::from_parts(123, 0), + extension_weight: Default::default(), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -368,7 +437,8 @@ fn compute_fee_does_not_overflow() { .execute_with(|| { // Overflow is handled let dispatch_info = DispatchInfo { - weight: Weight::MAX, + call_weight: Weight::MAX, + extension_weight: Default::default(), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -392,15 +462,22 @@ fn actual_weight_higher_than_max_refunds_nothing() { .execute_with(|| { let len = 10; let user = Sr25519Keyring::Alice.to_account_id(); + let alice_origin = RuntimeOrigin::signed(user.clone()); let pre = ChargeTransactionPayment::::from(0 /* tipped */) - .pre_dispatch(&user, &call(), &info_from_weight(100), len) + .prepare( + Val::NoCharge, + &alice_origin, + &call(), + &info_from_weight(100), + len, + ) .unwrap(); assert_eq!(Balances::free_balance(&user), 999969001); ChargeTransactionPayment::::post_dispatch( - Some(pre), + pre, &info_from_weight(100), - &post_info_from_weight(101), + &mut post_info_from_weight(101), len, &Ok(()), ) @@ -420,20 +497,22 @@ fn zero_transfer_on_free_transaction() { System::set_block_number(10); let len = 10; let dispatch_info = DispatchInfo { - weight: Weight::from_parts(100, 0), + call_weight: Weight::from_parts(100, 0), + extension_weight: Default::default(), pays_fee: Pays::No, class: DispatchClass::Normal, }; let user = Sr25519Keyring::Alice.to_account_id(); let bal_init = Balances::total_balance(&user); + let alice_origin = RuntimeOrigin::signed(user.clone()); let pre = ChargeTransactionPayment::::from(0) - .pre_dispatch(&user, &call(), &dispatch_info, len) + .prepare(Val::NoCharge, &alice_origin, &call(), &dispatch_info, len) .unwrap(); assert_eq!(Balances::total_balance(&user), bal_init); assert!(ChargeTransactionPayment::::post_dispatch( - Some(pre), + pre, &dispatch_info, - &default_post_info(), + &mut default_post_info(), len, &Ok(()) ) @@ -452,7 +531,7 @@ fn refund_consistent_with_actual_weight() { .build() .execute_with(|| { let info = info_from_weight(100); - let post_info = post_info_from_weight(33); + let mut post_info = post_info_from_weight(33); let alice = Sr25519Keyring::Alice.to_account_id(); let prev_balance = Balances::free_balance(&alice); let len = 10; @@ -460,14 +539,15 @@ fn refund_consistent_with_actual_weight() { TransactionPayment::put_next_fee_multiplier(Multiplier::saturating_from_rational(5, 4)); + let alice_origin = RuntimeOrigin::signed(alice.clone()); let pre = ChargeTransactionPayment::::from(tip) - .pre_dispatch(&alice, &call(), &info, len) + .prepare(Val::NoCharge, &alice_origin, &call(), &info, len) .unwrap(); ChargeTransactionPayment::::post_dispatch( - Some(pre), + pre, &info, - &post_info, + &mut post_info, len, &Ok(()), ) @@ -495,6 +575,7 @@ fn normal_tx_with_tip_ext() { let len = 10; let tip = 42; let user = Sr25519Keyring::Alice.to_account_id(); + let alice_origin = RuntimeOrigin::signed(user.clone()); let call = call(); let normal_info = info_from_weight(100); @@ -503,14 +584,14 @@ fn normal_tx_with_tip_ext() { TransactionError::ZeroTip as u8, )); let pre_err = ChargeTransactionPayment::::from(tip) - .pre_dispatch(&user, &call, &normal_info, len) + .prepare(Val::NoCharge, &alice_origin, &call, &normal_info, len) .map(|_| ()) .unwrap_err(); assert!(pre_err == expected_err); // Valid normal tx. assert!(ChargeTransactionPayment::::from(0) - .pre_dispatch(&user, &call, &normal_info, len) + .prepare(Val::NoCharge, &alice_origin, &call, &normal_info, len) .is_ok()); } @@ -531,26 +612,29 @@ fn operational_tx_with_tip_ext(cdd: AccountId, gc: AccountId) { let len = 10; let tip = 42; let user = Sr25519Keyring::Alice.to_account_id(); + let alice_origin = RuntimeOrigin::signed(user.clone()); let call = call(); let operational_info = operational_info_from_weight(100); // Valid operational tx with `tip == 0`. assert!(ChargeTransactionPayment::::from(0) - .pre_dispatch(&user, &call, &operational_info, len) + .prepare(Val::NoCharge, &alice_origin, &call, &operational_info, len) .is_ok()); // Valid operational tx with tip. Only CDD and Governance members can tip. assert!(ChargeTransactionPayment::::from(tip) - .pre_dispatch(&user, &call, &operational_info, len) + .prepare(Val::NoCharge, &alice_origin, &call, &operational_info, len) .is_err()); // Governance can tip. + let gc_origin = RuntimeOrigin::signed(gc.clone()); assert!(ChargeTransactionPayment::::from(tip) - .pre_dispatch(&gc, &call, &operational_info, len) + .prepare(Val::NoCharge, &gc_origin, &call, &operational_info, len) .is_ok()); // CDD can also tip. + let cdd_origin = RuntimeOrigin::signed(cdd.clone()); assert!(ChargeTransactionPayment::::from(tip) - .pre_dispatch(&cdd, &call, &operational_info, len) + .prepare(Val::NoCharge, &cdd_origin, &call, &operational_info, len) .is_ok()); } diff --git a/pallets/runtime/tests/src/transfer_compliance_test.rs b/pallets/runtime/tests/src/transfer_compliance_test.rs index a3d4f662e5..1a1c9e909c 100644 --- a/pallets/runtime/tests/src/transfer_compliance_test.rs +++ b/pallets/runtime/tests/src/transfer_compliance_test.rs @@ -1,21 +1,22 @@ -use super::{ - storage::{account_from, make_account, TestStorage, User}, - ExtBuilder, -}; -use frame_support::{ - assert_noop, assert_ok, - dispatch::{DispatchError, DispatchResult}, -}; -use pallet_external_agents::Event; -use pallet_statistics::AssetStats; -use polymesh_primitives::asset::AssetId; -use polymesh_primitives::{ - asset::AssetType, jurisdiction::CountryCode, statistics::*, transfer_compliance::*, AccountId, - Balance, Claim, ClaimType, IdentityId, PortfolioId, PortfolioKind, Scope, WeightMeter, -}; +use std::collections::{HashMap, HashSet}; + +use frame_support::dispatch::DispatchResult; +use frame_support::pallet_prelude::DispatchError; +use frame_support::{assert_noop, assert_ok}; use sp_arithmetic::Permill; use sp_keyring::Sr25519Keyring; -use std::collections::{HashMap, HashSet}; + +use pallet_external_agents::Event; +use pallet_statistics::AssetStats; +use polymesh_primitives::asset::{AssetId, AssetType}; +use polymesh_primitives::jurisdiction::CountryCode; +use polymesh_primitives::statistics::*; +use polymesh_primitives::transfer_compliance::*; +use polymesh_primitives::{AccountId, PortfolioKind, Scope, WeightMeter}; +use polymesh_primitives::{Balance, Claim, ClaimType, IdentityId, PortfolioId}; + +use super::storage::{account_from, make_account, TestStorage, User}; +use super::ExtBuilder; type Origin = ::RuntimeOrigin; type Identity = pallet_identity::Pallet; diff --git a/pallets/runtime/tests/src/utility_test.rs b/pallets/runtime/tests/src/utility_test.rs index e1e3a79e99..9e0074d5d4 100644 --- a/pallets/runtime/tests/src/utility_test.rs +++ b/pallets/runtime/tests/src/utility_test.rs @@ -1,43 +1,38 @@ use codec::Encode; -use frame_support::dispatch::{ - extract_actual_weight, DispatchError, DispatchErrorWithPostInfo, Dispatchable, GetDispatchInfo, - Pays, PostDispatchInfo, Weight, -}; +use frame_support::dispatch::{extract_actual_weight, DispatchErrorWithPostInfo}; +use frame_support::dispatch::{GetDispatchInfo, Pays, PostDispatchInfo}; use frame_support::error::BadOrigin; +use frame_support::pallet_prelude::DispatchError; use frame_support::traits::Contains; -use frame_support::{ - assert_err_ignore_postinfo, assert_noop, assert_ok, assert_storage_noop, storage, -}; +use frame_support::weights::Weight; +use frame_support::{assert_err_ignore_postinfo, assert_noop, assert_ok}; +use frame_support::{assert_storage_noop, storage}; use frame_system::{Call as SystemCall, EventRecord}; -use pallet_timestamp::Call as TimestampCall; +use sp_keyring::Sr25519Keyring; +use sp_runtime::traits::Dispatchable; +use sp_runtime::MultiSignature; use pallet_asset::UniqueTickerRegistration; use pallet_balances::Call as BalancesCall; use pallet_pips::{PipIdSequence, ProposalState, SnapshotResult}; use pallet_portfolio::{Call as PortfolioCall, Portfolios}; -use pallet_utility::{ - self as utility, Call as UtilityCall, Config as UtilityConfig, Event, Nonces, UniqueCall, - WeightInfo, -}; -use polymesh_primitives::{ - traits::CddAndFeeDetails, AccountId, Balance, ExtrinsicPermissions, PalletPermissions, - Permissions, PortfolioName, PortfolioNumber, SubsetRestriction, Ticker, -}; -use sp_core::sr25519::Signature; -use sp_keyring::Sr25519Keyring; +use pallet_timestamp::Call as TimestampCall; +use pallet_utility::{self as utility, Call as UtilityCall, Config as UtilityConfig}; +use pallet_utility::{Event, Nonces, UniqueCall, WeightInfo}; +use polymesh_primitives::traits::CddAndFeeDetails; +use polymesh_primitives::{AccountId, Balance, ExtrinsicPermissions}; +use polymesh_primitives::{PalletPermissions, Permissions, PortfolioName}; +use polymesh_primitives::{PortfolioNumber, SubsetRestriction, Ticker}; use super::committee_test::set_members; use super::pips_test::{assert_balance, assert_state, committee_proposal, community_proposal}; use super::storage::example::Call as ExampleCall; -use super::storage::{ - add_secondary_key, get_secondary_keys, next_block, register_keyring_account_with_balance, - EventTest, Identity, Portfolio, RuntimeCall, RuntimeOrigin, System, TestBaseCallFilter, - TestStorage, User, Utility, -}; +use super::storage::{add_secondary_key, get_secondary_keys, next_block, TestStorage, Utility}; +use super::storage::{register_keyring_account_with_balance, EventTest, Identity, User}; +use super::storage::{Portfolio, RuntimeCall, RuntimeOrigin, System, TestBaseCallFilter}; use super::{assert_event_doesnt_exist, assert_event_exists, assert_last_event, ExtBuilder}; type Error = utility::Error; - type Balances = pallet_balances::Pallet; type Pips = pallet_pips::Pallet; type Committee = pallet_committee::Pallet; @@ -54,7 +49,7 @@ fn consensus_call(call: RuntimeCall, signers: &[User]) { } fn transfer(to: AccountId, amount: Balance) -> RuntimeCall { - RuntimeCall::Balances(BalancesCall::transfer { + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: to.into(), value: amount, }) @@ -233,7 +228,7 @@ fn _relay_happy_case() { let origin = RuntimeOrigin::signed(alice); let transaction = UniqueCall::new( Nonces::::get(bob.clone()), - RuntimeCall::Balances(BalancesCall::transfer { + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: charlie.clone().into(), value: 50, }), @@ -268,17 +263,18 @@ fn _relay_unhappy_cases() { let origin = RuntimeOrigin::signed(alice); let transaction = UniqueCall::new( Nonces::::get(bob.clone()), - RuntimeCall::Balances(BalancesCall::transfer { + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: charlie.clone().into(), value: 59, }), ); + let signature = MultiSignature::Sr25519(Default::default()); assert_noop!( Utility::relay_tx( origin.clone(), bob.clone(), - Signature([0; 64]).into(), + signature.clone(), transaction.clone() ), Error::InvalidSignature @@ -288,14 +284,14 @@ fn _relay_unhappy_cases() { let transaction = UniqueCall::new( Nonces::::get(bob.clone()) + 1, - RuntimeCall::Balances(BalancesCall::transfer { + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: charlie.into(), value: 59, }), ); assert_noop!( - Utility::relay_tx(origin.clone(), bob, Signature([0; 64]).into(), transaction), + Utility::relay_tx(origin.clone(), bob, signature, transaction), Error::InvalidNonce ); } @@ -498,7 +494,7 @@ fn sub_batch_handles_weight_refund() { let info = call.get_dispatch_info(); let result = call.dispatch(charlie.origin()); assert_ok!(result); - assert_eq!(extract_actual_weight(&result, &info), info.weight); + assert_eq!(extract_actual_weight(&result, &info), info.total_weight()); // Refund weight when ok let inner_call = call_foobar(false, start_weight, Some(end_weight)); @@ -510,7 +506,7 @@ fn sub_batch_handles_weight_refund() { // Diff is refunded assert_eq!( extract_actual_weight(&result, &info), - info.weight - diff * batch_len + info.total_weight() - diff * batch_len ); // Full weight when err @@ -529,7 +525,7 @@ fn sub_batch_handles_weight_refund() { .into(), ); // No weight is refunded - assert_eq!(extract_actual_weight(&result, &info), info.weight); + assert_eq!(extract_actual_weight(&result, &info), info.total_weight()); // Refund weight when err let good_call = call_foobar(false, start_weight, Some(end_weight)); @@ -549,7 +545,7 @@ fn sub_batch_handles_weight_refund() { ); assert_eq!( extract_actual_weight(&result, &info), - info.weight - diff * batch_len + info.total_weight() - diff * batch_len ); // Partial batch completion @@ -613,7 +609,8 @@ fn sub_batch_all_revert() { DispatchErrorWithPostInfo { post_info: PostDispatchInfo { actual_weight: Some( - ::WeightInfo::batch_all(2) + info.weight * 2 + ::WeightInfo::batch_all(2) + + info.total_weight() * 2 ), pays_fee: Pays::Yes }, @@ -641,7 +638,7 @@ fn sub_batch_all_handles_weight_refund() { let info = call.get_dispatch_info(); let result = call.dispatch(charlie.origin()); assert_ok!(result); - assert_eq!(extract_actual_weight(&result, &info), info.weight); + assert_eq!(extract_actual_weight(&result, &info), info.total_weight()); // Refund weight when ok let inner_call = call_foobar(false, start_weight, Some(end_weight)); @@ -653,7 +650,7 @@ fn sub_batch_all_handles_weight_refund() { // Diff is refunded assert_eq!( extract_actual_weight(&result, &info), - info.weight - diff * batch_len + info.total_weight() - diff * batch_len ); // Full weight when err @@ -665,7 +662,7 @@ fn sub_batch_all_handles_weight_refund() { let result = call.dispatch(charlie.origin()); assert_err_ignore_postinfo!(result, "The cake is a lie."); // No weight is refunded - assert_eq!(extract_actual_weight(&result, &info), info.weight); + assert_eq!(extract_actual_weight(&result, &info), info.total_weight()); // Refund weight when err let good_call = call_foobar(false, start_weight, Some(end_weight)); @@ -678,7 +675,7 @@ fn sub_batch_all_handles_weight_refund() { assert_err_ignore_postinfo!(result, "The cake is a lie."); assert_eq!( extract_actual_weight(&result, &info), - info.weight - diff * batch_len + info.total_weight() - diff * batch_len ); // Partial batch completion @@ -720,7 +717,8 @@ fn sub_batch_all_does_not_nest() { DispatchErrorWithPostInfo { post_info: PostDispatchInfo { actual_weight: Some( - ::WeightInfo::batch_all(1) + info.weight + ::WeightInfo::batch_all(1) + + info.total_weight() ), pays_fee: Pays::Yes }, @@ -862,7 +860,7 @@ fn sub_batch_all_doesnt_work_with_inherents() { batch_all.dispatch(charlie.origin()), DispatchErrorWithPostInfo { post_info: PostDispatchInfo { - actual_weight: Some(info.weight), + actual_weight: Some(info.total_weight()), pays_fee: Pays::Yes }, error: BadOrigin.into(), @@ -990,7 +988,7 @@ fn sub_with_weight_works() { }; // Weight after is set by Root. assert_eq!( - with_weight_call.get_dispatch_info().weight, + with_weight_call.get_dispatch_info().total_weight(), Weight::from_parts(123, 456) ); assert_eq!( @@ -1012,7 +1010,8 @@ fn as_derivative() { derivative_alice_account.clone(), ); let derivative_alice_id = Identity::get_identity(&derivative_alice_account).unwrap(); - Balances::transfer(alice.origin(), derivative_alice_account.into(), 1_000_000).unwrap(); + Balances::transfer_allow_death(alice.origin(), derivative_alice_account.into(), 1_000_000) + .unwrap(); let call = RuntimeCall::Asset(pallet_asset::Call::register_unique_ticker { ticker }); assert_ok!(Utility::as_derivative(alice.origin(), 1, Box::new(call))); From 689915b32dcea681f06039349b997299370d999f Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 12 Sep 2025 18:24:05 -0300 Subject: [PATCH 74/97] Fix tests - pips committee --- pallets/pips/src/types.rs | 20 ++++++++++++++++++-- pallets/runtime/tests/src/committee_test.rs | 9 +++++---- pallets/runtime/tests/src/lib.rs | 4 ++-- primitives/src/settlement.rs | 13 ++++++++++--- 4 files changed, 35 insertions(+), 11 deletions(-) diff --git a/pallets/pips/src/types.rs b/pallets/pips/src/types.rs index da15ddbb59..13f36be390 100644 --- a/pallets/pips/src/types.rs +++ b/pallets/pips/src/types.rs @@ -56,12 +56,28 @@ impl_checked_inc!(PipId); impl PipId { /// Converts [`PipId`] into a [`TaskName`] of a PIP scheduled for execution. pub fn execution_name(&self) -> Result> { - (PIP_EXECUTION, self.0).encode().try_into() + let mut task_name: TaskName = [0; 32]; + let encoded_task = (PIP_EXECUTION, self.0).encode(); + + if encoded_task.len() >= task_name.len() { + return Err(b"Task name too long".to_vec()); + } + + task_name[..encoded_task.len()].copy_from_slice(&encoded_task[..]); + Ok(task_name) } /// Converts [`PipId`] into a [`TaskName`] of a PIP scheduled for expiry. pub fn expiry_name(&self) -> Result> { - (PIP_EXPIRY, self.0).encode().try_into() + let mut task_name: TaskName = [0; 32]; + let encoded_task = (PIP_EXPIRY, self.0).encode(); + + if encoded_task.len() >= task_name.len() { + return Err(b"Task name too long".to_vec()); + } + + task_name[..encoded_task.len()].copy_from_slice(&encoded_task[..]); + Ok(task_name) } } diff --git a/pallets/runtime/tests/src/committee_test.rs b/pallets/runtime/tests/src/committee_test.rs index a0a8fe0413..1e5180dbe0 100644 --- a/pallets/runtime/tests/src/committee_test.rs +++ b/pallets/runtime/tests/src/committee_test.rs @@ -1,16 +1,17 @@ use frame_support::pallet_prelude::DispatchError; use frame_support::{assert_noop, assert_ok, dispatch::DispatchResult}; use frame_system::{EventRecord, Phase}; +use sp_core::H256; +use sp_keyring::Sr25519Keyring; +use sp_runtime::traits::Hash; +use std::convert::TryFrom; + use pallet_committee::{self as committee, Event as CommitteeRawEvent, Members}; use pallet_committee::{PolymeshVotes, Proposals, ReleaseCoordinator, VoteThreshold, Voting}; use pallet_group as group; use pallet_identity as identity; use pallet_pips::{PipId, ProposalState, ProposalStates, SnapshotResult}; use polymesh_primitives::{IdentityId, MaybeBlock}; -use sp_core::H256; -use sp_keyring::Sr25519Keyring; -use sp_runtime::traits::Hash; -use std::convert::TryFrom; use super::ext_builder::{ExtBuilder, COOL_OFF_PERIOD}; use super::storage::{fast_forward_blocks, get_identity_id, register_keyring_account}; diff --git a/pallets/runtime/tests/src/lib.rs b/pallets/runtime/tests/src/lib.rs index 43d4c64f5b..ab8134c144 100644 --- a/pallets/runtime/tests/src/lib.rs +++ b/pallets/runtime/tests/src/lib.rs @@ -24,10 +24,10 @@ mod group_test; mod identity_test; mod multisig; mod nft; -//mod pips_test; +mod pips_test; mod portfolio; mod protocol_fee; -//mod relayer_test; +mod relayer_test; //mod settlement_pallet; //mod settlement_test; //mod signed_extra; diff --git a/primitives/src/settlement.rs b/primitives/src/settlement.rs index 4643225483..503ec3ef64 100644 --- a/primitives/src/settlement.rs +++ b/primitives/src/settlement.rs @@ -134,9 +134,16 @@ impl_checked_inc!(InstructionId); impl InstructionId { /// Converts an instruction id into [`TaskName`]. pub fn execution_name(&self) -> Result> { - (SETTLEMENT_INSTRUCTION_EXECUTION, self.0) - .encode() - .try_into() + let mut task_name: TaskName = [0; 32]; + + let encoded_task = (SETTLEMENT_INSTRUCTION_EXECUTION, self.0).encode(); + + if encoded_task.len() >= task_name.len() { + return Err(b"Task name too long".to_vec()); + } + + task_name[..encoded_task.len()].copy_from_slice(&encoded_task[..]); + Ok(task_name) } } From af96d4b0f26531b89a77fd6011f2b194daea4871 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 15 Sep 2025 19:35:10 -0300 Subject: [PATCH 75/97] Fix settlement tests; Add subsidiser to tx_payment pallet --- pallets/runtime/tests/src/lib.rs | 4 ++-- pallets/transaction-payment/src/lib.rs | 32 +++++++++++++++++++------- primitives/src/constants.rs | 2 +- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/pallets/runtime/tests/src/lib.rs b/pallets/runtime/tests/src/lib.rs index ab8134c144..535a2b8bb4 100644 --- a/pallets/runtime/tests/src/lib.rs +++ b/pallets/runtime/tests/src/lib.rs @@ -28,8 +28,8 @@ mod pips_test; mod portfolio; mod protocol_fee; mod relayer_test; -//mod settlement_pallet; -//mod settlement_test; +mod settlement_pallet; +mod settlement_test; //mod signed_extra; //mod staking; mod staking_extra_tests; diff --git a/pallets/transaction-payment/src/lib.rs b/pallets/transaction-payment/src/lib.rs index e4753743ca..e46a166882 100644 --- a/pallets/transaction-payment/src/lib.rs +++ b/pallets/transaction-payment/src/lib.rs @@ -871,10 +871,12 @@ where pub enum Val { Charge { tip: BalanceOf, - // who paid the fee + // who called the transaction who: T::AccountId, // transaction fee fee: BalanceOf, + // Polymesh Subsidiser account (who paid the fee) + subsidiser: Option, }, NoCharge, } @@ -888,6 +890,8 @@ pub enum Pre { who: T::AccountId, // imbalance resulting from withdrawing the fee imbalance: <::OnChargeTransaction as OnChargeTransaction>::LiquidityInfo, + // Polymesh Subsidiser account (who paid the fee) + subsidiser: Option, }, NoCharge { // weight initially estimated by the extension, to be refunded @@ -953,8 +957,9 @@ where let val = Val::Charge { tip, - who: subsidiser.unwrap_or(caller_acc.clone()), + who: caller_acc.clone(), fee, + subsidiser, }; Ok((valid_transaction, val, origin)) @@ -978,8 +983,9 @@ where let pre = Pre::Charge { tip, - who: subsidiser.unwrap_or(caller_acc.clone()), + who: caller_acc.clone(), imbalance, + subsidiser, }; Ok(pre) @@ -992,13 +998,14 @@ where len: usize, _result: &DispatchResult, ) -> Result<(), TransactionValidityError> { - let (tip, who, imbalance) = { + let (tip, who, imbalance, subsidiser) = { match pre { Pre::Charge { tip, who, imbalance, - } => (tip, who, imbalance), + subsidiser, + } => (tip, who, imbalance, subsidiser), Pre::NoCharge { .. } => return Ok(()), } }; @@ -1006,14 +1013,23 @@ where let actual_fee = Pallet::::compute_actual_fee(len as u32, info, post_info, tip); // Fee returned to original payer. - let payer_key = T::CddHandler::get_payer_from_context().unwrap_or(who.clone()); + let payers_key = T::CddHandler::get_payer_from_context().unwrap_or(who.clone()); + + let fee_key = { + if let Some(subsidiser_acc) = subsidiser { + T::Subsidiser::debit_subsidy(&payers_key, actual_fee.into())?; + subsidiser_acc + } else { + payers_key + } + }; T::OnChargeTransaction::correct_and_deposit_fee( - &payer_key, info, post_info, actual_fee, tip, imbalance, + &fee_key, info, post_info, actual_fee, tip, imbalance, )?; Pallet::::deposit_event(Event::::TransactionFeePaid { - who: payer_key, + who: fee_key, actual_fee, tip, }); diff --git a/primitives/src/constants.rs b/primitives/src/constants.rs index 9bf3cbed4e..cbdb37281b 100644 --- a/primitives/src/constants.rs +++ b/primitives/src/constants.rs @@ -181,6 +181,6 @@ pub const TECHNICAL_DID: IdentityId = IdentityId(*did::TECHNICAL_COMMITTEE_DID); pub const UPGRADE_DID: IdentityId = IdentityId(*did::UPGRADE_COMMITTEE_DID); /// Prefixes for scheduled actions -pub const SETTLEMENT_INSTRUCTION_EXECUTION: [u8; 27] = *b"SETTLEMENT_INSTRUCTION_EXEC"; +pub const SETTLEMENT_INSTRUCTION_EXECUTION: [u8; 20] = *b"SETTLEMENT_INST_EXEC"; pub const PIP_EXECUTION: [u8; 8] = *b"PIP_EXEC"; pub const PIP_EXPIRY: [u8; 10] = *b"PIP_EXPIRY"; From 5be6b778bceee247e79715a2f5e6f5d92ac9090e Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 15 Sep 2025 20:52:04 -0300 Subject: [PATCH 76/97] Fix relayer tests --- pallets/runtime/common/src/lib.rs | 9 +++++---- pallets/runtime/tests/src/lib.rs | 2 +- pallets/runtime/tests/src/storage.rs | 20 ++------------------ 3 files changed, 8 insertions(+), 23 deletions(-) diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index 05e27af2bc..76b2dbaf4e 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -35,7 +35,7 @@ pub use frame_support::weights::{ }; use frame_system::limits::{BlockLength, BlockWeights}; pub use sp_runtime::transaction_validity::TransactionPriority; -pub use sp_runtime::{Perbill, Percent, Permill, SaturatedConversion}; +pub use sp_runtime::{Perbill, Percent, Permill, SaturatedConversion, Saturating}; pub use impls::Author; use polymesh_primitives::constants::currency::*; @@ -198,9 +198,10 @@ impl frame_support::weights::WeightToFee for WeightToFee { fn weight_to_fee(weight: &Weight) -> Self::Balance { let weight_ref_time = weight.ref_time(); - Self::Balance::saturated_from(weight_ref_time) - .saturating_mul(PolyXBaseFee::get()) - .max(PolyXBaseFee::get()) + let fee = Perbill::from_rational(weight_ref_time, ExtrinsicBaseWeight::get().ref_time()) + * PolyXBaseFee::get(); + + Self::Balance::saturated_from(fee) } } diff --git a/pallets/runtime/tests/src/lib.rs b/pallets/runtime/tests/src/lib.rs index 535a2b8bb4..1c5ed1dd1d 100644 --- a/pallets/runtime/tests/src/lib.rs +++ b/pallets/runtime/tests/src/lib.rs @@ -30,7 +30,7 @@ mod protocol_fee; mod relayer_test; mod settlement_pallet; mod settlement_test; -//mod signed_extra; +mod signed_extra; //mod staking; mod staking_extra_tests; mod sto_test; diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index e53a190496..b57f2e1a10 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -7,11 +7,9 @@ use std::convert::From; use codec::Encode; use frame_support::traits::{Currency, Imbalance, KeyOwnerProofSystem}; use frame_support::traits::{OnInitialize, OnUnbalanced, TryCollect}; +use frame_support::weights::RuntimeDbWeight; use frame_support::weights::Weight; -use frame_support::weights::{RuntimeDbWeight, WeightToFeeCoefficient}; -use frame_support::weights::{WeightToFeeCoefficients, WeightToFeePolynomial}; use frame_support::{assert_ok, parameter_types, BoundedBTreeSet}; -use smallvec::smallvec; use sp_core::crypto::{key_types, Pair as PairTrait}; use sp_core::sr25519::Pair; use sp_core::Get; @@ -55,7 +53,7 @@ use pallet_identity as identity; use pallet_protocol_fee as protocol_fee; use pallet_session::historical as pallet_session_historical; -use super::ext_builder::{EXTRINSIC_BASE_WEIGHT, TRANSACTION_BYTE_FEE, WEIGHT_TO_FEE}; +use super::ext_builder::{EXTRINSIC_BASE_WEIGHT, TRANSACTION_BYTE_FEE}; type Runtime = TestStorage; @@ -584,20 +582,6 @@ impl CddAndFeeDetails for TestStorage { } } -pub struct WeightToFee; -impl WeightToFeePolynomial for WeightToFee { - type Balance = Balance; - - fn polynomial() -> WeightToFeeCoefficients { - smallvec![WeightToFeeCoefficient { - degree: 1, - coeff_frac: Perbill::zero(), - coeff_integer: WEIGHT_TO_FEE.with(|v| *v.borrow()), - negative: false, - }] - } -} - /// PolymeshCommittee as an instance of group impl group::Config for TestStorage { type RuntimeEvent = RuntimeEvent; From d5cea511f8e4d481f6e32059986cf4c4bfea2802 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 16 Sep 2025 13:18:59 -0300 Subject: [PATCH 77/97] Fix tx_payment tests --- pallets/runtime/common/src/lib.rs | 10 ++-- pallets/runtime/tests/src/lib.rs | 2 +- .../tests/src/transaction_payment_test.rs | 58 +++++++++++-------- pallets/transaction-payment/src/lib.rs | 2 +- 4 files changed, 40 insertions(+), 32 deletions(-) diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index 76b2dbaf4e..e24d9b8831 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -198,8 +198,10 @@ impl frame_support::weights::WeightToFee for WeightToFee { fn weight_to_fee(weight: &Weight) -> Self::Balance { let weight_ref_time = weight.ref_time(); - let fee = Perbill::from_rational(weight_ref_time, ExtrinsicBaseWeight::get().ref_time()) - * PolyXBaseFee::get(); + let fees_per_base = + weight_ref_time.saturating_div(ExtrinsicBaseWeight::get().ref_time()) as Balance; + + let fee = fees_per_base.saturating_mul(PolyXBaseFee::get()); Self::Balance::saturated_from(fee) } @@ -213,9 +215,7 @@ impl frame_support::weights::WeightToFee for LengthToFee { fn weight_to_fee(weight: &Weight) -> Self::Balance { let weight_ref_time = weight.ref_time(); - Self::Balance::saturated_from(weight_ref_time) - .saturating_mul(TransactionByteFee::get()) - .max(TransactionByteFee::get()) + Self::Balance::saturated_from(weight_ref_time).saturating_mul(TransactionByteFee::get()) } } diff --git a/pallets/runtime/tests/src/lib.rs b/pallets/runtime/tests/src/lib.rs index 1c5ed1dd1d..06abb20ae7 100644 --- a/pallets/runtime/tests/src/lib.rs +++ b/pallets/runtime/tests/src/lib.rs @@ -35,7 +35,7 @@ mod signed_extra; mod staking_extra_tests; mod sto_test; pub(crate) mod storage; -//mod transaction_payment_test; +mod transaction_payment_test; mod transfer_compliance_test; mod treasury_test; //mod utility_test; diff --git a/pallets/runtime/tests/src/transaction_payment_test.rs b/pallets/runtime/tests/src/transaction_payment_test.rs index e9e8ebe424..e80384fbe9 100644 --- a/pallets/runtime/tests/src/transaction_payment_test.rs +++ b/pallets/runtime/tests/src/transaction_payment_test.rs @@ -89,7 +89,7 @@ fn signed_extension_transaction_payment_work() { len, ) .unwrap(); - assert_eq!(Balances::free_balance(&bob), 1999969001); + assert_eq!(Balances::free_balance(&bob), 1999969000); assert!(ChargeTransactionPayment::::post_dispatch( pre, @@ -99,7 +99,7 @@ fn signed_extension_transaction_payment_work() { &Ok(()) ) .is_ok()); - assert_eq!(Balances::free_balance(&bob), 1999969001); + assert_eq!(Balances::free_balance(&bob), 1999969000); let alice_origin = RuntimeOrigin::signed(alice.clone()); let pre = ChargeTransactionPayment::::from(0 /* tipped */) @@ -111,7 +111,7 @@ fn signed_extension_transaction_payment_work() { len, ) .unwrap(); - assert_eq!(Balances::free_balance(&alice), 999969001); + assert_eq!(Balances::free_balance(&alice), 999969000); assert!(ChargeTransactionPayment::::post_dispatch( pre, @@ -121,7 +121,7 @@ fn signed_extension_transaction_payment_work() { &Ok(()) ) .is_ok()); - assert_eq!(Balances::free_balance(&alice), 999969001); + assert_eq!(Balances::free_balance(&alice), 999969000); }); } @@ -147,7 +147,7 @@ fn signed_extension_transaction_payment_multiplied_refund_works() { ) .unwrap(); // 5 base fee, 10 byte fee, 3/2 * 100 weight fee, 5 tip - assert_eq!(Balances::free_balance(&user), 999969001); + assert_eq!(Balances::free_balance(&user), 999969000); assert!(ChargeTransactionPayment::::post_dispatch( pre, @@ -158,7 +158,7 @@ fn signed_extension_transaction_payment_multiplied_refund_works() { ) .is_ok()); // 75 (3/2 of the returned 50 units of weight) is refunded - assert_eq!(Balances::free_balance(&user), 999969001); + assert_eq!(Balances::free_balance(&user), 999969000); }); } @@ -179,11 +179,7 @@ fn signed_extension_transaction_payment_is_bounded() { // Calculate maximum transaction fee. let weight = weights.get(DispatchClass::Normal).base_extrinsic; let base_fee = weight_to_fee(weight); - let len_fee = - ::LengthToFee::weight_to_fee( - &weight, - ) - .saturating_mul(10); + let len_fee = pallet_transaction_payment::Pallet::::length_to_fee(10); let max_block_fee = weight_to_fee(weights.max_block); let max_fee = base_fee + len_fee + max_block_fee; @@ -279,7 +275,7 @@ fn signed_ext_length_fee_is_also_updated_per_congestion() { len ) .is_ok()); - assert_eq!(Balances::free_balance(&user), 19999969001); + assert_eq!(Balances::free_balance(&user), 19999969000); }) } @@ -290,7 +286,7 @@ fn query_info_works() { .transaction_fees(5, 1, 2) .build() .execute_with(|| { - let acc = [1; 32].into(); + let acc = Sr25519Keyring::Bob.to_account_id(); let key = Sr25519Keyring::from_account_id(&acc).unwrap(); let signature = ().using_encoded(|b| key.sign(b)); let unchecked_extrinsic = @@ -308,7 +304,7 @@ fn query_info_works() { RuntimeDispatchInfo { weight: info.total_weight(), class: info.class, - partial_fee: 34599 + partial_fee: 43700 }, ); }); @@ -339,16 +335,19 @@ fn compute_fee_works_without_multiplier() { class: DispatchClass::Operational, pays_fee: Pays::Yes, }; - assert_eq!(TransactionPayment::compute_fee(0, &dispatch_info, 0), 29999); + assert_eq!( + TransactionPayment::compute_fee(0, &dispatch_info, 0), + 30_000 + ); // Tip + base fee works assert_eq!( TransactionPayment::compute_fee(0, &dispatch_info, 69), - 30068 + 30069 ); // Len (byte fee) + base fee works assert_eq!( TransactionPayment::compute_fee(42, &dispatch_info, 0), - 34199 + 34200 ); // Weight fee + base fee works let dispatch_info = DispatchInfo { @@ -357,7 +356,10 @@ fn compute_fee_works_without_multiplier() { class: DispatchClass::Operational, pays_fee: Pays::Yes, }; - assert_eq!(TransactionPayment::compute_fee(0, &dispatch_info, 0), 29999); + assert_eq!( + TransactionPayment::compute_fee(0, &dispatch_info, 0), + 30_000 + ); }); } @@ -377,7 +379,10 @@ fn compute_fee_works_with_multiplier() { class: DispatchClass::Operational, pays_fee: Pays::Yes, }; - assert_eq!(TransactionPayment::compute_fee(0, &dispatch_info, 0), 29999); + assert_eq!( + TransactionPayment::compute_fee(0, &dispatch_info, 0), + 30_000 + ); // Everything works together :) let dispatch_info = DispatchInfo { @@ -389,7 +394,7 @@ fn compute_fee_works_with_multiplier() { // 123 weight, 456 length, 100 base assert_eq!( TransactionPayment::compute_fee(456, &dispatch_info, 789), - 76388, + 76389, ); }); } @@ -411,7 +416,10 @@ fn compute_fee_works_with_negative_multiplier() { class: DispatchClass::Operational, pays_fee: Pays::Yes, }; - assert_eq!(TransactionPayment::compute_fee(0, &dispatch_info, 0), 29999); + assert_eq!( + TransactionPayment::compute_fee(0, &dispatch_info, 0), + 30_000 + ); // Everything works together. let dispatch_info = DispatchInfo { @@ -423,7 +431,7 @@ fn compute_fee_works_with_negative_multiplier() { // 123 weight, 456 length, 100 base assert_eq!( TransactionPayment::compute_fee(456, &dispatch_info, 789), - 76388, + 76389, ); }); } @@ -472,7 +480,7 @@ fn actual_weight_higher_than_max_refunds_nothing() { len, ) .unwrap(); - assert_eq!(Balances::free_balance(&user), 999969001); + assert_eq!(Balances::free_balance(&user), 999969000); ChargeTransactionPayment::::post_dispatch( pre, @@ -482,7 +490,7 @@ fn actual_weight_higher_than_max_refunds_nothing() { &Ok(()), ) .unwrap(); - assert_eq!(Balances::free_balance(&user), 999969001); + assert_eq!(Balances::free_balance(&user), 999969000); }); } @@ -558,7 +566,7 @@ fn refund_consistent_with_actual_weight() { TransactionPayment::compute_actual_fee(len as u32, &info, &post_info, tip); // 33 weight, 10 length, 7 base, 5 tip - assert_eq!(actual_fee, 30999); + assert_eq!(actual_fee, 31_000); assert_eq!(refund_based_fee, actual_fee); }); } diff --git a/pallets/transaction-payment/src/lib.rs b/pallets/transaction-payment/src/lib.rs index e46a166882..7c40acbd42 100644 --- a/pallets/transaction-payment/src/lib.rs +++ b/pallets/transaction-payment/src/lib.rs @@ -853,7 +853,7 @@ where return Ok(self.0); } - if Self::is_gc_or_cdd_member(who) { + if info.class == DispatchClass::Operational && Self::is_gc_or_cdd_member(who) { return Ok(self.0); } From 94b3a42e5a4506ce6378d4417e536818bf6f7a76 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 16 Sep 2025 17:35:55 -0300 Subject: [PATCH 78/97] Fix Utility tests --- pallets/runtime/common/src/runtime.rs | 15 +++++++++------ pallets/runtime/develop/Cargo.toml | 2 +- pallets/runtime/mainnet/Cargo.toml | 1 + pallets/runtime/testnet/Cargo.toml | 1 + pallets/runtime/tests/Cargo.toml | 5 +++-- pallets/runtime/tests/src/lib.rs | 2 +- pallets/runtime/tests/src/storage.rs | 7 +++++-- 7 files changed, 21 insertions(+), 12 deletions(-) diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 3b6daced45..f1dd2233f5 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -39,11 +39,14 @@ macro_rules! misc_pallet_impls { ApplyExtrinsicResult, MultiSignature, }; + #[cfg(not(feature = "testing"))] + type RuntimeBaseCallFilter = frame_support::traits::Everything; + impl frame_system::Config for Runtime { /// The ubiquitous event type. type RuntimeEvent = RuntimeEvent; /// The basic call filter to use in dispatchable. - type BaseCallFilter = frame_support::traits::Everything; + type BaseCallFilter = RuntimeBaseCallFilter; /// Block & extrinsics weights: base values and limits. type BlockWeights = polymesh_runtime_common::RuntimeBlockWeights; /// The maximum length of a block (in bytes). @@ -101,11 +104,11 @@ macro_rules! misc_pallet_impls { /// The maximum number of consumers allowed on a single account. type MaxConsumers = frame_support::traits::ConstU32<16>; /// The set code logic, just the default since we're not a parachain. - type SingleBlockMigrations = (); - type MultiBlockMigrator = (); - type PreInherents = (); - type PostInherents = (); - type PostTransactions = (); + type SingleBlockMigrations = (); + type MultiBlockMigrator = (); + type PreInherents = (); + type PostInherents = (); + type PostTransactions = (); } impl pallet_base::Config for Runtime { diff --git a/pallets/runtime/develop/Cargo.toml b/pallets/runtime/develop/Cargo.toml index 4c606403df..2bcabfbc5c 100644 --- a/pallets/runtime/develop/Cargo.toml +++ b/pallets/runtime/develop/Cargo.toml @@ -70,7 +70,6 @@ sp-genesis-builder = { workspace = true, default-features = false } # pallet-authorship = { workspace = true, default-features = false } pallet-contracts = { workspace = true, default-features = false } -#pallet-contracts-primitives = { workspace = true, default-features = false } pallet-election-provider-multi-phase = { workspace = true, default-features = false } pallet-grandpa = { workspace = true, default-features = false } pallet-im-online = { workspace = true, default-features = false } @@ -106,6 +105,7 @@ polymesh-build-tool = { workspace = true, default-features = false } [features] default = ["std", "equalize"] +testing = [] disable_fees = ["pallet-transaction-payment/disable_fees"] equalize = [] diff --git a/pallets/runtime/mainnet/Cargo.toml b/pallets/runtime/mainnet/Cargo.toml index 6b94a1965d..a42efeddff 100644 --- a/pallets/runtime/mainnet/Cargo.toml +++ b/pallets/runtime/mainnet/Cargo.toml @@ -102,6 +102,7 @@ polymesh-build-tool = { workspace = true, default-features = false } default = ["std", "equalize"] disable_fees = ["pallet-transaction-payment/disable_fees"] equalize = [] +testing = [] # Backends u64_backend = ["polymesh-primitives/u64_backend"] diff --git a/pallets/runtime/testnet/Cargo.toml b/pallets/runtime/testnet/Cargo.toml index fe82fa7916..e66f5fc0e5 100644 --- a/pallets/runtime/testnet/Cargo.toml +++ b/pallets/runtime/testnet/Cargo.toml @@ -104,6 +104,7 @@ polymesh-build-tool = { workspace = true, default-features = false } default = ["std", "equalize"] disable_fees = ["pallet-transaction-payment/disable_fees"] equalize = [] +testing = [] # Backends u64_backend = ["polymesh-primitives/u64_backend"] diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index d6cf3fa1b4..d3b22011d1 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -65,7 +65,6 @@ pallet-authority-discovery = { workspace = true, default-features = false } pallet-authorship = { workspace = true, default-features = false } pallet-babe = { workspace = true, default-features = false } pallet-contracts = { workspace = true, default-features = false } -#pallet-contracts-primitives = { workspace = true, default-features = false } pallet-election-provider-multi-phase = { workspace = true, default-features = false } pallet-grandpa = { workspace = true, default-features = false } pallet-im-online = { workspace = true, default-features = false } @@ -104,7 +103,9 @@ wat = "1.0" sp-tracing = { workspace = true, default-features = false, features = ["std"] } [features] -default = ["std", "equalize"] +default = ["std", "equalize", "testing"] + +testing = ["polymesh-runtime-common/testing"] equalize = [] only-staking = [] diff --git a/pallets/runtime/tests/src/lib.rs b/pallets/runtime/tests/src/lib.rs index 06abb20ae7..46ef9459a1 100644 --- a/pallets/runtime/tests/src/lib.rs +++ b/pallets/runtime/tests/src/lib.rs @@ -38,4 +38,4 @@ pub(crate) mod storage; mod transaction_payment_test; mod transfer_compliance_test; mod treasury_test; -//mod utility_test; +mod utility_test; diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index b57f2e1a10..337f8c0799 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -134,8 +134,9 @@ pub mod example { #[pallet::call] impl Pallet { #[pallet::call_index(0)] - #[pallet::weight(*_weight)] - pub fn noop(_origin: OriginFor, _weight: Weight) -> DispatchResult { + #[pallet::weight(*weight)] + pub fn noop(_origin: OriginFor, weight: Weight) -> DispatchResult { + let _ = weight; Ok(()) } @@ -680,6 +681,7 @@ impl pallet_identity::Config for TestStorage { impl example::Config for TestStorage {} pub struct TestBaseCallFilter; + impl frame_support::traits::Contains for TestBaseCallFilter { fn contains(c: &RuntimeCall) -> bool { match *c { @@ -690,6 +692,7 @@ impl frame_support::traits::Contains for TestBaseCallFilter { } } } + type RuntimeBaseCallFilter = TestBaseCallFilter; pub struct TestSessionHandler; From aa0bbcd13ae3b8b60382e037445c2ab3419fab8f Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Wed, 17 Sep 2025 12:08:54 -0300 Subject: [PATCH 79/97] Compile staking tests --- Cargo.lock | 789 ++++++++++++---------- pallets/runtime/tests/Cargo.toml | 2 +- pallets/runtime/tests/src/lib.rs | 2 +- pallets/runtime/tests/src/staking/mock.rs | 38 +- pallets/runtime/tests/src/staking/mod.rs | 31 +- 5 files changed, 477 insertions(+), 385 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 96fec70812..e6e7d55c2f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -99,12 +99,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -634,9 +628,9 @@ dependencies = [ [[package]] name = "async-fs" -version = "2.1.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f7e37c0ed80b2a977691c47dae8625cfb21e205827106c64f7c588766b2e50" +checksum = "8034a681df4aed8b8edbd7fbe472401ecf009251c8b40556b304567052e294c5" dependencies = [ "async-lock", "blocking", @@ -645,20 +639,20 @@ dependencies = [ [[package]] name = "async-io" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" dependencies = [ - "async-lock", + "autocfg", "cfg-if", "concurrent-queue", "futures-io", "futures-lite", "parking", "polling", - "rustix 1.0.8", + "rustix 1.1.2", "slab", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -685,9 +679,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" dependencies = [ "async-channel 2.5.0", "async-io", @@ -698,14 +692,14 @@ dependencies = [ "cfg-if", "event-listener 5.4.1", "futures-lite", - "rustix 1.0.8", + "rustix 1.1.2", ] [[package]] name = "async-signal" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" dependencies = [ "async-io", "async-lock", @@ -713,10 +707,10 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.0.8", + "rustix 1.1.2", "signal-hook-registry", "slab", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -856,7 +850,7 @@ checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "binary-merkle-tree" version = "16.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "hash-db", "log", @@ -1174,11 +1168,11 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.12" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5" +checksum = "e1de8bc0aa9e9385ceb3bf0c152e3a9b9544f6c4a912c8ae504e80c1f0368603" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -1198,7 +1192,7 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.26", + "semver 1.0.27", "serde", "serde_json", "thiserror 1.0.69", @@ -1206,9 +1200,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.35" +version = "1.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" +checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" dependencies = [ "find-msvc-tools", "jobserver", @@ -1294,16 +1288,15 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-link", + "windows-link 0.2.0", ] [[package]] @@ -1443,9 +1436,9 @@ dependencies = [ [[package]] name = "comfy-table" -version = "7.2.0" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8e18d0dca9578507f13f9803add0df13362b02c501c1c17734f0dbb52eaf0b" +checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" dependencies = [ "unicode-segmentation", "unicode-width", @@ -1831,7 +1824,7 @@ dependencies = [ [[package]] name = "cumulus-client-parachain-inherent" version = "0.17.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1851,7 +1844,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" version = "0.18.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -1867,7 +1860,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.18.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1881,7 +1874,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" version = "0.12.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -1891,7 +1884,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" version = "0.23.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1910,7 +1903,7 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.19.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -1949,11 +1942,12 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.175" +version = "1.0.184" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84aa1f8258b77022835f4ce5bd3b5aa418b969494bd7c3cb142c88424eb4c715" +checksum = "be4a0beb369d20d0de6aa7084ee523e4c9a31d7d8c61ba357b119bb574d7f368" dependencies = [ "cc", + "cxx-build", "cxxbridge-cmd", "cxxbridge-flags", "cxxbridge-macro", @@ -1963,13 +1957,13 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.175" +version = "1.0.184" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e2aa0ea9f398b72f329197cfad624fcb16b2538d3ffb0f71f51cd19fa2a512" +checksum = "27d955b93e56a8e45cbc34df0ae920d8b5ad01541a4571222c78527c00e1a40a" dependencies = [ "cc", "codespan-reporting", - "indexmap 2.11.0", + "indexmap 2.11.3", "proc-macro2", "quote", "scratch", @@ -1978,13 +1972,13 @@ dependencies = [ [[package]] name = "cxxbridge-cmd" -version = "1.0.175" +version = "1.0.184" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "902e9553c7db1cc00baee88d6a531792d3e1aaab06ed6d1dcd606647891ea693" +checksum = "052f6c468d9dabdc2b8b228bcb2d7843b2bea0f3fb9c4e2c6ba5852574ec0150" dependencies = [ "clap", "codespan-reporting", - "indexmap 2.11.0", + "indexmap 2.11.3", "proc-macro2", "quote", "syn 2.0.106", @@ -1992,17 +1986,17 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.175" +version = "1.0.184" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35b2b0b4d405850b0048447786b70c2502c84e4d5c4c757416abc0500336edfc" +checksum = "0fd145fa180986cb8002c63217d03b2c782fdcd5fa323adcd1f62d2d6ece6144" [[package]] name = "cxxbridge-macro" -version = "1.0.175" +version = "1.0.184" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd2a8fe0dfa4a2207b80ca9492c0d5dc8752b66f5631d93b23065f40f6a943d3" +checksum = "02ac4a3bc4484a2daa0a8421c9588bd26522be9682a2fe02c7087bc4e8bc3c60" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.3", "proc-macro2", "quote", "rustversion", @@ -2512,7 +2506,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" dependencies = [ - "humantime 2.2.0", + "humantime 2.3.0", "is-terminal", "log", "regex", @@ -2533,12 +2527,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -2627,8 +2621,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb42427514b063d97ce21d5199f36c0c307d981434a6be32582bc79fe5bd2303" dependencies = [ "expander", - "indexmap 2.11.0", - "proc-macro-crate 3.3.0", + "indexmap 2.11.3", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -2710,9 +2704,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650" +checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" [[package]] name = "fixed-hash" @@ -2759,7 +2753,7 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "fork-tree" version = "13.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", ] @@ -2792,7 +2786,7 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" version = "40.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-support", "frame-support-procedural", @@ -2816,7 +2810,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "48.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "Inflector", "array-bytes", @@ -2890,9 +2884,9 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "16.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -2901,7 +2895,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "40.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2917,7 +2911,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "40.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "aquamarine", "frame-support", @@ -2959,7 +2953,7 @@ dependencies = [ [[package]] name = "frame-support" version = "40.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "aquamarine", "array-bytes", @@ -3000,7 +2994,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "33.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "Inflector", "cfg-expr", @@ -3020,10 +3014,10 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "13.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-support-procedural-tools-derive", - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -3032,7 +3026,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "12.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "proc-macro2", "quote", @@ -3042,7 +3036,7 @@ dependencies = [ [[package]] name = "frame-system" version = "40.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "cfg-if", "docify", @@ -3061,7 +3055,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "40.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-benchmarking", "frame-support", @@ -3075,7 +3069,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "docify", "parity-scale-codec", @@ -3085,7 +3079,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.46.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-support", "parity-scale-codec", @@ -3335,7 +3329,7 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.3+wasi-0.2.4", + "wasi 0.14.7+wasi-0.2.4", "wasm-bindgen", ] @@ -3429,7 +3423,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.11.0", + "indexmap 2.11.3", "slab", "tokio", "tokio-util", @@ -3448,7 +3442,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.11.0", + "indexmap 2.11.3", "slab", "tokio", "tokio-util", @@ -3834,9 +3828,9 @@ dependencies = [ [[package]] name = "humantime" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "hyper" @@ -3905,9 +3899,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ "bytes", "futures-channel", @@ -3926,9 +3920,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -3936,7 +3930,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.62.0", ] [[package]] @@ -4185,9 +4179,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.0" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +checksum = "92119844f513ffa41556430369ab02c295a3578af21cf945caa3e9e0c2481ac3" dependencies = [ "equivalent", "hashbrown 0.15.5", @@ -4362,7 +4356,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "319af585c4c8a6b5552a52b7787a1ab3e4d59df7614190b1f85b9b842488789d" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -4402,9 +4396,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" dependencies = [ "once_cell", "wasm-bindgen", @@ -4482,7 +4476,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e65763c942dfc9358146571911b0cd1c361c2d63e2d2305622d40d36376ca80" dependencies = [ "heck 0.5.0", - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -5078,9 +5072,9 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ "bitflags 2.9.4", "libc", @@ -5163,9 +5157,9 @@ dependencies = [ [[package]] name = "link-cplusplus" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c349c75e1ab4a03bd6b33fe6cbd3c479c5dd443e44ad732664d72cb0e755475" +checksum = "7f78c730aaa7d0b9336a299029ea49f9ee53b0ed06e9202e8cb7db9bae7b8c82" dependencies = [ "cc", ] @@ -5202,9 +5196,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "lioness" @@ -5238,7 +5232,7 @@ dependencies = [ "futures", "futures-timer", "hickory-resolver 0.25.2", - "indexmap 2.11.0", + "indexmap 2.11.3", "libc", "mockall", "multiaddr 0.17.1", @@ -5395,7 +5389,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" dependencies = [ - "rustix 1.0.8", + "rustix 1.1.2", ] [[package]] @@ -6041,10 +6035,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43dfaf083aef571385fccfdc3a2f8ede8d0a1863160455d4f2b014d8f7d04a3f" dependencies = [ "expander", - "indexmap 2.11.0", + "indexmap 2.11.3", "itertools 0.11.0", "petgraph 0.6.5", - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 1.0.109", @@ -6089,7 +6083,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion" version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6107,7 +6101,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-support", "frame-system", @@ -6122,7 +6116,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-support", "frame-system", @@ -6135,7 +6129,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6158,7 +6152,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "41.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "docify", "frame-benchmarking", @@ -6244,7 +6238,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "40.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "environmental", "frame-benchmarking", @@ -6275,7 +6269,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "23.0.3" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "proc-macro2", "quote", @@ -6285,7 +6279,7 @@ dependencies = [ [[package]] name = "pallet-contracts-uapi" version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -6327,7 +6321,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "39.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6349,7 +6343,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6383,7 +6377,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6489,7 +6483,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "39.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6508,7 +6502,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6523,7 +6517,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "28.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -6575,7 +6569,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-support", "frame-system", @@ -6659,7 +6653,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-benchmarking", "frame-support", @@ -6743,7 +6737,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "41.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "docify", "frame-benchmarking", @@ -6760,7 +6754,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "40.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-support", "frame-system", @@ -6814,7 +6808,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "40.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6836,9 +6830,9 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "12.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -6847,7 +6841,7 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" version = "26.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "sp-api", @@ -6928,7 +6922,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "docify", "frame-benchmarking", @@ -6965,7 +6959,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-benchmarking", "frame-support", @@ -7109,7 +7103,7 @@ version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -7242,9 +7236,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +checksum = "21e0a3a33733faeaf8651dfee72dd0f388f0c8e5ad496a3478fa5a922f49cfa8" dependencies = [ "memchr", "thiserror 2.0.16", @@ -7253,9 +7247,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" +checksum = "bc58706f770acb1dbd0973e6530a3cff4746fb721207feb3a8a6064cd0b6c663" dependencies = [ "pest", "pest_generator", @@ -7263,9 +7257,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" +checksum = "6d4f36811dfe07f7b8573462465d5cb8965fffc2e71ae377a33aecf14c2c9a2f" dependencies = [ "pest", "pest_meta", @@ -7276,9 +7270,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" +checksum = "42919b05089acbd0a5dcd5405fb304d17d1053847b81163d09c4ad18ce8e8420" dependencies = [ "pest", "sha2 0.10.9", @@ -7291,7 +7285,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.11.0", + "indexmap 2.11.3", ] [[package]] @@ -7301,7 +7295,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset 0.5.7", - "indexmap 2.11.0", + "indexmap 2.11.3", ] [[package]] @@ -8137,11 +8131,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit", + "toml_edit 0.23.5", ] [[package]] @@ -8578,9 +8572,9 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "11.5.0" +version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ "bitflags 2.9.4", ] @@ -8728,9 +8722,9 @@ checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "resolv-conf" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" +checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" [[package]] name = "rfc6979" @@ -8874,7 +8868,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.26", + "semver 1.0.27", ] [[package]] @@ -8902,15 +8896,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.8" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags 2.9.4", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.60.2", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.0", ] [[package]] @@ -8923,7 +8917,7 @@ dependencies = [ "once_cell", "ring 0.17.14", "rustls-pki-types", - "rustls-webpki 0.103.4", + "rustls-webpki 0.103.6", "subtle 2.6.1", "zeroize", ] @@ -8964,7 +8958,7 @@ dependencies = [ "rustls", "rustls-native-certs", "rustls-platform-verifier-android", - "rustls-webpki 0.103.4", + "rustls-webpki 0.103.6", "security-framework", "security-framework-sys", "webpki-root-certs 0.26.11", @@ -8989,9 +8983,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.4" +version = "0.103.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +checksum = "8572f3c2cb9934231157b45499fc41e1f58c589fdfb81a844ba873265e80f8eb" dependencies = [ "ring 0.17.14", "rustls-pki-types", @@ -9070,7 +9064,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "31.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "log", "sp-core", @@ -9081,7 +9075,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "futures", @@ -9109,7 +9103,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "futures", "log", @@ -9130,7 +9124,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.44.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "sp-api", @@ -9145,7 +9139,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "43.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "array-bytes", "docify", @@ -9171,9 +9165,9 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "12.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -9182,7 +9176,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.52.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "array-bytes", "chrono", @@ -9224,7 +9218,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "fnv", "futures", @@ -9250,7 +9244,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.46.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "hash-db", "kvdb", @@ -9276,7 +9270,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "futures", @@ -9299,7 +9293,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "fork-tree", @@ -9335,7 +9329,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "futures", "jsonrpsee", @@ -9357,7 +9351,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9370,7 +9364,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.35.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "ahash", "array-bytes", @@ -9414,7 +9408,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" version = "0.35.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "finality-grandpa", "futures", @@ -9434,7 +9428,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "futures", @@ -9457,7 +9451,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.42.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", @@ -9480,7 +9474,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.38.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "polkavm", "sc-allocator", @@ -9493,7 +9487,7 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" version = "0.35.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "log", "polkavm", @@ -9504,7 +9498,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.38.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "anyhow", "log", @@ -9520,7 +9514,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "console", "futures", @@ -9536,7 +9530,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "35.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "array-bytes", "parking_lot 0.12.4", @@ -9550,7 +9544,7 @@ dependencies = [ [[package]] name = "sc-mixnet" version = "0.20.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "array-bytes", "arrayvec 0.7.6", @@ -9578,7 +9572,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -9628,7 +9622,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.48.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -9638,7 +9632,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "ahash", "futures", @@ -9657,7 +9651,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -9678,7 +9672,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -9713,7 +9707,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "array-bytes", "futures", @@ -9732,7 +9726,7 @@ dependencies = [ [[package]] name = "sc-network-types" version = "0.16.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "bs58", "bytes", @@ -9751,7 +9745,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "bytes", "fnv", @@ -9785,7 +9779,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.20.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9794,7 +9788,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "futures", "jsonrpsee", @@ -9826,7 +9820,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -9846,7 +9840,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "dyn-clone", "forwarded-header-value", @@ -9870,7 +9864,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "array-bytes", "futures", @@ -9903,7 +9897,7 @@ dependencies = [ [[package]] name = "sc-runtime-utilities" version = "0.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "sc-executor", @@ -9918,7 +9912,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.51.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "directories", @@ -9982,7 +9976,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.38.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "log", "parity-scale-codec", @@ -9993,7 +9987,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10012,7 +10006,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "42.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "derive_more 0.99.20", "futures", @@ -10032,7 +10026,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "28.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "chrono", "futures", @@ -10051,7 +10045,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "chrono", "console", @@ -10079,9 +10073,9 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "11.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -10090,12 +10084,12 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "futures", "futures-timer", - "indexmap 2.11.0", + "indexmap 2.11.3", "itertools 0.11.0", "linked-hash-map", "log", @@ -10122,11 +10116,11 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "futures", - "indexmap 2.11.0", + "indexmap 2.11.3", "log", "parity-scale-codec", "serde", @@ -10139,7 +10133,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "18.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-channel 1.9.0", "futures", @@ -10211,7 +10205,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "102fbc6236de6c53906c0b262f12c7aa69c2bdc604862c12728f5f4d370bc137" dependencies = [ "darling", - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -10237,7 +10231,7 @@ version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -10288,11 +10282,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.0", ] [[package]] @@ -10446,9 +10440,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" +checksum = "60b369d18893388b345804dc0007963c99b7d665ae71d275812d828c6f089640" dependencies = [ "bitflags 2.9.4", "core-foundation 0.10.1", @@ -10459,9 +10453,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -10487,11 +10481,12 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" dependencies = [ "serde", + "serde_core", ] [[package]] @@ -10502,27 +10497,38 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" dependencies = [ + "serde_core", "serde_derive", ] [[package]] name = "serde_bytes" -version = "0.11.17" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" dependencies = [ "serde", + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.225" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" +dependencies = [ + "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.225" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" dependencies = [ "proc-macro2", "quote", @@ -10531,13 +10537,14 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.143" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "ryu", "serde", + "serde_core", ] [[package]] @@ -10634,9 +10641,9 @@ dependencies = [ [[package]] name = "simba" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" +checksum = "c99284beb21666094ba2b75bbceda012e610f5479dfcc2d6e2426f53197ffd95" dependencies = [ "approx", "num-complex", @@ -10859,7 +10866,7 @@ dependencies = [ [[package]] name = "sp-api" version = "36.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "docify", "hash-db", @@ -10881,12 +10888,12 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "22.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "Inflector", "blake2 0.10.6", "expander", - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -10895,7 +10902,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "40.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "scale-info", @@ -10907,7 +10914,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "26.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "docify", "integer-sqrt", @@ -10921,7 +10928,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "scale-info", @@ -10933,7 +10940,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "sp-api", "sp-inherents", @@ -10943,7 +10950,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "futures", "parity-scale-codec", @@ -10962,7 +10969,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.42.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "futures", @@ -10976,7 +10983,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.42.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "parity-scale-codec", @@ -10992,7 +10999,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.42.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "parity-scale-codec", @@ -11010,7 +11017,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "23.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "finality-grandpa", "log", @@ -11027,7 +11034,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.42.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "scale-info", @@ -11038,7 +11045,7 @@ dependencies = [ [[package]] name = "sp-core" version = "36.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "ark-vrf", "array-bytes", @@ -11099,7 +11106,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "blake2b_simd", "byteorder", @@ -11112,7 +11119,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "quote", "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", @@ -11122,7 +11129,7 @@ dependencies = [ [[package]] name = "sp-database" version = "10.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "kvdb", "parking_lot 0.12.4", @@ -11131,7 +11138,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "proc-macro2", "quote", @@ -11141,7 +11148,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.30.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "environmental", "parity-scale-codec", @@ -11151,7 +11158,7 @@ dependencies = [ [[package]] name = "sp-genesis-builder" version = "0.17.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "scale-info", @@ -11163,7 +11170,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11176,7 +11183,7 @@ dependencies = [ [[package]] name = "sp-io" version = "40.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "bytes", "docify", @@ -11202,7 +11209,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "41.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "sp-core", "sp-runtime", @@ -11212,7 +11219,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.42.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", @@ -11223,7 +11230,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -11232,7 +11239,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.10.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "frame-metadata 20.0.0", "parity-scale-codec", @@ -11242,7 +11249,7 @@ dependencies = [ [[package]] name = "sp-mixnet" version = "0.14.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "scale-info", @@ -11253,7 +11260,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "36.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "scale-info", @@ -11266,7 +11273,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "sp-api", "sp-core", @@ -11276,7 +11283,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "13.0.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "backtrace", "regex", @@ -11285,7 +11292,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "34.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "rustc-hash 1.1.0", "serde", @@ -11295,7 +11302,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "41.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "binary-merkle-tree", "docify", @@ -11324,7 +11331,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "29.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11343,11 +11350,11 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "18.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "Inflector", "expander", - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -11356,7 +11363,7 @@ dependencies = [ [[package]] name = "sp-session" version = "38.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "scale-info", @@ -11370,7 +11377,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "38.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11383,7 +11390,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.45.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "hash-db", "log", @@ -11403,7 +11410,7 @@ dependencies = [ [[package]] name = "sp-statement-store" version = "20.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "aes-gcm", "curve25519-dalek", @@ -11427,12 +11434,12 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" [[package]] name = "sp-storage" version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11444,7 +11451,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "parity-scale-codec", @@ -11456,7 +11463,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "17.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "tracing", @@ -11467,7 +11474,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "sp-api", "sp-runtime", @@ -11476,7 +11483,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "36.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "async-trait", "parity-scale-codec", @@ -11490,7 +11497,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "39.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "ahash", "hash-db", @@ -11512,7 +11519,7 @@ dependencies = [ [[package]] name = "sp-version" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11529,7 +11536,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "15.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "parity-scale-codec", "proc-macro-warning", @@ -11541,7 +11548,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "21.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -11553,7 +11560,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "31.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -11619,7 +11626,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "staging-xcm" version = "16.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "array-bytes", "bounded-collections", @@ -11640,7 +11647,7 @@ dependencies = [ [[package]] name = "staging-xcm-builder" version = "20.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "environmental", "frame-support", @@ -11664,7 +11671,7 @@ dependencies = [ [[package]] name = "staging-xcm-executor" version = "19.1.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "environmental", "frame-benchmarking", @@ -11765,7 +11772,7 @@ dependencies = [ [[package]] name = "substrate-bip39" version = "0.6.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "hmac 0.12.1", "pbkdf2", @@ -11777,12 +11784,12 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "11.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" [[package]] name = "substrate-frame-rpc-system" version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "docify", "frame-system-rpc-runtime-api", @@ -11802,7 +11809,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.17.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "http-body-util", "hyper 1.7.0", @@ -11816,12 +11823,12 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" [[package]] name = "substrate-wasm-builder" version = "26.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "build-helper", "cargo_metadata", @@ -12106,15 +12113,15 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.21.0" +version = "3.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" +checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix 1.0.8", - "windows-sys 0.60.2", + "rustix 1.1.2", + "windows-sys 0.61.0", ] [[package]] @@ -12132,7 +12139,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ - "rustix 1.0.8", + "rustix 1.1.2", "windows-sys 0.60.2", ] @@ -12324,9 +12331,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "05f63835928ca123f1bef57abbcd23bb2ba0ac9ae1235f1e65bda0d06e7786bd" dependencies = [ "rustls", "tokio", @@ -12391,8 +12398,8 @@ checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", - "toml_datetime", - "toml_edit", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", ] [[package]] @@ -12404,20 +12411,50 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a197c0ec7d131bfc6f7e82c8442ba1595aeab35da7adbf05b6b73cd06a16b6be" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.3", "serde", "serde_spanned", - "toml_datetime", + "toml_datetime 0.6.11", "toml_write", "winnow", ] +[[package]] +name = "toml_edit" +version = "0.23.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ad0b7ae9cfeef5605163839cb9221f453399f15cfb5c10be9885fcf56611f9" +dependencies = [ + "indexmap 2.11.3", + "toml_datetime 0.7.1", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" +dependencies = [ + "winnow", +] + [[package]] name = "toml_write" version = "0.1.2" @@ -12513,7 +12550,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "19.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "coarsetime", "polkadot-primitives", @@ -12524,10 +12561,10 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "expander", - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -12673,9 +12710,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-normalization" @@ -12908,9 +12945,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.3+wasi-0.2.4" +version = "0.14.7+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ "wit-bindgen", ] @@ -12926,21 +12972,22 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c" dependencies = [ "bumpalo", "log", @@ -12952,9 +12999,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67" dependencies = [ "cfg-if", "js-sys", @@ -12965,9 +13012,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -12975,9 +13022,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32" dependencies = [ "proc-macro2", "quote", @@ -12988,21 +13035,21 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-encoder" -version = "0.238.1" +version = "0.239.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50d48c31c615f77679b61c607b8151378a5d03159616bf3d17e8e2005afdaf5" +checksum = "5be00faa2b4950c76fe618c409d2c3ea5a3c9422013e079482d78544bb2d184c" dependencies = [ "leb128fmt", - "wasmparser 0.238.1", + "wasmparser 0.239.0", ] [[package]] @@ -13130,13 +13177,13 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.238.1" +version = "0.239.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa99c8328024423875ae4a55345cfde8f0371327fb2d0f33b0f52a06fc44408" +checksum = "8c9d90bb93e764f6beabf1d02028c70a2156a6583e63ac4218dd07ef733368b0" dependencies = [ "bitflags 2.9.4", - "indexmap 2.11.0", - "semver 1.0.26", + "indexmap 2.11.3", + "semver 1.0.27", ] [[package]] @@ -13345,9 +13392,9 @@ dependencies = [ [[package]] name = "wast" -version = "238.0.1" +version = "239.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0a564e7eab2abb8920c1302b90eb2c98a15efbbe30fc060d4e2d88483aa23fe" +checksum = "9139176fe8a2590e0fb174cdcaf373b224cb93c3dde08e4297c1361d2ba1ea5d" dependencies = [ "bumpalo", "leb128fmt", @@ -13358,18 +13405,18 @@ dependencies = [ [[package]] name = "wat" -version = "1.238.1" +version = "1.239.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eb84e6ac2997025f80482266fdc9f60fa28ba791b674bfd33855e77fe867631" +checksum = "3e1c941927d34709f255558166f8901a2005f8ab4a9650432e9281b7cc6f3b75" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc" dependencies = [ "js-sys", "wasm-bindgen", @@ -13443,11 +13490,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -13475,7 +13522,7 @@ dependencies = [ "windows-collections", "windows-core 0.61.2", "windows-future", - "windows-link", + "windows-link 0.1.3", "windows-numerics", ] @@ -13506,9 +13553,22 @@ checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", - "windows-link", + "windows-link 0.1.3", "windows-result 0.3.4", - "windows-strings", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.0", + "windows-result 0.4.0", + "windows-strings 0.5.0", ] [[package]] @@ -13518,7 +13578,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ "windows-core 0.61.2", - "windows-link", + "windows-link 0.1.3", "windows-threading", ] @@ -13550,6 +13610,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + [[package]] name = "windows-numerics" version = "0.2.0" @@ -13557,7 +13623,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ "windows-core 0.61.2", - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -13575,7 +13641,16 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" +dependencies = [ + "windows-link 0.2.0", ] [[package]] @@ -13584,7 +13659,16 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" +dependencies = [ + "windows-link 0.2.0", ] [[package]] @@ -13632,6 +13716,15 @@ dependencies = [ "windows-targets 0.53.3", ] +[[package]] +name = "windows-sys" +version = "0.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +dependencies = [ + "windows-link 0.2.0", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -13684,7 +13777,7 @@ version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -13701,7 +13794,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -13905,9 +13998,9 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.45.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" @@ -13973,7 +14066,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "11.0.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#a5cffdd5fa1b53ae7e795c9c158395c25f80e25f" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" dependencies = [ "Inflector", "proc-macro2", @@ -14068,18 +14161,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", @@ -14200,9 +14293,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index d3b22011d1..07a45fe84b 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -105,7 +105,7 @@ sp-tracing = { workspace = true, default-features = false, features = ["std"] } [features] default = ["std", "equalize", "testing"] -testing = ["polymesh-runtime-common/testing"] +testing = ["polymesh-runtime-common/testing", "pallet-staking/testing"] equalize = [] only-staking = [] diff --git a/pallets/runtime/tests/src/lib.rs b/pallets/runtime/tests/src/lib.rs index 46ef9459a1..cc8fcd8128 100644 --- a/pallets/runtime/tests/src/lib.rs +++ b/pallets/runtime/tests/src/lib.rs @@ -31,7 +31,7 @@ mod relayer_test; mod settlement_pallet; mod settlement_test; mod signed_extra; -//mod staking; +mod staking; mod staking_extra_tests; mod sto_test; pub(crate) mod storage; diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index 85c8e3919e..923a67f70f 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -19,15 +19,19 @@ use frame_election_provider_support::bounds::{ElectionBounds, ElectionBoundsBuilder}; use frame_election_provider_support::{onchain, SequentialPhragmen, VoteWeight}; - use frame_support::traits::{ConstU64, EitherOfDiverse, FindAuthor, Get}; -use frame_support::traits::{Imbalance, OnUnbalanced, OneSessionHandler}; +use frame_support::traits::{Contains, Imbalance, OnUnbalanced, OneSessionHandler}; +use frame_support::weights::constants::RocksDbWeight; use frame_support::{assert_ok, derive_impl, ord_parameter_types, parameter_types}; use frame_system::{EnsureRoot, EnsureSignedBy}; use sp_io; -use sp_runtime::{curve::PiecewiseLinear, testing::UintAuthorityId, traits::Zero, BuildStorage}; +use sp_runtime::curve::PiecewiseLinear; +use sp_runtime::testing::UintAuthorityId; +use sp_runtime::traits::Zero; +use sp_runtime::{BuildStorage, Perbill}; use sp_staking::offence::{OffenceDetails, OnOffenceHandler}; -use sp_staking::OnStakingUpdate; +use sp_staking::{EraIndex, OnStakingUpdate, SessionIndex, StakingAccount}; +use sp_std::collections::btree_map::BTreeMap; use pallet_staking::{self as pallet_staking, *}; @@ -136,7 +140,7 @@ impl pallet_session::Config for Test { type SessionHandler = (OtherSessionHandler,); type RuntimeEvent = RuntimeEvent; type ValidatorId = AccountId; - type ValidatorIdOf = crate::StashOf; + type ValidatorIdOf = pallet_staking::StashOf; type NextSessionRotation = pallet_session::PeriodicSessions; type DisablingStrategy = pallet_session::disabling::UpToLimitWithReEnablingDisablingStrategy; @@ -203,16 +207,6 @@ parameter_types! { pub static AbsoluteMaxNominations: u32 = 16; } -type VoterBagsListInstance = pallet_bags_list::Instance1; -impl pallet_bags_list::Config for Test { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = (); - // Staking is the source of truth for voter bags list, since they are not kept up to date. - type ScoreProvider = Staking; - type BagThresholds = BagThresholds; - type Score = VoteWeight; -} - pub struct OnChainSeqPhragmen; impl onchain::Config for OnChainSeqPhragmen { type System = Test; @@ -268,7 +262,7 @@ impl Contains for MockedRestrictList { pub(crate) const DISABLING_LIMIT_FACTOR: usize = 3; #[derive_impl(pallet_staking::config_preludes::TestDefaultConfig)] -impl crate::pallet::pallet::Config for Test { +impl Config for Test { type OldCurrency = Balances; type Currency = Balances; type UnixTime = Timestamp; @@ -284,8 +278,8 @@ impl crate::pallet::pallet::Config for Test { type ElectionProvider = onchain::OnChainExecution; type GenesisElectionProvider = Self::ElectionProvider; // NOTE: consider a macro and use `UseNominatorsAndValidatorsMap` as well. - type VoterList = VoterBagsList; - type TargetList = UseValidatorsMap; + type VoterList = pallet_staking::UseNominatorsAndValidatorsMap; + type TargetList = pallet_staking::UseValidatorsMap; type NominationsQuota = WeightedNominationsQuota<16>; type MaxUnlockingChunks = MaxUnlockingChunks; type HistoryDepth = HistoryDepth; @@ -313,7 +307,7 @@ where } } -pub(crate) type StakingCall = crate::Call; +pub(crate) type StakingCall = Call; pub(crate) type TestCall = ::RuntimeCall; parameter_types! { @@ -774,7 +768,7 @@ pub(crate) fn on_offence_in_era( slash_fraction: &[Perbill], era: EraIndex, ) { - let bonded_eras = crate::BondedEras::::get(); + let bonded_eras = pallet_staking::BondedEras::::get(); for &(bonded_era, start_session) in bonded_eras.iter() { if bonded_era == era { let _ = >::on_offence( @@ -979,7 +973,7 @@ macro_rules! assert_session_era { }; } -pub(crate) fn staking_events() -> Vec> { +pub(crate) fn staking_events() -> Vec> { System::events() .into_iter() .map(|r| r.event) @@ -1016,7 +1010,7 @@ ord_parameter_types! { type EnsureOneOrRoot = EitherOfDiverse, EnsureSignedBy>; -pub(crate) fn staking_events_since_last_call() -> Vec> { +pub(crate) fn staking_events_since_last_call() -> Vec> { let all: Vec<_> = System::events() .into_iter() .filter_map(|r| { diff --git a/pallets/runtime/tests/src/staking/mod.rs b/pallets/runtime/tests/src/staking/mod.rs index 242d8a6886..b53e4e9300 100644 --- a/pallets/runtime/tests/src/staking/mod.rs +++ b/pallets/runtime/tests/src/staking/mod.rs @@ -26,14 +26,18 @@ use frame_support::pallet_prelude::*; use frame_support::traits::{fungible::Inspect, Currency, Get, InspectLockableCurrency}; use frame_support::traits::{LockableCurrency, ReservableCurrency, WithdrawReasons}; use frame_support::{assert_noop, assert_ok, assert_storage_noop, hypothetically}; -use pallet_balances::Error as BalancesError; +use pallet_staking::*; +use pallet_staking::ledger::StakingLedgerInspect; use pallet_session::{disabling::UpToLimitWithReEnablingDisablingStrategy, Event as SessionEvent}; use sp_runtime::traits::{BadOrigin, Dispatchable}; -use sp_runtime::{assert_eq_error_rate, bounded_vec, Perbill, Percent}; +use sp_runtime::{assert_eq_error_rate, bounded_vec, Percent, Perbill}; use sp_runtime::{Perquintill, Rounding, TokenError}; use sp_staking::offence::{OffenceDetails, OnOffenceHandler}; -use sp_staking::SessionIndex; +use sp_staking::{SessionIndex, StakingAccount, PagedExposureMetadata, ExposurePage, EraIndex}; use substrate_test_utils::assert_eq_uvec; +use sp_std::collections::btree_map::BTreeMap; + +use pallet_balances::Error as BalancesError; use mock::*; @@ -7500,7 +7504,7 @@ fn test_validator_exposure_is_backward_compatible_with_non_paged_rewards_payout( let actual_exposure_paged = EraInfo::::get_paged_exposure(1, &11, 0).unwrap(); assert_eq!(actual_exposure_paged.others(), &clipped_exposure); assert_eq!(actual_exposure_paged.own(), 1000); - assert_eq!(actual_exposure_paged.exposure_metadata.page_count, 1); + assert_eq!(actual_exposure_paged.page_count(), 1); let actual_exposure_full = EraInfo::::get_full_exposure(1, &11); assert_eq!(actual_exposure_full.others, expected_individual_exposures); @@ -9674,6 +9678,7 @@ mod getters { use crate::staking::mock::*; use pallet_staking::*; use sp_staking::{EraIndex, Exposure, IndividualExposure, Page, SessionIndex}; + use sp_runtime::Perbill; #[test] fn get_validator_count_returns_value_from_storage() { @@ -9709,7 +9714,7 @@ mod getters { fn get_invulnerables_returns_value_from_storage() { sp_io::TestExternalities::default().execute_with(|| { // given - let v: Vec = vec![1, 2, 3]; + let v: Vec = vec![1, 2, 3]; Invulnerables::::put(v.clone()); // when @@ -9724,7 +9729,7 @@ mod getters { fn get_validators_returns_value_from_storage() { sp_io::TestExternalities::default().execute_with(|| { // given - let account_id: mock::AccountId = 1; + let account_id: AccountId = 1; let validator_prefs = ValidatorPrefs::default(); Validators::::insert(account_id, validator_prefs.clone()); @@ -9741,7 +9746,7 @@ mod getters { fn get_nominators_returns_value_from_storage() { sp_io::TestExternalities::default().execute_with(|| { // given - let account_id: mock::AccountId = 1; + let account_id: AccountId = 1; let nominations: Nominations = Nominations { targets: Default::default(), submitted_in: Default::default(), @@ -9817,8 +9822,8 @@ mod getters { sp_io::TestExternalities::default().execute_with(|| { // given let era: EraIndex = 12; - let account_id: mock::AccountId = 1; - let exposure: Exposure> = Exposure { + let account_id: AccountId = 1; + let exposure: Exposure> = Exposure { total: 1125, own: 1000, others: vec![IndividualExposure { @@ -9841,7 +9846,7 @@ mod getters { sp_io::TestExternalities::default().execute_with(|| { // given let era: EraIndex = 12; - let account_id: mock::AccountId = 1; + let account_id: AccountId = 1; let rewards = Vec::::new(); ClaimedRewards::::insert(era, account_id, rewards.clone()); @@ -9858,7 +9863,7 @@ mod getters { sp_io::TestExternalities::default().execute_with(|| { // given let era: EraIndex = 12; - let account_id: mock::AccountId = 1; + let account_id: AccountId = 1; let validator_prefs = ValidatorPrefs::default(); ErasValidatorPrefs::::insert(era, account_id, validator_prefs.clone()); @@ -9893,7 +9898,7 @@ mod getters { sp_io::TestExternalities::default().execute_with(|| { // given let era: EraIndex = 12; - let reward_points = EraRewardPoints:: { + let reward_points = EraRewardPoints:: { total: 1, individual: vec![(11, 1)].into_iter().collect(), }; @@ -9973,7 +9978,7 @@ mod getters { fn get_slashing_spans_returns_value_from_storage() { sp_io::TestExternalities::default().execute_with(|| { // given - let account_id: mock::AccountId = 1; + let account_id: AccountId = 1; let spans = slashing::SlashingSpans::new(2); SlashingSpans::::insert(account_id, spans); From 2a84ca67d877d6e95548561fdae8af9995fa078a Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Thu, 18 Sep 2025 07:28:55 -0300 Subject: [PATCH 80/97] Fix staking tests - UseNominatorsAndValidatorsMap does not sort --- pallets/runtime/tests/src/staking/mod.rs | 315 +++++++++++++---------- 1 file changed, 180 insertions(+), 135 deletions(-) diff --git a/pallets/runtime/tests/src/staking/mod.rs b/pallets/runtime/tests/src/staking/mod.rs index b53e4e9300..ea13a6279f 100644 --- a/pallets/runtime/tests/src/staking/mod.rs +++ b/pallets/runtime/tests/src/staking/mod.rs @@ -26,16 +26,16 @@ use frame_support::pallet_prelude::*; use frame_support::traits::{fungible::Inspect, Currency, Get, InspectLockableCurrency}; use frame_support::traits::{LockableCurrency, ReservableCurrency, WithdrawReasons}; use frame_support::{assert_noop, assert_ok, assert_storage_noop, hypothetically}; -use pallet_staking::*; -use pallet_staking::ledger::StakingLedgerInspect; use pallet_session::{disabling::UpToLimitWithReEnablingDisablingStrategy, Event as SessionEvent}; +use pallet_staking::ledger::StakingLedgerInspect; +use pallet_staking::*; use sp_runtime::traits::{BadOrigin, Dispatchable}; -use sp_runtime::{assert_eq_error_rate, bounded_vec, Percent, Perbill}; +use sp_runtime::{assert_eq_error_rate, bounded_vec, Perbill, Percent}; use sp_runtime::{Perquintill, Rounding, TokenError}; use sp_staking::offence::{OffenceDetails, OnOffenceHandler}; -use sp_staking::{SessionIndex, StakingAccount, PagedExposureMetadata, ExposurePage, EraIndex}; -use substrate_test_utils::assert_eq_uvec; +use sp_staking::{EraIndex, ExposurePage, PagedExposureMetadata, SessionIndex, StakingAccount}; use sp_std::collections::btree_map::BTreeMap; +use substrate_test_utils::assert_eq_uvec; use pallet_balances::Error as BalancesError; @@ -741,8 +741,8 @@ fn nominating_and_rewards_should_work() { total: 1000 + 800, own: 1000, others: vec![ - IndividualExposure { who: 1, value: 400 }, IndividualExposure { who: 3, value: 400 }, + IndividualExposure { who: 1, value: 400 }, ] }, ); @@ -752,8 +752,8 @@ fn nominating_and_rewards_should_work() { total: 1000 + 1200, own: 1000, others: vec![ - IndividualExposure { who: 1, value: 600 }, IndividualExposure { who: 3, value: 600 }, + IndividualExposure { who: 1, value: 600 }, ] }, ); @@ -2554,25 +2554,24 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider() { // winners should be 21 and 31. Otherwise this election is taking duplicates into // account. let supports = ::ElectionProvider::elect().unwrap(); - assert_eq!( - supports, - vec![ - ( - 21, - Support { - total: 1800, - voters: vec![(21, 1000), (1, 400), (3, 400)] - } - ), - ( - 31, - Support { - total: 2200, - voters: vec![(31, 1000), (1, 600), (3, 600)] - } - ) - ], - ); + + // Polymesh change + // ----------------------------------------------------------------- + // We don't care about the order + assert_eq!(supports.len(), 2); + assert_eq!(supports[0].0, 21); + assert_eq!(supports[0].1.total, 1800); + assert_eq!(supports[0].1.voters.len(), 3); + assert!(supports[0].1.voters.contains(&(21, 1000))); + assert!(supports[0].1.voters.contains(&(1, 400))); + assert!(supports[0].1.voters.contains(&(3, 400))); + assert_eq!(supports[1].0, 31); + assert_eq!(supports[1].1.total, 2200); + assert_eq!(supports[1].1.voters.len(), 3); + assert!(supports[1].1.voters.contains(&(31, 1000))); + assert!(supports[1].1.voters.contains(&(1, 600))); + assert!(supports[1].1.voters.contains(&(3, 600))); + // ----------------------------------------------------------------- }); } @@ -2621,25 +2620,22 @@ fn bond_with_duplicate_vote_should_be_ignored_by_election_provider_elected() { // winners should be 21 and 11. let supports = ::ElectionProvider::elect().unwrap(); - assert_eq!( - supports, - vec![ - ( - 11, - Support { - total: 1500, - voters: vec![(11, 1000), (1, 500)] - } - ), - ( - 21, - Support { - total: 2500, - voters: vec![(21, 1000), (1, 500), (3, 1000)] - } - ) - ], - ); + // Polymesh change + // ----------------------------------------------------------------- + // We don't care about the order + assert_eq!(supports.len(), 2); + assert_eq!(supports[0].0, 11); + assert_eq!(supports[0].1.total, 1500); + assert_eq!(supports[0].1.voters.len(), 2); + assert!(supports[0].1.voters.contains(&(11, 1000))); + assert!(supports[0].1.voters.contains(&(1, 500))); + assert_eq!(supports[1].0, 21); + assert_eq!(supports[1].1.total, 2500); + assert_eq!(supports[1].1.voters.len(), 3); + assert!(supports[1].1.voters.contains(&(21, 1000))); + assert!(supports[1].1.voters.contains(&(1, 500))); + assert!(supports[1].1.voters.contains(&(3, 1000))); + // ----------------------------------------------------------------- }); } @@ -3982,28 +3978,33 @@ fn test_multi_page_payout_stakers_by_page() { )); // verify `Rewarded` events are being executed - assert!(matches!( - staking_events_since_last_call().as_slice(), - &[ - Event::PayoutStarted { - era_index: 1, - validator_stash: 11, - page: 0, - next: Some(1) - }, - .., - Event::Rewarded { - stash: 1063, - dest: RewardDestination::Stash, - amount: 111 - }, - Event::Rewarded { - stash: 1064, - dest: RewardDestination::Stash, - amount: 111 - }, - ] - )); + let events = staking_events_since_last_call(); + + // Polymesh change + // ----------------------------------------------------------------- + // We don't care about the order + assert_eq!( + events[0], + Event::PayoutStarted { + era_index: 1, + validator_stash: 11, + page: 0, + next: Some(1) + } + ); + + assert!(events.contains(&Event::Rewarded { + stash: 1064, + dest: RewardDestination::Stash, + amount: 111 + })); + + assert!(events.contains(&Event::Rewarded { + stash: 1065, + dest: RewardDestination::Stash, + amount: 111 + })); + // ----------------------------------------------------------------- let controller_balance_after_p0_payout = asset::stakeable_balance::(&11); @@ -4026,28 +4027,33 @@ fn test_multi_page_payout_stakers_by_page() { // verify `Rewarded` events are being executed for the second page. let events = staking_events_since_last_call(); - assert!(matches!( - events.as_slice(), - &[ - Event::PayoutStarted { - era_index: 1, - validator_stash: 11, - page: 1, - next: None - }, - Event::Rewarded { - stash: 1065, - dest: RewardDestination::Stash, - amount: 111 - }, - Event::Rewarded { - stash: 1066, - dest: RewardDestination::Stash, - amount: 111 - }, - .. - ] - )); + + // Polymesh change + // ----------------------------------------------------------------- + // We don't care about the order + assert_eq!( + events[0], + Event::PayoutStarted { + era_index: 1, + validator_stash: 11, + page: 1, + next: None + } + ); + + assert!(events.contains(&Event::Rewarded { + stash: 1063, + dest: RewardDestination::Stash, + amount: 111 + })); + + assert!(events.contains(&Event::Rewarded { + stash: 1066, + dest: RewardDestination::Stash, + amount: 111 + })); + // ----------------------------------------------------------------- + // verify the validator was not rewarded the second time assert_eq!( asset::stakeable_balance::(&11), @@ -5451,7 +5457,10 @@ mod election_data_provider { assert_ok!(::electing_voters( bounds.voters )); - assert_eq!(MinimumActiveStake::::get(), 50); + // Polymesh change - we don't sort + // -------------------------------------------------- + //assert_eq!(MinimumActiveStake::::get(), 50); + // -------------------------------------------------- }); } @@ -5765,14 +5774,21 @@ mod election_data_provider { // even through 61 has nomination quota of 2 at the time of the election, all the // nominations (5) will be used. - assert_eq!( - Staking::electing_voters(DataProviderBounds::default()) - .unwrap() - .iter() - .map(|(stash, _, targets)| (*stash, targets.len())) - .collect::>(), - vec![(11, 1), (21, 1), (31, 1), (61, 5)], - ); + + // Polymesh change + // ----------------------------------------------------------------- + // We don't care about the order + let elected_voters = Staking::electing_voters(DataProviderBounds::default()) + .unwrap() + .iter() + .map(|(stash, _, targets)| (*stash, targets.len())) + .collect::>(); + assert_eq!(elected_voters.len(), 4); + assert!(elected_voters.contains(&(11, 1))); + assert!(elected_voters.contains(&(21, 1))); + assert!(elected_voters.contains(&(31, 1))); + assert!(elected_voters.contains(&(61, 5))); + // ----------------------------------------------------------------- }); } @@ -5791,14 +5807,20 @@ mod election_data_provider { let bounds = ElectionBoundsBuilder::default() .voters_size(100.into()) .build(); - assert_eq!( - Staking::electing_voters(bounds.voters) - .unwrap() - .iter() - .map(|(stash, _, targets)| (*stash, targets.len())) - .collect::>(), - vec![(11, 1), (21, 1), (31, 1)], - ); + + // Polymesh change + // ----------------------------------------------------------------- + // We don't care about the order + let elected_voters = Staking::electing_voters(bounds.voters) + .unwrap() + .iter() + .map(|(stash, _, targets)| (*stash, targets.len())) + .collect::>(); + assert!(elected_voters.len() >= 3); + assert!(elected_voters.contains(&(11, 1))); + assert!(elected_voters.contains(&(21, 1))); + assert!(elected_voters.contains(&(31, 1))); + // ----------------------------------------------------------------- assert_eq!( *staking_events().last().unwrap(), @@ -5810,14 +5832,21 @@ mod election_data_provider { let bounds = ElectionBoundsBuilder::default() .voters_size(1_000.into()) .build(); - assert_eq!( - Staking::electing_voters(bounds.voters) - .unwrap() - .iter() - .map(|(stash, _, targets)| (*stash, targets.len())) - .collect::>(), - vec![(11, 1), (21, 1), (31, 1), (71, 7)], - ); + + // Polymesh change + // ----------------------------------------------------------------- + // We don't care about the order + let elected_voters = Staking::electing_voters(bounds.voters) + .unwrap() + .iter() + .map(|(stash, _, targets)| (*stash, targets.len())) + .collect::>(); + assert_eq!(elected_voters.len(), 4); + assert!(elected_voters.contains(&(11, 1))); + assert!(elected_voters.contains(&(21, 1))); + assert!(elected_voters.contains(&(31, 1))); + assert!(elected_voters.contains(&(71, 7))); + // ----------------------------------------------------------------- }); } @@ -5914,6 +5943,7 @@ mod election_data_provider { } } +#[ignore] #[test] #[should_panic] fn count_check_works() { @@ -6014,6 +6044,7 @@ fn min_bond_checks_work() { }) } +#[ignore] #[test] fn chill_other_works() { ExtBuilder::default() @@ -6442,8 +6473,6 @@ fn min_commission_works() { } #[test] -#[should_panic] -#[cfg(debug_assertions)] fn change_of_absolute_max_nominations() { use frame_election_provider_support::ElectionDataProvider; ExtBuilder::default() @@ -6634,21 +6663,29 @@ mod sorted_list_provider { (Nominators::::count() + Validators::::count()) as u32; assert_eq!(::VoterList::count(), pre_insert_voter_count); - assert_eq!( - ::VoterList::iter().collect::>(), - vec![11, 21, 31, 101] - ); + // Polymesh change + // ----------------------------------------------------------------- + // UseNominatorsAndValidatorsMap does not provide sorted nominators + // assert_eq!( + // ::VoterList::iter().collect::>(), + // vec![11, 21, 31, 101] + // ); + // ----------------------------------------------------------------- // when account 101 renominates assert_ok!(Staking::nominate(RuntimeOrigin::signed(101), vec![41])); // then counts don't change assert_eq!(::VoterList::count(), pre_insert_voter_count); - // and the list is the same - assert_eq!( - ::VoterList::iter().collect::>(), - vec![11, 21, 31, 101] - ); + + // Polymesh change + // ----------------------------------------------------------------- + // UseNominatorsAndValidatorsMap does not provide sorted nominators + // assert_eq!( + // ::VoterList::iter().collect::>(), + // vec![11, 21, 31, 101] + // ); + // ----------------------------------------------------------------- }); } @@ -6660,10 +6697,14 @@ mod sorted_list_provider { (Nominators::::count() + Validators::::count()) as u32; assert_eq!(::VoterList::count(), pre_insert_voter_count); - assert_eq!( - ::VoterList::iter().collect::>(), - vec![11, 21, 31] - ); + // Polymesh change + // ----------------------------------------------------------------- + // UseNominatorsAndValidatorsMap does not provide sorted nominators + // assert_eq!( + // ::VoterList::iter().collect::>(), + // vec![11, 21, 31] + // ); + // ----------------------------------------------------------------- // when account 11 re-validates assert_ok!(Staking::validate( @@ -6673,11 +6714,15 @@ mod sorted_list_provider { // then counts don't change assert_eq!(::VoterList::count(), pre_insert_voter_count); - // and the list is the same - assert_eq!( - ::VoterList::iter().collect::>(), - vec![11, 21, 31] - ); + + // Polymesh change + // ----------------------------------------------------------------- + // UseNominatorsAndValidatorsMap does not provide sorted nominators + // assert_eq!( + // ::VoterList::iter().collect::>(), + // vec![11, 21, 31] + // ); + // ----------------------------------------------------------------- }); } } @@ -9677,8 +9722,8 @@ mod migration_tests { mod getters { use crate::staking::mock::*; use pallet_staking::*; - use sp_staking::{EraIndex, Exposure, IndividualExposure, Page, SessionIndex}; use sp_runtime::Perbill; + use sp_staking::{EraIndex, Exposure, IndividualExposure, Page, SessionIndex}; #[test] fn get_validator_count_returns_value_from_storage() { From 49307e97ee764ca91930318647b2b5b0501d321d Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 19 Sep 2025 17:47:32 -0300 Subject: [PATCH 81/97] Fix toml files missing runtime-benchmark feature --- Cargo.lock | 411 ++++++++++++------------ pallets/asset/Cargo.toml | 6 + pallets/committee/Cargo.toml | 9 +- pallets/compliance-manager/Cargo.toml | 6 + pallets/contracts/Cargo.toml | 9 +- pallets/corporate-actions/Cargo.toml | 9 +- pallets/external-agents/Cargo.toml | 4 + pallets/group/Cargo.toml | 3 + pallets/identity/Cargo.toml | 18 +- pallets/multisig/Cargo.toml | 6 +- pallets/nft/Cargo.toml | 6 + pallets/permissions/Cargo.toml | 2 +- pallets/permissions/src/benchmarking.rs | 4 +- pallets/permissions/src/lib.rs | 6 +- pallets/pips/Cargo.toml | 5 +- pallets/portfolio/Cargo.toml | 3 + pallets/protocol-fee/Cargo.toml | 3 + pallets/relayer/Cargo.toml | 4 +- pallets/settlement/Cargo.toml | 8 + pallets/statistics/Cargo.toml | 6 +- pallets/sto/Cargo.toml | 9 +- pallets/sto/src/benchmarking.rs | 2 +- pallets/treasury/Cargo.toml | 4 + pallets/utility/Cargo.toml | 7 +- pallets/validators/Cargo.toml | 11 +- 25 files changed, 331 insertions(+), 230 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e6e7d55c2f..f499836ed6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -160,9 +160,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "approx" @@ -850,7 +850,7 @@ checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "binary-merkle-tree" version = "16.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "hash-db", "log", @@ -1200,9 +1200,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.37" +version = "1.2.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" +checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9" dependencies = [ "find-msvc-tools", "jobserver", @@ -1824,7 +1824,7 @@ dependencies = [ [[package]] name = "cumulus-client-parachain-inherent" version = "0.17.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1844,7 +1844,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" version = "0.18.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -1860,7 +1860,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.18.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1874,7 +1874,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" version = "0.12.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -1884,7 +1884,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" version = "0.23.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1903,7 +1903,7 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.19.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -1942,9 +1942,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.184" +version = "1.0.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4a0beb369d20d0de6aa7084ee523e4c9a31d7d8c61ba357b119bb574d7f368" +checksum = "2f81de88da10862f22b5b3a60f18f6f42bbe7cb8faa24845dd7b1e4e22190e77" dependencies = [ "cc", "cxx-build", @@ -1957,13 +1957,13 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.184" +version = "1.0.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27d955b93e56a8e45cbc34df0ae920d8b5ad01541a4571222c78527c00e1a40a" +checksum = "5edd58bf75c3fdfc80d79806403af626570662f7b6cc782a7fabe156166bd6d6" dependencies = [ "cc", "codespan-reporting", - "indexmap 2.11.3", + "indexmap 2.11.4", "proc-macro2", "quote", "scratch", @@ -1972,13 +1972,13 @@ dependencies = [ [[package]] name = "cxxbridge-cmd" -version = "1.0.184" +version = "1.0.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052f6c468d9dabdc2b8b228bcb2d7843b2bea0f3fb9c4e2c6ba5852574ec0150" +checksum = "fd46bf2b541a4e0c2d5abba76607379ee05d68e714868e3cb406dc8d591ce2d2" dependencies = [ "clap", "codespan-reporting", - "indexmap 2.11.3", + "indexmap 2.11.4", "proc-macro2", "quote", "syn 2.0.106", @@ -1986,17 +1986,17 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.184" +version = "1.0.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fd145fa180986cb8002c63217d03b2c782fdcd5fa323adcd1f62d2d6ece6144" +checksum = "2c79b68f6a3a8f809d39b38ae8af61305a6113819b19b262643b9c21353b92d9" [[package]] name = "cxxbridge-macro" -version = "1.0.184" +version = "1.0.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02ac4a3bc4484a2daa0a8421c9588bd26522be9682a2fe02c7087bc4e8bc3c60" +checksum = "862b7fdb048ff9ef0779a0d0a03affd09746c4c875543746b640756be9cff2af" dependencies = [ - "indexmap 2.11.3", + "indexmap 2.11.4", "proc-macro2", "quote", "rustversion", @@ -2621,7 +2621,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb42427514b063d97ce21d5199f36c0c307d981434a6be32582bc79fe5bd2303" dependencies = [ "expander", - "indexmap 2.11.3", + "indexmap 2.11.4", "proc-macro-crate 3.4.0", "proc-macro2", "quote", @@ -2704,9 +2704,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" +checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" [[package]] name = "fixed-hash" @@ -2753,7 +2753,7 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "fork-tree" version = "13.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", ] @@ -2786,7 +2786,7 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" version = "40.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-support", "frame-support-procedural", @@ -2810,7 +2810,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "48.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "Inflector", "array-bytes", @@ -2884,7 +2884,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "16.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -2895,7 +2895,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "40.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2911,7 +2911,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "40.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "aquamarine", "frame-support", @@ -2953,7 +2953,7 @@ dependencies = [ [[package]] name = "frame-support" version = "40.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "aquamarine", "array-bytes", @@ -2994,7 +2994,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "33.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "Inflector", "cfg-expr", @@ -3014,7 +3014,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "13.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 3.4.0", @@ -3026,7 +3026,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "12.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "proc-macro2", "quote", @@ -3036,7 +3036,7 @@ dependencies = [ [[package]] name = "frame-system" version = "40.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "cfg-if", "docify", @@ -3055,7 +3055,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "40.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-benchmarking", "frame-support", @@ -3069,7 +3069,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "docify", "parity-scale-codec", @@ -3079,7 +3079,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.46.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-support", "parity-scale-codec", @@ -3423,7 +3423,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.11.3", + "indexmap 2.11.4", "slab", "tokio", "tokio-util", @@ -3442,7 +3442,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.11.3", + "indexmap 2.11.4", "slab", "tokio", "tokio-util", @@ -3515,6 +3515,12 @@ dependencies = [ "foldhash 0.1.5", ] +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + [[package]] name = "hashlink" version = "0.8.4" @@ -4179,12 +4185,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.3" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92119844f513ffa41556430369ab02c295a3578af21cf945caa3e9e0c2481ac3" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.15.5", + "hashbrown 0.16.0", ] [[package]] @@ -5232,7 +5238,7 @@ dependencies = [ "futures", "futures-timer", "hickory-resolver 0.25.2", - "indexmap 2.11.3", + "indexmap 2.11.4", "libc", "mockall", "multiaddr 0.17.1", @@ -6035,7 +6041,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43dfaf083aef571385fccfdc3a2f8ede8d0a1863160455d4f2b014d8f7d04a3f" dependencies = [ "expander", - "indexmap 2.11.3", + "indexmap 2.11.4", "itertools 0.11.0", "petgraph 0.6.5", "proc-macro-crate 3.4.0", @@ -6083,7 +6089,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion" version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-benchmarking", "frame-support", @@ -6101,7 +6107,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-support", "frame-system", @@ -6116,7 +6122,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-support", "frame-system", @@ -6129,7 +6135,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-benchmarking", "frame-support", @@ -6152,7 +6158,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "41.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "docify", "frame-benchmarking", @@ -6238,7 +6244,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "40.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "environmental", "frame-benchmarking", @@ -6269,7 +6275,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "23.0.3" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "proc-macro2", "quote", @@ -6279,7 +6285,7 @@ dependencies = [ [[package]] name = "pallet-contracts-uapi" version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -6321,7 +6327,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "39.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6343,7 +6349,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6377,7 +6383,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-benchmarking", "frame-support", @@ -6483,7 +6489,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "39.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-benchmarking", "frame-support", @@ -6502,7 +6508,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-benchmarking", "frame-support", @@ -6517,7 +6523,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "28.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -6569,7 +6575,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-support", "frame-system", @@ -6653,7 +6659,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-benchmarking", "frame-support", @@ -6737,7 +6743,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "41.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "docify", "frame-benchmarking", @@ -6754,7 +6760,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "40.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-support", "frame-system", @@ -6808,7 +6814,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "40.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6830,7 +6836,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "12.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -6841,7 +6847,7 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" version = "26.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "sp-api", @@ -6922,7 +6928,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "docify", "frame-benchmarking", @@ -6959,7 +6965,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-benchmarking", "frame-support", @@ -7285,7 +7291,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.11.3", + "indexmap 2.11.4", ] [[package]] @@ -7295,7 +7301,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset 0.5.7", - "indexmap 2.11.3", + "indexmap 2.11.4", ] [[package]] @@ -7352,10 +7358,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23eff02c070c70f31878a3d915e88a914ecf3e153741e2fb572dde28cce20fde" [[package]] +<<<<<<< HEAD name = "polling" version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" +======= +name = "polkadot-core-primitives" +version = "17.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +>>>>>>> Fix toml files missing runtime-benchmark feature dependencies = [ "cfg-if", "concurrent-queue", @@ -8135,7 +8147,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.23.5", + "toml_edit 0.23.6", ] [[package]] @@ -8909,9 +8921,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.31" +version = "0.23.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" +checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" dependencies = [ "log", "once_cell", @@ -9064,7 +9076,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "31.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "log", "sp-core", @@ -9075,7 +9087,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "futures", @@ -9103,7 +9115,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "futures", "log", @@ -9124,7 +9136,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.44.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "sp-api", @@ -9139,7 +9151,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "43.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "array-bytes", "docify", @@ -9165,7 +9177,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "12.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -9176,7 +9188,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.52.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "array-bytes", "chrono", @@ -9218,7 +9230,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "fnv", "futures", @@ -9244,7 +9256,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.46.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "hash-db", "kvdb", @@ -9270,7 +9282,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "futures", @@ -9293,7 +9305,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "fork-tree", @@ -9329,7 +9341,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "futures", "jsonrpsee", @@ -9351,7 +9363,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9364,7 +9376,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.35.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "ahash", "array-bytes", @@ -9408,7 +9420,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" version = "0.35.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "finality-grandpa", "futures", @@ -9428,7 +9440,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "futures", @@ -9451,7 +9463,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.42.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", @@ -9474,7 +9486,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.38.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "polkavm", "sc-allocator", @@ -9487,7 +9499,7 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" version = "0.35.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "log", "polkavm", @@ -9498,7 +9510,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.38.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "anyhow", "log", @@ -9514,7 +9526,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "console", "futures", @@ -9530,7 +9542,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "35.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "array-bytes", "parking_lot 0.12.4", @@ -9544,7 +9556,7 @@ dependencies = [ [[package]] name = "sc-mixnet" version = "0.20.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "array-bytes", "arrayvec 0.7.6", @@ -9572,7 +9584,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -9622,7 +9634,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.48.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -9632,7 +9644,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "ahash", "futures", @@ -9651,7 +9663,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -9672,7 +9684,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -9707,7 +9719,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "array-bytes", "futures", @@ -9726,7 +9738,7 @@ dependencies = [ [[package]] name = "sc-network-types" version = "0.16.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "bs58", "bytes", @@ -9745,7 +9757,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "bytes", "fnv", @@ -9779,7 +9791,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.20.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9788,7 +9800,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "futures", "jsonrpsee", @@ -9820,7 +9832,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -9840,7 +9852,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "dyn-clone", "forwarded-header-value", @@ -9864,7 +9876,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "array-bytes", "futures", @@ -9897,7 +9909,7 @@ dependencies = [ [[package]] name = "sc-runtime-utilities" version = "0.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "sc-executor", @@ -9912,7 +9924,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.51.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "directories", @@ -9976,7 +9988,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.38.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "log", "parity-scale-codec", @@ -9987,7 +9999,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10006,7 +10018,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "42.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "derive_more 0.99.20", "futures", @@ -10026,7 +10038,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "28.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "chrono", "futures", @@ -10045,7 +10057,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "chrono", "console", @@ -10073,7 +10085,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "11.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -10084,12 +10096,12 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "futures", "futures-timer", - "indexmap 2.11.3", + "indexmap 2.11.4", "itertools 0.11.0", "linked-hash-map", "log", @@ -10116,11 +10128,11 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "futures", - "indexmap 2.11.3", + "indexmap 2.11.4", "log", "parity-scale-codec", "serde", @@ -10133,7 +10145,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "18.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-channel 1.9.0", "futures", @@ -10866,7 +10878,7 @@ dependencies = [ [[package]] name = "sp-api" version = "36.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "docify", "hash-db", @@ -10888,7 +10900,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "22.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "Inflector", "blake2 0.10.6", @@ -10902,7 +10914,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "40.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "scale-info", @@ -10914,7 +10926,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "26.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "docify", "integer-sqrt", @@ -10928,7 +10940,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "scale-info", @@ -10940,7 +10952,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "sp-api", "sp-inherents", @@ -10950,7 +10962,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "futures", "parity-scale-codec", @@ -10969,7 +10981,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.42.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "futures", @@ -10983,7 +10995,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.42.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "parity-scale-codec", @@ -10999,7 +11011,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.42.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "parity-scale-codec", @@ -11017,7 +11029,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "23.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "finality-grandpa", "log", @@ -11034,7 +11046,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.42.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "scale-info", @@ -11045,7 +11057,7 @@ dependencies = [ [[package]] name = "sp-core" version = "36.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "ark-vrf", "array-bytes", @@ -11106,7 +11118,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "blake2b_simd", "byteorder", @@ -11119,7 +11131,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "quote", "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", @@ -11129,7 +11141,7 @@ dependencies = [ [[package]] name = "sp-database" version = "10.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "kvdb", "parking_lot 0.12.4", @@ -11138,7 +11150,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "proc-macro2", "quote", @@ -11148,7 +11160,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.30.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "environmental", "parity-scale-codec", @@ -11158,7 +11170,7 @@ dependencies = [ [[package]] name = "sp-genesis-builder" version = "0.17.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "scale-info", @@ -11170,7 +11182,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11183,7 +11195,7 @@ dependencies = [ [[package]] name = "sp-io" version = "40.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "bytes", "docify", @@ -11209,7 +11221,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "41.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "sp-core", "sp-runtime", @@ -11219,7 +11231,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.42.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", @@ -11230,7 +11242,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -11239,7 +11251,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.10.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "frame-metadata 20.0.0", "parity-scale-codec", @@ -11249,7 +11261,7 @@ dependencies = [ [[package]] name = "sp-mixnet" version = "0.14.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "scale-info", @@ -11260,7 +11272,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "36.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "scale-info", @@ -11273,7 +11285,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "sp-api", "sp-core", @@ -11283,7 +11295,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "13.0.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "backtrace", "regex", @@ -11292,7 +11304,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "34.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "rustc-hash 1.1.0", "serde", @@ -11302,7 +11314,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "41.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "binary-merkle-tree", "docify", @@ -11331,7 +11343,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "29.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11350,7 +11362,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "18.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "Inflector", "expander", @@ -11363,7 +11375,7 @@ dependencies = [ [[package]] name = "sp-session" version = "38.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "scale-info", @@ -11377,7 +11389,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "38.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11390,7 +11402,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.45.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "hash-db", "log", @@ -11410,7 +11422,7 @@ dependencies = [ [[package]] name = "sp-statement-store" version = "20.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "aes-gcm", "curve25519-dalek", @@ -11434,12 +11446,12 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" [[package]] name = "sp-storage" version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11451,7 +11463,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "parity-scale-codec", @@ -11463,7 +11475,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "17.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "tracing", @@ -11474,7 +11486,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "sp-api", "sp-runtime", @@ -11483,7 +11495,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "36.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "async-trait", "parity-scale-codec", @@ -11497,7 +11509,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "39.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "ahash", "hash-db", @@ -11519,7 +11531,7 @@ dependencies = [ [[package]] name = "sp-version" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11536,7 +11548,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "15.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "parity-scale-codec", "proc-macro-warning", @@ -11548,7 +11560,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "21.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -11560,7 +11572,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "31.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -11626,7 +11638,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "staging-xcm" version = "16.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "array-bytes", "bounded-collections", @@ -11647,7 +11659,7 @@ dependencies = [ [[package]] name = "staging-xcm-builder" version = "20.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "environmental", "frame-support", @@ -11671,7 +11683,7 @@ dependencies = [ [[package]] name = "staging-xcm-executor" version = "19.1.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "environmental", "frame-benchmarking", @@ -11772,7 +11784,7 @@ dependencies = [ [[package]] name = "substrate-bip39" version = "0.6.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "hmac 0.12.1", "pbkdf2", @@ -11784,12 +11796,12 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "11.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" [[package]] name = "substrate-frame-rpc-system" version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "docify", "frame-system-rpc-runtime-api", @@ -11809,7 +11821,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.17.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "http-body-util", "hyper 1.7.0", @@ -11823,12 +11835,12 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" [[package]] name = "substrate-wasm-builder" version = "26.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "build-helper", "cargo_metadata", @@ -12236,12 +12248,17 @@ dependencies = [ [[package]] name = "time" -version = "0.3.43" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", +<<<<<<< HEAD "itoa", +======= + "itoa 1.0.15", + "num-conv", +>>>>>>> Fix toml files missing runtime-benchmark feature "powerfmt", "serde", "time-core", @@ -12413,9 +12430,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a197c0ec7d131bfc6f7e82c8442ba1595aeab35da7adbf05b6b73cd06a16b6be" +checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" dependencies = [ "serde_core", ] @@ -12426,7 +12443,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.3", + "indexmap 2.11.4", "serde", "serde_spanned", "toml_datetime 0.6.11", @@ -12436,21 +12453,21 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.5" +version = "0.23.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ad0b7ae9cfeef5605163839cb9221f453399f15cfb5c10be9885fcf56611f9" +checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" dependencies = [ - "indexmap 2.11.3", - "toml_datetime 0.7.1", + "indexmap 2.11.4", + "toml_datetime 0.7.2", "toml_parser", "winnow", ] [[package]] name = "toml_parser" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" +checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" dependencies = [ "winnow", ] @@ -12550,7 +12567,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "19.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "coarsetime", "polkadot-primitives", @@ -12561,7 +12578,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "expander", "proc-macro-crate 3.4.0", @@ -13182,7 +13199,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c9d90bb93e764f6beabf1d02028c70a2156a6583e63ac4218dd07ef733368b0" dependencies = [ "bitflags 2.9.4", - "indexmap 2.11.3", + "indexmap 2.11.4", "semver 1.0.27", ] @@ -14066,7 +14083,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "11.0.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#46f71edaa5eda58b1024857f538f5e602aacb7a8" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" dependencies = [ "Inflector", "proc-macro2", diff --git a/pallets/asset/Cargo.toml b/pallets/asset/Cargo.toml index 9b84d720d4..af9d823925 100644 --- a/pallets/asset/Cargo.toml +++ b/pallets/asset/Cargo.toml @@ -75,5 +75,11 @@ std = [ runtime-benchmarks = [ "frame-benchmarking", "pallet-identity/runtime-benchmarks", + "pallet-external-agents/runtime-benchmarks", + "pallet-permissions/runtime-benchmarks", + "pallet-portfolio/runtime-benchmarks", + "pallet-statistics/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", + "polymesh-runtime-common/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/committee/Cargo.toml b/pallets/committee/Cargo.toml index 08c85c573f..1aa046ea29 100644 --- a/pallets/committee/Cargo.toml +++ b/pallets/committee/Cargo.toml @@ -50,9 +50,12 @@ std = [ "polymesh-primitives/std", "pallet-identity/std", ] +try-runtime = ["frame-support/try-runtime"] runtime-benchmarks = [ - "frame-benchmarking", - "sp-runtime/runtime-benchmarks", + "frame-benchmarking/std", "frame-system/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", ] -try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/compliance-manager/Cargo.toml b/pallets/compliance-manager/Cargo.toml index 59bf62dbe4..aad6e0aee9 100644 --- a/pallets/compliance-manager/Cargo.toml +++ b/pallets/compliance-manager/Cargo.toml @@ -64,5 +64,11 @@ std = [ runtime-benchmarks = [ "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-external-agents/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", + "pallet-permissions/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/contracts/Cargo.toml b/pallets/contracts/Cargo.toml index 2af66f4bbc..3e941bde32 100644 --- a/pallets/contracts/Cargo.toml +++ b/pallets/contracts/Cargo.toml @@ -45,8 +45,13 @@ std = [ "wasm-instrument?/std", ] runtime-benchmarks = [ - "wasm-instrument", - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", "pallet-contracts/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", + "pallet-permissions/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", + "wasm-instrument", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/corporate-actions/Cargo.toml b/pallets/corporate-actions/Cargo.toml index 97a5130594..a0b6506100 100644 --- a/pallets/corporate-actions/Cargo.toml +++ b/pallets/corporate-actions/Cargo.toml @@ -66,6 +66,13 @@ std = [ ] runtime-benchmarks = [ "frame-benchmarking", - "pallet-compliance-manager" + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-asset/runtime-benchmarks", + "pallet-compliance-manager/std", + "pallet-compliance-manager/runtime-benchmarks", + "pallet-external-agents/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", + "pallet-portfolio/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/external-agents/Cargo.toml b/pallets/external-agents/Cargo.toml index 081140ca7d..f2ea8db9ba 100644 --- a/pallets/external-agents/Cargo.toml +++ b/pallets/external-agents/Cargo.toml @@ -45,6 +45,10 @@ std = [ ] runtime-benchmarks = [ "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", "pallet-identity/runtime-benchmarks", + "pallet-permissions/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/group/Cargo.toml b/pallets/group/Cargo.toml index 351ed0a9ba..a8ea9a49f4 100644 --- a/pallets/group/Cargo.toml +++ b/pallets/group/Cargo.toml @@ -55,7 +55,10 @@ std = [ runtime-benchmarks = [ "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", "pallet-identity/runtime-benchmarks", "pallet-permissions/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/identity/Cargo.toml b/pallets/identity/Cargo.toml index cce2903793..8a706de7f1 100644 --- a/pallets/identity/Cargo.toml +++ b/pallets/identity/Cargo.toml @@ -23,9 +23,7 @@ schnorrkel = { version = "0.11", default-features = false, optional = true } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } frame-support = { workspace = true, default-features = false } -scale-info = { workspace = true, default-features = false, features = [ - "derive", -] } +scale-info = { workspace = true, default-features = false, features = ["derive"] } frame-system = { workspace = true, default-features = false } pallet-timestamp = { workspace = true, default-features = false } sp-api = { workspace = true, default-features = false } @@ -37,9 +35,7 @@ sp-version = { workspace = true, default-features = false } # Only Benchmarking frame-benchmarking = { workspace = true, default-features = false, optional = true } -hex = { version = "^0.4.0", default-features = false, features = [ - "alloc", -], optional = true } +hex = { version = "^0.4.0", default-features = false, features = ["alloc"], optional = true } [features] equalize = [] @@ -66,5 +62,13 @@ std = [ "sp-std/std", "sp-version/std", ] -runtime-benchmarks = ["frame-benchmarking", "schnorrkel", "hex"] +runtime-benchmarks = [ + "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-permissions/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", + "schnorrkel", + "hex", +] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/multisig/Cargo.toml b/pallets/multisig/Cargo.toml index 6f5f171051..469c32b988 100644 --- a/pallets/multisig/Cargo.toml +++ b/pallets/multisig/Cargo.toml @@ -48,6 +48,10 @@ std = [ ] runtime-benchmarks = [ "frame-benchmarking", - "polymesh-primitives/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", + "pallet-permissions/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", ] try-runtime = [] diff --git a/pallets/nft/Cargo.toml b/pallets/nft/Cargo.toml index 73fe9ff338..37f5fbf4b6 100644 --- a/pallets/nft/Cargo.toml +++ b/pallets/nft/Cargo.toml @@ -42,5 +42,11 @@ std = [ ] runtime-benchmarks = [ "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-asset/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", + "pallet-portfolio/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/permissions/Cargo.toml b/pallets/permissions/Cargo.toml index d9027447c1..05658f35b2 100644 --- a/pallets/permissions/Cargo.toml +++ b/pallets/permissions/Cargo.toml @@ -36,6 +36,6 @@ std = [ "sp-std/std", ] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/std", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/permissions/src/benchmarking.rs b/pallets/permissions/src/benchmarking.rs index 7fb56eb7f9..6b1553988a 100644 --- a/pallets/permissions/src/benchmarking.rs +++ b/pallets/permissions/src/benchmarking.rs @@ -2,10 +2,12 @@ use crate::*; #[cfg(not(feature = "std"))] use alloc::string::String; + use frame_benchmarking::benchmarks; -use polymesh_primitives::{ExtrinsicName, PalletName}; use sp_std::{iter, prelude::*}; +use polymesh_primitives::{ExtrinsicName, PalletName}; + const MAX_PALLET_NAME_LENGTH: u32 = 512; const MAX_DISPATCHABLE_NAME_LENGTH: u32 = 1024; diff --git a/pallets/permissions/src/lib.rs b/pallets/permissions/src/lib.rs index 17cb7587fb..2c303f3919 100644 --- a/pallets/permissions/src/lib.rs +++ b/pallets/permissions/src/lib.rs @@ -153,9 +153,9 @@ pub mod pallet { #[derive(Decode, DecodeWithMemTracking, Encode)] #[derive(Clone, Default, Eq, PartialEq, TypeInfo)] #[scale_info(skip_type_params(T))] -pub struct StoreCallMetadata(PhantomData); +pub struct StoreCallMetadata(PhantomData); -impl fmt::Debug for StoreCallMetadata { +impl fmt::Debug for StoreCallMetadata { #[cfg(feature = "std")] fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "StoreCallMetadata<{:?}>", self.0) @@ -167,7 +167,7 @@ impl fmt::Debug for StoreCallMetadata { } } -impl StoreCallMetadata { +impl StoreCallMetadata { /// Constructs a new store for call metadata. pub fn new() -> Self { Self(Default::default()) diff --git a/pallets/pips/Cargo.toml b/pallets/pips/Cargo.toml index f92e90ab33..856e68f8ea 100644 --- a/pallets/pips/Cargo.toml +++ b/pallets/pips/Cargo.toml @@ -75,7 +75,10 @@ std = [ ] runtime-benchmarks = [ "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-committee/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", "rand", "rand_chacha", - "pallet-committee", ] diff --git a/pallets/portfolio/Cargo.toml b/pallets/portfolio/Cargo.toml index f99364c90a..040298ec96 100644 --- a/pallets/portfolio/Cargo.toml +++ b/pallets/portfolio/Cargo.toml @@ -47,7 +47,10 @@ std = [ ] runtime-benchmarks = [ "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", "pallet-identity/runtime-benchmarks", "pallet-permissions/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/protocol-fee/Cargo.toml b/pallets/protocol-fee/Cargo.toml index 1f8698d520..c54d38e447 100644 --- a/pallets/protocol-fee/Cargo.toml +++ b/pallets/protocol-fee/Cargo.toml @@ -46,6 +46,9 @@ std = [ ] runtime-benchmarks = [ "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", "pallet-identity/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks" ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/relayer/Cargo.toml b/pallets/relayer/Cargo.toml index ea51043321..c018515760 100644 --- a/pallets/relayer/Cargo.toml +++ b/pallets/relayer/Cargo.toml @@ -32,6 +32,8 @@ std = [ "polymesh-primitives/std", ] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/std", + "pallet-identity/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/settlement/Cargo.toml b/pallets/settlement/Cargo.toml index c9f354b4c2..5e7b1c9f70 100644 --- a/pallets/settlement/Cargo.toml +++ b/pallets/settlement/Cargo.toml @@ -66,5 +66,13 @@ std = [ ] runtime-benchmarks = [ "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-asset/runtime-benchmarks", + "pallet-compliance-manager/runtime-benchmarks", + "pallet-external-agents/runtime-benchmarks", + "pallet-nft/runtime-benchmarks", + "pallet-permissions/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks" ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/statistics/Cargo.toml b/pallets/statistics/Cargo.toml index d6f73f8b09..eb13b0da1c 100644 --- a/pallets/statistics/Cargo.toml +++ b/pallets/statistics/Cargo.toml @@ -58,8 +58,10 @@ std = [ "pallet-external-agents/std", ] runtime-benchmarks = [ - "frame-benchmarking", - "pallet-identity/runtime-benchmarks", + "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", "pallet-external-agents/runtime-benchmarks", + "pallet-identity/runtime-benchmarks" ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/sto/Cargo.toml b/pallets/sto/Cargo.toml index d150b79314..0b7e4f452c 100644 --- a/pallets/sto/Cargo.toml +++ b/pallets/sto/Cargo.toml @@ -64,6 +64,13 @@ std = [ "pallet-timestamp/std" ] runtime-benchmarks = [ - "frame-benchmarking" + "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-asset/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", + "pallet-settlement/runtime-benchmarks", + "polymesh-primitives/runtime-benchmarks", + "sp-runtime/runtime-benchmarks" ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/sto/src/benchmarking.rs b/pallets/sto/src/benchmarking.rs index 21fcf3ad9e..359a189471 100644 --- a/pallets/sto/src/benchmarking.rs +++ b/pallets/sto/src/benchmarking.rs @@ -1,5 +1,5 @@ use frame_benchmarking::benchmarks; -use frame_support::dispatch::DispatchError; +use frame_support::pallet_prelude::DispatchError; use scale_info::prelude::format; use sp_runtime::MultiSignature; diff --git a/pallets/treasury/Cargo.toml b/pallets/treasury/Cargo.toml index 3025c88fbe..3fbaee5298 100644 --- a/pallets/treasury/Cargo.toml +++ b/pallets/treasury/Cargo.toml @@ -54,5 +54,9 @@ std = [ runtime-benchmarks = [ "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", + "pallet-permissions/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/utility/Cargo.toml b/pallets/utility/Cargo.toml index f4ea2876ab..fd61f01b6f 100644 --- a/pallets/utility/Cargo.toml +++ b/pallets/utility/Cargo.toml @@ -42,8 +42,9 @@ std = [ ] runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/validators/Cargo.toml b/pallets/validators/Cargo.toml index 334a54c8b1..93bcb32dfb 100644 --- a/pallets/validators/Cargo.toml +++ b/pallets/validators/Cargo.toml @@ -46,7 +46,7 @@ sp-tracing = { workspace = true } default = ["std"] no_std = [] std = [ - "frame-benchmarking?/std", + "frame-benchmarking?/std", "polymesh-primitives/std", "serde/std", "codec/std", @@ -68,10 +68,11 @@ std = [ ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", - "frame-election-provider-support/runtime-benchmarks", - "rand_chacha", - "sp-staking/runtime-benchmarks", + "frame-election-provider-support/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", + "pallet-staking/runtime-benchmarks", "polymesh-primitives/runtime-benchmarks", - "pallet-identity/runtime-benchmarks", + "rand_chacha", + "sp-staking/runtime-benchmarks", ] try-runtime = [] From 9f79d7a23f9f1bc0b0f30d4e5ae19c7dbecce323 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 22 Sep 2025 18:29:39 -0300 Subject: [PATCH 82/97] Fix toml files for benchmarks part II --- Cargo.lock | 1585 ++++++++++++++------ pallets/contracts/src/benchmarking.rs | 45 +- pallets/runtime/develop/Cargo.toml | 94 +- pallets/transaction-payment/src/payment.rs | 6 - pallets/validators/src/benchmarking.rs | 26 +- 5 files changed, 1145 insertions(+), 611 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f499836ed6..c6e83ceeb6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,11 +23,11 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ - "gimli 0.31.1", + "gimli 0.32.3", ] [[package]] @@ -125,9 +125,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -541,7 +541,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror 2.0.16", + "thiserror 2.0.17", "time", ] @@ -652,7 +652,7 @@ dependencies = [ "polling", "rustix 1.1.2", "slab", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -710,7 +710,7 @@ dependencies = [ "rustix 1.1.2", "signal-hook-registry", "slab", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -798,17 +798,17 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ - "addr2line 0.24.2", + "addr2line 0.25.1", "cfg-if", "libc", "miniz_oxide", - "object 0.36.7", + "object 0.37.3", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -823,6 +823,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base256emoji" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" +dependencies = [ + "const-str", + "match-lookup", +] + [[package]] name = "base58" version = "0.2.0" @@ -850,7 +860,7 @@ checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "binary-merkle-tree" version = "16.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "hash-db", "log", @@ -1168,9 +1178,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1de8bc0aa9e9385ceb3bf0c152e3a9b9544f6c4a912c8ae504e80c1f0368603" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" dependencies = [ "serde_core", ] @@ -1200,9 +1210,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.38" +version = "1.2.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9" +checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" dependencies = [ "find-msvc-tools", "jobserver", @@ -1296,7 +1306,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-link 0.2.0", + "windows-link", ] [[package]] @@ -1357,9 +1367,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.47" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" +checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" dependencies = [ "clap_builder", "clap_derive", @@ -1367,9 +1377,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.47" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" +checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" dependencies = [ "anstream", "anstyle", @@ -1498,6 +1508,12 @@ dependencies = [ "tiny-keccak", ] +[[package]] +name = "const-str" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" + [[package]] name = "const_format" version = "0.2.34" @@ -1530,6 +1546,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + [[package]] name = "core-foundation" version = "0.9.4" @@ -1804,12 +1826,30 @@ dependencies = [ ] [[package]] -name = "ctr" -version = "0.8.0" +name = "cssparser" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa 0.4.8", + "matches", + "phf", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ - "cipher 0.3.0", + "quote", + "syn 2.0.106", ] [[package]] @@ -1824,7 +1864,7 @@ dependencies = [ [[package]] name = "cumulus-client-parachain-inherent" version = "0.17.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1844,7 +1884,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" version = "0.18.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -1860,7 +1900,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.18.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1874,7 +1914,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" version = "0.12.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -1884,7 +1924,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" version = "0.23.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1903,7 +1943,7 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.19.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -1942,9 +1982,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.185" +version = "1.0.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f81de88da10862f22b5b3a60f18f6f42bbe7cb8faa24845dd7b1e4e22190e77" +checksum = "4e9c4fe7f2f5dc5c62871a1b43992d197da6fa1394656a94276ac2894a90a6fe" dependencies = [ "cc", "cxx-build", @@ -1957,9 +1997,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.185" +version = "1.0.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5edd58bf75c3fdfc80d79806403af626570662f7b6cc782a7fabe156166bd6d6" +checksum = "b5cf2909d37d80633ddd208676fc27c2608a7f035fff69c882421168038b26dd" dependencies = [ "cc", "codespan-reporting", @@ -1972,9 +2012,9 @@ dependencies = [ [[package]] name = "cxxbridge-cmd" -version = "1.0.185" +version = "1.0.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd46bf2b541a4e0c2d5abba76607379ee05d68e714868e3cb406dc8d591ce2d2" +checksum = "077f5ee3d3bfd8d27f83208fdaa96ddd50af7f096c77077cc4b94da10bfacefd" dependencies = [ "clap", "codespan-reporting", @@ -1986,15 +2026,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.185" +version = "1.0.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c79b68f6a3a8f809d39b38ae8af61305a6113819b19b262643b9c21353b92d9" +checksum = "b0108748615125b9f2e915dfafdffcbdabbca9b15102834f6d7e9a768f2f2864" [[package]] name = "cxxbridge-macro" -version = "1.0.185" +version = "1.0.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862b7fdb048ff9ef0779a0d0a03affd09746c4c875543746b640756be9cff2af" +checksum = "e6e896681ef9b8dc462cfa6961d61909704bde0984b30bcb4082fe102b478890" dependencies = [ "indexmap 2.11.4", "proc-macro2", @@ -2118,9 +2158,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", ] @@ -2188,7 +2228,8 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.106", + "unicode-xid", ] [[package]] @@ -2328,6 +2369,15 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + [[package]] name = "dyn-clonable" version = "0.9.2" @@ -2423,6 +2473,12 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "ego-tree" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12a0bb14ac04a9fcf170d0bbbef949b44cc492f4452bd20c095636956f653642" + [[package]] name = "either" version = "1.15.0" @@ -2532,7 +2588,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -2753,7 +2809,7 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "fork-tree" version = "13.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", ] @@ -2786,7 +2842,7 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" version = "40.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-support", "frame-support-procedural", @@ -2810,7 +2866,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "48.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "Inflector", "array-bytes", @@ -2831,7 +2887,7 @@ dependencies = [ "polkadot-parachain-primitives", "polkadot-primitives", "rand 0.8.5", - "rand_pcg", + "rand_pcg 0.3.1", "sc-block-builder", "sc-chain-spec", "sc-cli", @@ -2884,7 +2940,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "16.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -2895,7 +2951,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "40.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2911,7 +2967,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "40.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "aquamarine", "frame-support", @@ -2953,7 +3009,7 @@ dependencies = [ [[package]] name = "frame-support" version = "40.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "aquamarine", "array-bytes", @@ -2994,7 +3050,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "33.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "Inflector", "cfg-expr", @@ -3014,7 +3070,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "13.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 3.4.0", @@ -3026,7 +3082,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "12.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "proc-macro2", "quote", @@ -3036,7 +3092,7 @@ dependencies = [ [[package]] name = "frame-system" version = "40.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "cfg-if", "docify", @@ -3055,7 +3111,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "40.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-benchmarking", "frame-support", @@ -3069,7 +3125,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "docify", "parity-scale-codec", @@ -3079,7 +3135,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.46.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-support", "parity-scale-codec", @@ -3112,6 +3168,16 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + [[package]] name = "futures" version = "0.3.31" @@ -3251,20 +3317,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "generator" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2" -dependencies = [ - "cc", - "cfg-if", - "libc", - "log", - "rustversion", - "windows 0.61.3", -] - [[package]] name = "generic-array" version = "0.12.4" @@ -3295,6 +3347,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "getopts" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" +dependencies = [ + "unicode-width", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -3374,6 +3435,12 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "gimli" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" + [[package]] name = "glob" version = "0.3.3" @@ -3658,7 +3725,7 @@ dependencies = [ "once_cell", "rand 0.9.2", "ring 0.17.14", - "thiserror 2.0.16", + "thiserror 2.0.17", "tinyvec", "tokio", "tracing", @@ -3702,7 +3769,7 @@ dependencies = [ "rand 0.9.2", "resolv-conf", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -3747,12 +3814,17 @@ dependencies = [ ] [[package]] -name = "home" -version = "0.5.11" +name = "html5ever" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" dependencies = [ - "windows-sys 0.59.0", + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -3763,7 +3835,7 @@ checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", - "itoa", + "itoa 1.0.15", ] [[package]] @@ -3853,9 +3925,9 @@ dependencies = [ "http-body 0.4.6", "httparse", "httpdate", - "itoa", - "pin-project-lite 0.2.13", - "socket2 0.4.10", + "itoa 1.0.15", + "pin-project-lite", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -3936,7 +4008,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.0", + "windows-core 0.62.1", ] [[package]] @@ -4091,7 +4163,7 @@ dependencies = [ "rtnetlink", "system-configuration", "tokio", - "windows 0.53.0", + "windows", ] [[package]] @@ -4336,7 +4408,13 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.10" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" @@ -4402,9 +4480,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.80" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -4632,18 +4710,18 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.176" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.53.3", + "windows-link", ] [[package]] @@ -4791,7 +4869,7 @@ dependencies = [ "quick-protobuf", "rand 0.8.5", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", "zeroize", ] @@ -5255,7 +5333,7 @@ dependencies = [ "smallvec", "snow", "socket2 0.5.10", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-tungstenite", @@ -5287,19 +5365,6 @@ version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" -[[package]] -name = "loom" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "tracing", - "tracing-subscriber", -] - [[package]] name = "lru" version = "0.12.5" @@ -5343,6 +5408,12 @@ dependencies = [ "libc", ] +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + [[package]] name = "mach" version = "0.3.2" @@ -5353,10 +5424,77 @@ dependencies = [ ] [[package]] -name = "match_cfg" -version = "0.1.0" +name = "macro_magic" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc33f9f0351468d26fbc53d9ce00a096c8522ecb42f19b50f34f2c422f76d21d" +dependencies = [ + "macro_magic_core", + "macro_magic_macros", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "macro_magic_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1687dc887e42f352865a393acae7cf79d98fab6351cde1f58e9e057da89bf150" +dependencies = [ + "const-random", + "derive-syn-parse", + "macro_magic_core_macros", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "macro_magic_core_macros" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "macro_magic_macros" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" +dependencies = [ + "macro_magic_core", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "markup5ever" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" +dependencies = [ + "log", + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "match-lookup" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" +checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] name = "matchers" @@ -5385,9 +5523,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memfd" @@ -5525,20 +5663,19 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.10" +version = "0.12.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" dependencies = [ "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", - "loom", + "equivalent", "parking_lot 0.12.4", "portable-atomic", "rustc_version 0.4.1", "smallvec", "tagptr", - "thiserror 1.0.69", "uuid", ] @@ -5588,11 +5725,12 @@ dependencies = [ [[package]] name = "multibase" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" dependencies = [ "base-x", + "base256emoji", "data-encoding", "data-encoding-macro", ] @@ -5736,7 +5874,7 @@ dependencies = [ "log", "netlink-packet-core", "netlink-sys", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -5752,6 +5890,24 @@ dependencies = [ "tokio", ] +[[package]] +name = "network-interface" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07709a6d4eba90ab10ec170a0530b3aafc81cb8a2d380e4423ae41fc55fe5745" +dependencies = [ + "cc", + "libc", + "thiserror 2.0.17", + "winapi", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + [[package]] name = "nix" version = "0.26.4" @@ -5815,6 +5971,12 @@ dependencies = [ "sp-weights", ] +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + [[package]] name = "nohash-hasher" version = "0.2.0" @@ -5894,8 +6056,8 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "arrayvec 0.7.4", - "itoa", + "arrayvec 0.7.6", + "itoa 1.0.15", ] [[package]] @@ -5959,6 +6121,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "object" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +dependencies = [ + "memchr", +] + [[package]] name = "oid-registry" version = "0.7.1" @@ -6089,7 +6260,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion" version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6107,7 +6278,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-support", "frame-system", @@ -6122,7 +6293,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-support", "frame-system", @@ -6135,7 +6306,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6158,7 +6329,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "41.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "docify", "frame-benchmarking", @@ -6244,7 +6415,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "40.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "environmental", "frame-benchmarking", @@ -6258,7 +6429,7 @@ dependencies = [ "parity-scale-codec", "paste", "rand 0.8.5", - "rand_pcg", + "rand_pcg 0.3.1", "scale-info", "serde", "smallvec", @@ -6275,7 +6446,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "23.0.3" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "proc-macro2", "quote", @@ -6285,7 +6456,7 @@ dependencies = [ [[package]] name = "pallet-contracts-uapi" version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -6327,7 +6498,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "39.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6349,7 +6520,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6383,7 +6554,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6489,7 +6660,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "39.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6508,7 +6679,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6523,7 +6694,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "28.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -6575,7 +6746,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-support", "frame-system", @@ -6659,7 +6830,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-benchmarking", "frame-support", @@ -6743,7 +6914,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "41.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "docify", "frame-benchmarking", @@ -6760,7 +6931,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "40.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-support", "frame-system", @@ -6814,7 +6985,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "40.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6836,7 +7007,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "12.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -6847,7 +7018,7 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" version = "26.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "sp-api", @@ -6928,7 +7099,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "docify", "frame-benchmarking", @@ -6965,7 +7136,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-benchmarking", "frame-support", @@ -7240,6 +7411,15 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "permissions" +version = "0.1.0" +dependencies = [ + "lazy_static", + "regex", + "scraper", +] + [[package]] name = "pest" version = "2.8.2" @@ -7247,7 +7427,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21e0a3a33733faeaf8651dfee72dd0f388f0c8e5ad496a3478fa5a922f49cfa8" dependencies = [ "memchr", - "thiserror 2.0.16", + "thiserror 2.0.17", "ucd-trie", ] @@ -7305,94 +7485,474 @@ dependencies = [ ] [[package]] -name = "pin-project" -version = "1.1.10" +name = "phf" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2eb703f3b6404c13228402e98a5eae063fd16b8f58afe334073ec105ee4117e" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" dependencies = [ - "polkavm-derive-impl-macro", + "phf_macros", + "phf_shared 0.8.0", + "proc-macro-hack", ] [[package]] -name = "polkavm-derive-impl" -version = "0.18.1" +name = "phf_codegen" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f2116a92e6e96220a398930f4c8a6cda1264206f3e2034fc9982bfd93f261f7" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" dependencies = [ - "polkavm-common", - "proc-macro2", - "quote", - "syn 2.0.106", + "phf_generator 0.8.0", + "phf_shared 0.8.0", ] [[package]] -name = "polkavm-derive-impl-macro" -version = "0.18.0" +name = "phf_generator" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c16669ddc7433e34c1007d31080b80901e3e8e523cb9d4b441c3910cf9294b" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" dependencies = [ - "polkavm-derive-impl", - "syn 2.0.104", + "phf_shared 0.8.0", + "rand 0.7.3", ] [[package]] -name = "polkavm-linker" -version = "0.18.0" +name = "phf_generator" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9bfe793b094d9ea5c99b7c43ba46e277b0f8f48f4bbfdbabf8d3ebf701a4bd3" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "dirs", - "gimli 0.31.1", - "hashbrown 0.14.5", - "log", - "object 0.36.7", - "polkavm-common", - "regalloc2 0.9.3", - "rustc-demangle", + "phf_shared 0.11.3", + "rand 0.8.5", ] [[package]] -name = "polkavm-linux-raw" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23eff02c070c70f31878a3d915e88a914ecf3e153741e2fb572dde28cce20fde" - -[[package]] -<<<<<<< HEAD -name = "polling" -version = "3.8.0" +name = "phf_macros" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" -======= -name = "polkadot-core-primitives" -version = "17.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" ->>>>>>> Fix toml files missing runtime-benchmark feature +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi 0.5.2", - "pin-project-lite", - "rustix 1.0.8", - "tracing", - "windows-sys 0.59.0", + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "poly1305" +name = "phf_shared" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" dependencies = [ - "cpufeatures", - "opaque-debug 0.3.1", - "universal-hash", + "siphasher 0.3.11", ] [[package]] -name = "polymesh" -version = "7.3.0" -dependencies = [ +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.1", +] + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "polkadot-core-primitives" +version = "17.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "polkadot-node-metrics" +version = "23.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" +dependencies = [ + "bs58", + "futures", + "futures-timer", + "parity-scale-codec", + "polkadot-primitives", + "prioritized-metered-channel", + "sc-cli", + "sc-service", + "sc-tracing", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "polkadot-node-network-protocol" +version = "23.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" +dependencies = [ + "async-channel 1.9.0", + "async-trait", + "bitvec", + "derive_more 0.99.20", + "fatality", + "futures", + "hex", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-primitives", + "rand 0.8.5", + "sc-authority-discovery", + "sc-network", + "sc-network-types", + "sp-runtime", + "strum 0.26.3", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-primitives" +version = "19.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" +dependencies = [ + "bitvec", + "bounded-vec", + "futures", + "futures-timer", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives", + "sc-keystore", + "schnorrkel", + "serde", + "sp-application-crypto", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-keystore", + "sp-maybe-compressed-blob", + "thiserror 1.0.69", + "zstd 0.12.4", +] + +[[package]] +name = "polkadot-node-subsystem-types" +version = "23.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" +dependencies = [ + "async-trait", + "derive_more 0.99.20", + "fatality", + "futures", + "orchestra", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-primitives", + "polkadot-statement-table", + "sc-client-api", + "sc-network", + "sc-network-types", + "sc-transaction-pool-api", + "smallvec", + "sp-api", + "sp-authority-discovery", + "sp-blockchain", + "sp-consensus-babe", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "polkadot-overseer" +version = "23.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "orchestra", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem-types", + "polkadot-primitives", + "sc-client-api", + "sp-core", + "tikv-jemalloc-ctl", + "tracing-gum", +] + +[[package]] +name = "polkadot-parachain-primitives" +version = "16.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" +dependencies = [ + "bounded-collections", + "derive_more 0.99.20", + "parity-scale-codec", + "polkadot-core-primitives", + "scale-info", + "serde", + "sp-core", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "polkadot-primitives" +version = "18.2.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" +dependencies = [ + "bitvec", + "hex-literal 0.4.1", + "log", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-authority-discovery", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-staking", + "sp-std", + "thiserror 1.0.69", +] + +[[package]] +name = "polkadot-sdk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb819108697967452fa6d8d96ab4c0d48cbaa423b3156499dcb24f1cf95d6775" +dependencies = [ + "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "polkadot-sdk-frame" +version = "0.9.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-arithmetic", + "sp-block-builder", + "sp-consensus-aura", + "sp-consensus-grandpa", + "sp-core", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-storage", + "sp-transaction-pool", + "sp-version", +] + +[[package]] +name = "polkadot-statement-table" +version = "19.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" +dependencies = [ + "parity-scale-codec", + "polkadot-primitives", + "tracing-gum", +] + +[[package]] +name = "polkavm" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd044ab1d3b11567ab6b98ca71259a992b4034220d5972988a0e96518e5d343d" +dependencies = [ + "libc", + "log", + "polkavm-assembler", + "polkavm-common", + "polkavm-linux-raw", +] + +[[package]] +name = "polkavm-assembler" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaad38dc420bfed79e6f731471c973ce5ff5e47ab403e63cf40358fef8a6368f" +dependencies = [ + "log", +] + +[[package]] +name = "polkavm-common" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ff33982a807d8567645d4784b9b5d7ab87bcb494f534a57cadd9012688e102" +dependencies = [ + "log", + "polkavm-assembler", +] + +[[package]] +name = "polkavm-derive" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2eb703f3b6404c13228402e98a5eae063fd16b8f58afe334073ec105ee4117e" +dependencies = [ + "polkavm-derive-impl-macro", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f2116a92e6e96220a398930f4c8a6cda1264206f3e2034fc9982bfd93f261f7" +dependencies = [ + "polkavm-common", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c16669ddc7433e34c1007d31080b80901e3e8e523cb9d4b441c3910cf9294b" +dependencies = [ + "polkavm-derive-impl", + "syn 2.0.106", +] + +[[package]] +name = "polkavm-linker" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9bfe793b094d9ea5c99b7c43ba46e277b0f8f48f4bbfdbabf8d3ebf701a4bd3" +dependencies = [ + "dirs", + "gimli 0.31.1", + "hashbrown 0.14.5", + "log", + "object 0.36.7", + "polkavm-common", + "regalloc2 0.9.3", + "rustc-demangle", +] + +[[package]] +name = "polkavm-linux-raw" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23eff02c070c70f31878a3d915e88a914ecf3e153741e2fb572dde28cce20fde" + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.5.2", + "pin-project-lite", + "rustix 1.1.2", + "windows-sys 0.61.1", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.1", + "universal-hash", +] + +[[package]] +name = "polymesh" +version = "8.0.0" +dependencies = [ "clap", "frame-benchmarking", "frame-benchmarking-cli", @@ -7690,7 +8250,6 @@ dependencies = [ "pallet-utility", "pallet-validators", "parity-scale-codec", - "polymesh-build-tool", "polymesh-common-utilities", "polymesh-contracts", "polymesh-primitives", @@ -7715,6 +8274,7 @@ dependencies = [ "sp-std", "sp-transaction-pool", "sp-version", + "substrate-wasm-builder", ] [[package]] @@ -8065,6 +8625,12 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + [[package]] name = "predicates" version = "3.1.3" @@ -8243,9 +8809,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" dependencies = [ "dtoa", - "itoa", - "parking_lot 0.12.1", - "prometheus-client-derive-text-encode", + "itoa 1.0.15", + "parking_lot 0.12.4", + "prometheus-client-derive-encode", ] [[package]] @@ -8401,7 +8967,7 @@ dependencies = [ "rustc-hash 2.1.1", "rustls", "socket2 0.6.0", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -8422,7 +8988,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.16", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -8444,9 +9010,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -8474,6 +9040,7 @@ dependencies = [ "rand_chacha 0.2.2", "rand_core 0.5.1", "rand_hc", + "rand_pcg 0.2.1", ] [[package]] @@ -8573,6 +9140,15 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + [[package]] name = "rand_pcg" version = "0.3.1" @@ -8660,18 +9236,18 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", @@ -8705,9 +9281,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.2" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ "aho-corasick", "memchr", @@ -8717,9 +9293,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ "aho-corasick", "memchr", @@ -8916,7 +9492,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -9076,7 +9652,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "31.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "log", "sp-core", @@ -9087,7 +9663,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "futures", @@ -9115,7 +9691,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "futures", "log", @@ -9136,7 +9712,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.44.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "sp-api", @@ -9151,7 +9727,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "43.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "array-bytes", "docify", @@ -9177,7 +9753,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "12.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -9188,7 +9764,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.52.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "array-bytes", "chrono", @@ -9230,7 +9806,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "fnv", "futures", @@ -9256,7 +9832,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.46.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "hash-db", "kvdb", @@ -9282,7 +9858,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "futures", @@ -9305,7 +9881,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "fork-tree", @@ -9341,7 +9917,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "futures", "jsonrpsee", @@ -9363,7 +9939,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "fork-tree", "parity-scale-codec", @@ -9376,7 +9952,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.35.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "ahash", "array-bytes", @@ -9420,7 +9996,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" version = "0.35.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "finality-grandpa", "futures", @@ -9440,7 +10016,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "futures", @@ -9463,7 +10039,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.42.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", @@ -9486,7 +10062,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.38.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "polkavm", "sc-allocator", @@ -9499,7 +10075,7 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" version = "0.35.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "log", "polkavm", @@ -9510,7 +10086,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.38.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "anyhow", "log", @@ -9526,7 +10102,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "console", "futures", @@ -9542,7 +10118,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "35.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "array-bytes", "parking_lot 0.12.4", @@ -9556,7 +10132,7 @@ dependencies = [ [[package]] name = "sc-mixnet" version = "0.20.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "array-bytes", "arrayvec 0.7.6", @@ -9584,7 +10160,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -9634,7 +10210,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.48.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -9644,7 +10220,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "ahash", "futures", @@ -9663,7 +10239,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -9684,7 +10260,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -9719,7 +10295,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "array-bytes", "futures", @@ -9738,7 +10314,7 @@ dependencies = [ [[package]] name = "sc-network-types" version = "0.16.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "bs58", "bytes", @@ -9757,7 +10333,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "bytes", "fnv", @@ -9791,7 +10367,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.20.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9800,7 +10376,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "futures", "jsonrpsee", @@ -9832,7 +10408,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -9852,7 +10428,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "dyn-clone", "forwarded-header-value", @@ -9876,7 +10452,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "array-bytes", "futures", @@ -9909,7 +10485,7 @@ dependencies = [ [[package]] name = "sc-runtime-utilities" version = "0.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "sc-executor", @@ -9924,7 +10500,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.51.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "directories", @@ -9988,7 +10564,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.38.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "log", "parity-scale-codec", @@ -9999,7 +10575,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.50.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10018,14 +10594,14 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "42.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "derive_more 0.99.20", "futures", "libc", "log", "rand 0.8.5", - "rand_pcg", + "rand_pcg 0.3.1", "regex", "sc-telemetry", "serde", @@ -10038,7 +10614,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "28.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "chrono", "futures", @@ -10057,7 +10633,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "chrono", "console", @@ -10085,7 +10661,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "11.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -10096,7 +10672,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "futures", @@ -10128,7 +10704,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "futures", @@ -10145,7 +10721,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "18.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-channel 1.9.0", "futures", @@ -10298,7 +10874,7 @@ version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -10331,18 +10907,28 @@ dependencies = [ "zeroize", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "scraper" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e02aa790c80c2e494130dec6a522033b6a23603ffc06360e9fe6c611ea2c12" +dependencies = [ + "cssparser", + "ego-tree", + "getopts", + "html5ever", + "matches", + "selectors", + "smallvec", + "tendril", +] + [[package]] name = "scratch" version = "1.0.9" @@ -10452,9 +11038,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.4.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b369d18893388b345804dc0007963c99b7d665ae71d275812d828c6f089640" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ "bitflags 2.9.4", "core-foundation 0.10.1", @@ -10473,6 +11059,26 @@ dependencies = [ "libc", ] +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags 1.3.2", + "cssparser", + "derive_more 0.99.20", + "fxhash", + "log", + "matches", + "phf", + "phf_codegen", + "precomputed-hash", + "servo_arc", + "smallvec", + "thin-slice", +] + [[package]] name = "semver" version = "0.6.0" @@ -10509,9 +11115,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -10529,18 +11135,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -10553,23 +11159,40 @@ version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ - "itoa", + "itoa 1.0.15", + "memchr", "ryu", "serde", "serde_core", ] [[package]] -name = "sha-1" -version = "0.9.8" +name = "serde_spanned" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.1", + "serde", +] + +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", ] [[package]] @@ -10878,7 +11501,7 @@ dependencies = [ [[package]] name = "sp-api" version = "36.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "docify", "hash-db", @@ -10900,7 +11523,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "22.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "Inflector", "blake2 0.10.6", @@ -10914,7 +11537,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "40.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "scale-info", @@ -10926,7 +11549,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "26.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "docify", "integer-sqrt", @@ -10940,7 +11563,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "scale-info", @@ -10952,7 +11575,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "sp-api", "sp-inherents", @@ -10962,7 +11585,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "futures", "parity-scale-codec", @@ -10981,7 +11604,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.42.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "futures", @@ -10995,7 +11618,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.42.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "parity-scale-codec", @@ -11011,7 +11634,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.42.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "parity-scale-codec", @@ -11029,7 +11652,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "23.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "finality-grandpa", "log", @@ -11046,7 +11669,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.42.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "scale-info", @@ -11057,7 +11680,7 @@ dependencies = [ [[package]] name = "sp-core" version = "36.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "ark-vrf", "array-bytes", @@ -11118,7 +11741,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "blake2b_simd", "byteorder", @@ -11131,7 +11754,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "quote", "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", @@ -11141,7 +11764,7 @@ dependencies = [ [[package]] name = "sp-database" version = "10.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "kvdb", "parking_lot 0.12.4", @@ -11150,7 +11773,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "proc-macro2", "quote", @@ -11160,7 +11783,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.30.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "environmental", "parity-scale-codec", @@ -11170,7 +11793,7 @@ dependencies = [ [[package]] name = "sp-genesis-builder" version = "0.17.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "scale-info", @@ -11182,7 +11805,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -11195,7 +11818,7 @@ dependencies = [ [[package]] name = "sp-io" version = "40.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "bytes", "docify", @@ -11221,7 +11844,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "41.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "sp-core", "sp-runtime", @@ -11231,7 +11854,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.42.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "parking_lot 0.12.4", @@ -11242,7 +11865,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -11251,7 +11874,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.10.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "frame-metadata 20.0.0", "parity-scale-codec", @@ -11261,7 +11884,7 @@ dependencies = [ [[package]] name = "sp-mixnet" version = "0.14.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "scale-info", @@ -11272,7 +11895,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "36.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "scale-info", @@ -11285,7 +11908,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "sp-api", "sp-core", @@ -11295,7 +11918,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "13.0.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "backtrace", "regex", @@ -11304,7 +11927,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "34.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "rustc-hash 1.1.0", "serde", @@ -11314,7 +11937,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "41.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "binary-merkle-tree", "docify", @@ -11343,7 +11966,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "29.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -11362,7 +11985,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "18.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "Inflector", "expander", @@ -11375,7 +11998,7 @@ dependencies = [ [[package]] name = "sp-session" version = "38.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "scale-info", @@ -11389,7 +12012,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "38.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -11402,7 +12025,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.45.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "hash-db", "log", @@ -11422,7 +12045,7 @@ dependencies = [ [[package]] name = "sp-statement-store" version = "20.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "aes-gcm", "curve25519-dalek", @@ -11446,12 +12069,12 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" [[package]] name = "sp-storage" version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11463,7 +12086,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "parity-scale-codec", @@ -11475,7 +12098,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "17.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "tracing", @@ -11486,7 +12109,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "sp-api", "sp-runtime", @@ -11495,7 +12118,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "36.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "async-trait", "parity-scale-codec", @@ -11509,7 +12132,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "39.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "ahash", "hash-db", @@ -11531,7 +12154,7 @@ dependencies = [ [[package]] name = "sp-version" version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11548,7 +12171,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "15.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", "proc-macro-warning", @@ -11560,7 +12183,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "21.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -11572,7 +12195,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "31.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -11638,7 +12261,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "staging-xcm" version = "16.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "array-bytes", "bounded-collections", @@ -11659,7 +12282,7 @@ dependencies = [ [[package]] name = "staging-xcm-builder" version = "20.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "environmental", "frame-support", @@ -11683,7 +12306,7 @@ dependencies = [ [[package]] name = "staging-xcm-executor" version = "19.1.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "environmental", "frame-benchmarking", @@ -11734,6 +12357,42 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "string-interner" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c6a0d765f5807e98a091107bae0a56ea3799f66a5de47b2c84c94a39c09974e" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "serde", +] + +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot 0.12.4", + "phf_shared 0.11.3", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", +] + [[package]] name = "strsim" version = "0.11.1" @@ -11784,7 +12443,7 @@ dependencies = [ [[package]] name = "substrate-bip39" version = "0.6.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "hmac 0.12.1", "pbkdf2", @@ -11796,12 +12455,12 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "11.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" [[package]] name = "substrate-frame-rpc-system" version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "docify", "frame-system-rpc-runtime-api", @@ -11821,7 +12480,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.17.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "http-body-util", "hyper 1.7.0", @@ -11835,12 +12494,12 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" [[package]] name = "substrate-wasm-builder" version = "26.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "build-helper", "cargo_metadata", @@ -12125,15 +12784,26 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.22.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", "rustix 1.1.2", - "windows-sys 0.61.0", + "windows-sys 0.61.1", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", ] [[package]] @@ -12161,6 +12831,12 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + [[package]] name = "thiserror" version = "1.0.69" @@ -12172,11 +12848,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.16", + "thiserror-impl 2.0.17", ] [[package]] @@ -12192,9 +12868,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", @@ -12253,12 +12929,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", -<<<<<<< HEAD - "itoa", -======= "itoa 1.0.15", "num-conv", ->>>>>>> Fix toml files missing runtime-benchmark feature "powerfmt", "serde", "time-core", @@ -12348,9 +13020,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.3" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f63835928ca123f1bef57abbcd23bb2ba0ac9ae1235f1e65bda0d06e7786bd" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -12567,7 +13239,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "19.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "coarsetime", "polkadot-primitives", @@ -12578,7 +13250,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "expander", "proc-macro-crate 3.4.0", @@ -12666,7 +13338,7 @@ dependencies = [ "rustls", "rustls-pki-types", "sha1", - "thiserror 2.0.16", + "thiserror 2.0.17", "url", "utf-8", ] @@ -12815,8 +13487,14 @@ dependencies = [ ] [[package]] -name = "utf8parse" -version = "0.2.1" +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" @@ -12989,9 +13667,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", @@ -13002,9 +13680,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", @@ -13016,9 +13694,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.53" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -13029,9 +13707,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -13039,9 +13717,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", @@ -13052,9 +13730,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] @@ -13431,9 +14109,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.80" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -13511,7 +14189,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.0", + "windows-sys 0.61.1", ] [[package]] @@ -13530,28 +14208,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows" -version = "0.61.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" -dependencies = [ - "windows-collections", - "windows-core 0.61.2", - "windows-future", - "windows-link 0.1.3", - "windows-numerics", -] - -[[package]] -name = "windows-collections" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" -dependencies = [ - "windows-core 0.61.2", -] - [[package]] name = "windows-core" version = "0.53.0" @@ -13564,46 +14220,22 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "6844ee5416b285084d3d3fffd743b925a6c9385455f64f6d4fa3031c4c2749a9" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", -] - -[[package]] -name = "windows-core" -version = "0.62.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.2.0", + "windows-link", "windows-result 0.4.0", - "windows-strings 0.5.0", -] - -[[package]] -name = "windows-future" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" -dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", - "windows-threading", + "windows-strings", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0" dependencies = [ "proc-macro2", "quote", @@ -13612,37 +14244,21 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - [[package]] name = "windows-link" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" -[[package]] -name = "windows-numerics" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" -dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", -] - [[package]] name = "windows-result" version = "0.1.2" @@ -13652,31 +14268,13 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-result" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" -dependencies = [ - "windows-link 0.1.3", -] - [[package]] name = "windows-result" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" dependencies = [ - "windows-link 0.2.0", -] - -[[package]] -name = "windows-strings" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" -dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] @@ -13685,7 +14283,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" dependencies = [ - "windows-link 0.2.0", + "windows-link", ] [[package]] @@ -13730,16 +14328,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.3", + "windows-targets 0.53.4", ] [[package]] name = "windows-sys" -version = "0.61.0" +version = "0.61.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" dependencies = [ - "windows-link 0.2.0", + "windows-link", ] [[package]] @@ -13790,11 +14388,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" dependencies = [ - "windows-link 0.1.3", + "windows-link", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -13805,15 +14403,6 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] -[[package]] -name = "windows-threading" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" -dependencies = [ - "windows-link 0.1.3", -] - [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -14076,14 +14665,14 @@ dependencies = [ "nom", "oid-registry 0.8.1", "rusticata-macros", - "thiserror 2.0.16", + "thiserror 2.0.17", "time", ] [[package]] name = "xcm-procedural" version = "11.0.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#7ab486dbc6e28684d4072bebef2175cf1f972805" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "Inflector", "proc-macro2", @@ -14219,9 +14808,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] @@ -14316,4 +14905,4 @@ checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", -] +] \ No newline at end of file diff --git a/pallets/contracts/src/benchmarking.rs b/pallets/contracts/src/benchmarking.rs index 0553d160ed..b19ea022da 100644 --- a/pallets/contracts/src/benchmarking.rs +++ b/pallets/contracts/src/benchmarking.rs @@ -15,13 +15,11 @@ use codec::Encode; use frame_benchmarking::{account, benchmarks}; -use frame_support::{storage::unhashed, traits::tokens::currency::Currency}; +use frame_support::storage::unhashed; +use frame_support::traits::tokens::currency::Currency; use frame_system::{Pallet as System, RawOrigin}; -use pallet_contracts::benchmarking::code::body::DynInstr::{Counter, Regular}; -use pallet_contracts::benchmarking::code::{ - body, max_pages, DataSegment, ImportedFunction, ImportedMemory, Location, ModuleDefinition, - WasmModule, -}; +use pallet_contracts::benchmarking::code::{body, ImportedMemory, ModuleDefinition, WasmModule}; +use pallet_contracts::benchmarking::code::{max_pages, DataSegment, ImportedFunction, Location}; use pallet_contracts::Pallet as FrameContracts; use sp_runtime::traits::StaticLookup; use sp_runtime::Perbill; @@ -32,14 +30,13 @@ use pallet_identity::benchmarking::{cdd_provider, user, User, UserBuilder}; use pallet_identity::ParentDid; use polymesh_primitives::asset::AssetId; use polymesh_primitives::constants::currency::POLY; -use polymesh_primitives::identity::limits::{ - MAX_ASSETS, MAX_EXTRINSICS, MAX_PALLETS, MAX_PORTFOLIOS, -}; +use polymesh_primitives::identity::limits::{MAX_ASSETS, MAX_EXTRINSICS}; +use polymesh_primitives::identity::limits::{MAX_PALLETS, MAX_PORTFOLIOS}; use polymesh_primitives::secondary_key::ExtrinsicNames; -use polymesh_primitives::{ - traits::group::GroupTrait, AssetPermissions, Balance, ExtrinsicName, ExtrinsicPermissions, - PalletName, PalletPermissions, Permissions, PortfolioId, PortfolioNumber, PortfolioPermissions, -}; +use polymesh_primitives::traits::group::GroupTrait; +use polymesh_primitives::{AssetPermissions, Balance, ExtrinsicName, ExtrinsicPermissions}; +use polymesh_primitives::{PalletName, PalletPermissions, Permissions, PortfolioId}; +use polymesh_primitives::{PortfolioNumber, PortfolioPermissions}; use crate::chain_extension::*; use crate::*; @@ -229,17 +226,17 @@ where value: output_len.to_le_bytes().into(), }, ], - call_body: Some(body::repeated_dyn( + call_body: Some(body::repeated( repetitions, - vec![ - Regular(Instruction::I32Const(FuncId::GetKeyDid.into())), - Counter(0, key_len), - Regular(Instruction::I32Const(key_len as i32)), - Regular(Instruction::I32Const(input.len() as i32 + 4)), - Regular(Instruction::I32Const(input.len() as i32)), - Regular(Instruction::Call(0)), - Regular(Instruction::Drop), - ], + &[ + Instruction::I32Const(FuncId::GetKeyDid.into()), + Instruction::I32Const(0), + Instruction::I32Const(key_len as i32), + Instruction::I32Const(input.len() as i32 + 4), + Instruction::I32Const(input.len() as i32), + Instruction::Call(0), + Instruction::Drop, + ] )), ..Default::default() }); @@ -492,7 +489,7 @@ benchmarks! { let salt = vec![42u8; s as usize]; // Create a dummy contract. - let wasm = WasmModule::::sized(c, Location::Deploy); + let wasm = WasmModule::::sized(c, Location::Deploy, false); let code = Code::Upload(wasm.code.clone()); let user = funded_user::(SEED); diff --git a/pallets/runtime/develop/Cargo.toml b/pallets/runtime/develop/Cargo.toml index 2bcabfbc5c..18327ae5ac 100644 --- a/pallets/runtime/develop/Cargo.toml +++ b/pallets/runtime/develop/Cargo.toml @@ -100,6 +100,9 @@ frame-benchmarking = { workspace = true, default-features = false, optional = tr frame-system-benchmarking = { workspace = true, default-features = false, optional = true } hex-literal = { version = "0.3.1", optional = true } +# Import 'getrandom' here to enable feature `getrandom/js` for wasm builds. +getrandom = { version = "0.2.6", default-features = false, optional = true } + [build-dependencies] polymesh-build-tool = { workspace = true, default-features = false } @@ -114,130 +117,87 @@ ci-runtime = [] # Backends u64_backend = ["polymesh-primitives/u64_backend"] -no_std = [ - "polymesh-primitives/no_std", - "u64_backend" -] +no_std = ["polymesh-primitives/no_std", "u64_backend"] std = [ - "polymesh-build-tool/std", - "u64_backend", - "codec/std", - "frame-benchmarking?/std", "frame-election-provider-support/std", + "frame-executive/std", "frame-support/std", - "frame-system-rpc-runtime-api/std", - "frame-system-benchmarking?/std", "frame-system/std", + "frame-system-rpc-runtime-api/std", "node-rpc-runtime-api/std", "pallet-asset/std", "pallet-authority-discovery/std", - "pallet-authorship/std", - "pallet-base/std", "pallet-babe/std", "pallet-balances/std", - "pallet-sto/std", "pallet-committee/std", - "pallet-compliance-manager/std", "pallet-contracts/std", "pallet-corporate-actions/std", - "pallet-election-provider-multi-phase/std", - "frame-executive/std", - "pallet-external-agents/std", "pallet-grandpa/std", - "pallet-group-rpc-runtime-api/std", "pallet-group/std", - "pallet-identity/std", + "pallet-group-rpc-runtime-api/std", "pallet-im-online/std", "pallet-indices/std", + "pallet-insecure-randomness-collective-flip/std", "pallet-multisig/std", "pallet-nft/std", - "pallet-offences/std", - "pallet-permissions/std", - "pallet-preimage/std", "pallet-pips/std", "pallet-portfolio/std", - "pallet-protocol-fee-rpc-runtime-api/std", "pallet-protocol-fee/std", - "pallet-relayer/std", - "pallet-insecure-randomness-collective-flip/std", - "pallet-scheduler/std", + "pallet-protocol-fee-rpc-runtime-api/std", "pallet-session/std", "pallet-settlement/std", - "pallet-staking-runtime-api/std", "pallet-staking/std", - "pallet-validators/std", + "pallet-staking-runtime-api/std", "pallet-statistics/std", + "pallet-sto/std", "pallet-sudo/std", - "pallet-timestamp/std", "pallet-transaction-payment/std", - "pallet-treasury/std", "pallet-utility/std", - "polymesh-primitives/std", - "polymesh-common-utilities/std", + "pallet-validators/std", + "polymesh-build-tool/std", + "polymesh-contracts/std", "polymesh-runtime-common/std", "polymesh-weights/std", - "serde/std", "sp-api/std", - "sp-arithmetic/std", - "sp-authority-discovery/std", "sp-block-builder/std", "sp-consensus-babe/std", "sp-consensus-grandpa/std", - "sp-core/std", - "sp-inherents/std", - "sp-io/std", - "sp-offchain/std", - "sp-runtime/std", + "sp-genesis-builder/std", "sp-session/std", - "sp-staking/std", - "sp-std/std", "sp-transaction-pool/std", - "sp-version/std", - "polymesh-contracts/std", - "sp-genesis-builder/std", ] runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks", + "frame-election-provider-support/runtime-benchmarks", "frame-support/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", - "pallet-babe/runtime-benchmarks", - "pallet-indices/runtime-benchmarks", - "pallet-grandpa/runtime-benchmarks", - "pallet-preimage/runtime-benchmarks", - "pallet-scheduler/runtime-benchmarks", - "hex-literal", + "getrandom/js", "pallet-asset/runtime-benchmarks", + "pallet-babe/runtime-benchmarks", "pallet-balances/runtime-benchmarks", "pallet-committee/runtime-benchmarks", - "pallet-compliance-manager/runtime-benchmarks", "pallet-contracts/runtime-benchmarks", "pallet-corporate-actions/runtime-benchmarks", - "pallet-external-agents/runtime-benchmarks", + "pallet-grandpa/runtime-benchmarks", "pallet-group/runtime-benchmarks", - "pallet-identity/runtime-benchmarks", - "pallet-multisig/runtime-benchmarks", "pallet-im-online/runtime-benchmarks", - "pallet-permissions/runtime-benchmarks", + "pallet-indices/runtime-benchmarks", + "pallet-multisig/runtime-benchmarks", + "pallet-nft/runtime-benchmarks", "pallet-pips/runtime-benchmarks", "pallet-portfolio/runtime-benchmarks", "pallet-protocol-fee/runtime-benchmarks", "pallet-relayer/runtime-benchmarks", + "pallet-scheduler/runtime-benchmarks", "pallet-settlement/runtime-benchmarks", - "pallet-sto/runtime-benchmarks", "pallet-staking/runtime-benchmarks", - "pallet-validators/runtime-benchmarks", "pallet-statistics/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "pallet-treasury/runtime-benchmarks", + "pallet-sto/runtime-benchmarks", + "pallet-transaction-payment/runtime-benchmarks", "pallet-utility/runtime-benchmarks", + "pallet-validators/runtime-benchmarks", "polymesh-contracts/runtime-benchmarks", - "polymesh-primitives/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "pallet-nft/runtime-benchmarks", - "frame-election-provider-support/runtime-benchmarks", - "pallet-election-provider-multi-phase/runtime-benchmarks", + "polymesh-runtime-common/runtime-benchmarks", ] running-ci = [ "pallet-statistics/running-ci", diff --git a/pallets/transaction-payment/src/payment.rs b/pallets/transaction-payment/src/payment.rs index 06edc0764f..f719d2cb01 100644 --- a/pallets/transaction-payment/src/payment.rs +++ b/pallets/transaction-payment/src/payment.rs @@ -52,12 +52,6 @@ pub trait OnChargeTransaction { already_withdrawn: Self::LiquidityInfo, ) -> Result<(), TransactionValidityError>; - #[cfg(feature = "runtime-benchmarks")] - fn endow_account(who: &T::AccountId, amount: Self::Balance); - - #[cfg(feature = "runtime-benchmarks")] - fn minimum_balance() -> Self::Balance; - // Polymesh change // ----------------------------------------------------------------- fn charge_fee(who: &T::AccountId, fee: Self::Balance) -> Result<(), TransactionValidityError>; diff --git a/pallets/validators/src/benchmarking.rs b/pallets/validators/src/benchmarking.rs index ee0a6e0a1e..76183ba2b5 100644 --- a/pallets/validators/src/benchmarking.rs +++ b/pallets/validators/src/benchmarking.rs @@ -16,29 +16,23 @@ use super::*; use testing_utils::*; -use frame_support::traits::Currency; -use sp_runtime::{ - traits::{One, StaticLookup}, - Perbill, Saturating, -}; +pub use frame_benchmarking::v1::{account, benchmarks, impl_benchmark_test_suite}; +pub use frame_benchmarking::v1::{whitelist_account, whitelisted_caller}; +use frame_support::traits::fungible::Balanced; +use frame_system::RawOrigin; +use sp_runtime::traits::{One, StaticLookup}; +use sp_runtime::{Perbill, Saturating}; use sp_staking::SessionIndex; use sp_std::prelude::*; -pub use frame_benchmarking::v1::{ - account, benchmarks, impl_benchmark_test_suite, whitelist_account, whitelisted_caller, -}; -use frame_system::RawOrigin; - -use pallet_staking::{ - CurrentEra, EraRewardPoints, ErasRewardPoints, ErasValidatorReward, Nominators, - RewardDestination, -}; - -use crate::types::SlashingSwitch; use pallet_identity::benchmarking::UserBuilder; +use pallet_staking::{CurrentEra, EraRewardPoints, ErasRewardPoints}; +use pallet_staking::{ErasValidatorReward, Nominators, RewardDestination}; use polymesh_primitives::IdentityId; use polymesh_primitives::Permissions; +use crate::types::SlashingSwitch; + pub fn get_did(who: &T::AccountId) -> IdentityId { pallet_identity::Pallet::::get_identity(who).expect("Failed to get identity id") } From ea1bbd88343722b87a4cd4dd241a5ed6ee628385 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Tue, 23 Sep 2025 09:12:45 -0300 Subject: [PATCH 83/97] Fix benchmarks - part III --- pallets/contracts/src/benchmarking.rs | 2 +- pallets/runtime/develop/Cargo.toml | 5 +++ .../develop/src/benchmarks/pallet_session.rs | 34 +++++++------------ pallets/runtime/develop/src/runtime.rs | 7 ++-- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/pallets/contracts/src/benchmarking.rs b/pallets/contracts/src/benchmarking.rs index b19ea022da..b0701ba0a7 100644 --- a/pallets/contracts/src/benchmarking.rs +++ b/pallets/contracts/src/benchmarking.rs @@ -236,7 +236,7 @@ where Instruction::I32Const(input.len() as i32), Instruction::Call(0), Instruction::Drop, - ] + ], )), ..Default::default() }); diff --git a/pallets/runtime/develop/Cargo.toml b/pallets/runtime/develop/Cargo.toml index 18327ae5ac..e3a8d2c480 100644 --- a/pallets/runtime/develop/Cargo.toml +++ b/pallets/runtime/develop/Cargo.toml @@ -168,10 +168,13 @@ std = [ "sp-transaction-pool/std", ] runtime-benchmarks = [ + "frame-benchmarking", + "frame-system-benchmarking/runtime-benchmarks", "frame-election-provider-support/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", "getrandom/js", + "hex-literal", "pallet-asset/runtime-benchmarks", "pallet-babe/runtime-benchmarks", "pallet-balances/runtime-benchmarks", @@ -186,6 +189,7 @@ runtime-benchmarks = [ "pallet-nft/runtime-benchmarks", "pallet-pips/runtime-benchmarks", "pallet-portfolio/runtime-benchmarks", + "pallet-preimage/runtime-benchmarks", "pallet-protocol-fee/runtime-benchmarks", "pallet-relayer/runtime-benchmarks", "pallet-scheduler/runtime-benchmarks", @@ -194,6 +198,7 @@ runtime-benchmarks = [ "pallet-statistics/runtime-benchmarks", "pallet-sto/runtime-benchmarks", "pallet-transaction-payment/runtime-benchmarks", + "pallet-treasury/runtime-benchmarks", "pallet-utility/runtime-benchmarks", "pallet-validators/runtime-benchmarks", "polymesh-contracts/runtime-benchmarks", diff --git a/pallets/runtime/develop/src/benchmarks/pallet_session.rs b/pallets/runtime/develop/src/benchmarks/pallet_session.rs index 208140a247..5a3cc32616 100644 --- a/pallets/runtime/develop/src/benchmarks/pallet_session.rs +++ b/pallets/runtime/develop/src/benchmarks/pallet_session.rs @@ -23,21 +23,21 @@ use codec::Decode; use frame_benchmarking::benchmarks; -use frame_support::traits::{Currency, Get, OnInitialize}; +use frame_support::traits::OnInitialize; use frame_system::pallet_prelude::BlockNumberFor; use frame_system::RawOrigin; -use pallet_session::{Call, Pallet as Session}; -use pallet_staking::benchmarking::create_validator_with_nominators; -use pallet_staking::RewardDestination; +use sp_core::Get; use sp_runtime::traits::TrailingZeroInput; use sp_std::prelude::*; use sp_std::vec; +use pallet_session::historical::Config as HistoricalConfig; +use pallet_session::{Call, Config as SessionConfig, Pallet as Session}; +use pallet_staking::benchmarking::create_validator_with_nominators; +use pallet_staking::{Config as StakingConfig, MaxNominationsOf, RewardDestination}; + pub struct Pallet(Session); -pub trait Config: - pallet_session::Config + pallet_session::historical::Config + pallet_staking::Config -{ -} +pub trait Config: SessionConfig + HistoricalConfig + StakingConfig {} impl OnInitialize> for Pallet { fn on_initialize(n: BlockNumberFor) -> frame_support::weights::Weight { @@ -52,15 +52,10 @@ struct ValidatorInfo { } impl ValidatorInfo { - pub fn build(nominators: u32) -> Result, &'static str> - where - <::Currency as Currency< - ::AccountId, - >>::Balance: From, - { + pub fn build(nominators: u32) -> Result, &'static str> { let stash = create_validator_with_nominators::( nominators, - ::MaxNominations::get(), + MaxNominationsOf::::get(), false, false, RewardDestination::Staked, @@ -85,13 +80,8 @@ impl ValidatorInfo { } benchmarks! { - where_clause { - where - <::Currency as Currency<::AccountId>>::Balance: From, - } - set_keys { - let n = ::MaxNominations::get() as u32; + let n = MaxNominationsOf::::get(); let validator = ValidatorInfo::::build(n).unwrap(); let proof = validator.proof.clone(); let keys = validator.keys.clone(); @@ -99,7 +89,7 @@ benchmarks! { }: _(RawOrigin::Signed(validator.controller), keys, proof) purge_keys { - let n = ::MaxNominations::get() as u32; + let n = MaxNominationsOf::::get(); let validator = ValidatorInfo::::build(n).unwrap(); let controller = RawOrigin::Signed(validator.controller.clone()); diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index 5d79b5b764..ae56de78aa 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -521,8 +521,9 @@ polymesh_runtime_common::runtime_apis! { #[allow(non_local_definitions)] fn dispatch_benchmark( config: frame_benchmarking::BenchmarkConfig - ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{baseline, Benchmarking, BenchmarkBatch, TrackedStorageKey}; + ) -> Result, String> { + use frame_benchmarking::{baseline, BenchmarkBatch}; + use frame_support::traits::TrackedStorageKey; use crate::benchmarks::pallet_session::Pallet as SessionBench; use frame_system_benchmarking::Pallet as SystemBench; @@ -557,7 +558,7 @@ polymesh_runtime_common::runtime_apis! { Vec, Vec, ) { - use frame_benchmarking::{baseline, Benchmarking, BenchmarkList}; + use frame_benchmarking::{baseline, BenchmarkList}; use frame_support::traits::StorageInfoTrait; use crate::benchmarks::pallet_session::Pallet as SessionBench; From 98c3730ffd73b06c8bd649e269127e566a8f9504 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Wed, 24 Sep 2025 10:12:54 -0300 Subject: [PATCH 84/97] Order toml dependencies --- Cargo.lock | 2 +- Cargo.toml | 2 +- pallets/runtime/build_tool/Cargo.toml | 4 ++-- pallets/runtime/common/Cargo.toml | 20 ++++++++++---------- pallets/runtime/develop/Cargo.toml | 8 ++++---- pallets/runtime/develop/build.rs | 11 ++++++++++- pallets/runtime/develop/src/runtime.rs | 1 - 7 files changed, 28 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c6e83ceeb6..c3a9e0d310 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8332,7 +8332,6 @@ dependencies = [ "pallet-utility", "pallet-validators", "parity-scale-codec", - "polymesh-build-tool", "polymesh-common-utilities", "polymesh-contracts", "polymesh-primitives", @@ -8359,6 +8358,7 @@ dependencies = [ "sp-std", "sp-transaction-pool", "sp-version", + "substrate-wasm-builder", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index d17743843b..38c9239ca3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -267,7 +267,7 @@ sp-transaction-pool = { version = "36.0.0", default-features = false } sp-weights = { version = "31.1.0", default-features = false } sp-version = { version = "39.0.0", default-features = false } substrate-test-utils = { version = "3.0.0", default-features = false } -substrate-wasm-builder = { version = "26.0.1", default-features = false } +substrate-wasm-builder = { version = "26.0.1", default-features = true } substrate-frame-rpc-system = { version = "44.0.0", default-features = false } # Substrate client deps. diff --git a/pallets/runtime/build_tool/Cargo.toml b/pallets/runtime/build_tool/Cargo.toml index f3f88d59fe..0413b1de56 100644 --- a/pallets/runtime/build_tool/Cargo.toml +++ b/pallets/runtime/build_tool/Cargo.toml @@ -7,8 +7,8 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -substrate-wasm-builder = { workspace = true, default-features = false} +substrate-wasm-builder = { workspace = true, default-features = true, optional = true} [features] default = ["std"] -std = [] +std = [ "substrate-wasm-builder" ] diff --git a/pallets/runtime/common/Cargo.toml b/pallets/runtime/common/Cargo.toml index 218a8a1c81..970255faf3 100644 --- a/pallets/runtime/common/Cargo.toml +++ b/pallets/runtime/common/Cargo.toml @@ -40,33 +40,33 @@ default = ["std", "equalize"] testing = [] no_std = [] std = [ + "frame-election-provider-support/std", "frame-support/std", "frame-system/std", "pallet-authorship/std", "pallet-balances/std", + "pallet-committee/std", + "pallet-election-provider-multi-phase/std", "pallet-group-rpc-runtime-api/std", "pallet-identity/std", "pallet-multisig/std", - "pallet-committee/std", - "polymesh-primitives/std", "polymesh-common-utilities/std", + "polymesh-primitives/std", + "sp-genesis-builder/std", + "sp-io/std", "sp-runtime/std", "sp-std/std", - "frame-election-provider-support/std", - "pallet-election-provider-multi-phase/std", - "sp-io/std", - "sp-genesis-builder/std", ] runtime-benchmarks = [ + "frame-election-provider-support/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", "pallet-balances/runtime-benchmarks", "pallet-committee/runtime-benchmarks", + "pallet-election-provider-multi-phase/runtime-benchmarks", "pallet-identity/runtime-benchmarks", "pallet-multisig/runtime-benchmarks", "pallet-relayer/runtime-benchmarks", "polymesh-primitives/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", "sp-runtime/runtime-benchmarks", - "frame-election-provider-support/runtime-benchmarks", - "pallet-election-provider-multi-phase/runtime-benchmarks", ] diff --git a/pallets/runtime/develop/Cargo.toml b/pallets/runtime/develop/Cargo.toml index e3a8d2c480..5d491ea6cc 100644 --- a/pallets/runtime/develop/Cargo.toml +++ b/pallets/runtime/develop/Cargo.toml @@ -45,7 +45,7 @@ polymesh-contracts = { workspace = true, default-features = false } # Others serde = { version = "1.0.104", default-features = false } -log = "0.4.8" +log = { version = "0.4.8", default-features = false } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } @@ -98,13 +98,13 @@ node-rpc-runtime-api = { workspace = true, default-features = false } # Used for runtime benchmarking frame-benchmarking = { workspace = true, default-features = false, optional = true } frame-system-benchmarking = { workspace = true, default-features = false, optional = true } -hex-literal = { version = "0.3.1", optional = true } +hex-literal = { version = "0.3.1", default-features = false, optional = true } # Import 'getrandom' here to enable feature `getrandom/js` for wasm builds. getrandom = { version = "0.2.6", default-features = false, optional = true } [build-dependencies] -polymesh-build-tool = { workspace = true, default-features = false } +substrate-wasm-builder = { optional = true, workspace = true, default-features = true } [features] default = ["std", "equalize"] @@ -155,7 +155,7 @@ std = [ "pallet-transaction-payment/std", "pallet-utility/std", "pallet-validators/std", - "polymesh-build-tool/std", + "substrate-wasm-builder", "polymesh-contracts/std", "polymesh-runtime-common/std", "polymesh-weights/std", diff --git a/pallets/runtime/develop/build.rs b/pallets/runtime/develop/build.rs index 3225c322cd..7ed11b43a6 100644 --- a/pallets/runtime/develop/build.rs +++ b/pallets/runtime/develop/build.rs @@ -1,3 +1,12 @@ +#[cfg(feature = "std")] fn main() { - polymesh_build_tool::build() + substrate_wasm_builder::WasmBuilder::new() + .with_current_project() + .disable_runtime_version_section_check() + .export_heap_base() + .import_memory() + .build() } + +#[cfg(not(feature = "std"))] +fn main() {} \ No newline at end of file diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index ae56de78aa..e40c6db6f9 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -44,7 +44,6 @@ pub use pallet_timestamp::Call as TimestampCall; /// 100% goes to the block author. pub type DealWithFees = Author; pub type CddHandler = polymesh_runtime_common::fee_details::CddHandler; - // Make the WASM binary available. #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); From 123735bdc7be952d2fd2a37a7141db4cc29218b6 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Wed, 24 Sep 2025 10:51:56 -0300 Subject: [PATCH 85/97] Update .lock; Change rust-toolchain --- Cargo.lock | 2 +- rust-toolchain.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c3a9e0d310..d42410bf42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14274,7 +14274,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" dependencies = [ - "windows-link", + "windows-link 0.2.0", ] [[package]] diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 459f4102d6..bd5f3a2092 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] -channel = "nightly-2025-07-16" -targets = [ "wasm32-unknown-unknown" ] +channel = "nightly-2024-12-26" +targets = [ "wasm32v1-none" ] components = [ "rustfmt" ] profile = "minimal" From a6c077065c04ff0f50dabe159056ad402e985138 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Wed, 24 Sep 2025 11:42:45 -0300 Subject: [PATCH 86/97] Change rust version --- rust-toolchain.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain.toml b/rust-toolchain.toml index bd5f3a2092..74b8b6c3a9 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] -channel = "nightly-2024-12-26" +channel = "nightly-2025-09-01" targets = [ "wasm32v1-none" ] components = [ "rustfmt" ] profile = "minimal" From ee4c63a36d63c60d3bceefdf902d557f6634cf08 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Wed, 24 Sep 2025 14:51:08 -0300 Subject: [PATCH 87/97] Fix benchmarks build --- Cargo.toml | 4 +--- pallets/committee/Cargo.toml | 2 +- pallets/compliance-manager/Cargo.toml | 2 +- pallets/corporate-actions/Cargo.toml | 3 +-- pallets/external-agents/Cargo.toml | 2 +- pallets/identity/Cargo.toml | 2 +- pallets/multisig/Cargo.toml | 2 +- pallets/permissions/Cargo.toml | 2 +- pallets/protocol-fee/Cargo.toml | 2 +- pallets/relayer/Cargo.toml | 2 +- pallets/runtime/develop/Cargo.toml | 4 ---- pallets/runtime/develop/build.rs | 7 +------ pallets/runtime/develop/src/runtime.rs | 4 ++-- pallets/sto/Cargo.toml | 2 +- 14 files changed, 14 insertions(+), 26 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 38c9239ca3..e6475d8671 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -426,6 +426,4 @@ runtime-benchmarks = [ # Only build a "ci" runtime. ci-runtime = [ "polymesh-runtime-develop/ci-runtime" ] -std = [ - "serde/std" -] +std = ["serde/std"] diff --git a/pallets/committee/Cargo.toml b/pallets/committee/Cargo.toml index 1aa046ea29..f71927a8b8 100644 --- a/pallets/committee/Cargo.toml +++ b/pallets/committee/Cargo.toml @@ -52,7 +52,7 @@ std = [ ] try-runtime = ["frame-support/try-runtime"] runtime-benchmarks = [ - "frame-benchmarking/std", + "frame-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", "frame-support/runtime-benchmarks", "pallet-identity/runtime-benchmarks", diff --git a/pallets/compliance-manager/Cargo.toml b/pallets/compliance-manager/Cargo.toml index aad6e0aee9..2b85059fe5 100644 --- a/pallets/compliance-manager/Cargo.toml +++ b/pallets/compliance-manager/Cargo.toml @@ -63,7 +63,7 @@ std = [ ] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-external-agents/runtime-benchmarks", diff --git a/pallets/corporate-actions/Cargo.toml b/pallets/corporate-actions/Cargo.toml index a0b6506100..499e77ae9b 100644 --- a/pallets/corporate-actions/Cargo.toml +++ b/pallets/corporate-actions/Cargo.toml @@ -65,11 +65,10 @@ std = [ "sp-arithmetic/std", ] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-asset/runtime-benchmarks", - "pallet-compliance-manager/std", "pallet-compliance-manager/runtime-benchmarks", "pallet-external-agents/runtime-benchmarks", "pallet-identity/runtime-benchmarks", diff --git a/pallets/external-agents/Cargo.toml b/pallets/external-agents/Cargo.toml index f2ea8db9ba..db2dca1366 100644 --- a/pallets/external-agents/Cargo.toml +++ b/pallets/external-agents/Cargo.toml @@ -44,7 +44,7 @@ std = [ "serde_derive", ] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-identity/runtime-benchmarks", diff --git a/pallets/identity/Cargo.toml b/pallets/identity/Cargo.toml index 8a706de7f1..dfb29b5a2b 100644 --- a/pallets/identity/Cargo.toml +++ b/pallets/identity/Cargo.toml @@ -63,7 +63,7 @@ std = [ "sp-version/std", ] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-permissions/runtime-benchmarks", diff --git a/pallets/multisig/Cargo.toml b/pallets/multisig/Cargo.toml index 469c32b988..00cbe05aab 100644 --- a/pallets/multisig/Cargo.toml +++ b/pallets/multisig/Cargo.toml @@ -47,7 +47,7 @@ std = [ "pallet-identity/std", ] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-identity/runtime-benchmarks", diff --git a/pallets/permissions/Cargo.toml b/pallets/permissions/Cargo.toml index 05658f35b2..c4389b1337 100644 --- a/pallets/permissions/Cargo.toml +++ b/pallets/permissions/Cargo.toml @@ -36,6 +36,6 @@ std = [ "sp-std/std", ] runtime-benchmarks = [ - "frame-benchmarking/std", + "frame-benchmarking/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/protocol-fee/Cargo.toml b/pallets/protocol-fee/Cargo.toml index c54d38e447..7cfc9efd2e 100644 --- a/pallets/protocol-fee/Cargo.toml +++ b/pallets/protocol-fee/Cargo.toml @@ -45,7 +45,7 @@ std = [ "sp-std/std", ] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-identity/runtime-benchmarks", diff --git a/pallets/relayer/Cargo.toml b/pallets/relayer/Cargo.toml index c018515760..118eaaa6a3 100644 --- a/pallets/relayer/Cargo.toml +++ b/pallets/relayer/Cargo.toml @@ -32,7 +32,7 @@ std = [ "polymesh-primitives/std", ] runtime-benchmarks = [ - "frame-benchmarking/std", + "frame-benchmarking/runtime-benchmarks", "pallet-identity/runtime-benchmarks", "polymesh-primitives/runtime-benchmarks", ] diff --git a/pallets/runtime/develop/Cargo.toml b/pallets/runtime/develop/Cargo.toml index 5d491ea6cc..d0576261fc 100644 --- a/pallets/runtime/develop/Cargo.toml +++ b/pallets/runtime/develop/Cargo.toml @@ -100,9 +100,6 @@ frame-benchmarking = { workspace = true, default-features = false, optional = tr frame-system-benchmarking = { workspace = true, default-features = false, optional = true } hex-literal = { version = "0.3.1", default-features = false, optional = true } -# Import 'getrandom' here to enable feature `getrandom/js` for wasm builds. -getrandom = { version = "0.2.6", default-features = false, optional = true } - [build-dependencies] substrate-wasm-builder = { optional = true, workspace = true, default-features = true } @@ -173,7 +170,6 @@ runtime-benchmarks = [ "frame-election-provider-support/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", - "getrandom/js", "hex-literal", "pallet-asset/runtime-benchmarks", "pallet-babe/runtime-benchmarks", diff --git a/pallets/runtime/develop/build.rs b/pallets/runtime/develop/build.rs index 7ed11b43a6..d277440fcb 100644 --- a/pallets/runtime/develop/build.rs +++ b/pallets/runtime/develop/build.rs @@ -1,11 +1,6 @@ #[cfg(feature = "std")] fn main() { - substrate_wasm_builder::WasmBuilder::new() - .with_current_project() - .disable_runtime_version_section_check() - .export_heap_base() - .import_memory() - .build() + substrate_wasm_builder::WasmBuilder::build_using_defaults() } #[cfg(not(feature = "std"))] diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index e40c6db6f9..229dc9703d 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -517,10 +517,10 @@ mod benches { polymesh_runtime_common::runtime_apis! { #[cfg(feature = "runtime-benchmarks")] impl frame_benchmarking::Benchmark for Runtime { - #[allow(non_local_definitions)] + #[allow(non_local_definitions, deprecated)] fn dispatch_benchmark( config: frame_benchmarking::BenchmarkConfig - ) -> Result, String> { + ) -> Result, sp_runtime::RuntimeString> { use frame_benchmarking::{baseline, BenchmarkBatch}; use frame_support::traits::TrackedStorageKey; diff --git a/pallets/sto/Cargo.toml b/pallets/sto/Cargo.toml index 0b7e4f452c..4ceb9627b5 100644 --- a/pallets/sto/Cargo.toml +++ b/pallets/sto/Cargo.toml @@ -64,7 +64,7 @@ std = [ "pallet-timestamp/std" ] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", "pallet-asset/runtime-benchmarks", From 5754ba1bfe3ca79ef49c4bdfd814f5c9c49edbf7 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Wed, 24 Sep 2025 14:55:54 -0300 Subject: [PATCH 88/97] Change rust version for ci --- .circleci/config.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index dbaff9dfd0..7aaa1836e5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -39,7 +39,7 @@ commands: jobs: lint: docker: - - image: polymeshassociation/rust:debian-nightly-2025-07-16 + - image: polymeshassociation/rust:debian-nightly-2025-09-01 resource_class: small environment: VERBOSE: "1" @@ -53,7 +53,7 @@ jobs: command: ./scripts/check_spec_and_cargo_version.sh check-storage-version: docker: - - image: polymeshassociation/rust:debian-nightly-2025-07-16 + - image: polymeshassociation/rust:debian-nightly-2025-09-01 resource_class: small environment: VERBOSE: "1" @@ -64,7 +64,7 @@ jobs: command: ./scripts/check_storage_versions.sh build: docker: - - image: polymeshassociation/rust:debian-nightly-2025-07-16 + - image: polymeshassociation/rust:debian-nightly-2025-09-01 resource_class: xlarge environment: - VERBOSE: "1" @@ -95,7 +95,7 @@ jobs: - save-sccache-cache build-ci: docker: - - image: polymeshassociation/rust:debian-nightly-2025-07-16 + - image: polymeshassociation/rust:debian-nightly-2025-09-01 resource_class: xlarge environment: - VERBOSE: "1" @@ -124,7 +124,7 @@ jobs: - . build-arm64: docker: - - image: polymeshassociation/rust-arm64:debian-nightly-2025-07-16 + - image: polymeshassociation/rust-arm64:debian-nightly-2025-09-01 resource_class: arm.xlarge environment: - VERBOSE: "1" @@ -151,7 +151,7 @@ jobs: - save-sccache-cache benchmark-build: docker: - - image: polymeshassociation/rust:debian-nightly-2025-07-16 + - image: polymeshassociation/rust:debian-nightly-2025-09-01 resource_class: xlarge environment: - VERBOSE: "1" @@ -273,7 +273,7 @@ jobs: metadata-tools-build: docker: - - image: polymeshassociation/rust:debian-nightly-2025-07-16 + - image: polymeshassociation/rust:debian-nightly-2025-09-01 resource_class: small steps: - checkout @@ -386,7 +386,7 @@ jobs: no_output_timeout: 30m migration-tests: docker: - - image: polymeshassociation/rust:debian-nightly-2025-07-16 + - image: polymeshassociation/rust:debian-nightly-2025-09-01 resource_class: large environment: - VERBOSE: "1" @@ -403,7 +403,7 @@ jobs: - save-sccache-cache test: docker: - - image: polymeshassociation/rust:debian-nightly-2025-07-16 + - image: polymeshassociation/rust:debian-nightly-2025-09-01 resource_class: large environment: - VERBOSE: "1" @@ -432,7 +432,7 @@ jobs: - save-sccache-cache coverage: docker: - - image: polymeshassociation/rust:debian-nightly-2025-07-16 + - image: polymeshassociation/rust:debian-nightly-2025-09-01 resource_class: xlarge environment: - VERBOSE: "1" @@ -447,7 +447,7 @@ jobs: - save-sccache-cache rust-integration-test: docker: - - image: polymeshassociation/rust:debian-nightly-2025-07-16 + - image: polymeshassociation/rust:debian-nightly-2025-09-01 resource_class: xlarge environment: - VERBOSE: "1" @@ -518,7 +518,7 @@ jobs: no_output_timeout: 10m clippy: docker: - - image: polymeshassociation/rust:debian-nightly-2025-07-16 + - image: polymeshassociation/rust:debian-nightly-2025-09-01 resource_class: xlarge environment: - VERBOSE: "1" From 82118d6d4de1a56e24c9f39176f957b554ebdec0 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Wed, 24 Sep 2025 14:59:28 -0300 Subject: [PATCH 89/97] Run cargo fmt --- pallets/runtime/develop/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/runtime/develop/build.rs b/pallets/runtime/develop/build.rs index d277440fcb..e953b84af6 100644 --- a/pallets/runtime/develop/build.rs +++ b/pallets/runtime/develop/build.rs @@ -4,4 +4,4 @@ fn main() { } #[cfg(not(feature = "std"))] -fn main() {} \ No newline at end of file +fn main() {} From d9eebe7ecc60e7c5004036e9fb7ba931715b62ba Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Wed, 24 Sep 2025 17:18:06 -0300 Subject: [PATCH 90/97] Fix the ci pipeline; Remove contracts from benchmarks temporarily --- .circleci/config.yml | 1 - pallets/runtime/develop/src/runtime.rs | 5 +++-- pallets/runtime/mainnet/src/runtime.rs | 3 ++- pallets/runtime/testnet/src/runtime.rs | 3 ++- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7aaa1836e5..2a8fe3de56 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -425,7 +425,6 @@ jobs: --package pallet-pips --package polymesh-primitives --package node-rpc-runtime-api - --package pallet-transaction-payment --package polymesh-runtime-tests --package asset-metadata no_output_timeout: 30m diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index 229dc9703d..bddf8c4347 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -54,7 +54,8 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("polymesh_dev"), impl_name: Cow::Borrowed("polymesh_dev"), authoring_version: 1, - spec_version: 8_000_000, // `spec_version: aaa_bbb_ccd` should match node version `aaa.bbb.cc` + // `spec_version: aaa_bbb_ccd` should match node version v`aaa.bbb.cc` + spec_version: 8_000_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, @@ -510,7 +511,7 @@ mod benches { [pallet_validators, Validators] [polymesh_contracts, PolymeshContracts] [pallet_nft, Nft] - [pallet_contracts, Contracts] + //[pallet_contracts, Contracts] ); } diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index ce338840e6..abd6229e34 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -54,7 +54,8 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("polymesh_mainnet"), impl_name: Cow::Borrowed("polymesh_mainnet"), authoring_version: 1, - spec_version: 8_000_000, // `spec_version: aaa_bbb_ccd` should match node version `aaa.bbb.cc` + // `spec_version: aaa_bbb_ccd` should match node version v`aaa.bbb.cc` + spec_version: 8_000_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index bd6eadf559..f50fa79a5e 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -56,7 +56,8 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("polymesh_testnet"), impl_name: Cow::Borrowed("polymesh_testnet"), authoring_version: 1, - spec_version: 8_000_000, // `spec_version: aaa_bbb_ccd` should match node version `aaa.bbb.cc` + // `spec_version: aaa_bbb_ccd` should match node version v`aaa.bbb.cc` + spec_version: 8_000_000, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, From 229c226803c538c06a38421e949cb8c0335ef3c1 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 29 Sep 2025 17:25:23 -0300 Subject: [PATCH 91/97] FIx manual_slash benchmark --- pallets/runtime/develop/src/runtime.rs | 2 +- pallets/runtime/tests/src/staking/mock.rs | 2 +- pallets/runtime/tests/src/staking/mod.rs | 2 +- pallets/runtime/tests/src/staking_extra_tests.rs | 2 +- pallets/validators/src/permissioned.rs | 11 +++++++++++ 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index bddf8c4347..c40687126f 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -511,7 +511,7 @@ mod benches { [pallet_validators, Validators] [polymesh_contracts, PolymeshContracts] [pallet_nft, Nft] - //[pallet_contracts, Contracts] + [pallet_contracts, Contracts] ); } diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index 923a67f70f..79430882d8 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -18,7 +18,7 @@ //! Test utilities use frame_election_provider_support::bounds::{ElectionBounds, ElectionBoundsBuilder}; -use frame_election_provider_support::{onchain, SequentialPhragmen, VoteWeight}; +use frame_election_provider_support::{onchain, SequentialPhragmen}; use frame_support::traits::{ConstU64, EitherOfDiverse, FindAuthor, Get}; use frame_support::traits::{Contains, Imbalance, OnUnbalanced, OneSessionHandler}; use frame_support::weights::constants::RocksDbWeight; diff --git a/pallets/runtime/tests/src/staking/mod.rs b/pallets/runtime/tests/src/staking/mod.rs index ea13a6279f..3577daf47e 100644 --- a/pallets/runtime/tests/src/staking/mod.rs +++ b/pallets/runtime/tests/src/staking/mod.rs @@ -20,7 +20,7 @@ mod mock; use frame_election_provider_support::bounds::{DataProviderBounds, ElectionBoundsBuilder}; -use frame_election_provider_support::{ElectionProvider, SortedListProvider, Support}; +use frame_election_provider_support::{ElectionProvider, SortedListProvider}; use frame_support::dispatch::{extract_actual_weight, GetDispatchInfo, WithPostDispatchInfo}; use frame_support::pallet_prelude::*; use frame_support::traits::{fungible::Inspect, Currency, Get, InspectLockableCurrency}; diff --git a/pallets/runtime/tests/src/staking_extra_tests.rs b/pallets/runtime/tests/src/staking_extra_tests.rs index 1a1c4b32ce..c998285c57 100644 --- a/pallets/runtime/tests/src/staking_extra_tests.rs +++ b/pallets/runtime/tests/src/staking_extra_tests.rs @@ -39,7 +39,7 @@ fn updating_controller() { assert_ok!(pallet_staking::Pallet::::bond( alice.origin(), 10_000_000, - pallet_staking::RewardDestination::Controller + pallet_staking::RewardDestination::Account(alice.acc()) )); assert_ok!(pallet_staking::Pallet::::validate( diff --git a/pallets/validators/src/permissioned.rs b/pallets/validators/src/permissioned.rs index f6d661ad42..6bacaeab5b 100644 --- a/pallets/validators/src/permissioned.rs +++ b/pallets/validators/src/permissioned.rs @@ -82,6 +82,17 @@ impl PermissionedStaking for Pallet { .expect("Failed to join identity as key"); } + #[cfg(feature = "runtime-benchmarks")] + fn setup_who_to_slash(who_to_slash: Option) { + match who_to_slash { + Some(WhoToSlash::ValidatorAndNominator) => { + SlashingAllowedFor::::put(SlashingSwitch::ValidatorAndNominator) + } + Some(WhoToSlash::Validator) => SlashingAllowedFor::::put(SlashingSwitch::Validator), + None => SlashingAllowedFor::::put(SlashingSwitch::None), + } + } + /// Check if amount is under the existential deposit. fn reapable(amount: BalanceOf) -> bool { amount <= T::Currency::minimum_balance() From 8d783f953553907d3cb831d034245253164ca619 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 29 Sep 2025 18:26:55 -0300 Subject: [PATCH 92/97] Run cargo update --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index d42410bf42..c3a9e0d310 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14274,7 +14274,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" dependencies = [ - "windows-link 0.2.0", + "windows-link", ] [[package]] From 330f18b8d1734bef1e454d1d37488660f57faaa9 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Mon, 29 Sep 2025 18:30:54 -0300 Subject: [PATCH 93/97] Build docker temporarily --- .circleci/config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2a8fe3de56..a9eb5f994c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -803,6 +803,7 @@ workflows: - testnet - staging - develop + - update-substrate-stable2503-7 - build-docker-amd64-distroless: requires: - build @@ -830,6 +831,7 @@ workflows: - testnet - staging - develop + - update-substrate-stable2503-7 - build-docker-arm64-distroless: requires: - build-arm64 @@ -851,6 +853,7 @@ workflows: - testnet - staging - develop + - update-substrate-stable2503-7 - build-docker-distroless: requires: - build-docker-amd64-distroless From 1820c7bf98e5275de863ffa8ff8f404702316406 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Thu, 2 Oct 2025 13:44:00 -0300 Subject: [PATCH 94/97] Remove unimplemented call --- pallets/protocol-fee/src/lib.rs | 7 +++---- pallets/treasury/src/lib.rs | 4 +--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/pallets/protocol-fee/src/lib.rs b/pallets/protocol-fee/src/lib.rs index 4fd039c791..e11ac30554 100644 --- a/pallets/protocol-fee/src/lib.rs +++ b/pallets/protocol-fee/src/lib.rs @@ -45,15 +45,14 @@ use frame_support::weights::Weight; use sp_runtime::{traits::Zero, Perbill}; use sp_std::vec::Vec; -use frame_system::ensure_root; +use frame_system::{ensure_root, Config as SystemConfig}; use pallet_identity::Config as IdentityConfig; use polymesh_common_utilities::protocol_fee::{ChargeProtocolFee, ProtocolOp}; use polymesh_primitives::traits::{CddAndFeeDetails, SubsidiserTrait}; use polymesh_primitives::{Balance, IdentityId, PosRatio, GC_DID}; -type NegativeImbalanceOf = <::Currency as Currency< - ::AccountId, ->>::NegativeImbalance; +type NegativeImbalanceOf = + <::Currency as Currency<::AccountId>>::NegativeImbalance; /// Either an imbalance or an error. type WithdrawFeeResult = sp_std::result::Result, DispatchError>; diff --git a/pallets/treasury/src/lib.rs b/pallets/treasury/src/lib.rs index 8beebebaa6..ecf062aa68 100644 --- a/pallets/treasury/src/lib.rs +++ b/pallets/treasury/src/lib.rs @@ -240,7 +240,5 @@ where ::Currency: frame_support::traits::fungible::Balanced<::AccountId>, { - fn on_nonzero_unbalanced(_amount: NegativeImbalanceOf) { - unimplemented!() - } + fn on_nonzero_unbalanced(_amount: NegativeImbalanceOf) {} } From 00a622e28ef94341e1c8c6238025d0079739b6ce Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Thu, 2 Oct 2025 00:22:05 +0800 Subject: [PATCH 95/97] Add CA certs to debian docker image. --- .docker/Dockerfile.debian | 11 ++++++++++- .docker/arm64/Dockerfile.debian | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/.docker/Dockerfile.debian b/.docker/Dockerfile.debian index 861d1006d1..8eda023bbf 100644 --- a/.docker/Dockerfile.debian +++ b/.docker/Dockerfile.debian @@ -16,6 +16,15 @@ RUN ls -a && \ FROM debian:stable-slim +# install tools and dependencies +RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y \ + ca-certificates \ + apt-get autoremove -y && \ + apt-get clean && \ + find /var/lib/apt/lists/ -type f -not -name lock -delete + COPY --chown=4002:4002 --from=gobuild /opt/health-check/polymesh-health-check /usr/local/bin/check COPY --chown=4002:4002 --from=gobuild /opt/rotate-keys/polymesh-rotate-keys /usr/local/bin/rotate COPY --chown=4001:4001 ./polymesh /usr/local/bin/polymesh @@ -33,4 +42,4 @@ HEALTHCHECK \ --start-period=120s \ --timeout=5s \ --retries=6 \ - CMD /usr/local/bin/check liveness \ No newline at end of file + CMD /usr/local/bin/check liveness diff --git a/.docker/arm64/Dockerfile.debian b/.docker/arm64/Dockerfile.debian index fe0e7f383a..9e69986bb8 100644 --- a/.docker/arm64/Dockerfile.debian +++ b/.docker/arm64/Dockerfile.debian @@ -16,6 +16,15 @@ RUN ls -a && \ FROM debian:stable-slim +# install tools and dependencies +RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y \ + ca-certificates \ + apt-get autoremove -y && \ + apt-get clean && \ + find /var/lib/apt/lists/ -type f -not -name lock -delete + COPY --chown=4002:4002 --from=gobuild /opt/health-check/polymesh-health-check /usr/local/bin/check COPY --chown=4002:4002 --from=gobuild /opt/rotate-keys/polymesh-rotate-keys /usr/local/bin/rotate COPY --chown=4001:4001 ./polymesh-arm64 /usr/local/bin/polymesh From e814ca9031764b266f783d6386c08dcc310a7df1 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Thu, 2 Oct 2025 00:52:32 +0800 Subject: [PATCH 96/97] FIXUP: ca cert install --- .docker/Dockerfile.debian | 3 +-- .docker/arm64/Dockerfile.debian | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.docker/Dockerfile.debian b/.docker/Dockerfile.debian index 8eda023bbf..9b27824a04 100644 --- a/.docker/Dockerfile.debian +++ b/.docker/Dockerfile.debian @@ -19,8 +19,7 @@ FROM debian:stable-slim # install tools and dependencies RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ apt-get upgrade -y && \ - apt-get install -y \ - ca-certificates \ + apt-get install -y --no-install-recommends ca-certificates && \ apt-get autoremove -y && \ apt-get clean && \ find /var/lib/apt/lists/ -type f -not -name lock -delete diff --git a/.docker/arm64/Dockerfile.debian b/.docker/arm64/Dockerfile.debian index 9e69986bb8..9e622f6905 100644 --- a/.docker/arm64/Dockerfile.debian +++ b/.docker/arm64/Dockerfile.debian @@ -19,8 +19,7 @@ FROM debian:stable-slim # install tools and dependencies RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ apt-get upgrade -y && \ - apt-get install -y \ - ca-certificates \ + apt-get install -y --no-install-recommends ca-certificates && \ apt-get autoremove -y && \ apt-get clean && \ find /var/lib/apt/lists/ -type f -not -name lock -delete From 14a5e25b11a5425ea2e7c54fccee3b3301fba5b2 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Fri, 31 Oct 2025 14:16:06 -0300 Subject: [PATCH 97/97] Cargo update; Fix settlement test --- Cargo.lock | 1350 ++++++----------- .../src/settlement_pallet/lock_instruction.rs | 6 +- 2 files changed, 494 insertions(+), 862 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c3a9e0d310..241176d060 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -43,7 +43,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -78,7 +78,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -86,9 +86,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -110,9 +110,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -184,7 +184,16 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", +] + +[[package]] +name = "ar_archive_writer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c269894b6fe5e9d7ada0cf69b5bf847ff35bc25fc271f08e1d080fce80339a" +dependencies = [ + "object 0.32.2", ] [[package]] @@ -329,7 +338,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -355,7 +364,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -430,7 +439,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -553,7 +562,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "synstructure 0.13.2", ] @@ -565,7 +574,7 @@ checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "synstructure 0.13.2", ] @@ -577,7 +586,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -652,7 +661,7 @@ dependencies = [ "polling", "rustix 1.1.2", "slab", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -710,7 +719,7 @@ dependencies = [ "rustix 1.1.2", "signal-hook-registry", "slab", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -727,7 +736,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -894,7 +903,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -965,9 +974,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bitvec" @@ -1054,7 +1063,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -1063,7 +1072,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -1140,9 +1149,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.23.2" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" [[package]] name = "byteorder" @@ -1210,9 +1219,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.39" +version = "1.2.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" +checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" dependencies = [ "find-msvc-tools", "jobserver", @@ -1246,9 +1255,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -1340,7 +1349,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -1367,9 +1376,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.48" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" +checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" dependencies = [ "clap_builder", "clap_derive", @@ -1377,9 +1386,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.48" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" +checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" dependencies = [ "anstream", "anstyle", @@ -1390,21 +1399,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.47" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "coarsetime" @@ -1419,9 +1428,9 @@ dependencies = [ [[package]] name = "codespan-reporting" -version = "0.12.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" dependencies = [ "serde", "termcolor", @@ -1516,9 +1525,9 @@ checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" [[package]] name = "const_format" -version = "0.2.34" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" dependencies = [ "const_format_proc_macros", ] @@ -1773,7 +1782,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", "rand_core 0.6.4", "subtle 2.6.1", "zeroize", @@ -1785,7 +1794,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", "rand_core 0.6.4", "typenum", ] @@ -1806,7 +1815,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", "subtle 2.6.1", ] @@ -1818,40 +1827,13 @@ checksum = "b9d6cf87adf719ddf43a805e92c6870a531aedda35ff640442cbaf8674e141e1" dependencies = [ "aead", "cipher 0.4.4", - "generic-array 0.14.7", + "generic-array 0.14.9", "poly1305", "salsa20", "subtle 2.6.1", "zeroize", ] -[[package]] -name = "cssparser" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa 0.4.8", - "matches", - "phf", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn 2.0.106", -] - [[package]] name = "ctr" version = "0.9.2" @@ -1977,14 +1959,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "cxx" -version = "1.0.186" +version = "1.0.187" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9c4fe7f2f5dc5c62871a1b43992d197da6fa1394656a94276ac2894a90a6fe" +checksum = "d8465678d499296e2cbf9d3acf14307458fd69b471a31b65b3c519efe8b5e187" dependencies = [ "cc", "cxx-build", @@ -1997,50 +1979,49 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.186" +version = "1.0.187" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5cf2909d37d80633ddd208676fc27c2608a7f035fff69c882421168038b26dd" +checksum = "d74b6bcf49ebbd91f1b1875b706ea46545032a14003b5557b7dfa4bbeba6766e" dependencies = [ "cc", "codespan-reporting", - "indexmap 2.11.4", + "indexmap 2.12.0", "proc-macro2", "quote", "scratch", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "cxxbridge-cmd" -version = "1.0.186" +version = "1.0.187" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "077f5ee3d3bfd8d27f83208fdaa96ddd50af7f096c77077cc4b94da10bfacefd" +checksum = "94ca2ad69673c4b35585edfa379617ac364bccd0ba0adf319811ba3a74ffa48a" dependencies = [ "clap", "codespan-reporting", - "indexmap 2.11.4", + "indexmap 2.12.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "cxxbridge-flags" -version = "1.0.186" +version = "1.0.187" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0108748615125b9f2e915dfafdffcbdabbca9b15102834f6d7e9a768f2f2864" +checksum = "d29b52102aa395386d77d322b3a0522f2035e716171c2c60aa87cc5e9466e523" [[package]] name = "cxxbridge-macro" -version = "1.0.186" +version = "1.0.187" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e896681ef9b8dc462cfa6961d61909704bde0984b30bcb4082fe102b478890" +checksum = "2a8ebf0b6138325af3ec73324cb3a48b64d57721f17291b151206782e61f66cd" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "proc-macro2", "quote", - "rustversion", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2064,7 +2045,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2075,7 +2056,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2088,7 +2069,7 @@ dependencies = [ "hashbrown 0.14.5", "lock_api", "once_cell", - "parking_lot_core 0.9.11", + "parking_lot_core 0.9.12", ] [[package]] @@ -2114,7 +2095,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" dependencies = [ "data-encoding", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2158,9 +2139,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", ] @@ -2184,7 +2165,7 @@ checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2195,7 +2176,7 @@ checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2208,7 +2189,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2228,7 +2209,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "unicode-xid", ] @@ -2247,7 +2228,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -2321,7 +2302,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2345,7 +2326,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.106", + "syn 2.0.108", "termcolor", "toml 0.8.23", "walkdir", @@ -2369,15 +2350,6 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" -[[package]] -name = "dtoa-short" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" -dependencies = [ - "dtoa", -] - [[package]] name = "dyn-clonable" version = "0.9.2" @@ -2396,7 +2368,7 @@ checksum = "7e8671d54058979a37a26f3511fbf8d198ba1aa35ffb202c42587d918d77213a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2470,15 +2442,9 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] -[[package]] -name = "ego-tree" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12a0bb14ac04a9fcf170d0bbbef949b44cc492f4452bd20c095636956f653642" - [[package]] name = "either" version = "1.15.0" @@ -2495,7 +2461,7 @@ dependencies = [ "crypto-bigint", "digest 0.10.7", "ff", - "generic-array 0.14.7", + "generic-array 0.14.9", "group", "pkcs8", "rand_core 0.6.4", @@ -2520,27 +2486,27 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "enum-ordinalize" -version = "4.3.0" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" dependencies = [ "enum-ordinalize-derive", ] [[package]] name = "enum-ordinalize-derive" -version = "4.3.1" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2588,7 +2554,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -2639,7 +2605,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2677,11 +2643,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb42427514b063d97ce21d5199f36c0c307d981434a6be32582bc79fe5bd2303" dependencies = [ "expander", - "indexmap 2.11.4", + "indexmap 2.12.0", "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -2754,15 +2720,15 @@ dependencies = [ "log", "num-traits", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "scale-info", ] [[package]] name = "find-msvc-tools" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "fixed-hash" @@ -2887,7 +2853,7 @@ dependencies = [ "polkadot-parachain-primitives", "polkadot-primitives", "rand 0.8.5", - "rand_pcg 0.3.1", + "rand_pcg", "sc-block-builder", "sc-chain-spec", "sc-cli", @@ -2945,7 +2911,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3064,7 +3030,7 @@ dependencies = [ "proc-macro2", "quote", "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3076,7 +3042,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3086,7 +3052,7 @@ source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymes dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3168,16 +3134,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - [[package]] name = "futures" version = "0.3.31" @@ -3258,7 +3214,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -3328,9 +3284,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -3347,26 +3303,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "getopts" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" -dependencies = [ - "unicode-width", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "getrandom" version = "0.2.16" @@ -3376,21 +3312,21 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasi 0.14.7+wasi-0.2.4", + "wasip2", "wasm-bindgen", ] @@ -3459,7 +3395,7 @@ dependencies = [ "futures-timer", "no-std-compat", "nonzero_ext", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "portable-atomic", "quanta", "rand 0.8.5", @@ -3490,7 +3426,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.11.4", + "indexmap 2.12.0", "slab", "tokio", "tokio-util", @@ -3509,7 +3445,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.11.4", + "indexmap 2.12.0", "slab", "tokio", "tokio-util", @@ -3744,7 +3680,7 @@ dependencies = [ "ipconfig", "lru-cache", "once_cell", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "rand 0.8.5", "resolv-conf", "smallvec", @@ -3765,7 +3701,7 @@ dependencies = [ "ipconfig", "moka", "once_cell", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "rand 0.9.2", "resolv-conf", "smallvec", @@ -3809,24 +3745,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.7", + "generic-array 0.14.9", "hmac 0.8.1", ] -[[package]] -name = "html5ever" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "http" version = "0.2.12" @@ -3835,7 +3757,7 @@ checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", - "itoa 1.0.15", + "itoa", ] [[package]] @@ -3846,7 +3768,7 @@ checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", - "itoa 1.0.15", + "itoa", ] [[package]] @@ -3925,7 +3847,7 @@ dependencies = [ "http-body 0.4.6", "httparse", "httpdate", - "itoa 1.0.15", + "itoa", "pin-project-lite", "socket2 0.5.10", "tokio", @@ -3949,7 +3871,7 @@ dependencies = [ "http-body 1.0.1", "httparse", "httpdate", - "itoa 1.0.15", + "itoa", "pin-project-lite", "pin-utils", "smallvec", @@ -3990,7 +3912,7 @@ dependencies = [ "hyper 1.7.0", "libc", "pin-project-lite", - "socket2 0.6.0", + "socket2 0.6.1", "tokio", "tower-service", "tracing", @@ -4008,7 +3930,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.1", + "windows-core 0.62.2", ] [[package]] @@ -4022,9 +3944,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -4035,9 +3957,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -4048,11 +3970,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -4063,42 +3984,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -4222,7 +4139,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -4257,9 +4174,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", "hashbrown 0.16.0", @@ -4277,7 +4194,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.9", ] [[package]] @@ -4309,17 +4226,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "io-uring" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" -dependencies = [ - "bitflags 2.9.4", - "cfg-if", - "libc", -] - [[package]] name = "ip_network" version = "0.4.1" @@ -4346,20 +4252,20 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is-terminal" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi 0.5.2", "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -4406,12 +4312,6 @@ dependencies = [ "either", ] -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - [[package]] name = "itoa" version = "1.0.15" @@ -4443,7 +4343,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -4474,15 +4374,15 @@ version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -4490,9 +4390,9 @@ dependencies = [ [[package]] name = "jsonrpsee" -version = "0.24.9" +version = "0.24.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b26c20e2178756451cfeb0661fb74c47dd5988cb7e3939de7e9241fd604d42" +checksum = "e281ae70cc3b98dac15fced3366a880949e65fc66e345ce857a5682d152f3e62" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -4506,9 +4406,9 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.24.9" +version = "0.24.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bacb85abf4117092455e1573625e21b8f8ef4dec8aff13361140b2dc266cdff2" +checksum = "cc4280b709ac3bb5e16cf3bad5056a0ec8df55fa89edfe996361219aadc2c7ea" dependencies = [ "base64 0.22.1", "futures-util", @@ -4529,9 +4429,9 @@ dependencies = [ [[package]] name = "jsonrpsee-core" -version = "0.24.9" +version = "0.24.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456196007ca3a14db478346f58c7238028d55ee15c1df15115596e411ff27925" +checksum = "348ee569eaed52926b5e740aae20863762b16596476e943c9e415a6479021622" dependencies = [ "async-trait", "bytes", @@ -4541,7 +4441,7 @@ dependencies = [ "http-body 1.0.1", "http-body-util", "jsonrpsee-types", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "pin-project", "rand 0.8.5", "rustc-hash 2.1.1", @@ -4555,22 +4455,22 @@ dependencies = [ [[package]] name = "jsonrpsee-proc-macros" -version = "0.24.9" +version = "0.24.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e65763c942dfc9358146571911b0cd1c361c2d63e2d2305622d40d36376ca80" +checksum = "7398cddf5013cca4702862a2692b66c48a3bd6cf6ec681a47453c93d63cf8de5" dependencies = [ "heck 0.5.0", "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "jsonrpsee-server" -version = "0.24.9" +version = "0.24.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55e363146da18e50ad2b51a0a7925fc423137a0b1371af8235b1c231a0647328" +checksum = "21429bcdda37dcf2d43b68621b994adede0e28061f816b038b0f18c70c143d51" dependencies = [ "futures-util", "http 1.3.1", @@ -4595,9 +4495,9 @@ dependencies = [ [[package]] name = "jsonrpsee-types" -version = "0.24.9" +version = "0.24.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a8e70baf945b6b5752fc8eb38c918a48f1234daf11355e07106d963f860089" +checksum = "b0f05e0028e55b15dbd2107163b3c744cd3bb4474f193f95d9708acbf5677e44" dependencies = [ "http 1.3.1", "serde", @@ -4607,9 +4507,9 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.24.9" +version = "0.24.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b3323d890aa384f12148e8d2a1fd18eb66e9e7e825f9de4fa53bcc19b93eef" +checksum = "78fc744f17e7926d57f478cf9ca6e1ee5d8332bf0514860b1a3cdf1742e614cc" dependencies = [ "http 1.3.1", "jsonrpsee-client-transport", @@ -4673,7 +4573,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" dependencies = [ "kvdb", - "parking_lot 0.12.4", + "parking_lot 0.12.5", ] [[package]] @@ -4684,7 +4584,7 @@ checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" dependencies = [ "kvdb", "num_cpus", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "regex", "rocksdb", "smallvec", @@ -4710,9 +4610,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.176" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libloading" @@ -4804,7 +4704,7 @@ dependencies = [ "multihash 0.19.3", "multistream-select", "once_cell", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "pin-project", "quick-protobuf", "rand 0.8.5", @@ -4828,7 +4728,7 @@ dependencies = [ "hickory-resolver 0.24.4", "libp2p-core", "libp2p-identity", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "smallvec", "tracing", ] @@ -4999,7 +4899,7 @@ dependencies = [ "libp2p-core", "libp2p-identity", "libp2p-tls", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "quinn", "rand 0.8.5", "ring 0.17.14", @@ -5063,7 +4963,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -5129,7 +5029,7 @@ dependencies = [ "futures-rustls", "libp2p-core", "libp2p-identity", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "pin-project-lite", "rw-stream-sink", "soketto", @@ -5151,7 +5051,7 @@ dependencies = [ "thiserror 1.0.69", "tracing", "yamux 0.12.1", - "yamux 0.13.6", + "yamux 0.13.8", ] [[package]] @@ -5160,9 +5060,9 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", ] [[package]] @@ -5298,9 +5198,9 @@ dependencies = [ [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "litep2p" @@ -5316,13 +5216,13 @@ dependencies = [ "futures", "futures-timer", "hickory-resolver 0.25.2", - "indexmap 2.11.4", + "indexmap 2.12.0", "libc", "mockall", "multiaddr 0.17.1", "multihash 0.17.0", "network-interface", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "pin-project", "prost 0.13.5", "prost-build", @@ -5344,18 +5244,17 @@ dependencies = [ "url", "x25519-dalek", "x509-parser 0.17.0", - "yamux 0.13.6", + "yamux 0.13.8", "yasna", "zeroize", ] [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] @@ -5408,12 +5307,6 @@ dependencies = [ "libc", ] -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - [[package]] name = "mach" version = "0.3.2" @@ -5432,7 +5325,7 @@ dependencies = [ "macro_magic_core", "macro_magic_macros", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -5446,7 +5339,7 @@ dependencies = [ "macro_magic_core_macros", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -5457,7 +5350,7 @@ checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -5468,21 +5361,7 @@ checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" dependencies = [ "macro_magic_core", "quote", - "syn 2.0.106", -] - -[[package]] -name = "markup5ever" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" -dependencies = [ - "log", - "phf", - "phf_codegen", - "string_cache", - "string_cache_codegen", - "tendril", + "syn 2.0.108", ] [[package]] @@ -5505,12 +5384,6 @@ dependencies = [ "regex-automata", ] -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - [[package]] name = "matrixmultiply" version = "0.3.10" @@ -5547,9 +5420,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" dependencies = [ "libc", ] @@ -5601,13 +5474,13 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -5626,7 +5499,7 @@ dependencies = [ "hashlink", "lioness", "log", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "rand 0.8.5", "rand_chacha 0.3.1", "rand_distr", @@ -5658,7 +5531,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -5671,7 +5544,7 @@ dependencies = [ "crossbeam-epoch", "crossbeam-utils", "equivalent", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "portable-atomic", "rustc_version 0.4.1", "smallvec", @@ -5902,12 +5775,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - [[package]] name = "nix" version = "0.26.4" @@ -6007,11 +5874,11 @@ checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -6047,7 +5914,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -6057,7 +5924,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ "arrayvec 0.7.6", - "itoa 1.0.15", + "itoa", ] [[package]] @@ -6112,6 +5979,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + [[package]] name = "object" version = "0.36.7" @@ -6160,9 +6036,9 @@ dependencies = [ [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "opaque-debug" @@ -6212,7 +6088,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43dfaf083aef571385fccfdc3a2f8ede8d0a1863160455d4f2b014d8f7d04a3f" dependencies = [ "expander", - "indexmap 2.11.4", + "indexmap 2.12.0", "itertools 0.11.0", "petgraph 0.6.5", "proc-macro-crate 3.4.0", @@ -6429,7 +6305,7 @@ dependencies = [ "parity-scale-codec", "paste", "rand 0.8.5", - "rand_pcg 0.3.1", + "rand_pcg", "scale-info", "serde", "smallvec", @@ -6450,7 +6326,7 @@ source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymes dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -7012,7 +6888,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -7250,7 +7126,7 @@ dependencies = [ "log", "lz4", "memmap2 0.5.10", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "rand 0.8.5", "siphasher 0.3.11", "snap", @@ -7283,7 +7159,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -7311,12 +7187,12 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", - "parking_lot_core 0.9.11", + "parking_lot_core 0.9.12", ] [[package]] @@ -7335,15 +7211,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", "smallvec", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -7388,12 +7264,12 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pem" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ "base64 0.22.1", - "serde", + "serde_core", ] [[package]] @@ -7411,31 +7287,21 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "permissions" -version = "0.1.0" -dependencies = [ - "lazy_static", - "regex", - "scraper", -] - [[package]] name = "pest" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e0a3a33733faeaf8651dfee72dd0f388f0c8e5ad496a3478fa5a922f49cfa8" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" dependencies = [ "memchr", - "thiserror 2.0.17", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc58706f770acb1dbd0973e6530a3cff4746fb721207feb3a8a6064cd0b6c663" +checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" dependencies = [ "pest", "pest_generator", @@ -7443,22 +7309,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d4f36811dfe07f7b8573462465d5cb8965fffc2e71ae377a33aecf14c2c9a2f" +checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "pest_meta" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42919b05089acbd0a5dcd5405fb304d17d1053847b81163d09c4ad18ce8e8420" +checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" dependencies = [ "pest", "sha2 0.10.9", @@ -7471,7 +7337,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.11.4", + "indexmap 2.12.0", ] [[package]] @@ -7481,80 +7347,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset 0.5.7", - "indexmap 2.11.4", -] - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros", - "phf_shared 0.8.0", - "proc-macro-hack", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher 0.3.11", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher 1.0.1", + "indexmap 2.12.0", ] [[package]] @@ -7574,7 +7367,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -7889,7 +7682,7 @@ dependencies = [ "polkavm-common", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -7899,7 +7692,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c16669ddc7433e34c1007d31080b80901e3e8e523cb9d4b441c3910cf9294b" dependencies = [ "polkavm-derive-impl", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -7935,7 +7728,7 @@ dependencies = [ "hermit-abi 0.5.2", "pin-project-lite", "rustix 1.1.2", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -8332,6 +8125,7 @@ dependencies = [ "pallet-utility", "pallet-validators", "parity-scale-codec", + "polymesh-build-tool", "polymesh-common-utilities", "polymesh-contracts", "polymesh-primitives", @@ -8358,7 +8152,6 @@ dependencies = [ "sp-std", "sp-transaction-pool", "sp-version", - "substrate-wasm-builder", ] [[package]] @@ -8504,7 +8297,7 @@ dependencies = [ "pallet-utility", "pallet-validators", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "polymesh-common-utilities", "polymesh-contracts", "polymesh-exec-macro", @@ -8603,9 +8396,9 @@ checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -8625,12 +8418,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - [[package]] name = "predicates" version = "3.1.3" @@ -8664,7 +8451,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -8713,7 +8500,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.23.6", + "toml_edit 0.23.7", ] [[package]] @@ -8759,7 +8546,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -8776,14 +8563,14 @@ checksum = "75eea531cfcd120e0851a3f8aed42c4841f78c889eefafd96339c72677ae42c3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -8798,7 +8585,7 @@ dependencies = [ "fnv", "lazy_static", "memchr", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "thiserror 1.0.69", ] @@ -8809,8 +8596,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" dependencies = [ "dtoa", - "itoa 1.0.15", - "parking_lot 0.12.4", + "itoa", + "parking_lot 0.12.5", "prometheus-client-derive-encode", ] @@ -8822,7 +8609,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -8861,7 +8648,7 @@ dependencies = [ "prost 0.13.5", "prost-types", "regex", - "syn 2.0.106", + "syn 2.0.108", "tempfile", ] @@ -8875,7 +8662,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -8888,7 +8675,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -8902,10 +8689,11 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.26" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e944464ec8536cd1beb0bbfd96987eb5e3b72f2ecdafdc5c769a37f1fa2ae1f" +checksum = "d11f2fedc3b7dafdc2851bc52f277377c5473d378859be234bc7ebb593144d01" dependencies = [ + "ar_archive_writer", "cc", ] @@ -8919,7 +8707,7 @@ dependencies = [ "libc", "once_cell", "raw-cpuid", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "web-sys", "winapi", ] @@ -8966,7 +8754,7 @@ dependencies = [ "quinn-udp", "rustc-hash 2.1.1", "rustls", - "socket2 0.6.0", + "socket2 0.6.1", "thiserror 2.0.17", "tokio", "tracing", @@ -8980,7 +8768,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", - "getrandom 0.3.3", + "getrandom 0.3.4", "lru-slab", "rand 0.9.2", "ring 0.17.14", @@ -9003,7 +8791,7 @@ dependencies = [ "cfg_aliases 0.2.1", "libc", "once_cell", - "socket2 0.6.0", + "socket2 0.6.1", "tracing", "windows-sys 0.60.2", ] @@ -9029,20 +8817,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg 0.2.1", -] - [[package]] name = "rand" version = "0.8.5" @@ -9099,9 +8873,6 @@ name = "rand_core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] [[package]] name = "rand_core" @@ -9118,7 +8889,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] @@ -9131,24 +8902,6 @@ dependencies = [ "rand 0.8.5", ] -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - [[package]] name = "rand_pcg" version = "0.3.1" @@ -9164,7 +8917,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -9216,11 +8969,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -9251,7 +9004,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -9281,9 +9034,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.3" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -9293,9 +9046,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -9304,9 +9057,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "resolv-conf" @@ -9488,33 +9241,33 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.32" +version = "0.23.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" +checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" dependencies = [ "log", "once_cell", "ring 0.17.14", "rustls-pki-types", - "rustls-webpki 0.103.6", + "rustls-webpki 0.103.8", "subtle 2.6.1", "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -9524,9 +9277,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" dependencies = [ "web-time", "zeroize", @@ -9546,7 +9299,7 @@ dependencies = [ "rustls", "rustls-native-certs", "rustls-platform-verifier-android", - "rustls-webpki 0.103.6", + "rustls-webpki 0.103.8", "security-framework", "security-framework-sys", "webpki-root-certs 0.26.11", @@ -9571,9 +9324,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.6" +version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8572f3c2cb9934231157b45499fc41e1f58c589fdfb81a844ba873265e80f8eb" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ "ring 0.17.14", "rustls-pki-types", @@ -9731,7 +9484,7 @@ source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymes dependencies = [ "array-bytes", "docify", - "memmap2 0.9.8", + "memmap2 0.9.9", "parity-scale-codec", "sc-chain-spec-derive", "sc-client-api", @@ -9758,7 +9511,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -9812,7 +9565,7 @@ dependencies = [ "futures", "log", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "sc-executor", "sc-transaction-pool-api", "sc-utils", @@ -9842,7 +9595,7 @@ dependencies = [ "log", "parity-db", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "sc-client-api", "sc-state-db", "schnellru", @@ -9864,7 +9617,7 @@ dependencies = [ "futures", "log", "mockall", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "sc-client-api", "sc-network-types", "sc-utils", @@ -9891,7 +9644,7 @@ dependencies = [ "num-rational", "num-traits", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "sc-client-api", "sc-consensus", "sc-consensus-epochs", @@ -9964,7 +9717,7 @@ dependencies = [ "futures-timer", "log", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "rand 0.8.5", "sc-block-builder", "sc-chain-spec", @@ -10042,7 +9795,7 @@ version = "0.42.0" source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "sc-executor-common", "sc-executor-polkavm", "sc-executor-wasmtime", @@ -10090,7 +9843,7 @@ source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymes dependencies = [ "anyhow", "log", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "rustix 0.36.17", "sc-allocator", "sc-executor-common", @@ -10121,7 +9874,7 @@ version = "35.0.0" source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "array-bytes", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "serde_json", "sp-application-crypto", "sp-core", @@ -10143,7 +9896,7 @@ dependencies = [ "log", "mixnet", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "sc-client-api", "sc-network", "sc-network-types", @@ -10179,7 +9932,7 @@ dependencies = [ "log", "mockall", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "partial_sort", "pin-project", "prost 0.12.6", @@ -10346,7 +10099,7 @@ dependencies = [ "num_cpus", "once_cell", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "rand 0.8.5", "rustls", "sc-client-api", @@ -10382,7 +10135,7 @@ dependencies = [ "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "sc-block-builder", "sc-chain-spec", "sc-client-api", @@ -10462,7 +10215,7 @@ dependencies = [ "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "rand 0.8.5", "sc-chain-spec", "sc-client-api", @@ -10510,7 +10263,7 @@ dependencies = [ "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "pin-project", "rand 0.8.5", "sc-chain-spec", @@ -10568,7 +10321,7 @@ source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymes dependencies = [ "log", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "sp-core", ] @@ -10601,7 +10354,7 @@ dependencies = [ "libc", "log", "rand 0.8.5", - "rand_pcg 0.3.1", + "rand_pcg", "regex", "sc-telemetry", "serde", @@ -10620,7 +10373,7 @@ dependencies = [ "futures", "libp2p", "log", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "pin-project", "rand 0.8.5", "sc-utils", @@ -10641,7 +10394,7 @@ dependencies = [ "libc", "log", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "rustc-hash 1.1.0", "sc-client-api", "sc-tracing-proc-macro", @@ -10666,7 +10419,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -10677,12 +10430,12 @@ dependencies = [ "async-trait", "futures", "futures-timer", - "indexmap 2.11.4", + "indexmap 2.12.0", "itertools 0.11.0", "linked-hash-map", "log", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "sc-client-api", "sc-transaction-pool-api", "sc-utils", @@ -10708,7 +10461,7 @@ source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymes dependencies = [ "async-trait", "futures", - "indexmap 2.11.4", + "indexmap 2.12.0", "log", "parity-scale-codec", "serde", @@ -10727,7 +10480,7 @@ dependencies = [ "futures", "futures-timer", "log", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "prometheus", "sp-arithmetic", ] @@ -10768,7 +10521,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -10796,7 +10549,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -10822,7 +10575,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -10844,7 +10597,7 @@ dependencies = [ "proc-macro2", "quote", "scale-info", - "syn 2.0.106", + "syn 2.0.108", "thiserror 1.0.69", ] @@ -10874,7 +10627,7 @@ version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -10913,22 +10666,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scraper" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e02aa790c80c2e494130dec6a522033b6a23603ffc06360e9fe6c611ea2c12" -dependencies = [ - "cssparser", - "ego-tree", - "getopts", - "html5ever", - "matches", - "selectors", - "smallvec", - "tendril", -] - [[package]] name = "scratch" version = "1.0.9" @@ -10955,7 +10692,7 @@ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", - "generic-array 0.14.7", + "generic-array 0.14.9", "pkcs8", "serdect", "subtle 2.6.1", @@ -11042,7 +10779,7 @@ version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -11059,26 +10796,6 @@ dependencies = [ "libc", ] -[[package]] -name = "selectors" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -dependencies = [ - "bitflags 1.3.2", - "cssparser", - "derive_more 0.99.20", - "fxhash", - "log", - "matches", - "phf", - "phf_codegen", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", -] - [[package]] name = "semver" version = "0.6.0" @@ -11150,7 +10867,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -11159,7 +10876,7 @@ version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ - "itoa 1.0.15", + "itoa", "memchr", "ryu", "serde", @@ -11185,16 +10902,6 @@ dependencies = [ "serde", ] -[[package]] -name = "servo_arc" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - [[package]] name = "sha1" version = "0.10.6" @@ -11293,7 +11000,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dee851d0e5e7af3721faea1843e8015e820a234f81fda3dea9247e15bac9a86a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -11426,7 +11133,7 @@ dependencies = [ "itertools 0.13.0", "log", "lru", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "pin-project", "rand 0.8.5", "rand_chacha 0.3.1", @@ -11474,12 +11181,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -11531,7 +11238,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -11589,7 +11296,7 @@ source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymes dependencies = [ "futures", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "schnellru", "sp-api", "sp-consensus", @@ -11701,7 +11408,7 @@ dependencies = [ "merlin", "parity-bip39", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "paste", "primitive-types", "rand 0.8.5", @@ -11758,7 +11465,7 @@ source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymes dependencies = [ "quote", "sp-crypto-hashing 0.1.0 (git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7)", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -11767,7 +11474,7 @@ version = "10.0.0" source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "kvdb", - "parking_lot 0.12.4", + "parking_lot 0.12.5", ] [[package]] @@ -11777,7 +11484,7 @@ source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymes dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -11857,7 +11564,7 @@ version = "0.42.0" source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2503-7#136eaf3cb3eeb76592cbcbc85bf3cffcfd14b0b0" dependencies = [ "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "sp-core", "sp-externalities", ] @@ -11992,7 +11699,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12030,7 +11737,7 @@ dependencies = [ "hash-db", "log", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "rand 0.8.5", "smallvec", "sp-core", @@ -12139,7 +11846,7 @@ dependencies = [ "memory-db", "nohash-hasher", "parity-scale-codec", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "rand 0.8.5", "scale-info", "schnellru", @@ -12177,7 +11884,7 @@ dependencies = [ "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12254,9 +11961,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "staging-xcm" @@ -12338,8 +12045,8 @@ dependencies = [ "bitflags 1.3.2", "cfg_aliases 0.2.1", "libc", - "parking_lot 0.12.4", - "parking_lot_core 0.9.11", + "parking_lot 0.12.5", + "parking_lot_core 0.9.12", "static_init_macro", "winapi", ] @@ -12368,31 +12075,6 @@ dependencies = [ "serde", ] -[[package]] -name = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot 0.12.4", - "phf_shared 0.11.3", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", -] - [[package]] name = "strsim" version = "0.11.1" @@ -12437,7 +12119,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12578,7 +12260,7 @@ dependencies = [ "scale-info", "scale-typegen", "subxt-metadata", - "syn 2.0.106", + "syn 2.0.108", "thiserror 1.0.69", ] @@ -12641,7 +12323,7 @@ dependencies = [ "scale-typegen", "subxt-codegen", "subxt-utils-fetchmetadata", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12711,9 +12393,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" dependencies = [ "proc-macro2", "quote", @@ -12740,7 +12422,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12749,7 +12431,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -12789,21 +12471,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "rustix 1.1.2", - "windows-sys 0.61.1", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", + "windows-sys 0.61.2", ] [[package]] @@ -12831,12 +12502,6 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - [[package]] name = "thiserror" version = "1.0.69" @@ -12863,7 +12528,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12874,7 +12539,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -12929,7 +12594,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", - "itoa 1.0.15", + "itoa", "num-conv", "powerfmt", "serde", @@ -12964,9 +12629,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -12989,33 +12654,30 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.47.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "pin-project-lite", "signal-hook-registry", - "slab", - "socket2 0.6.0", + "socket2 0.6.1", "tokio-macros", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13102,9 +12764,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" dependencies = [ "serde_core", ] @@ -13115,7 +12777,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "serde", "serde_spanned", "toml_datetime 0.6.11", @@ -13125,21 +12787,21 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.6" +version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ - "indexmap 2.11.4", - "toml_datetime 0.7.2", + "indexmap 2.12.0", + "toml_datetime 0.7.3", "toml_parser", "winnow", ] [[package]] name = "toml_parser" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" dependencies = [ "winnow", ] @@ -13171,7 +12833,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytes", "http 1.3.1", "http-body 1.0.1", @@ -13213,7 +12875,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13256,7 +12918,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -13279,7 +12941,7 @@ dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "regex-automata", "sharded-slab", "smallvec", @@ -13363,9 +13025,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "ucd-trie" @@ -13399,9 +13061,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-normalization" @@ -13420,9 +13082,9 @@ checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "unicode-xid" @@ -13510,7 +13172,7 @@ version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "js-sys", "wasm-bindgen", ] @@ -13626,27 +13288,12 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasi" -version = "0.14.7+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" -dependencies = [ - "wasip2", -] - [[package]] name = "wasip2" version = "1.0.1+wasi-0.2.4" @@ -13662,14 +13309,14 @@ version = "0.12.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" dependencies = [ - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", ] [[package]] name = "wasm-bindgen" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", @@ -13678,25 +13325,11 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.106", - "wasm-bindgen-shared", -] - [[package]] name = "wasm-bindgen-futures" -version = "0.4.54" +version = "0.4.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" dependencies = [ "cfg-if", "js-sys", @@ -13707,9 +13340,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -13717,34 +13350,34 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.106", - "wasm-bindgen-backend", + "syn 2.0.108", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-encoder" -version = "0.239.0" +version = "0.240.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be00faa2b4950c76fe618c409d2c3ea5a3c9422013e079482d78544bb2d184c" +checksum = "06d642d8c5ecc083aafe9ceb32809276a304547a3a6eeecceb5d8152598bc71f" dependencies = [ "leb128fmt", - "wasmparser 0.239.0", + "wasmparser 0.240.0", ] [[package]] @@ -13872,12 +13505,12 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.239.0" +version = "0.240.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9d90bb93e764f6beabf1d02028c70a2156a6583e63ac4218dd07ef733368b0" +checksum = "b722dcf61e0ea47440b53ff83ccb5df8efec57a69d150e4f24882e4eba7e24a4" dependencies = [ - "bitflags 2.9.4", - "indexmap 2.11.4", + "bitflags 2.10.0", + "indexmap 2.12.0", "semver 1.0.27", ] @@ -14087,9 +13720,9 @@ dependencies = [ [[package]] name = "wast" -version = "239.0.0" +version = "240.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9139176fe8a2590e0fb174cdcaf373b224cb93c3dde08e4297c1361d2ba1ea5d" +checksum = "b0efe1c93db4ac562b9733e3dca19ed7fc878dba29aef22245acf84f13da4a19" dependencies = [ "bumpalo", "leb128fmt", @@ -14100,18 +13733,18 @@ dependencies = [ [[package]] name = "wat" -version = "1.239.0" +version = "1.240.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e1c941927d34709f255558166f8901a2005f8ab4a9650432e9281b7cc6f3b75" +checksum = "4ec9b6eab7ecd4d639d78515e9ea491c9bacf494aa5eda10823bd35992cf8c1e" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -14133,14 +13766,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" dependencies = [ - "webpki-root-certs 1.0.2", + "webpki-root-certs 1.0.3", ] [[package]] name = "webpki-root-certs" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4ffd8df1c57e87c325000a3d6ef93db75279dc3a231125aac571650f22b12a" +checksum = "05d651ec480de84b762e7be71e6efa7461699c19d9e2c272c8d93455f567786e" dependencies = [ "rustls-pki-types", ] @@ -14163,9 +13796,9 @@ dependencies = [ [[package]] name = "widestring" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" [[package]] name = "winapi" @@ -14189,7 +13822,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -14220,44 +13853,44 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.62.1" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6844ee5416b285084d3d3fffd743b925a6c9385455f64f6d4fa3031c4c2749a9" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", "windows-link", - "windows-result 0.4.0", + "windows-result 0.4.1", "windows-strings", ] [[package]] name = "windows-implement" -version = "0.60.1" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "windows-interface" -version = "0.59.2" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "windows-link" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-result" @@ -14270,18 +13903,18 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", ] @@ -14328,14 +13961,14 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.4", + "windows-targets 0.53.5", ] [[package]] name = "windows-sys" -version = "0.61.1" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ "windows-link", ] @@ -14388,19 +14021,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.4" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -14423,9 +14056,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -14447,9 +14080,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -14471,9 +14104,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -14483,9 +14116,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -14507,9 +14140,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -14531,9 +14164,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -14555,9 +14188,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -14579,9 +14212,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" @@ -14610,9 +14243,9 @@ checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "wyz" @@ -14677,14 +14310,14 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "xml-rs" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" [[package]] name = "xmltree" @@ -14704,7 +14337,7 @@ dependencies = [ "futures", "log", "nohash-hasher", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "pin-project", "rand 0.8.5", "static_assertions", @@ -14712,14 +14345,14 @@ dependencies = [ [[package]] name = "yamux" -version = "0.13.6" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2dd50a6d6115feb3e5d7d0efd45e8ca364b6c83722c1e9c602f5764e0e9597" +checksum = "deab71f2e20691b4728b349c6cee8fc7223880fa67b6b4f92225ec32225447e5" dependencies = [ "futures", "log", "nohash-hasher", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "pin-project", "rand 0.9.2", "static_assertions", @@ -14743,11 +14376,10 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -14755,13 +14387,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "synstructure 0.13.2", ] @@ -14782,7 +14414,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -14802,7 +14434,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", "synstructure 0.13.2", ] @@ -14823,14 +14455,14 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -14839,9 +14471,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -14850,13 +14482,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.108", ] [[package]] @@ -14905,4 +14537,4 @@ checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", -] \ No newline at end of file +] diff --git a/pallets/runtime/tests/src/settlement_pallet/lock_instruction.rs b/pallets/runtime/tests/src/settlement_pallet/lock_instruction.rs index 651d135fbe..52d22f91d7 100644 --- a/pallets/runtime/tests/src/settlement_pallet/lock_instruction.rs +++ b/pallets/runtime/tests/src/settlement_pallet/lock_instruction.rs @@ -554,9 +554,9 @@ fn lock_twice_success() { ExtBuilder::default().build().execute_with(|| { System::set_block_number(1); - let bob = User::new(AccountKeyring::Bob); - let dave = User::new(AccountKeyring::Dave); - let alice = User::new(AccountKeyring::Alice); + let bob = User::new(Sr25519Keyring::Bob); + let dave = User::new(Sr25519Keyring::Dave); + let alice = User::new(Sr25519Keyring::Alice); add_and_affirm_simple_instruction(alice, bob, dave, SettlementType::SettleAfterLock);

    Y=6u4lwZi;8?l&7Y0pDB1vRvEz^rx!iA(l+%l30~5d_=vnj(h`zRTiJ z`1-8OtM++bdxFnV?4Hy2^W{?LXtcP{pI2IVMAc}7bhz9H;C@HpNtLZeAs~v zq6CjAHl}igr%EBQsYA7kX$1JRvmPC<$bJq5?q#9ImNmYm_MWs1sWOE03}pmM&qn4u zzd)3Y%BUOXi=dMq*jYd(Xj3BX?fFrJ3#bMESGl&XyqTU5yQ35m-1$^@P|#@yKXCul$hdCyfI9#(z`0Nr5ezP2wU@O^&F%p zkw?)b{a34DMwwKCyy$Hlh7my{g$%aH^!xI)#^BWwWXY{%#{=L$BG*ul0-Pw0PS_u*<3e>XuBsY^3(&wMH;&0=XAZ{yEDm8nhVPh4hBDmzg4U@59&X z&j^^#t*6Hhf)VjI<;mG{Yb#P=RNaKt<);aOI zfdo2cDC|n-(kT`xUa@FNo6?#k(fVQ1x~tYDGfj{yR3TnUL~`zK6s+v0*sTh9z8^0{ zy)-YD$P{LL^p4smpPiSOr2<*UZ3NU|us%wT@*-@h z&(2ZS^)mPrr>g}1Q0>aK5SO_KZ3&a3C`$3f#-rsq_=8IHzxY46ME?LP8UV2RN-$>9 z6SAGINm({7O}3NJ(1qYY=9MDmj)FCj9EXk^e06i9-|yi5(LtTy*fFMJ3<(bQBPMxv z+9-|4Tz-OPy#3ZsHm#EOc@=7~1gz@zjX2?0}wo%Y1 zy?SP4k!0GHWeay3$)i%)ef#$O!=aW2~e6)bjmD z!?0)6K+wL(JJP_L5jNvbVi6J$vbX=hYSRaU-t+;g(S*qU?48ef&M>}Kym-pyOfS0e ztJ8hg_WYpw(=}lo3$_aQnz}+SZ+xPt!VNmB?E7EQ2LuWUvNaj|h-|?m9{` zk5DKttJbAXdUYiWD&I%>rWp*dhB=?PE}y=q`B3cVVElvCGkc3&E|Eu_Kg&M!Tqoj4 zTrof%AV0c28SXti+UzV|DyPQ=R3@8DXGFa%UMjelD}85|`8w7*pCQ-X+A19LAxCOy zfe(B9{yBeWXzemai~igF0LJMWfOdiTo+z2w}p-3 zB>vqHG#m1)y4E)|CL*Qmc3n)VZoRMyWgcUC@YL)>G7{U)9PKpGBpy3;!yWI>iHAIjCYS)P#I{lx2}#7ZhL&R7T4>=2v;r7PyDxWE9)gRA`k!s+ zCY#%DN6^DXMgU)&OC!0Pn7(QE{_|frhg`jtbJS-s`@#thINhTbwK+8(gbpi0R0}D zTK`f?Dw7$>>Lr9jfa~&Tr-P~%(9KV!u&^hih}&)y!ONb&7CAAi?5PQA5k)}Dk8B?u z>#oiO56mu7XG#8_J%QI?zAag2Ci(d&(j3~7@pp9Bghxc@_YaL~C3V5B@D$5pr=9=y zmK}PvnSXRUHi>lX8Y&1e_{KVwr3yPKDuvC=_51UOX&Jb zV+`tX65ZoA=8SxRG3o5k5rKAwmV4cpYwRM+e(mbL9P(az7h@j>tdHr7{XKl*>OJiD z9<)B)h3-E4{4Re8!++}PA0PCOiCOA_yS+<3I*w<5v<_<7uW!#sbfWlU(4LG?%*TGu z^ICms$vb0BcX>az)VS{#!)JKB)gCG9@4vpn9yiCw{q|UkkGI+5P<(u)J#LAQKV^^C z#m58oI2<2eWsh64dH`deJ#S0T4%hbd?0}7=XNTDl3{r)P)nru6La-JG5sz8_1^4&Uzd?C`xbJv)3qo}L}P zpNP-<9lo*j?C|YL&ko@D=IV;d^;{cKG(CXNT{W_Dl2sl%5^FiS+F79Zt^<-;wm}@J*&?hwo^7{was=SbBE&?n=)N z-|_V9@J*#>hwo?8v%~ju>Dl2sk)9pClj+&vyE{EQe5c~`0f+B&dUp6;ot_=Od(yMR zcP2eMeADUK;X9k29lm?hv%~kA^z886m!2KI`{VPg9KN4V&ko;f)3d|(Kzerg9!$>; z-yccO4&O|AcK90U+2L!ZXNT`xdUp6`v)z$CJAkdS!69sy4G!X5+2AmqFB=@l`Le;G zTqqkH%wH%Q9L@`6g9Ex)HaMh9so@rfbh&JBNLR`Rhjg`Ua7bTQHaMi6vcVzkmJJSR zuWWEg*UAQm^z~(fL;6r^2u$T-+2D{~DjOWqH$_9t@kChD$ z=`WTI4(a8x!6AKfY6$G*zbzXa(m!4{IHV7k4G!sB$_9t@Pm~P~>7Ohc9MVV128Z;m zWrIWd-<1sx=`W>*z-Zo9HaMhjFB=@vKUFq3q<^|>a7f=#HaMj3EE^osKT|e1q<^+- za7Z658ywPirG~(A{`<1QA^me@gG2gQ+2D}AyKHbs|9sitkp6|T!6AK5+2D}Aw`_1o z|6L2b`X9;$hxD(N4G!rOWrIWdp|Zgt{U6H)hxC6c8ywOPmkkc-N6H3=^sko< z4(Z=W4S^y3O4;C$eza_GNPo3#a7h2>vcVyJvTSfjKUOw4r2k9V;E?{!vcVyJs%&sb ze=Rix*7U!Y4G!twDjOWqkCzP&=_kqthxBik4G!twDH|NpPnHc1>8HvDhxG534G!u5 z78`Ee=am2HvcVz!^|HYs{d;ADL;Cm228Z<1WrIWdnXHl6fIHdna+2D|Vv21Wizf?9jr2nLBa7h1Y zY6v{)%VmQ@`jxW5A^ktg28Z-F$_9t@t7U^j`kQ5gL;BCk28Z;Ymkkc-*UAQm^y{f1 z@Th-LHaMjJSJ~i@K2tV0q~9nT9Mb>0Y;Z{bW!d16ezRf2?5L;9Vv!6E%OWrIWdZ_5UU^tZ|ehxEH;gG2iNlnoB)zbhLY((jcG4(V^FhQOo# zec9lU{=a2|L;C%)!6E&fvcVz!-Lk+;n|&q9m56=hZibW83gcG$#h_+qsHHiHqRMVVZ{tFgZ z{SZtq8*2GvU)nx=JoHzIE1XoUYg?ACXuS->e`WhfBgOXwW7>?$lr6V=yP|O|L{eh2 z$v(dGj9I$!@ZUqbf&(YdYn!r>2?E&ugFF72%LWPN%C^Hn7e0Glzv3ugB1$%Yzg30mSz;a5ufmSLpY z>9eanVo=3beRoq2{^g;G#l-{wS08bErpBKDaSQ;$1kV%sK8B4`nb_1twYe})tcW2+ zp{{Jd-pYB)6&Ozg#BqI~-G}AgJx($rn=mvwe)-vUp!Qh(WOG&aSL-17DP*ZFFL0yW zWwAejKZ%XrI)}j#)lg4AkbWieeF~weu3dd>skusEkSa!p3E^us`?ZErLWe%yQ|$C8 zggnDL#XkhU^sR0cNUX#1OyGW;#f^X;rG7@2%#p_zQi5mf?M5+nnh4iru76=wvgfcQ zt98AaY|MkoLnH?q?cz1lW`snSpE~;K7Bmdg6Tjb^632q1QH)I}q zsZ$GGY*sEB`>gU4!FO_7Ej>)0B({Wvr=GG6+V#^b_YyMs2FqG)hUsT}*>Qs#zxwNy zF=YYde783wwCanZewYkb_0jfs*<<-3&Ram^-j%uV^7re%K%%xx`zoV~+hwV(un|uv zBKuhBGxN;Q;{BE08+_w|8Wm#(ik;|$F&t{fEq&?%g79U-fv4hBgCrNCD95eA(_ND_oAmQ=Rj8$N z347>N-T21Z2MsmIOXgTb9*>QqjMy})#m6b6-IgP!|3I7^&+}Y?AfPOT-hG`@-WTL6 zqzw1wp$h8Sb~h9(=9qES0hcSs-OEew$|+bojyNFldbV zfQ`#vYsFvyN7W7ljwQj6i{q1tpd8-_3;ex3Yas)t=OHCo_D(Ievu0-p%GkBo6s@V2 z)9HEsfm(ig=RU(dXYJjO*78l)Wlz8ON-e|Z^RplPT>iq}3;%5TC*S+?S-$=9JAdv^ z7WoV3{GY#?Z_gh4cXvLRUi({!KJm>P|KfN4a(eS$@MeF9`E}VN_xwWdg@I2Wvd_f$ zK3g}C>OWp`Ok(!hI>p`F$sc7y>>P=ywm5aFxfdi9WY&SGWYW<`C^cOUG_P}ra!rz~N_jQfGK*h%Fr~dh$ z`~Dl>`Q5MSg+sr4`{(oTz3b0!;qQO+)MJ0{Uw!sZzi2am|GQuMiC_Bq&m29WNqp1>_7g+&3{|{JoVnUzT?zu|IE+m@A+T7 z@V=XW{bznz@BGx$fAfW>Klqog=UtZPUxBl6~@4l;B`$heo{mAw`-+5F1Tl)Lo{He>AfAydJ#%Bfp-@Nd_p@R>+ z_oDv3|L6bCi9hnb@BXgd`HPP?|LTkW!9V+5^?&9!PUjPU`lpZS@5lb(&cCzvt{42M z{%-v7SN($*y#7P~mOnFv<>$4B>vth+=@`KR7M2m_qU-}#v1I?TGiPo)Kx7N4>UV4& z9?5n%0)heNTn7R4g2G^U!_OpwjP+JPKfqQV;k8PC^}W5h+r90;F%$Q1me_|L<@?mjUyd|BSgP=dgOo3w@ddbK%tXo&rC~V zRxpX>)=I8E-&{JUN)*WGs39rXMAENaePG$k&F``Giwm1w*#TUT#SMTG%x}rkfPfX9><{mNXoXqT#9dg|2OGiQ$8b@J%l(=#WI-hJ2f@kWt-vwlhm7F;dj9e~FaB{8}U zf;lwY)`8GPDwIpJwnw0Rfr<~1iiWg6wb+Hv#xsvag&X^jj-5tZC%TMH6xmM2u0R4N z&uWHXl~)a6f@Z4N$}O0rFx01CbLzgmu01!Z8{&6ANMcao3`?2T&0|ysvIA=QhRkE- zLi18FKILV?QFB{ab^|>Rv&_?!XJIo)_jT=N%xWKUssPz3Cl!$(CT}n--V+EieKr(N z*FdR9sD`2K^_N2_^6^EQnQ%W{Q3cm7W}uU|!K;uPy5~?i-2YrjFEdOOu5=3v1vqY!_rD zUTQVwH6dCnDtyArlIy{ad+#|G>a6W4vZ-7K2msQ?^K*lmc43j)TlCwJ;h4~nRZFV3*DB1N5-KN{n)7xiZ#%wNKaOlA zq_Vf;;`+>48^!LM=*ARe0@MR{l!1|Yv9@|c z4vQRc`ieS%(j6<@VY?K`s1K)%ThbXsT5N<5!%Kr|X_zc_(0_O?*?|(b!c>vPfV13Z>SI)0v9R0}AuO_785S}M;l*qxtPkQu zx4oy>f5vgkUPbiV!@AV>VDL)TA`NTD_?CV9A|^UXcQ)W)b#w%EV>HAFb|*E1kr1pw z$#|4)Ms_*^LKhjrzY#tb(5yyD3Jfxx2~@9JTX=misYOYpK7qM}f_6(R4x)E(ChcvfKCL^nCU{CuYiBR=Ubd zBp`Oc7KCZIP{gu^JK;=N6`9cD8F<3!2oo^tbi~I5qE3;Oc;u@OOGD5VY6*b$MO)gy zA#97omqmWtP&TsPwsElNs)DBh0J`caKeNW1sunD z_7PW@Aioemc2me%P2NkgVT2esU23$;E^l&6p%Y82LO~w?i!!lXwM)tA#>Wh7>e^Gr37=POtp#&8U$bo;Z9oQWI#f zmF)r@pact%7L8l#d+R(VD|z>E`zk^1cfcVj zN;P#Cj!N5I+EX0Byi^gXM@Jw36R3%g$m$fe6(Mk`{>Hq9d}=7)tzBS4msTr(4v*Zu z@=%}F{f?we+eWOX!?xJVq}Ca>w@A=RcF5 z9Lj3@Pa?x%DMb+m$t2SG#A>+-v2 zFxUy8W6P&N-b4&p>0F4+A9#Qw`X*fTr<9r!c6?;5RADy&nnF4O8gbx*Ghk_!N@G3u*XU07TKmRnt}xqyITqM>mH z0U3P7MSgZD@6~pNtfifY4julXC?DE?YfsqD1P@$Pi-jUmPCBm_pOE249H+=19NIkQ z*ea@@SN^W;^maN0uvXolM0_K=w-qWhD1|S)R7E#We+^T_6Swpfbr_Ylo@YA`>DB5# zxNU_*c5^Utxr8Sx+Za%h!)vbjV#f*SQ&)bitSMpSNqE{NxGr3+rP~-qzQh&H^%fT@ zRwwKhFO8Hp2qwlpp%X#j6sJI54O=ztf`YG-D(tn*KZ}QuL5h57D8E=cepIDPKw*eg z+K1}I^!G4S#~8LbB)|?_F`;g1Fjc4~)CEcuy8>q2n7vEb;+u!;>-r9Ba2vD(zJUh)$lZ4IRp|)-V5! zU;XO!X;ug1?Lkey7x_R6X?BU7$nrN0{@ z6LKWP40rzFn?#TAdRWL$JH3@IsrwLAt3f>LkXzZOR~Q2UwcC61&;zms_x&^VD?H|L zKpD%ISC)*i$a>0FL{m#utwH0KkRb5fQEOg`BHO~1tJ><`B{aS8S7QuHO3F9JRUO_f zm*1+xJ6)fgnyl}=vr_E&Lil+OH5{X zXw%z=fKy=sW7CS&>D8wuITiZdyjgp2vZ%OfXPn&4)%G6Em=yGwW^ON%mxWVvWhwSr z8@e&yN1uH7UK*g0 z;RS_D$yV-UseVf_&pp;hWNvV-7A#cWug>ULJrb1K(}D9v zE7r0N#EcU)z;f=!G>PH29-LK}I=D_>q^;L4!g+n=bvtgag!q4c+#tlGdr5N=Wx}bRm@7@=-tOup*(HzZ!bN#pgOZ zlDp)7S^vUd^gSN>(O+IxK-8e-}h&<2yd z&lmgS@cm(m$93(CLnv$0T(eW`N?T>S?!Rt#-)L)(8n8-z>*3hYdEZwgUj~ogispVPO(DGkT%75x7<+q3OCfog);p^wuZ+GRKT;sR@ zGEd3x4CUC8^Un>xpl&7siX35;k@1qh4(*SBZ8QSOKiNa30M%{)x0}Z|texaVHh1Ru=Jl zuSpa>HJAFUZK=jse!A{2SeGXAv|BGn_rr9InC!i|E>Mm)U4^l$>fN#!OOLAd{8i~F z1V(!5nF3XVWjTbcApa;POSZXkF7+POx@0wuq92M+f4?K2^Z>FXK4C;KgH8!w9Tge3 zWiZI>E3#htP3vNIxyt9I%q$D#(3gfK{*F9Zkv_|87LD|J6MD_Ql=>~QUrB$rIH6NToUW3ISufu1-!xL=W2Ut39Fm7P*DS2U_e8U+S~W^jcc716Yt9bhPX{2 z$0D4hj5ttQ4W@884Xk{j&$Jb@YJ)SsiTX40jH`~8AgLo7bcpWD{bn_cLhFuF zTA3pIVw&Ky<4+p>&Vu-H*O5SZa3o@|pn2G!!RU>C(?>AUsM*s$z@Rq3oyDP}G1kYg z4Z9Q^z>lQ!Qi%rgyTC5h&#!SkU~x#6jOmpKF;!*#ykQ&}c`Ajp{(=HyBf71#;DKgA zWz9a^2fEA+d{jAW@l{&yEUHeVxwOk^vBpAtKt>>}?mL}kmN9~G;c8B${C&Pu1ND`G5Q z;40lr0Cxx(D0>0@1q4(}InN8Lcz_hkY3olQIWDN>S-ZamXRn=4apwghRh2HgAOFzW zB5YVyHnFIDpFJfuP!8e{Q3P0QBTg9$0F)C#&c`l0u3KSY77R3t%bz=L2$NC%z*J8J zOa>_S*W3#8cyT&y?CBU2?5;s3A@47Sa%|WhRDnx?o-h>8lAGq%6G$MJk1P^Z5+iBk z1zvK*!hA&a{LT~XN@WI~feAk0>9IQmvH3wXC^AZB)Xu}ijS;XbA5q3c@v9_O(UOdKPS$EMtv@Z9t%ZmcrvFTN=GRm`Y# zh)uj3m#Uds1k*t8J`$HPg|Oklq;-zh1rXVgs==w%Qx=oO*6OrD_X91I)7C~PG+x4} zKd|uiJ>4HQ}rws z5cj*gCjXDpqaYP77LlMSbGB%ui8&v)=mVwKLHUVY0F_QC zouLCNZOXnQ>H{I{!=*6-r460-)Nd{kXCqRnb^(IpdANrTv1S?$bg={Zrrkz39LlcW z0=j-p_Y(%9+EHjwOOlEb3M$cKOXLR>bsRDvG6sA@<=-cojwPIt2Vp3?lv9{9QhfOz z%?C5~5E0E}I_)V5hL37)ns9WKP^G9PxqQq(13gLW{`&;)w2|0$=h#Z80%)um@I?64 zBxgGqICmuQ&x$bfUm4Bi%VHwOVFqOv_Mz2g7_p#Hz2dwgLF}DGA`5k*GvY{;WUWoK zs|zC|F!CXeuW7P@3W|jy(3etiJ$}*LdJ1r{49*ZlFS-gj9ZQtLo!diOYuWL&aB|`% z^qm>X7RW>9OTVBi5;+9!AFS*HI8ERlWLt}qX6Cg1J~iszG`gZ2-Cuxr+cNU*c3U$0 zr|%diY$!9StZ2%EHX?=3cduQ)=cSxON;cmw<@MJ#Oouve7et4tic2*fTo*0P0Q8~A z9^)}#8OgQ~L+%nsN`F|Y(@J#P1i|v7*AcK|tCIo`4{+KSERWWT&IwlF$^o)Zpr|CA za4GET4O|blZ|Dp|XS?PAd>xq@3P-bW6C)zFUN*=cvKBmzkiLDFAuEbfHNTgx=(HR= zjsrXFa07K^g;=#|_wUH3qVtSrJp7vU$XxkS?uI#kuWf_Uy7_L-%wqoeD2o`ouIG%+{^0sv!jBT0myE@~gF@S~BrsC%|F~dwcK=!F3 zc~$ZatOpgC^kH1>w|a(+HyV%u0oKH)PTGmf<5|0gEGA2Kng>R zDuZ${%;eG2BoGQb%qLJ6@fel10c7-51*d9XtOv2zIFeK5_~c7xv8d&E zzCylwd%m59*GS?7jn|ggM8tX@JOoxGOnb0FQjagf1-DoZ4c)NyWBCZmB4MlWGYVr$R36GEz`4q*6QQ6|4?ATVWCe>|^nQM@Ya34H=le_?@i*EIDZ(SL##D zLv+-yBXsxcz;&G<$PtlN5;Y1PYKW5ZER9ga9<-&&pJQh>s72)~alj|Yj>KzVi{q6Q zIkISZV`lA(3p4&$Jv2Yd0vV3eGyirGfK;^0(6Z7$#L}*SHA}BZbD}+p>N8bVpJSt4 zLuLx1&zI{Bzd|MvvwKWxZnp^0ODBZFGOFbQX$Xr`kcWxTB^1<>d!}T=qO1cuBag<4 zvgqfuG%TCs19-A$ptSZBvb*@aEZc}lnSf{AF1%c|P8iiWU4_v|s3&ow$ShsazlUEL z;_yCv!p8ki8*kF`pGFLl3qS|T6pS4=P#UL1gGLn##BEuSGCZ^@<$x6>+4}#>u{$B~ z(_|h0jB@Top$pb(58zL*8<}<-NXT&wdU+GIxJ1rOno+W<4mJUy$nKzwE;k)?xOLZ> zUbO61=Ns5P>Bm7ljlM!vGLiTfZQWrZlEY8b{kJHb1(kdtwRx#g8}IkI6Pta3gZWYR zD?cdO2UL~|amEY@f@x!<*YG!uPx?{@UEj{LyH0dsuD*sGcxa=4`qx z;|F`j_y83eWSJVa)Lev;rRWB55d4L{8#2B{tiD7HUXv zcGClp$oHLH=*+GyvBG9D7;6{!0MAPWSXRrP;?UXUkcD8tV!9MwycAKZ_DKt&T#LU4 zQ)M_H(g;nWbG(pH*eS-`E+|CHGnIZD1%D@G8L;ASX67(8a<8m!EF8N@e{L0YZr(42 z*p@~9|1|zpHX|yKaQh_r+4;84A{QWo<9z$}r;tosXqge>?Dea5z@3?xi1*V$B-HN@ zHcli8W2-T>d=%-}Y3g2A1DgMFShVtS1C+&i{1LhUK1|ewDq>FmyPgU5$RUcB=FqpTWhJ3#I=_z{tS6V2XG=9(%|eyeHbRlv(9P|) z2Ut!vmmy-E+i%CRFcW@6r#L|dfva8#bvb*lVy|{DK#e`uPwT}NyF;bI;b_;#;41Kl zv{%$4VI@ict(II*#Tprie3ce2jfrqd-EI{b#Y=z(H7yQI{Ihk$1tarlUMlGbq!i(+HIo}`#kb7Ocx7dKzwJ|y{AmKQ4?Vwred zF(IgeC?n(#!>9}+%1&WH;;zJS*>Zt|*GO_!VHG4xyX(>W=P+Kv5xU&8H#;xylCo~S z#Dk)qrSTmwEYOrdi!PU;$;^^K&$1WEeEw?JQ~Tp!OEjkINXFn}snzDvtMXO*t@poCz8!@_rLrSq}| z<(+~CXgQr5x`n%V&bQn_7x@&E_RH+^#-8Fd`c6nNYPVt}f~3&P6C#e^tRGc^UNYtB z#IOQ(SsX_jhp_S@$r@hiygWe*s7f9_9_i|Ye*my~_7=P%q)W%2>RpH(R7^ZBecz?1 zVd4_pDtK=^=cOy>NRzsDK`g4h*La4Cn9eO?vkQryEK2FlDO4{MOi5#yPFw!&NLe2A zu%gCt>#yC1!rxqdu(&VAcb{z4d=`IxfQ1N1UhkD8;MDbu{p zs~nI+Zz<2K+~H#1ab&oajxJE_&5w>w!)H#vtrDxmikpyOIjX>l=A+k(>>0$&=xV46 z6JT4)hqaISsPWoB1YD5Vn%AqNl9%X|(Zz_{DdfSRXWU4D*Q@#%bos{k5R^i%r5!UB zF20>wUA~RY{^V*!WBdv4p_J<5YYg3QWonE+Om!px;yj)(ms?>Ol3eKL+C`VbQ(tol z3oBgd8x~tA51B0oNhdhe+%4veviM$oN_8|U{KM>HWkICMy8Ek*id=T*C#&m+m=?BZ z2D@T!z7cJ078`5kMvYYso1N9)!QvR?O?OX$%n0oqLqFj{?zQ&# zH^F7LyToO2D_*jSw*Co+E#4Ol9x;#L_OQx2Zr*5Aalr_@*(ro}tR7Au`T8M2r4H3N ztjBf>-+qIcSmo(w+a3(6mc{QNJ8&W{;?K?HFWOjX3H)bqjmS-Lr*n2#A-snoQOpGB zP(k{~b<>QciCIk*76W{UnvUewHW#((Yiyvt`XsP@+X=P=+=dyC*oK+DU7Ts2>#VKz z8d__Jk1c!KyfNGf?pUOY(m4>LqpAd2Tdf@7An*9e2M3FT(li(&7DpK!-KB57R{6$I z)z~NUslpNFSn;molG~Wr6BB-*r-A-X%DYm<}yq|W+B*V#p{@gd<3;b zF0zm$Y#58wY;1#(RY~jsKSuPB>-&4bs4ux>9pKM}@PN!!(le0ol=Cw@G>U4+)o2Rq zQW728${(2KurBMC%XHx9Msq?~9blByXAtpW<7U!KW_+XiY0!S4hxP{|^Z*NbZ$w`R zQ55gqvT1a5>rgiQOp-}Tb4@~bJIj)HDFKO;XD-MTm?-9$Dz&JWLBo(W>$erBK4*ek zws_b+=`2Xynz9=OILF5FV^I^#c$fd~`~TS6H-otTkLok>*}8}wx6G+(f{Z_XNoHOU zFNgvbfhG=7Odeaf*lyi#mvcL@V62Z%{_ONG#*v`997=x!lBF9!yq9R!G7@Z>M%C74 z`odKP&8N2BP&XY4Z7@%NjqJL|taE0L7(XeAd&&=Kj6%kgM@=a?kZe#lZ%eTbswI%Q zjltajY?GVU!dBs-!0>n95i;vtnhWEhMN@8AW}sJZwM@x9vTC8WAx28I_D+)P-(&~m zEL0V%!2qpRO?mmTMEUGztCysrO-dRRweB9i^mBX?hN=xcv9FfxL^3#v>;+xGESv7h=BIQ4X#gt35L`0r~ zv8Wry*kZ6s{vPp4(0a;dlS5*V=3C7KI$JITC}Y3=AUm(yMSxV*cK7m2{{Hq`w#|ptPGTp@1`oSiE zHFR#@6~`xo+34O#YJu@atO`4b6fBKZ$;OjrhCx2e;s-L9T*Fwh(51sP&~rACSY_2P zrx~}r#rx#DoJO+=1-vTvx3EMM?TD-e*=4RH| zw~hDsRLT&tDQ+|24;hoRwGGA#b!6&4X)Q?piki|mMSjbc{Ox2gwYR?TxPtA;OYU7_ zcV^`rxMb9Q$F953>07JKJpQqB2V#y2xh;tLzN2nW@i@d&74rEJK820@L;Yz#9a*-d zFF%<=_}#~Qdwt9z*kwj-QkkPPs`~GHh~6X9=a?DUEL?>W3AS`z9xW)SFcpYJw3g{* zHpF`<6k4t_zZp5*275zQ9*~*r5)ToX06zjM5}001)Zk3J*I!k^ZsXADNq%%6rCT36 zhiS`>C#E7}2`o0WoAW$~1mIqx1}Bx?RBsDHu;-KUXy44@-K?bzdr)EomYdGXlI4Y| zTq(t{fi6%y;m8=lBxCoBMMVdgQ?LtV>N6=ojBu6?-66*W1bZ|u~+}A{9 zwE0*tfn{dR68wvVTOAdd0r~j%KSF6x)6`BP?}vavwvwg%eU}EU6b1#(!KFd(x@Y3< z$DMG*^)d zt0qyL-Ld+WAoT4Na|3ynHfV<+j$RdZMRS|5Ow%IehStap9Pa{xT2;F@)pj}{J;r#J_vq%$F;LtH0mJmkY9PCrPZ+?)71 zxzzS`eXrAaL}$aQ%$5M&yQ zZk8`z&8Ie{9i}9}IIY5Qx;$|G$N{rQ$}wcy`=-j|{E-D!hsMGcej46+01>=>re14@ zViBH^H2PLQhz=@Pt{q_oeVSCM(awW!bW3wE(f$*u-j;YWS#m3+!$sB3((u%vj}M8) z>P&52z_yzp^O^+Su<5F6%;qgMm(QJdgOM;{zA=N#JhF_44e=cN!z86(CFbC}5JaQMjq>Xjohd+grq~AyXGDr$aEV4I$KfnM0$Xa# zP&7|*gfg)w7H%|*;MNn7z*^6!8jy37*_xVtH0596OShTDt=mR%(IuK#0KbB{jJzBK zZ6nZCvAAP?(PJSiBx)loYJF!x>9f zA}X`A$cbZAUqpXylFSq!ITk{uD6H^|H|z2l%quEqUtb7`$}}SjCUr^kCdv4`J4a1F zIq>G{QMg)jUWMx?@U3{P{eFTP(<^?{yVKt}1dd9nBXR`9*;pfbjo(do3^yC3Lx~FF zj|c&V(RO9$cK=$WAL;`mJzJ|--N!S_*y)gU zFr!wgc9f@sfOjjSsBvD@LY;eIS9Kvu`mX{Rk*b(gXv~E(_PkZ4-Mq=FBBuV&qt)Y9 z5^!2cei&fSLH)V9m~@ccdTvUe)J=qe9fIqb@$^L1AH}A~a4JqqmQ(%`wrA2QDDE{9 zpDTl`p4ys?`RfygOlk7z0g{h;q47s8XP|}Ya`jaFVMY{os7xbwQmjoONNtXz5;?7M(p>)q|-RKmr}s}_umqn zUI*5ePzw0SES8&|{>uZaW8He;C(}h-v>UHZRKts5^{bWv+-E)JK16}0k$}k-hIXl^D2^d%? zf2jdKzZO!ixJb7e8yT}r3qJhc#)U0t2f0J~nrhX#gG=|yCSw$#JYby7=KZk-aL+SV zD`c{u1%*y*`~+&KHM*t9F;$8(JFW`Al_SCoHM&(h7e#Jj2}BZV)x~&)*L$199&#xp z5%lyuH}Jal_fuw#JW-8ba?fh*wi+Cnf&g!_k+MJ>A_%Ftj=FYKzYO(rpW-e?NJeGM zY7WBsH4QgOfl~Hk?9vS@$1G{n`r^Q?JxuFE6@90&j6s<7mFLr$S^a(>Tmi~9L3yeY zK6J_%)`Ar*4(wV$E1T;8cTfc}bU@QhFw^c7df9m1kENy)4B`pxZ+Opa`KS+3n5h{IW3k5HO`_J#$@UNw zG9HTU*!*6|y-AdJLjn7Wxrq**5gB%Az1v5HBa|joiiDY5S5w_A~1w(HSvNky` zu)T=r@ma`&=~)^f=ZxIv_F4n@X=#MSP~L;t*8-nES%!~^#%_-pNDsJJ)ROIW=I)i_ zoR;nV*M0BXw)MVR>|J`u_SEbz8N>>W43U1?D0VlDaDI#Bi&d2*pka+Cq7} zD66RoHHgwt&M6i0i~ffED(oS0H=1~k*q9%u_ri$LJEg@C5du~b?wZGpeM^Gn>blA4 zNBh%nrJE1fszi0LTzSLZ;o(bIQz+6d6IbZZ8#&p6h$q~%pzYm!vK!13WiaBy$N{q* ztY0v*^BvgUHJ>D9J{H;5Js*3k5)t1eCxh2Xjg4oOW|mX{_}TKz;sUz>BBw9cvv$Yi zBp(v((hcr~-vFFRc7(i;8ebJnQesyOTqb|El4b%;{O|NbEp|qD|vX zv!BQes|dr9iE$dgB`5X6Bt^5RpHm)l(cU0Tj9tl#q27T|UOYr?GT!K#$O4*a7FAe<5k%{y5 zvkxvR=_oDzJT^Kl$NVuO(dJg94)wjfhUB^N3l)3J{IOW<0-l@98J*WiX#qY?*R-Uo zR8J8DnSZG*Lk@5mR_1_N%v|Pw_XK2 z5dDaf)XY%sENWMRtPnPDxjSCH) zut^ON%wQ5ibnb1#=7nP!+YH4-@;w#*Lc>7}ViK?&{WK%fvN|B$6k&8cuZRE;%=&!+ zs|$c=wO-bix~hbnrC8T8(%24+l%NKjDSeW!<^E%Qs+5lwPRW%B#$5oL<~Q6;o##14sLw5yvOlX?N`J=*FH?_%qVHNYNe%j zrYC9|P`2lZ{1A+$KJydsi$>%AfV*3HG~9m|`FJ;Unp)+?tA;Mes$Om@5UZ4}4M#;bbL$qJ(2$;|m?Y3y(9q zXt>j>8;P&JS^zcAls~yJE-J(INvovP@mTcz4uo_{ayuO!? z4bxyNDIAztk(j{PnyP4Zfuhbq$YH=3U{6(#o|Q#<^ar?|+#G1amQX)07=+!0wFqxz z01l3hkfWZdtim!Z5<+3|MEqOzaS0Ef4WVf9eJdmRhZV{>5r6IwPRH*?;tzVL>P{76 zV~MaO45^HVYizl#Qxk?EldrM!SeS22qJ`+aZbXm5o?`P_Ug>!9J&jW!swNVc49Dr! zNADzmr&clFf4BnkeX>9OD9kqY%C? zj1lcJh3J^OIBO7=i^s7MQn?TV9C1hrkTsJN3JWUS^U{uAs~kia5=IgBpr=9{t(lTK zG%JDkw_`Jhl~tQDFu1lj{^|bo(>=ZNA7erGGI=&dBaoqH;Jn+na@uI&yd*?fqarbP zE=Z)3Toeyu6UO7%VFjvD6vlHAg32H(1SB8qe4o)X;s!InKtFxY8a zTZoB%H=asmz)_YDE(}AkIL{)~Lyf?KHZKfRYqo71)_kQp6D-+2zX?1zka(pFU~a{v zf4CG=ha|xNx`l#K0I$Mim#P*J*7?N=5*-$)^i*%1%EoE(O-7Z-2|zqh7*`Oi6ffYM zQHL0Pa()?g-6I1q>$79Z0@1_Hwd(zX%*5QxSP~% zBQff>+HDqjzzwWP+2gEisZ2_YjdYCp<_8-H(ch_*=Dw?PzTIAI?Rw`su^>L&pp~s` z2w8LK+&lH#JBfC&Rh~pSsZo7)+FE}FYdhW`!|0cKHYDk=EB82y^Q0?#7SzV=hJK>g zjY}cR+rPG3HF3q!k5%e;d3@GbMd}yN&MnJ?3Rfl!!G6w?57CE6PfuF0P>ka8=N98_ zoep!n4^WCVMXs2x5h%)?BWhUkV&$?Udz?)XI^0GrWyj=e(yNt`o8ynN0`cw5qm}!n zw|33jymBSAhDWUsux0BdXg|}<(pl%w14wcgN&g<@%&o8_MrouXV-#elo4QgNpE$G+ z2R?VOl|f|n8*Q=K&9kiAZ27rPRj;VM@UeaG(>liI=*p5kAoYtMuzX$MY3}T?hwGdV zw7yw6_8?|n*@zxw7e|EL`qC<+u@|{>ly2@;c=KIjw;Hv=r>3G5k^anh_3U^JFAi>nV-===?yvoc4D(xa0|AW{*(09joVDM{}7 zSjSRNjF^_xx#Ck}Qan5C?2kAi)9aEGa2b%xzRhi^$Sf789D*kU>qMjcnUVdW=cz9_ zXJ4!493mh$49SA^H|Ld&DvGT`E}%i7_&Sh70}6r5q3-FT>@MnEJNRRcWYe6<1i3Rr zm%fcmLu|%U_Sp&%HB?m~4x4hO%vSW;hZlTNXvM}rrys%XjI|gy-dP+?EGs>IL@#dojxfhM9h$YmP~R3zmCfi4fr(HuO+YbrOzv%E!I+_u zPQ-^MXHIREW~Rd;OE#E6oNu-~^vZSzaj-OLv&}kH)Qc12)lt}+hii-FvA>Yk@*Bdd zszvv}R;*ed5kzHMb*UX+MpIc6Vtv6W3nu#_E*OjtY*t8DFkkUABL?6PI0*}I9WtA8 zgNv5URyyRZt0bE1uOQJp-JgEHXTul*L*zsx2)(inVa-it1?QFxM;0Ye2V`Py)%Zqa zP_%QD-~m-R-;PkeW(KzciY}KRb#VhLL2mawOK%u_TOrY47y$Ru?hkI)lIi00^0+6a*a?fu|h3c$GPz{g#1!i>PboSItf1+qCu^;-%)o;pO>>^G)k)Y}0%z z2fF2(L@0x8rBo~0GwT^$3(1-M;iSyRKW|`S_#4~m)(gyrpg6UWYebNcl;BAv#x<+{ z3duzV^F(9j;wck}VoA8|Bs$IO9J1wwhY@Tj+~}{g?Aa{5m?4Bw;!)QF`L`iUrQ|yP z{~)3|+jdqe`Y72TQLC<9Xg1(@b+W;=Up8508G!pWVA@>#(i!N6u$3v3THgNqN?!A= zD6$HRtY6NAusyLu=pCXUluU$8!Z#qEEu9AYPSXfc@d&SLLpL6sxYuv8d{)DMr&4Q# z-pH%qZ^Tm{;lZtW+@#bW+XhF^_adS0cbf@zcN}LWVOHfmcvl-{QJ8hif5iPrx<*yt zB04s!6n+(vS3YWs)~m8OB!?{7U0RP?VUTFlLU=S`bEW4dFzLo;BPIzO+^z|-@*}V; zyw`BZ7bJ8I^O1lbydbQXHI05p9I(K?c9TNf$^mq#hYh!EO-ul;8JN^R`YGc$F{g$T zdAPZZ$Rp^IUh(pg(u=n+d9<{Wn6Yk69zuFa>r~!OqNo4Gf$iMo&7X@)vn4=$*dwjY z1h{CY2t?vn1ZA;k_FyJB<_jiX+GP`4wf%|&=PX!ZyMYU~V}2tHWtR05wv(R!aw@@f zdR$gVOCV=a{5V!#f})U^03v=tT)ha`wXZDS2S3^|9T^Nb&nw^(Lwyw3TbY`i zg3>9rAk>ZIPFbnJ?EXVuSbHk;D+rCe*QyuQ%hpWmns=7sW=xR4NP`JiB+WNl;D|N@ zL2KR!P#iOoAG550pXoIqJtDMr0>wW?Yhh^Oq{5)l2-h>9Jl8i z07_!}v(+k;4%D^_BJH8C@6N$@3(~8mJs^#XFA-AYkC1NL1Rj{rX90lSD4n_h8Ef=csJDYk; zkM)@XS!R+^WeJ$n8$5I_y%~aCVBaNkwKMaqKz_mv)U+7ebtw`9uyCji2$Be7Sl-`l zjfHI@Us!q7X@v`BvXqUS?dX`5Z|Ej$H`A;x-?um3PC>O@WQ(;CHn2X7v(&2ofAKJhMEH-_Qvk)RRlUm8T)e zZhvD#F#-}SF5xjJ`GJl`s$V;YCQrg$I0aFhB$?EWIUjC&`75z|0&m7Z3ULJ|fOfUv zGaHvN7IwDtPrZ^I80Wq5EpsFh_YrQ^hVL0A%!@kM3A;1c z4%t}>W>TAMd_O~Cn3mFFL1O-$lop|bv=apaizDWgQm!F|+4~2oYnRVu zjLpO65JH@OV5m30D$*v5ENLxV8XsSQ7>dWr()SPEv}KCg1GCM!Ml&sb+;LFe;QSkx z&|pgamtL!+fgkn0V8fb2R`m-EMsBH#7CfCu(V>gx(eX*KoBqDzgCF5UH;y~$!P2fH z%rP$q>unZvw^3*n7}c`$yTXi0=!|Kg7WW`k31XJN9p_?U0USj2Fch&WXlN!X3MrBq z7ZA(&+9YT#-(0}XDt8D*SJnb0v9WSk$EZ{=qAB6)TpMDr;>u#kwLlk8j&oJ7RI{an;-ifb& zj`{72>!jG%!5pL+_Hyd<%19-O9KF9T9NO3s6vJwlR*f5!zL*Dw7;h;y5h5$=Hl;K= z$3Q`pXH!8VeLbfJ*GR~C%#g~)iok6NIcz$6O4 zc67I-1byLjtCWM44@cPmaqo`)AR@xS2Zh~1bpe7f;8_j=SUTI*wF3t~Q`k!hcrMS!tGB!e`RLdZbwYopYFnbS?>3{uhY$yWBX+>+d?r~&7e zb+>qU=(`D#kxWFG@&Yfi>ihSsRkjS-b{H5mcom2 zh!d(o50Yrv2Z9#Kt##LsoBccr%WTy;x3G}fnNsYw{3R zUgpOWUE!y2b9*pea>KO19=-L0Q3YkY$-R!9vL#oB$aXeW8jw?Lg~6yOk@RAlT|Jl{ za$NomM@SzUym=I{hW@C{x&5>(EB~^gayQmjKIIg8`+nHJ2Kl_+DGPXR^|m=yuQw_; zn{$DHo@anm>c1+lYW`%4B(G*}QcRPl*BR3n<5yKF;XIvNu_xruu$e|lF*-?yB9N8= zrF0|Rs&)}pPqXr4sL?N5v-D-+MAjwg^5897qK>$f7C&y>JxQe!#mu$qRu;fYek7a6 zap29=wEW=};l?2xrtLaqHdt0kTZEEG<16m8S(c(4U`Gx)fI3hu4=ZZvO#~x4(lwh8 zE-#8)_o`F~mGJx%_b}s~glTI;k(3U|#^X)bWasrQmj4GcwVv6JS>wXH6j^g&hkb*6 zH&*FYeK(o3kq?Sc22rTH=eRw0Y`f#m-7Y_%ExQo$_|yvIZZXynbX*u6SF8d-c4}M-4wVjv%`_Lt|x%#UkfPBA(IE1&(L$nsC#P0PhVw8{zg)C4rc=wxm>D)>gLj5hc1mP zX)rgNt+4?v0-O#2c83`p4QXM9EYA&oQOo{|LP{(T9RvsSX4z>M%b~q|X(qMnL5#``-eR?_IMgBV=ciL^*-lQ3FpNQeL&m|+2sU)Y4=JdnxD~#H6)tg6bgaZh(fO@qLX{8H=qUz* za1;Y|oq%zO-)gu$lLd+%!h2{|tVYjcT-Cj0PNE83&4ZCR@CN)yPFZA;_YqWix-_$?h2jxu1D z7N{YLB)VEL-E6ljm3Ur=81 zpEvFCAOO1!`j~4EyZ^qflY#Syy*BhqtTT z3gr+WTxR0H`w|jQd>%ivgcPL()kPJBm#ZJW(ri9dJc^hqVF*HkRJ1Qd>Pvd)`H8C} zUn`oXAhxPDfz*>%E>08&QKVG+C z4~Sq}1Qyte!bST^j(jbhgKNXVWRnY6=yc$My_U5B6sL!az?UeB6QEl5^RIHK?YI&Q zxr(g8~bqyB(8 zT44pn?X)0Q?5FYwaH{6yuS99L7-4tuqlqaH$=v5>(g6%lk^`3Zv)3^!@f+p z-E@3?x{nXjp^+Ppw^a;wC5=DyZpI5>Zj;`=QjY0{`{f-V0!Uj}Rf)@$)9s7ZY;R@i z$iW8=?K^g0mjclVo=6X^PbYhO51x_fhK4U@csXq?RELNE@^+}8OBvo&70pEwLLtV4 z*USjo%F@1}t;4cJCh0@#(?h+zo4E{RQ6UPE!Z!R=hk41fi$cRe?OS!a**r*MBvBHC zG$>utA3<*u%0h% z88%H>AfePmaXdx`3 zY88fb460}9mOR>SqE5^6i}U0jicu{dnKkfs|1J+~*Zni=yrA2LcEdIzf+H#1d3>v+ zO36ma&N1z^M%saVvY&Jl8_9WCkj^Fi`8qn_bs{;1yXNMoH|f*S_zjBh*zBR}c}%EC z?=?gJnFR!lGtU%xNB5YYlD*2uu*QpKnzorER75DnmYN9R%kqd`>ld<$rd&J3fNRLu z%j?tQ5RL1H-a*8&dNM7g@rT|m$Cl5u8Z!-1-QJ$$20(0n)$prjUwCU60xM-!IgO(W zUz-s`@AT)j4*gNM&dlgzZso_fP=1A^imDH^!j&FSunwS1Ofs{JwZ)Yl9S3ExDj`TN ze+4E&sID>#!nelVPzbEhGx3aduO26ImFF2lhq;oR zZ3YQB#}pw^$66Wgg}g$xj&DX$lG{zf4`7*COi9Lwa0W{gcNlFWe{pW%-ft~f~w8<@w=fA`79e%iJ~Q0&X3I6fZH@6G@w}FZ!jSA zCAg#k6f&%`O~$6u66?C(yaSMN{;ySTr|dX>^yWh2?CrOUYFo@V;yj1zbB840NcG}9r0$R?Dl7@lleu`-96FDM=Y^4^f|+zka0U@HqQk?^gVS`94x& z-V9Y+|G1$@MGUn(%@+vl=atCt06Ap7EFFR%DKl1ABR_B+P-rN0Q(@ws6UugTpYti} zv|JX=DpTxZOK`z2Z2;8Ay91CoKtGhZ8sd}B*pV)HLpr>A<(1{9glC9&)YQmIk)bY7 zwo&f7s@x|_D6xqU9|p8y$9g1eBU6s3ZYDcYK1DMpRdC#qCGG}GvfWS)Bhe+oZ6p{4 z_Mg?k*3K@0BRJ<&zLt&0{x1QBUbE4zNsnzgEqz+ajg?yv9ouzv)Y#iJkFq&aY`>7SnsjL6DzHQ3rYj(n>U3;GD$tCEJIHMR5Vi zh$X^NSH4&%oP5@HN}1%-_Z_)^+uQ@SOie4Djib5tFjQXK=eeMI21Al?z zgUP#8N)AR0Xm@eC$P~^GRi5jB@=mx~l#{YSONo-qiqkIu^9zHBxE42w+fZ#ToVI#g zl&Jn=BFoZ8)~Ba>w^X8gcHhu8f=>C*-1tdyi61T6Uw`pgg@2MgXaf3||DHpZKSjU# zuicO&kM|_WAG|F|ezY!0zSox|=V*)f4xXtmCCU50ktAq=Lh^e$UC?2%pLssJ$`z9&UPrT`_$x1c( z`I~RLEBX0@e3O0R)g#HDeEGmnlK!cG_l4v$NADwFrYBkVAO808UnfgHTXls)6U6=gP*uNM`{_NeK=}BgvWv#o8 zU6&+({g3?|^LauWQL3Ud-iWcOe{`blxGy9^sHv(DWA}hFxA|43)UG=eOegUMNSH2e z5j4kw#JUNE^9Bg8#643LX;eIS+KCZVj+-qW0o}vi2SX#l$ob+SN>>zoY}7*YL@ncx zk(YGbI{|}-ixe-Iu1a%naPROt{u6arX%8pYB%5$ML?2#P~@12 zgqcuO3ylt(wMD%{`JBo~pJu-prKQq$IxZVphoFtLxw0w{L0bAQ1+*Y@=pFxxDFQIx zU&+8h0%N66D{nfg({qW{<^UgoJ;v-k8}JL20gbnsRN8g~tYRxww_+ya+$G+WXQ3&? z<%afbk}`5l!ugf8K(dgfhe_rQna8YNcAkCdzyPQb4h0e}?6F*oz|v*BK)SSr!<7}^ zW-h`QNFxU7%#3%DPtMj~85r=B>|C2#zIK`#4VjoeI~F+g!M%ZXc{tC(2EqE38`md~ z9sOWC*~|uL_3=6u+ZN|i3jL0|Rsi>NuKh96gxH)ZQdG!Kz*a$B8=7JFj7c4(c}i?h z*9F8ELzwPcaZr_0miDE2sHTM8;91q!XpE*O+wnLZ0H2Cow=2!Ts>?^mCXRCfJkZH7 zgxSs2LkOkWT>UzLX-Znfh+dzY-L)(3>H8%P7k0S}S z|Cy$)0t!-%-Qf6Yny6w^`4$9=BYRk4Fm@q9DXZKRsI=cnA|>ZAk?0_F%!L|WpFz40 z{)5Ot1jZ;%$h)c*s!9E{BI8Lont@S?QdtWa+*FjU@MM4-mq5tgA9Nh9%}3!V z!D`GPex?pFAiBs&c9PyIwb?p5pw$7xWg zi2FmmfLl(`X2rlz-l28@ZmValA>l;M*o^{7jp}^70GO*xHV~Twxm#YGYt|I{NvB%G z8AzmI0>~gUG0#*n;2_Sk3w*}^W>iyt~kF-EEyy{8AiN~v~_G&zff&7|J0awp$i-Ou-U%%I&*$8a}Mm$t$wSWiw_I|bG7Yt z=lEhnSyIOrsnB3X!M=L$lk44PCQKGlVYN<>BO%c-88MRm$dFdgn0LS*Ty}7%%b|Sw zV&edhVvz&E^K#4=KeyoP2F(`0KVG##wd$Oa1$C zsACCuh#a+DkGU+RuN!9Xh*N=}nLlEscST!F?Iw|AP(i`)D-h>)%_>8f7-S4R7D~=n zlkJGv?f0sdxB1T>8M3|=&&d(Qs%ESiENMd zpTwbjc-!sLskzN&%~Rt-i}A*_lfkrq+DyxG{`52kUttI4%HdLOFZTKJ>{vj2ew>^E zFFBbf6h^aRFprIz(BS#uT@xo?hj}x%M!A@ zA(jYi#8Ge;iTUMUd!oZUL)-%!+znPl<+7cE(f@ACrs^nUg!s_XzH~&d5U` zyvZHLE`q@4o8Wm3&kOxjXN~yr@mgcA6AFb1anqOp=f4 ziruBuB#VB4$%>AJuR~P3m3fSv(?+8%?p(ne*@z=UH{zsFAVSJF)-VRxxR`(7MP0&n z*bxL3%6B7JqN76D(NIwvXz@{~Qd*2%#IsnerNi3r+6W2!VQ(b3x2StE|G?TH^p5|kuQ zVoTikL?_(|TX3Rks2ks@o=Sd;p=ORL>0kzjVsMp;!%ixrCYDIqk~+CFmg#jJ{M?}G z_O6&aXa)MwVq1O{|J3l?>iT5Kax5Y)8`7d|z{R&(cn*q?b9WrsK<@$Lu?zU1JZ4!t z8qPj0vLs=#C3x|k#txV9=Gd`t6BX^^XQXRMi9{K2?T)GnSdb0km}98vK`x_md;?1w z0*3h(tWcOqpWRzH3HQTP7HW)P9t*w&&6?c1ny*8fP;bA73(a+bSzzKhTU)G=MXAhZ zNsjQWmJ(4(o09B^am)-jrQs2}^s$wyt5mz^L9z73>gX@>@%?Gz)JVJN85q8hvN6M0 zXGrOiuI)QRlcOj**$p%-E=``~R&Jh`x6)hNvrb5{B zl*$tS+;-|(um60L6c6Iw<*Co-!OnP!EI@*J%t(|OxHK5lDWEeI+(S`;sqQ1vxl4Q< zzRVHb*rqZHwoD~%=fpTtXS5Medb$baQe=uLD+(?Mv>=>yETUov(uKd8%^HWp$xON8iir^2K=fH|H@D@i zPeU0ZX#x});C|97iE~85(&kbul3iQ+h4NMS@jdcQx~4C8VKCpEU0PYBTeZp}tCE=R zU*X)sKs|lPtAQOygR#Qi$Asib@)6kOa5RpDf?>>F)Xktb zYXfx`ee^J+lRl%k{_>oj`qMP|=b6)`Rdb5thgt26p^`^&UDgm{``FxJG8>pau5vzN zC9of>R?R)rvSN6qS%1OBq}CONM??|KgS&C3xEUZy`ThJR?|i#*rxRoqmw=!U$Fztn z6nzD%8BI`d>rtJ8@l`i%$=+OFf`P?-CsLmPou%oEv2@c&<^Os&-G3ePAM)BpVfs04 zl|MKmO;S9LL!h^fTicu93wOpC=uExZKF(H zWvO1_vo<5fZiL-DOSBXd-7O>rv)yTn36@l?_8HWvAW%!Elq|vxCu@n56N802#A*(s zt4U=bvDVx;N;qr;f{B@>i~*W|3KQZl5K$RIJeo(HHzMS$nx7&uPs<^7no@#Rute+U z-mN0kVe}xW2y0{$({_mpsoOgG4_hP5Q^ZG@PSJ((HMo#tO9@#l)+^jiua)ny74-at zG|2?ISR;-i+wFIhgLP+11&8S-YaeDM1cILd%n`GYlv-e(d?u5#I2f>7QC(`+F2h9s z#bs%arjz&-Lz)U~?t(^X{pNC8WR~lNB4gX@de&AG3Dt(JG{CN1@dljsIr@n38q?(z z>8juxD_zxUkCl!K$=(*il0$u=5HNXz%h>b5&sz{hjHAxG^R*izl_?qkrqKW)w2Kd5`W%`9Jh}eF25hGr^wHwIh3dn!)9A1vnpfI9R9i+Lx;jstb~N zZpyRK&$RHwtFuk60@=E+0_|YOyc}!RSm84UFW}GBAu3bFEd~qcROo35%ChHENwP8W z@l~F8S0kVas`i9%0a_739Z6R!D0HNDI@O%F3@{|G@P*`jVTVaU@)j6&n}BLUvU}4l z%G|`rZT4xduORdAG9t2>hJ|pkcpv0i26m6IGQhbQY9LzK!MIkL!-GP5*SZbEx5es% z5&a6Ype@#|=Y@W|)^g<~y05VSJ75D&d#omp-DQ(jGR1Byq-vMjUd#bsn09smUt81bX8pham`EtZ*i^gd<-*9^ z7kUi){Z2nWbjNc;y_G!^y3DF}e=j?L%=M+A;hpx`^u_SW^Fza9_Q^e}Ce>(tb!gO| zI7B5WG}ZRX*M~;E(VPW&etYOpI%+TY)L!KG>ICg1&ef-t1mh0bDbJ<&K40!NQ~3l` NBU%?;;?tLh{vTH?G`Ii& literal 0 HcmV?d00001 diff --git a/.metadata/polymesh_testnet/7003003.meta b/.metadata/polymesh_testnet/7003003.meta new file mode 100644 index 0000000000000000000000000000000000000000..fc8c39eb3bb4ca8b32affd9f0303fed8b5bd67e1 GIT binary patch literal 405204 zcmeFa50qqAwKsH5^_|Hbs6Yog?^WLGym#lL^S!FPnwy@`!A|Jpo0{&P=_cLNo&J-| zBr{gkRNbDgH`P@|-Kv>s3_57gpg|K28Wa>XXwaabJOu>>1qB5S3JMAe3L5mGK|vpD z@z(OU&!2nG{ZrLFlVn_7^}XlMKKtym&pvzav-ghItG?}LZ)MqWzf-QYyI!u= z-R<<+#Zs--?zei2^>^RPn8hsaJkg(iuk-GE&(WW3#9@rt_#Znk!m{?{R=2w2mHl16 z=j{Y_TU%{=Y_V1MuJBR)a<1B|@-a5X$6D=H%^T&i0OJ$2cFXVYcwK*#J8Rz7EOn39 zoo@S5qaJ@<^!r;|jatKN^`hlR>*!#No82)s3NR0_F?*&{Z8p7L`FyomMdyC36d&E{ zdR~r?AD7=5ce!dTng zT~UHL**vE3ve&q<-Sa2pzvWB!<{lGoFj+L1t#Yri<4y2v|2q4XDE!G*Ee+lK+JgmpMZO!u~P(%?FG1l3x z`rdOEA6um#K!QgFm$)_0c&^v(G;03GES{r5ZvdrB*-EF~+}-i~Z9OsN9;Tz^^~Tji zO=>u)A;w?Kt&1gWu~ptN*YpDq2$*J6aWu}xv9cRjL>BAuD{5gizFzgi=bU#(&ct)9i6+4wW7}lz0I~IG8^Y5!}FLc}ePOM_liGEyc`90z;_dZ1PyQ(H&w!MRu z)bl)x&2#=6Ri&oi4rw^~! zzl}M|{bsMR-nd|~1`h~whhF-P3o#mah`pVSulK4K8!eQ7KMxie$cx@3ir>bZm8~t0 zHa3fWg!9vi$lB_qs=(fXW!m`*$Ip0vleECk7dM6t{iA7fLR4w*gSPJ;2ce>Q= zSYtaYttL3G#XiINRn=Hyr`#5A6Hxvk8!P#~ht>RT&O53&wmq+xDEdbr^J=Hjt2VJg z_PUMpec}edMTWnuD%RxpGIrCTK%$*LX8GA|uXeH1ZV(swNQOV9s|T+WmBtyil$}nq zL2G%r+Nxe4CjaRSe^J*BzLv2S)8|ARce0t;b{E?{7=KByGK>8n!#@?YpuUwQpYsz9 z{E5*37-+K%@DGjfPb3oo>m9O6> zs!Xu_y4UM9J-H41Oo}kd)O8&_6ws@@H$cHZ?o)r4;Z-1;@fI4 zey^P<_Gir5=z3MZ-^JE4Zv{)ar(Py1yif(%-E4aPO3&*;8Z1H7>S27F7JosN^wg&^h!Wott^YY2U-O#PUBdsF5SXrf zmndEovJ-aP8ufF|3TOioyL_9d;+h+uDrB*$#h(rYlEIblVGd-w#txvzS`U%iQ7;p{ zO|tB%Ev$@wIBBh|K;iD{gbXmw>iSBVg zTFpjIKsnjYn2?zu&qF#phWY9?T7ILp-mif}`xc+lM}TqzC#4NOsgD7R_!F}7v!#}U zsg$*x8nGJ>0;J>12DbXm=B_&vw0ol3XnJ*}mJn%qpoP^-JU2pK7BntJucbF6dK}lRN;S^yF-{)oS;a+U<+| z4)uAwT3_ila2!LQx#c#oe2dk2QT~+mM`)jwCx4o|Mhl`1Gz`U4?LY))2iUQVb{iwu z)kS@r=*BkM7d?mr+dMCR$@Xqx`BJyh+urfO_bt}sGvS}I1kS3);iB5KScjX(jcQYt zJH#gDuWVQQ&}q~mAm_1_cl#X@K_Jx@H(S+9SQ^#yO%IYNtD7i_3=k*pF`SFMD>k?L z({yN~Wq6D~BNQsjrPJl*mATEO`SSeQ+R9pa{?zQs-27a5eev;m=vubTcFl3}@$pmb z6a7}5=E-@i-EY?C8aNZO$>UzLeR&y(-0ANC@oH9P#S&v9Y;v=8vDLoZ5>gm2ojV~k z89*||=e$V-W80jaRF=B=Gn{J zAmAtiQnNA2XAHhX)xdIlrGTl3DHF^Ii&Qk{=0)o#pd+f|3@!?!w8E{g#9IN!an5^Q z%OU+z9sJVC_glKzf?HJWl0r!nOIpKeqsdsW4(W|rbb4*4(es^JzuSd45Dai}&b26=a6ECoty6>Ncfl$fzGjm2>Pj}Qd`nK>`1pLQ-oEVBv+PN}up*Y)j6T9I)=B9Q zn@eWs-c9ns5k0Gjgg}Gs+EK1AmKp+vE_Ah z`-bLvpni%^s*&Q9*?x#|>o>Y%xzl@fkW3!x#vPn;04@D0Vp8Q_P}Mq@s?EMvbaqg` z;O3R01p@OZyUOz+{`Nqhfy#{a{gTF#SOO5U9ZV|Jg*_)PpuobC_$mfE(t^9HHf{yN z@qQPpFncXfjMxuyB1gToW7875Zgq#$!A^V2>9?Bg8aDUj=0Wq^ZIHwT&3Jsg zi5CW8uxEIV4pn{ZzuDy^U(E}}JMF>29FS(({nXhf^tveOFGa^FUWV2LV4u5zEbmDxCs#IU z^sjPz^i;d$VG)iJ30dqaP|w)a>{4(f3bgHhQ7b9Sje2ASlO<+a2o9T@i*x0r`BRV) zo-#XnI?>V7qNAtnw2nrJ=_EAz&x}Ql6*+7I*g~LUhQQ^IlKo>!vl&SZ=#=(Fj4oJ8 zG`eTA`V@^8v^rNSY?B*+Wl9B5Dy&u;^=$ekp2umlUu}|@oa2)Un3XNkd-H6s(TTrg z_8DGs3@9AbbShyhl_HVpSrlIP6BKQBG0U^eQP2*GxIi`Yl^Jo{A85cT6b!CYx1 zxNJs(L&r@jQdkYDU_d_38^o~_z5kxi2@{HOY<-Ajvd;&VWq&v+h73RK^Q!EV2u6S< z_M;2fI92&VC1?jgEO}cnvVzk=4U_;R&WcB}&z7R-begD7#M$UNAqcAy1Yge{0aCbP zb_=5;Rx#1AuMYKl3k#p(MWY&HvA?bC(?Ji^p@Z|M?jukUuv@u=P3a7xqaniaE;ZVH zh>l_9qEHtYFA8(3lD>dH1^wPaMjV$1vR73r0$8kljXwv9fYt>Z{n?8W)^@XQQncQy z9HMk0t;M-Q9tZHoPC7Aj&ZqPgi(=S2E8<5Q$xg~XYt&w0QWRVBE`jkT=``8!E!mE2 z7-*y_QW((#b6KSE1#todS6K5dKuhX%Q@S|Jd2XWtd8^CpY)4f1Ge5*sH>l~drM&p; z2nK+&H|i7?O8wq;yW9AH*s=wBa`Cl3Kxi&-zN!Rc#y}2WbRe148aqzd_#+9#I_| zwEPi_vJ5p#wFu2!r_tRltVSSIGdb{lv*)1SlKoVqK`<3L(c;Jjxmk_K>$>bqdK@3X zI5Z7}z~ZGjio!;u;Wh6speh}56x$Qjw`PABX%V2xCTWW#?%0ROjSaUg57`=UEW6hQ zxY7^}K11#acs6@B3OEE*@=UpQ$gV`%S@U|`T~onv{bX=!_VYMuc{m}rE;x}+fMxXJ zG)a$w-$Idc%@}3zH)iMN&{-6Ba-CFulCctq zg{5HE!*=9LWg4XW$jN&&`;Ahw=>#REWT1{kdTC-G!MR5?4YiHS#%L!fYy_34`OOxN zIrtjy;I`~{_TNEYHKMy%orR9Gy(5snfzy=W(}^AR4sg;~!I+cHJF-`$YCl#?E^rd` z0*Q>cCUsSqncapmX^3bVMP%Z*`p)cG(L%T<1+wU~`Bk73XGpOl$x?CYv~W!Kze(n5 zY?+C1#{h`_IhOrmtb6DuL_3l~IuZgs#V&g$KP$Bn0+Lh!3penL`U3oqKEXbbdI+8J zwfsmM#iU7x)&$s(^bf=-4|-M_aZ+ggpAct zIz+dDk?c!+H86)oiv(uupYzqg&}|lBFQx*OBNeFEn_CzEKz{-V7_klIip4(9i^pLa_Mm>7Dd8;2a`RV+Q767YA^uWomvW@zVw|+VEcUW;zC8LK z9QI#^?-;Z;@Gbhh<>;Nkza^ z1hNhe~ljT|IDlG_jqD+;0oFB%Ro463*0< z;(Zw>`o7nVp=pZVlD&ftCSIPy5KBTG?1JpL^wk1seqO>66fIywonbz|oc z=VL-(pd*&4f6OQJk9nbgJhZQ&sWy2&j|~O~(gvhC3rYh%wqAn^G|)9sg5x*5vU*^) z;d?SR_ji|I8R)|gGJKyQ&!J{B`C)`9sR!QIeQypeLVB#B&D&^T^*X4|V#gkaq4Z3< z-<1Ll5k}bb0XF%*ez)O6KTY~*o88Viyd+?z=)z202drUPxT4Nq@pd|~(ZDVIxU^=N z4cjay`?J{qnd?qy6x6f`w2((AdfN}}C_M74;Tszz80=+Y@3GiRJlKV>k4cy!e$JrS z+tPc@)#`NSRG0)RE%O4w?dg>!|H8m$1eN@kBX;QoX5TKI#zM49OIR)T+~Y83+og3h zZ(uv^=uMRp6Gk6@3qODBOFyR-%azFk^|;odGi27A3-+JvL0UD|+Grd@g* zu9o)kb=(uMk1w#>@SKB}q<#E2dncY}*chJk>~=gKXMcd_``91ixeV8S`}hXC1J4!q zM|hUlALIEL8^`leb|;=|>`$2e=t=gc%wAk!4&Iz%hw(hg{uZ7m*t_stgx9_O@B+Jw z*|W>+Z{t~Fe}?Cy@WZzsKEn$5eF83D_Qo9hbNpUnMLbWjBg|fSn7PbeUSap(&1p7? z=PWyl=L)+Qb(h(@@%tp3!gG$@hv&oWJ$SCMzX#7nHjNh6*!}pu$sWM-40|u0kFy!z z_F?uQp6_GuVxC)Oe+SPMc8uBcv#f;YNp_ss>yNToW}kcnUhMY#8k@&+o}IvRgPmmd ziHF$&o-1q-&-bzS;kn2j#&eA=q1Fku%=edzg00|9iLK(f%rI{!=h+&1oM-F! zy}&l`Tx6SguCYh)Tw;&mImb@pxysJqxyc^KbAvsB=Sg-J&r|Fio{zD=7tb@SjFE1z z3ZBcXiWw=f^Z0#=)$rV8b^YA>yw(y)|7w}wT+ju_08hFmLzrb^uUBq*VHSyeF zJIsFHGHc{&c#*>iZFV*ezb^X#9(bDcepXNi3b&&Sz6jps7^XW$xCVlUvi#y*bcD*I>gTw?zm zR?{i=3H+XApTzTV_Rr(F$o>U9=h>(5Jjp(d=O+6X@jSu)CA7B6Uc~Pe_8DfcEVF+Z zRPiwTSMYp{y@cmF`z)R%_OIf3lKpFVo`DQ(ug}z;#u&?7;V*eqYr`Ugl*480#+Uv9In|Lm<{}|7c z>_5TtVfHON7umP*JkI`8JXhF%#_Y#S>^q>zb@pAnS!e$_*2_BkFVOqL>=nG3W8cGb zjs2H+zK{J^cs|a)kLNu50oLXM`>*l)4Et}eY950$XK%cZ{Rq#;*?)`Y0{idqT!MUO zZ=7U5!SiAE-{ZN${s%laAo1B7r`XT%Tx0(up3Cfi!gH4W9M4DDFPOb~lKszkme~J- zd7Njj0?y;?mw2~{?N+Oj1rOKNvU z#1QPgaf9ovkl^s&;q<<8Qe~~R-Plv^;{2E}wQelVK0LpsjIDQ}i4iz_VRI=&dSrPr1v*fRT@vB8lQ_O@#dgGjvTRhzEZ;F5x*De;nv#Z#Z2z-S9!!l%#MjqxWOW9 zaL^h7ifQdrB9-|Tun;KrGi(kTAAL0ew-a!6%L3@eaejoI)(r^RVC6E($U7&7kO0}> zeQ>c~3@+Wo4*qcC3xsMRP1NB%{VJ?V+Q%G17p|QhhuUGs6MoIMDT6>W&-3E-NxFuE zJ$?yrD^F%PO5*H?!D4Dm$YXyQz6>^N#u2sA4wM{L+`I(|>uCB+jtMtw6EZ$FdIH|L znEya(x)0jY(n$=Ev%J&@EaU1Wq!=7Va3%^B zd+&uI&l6hxh>0COvrzE6P33kYbY5h5QPuIcJ0&3)WQ&c$!0lI4VNj;k;ZS_agd&6h zP{Vr&1|Ddzg+Vt2Dc$TA1u0|yJONVR5umLz=)muIwFa)NI&?qs2)t2tI_^Fo5+JzK z5=s90WpYctMjhpd{lksRZH05+xeP;}UH|Vom8-qb5Sor zLnSWndTORXZhV$~J13mUIUqI?I8yb7LL>+bb^{O_JcE4qstMo{Y?$Q2LElx&?m`J? zvrC>Zy39(eZbH913V&ol&GN=E)=}i|1J)4%thA`0{p~i|hbuD7z|^+xi(ms{YgKqA z;U8RXmj0H_T`@RqQy!b^@9gZdgZ3uJy@M9i?y3PYCBuD|tYUCucQ(j>QZ=UN(!pUA zUrwx*mgk*I_d4~q=ePch$W|C$002-jwXrg{@_-`c8|i~m0^7-4#pTBAF~xSk#pRX9 zRMwLxYfPt&(WcDEl>An03eQ+Lv-78BHXQi$Men4-*0Vcvg^3qE%oKUTaY5!sk*Js2J2yDY!p`&K`N%>wE_(HKH z$4MHUKQ_o=`Fcl}#>83L%Mtro>Ay)p`b0yiDERBNsZJlQrmt>DU|pxw>EHsFS06ag z{qc(!r{8PoSlL72(jnYqFBV{EhX%!n$zxgb5aD@_odFhcT+qCXwNv76^vYT0d$J_C zYOZCSz>QOSYus2IABf{P?lkiMD;z^7TF`q9K@Oz6mig2748)CcPbHoh~_tyPV8Au-xkR*oHA$LGHO^8@0 zE}hnJZ59{y5!!+rx!Yakz-JBMS-05Ft2*HBL8Wj@f%6z_DG-Ph`o1&}6pF}0(?rhn ztu{QM=@0A1-5Xkjjz!Wm&a8YHp-y;(+xE&u+>M6B$ygSb^(PQ&Va^EgenfA_vGdFJLh`sO*BE!lOW&5z+f*HUw~^X0;t5} z(jkfpqTy7p$Xh!;;xA00lCJ~n)b-tSt5cH6NANZDMAD&B0-skI`NbSWdUUQKgDGmS zFA80$5=~jp8@=oANidG-1CN%6M&EEqa?(33#bYjGy)YC=?Lg-)={c7;Poix9^Nz{D zJ*xP;k616sFgo&ch^ML!Mp+H!(v98Q^7TD3I2D@6+c!+tLvxn(>M6LaAqI>OV0B<6 zeZLL9DhnUx0NN`FXvN)& zy1rau;{2MIPU_Mu{6>WsYZE| z)K$j1lY`lcI!->oj05-LpnJo~%a`5gyEf`#nh4+TP6-$g)*cth2^SMVYl(5w4MIVC zea^=bx$Ha=4&lPMXuXUHHHlH-4d zGK(Q1?y88>EF0J$(gCXw5h%L~Zg+d7Sr;P#Y0JUjszy!BFS13c{Ct|05sy#AZ_O#3%a%_;3ao|*{-A_5NfvpNU2{k7vM&QY#1QakmAOJG(p$r5Q-5Qd`McuhE8d! zz{;oB#T@w}d6rj)3-41(KE*9u(4w3|Tr5VrxNSlA>fGFM1oeO8$nxOmD;S-+swrtw zv>%~FWLN+wbUjd#=Gk+&B5-PDWBvhon^q(&q1!IVOt`DlmB5u9*V(rykB$hwd0w`A zse$Ij7Z?Rq`rYLAz+<=fN(LfO5 zvN^3OP*n#>Whi0TI0Xbn5;LR-N=5Bkt;2B?BKj&_>&Ir&MHG?-?n=?um)Dc zjU&Py-KkZvcL8i-e83Q3(G0@a>}G-?QW}ipZU7mE28eIq-~OMe-9;`4+~g3@P;vuz z?ok<-mjVKNTRwtZ4kVy4gmT~VcX2f>T8G_A0#g8xm=wCskAZ?$QYBoYMFz)kOYXV81oF6H^hvgV35gaZ1iQv7m*30)i;m``aVO zWw38QH6Os+t!F4ypnzZ9qEcf}-GNekw;l$^^bk`HTLa?!3z697XD{FmD^fU8Xg<2R zTm#u8#W}td;L0BW|ETpE)?`DqE+7(-0FhONLI^+=Rjus`?gVB}cmZvNGvGGUU|dtV z5#Bf`Z?kSCx{rXV_CF(!0?5FK{f{-F$~SPGxPxfZ?uHQ^T1_(UQ)KrGXEP1yiebj6 zVnN)&Lzwh{e$px79S~$Bx`+TmenZg;pgo{>VhYVKdRxGrKryCOPj0aNm*}>zR|mN( z&4R^e^u}KH!D?&UAI8$s(!#oU!`^8=269~{T?I`n zws0Gg65P?6L3$N&nI06E;I&yW8Bx%5k@qH#D&UArw*dAqV`v;%pW%Q}ZEqK4?n2mM5B#2aM<0>JxErZ3r%tu9xST1hl`pB3(N%2jq zkTW(Am1i9ujM~$gf0%bs-4d z$MaP7h>inPkhg*f2sb95l2}>Cp}?o;r-E=V=+l2ZV1YUJ!W z*P5J1Y$gQU5Gk=fYT#WS72?>Te68vfvDf*6;XXM^BcO*^u41j|K?})Pxgrr}!rWc* z(5veJT#AcAqeHPz2qJWp-V(A7RVBcYX6eE<;wAMjTtL9H8yUjpxe#M2&3O!C*=gWF zY1n(%k$^R& zmPQ#JuD2Vl(Gdk*?%@; zQX&l`5bOI0Nd~#3Q_TVcxz+x85H~4%K8;{eUj5$t?mK$_0}trepXS+dQMc=jtB*z% z%Zw}gnb7GpNI)N%LSePb&MkP5m(L?M&6-#95ReA4`eZOg*z!J$t(B6_=sAGbG_$@Y z1UNCv%epgUK5p+^kzm3WN9Oy;84e8}`2E8P!MCj!UM5uqs z8U6#IvM+P|7vEPAxEY+d-}US;9wJBFW|>2j=NNJm2#2|^VvAL8k%A5hb|WuxZSc3Q z|8>q^7PAMb{8FQi40gKtnUc<^P;^u?lw|Fz0PSFoeVrivCTHJFz_+lNXlf9oh@y^* z`^*fF$j2a>_B|6+_U+Ksrbh>{T!GRzXgzRS@uwMThBSiH`U z^jC_q&)83p{fY1-Dri#oxNOi#il8&+jL%6JGK~% z`%NR%(mf8QNqgI>t`O)#WG;qc5JxrWk_cq6F(I)eGJ<2pH7J*z@X(bXTj;x}4k}v> z%rdls5;SB?#gBz>06N=RB4~$+vw?%>_V?xRw8lvsBPbS~$joShAkX&c!hqyEM#JmO$d+FsSK(#9t%!lk=1rNuIw%k}}fW7nEOf^Y(@cM-hwVQkaPg8 z3uFcnTZaK>PF@ta1NMssaFhmAj$8z91Og2pTqC*{VK7$MC>ekoOgF(>6n~u%X^s+6 zc?<{-+Al(#;E}`|RpvryuZl$rxX>WwQhG9oZxfB#r#g10#1EZZX;`nf*e~zhYmi`R zuYM&TUGs>8Bx%JMEQ|6-d*IkLCm@;@t-4m_K| zgzMJ`l5Cbgg%;Q$`!-Vb$hm=?p-YxZA>dO7njh;Rei2?tAN2&fuj~nWw5|YuYOY;_ z#M|l#HCrOWp9%bL5l~o{CK>N{oICn&XnmiN5+8D&i}rB1>s3jUL3FEOoYCc#!fYtA zV*S0`aMPu03sl+zjrnqNSO%U+iZrd_>ohmI%~P1($kp0&RiGGV!KNbM=cqcWW% zsN+S_vo)*8j{cyrY1{*`RKp=T406vvlE?0<#*HwAI*PNHU$N>bj3)6)v46N5GJ}L5 zJCXtBui%8_ClL0%AkSD(lICWTkCQ;qpMHqlYJa|j5RjC!%-Eix@j|}4IxIV)T?n{G z;3?B+xkrtGfN$fN8HNW-v?2>onkP^!4O$$ijs2k>8^w_AXz!7{Eqx^NLXS?$`DTq| z18ZBLm?BXlH%t{8m%cZYyza_ynKd+0g|R}0zpR9^WQ%iXzR{$_oGSh1L+tH#9i6Mm zLoij*y&{v}L^7m_<`%K2F6c|B6Ti?&9h3wiNoyuEIFjMd>;rf< zYX5i;>>3IO8Kfw}90H~yBMsSAkb1n}KAS$W=m4NIl@lL<1qp1bOkp&e}->FUW?W!Fg$xOUSl0GTG?&(Ga8Ec9AQAfIq7NKLp*&vqIIdtA%I@mwJM3q5XYoN@5dFzfeI+k@HwR$8 ziH|@gq@$_Xk4PLn1icf%V)Zr|5$OY6n6VpbzrSnR(8WZZ6%(MBEKoEDQzohThtbkt zq8YQv+>|DG5xIjpf~5*vg<5sBzeOW8DuGtaB&~9TRETy~HPC`J?FZ~L8I>YX*CdL# z-Tv!+LM+!}prE@Rn3u$0)Dd18H4;gWO~zy7Bw*(4QI1vABbxvb!}X zc-k%Y2ic#K%uYIFvE6Ubo~+`(OZ#9ELSo%Rj#p@kWAp>LEto1OnR8L;g<`m7<7%mxzHJsh^qXa1b$$!GmM=D z_gkj$Ya&yrGh~}^)1fv65H7eWnNkJb_XIy@e=r4nMe(8O^7Rbi`8|dpp@!G0S5l#r z1?a=hUw7E>8jD$xCCaOMDj=Qj2ltQ*qu|9!T=J%3gpdd0{7&t3n7h%rbOAoW%-oY3BhH5K+H=)~2ckb*!?+wi?`;84fyuf>O|Cot?ba-efR z{w5Dn_3ti8UDT3DM!eA$3o9|7roznFlJ3N@B(}y>Qe(vZml`qS2<(1n-$Rlxg*%8b zZQ`e)!8DhhdsbG|Ihvsy+PS6y{Yi43f;`Q^kfQVS{(TNAXy=KF9-XAap#!Q*kx~mO zBy}rM!5$>>ri$c%pFy zj#@2P;XF7mjIPZi(I0Xvk%|jhl{VH$?CpE&+wkTrT|k~^kxKO-n?vs5ehq=sy*h5N z)bSJPsq%APw{Zy)#3c{e!h%##>1u&P$W%)HrHGB*Xdzo=5$+V|^+E%$EcOFfx{McM zbZ=$sd&3Z+(xnCH5LQeiIgru8e=w|SqAz%V7=uAV786e}hrubU-KcrM;2y(-L&%SY z^(<#ko?9ciMqv_y3G8Q_{Vcuuu_{fz@{l7lM%;G9_}JL&=KA8Q#eM-(oyhEVKN4!Q z(b>gQ>(Q6+GFe<-JSB3#Iilpzd(UBT*`@hKi~SO6LhT zL83Th4a3y`l75bfpTCOajDz+xo~7>BD2xAoojyvL96YIUMTdrhjQuvfcA#vGXg$N! zVZYm>TBsaF&fzSQwf+rK-f9KtX19R_r&MNT$iv$_!zcCE1>tr&N{6~TjMrkKIl)z? zqw1ZIDb(>tS0qx$wbmjf{iW+JaDq7i^SmmhG)j#9%^sjfz>HywXHv5dP5~;R_!WbR zjbuW)A%S`p?mK#~g@ogZCf+l3j+~Sh-aS2Ku|xXp)HIO~-rhTjRKLMnNk0qs-uIqp zhFna^!oByRf!lP^d(prFyghn9I=el1i_Q+x+xMW^2wC1jZ||LsCXcs8VstigOpxNC z45)Ha{JfQZB2P1D^)~uBE`HulKXc;e9qA|v2r9r%+RD8%Vg z1pA9k;$7*LrzKm^n^~&%GP-sO5onQEkn_13A>7^JGSR32`4$KdLW z)EA}@HZMY_a*^D&p+Y>G;ZF*7uG@pUYLk>bpbLHL{lR^; z6NN`8K;hH@_SP(Acu_H$&2E#p5EKcuZbRq-7Bl>+`WP9|Tv!A(gc`A2_qHC%@EKKH z*)gEiDMe^)K1plylGf%ksTnP@fQrUzvi`+Llgr5_mt~X7`@&6>e2t;SyL}|m?POxn zfX`rsZ|L%7NyQ#5SZz6kaBA~u==6lF z3UwAqOHdywvRn*5&@rALGfN`DNBb#0sfr>cUK_4vEX6!YF27y`F^wb*HY5!;(ovI# zAlGXO(RwNZl)1KdGM1y&4{+<_SFsK#2O)cZX0#GyAnXFmkQmDH&YwStdv7r9o$r$} zFX`7bI<8!rvaFxMZBgCod)H*Gn+5UjDpHA z1%H=XvyUrr#iLxf`N396nptt1(j%LyLoVOS9iB9L7tnbj(45Ye!n3icRUvpPE_+EP zo|RVF*%GcCFV2wcWhG#dbSK#vY2rnr& z0%`XJDAHj{+!Ca#C`lv*<5TX`Vo*XIT$4b$?766!iQN9Z?mc1*$e$S-cfUgdVm)>I zMJgKtrT^?zuQ+!VCg2JxdmKFX#;`Nl7iiyAS3D}6zQ0{ogRKbgl{v>{x2v4RF+g#p z7m8pwp8EtY0E5$5aOG0{y#+BreJsG^SKN}ZW0Mw8=13Oq3aKcT)?}I5maV3cOToHv z`JDO#mb@@0mFZ^YgjjYf_@$TiRgPdgScCS!b*&bs&7~q7e9h2iacP#q%MWJwgkbD) zEq`!Gi)Oj-fb^kEb|4H9-V);x4j(1$Qp`Jpt2~yqT@%^~y7}Rgg2AA-@Dg?CW2!Ew z<5Xl8#9Kwkf%_e&SOKJ{C|7%-yvCK0+Q-`z!IOPBGyF=*4&9sv)71)vk7P!5!s#j< z#q)5Lsa@k&Y~qMtNeaDmG>xp8K$58z03z49ejHtQ-uPL&(WXwOg3cpefW3_4#-%!}Gd4A^c-7QR=_Lsqk4Q zi+~&kLIS{y?apPNR{^qOSPlx4i>3Y}gi|rUHw4a+VQ^~g`L)4$1NrAi)A^^=3&oa3 zC@w#j8LbDa1XKlOXc;mPJe+ZhB?p3P^n7EzM&>(g11 z5?pwE{di2S%Y(&y65^tGWb*9OnJg}jz#*#CP-}|Cd@-H$Q@bd*>2Rxs zkTB$!a4Uw)?QcYYtPTNDll=?nAgU-+Vhd^13$9cin1BnH!Qn=rTPd^TYK-%Rjh1DzxGPxpk2ERBKW zA^pkGs(U&On*~=MZzCYk4Xt57SoR^lCluslQC0U6#ke8yIJmw~uE2B$Y!EzBj}pQo zFQW|u=fLX&M_pnYfSz>1-;ZT}*!6aPJo(b< z{c;*D799bV6X~_!UL81y{ji@XN44$4uXhL_UwL>LFck`@_$Y4Rru>=oO?e?Cv$EQt z25l%=K8Kr;IM~u1N!TKxp71}LLF^2{Fx4CAWR|qg)gI;SMqSJ0pT*{x`CNv5E*;2; zphFl!RY%z1_;m1ISZ2Ne;takE{W~8Q9$Q`it8fY?I3rX9<>nXm>M-8m*u3sY(SsndSYjhN$XNw(sxYfRV2F`%`I}B!%?}L@nuQx=mPSaH8cqx?*U{a}a&ASr!1XK@x(&gV;B>q2jP z&i@a(Wz8JxaD$X0EAae?N|)LD+RX#WpFA)Ll36WCCYvl8kI1lhmem; zATxS_W zJ~3NTgp8}wOC<*iX(GUeZqbd*u25G?Kd9M~{uh%WFKJB8mb70Q%>0SNOrX($t;fZ2sQ;TxW#Oq%{ zB2t#JkR%|z>40MC%=N6|Rb_(}l)ZG55I#2lTe)xagBKJ)hh)EU%wnO$Y3C2 z3lO(xb0ohrWgG%hS2tUo6g!K-JhK3F=po z$@q10GJY*5;2afDGsyH8D z;6mJPAdBw4b$j>VXd|Lppx5AbP|;bNebm7vWzb&z?-U#g^gWBnBty1?qiQ>lpi%`a zsw{;Q#7_wog*JhNM9MC;hbf?4R>@N_m0OK0Kt<7~UzikF2v~M(zaEadO!k!&1Sy^^ zLbL}Mkn9|nY@k(OFGRNw@O-i^U`P?96^b+;dqWnRzme>x_5f-}IrqBk=~O^SDAQ#M zc}&#aFa+i%EBo>uz0<_|FrmN$!evhl1V9zp+xB^2AeHLf`u}sg=dB}yEr)77CzquR zuGuw>c3CW?kOyMn?%8Z)VWUMvplo`#kMN@A0{9bK(+)@vN{2h}f%cST@h3Kt+xPAv z(o&3{-9h~9&JlL!-p#;~j6gsHHU;Eiz#`vm5X_8EG+JBjG6{WmjqqvtX%VkTn8Xlj z+vJ1n7e@Fo8p5pjQ&hz`4(|;>q_fyK?%KP09H3YW1;WIU5q4znmWl@GWMVZph@;fZ zeIx9?y_-=pPkfU0&#?{yLL!)XXhC+iuo0ZE)-K);Oe=wLY8_E zU|`#$e-6O$W+YowMww2d<0lWotE&sxJ=&XSh)#SAMg-k2g*GkR&`bv zSAB;n6Ppa~+>x@K6^#o}FC1~q8;cYGTKd@F*a`^+ei9T>!Tkz~okvj7iY$P0rn*h8 zigi>+XrK6UygVJXFVUTOI#y7#@$xgc3xMEJ)uu8xIWY|on;+q)Wf}OZQ^YYH0}4~H zJi^C-Drw^m<_s=_!Bh#KMD_^UP;-akhKnBBc!cxq zh7re>Dm)y&Qz9grTfFpR!U0R3NO7*LfOU}Bts+APUl;CQ0q)a>u4bbna7V#+Bys_j z+oMW^6ICV*ULbtQF}1@RSUxP7ZIEwjU`%m84XAzRhu+Fx>Nj2lnt`IkYkdkF8m}` zm_b$NMtG3;Nz`GP+_SV$AhAH40@^8Ryd+>j56Zdfx~6;h%+bW?aSBk>Kxu^q(8v`g z;c>@^tJM>7E^Z*0%P6vnLgr%dz!B$3Ty;~?ZiO6)yU-**>XBd9XkWy5OgPkVbT{J8 zGYO;hJt&&+VlXJG;^d*?^#s9IcX8_(EZmoWwyL`Y_w%SRYz=6#p{Cpk(DZDxjnI?B z=p?|Km4g~2U=E_*bzx^XEqpB;GljOJsHY-~KBgac)Ipv&2FfG`#BPDY1(_}k%QZO1 z4I9p=i0x?bL3SYbJdwT3@P%e1>Fa@NZ)40CI0y^0BgcDl2bLyoktp3;hKds2Sem`e$-ugU&NBvUFoP%El9PIQ z*%mM%qVwv6EM$Du{35ECzaFXN*~AhiG(@{}lZ9yXu|j88rKb&+Il@dfy4wFNu{`#Y z6ZZIS=e{Tx5cMH3Bzq-RL53yJ%ruE zP=MkAGVLeuHM*Zm4^)}r28IIF^UQjy+VQvBa5+JM;uLS9DpY*B49*nUu{zC?uWCuU zlU1*46a;73yqcF#JlFjoRg>y*1EJ^}WZnp0qO-iN1(6B3LI}7VTzLh#nggKl zb*(oQ{8ur|6nNBlb*vPuYqE@q?K&8FUhx$0i^Q-ELW?tzx8En#ikeXD*E@8bUYC?vbD3A8tmsFz?Ik84`I!4jT@S=#YEkg+r@w)Z6Obzvi z%!V|Kc9W9hXzo_7q;k^Ogh%`oIXDIer@m`iKf_u64Ro8Fk7|u& zS{P_|NyX!JEi>LejI?l2-htk?w+rjC8NwcpWAupv-62rQB6+IlKS@KqnAV9|#Gcsj zYTGT+Op`;wW(T<`>g0k3^hdPX5aZCu-b zCaq3PWowU8a1DzUIf6#q_Z|#F;jr3_m<|BKxwPhDN~#WV>@WsLh_m%dw*n_AZW(jL#lF``UK1F2*ZD@jWS(3iK9rjGovAg3_TWkg$v~&)GEwo z;sQVl)O>7TAO=?0YXdPr$Djb|DG;ULF_Zg!6pzwbiJbhUX`=#^P!6XcA1ht37g4?| z^b41)uMO@vYNshtU@#azf!L3X@aLsmsHa*IMKO%2O#}f^cx3GRC6RZubwn%ULh_Ik zOG&Hh4#AB?r=-Hi{0|#I?`|Utglysn)rRPW494{UY~fUkn0c*1YJk|~)|jHv%Kb*R zAmj2G^cdh>UI7=re7J%k(m=wOLwOGmnSyB(-;H|R{1bMZ9xil1$AaVy%@a7K`^ywC z^SIZ$?0KzVbbi8;5Fbwb@8`g6sJ#gDekv9r;ehju=o7>R&4;+f0A-KpI>dk<9oy91 z&PuRy-KD#obrIh*EbmtCcF-#>Q1Mme9STghJiCZE zy*q6ohvQ@+fOBC(3PN!PxJgL-aa0($r4HtP4&8_*W3i^-O6CNI3+f4ua+GvQT#q9P zRTsTtMEd02hyWNmwuJ%bl0N6!L#m z!{DxNLA0d2eZzjF@3KH&K%x-1;5{ybqo%gCjR0{7v-^6{cuVdZaWpC(Dr7&2PR!u- zqwkdg*xRlm1K9{ap# z00bj)DFv*7Jf!6&7*d{pjnwp|1hv6KK;+L%ZTza7=J*I;YEc0^57eTtJG5x9lS% zrhRmT;Xep&uYGugJ(u2O7A^1QVlt1Nb#UHs7h={?(}Ti19z=8;O(8( z+-F8OFwOi};wxrl}jYRs*GzRCyxH_eIx{Dg%o8 zw6A8kwWMnpt>h8z2pP#q6P4wo)bQs-h<{B08RZ0Zw>INlHaYeub}Y z4&|XCUPJ&#-KtdGB5mP@egn~4sBOgG+F0w5u8K~o5^TlF4GRQox>uSZAO7a}KgD{(+4 z#SiXgj%4Q)LnFUD87C~s&MK3SQlwtFMdQ9xbOUBz9-(|fC_w&oUxgc-_(R`tVqb?E zNxTs^6`A!{(%N*1YJ_AUrH;Cj$Ke85j_4zHDMa6r_ndI=36gjL1}uC~O%L+R8V(P) zZs#TB+)!5#WLNMRR~>~A>G)RzAS%Ey7O>Eu_60~34H@hAX+VhMMj#>&fBx(e9qmEE$;5I=6%nnZ(2aOT^j_M;7)S*nT7;Vx!019h|~C zVJx`V`bc)gz6poaCGP?)7%f~Rw&rh-@Ux2Ts}AS_19@yc#12{?~6OAVBc|d`gIJp`UR_I}T zi?zc=JqOp1WyKIW7!&D!3gt&ZOg;IV42xBDYE=^(+!YO)D65)Lb7E>BoAjYv=r%sE2bN6^p9KRGwM91c4z5ViP-!z48FIkchfTAb z;=(Z{^92SYnSHp_bt+C_;o_+VUfe^@N+6cK1e)KlGY1EY` z$)LX5i3A}r`XzoWx5;&}v~`-?;oJ7_Ii>({C!&7yfxGJ4t;N($Q*sYKT;qebELE`R z$O0k`MqwLg8YOfrS6fKn+}yneVjHzy2h}wm9SUZ{1YPkfONToUjGDVI6^%ZJNz-?TF={TM1mtf1!IOoY%8JZ z5iZB7IaYjs2A2;IEieyhiVSn&f~`s^seXe&AbKW6s4Z+u-m}qGb7Ej|f2-pi))mw#;$3SB)l-?!8SJqUbQO`#R*AciLYWD9)H&C?Nv}kMHr&)bqelMJc842y|>h z|D!mK*gPSV7qOSssfm!_%wonIy3J*kx5p5j#5NC&`hK`P!c5NTLt&5&l8xCfrHo$6 zQ`mVCA-9UjmFarmM6>t6b>aOFtdlaZKqlM=+q+$)#4}K}mpFJM2DNI;s2(4btSJm) zXHY7qKS&TJNwmRi7(7(1>O_JW1BL-qC1#1XzNESz%PQ>4oio~^U@-gI-T!dxrzymB z9=0FcKn;zkG7?PGDJkL`MmI4GEvmd;l!TbZp$rtSQH{u&3Mxh32I=$~;p-cz$og`+ zHqi*e9UhcJwc=OztQ9*^M|HJd-?O@L{N|%7t^l$CLzW2wctabIUGKFi+!Mk;i2DZ= zef*nywylpb;c&hkQ9XP&=^XG~Gz{g#clT_2Mli%qPoH~87i+29An!(I81_B1l=<=q z`$42jNQZHM1eBpJf3#j$CQ38ijy;jSrJ`N$^uf% zNqo<+8Tq}mg+mi9NJ9QkXmmdtVL#gw>MVo@+};oL?V~&=L!iZu+*}^>uu~;I2ooJ- zN8>P)5-1tjij34r*=z1*6v}$vQ0hA?TU$_0H=vfCQ9;|ZjUsx8=5u)$lv!%IGm6Sr>j7a z%Wl&jLTiN+NS!pIbmF9F&U8u3)(vXlK%#qJlM(w8GJ!EsEZINL zUNQRD22YumZND(cWFFMaz%zsi#IHuUqoGC;Ar)VO-bnozV##G?$WU<)5xQ6zVBTdf z?tzY?BU|vri9w)C=V5?j1nL4oicEqY^9-IO*zg7rkAIU15@>gw?^9qBBn+=U_}NJUsw9=q3C?RC+yw zI*>igWqUVfTsP3t^-E&uzZzk`8pP7ES|mp@mJ$L;1|~sqeET)sKS9Zr4)G@_4u#&Y zETb6yc7#8v4hH!k@Ltgg352cz{Cdy+BOTad>RJ{8{i#^+*iC;M*>!)H+;xA4(V`sv zW7*%$Tm@6W@VNz3WvYET?+3#d-OE+aVAmZ5CEk0$lEc2YRi_2P$3(z@+pNG*sE;gN z7~FyVwXU17v84$_5lXR_%TSq!nrZO~dL_QmI1cUEu30{7L}Wzr8_q|`pAzkdu^Elm zkPyu9ib!l`1=*_w?s4I;U5DKdF_CVy%zzTNC-dIj4q)-$ZIN=hgiwTZWGHnzOhK7D zEOtlw=$14GF+zmTB^UwYqsMU752*{`Ox5lRh(n2xts37}E<@k!Z#Oy?(jxFYY-%;^ z=P7hyw+Ry>tJV8Op%3>Fx=3 zyAxl~`5J`<6>I&l6`b?MxM;)}?ZbYnR_L1xfi8J4(+jAgy5nTXb~dMZAv%&>!t)!GGyeC6PZ5H#(Ag^?Q~cAc`= zOGClI`ij`lVe6zVNtA-DBrY6Pn;!H0Ukvs#oi77OOdl9wXqOL z(wu^sga}!zThDK{8pteTL^%|o#YZ<|v_c-AM=U-awnG+s>xG3rbd*OBsjp6^58+m- z@fg;2c|QE(sKqzJR!GsPGSgX43%SQb2!pURB$w7!<3eBgjxfs2K$=6NL}(~darD_4 z{zNd@MTz|YvoH#oh(>&bU_ODW$e%Q3^TjzwvI1mA;*$-<6_Ny1j}w$GI*eXq%y&gE z9ptOWsG!Eb^7Sm z$+ufa00GDp(iW&!{!wuGOi1uMbWu1wg;>vac$7m^aDV+?0fEXs2H2xDCdE34^I zbrDkr*O57bsF68WGGbE9gqj&+wDCp7cK8#z63tVR79!Y{a~p6Ne8*Y#9!w` zl2tLDF7i!(0GCw<@|d5-Ng{>E;284(>8}w2HH>1Omwch>`|X+t*(!b2yeHd|UWY5CuNkioF2}CcT45$5 z5ib@qZo89*$ml>!{$?MT4BSlgW~?{tH-8a+$5@0U!OBQOfmEOY5o=O`>GFi)(t2Jh zFdct)=X|?KVghYdVKdmsphY~GeFf-K!UxeXal?T4H5P>S%GjD*_N{$yH!u?mP3pND zs39q&AGWeMy+kB)(=YpoWgCZ_nBYwXBS9Y{h4bNzh3T4c{c~Ix;o9BELS}pclORtq zfiqlOlRogE!=S@f^7O#UgN`;(c0dK!_3wjLfE3Lk)EjsWZ{WaV(sYgCV~W%3ywaRP zo~9%ygdQJ?j=uk(#SKwyUA)7fcVwuhvJ?<-QX*vbO(a|MbgMxA;cS6XQIQr%!SB65MD1XgYyUks)tCS+G z397=<5i%muGK{a#wY)~liX<>&fu+J?hYb@0WAj#aMxC%JGP~dJ?k11f*;NYBPTyd3 zJKyj6;>uRSB_~R4IKamu@Zm6}^lvL$GaF=Oc-m}FSQwC!fl{yp3O|=|jyQL+_u!%r zmbNU`P}Y>-1tor@q=-WIE9LhB)EY_XrEkaU9s|$5xaSy@&)OR?lnp(UHLtM~%tXR3 zA&%)x_N=Z58=6s*azpy^R$+)rg|-{WHW#hzw4y?pj4*`=$B!K+&HrKxHpXtBbR!64 zYu3IklGkra)*`-RCwDkI>$_mg@0fXtfK7l${8eAZ$U6%G0B)MC%u2^wM})}6dW_XRGHY6_pkNfL+us*~0% z?ZzRbQ5f^ovRp&fAjDhNZLhOCi4QXMt9vIU-x_jtlWOq#W*g$o;i(0bx4pZe?R-Zsh@Ivqfqq^3SGA$Dp|ziHb)eTINc^f>04U z=1nVmTJavOtSJknVv1RPZ1QBc-R~$>b3AoUs1=4-0gFlLBzeexiLW9N7<9*eqefS7 zVCN!}BX++guv;QswIf;;M6120*!LqA&C*F66U81+mUi)%u)Wi3I?t#^3ui@3MmN$3 zmB{jQZJ=V4i-H>MRRA8C!+*YSz;P^%058M;!yrsPgr?qtMTD87kO&0Y#8_dLUjlGq z#snb3TLI?;1;#xR!_rlOkR3s!dU1hfwJ<4)2DaeA5JUx?k?ckU07>fz0T{El59%DC z6%<{`$f?8VD%v%R;lj%HG$Jn?5j z*`O=9c*;e|(Iq(GD%bnf>Mk}om{`YRG!*CSX##3sAPz3JWWS@E7WaeHO*cB1R$!Mw zPi2Uj6_Q;mV0B&bmyq;KhlEXhaR3tHc!)ak_oB#{)pTgLI4xsUVr^p}$N*B9Lj-tX z0Sd+wUlV(dhr?k-n~@}}Bo@b=CDLFk98;^{`a8$6RBe#`iUg?r_C2R~)+&;@UlH*} zU*Aj`N4Amds%jho0?@h&5Xx?gE{imjVCu|if^LmAHJr3)XyVh2TomW5AOI2UW-xNs zdMVqLGf8fzRVeOhPsaUnLq34uvO#{-&|m&o-;DNvB;1`%J?b$RhTgblhyj$>U6I_u}eq9U=> zm7kro;Od4cjhddS^U?!^=OAFKaRpi@l%kL@F3Y{kL2fIL$xFEH7Bq#ItGm*dDnJ#j zd2tO_Msp$Gd5?mR5kd5}anDuAesuE%KHemi;=^3U_o~fuFusbLC&vi*t|C?zJT_|h zqYQYqp~HcGdjY>l=%+HF)h9$Yl?;_;U79SV)Q^)+Zp%Q`nvzg-Q)uyu%{lM{%10NVF`Gif9NLiS9H3 zEX^tuQp1X4!2dx*A4lUeNi+sDrR5?%MOt_oTWo%<&!55`D+Vp5GYHcIEooq_*FD3` zOIrQ3W}XQQ8ev;%&kkxIfc-TX1tbJfk_N7!%!yqKtRhDQn_v{yClU)zl#|P?qWh`1 zgK^bM;)(!}&A120>By+tk+KT`f~AF1Fx@GqJ0M8>PKQ>RB84p1IuMMm7_Q)>d=;^b zVNbf~c^w>49Pkx&a%na$f_dPuD9D^n@gPL}CziV=HQ~t-SfLA?;PhRHMzZXAuU5sj zPl+N(Ptd0bM`)2&A_OIhMu8k(WT>aygtP!uUkJ=R*=>t~QPv%InnJD7$!S)McJPw5 z5A!4faRLCGxa=abULIV$W3n%!NG0n=(3sFE4?97B$|^+i)m%iUm+b# ztyJJ=uf}bnK}n+%TDz#+FczIrjc4X zMiU4&PGUtFmn(=!R9&dvuf$%lom7&X0jq1Y%3v!V6dmnWWS$TJ2a!7a(;zkZ&-+8G z16)g>vA+;iR9V&rE`*Gc3T(BLe`rz^Ar&i>&{Us}Q zbq#l1#mrCknW2olv8pYYk41?68%YZN&?OSLQ6lO+fi-*e)K+hnwicm_RH~|>*9&$n zK7(jcVI@*qSznATEz$&_N32)fHfQ zW_Y}VHEitQXFU7k2&jMrasDX&yKpHN+Q+&Fla+|w01hf{N|2;{AQRyR>6iHQ&7FIs zgZe$FNR8pPEHRcRD%2fuH~E(_nlON%w6LTW`Mwg-u!M1NkSYevCynd65~Fg!HLs)`gT>KFxA>Xvs9`KeLvU|FXudt6;=H(>=r5+`w<$-XCDlcn z7I@VXwK|zm6Me95qZe$@=XaMmrKLL2hM)V22u4~V=@;FJY-Gd&DwKw-qGbodwsgfZ zk*m;8N9G-*=2+;qaj26L09t6bJaCHO)c0B=CcYz(9?C%Gv27D;LGSf=a-z zLZCooFc{;c4~?QC+{O}h^qgWrkbA3(*xHw?T^xWhWF?X?{=&=#*%r6Da854!yV%io z9(Vx!3Qp1w8F4Q3MUuG5cf`7jlP*{tlCahQ8Kk?e>PjCikw`*Kx=$1*j1wqHvR;5M zcYM8xE%*(E&$14u!spAL1b6}>sZar8VP67aP`ooiqanEN+$yn>4dU#$>ji3}_;m0u z-T4S?TjEjJ0nJAuVc;+O7HpMV%n$5XhSOw41;gF2_S3x_23VauNL zJLML_^OyB{@MG%`$$O{3q9EKg$@%ai9A%Ie1L7g*Jh+B6;rDk2f1L}ymi_nlab|`; zexeQbk$s|IOi+SlA8*lB=q$X?(npT8?zpO@(+D4^8GBwR;i_)o*ziVjybVjDXhsEB7k&DaqqgrrZG9=^frm_~Itdf)-o=sH1- znE#&!00&3eXRK^wkV@tpr9+w!IUNLZgwxGMVVb8Op{|gz(d}i-y^P}+TsDy9T{iWu zcR2)G6Y=bNyAI+ctmKatD$_WOmAAcWr`*BG04D!2@vpix#jU?y$6<{&EE%Po_FYjx z^VP?^^JFXCIS;+9*Sgf`wp--(1%($i>e5+HsL&wh6M_tIGo$sOZOFR{GvbUIhxRDt z|5(Y-I)Co07sU1l4pEt{AW&KB0&F+{szR+-!~wFhUO_9tNX5r$tE?fZoYlX|w4r0? zC?nQV?IOk=2XSQd4n7D*v9Hm#Q*VpIdJBqY(To;Nz;s)g1cb{6>n1A5zyPd}<_9jRRNH$RK4w27XWoezJ8ORva)lsePt-Lo3*~=_(X;164+?4^_FmGa|!w%K3!o1kYLN zbAkv1wDbh|l!cZtZ8_dzy*O|=3Oe;5bSk|+1c=~xggq4ruDb}I-y@TK;9Dc^f(i5~ z(TDUd5K~D_OHnEn|8qYpc$vjMhkwD&CfOJ0#U%U7IByXd`}|1}h~hDk%!527c%FP& z$};pE&&dy9WJsu(dVU$*#DaD~ubEx3S)5VfjNycd7N%jL^fc1kgEspkqt zcPw5T?2doc0zA1E^sUwAS1nGOiehlVId}!o5Q-Io_O2|$zM4MLI6PpOd|C`PK%Ns0 zc!~xbeE2%9>8Uf192N0)Dj^aBrhNs8!4eG=DguBc))5jqLhAauz zhbiV+!0~O8zT)^7TM+y9wc&g;MEPg}v{UE(!c${va+-7%S6sULQoop z2g1wHlKhFq@E_Lb&#Y1QGyFo<8%P%H7x8JAhx;+CPys-Nqp} z2X{r4-4e%U$mrOjU>JeUP6l+qkwYfKAdU*whv3FNz5T9gg$Svj)RydSQ#WcxPQiNU zZ?qR%q>b`%1hh+{ zt-X4)+Lc#Y$A0boW=5K;)zqUIW&U_q!2t&nNWcLH97rLB1Y$_Qg%nyyA%Wz@FQkw{ z3N9qzLJKLhkU|0}q~OB)`%C~RqI3&DT=*E)AQK0)^BAOsoak-y1iw!w5lCTAj*9hhrAc}nX3tY zT3t84B5E{*MO;$te}`oYIy&_cNQ2g>**bMKF27K;4_=JdPksVFoYogXZbKlN|H$Q5 zKqSF`;*O>0!(jIR5VHAYt`Ph(H%#ql9Z`NThId-Uweng#jHt=c<<1(qj_}LB3{f(u z`S2r;9Dj6X#{T@Dq(F@GU$EGx258k9?bgT&{+r)gF7@BN<{7J0Au_jH%jbb`YA&#i zX;AVr%ndz#d??JVhXYV?Iv+cMl9nGkF%g6(01}czQKlLg2&d=t2Tm#t3_^7B0$VHu z0|TP`rMH)PeHfj|p!qd-^z$HSo4@Dk5U}xS1<#i0#^>5%!o?RiVOG-Xsl6jX@TiN?!twtXln|an5Efo+ZWN(kz#5A<3oPw| z{5uH8`2dn{V`Jb5MEQ$PEc4$eKC#={`tBc>^NlVMpxWik`T+5^g5-f-uSW*F$nrI7xlhah!{?eYQ^SgI zr&V8U=runSp7sA!9C>sg{Osw*wb?V?i-IsT)18G>hNLjava`_5isFOS&(46f@B;Ka zDUV`MY~*NoQRdA%tj_yWJ_MuYT8y?^RisvE;Ko)A6`L*JaA)8Ou5RoMh&twfMm-K% zD@6}6J6ioq)k12GvND!}(O2&Z%U9?H*Bjp4_VhU+=Z+emcmvkZut;=08B=ZZ@&YbM zE@xT-$_PbVf!jUcS+q9#0|#uF|BVIgT@Y0urtpj;EFZ>u92-Dyq#+AqIeqO};c_5E z*=2~(J)x?jigh#`0GmV%!50OKGvdD~!7fsTHW*vuYH5P`Lo9Exc~6L}bBaR#XcVF# zdBMTME?PP?mS=y$r~JZ4S7aUv)-ogL_<*ATMkEFxK}ylT|2r4dWsRm&nwY@MbqI)eEs-a>p9GH$j8IQD8p)VMY*yDtbqMqQ(5SYd z3`eBFY&bU%91AB=tR705iDsNW3kT86jFksQ)iMhcwD}aWgDRrns_n@z^ZKkK#a6NB z3!^I4o(M;c$Q8^D414Pyg>Hprb+AIf*t~kRq1|tTGXr7-Xu-(_m2-9pCShn?VA zZ%a>K9w`}px$ER1XCDveK#1P;Xs#n%O4^?YEWkDkAj$e~DkmUi8jo3IXR*=yF?f86KR>kAsn#kFX%y#FELoWkO>k7m3c`O>w~YAH z(tr!nXYd*De`~wTd6FB3NgejGdgJQ2SJNa2W+AMqEMd(d62TT+3gz+=UYbh2W1Bv( zIq*!eO@r@2q&Ll<@{8sc*)F5MwT;?04qmaxyd`c;)ZRDykn!Q^tpAbWhd?HoL4xF1 z8y`OYI0V!liTAIUT#9|G}YKkA6VNtRa&Cgu(JizAv$WI=k8ln z{oQF9OS=mmkcHX{9GFfcM7@pA(#|F0u7P(cUx2@!#&m3g_BBan7Z^yN+|q^msy!{7 zKuLvzat-ajaIdL@YN8D1&vEBaAiB!!m;AKVf!U2_u7bGW>~~SV;6jGsA6lqZG_q%A zh8|Lem7K~WWTalSzW36^TbxM{4);^N!n(VB!GWAUB;1}$MugD?-qIWEDQW`4!RVu5 zaB09LYD)x6Y_m=hHQ?AW7~iW1)wIdk6zb3^c~z z@wF&;8~I1{+|2+~U?ebJNtCj+VkdSpt-frnS5fez{i94#ec#0>V4ZfExHJRoV8ApJ z!68^sGUT2hlN$wsz*b2CZ?TkG6uinHG(^KJ@+;k6T)}eT`Ev2&S)?4d9?!^?x*Y;5 zh_6075Hfd*cgtesT%++qXIpC~^oMFVeK}0Ps%y8Ll+4}bX&6}1$%HL1sNNX;RLV06 zGGMuM6$lc42X_fNIWnH+MS7&b7i|ok%3W%>w8PvO^dF!BI z=1_p5IY$~*<$6=EnK@W9j&-2%qM+S!s(~~Cw8D{2b-1d~^cIj(nBD9lBPJz=Fy5Ci zj!eJy1m4JZwn-U!guV6`Kv=hgF$dY!aaQDakw_@xuH(RMh_#M{4R-2|bZl6e=%x+> zKQOe1c;qXC|cOV5%&G?hf9i3^uO9OkQR>9S=+F0tvez8mj#BZ<}!q z!K-*gM!93(SCz}u@IXL)1GtJfT;nnkJdc7mSNDBo7B4~~2lxBNF637L{Y^LmJTUT_ zBa$e1LAvCelz@;~D-ni_+JlO%&lB82oB*j6{%6CG?GZD=_a?crIqO|WHa9&N5)nV; z9ltI}7F(_%ZxEt7!ZBng9+g;bsptWr6~RvMi17`J8K`f19p`B7v4k3N!&2cj6R8{{ z?dQui`e)#CK`l%7*zn#ccw-ktFyDZA2#Y~3ahf7I;=b>^Td7q)n^Fg-CBoRGqE3sY z0A&Th`&vWebM{(A(Q5l|UfBo=I|iK^E|@TR2foi^i+q|xG!%Ryz8Hg^BNxk8bAEX) zM2eYt{^Vi!RlQ~(h@dl19-htx{~nr04^LkXFyrNZVwI;a9z&t;wv{U&kV(>^a(2cg z68Y_Q?{rch)V7zu&CJ>GyegUnJ{{;aXe6T1W*kEC?9$h}d zF*>8c52^#<*hT#((zphOY@seYrF$3-52N=raCKy<+FFO_Y8cKtge?YJeb<@D>!VJb z(@df^WY1S9v#Z!iJLL*>nRWdevBxV?Fvapf zZWNql38d7dGr>}rXEZ0>--uYi-7IlwY=A2YoVgaMx?>66JhpySIdA;Bc1nbYB6*L4 z+Ov{;a!U%r#w?c+&E8h`61y*;0Jy1(1(E{vwIApCAEq{3sGpCo8pb{|1I-%hLb0r4 zNnH1XI&Evm}nbt{pH`W z$1DO76QfW*N`>5Y6k|YKj68sdyiJ^=R19Aefhs|$L!H|!>Z`@&QRFM~nzmjm8zgnf%e{#p@ ztFYe5$vP&1b=gD>LuOHMUnu5OBdyb5nZ9wz`AQc}*yL&54R{!u27<>UIz6KD!LJ8G zu@Ub7@+p*7Sy6P+Tur5kDEKyosNF4{AmS2TB&DcJqa9W8Yu^yPS=!BwErn-{y%|zM za)VF849((20)1nzwH8{gU9J;e&Q@MDJdbkTS`4>Nyj}$@Lw)lo@i8#86@(R1AhEPM zss4gWMG|pfs^J}$TwxeY%QN(ttJ-=cuR=56FQpU2&S%Ub!0sk02B!GmGU{#C?ah#o zM|YdHf!suR8t@zt!Ejx2w=|KPK-@++R^4=TIyg4+bz~1`Wji6Hsg9`3+bKg+In*bmFsT=+qS^UW0T+ zYYH@xe|wtG{4X>~+1-N`d8!^^{n%>U5M|Iu9_yR0R3J*TQYKWB&)Z*elw6)I1V9kAYknge}x4V)h0Nu9-7fGBP=;b$164g)?YvfmaE&bjmSnY zDD=#51&qhx`2kiTZX%Z$8vtb#xZv9ej$|P@BsJSE$%gVINB)cS#|(XG;L8KSmlA?j z5vaX$Ow<8XjfTVGc&iPcFQdpzZPS;-f-0Yg@I&~3*Qp6jn8xKB_K86b+U^6J?qeL7 zs#Tn=G|uGQ?fAYhJYffzU`%|1+4ndW-2*z|aKS`Y;(0De?*(2Z7a`f> zaTqL!83^i{XlzY+C-6-@(3k&0Ap0^>-{c>!4-|se_qAY-DcK&W;|zyf9qaDpj+rCP z7@U9v-|91^iEqC}3q0y*#s?}H|5`=afjmh-hYHYx#ljz}OsvJ9aQGZ2}y*7{2L z5(7MZB=S9%6~ui6`R`mbQ$X603gmWlS}hpbM=8}EdK8R*6iKvF7wQbemy*gtB}qxA za7;IV#5l#gL~wsr{IyMp zI)oJyuldrud5jk?fJ_B|16k zu(~REVsAp&fi8hyRyChG1jJe%Hq>FnC~3{r=xkZ)cOv}N-3deCsV3A0xwbEtIaW4j$Ry9xB$ zX;vV;J8~lWxgEk~yC5b9Bl*i2#{R(~YY(9umaIe%VStK>+tGosXP7WideqzGHyCqF zwFkNdB)As^u!2sRg+~FbIdj(TcwhJ+_z`^r7E?-6dloE8uarbXk+)bo4j2JBMr?he zxkzy7&oGXMZ#_rpeYRiG!xU^a2S`b@2vc2g>jeY?Dw-p`Sa8{%v6H#(IQB?L9UqQD zQcemJ)k`X_R`r9+;S)9<=m;`8+D#LQ=o$$_Qd(cEmh+;i7OqfTsnZfNk%Hfkul>S!ESh_Ybhvg*~5VZs{4b2JRKq3j;4cX0SkxVN}SQj;>> zCXl%av~1>M=;vg|s&erVaIv61_5~JJ6*83I6x`aT3ow?NT6#2%P(bL-y5xS+Y<9_a z=3ZMuO0=rs&ZuBk2Z-vJm1vck_oq-~#ZsTh1HsV9n=qN18v@H0r-Y?Xx%SA(v1pis zECvPnkLD%itQ9=ZZg0KDJ(_#_Vmt){Ff^l{!_r9L_>+HX3p}+Hn!D3`o#{kY2u;f^ zxEGDs_fiTwMeOrMBG_GbyW$5>CzvKuaP{;;&_gDnLTCn>J?3yQ!$JBgmuT$NTRZ&F$bW_x zWeP0B28FJhHFRi=!F|}uKQ}Kzo#|~W?)l4whm2{%lHx<+OO7_%TeXi0G^aY!3wKI> zhx986tq^=E5$aKvCO1p+s6*Db8mPoQzeMvRj?TNq46ip$*ap9^up zByKK-Lx62TxW~n4t>Zd4|ENPHudSoH%`1t4lIieB6*mQ%e( zgOL;8o+Gbz^Q#67y~mKcWk3jKW$^l=Ar1lT4BqDo;{GH!AL~+$+r4WY6>%AJX{3s*u3X3x0iZ1ajGXw=0Y(qz&7?;_iXt*?4 zaP`qo%vTv0vk+1hd(ev4xOvlqOzML1ElfiQy=M|8%_hD$Ar%G?_lUqGTtMA`jS?a2 z4PC@Mpd?kh6In8~Yic=>c>JgGavDkAgh>0CqmSCwrWM<5fml@ZXc4j6_@&FRbd0aG zz7|fxUTn!WxO@1A&{b01dL%v^;P3N<^y&ZG=Qd=Aor_l+s(M>)3r@y=jp9 z9d;sI;FO@!J3@`AlbEbU1yrBE6E2WW(z4-i9ec~lUkM9xpiwHIK9v`38x^_0l%VK% zr=@Y>F4YT?|2~dw(;4-&6@aP$azi5ruD#Hh)|{SaTRHX7#|^()?-U31}l#s7s|&Zt6N+pdF#PGx=gb@%`*p1Ugq z$MVlYUQ?T^Ltfm1ghNk*D0D!C`%p#)o=|7k^D(B=H3S^Ike{zq;F>rzoLZG~RlS$U zlSSs4Q}nOy3*M!y67!74_WtsZ&zr5Lks(?Gu8ZeFqur89HGIP;;m46Cm3Ub45QN74hF2^{X@75vB>PgL5UFmshl{WimUIdv2Sru<66P;7F(yu zM-W}hySB&pSf1qDF$_QriDIXgL$M+LZpB~c;ESz!p6;SS7adkjo1W=Ft_YJ>*%Kdh z;(iDEd@mftNe{t;C};^FwEk`&{0^@TMZ46hu3O6bo!LztCX2m-UJrz;fL+FJE4Qi0 zPbqw)6b;J_8_ZCaXff@qfRYQ^d3s_2Xq=KhZW`Ygc`6B1^gsw795{4FAIClXmefOF z1j_Nk+?t`-TZ`zDiev7(bAn`~6&D&SOQl3%(8ZUG64GO?oXhnEX7?Pz2!Rz?)J?9w zcvzy_hq$XsM_tTwTn`A>XWD4-yOTe>B$SuMJ2Zcy!$`R!gn0x^I64f@^p(;`}7;pt^M+oZrBhqfoT1Ya{w zkX<&Sft9_t@d#IbzOgJ2OYn16i-8l%-a{h)sl-E1n4o`MEhWb zJgv12;eya!W=-gq#aG0xiDwA*WAH`M=r#^^9xE0(1zSS zgPTYk!HI8u!MLpxNda+e-!y+AoPdkvDA2yCJ|Q*$V+cdy8OP1%FV*La3LRG z0tBypRirn{+F94C8YSS?5LKjYm*A`7Pk`rX{?I_~YjaFVMFWTUo9L?2M0S)TGVu-Ofsi=z4 za%$`|3?~52d_enZK`?<+l+HhY0irglJ*pC&T$R8R)LS{<06c;Z=3eG(#`?rbsbnIg zUylm=k7}tY@#SfB0#HMHB^U;xbxo!faIUeIN0sFy)bL-4dSZzpJNQg+SMHU*r|P&- zbRu>21Ru)1wMtk13lO9YwHTx%O&aG3PErGDU6w+00>`%O?3}@ebLHOGFvj%8)18od zEqUh?Vs&z18vfBNj(GtIyqHmscqI3{Jz`hKRFC%*UiGn|72KV?o5F-vbj|1bt$9t( z@wW6^xi>gV!omO|2o3t4-e|giF%~V@Vx;q%#1KS02EU#A8jKRP3NJw56@H~N%b~I7 zB&NvD{Ax6Xkcr`#$=Pq0L0Ktj!CbTEJyiiFF9W#GumOgBmdUoLhhqgyS*; z$Grks8OgrLXx9?~Mj_cu7UI7YttM>JQ>cR9(Hz3EiBUG_q{b9v{2-MY!4#_JfRC!Y z0vpU(wbDp{qOrvUzdM9(PsW5K{vRTyh9JWP^HsQoF%GM!Y&EoSSm{q5Mtyfcn5?(kRUe}*iS~^iKcxeC-?)+ zq80W}{9;yYKP3m8f;kW*E4^ZI#UOr8E6%loKg|8JAqLe*a*H}Ks%j`2L2tJpGOB`!wng$1omQR-}sarsz zfbY+3g@jkK3|vCeM+t}QGN?eY{>c22N-xg-DivOWx5NO1sEpS{<}9EHPqpQ0Ii)@i zK7y*z{Keo5^FSyrVYreEKsN>NVS6E1=WP~WwF{7Yx>dchDFW10bb~+uieBW&kdokx zGCR=H1UEr%;7_$$RP$v!1_;GXh(*YA2cr)@np@RB(o8yfsrw^J3iRRCukh9$&%H#* z^124;IGHjribk(?4`IId-3kxne$H`-jE=O0EIfqquTh?cJI>plKmCtXDtr%$Aav3=*^9~HR|aECi+uCPFd-#+#0 zuC2}qr7G5APtr^f8fb#4VmslbsWgm#@z9K6f?P)cY^e%l`m9H$;4w;c=4*X7863i^ z(3?sa*^mypF99SNLWpVQ&|o7`4LnZ2v|$nky`nslIdH%rCZ7(a9Xa7G>t-e;$iXe+ zZ5awR1Nezt=Qt^k9@G3A@{s8Qlp@Tx_r{Z+M?j~vA=oZdF&j=|!xfn)TUXJnOF@e0 zTzxA|6yY$?Ed5h1|Mm*LgX;seEa-u-)S}-TF%O4J4Z=RdC}2Q;-50AkVi!*N{ED9X zJ;^+YkanQioWq+o-O?>ieq5M!%V)H+5Ii` zQ~XPB;a4r{R{9-X<$oS>RoSiU0tmTOsa-VQ67@gXnu5w`Ah%uT``3ZtlJkR^GUG+s?(1=T%=|rR zx))Ks4#IDaYM-7QT2F?58M2hf%nY;Lx2wg?Dufl}(A3v!9h9DtCOfDOxZbuE%x7lO zuguJV@okse>zf}yA54r-A)NmU!C+SBnarE%k>MGPuoFiP%`U>%4{~PC;>{Zd;}m&C zdC3J!1L5Bu#xy%|iuH4y&IK~8UH z^5!21&aSfl7!|%o-4s{Nq3A*QPY1b@?m4|R4F*nV$RP>(U}0iK3UB^9gLAM{t!P4~ z^(f+a{%IimmxBaKk4e2%4FwC!jT%Z;w9qQYT)!x&I1v8yAlKA2rMIG^fRkN`xiKJ~ zaFSn!032=6V=|!HMhK6@XLe7=&m`vHGMGH?p~7*vi}?i2aX&dzu#?k zZ=J)zDbrZlgWP`&g#UPuD3+bkThCp=X7;HMwf`On|NC~XEScL|Tc z4jwGGvNL(}e>fOhK@ELq0J-4k;KANsW+HF)yD_`A56K0`4|;Z;$eaDQgRv*+N!u>x zg2xVcb~BMT`#rd)wxA6l(J~iQ5BTKmOy2yz8yrK*C7NgiUl-Hf4<7Ih**&SZs^1R^^KAMpwV-mrUkrxdJ4m1;b9rkR3l_jS z5k5lW_)@u!LU~P;P#!$kTe@pXZ$bvOhU44H_-nT@iLHY2g4s6Bu03Xd8_znFut+E$4!NJzzMvsk{}82Zfcm z-PT?>5M2+LXC!lZYj^-_U_c+*w56!y7OS=g+!}2Q+g|UD9A52W0c)O`^@0=1ExtklQ;i# zFnoRkQo*+lm=j?VZ`R|%=9wD%Ji!QNV#r0;T1HGU;P7{M9;~L>e{OG$NMrc-q_f_- zwSx2t-Z^#_dO?v6onjk_#0YGtp)g>sJ`zev!Z24c{|ZKb?P7M|lhq0z<^%C+c(r6` z?!Q{COK+9!W&>qs%e6>)0OjN8N;GMr(^}G74)HgC2Gg_3k#IWhi*)I!qVG_ zLWWp~FLEKSH&CJGx<`1P&}?d*SXkas-AM;QB6c>BDja*+_ez?N;BRpsrT6xItc{U< z2>k$f85U=@#w@>{U%PCk2e>bWS*l$Ebz2bgB0d>>>P@HQ8T7PvtT zv`66wmM2D?AB{?RDhxN_99@e~vpzF(Kp4}mzl^Qr~avY*8syzm!#l(2gJMO!V-3L2v{nhu0Yvty<((&$}!N@7}Mi_4UkZ_;u;A08r^xi4H6q43c&$1a9E|W`)fE|b67-inFasF z2s0^fXsPx8E2Ex=!Cr*~N@%CNo2YNd);*Z8w1LW$h_sb>6W|k!Z;0;FW~QiNUq!Qt zrvavmF`e6`=&!K^Jy8uC6qw@V4ZwwI=?Q}Yc?qXeq^|5}a?Hum(lINiYEKV4L)Cn< z&GiV9Ms_N z*yw8^9by?!rO_-IqS2GlPW4FI#r(~yRrarR{Pb2FQtp9}VjeP?5Z!~wo)=N6oDqnK zN=_4;22KIINfew0dnZB4|Is^8K{^=OIEBL~-CnV{hf%tRQM#th)M1qFVU(^796F5B z-Es*6hf%ueju3}Yx>B3j1@<0B>1qnXVU+H>6Q%phLrd48rOVb7KeTj(;mBH}ff(UK zOV^>LtJ#FLrpq>UXz60V6lW7Yv~)2?_x)k%`p-j47gPNY^U)9U(KVU&Fdv=HkaaJ= z-`a4DcU04F5A)G0!C^l7VLm#1X@~jfrfeAN{F{mr^f4-24)f7d0WzhFJ(AiFEnV-9 zrR%>AEnSC}u0u;#Hd5u#(sdZq6(3r<4r96yDP_VTe*AQi zp{484(#3*UtoJ>kEF^9_I;n`U&LtnIS42NTQ4?Q_rTVeRs(@2Iw z-TrKs*2z3lVNm~Hn`X4o#`pw2Y9VJ2Wergux`4dLkDUm@Nv}Hmz+iap!Zx!9XT8Gm zD1|qAR=YVdgT$^PRbcjYX7iXuF|EnWYBTrjH~GTqCd$*>4t(g(fwl}DLc3HDZG$xUyHuP zalFlQl!j~`iB_f+hxZu8d!@{!X6Yaq*h3=B@FHqm_WH`6oz2%lwvq)#wohl0$Aq-K z?QGg!Dre7TBK9e~o;S_6+@85*yMolYp&)6=u7?0vGIg5>Y$TGkqOTH2CWDGEEZfw@ zOoGxIcrQs>R3ri%?Wd{q#o#zgk=vZ4<683<2}@fg2OFu_oqX*IDQ|7Xl`6`%03B=& zVq`PAb_4CCT?o3STFft?JZ4cd0DpkK#|H5=KM+}*`Qzc7WaJ?=EW!F@O&v+SBRWWS zVH0)zQ{8#;1>5a&u~M2yCjssWcG%q=*svgq zFg<+e0bJb^(xh(|I?pJJbF5n$@iCQn%rr1D$e0_MKuK3}!xTI~w`{${cX6qIN;AT> zg$s^Up91gL@}q#ynHIYU7MUV(Ql{&cf_y{mr(!vCYUpSgWS?Cti%#oI*LB?ta7V0s zZ@#su#g^NEpRTeehV4(UDY~{Bo_&kilwB#bsNLM_t|3uWD$(;+Ya%Pd z4GVNx*LQBRrljt(hNg@=IHeGiSBrhZy<=KlITkbJ5wU0Y;|@OC=e!RNMnhw-Sd>6F zG$qk)ocOn0(7Pv?+~t?1-~E6Ii-`8bq+oenio=s265)y6!~MSvLpplwsZ=fbq^LDF zEUiR6DT{f!$?|uj>{Ir{dr~%o5>l%nUa$;&GQE@Rl66GadTnff=YK94CMz0$;MiXt z2nfKXK)5M1$0E{){w#%43n~JEmpbkea`>bhRx@9C&J!{&Pe|%MZ+J&MdQ|pPkrsOF z*v_y!n8(SAWbwHW|HdYYm29z(59Uybzk=>FP_1N}t_D0z>rk zlLdoJCkQV8+64?B%Kgo)T~c;WS%|C}!L;~i4d92}`mWcMkxmTf`S92qz2t5Vmq5~r zZ)vL8Q>^|OsLGRtNL1-@Q{s>>W(SY%A`7O+uxm>aOM7W8CsOd~5(r0fUo-+CIP3qw z-WP2zh4d0xc|Tgv3<)Tl*M1cZnP);WC~esmS(cE-O5rB1B1CyRoP%93BMK& zjhshy30Cc2L0hq0@UTt1zV;L#v)n{Jk)oHU;GE?ZBCRKg zBUl$|yXfC?-lYjKR2A#&*;YijdR)d99}Ce}mhvo*!WFeaA(V2=22b>6)v%g zDogvssK-=o7v;#W!~lX`Ez-!Xg1*vGfs^AKtRChH>ioEmtHiBxts50jmgOF9ff&q= z%UdEn2sUWD)a~sU7B=+kWi$br3k%AXHUOmL;H!0WaT`f z23cbDtV5MW^B|4qKidn>7t!VKN*(lwVVM-rh3uocZuF(>&8d!@dn&ZWUva^p7P8cg zbI4ELL!e1>Wbhv#32Z~?=qpss_81$qwxWBIltz>75^nFnVp?rfKw1@$BdjNKfFKC! z&y)!j2U((yHNxanFt(wSaviKBVJ$N=88%cvqelSN^jyQq(=d*9&Q?d==&(AMOmTB~ znIK|YNFmE6sz^&CGP~{xa>1#@GW4QznPDjbKv-`|N_N8^B8xIKzN2X^H$*X6eKxuuBvn zcGo88N+5^M28f{wfSo2?o6={}Lz#0C4uXlUl+@(CAwJ!)HSP4Q*nPT&UUMv%M!tdq zg_sSiBunHKj8Cdfi?niLs8(vOtV_Z;cxeT%t>AT(WNUz*^o2vT&;^`acorvEY}G)1 zSaK1~is~&>mhz616X8WMM1hV_LQ+l!2-F(@ zh$AFLc{_kcAiMxf$+y8PR6(O?zOt1rlV9L7HHc4rhU~_6Vcky@jQj{HR{@j;fceBy?~iXE$a4bCRc+Y$&%cE5gv^E2%?F zzNaJvBBVO@o;*5PS#oO0!n3#U2sQ8b-oc&YaT#ufD#{{EqOmo~EPoyU)A^H!gQKIb zu22UjD~1gdd^r)V-G{Ioe0H^mjALyb7o}f!8kq$mC9An~FM|2oMyI!H`M}uE7OCk7 zZ{K4@5Z}OUtoOgM@k%LMN1dGybOZNQqj}F@IJO)&Aw#u;502dheH3pSDSH>7Qw%MmiZF+GPi^-E*zS57Y&H+LU76cmWDVCEkFYjnORoI)rgluP!%PY(BU*B;uj`y4HG! z1R)_#Aj~GPR_v~@f92Px>e1YUrK!#e#oX#ylm#EfI2}dvuEDm-(9a=+)UUw&e1$S} zl5|3S35E>zGnd;!nwn#yZ@W<>WQUxgT89n-w^bFg4c2VMP?5zEo``Nxw1}jsWENgO zc=MfM?lG)~Xl{W66zYxol$GhxDXF55!kV2LcnwVh z2*Ws$`um-5Asf2*c<`a&AA!hfkI7Be6^Peg3;*!&QG;rbufzi07E7p_3D#mrO4j%+L270uL{wE1C(wRYx-5tW zld_GtDwx z3MdSJLLQ)W(QSdjDoM=HR7hBM`JLd zyJU{ea1F=CjT?r`@SWBSm2%O-%+!`YD}uL-1psP2-vc?)^bor&F`MFmYemPoJS-HkrFx&ydPYdD#qFyxuC&r~hLCxe zAkqS6F-R6WK$z|J=AT+B=flf5xl19IY^@NoA5q2uKP&ZF4;Stg%w%;vV4)g>Q_9t3 z9!4{mvp3qfcQ6oH8*AhnK$+vn^4#wrR;msAFPQy>!d@Vnh!CMk(|liFz;BPeeNo=P zdG~Y#v`j-f(PV+$*7g_$ZxI+-$DaiR?GfP5h6wsA3GnK%3%O?$;Vpj-wth9+og-wN zRnr(eKTkV`1io{EUUu!M0KINo@$m*Y{jurGp|!W-bYY95M#lE?9o&ReuGe81pAw_mRpcsKggJ$I+%y_yL{0u}G2+1OnN=_xZ_dqhv3rFjGzO@72;FgdGkXgdn zRRe%&VI~*|k4HkXr8X>+wZvbSpblI(ScAG6dw3e7yTgYgV6ut?C5Uqn#UdF^e9Ryt zRY7+j#ZUyUD>NeF?$FNyrYRsb5gu0%%ph>M0S>fk|Ea9GCT1m-C?U$zn1BN&k^)~0 z#T*T>czDkNdnIgviTdy@adVDRm#2MZW`(yq4e`7|$sZ0|U7?&WLuQ4MbRu zhG!uHKs^*IIm`~k_xlFJXXfSkh3(nX8qp!KBnUE**WCj4eEl4>es6R!YTQ2pMy7yG(1k3%ILRjh=YVVkWPsvh zK^(cEk_{8;`ya}EhtL5=WOjqtj#a+qnTY76RHPYK^zZb53b+VAY{vm2USqERylVP=+NBWd@94Xzh`;N~~WR&u@< zVjddtb&&lJ7;OMqaEjpR>UYJ~^@h`#r9Tmz=ZPbQ2Y$8Dd?6~!*`zSh0>)yC#vNdt z39@2v3f0JXNyyyfBW$5t5l#Dmy9rapWdtcm0wIKRbhg3lEf+4C?Zu@ie}*wVDb@@* zKsXy?CFrlCx#P`?w1{lQsu4KZkrqSlN;p(XQjCH}j7!o@;Lu!sI1a?dA86EMJEzKF z*hWW45x2jn5)!}Apsk3)lmeUSSi+u z^OJeBbjPENey6fT6g;cu7^C_%DKnATNe~6L!ha`w2DWpH>a8*9R&^4-y-Nhu1aE#~ zS-_;Ih$)=FFf`b-)b1lDg~pJA-~<7<^Hdo`g}Xi?L&Q3L-D{q~btO3@{{FN@S@XMv8kxOw;$kkj zwOmKhSM%O3uskvjvl-X46nz$T@@oCOz35K!QZsW`>uzrS*`L~j9@Q)M9(9wqo&vBS z1qqG;f1wTH7L!;u@JWyKc{*4)&asRg5Y#&m`f(YPIMQ3>@!zSa^X;y!@k90!9^-- z&X>z!!r(*@uF)e&nDP*k?@_rkMtlXCG|&^c%qFog+!$=v`BG+wlf+|pnMBe8H@juJ zy*i<|VkoW!_l`Ue!uYB@%Sl@|cz=Q~%AREn+ztW9{{69Uh1PQ6 zrA)X8v2AqCpu|={pjN%S7EgHhs~M3|(Rmv&KqmA;y>V4kdSZ6Ud$JF!dn)S>`N}4S z=c3KgH-Gc~l^v7Y(iCMwqunV*pMTKpIq$d};%OF5a>QaKDy0phMf8DHOUezHNbd`3 zHnYrzE4y#PY3gehvX%E9T7=`6c*++*YXnR09b2hKr>Q1xPq6 zG?;P=OabSi>V7FRCPd14QajaE2+1mUQJ8DeyZmisj(t!B#%v#V`y=^T`WezMo3O(_ zM9zle2KEi`B<7)k@szqhOk%anhAftrqE(d^iHXH4Ft0T0w5s=CRsoP|Z59zH)9UFa z%ICfwKIz7hRjtF#C=6b$N-`n2Xo5oyuZ^D%#+&^_%?a;JcyV#Pyp5zCZXf^h`RDz| z?hkGM=j8poq$TK$%c}*PoCbJk(X!o_B3kgtVg+5g(A>A<4x=vF4<+%-6qNwZn#GRx)0oiidt2F>V-80nC( za}58Yzal8iJFOr%5{#MGb4cV#J`L^&G|>k?-#r)vN1h!B?in0D(b_J;uF&3u_)%Ri zfEUAb0a|Oh2!kLO4246TlR(1*ei()%L_4uJ#cI29Q8%W~(rPgfUS9Fn=Bfm}^k!3)>yU z+{#%%iT|M@IH84Lc|E<|K^+Cx5131k60ZX?nnNbC6`7koMGH7%H&}}=hfqy%&9s?A zAnZ0_w)w>cs0}<*4gr2ztwWG#?`$Kd21z7Zi$HE`@x$Z`!fQJ%sYUcuxP=@qsY^m4v)Byf}Fx@W_0LK{@`*6x^c7k@R-8~TF#PV#}RWk z6y&ZCO<b;n)=z z0xR3)zX-!0&pxUDrqO78oj2{wjCcoE8^+FtjN;|aTCKXyGD`9f^o?7C@cYYL_$CbR zG|^tqx8v2VB1E!kJ^of0zBRkJg^L@1T;Cw)Oe$|1&gN=sor28Hql4i)vvXSSrMI0`j~tB`i~q7A#XJOmxjglIL5+6~EI6Palu^#RgV zwGRBsUos={!6#{FFytxL4I`P8qGVA>&VjX(ul~Ax1$@IO{F0eT^DcPp231DPyhx)4 zxG!}m8B)Ei^1^zI3?RsVz&(W~m@hQMF1R9dOkL@>8NlKAZy4`Dikn3ctQgmf*vYyt-Lc5o=lTi z5Z2bfT#E=k#o9gvZB}+u)XSs$^&``dh37G_?q9A;6Z+;jjEGN0^m_8*-1&v&IfxS+ zzP*#bQbuS&Tg+KzX;DztV-Nx`(TTVeMRP+4fMr}VtkHE~T;tTe^O}rg0_tj%8C@Z9 zS~#(iK%iuU8Evv^xvg;(_Hkm|+(eWqzLp3`+|#Wxv_nMkv|30pUkn8SWEGP6NwNf} ztq@^WZ`LbYqnS_Wd#VAU3VE^7l_-CFdV1Qd2*%u1Zc2s&OQ|5f1a45(7F8;M8Cx`e zYM&w)D3sD{Ly5zPx)R2_zS%&sxsiPg5ELTz z@Lt4u!$c0_1m-lB3TTv41<#27O+uzq!dY2vrK~eIIJAtr z84@AG4mz!(xnmc)ZpfkB*>EyKC1Xt5IhMVNa!TpG-+gij4Znw&<# zZ4_5f4rmI|B=%LvnD_>Is04>RI~a}@o}SFFOawd^oMgrODOl<;zXhy=HI8&r-G9=% zcQVYKMFgt(#q#0Y`5<^|aJVPBP>>sUzzrbFT>=us6(h@ePc97(j|svx<1zC*{o%lo zF#lZVN;Gw`Hxdb@DzJ0MWuYfEjKbE2)vv{yoUND z5NXe(KKeG)yySf-T8yNi=+KTM2uHNd)>vQ!PS{rI^LYfu!s_tx3B*;1(^lC1hFwGH zbPGt5J;`x*Jh@5laKK5Ah0}5?I9bPk4hl@c;gg`K z3)^L6(VtiFtPnbk6jxQ0vEuPHFb|`eF7i)kFYZ#YFN~8Nnx`kzM`O(F!6y?crTQTD zh+dO}ag1%pP>iaT&R{sL%Ui||yXgD#s491b6?mFZv8p)cB5cP9^4HFWiZ?m?I=pfGG2YG`ANq$P%gC1TMBGB0| z86}nMO!BtABQaR@xv=+aa5_T}lwBkXqt#LzGH_BTI(E&Ud8abN;|w+vj>VO$fGM9 zBIetzkjq(>UD;z{X%*y&aSObtGT)*sfj7bSQOK|o#Q=EB)cxLZv5VY5;DGRuX{LtKRh zq>DEE&6Fcf3hHTz8Ow}~OLk_4qAtD_a})|;KM0yc(IpNn2QD^O9$9Zx&5oR9x%R-`PdGbmI&R3` zj)evJ-(npZdp`}~j3!>6#~%>(D+pwg5>=0ea3~ zY_|RhnSd0}WXMHfnf#s6|I9SOEnGC3DW?06Ff5taqbKy?MG`Gn@_2B^x#grshnO~m z`Vdkn_dk<_a1}D>O-cEm zoS?}Ymu;$92?<`Pu&Mqx-uW`OSY+)vN6C_S!kH!UoO>p5{VU)XRbb4J7*z155yq|lT#?_U zUU@kCw^UE&$vNeVXW)AJa=ZDfQG{6Hh6=K@Zowj?(a5s< zvn7C(~= z3zN2J$|O@5G0O0B!sdKid#Z^_P^Hz7o4v^7jAZAAZ0}WIY_!X&374pe0K>J-56eo5oKv?LA@2jqh~*DlX3;WGSW_R zaj4enMw?_5)UM_Wf`OKcD7aarg8Sgr29&d#;WEJj-QVfUbBD~&&>NJkRqz7+%WBeO z8ut3X0k_bNN{oF-A-S)f;=&hnlU0VP%}aB%^nGPEEzh|jD>ZjrUF-U>cXeH-cy_C9 zx?f{gatj-^*6gq*GIKx8HaXi9a1IwMjdg9Pf?N#zyYhe6Q@InQZ%s86rmC}Sky$4=Bq-?AR{5W zek?t~V?i7{7T}+9BiXa)!dJjCt7JNN5*2XCT92DOL>V_EtZR}6NE?-rcv{gZb=~PsoZ}hsVTKjgcDud4y)Ng3DYdQGwVV*#SAl_1G5we1v^Mw9epe+ zJ^UfR48v2<2l%OTgapG2Z>-qtb!+UPglemGnz__U9tHn+lUT&7k;Csfm2$)P6}Nhf zS7hpJGG3T0@DoL|543yBrx|AEkBXxtUW*l&U{0N$0zGRJ#)){>@LzEc{)p#cKXUGh z9zKd5Gwk12an__`dya!X=zJZnz`GWH;+qUr9P?)2P2rgh2_{3zU%yG@*4+qxch4#; z`F(}Y9pZv)1lJMVDC}p40_YjO=?pgZjV$Br3+}zJTYUA4$;^7H3G;L(X98VhdE$6V z`QY?ad|RW~UT%$R>l~wrwEdxr(Ad8ng4%h}>9hY9PC6wP;fWtweJXr{713#=v92*u z6V&=3s(mRvM9E4+&h~)Rm@=Xm6B|Sn{L@XMIWQU4sQznWMOL>dF36SvdSBSi-vQFA zDFTST3g+-!$yn$NyY69Ow5J0zh1%Y;r(#F)&NoFSx5h*vVNwV^GYGkA+^NZppi5_R zU5Y~d<;&$FVScwt#S)d*P}^R{M7t7*Mem|L5tXz|oU1y?O)M6j*q5D3SJt=yb4YNk6p)2feAdHx&aU zTvRFqW}*k|K2sVK-3DEo?jg%6JV744MmD;4j|sT?p2J%wvpuO)fU1c3-C?EO1MOc@ zY5NgQMRuYq>TpFu?s`L>7Re65cmm2auxF=r=7isux4(!3p{x=ex~n{%;KDIso=6)uNOeqV7PM z)#K4@LVrj_i-p4|EAZ@*@YEcw>`UfdEB4v`S!K6-P1iZ?VpbtHVHd-Yw!9Q@Yu+c?3Vw2UN8SwcVb_{>eJ%qgs}bG`p8 zLN`P4f@EgveOSgmC>6#v8;C<6P#^BHCpn8w3S{VqHo{PLr)qnOUD`Cx`n^ToT^zX?27iQW4-U|5nB2mIT9|UKuxPM zDoV8wr}S9%*$RFTRtnW|4VP=H zQ1J;6$5MJBofwR|qyJ{O5&WtD5W@s4MAi(NDW(B4=EPH}*A|;H%Vnla|ld zG4Ct=i2F*dfv8i zkRsZ&SD}roCmmAgjTYV3YdZ-|_;TM1@ks$W&pmY`ntf&%p&WTOWWgS0%IGfvim97d zC)(u>%YwGYCH9+78Vl+l_k3J^LNH8LH%}y;r~NzU+UlCu94$FAFZeUMmHAlRgWt}q z%^Qub?VSVdrDLs<8eD3&(7@g{sk$TPag~?^W?34#H4(VRtvi1cdB(yh7E$+V zi=C{HsvV2n9EP4z@0Hwz>c{xI1F2?T}Y0h#}mhJ9??&BhZ z@r6f^gsZZsC1b0#vT^Xc=l)qE`V{kZIy*MYev6W+<~CA<5y0@^<|FBJKW@yfS()&l zGrxOwrn`xu0u?XK*=T$cVTorM^KiFb5ec5V)3ADFMsc)f0xC+Gh)fve-qa+5m5gGK z`Q!1<0$RT#y)<=Eb+52XXG0ZLe&(5hL@iDs5k~K2=IuTDEj0Fu=_|XE(=j`cwN@MF zpIDto7c9=Uj1LwoZ01d+}5n`qS#n*D-JgF0+lV)4LFq?~qdfhKyo zbwKscw8YpB3&IQy^dTj;bVB42lA`^E zTrD%klHqM1#}l7~Tx62&-(mJ%!FyAj&kp)DQJ@zs*##vg$5ddFo6QB=ciA$r-d<$n z2F6ZFp0|*IO7S(?MUB9OrexLTmPFL_PGh>a@GF#YokI1#Chi}-C`=A1eT*sRzAEDg zMAvxBHv3BLhRU9tPhv!PkDUihkY&=P!@Hfv29fui#TTP?S19&m>M8!Kz|yFB4_02R zQS8K+xdfJH1jdF3Ijfl^-E{bxPGLjy{YhZckxO6c#(PrKZ!muEL;JnL&wQ?v02b~= zKV7pYD0j)=%p92EGCZs76u1Ad9Hl$h0D&au!88Sl2&??OoDAB8|3?Ytip-PN;Szzlxw{YVQdoi4`PJEKN(wzu~rVev}b zp49;Q_72OBGqR<8O^{^C4*Ga--@@O9coQ_5x_OY)Dz^xv1~Y$2{ADQS;MNAej(Mh> z5EY@=-=k^D^4oA;2|rDwmtF5Pi?F+jXUuEtzX%mIZ!f_gCnYMyR7GE4D4(zDq^^zR ziZrDW1kw(e(I+{Y`;!EXIvem+Vvy%b$%(4TfXBuwq#r=|Oyg&?-saxAkT{ysXp&Bq z>^EJPGh7lUJw52JxH0WqV``r*Sq$otT%?uVx$9ng+tuDIg&`2gE%(3s`oL-F4^F-w zT4uOEa*{NTe(4s)t{X~NE{k}wa_Vq`3#MEU2OpM|>(zlw-DP&e*4WL8)~4(p2+MpgRB)C&U?q#Ln$Wsv9*)_nK%J7H z&1gvu#nM7l>#$p%qijhovv{>{+RmT*uDzIeBpk3WO&e7BEAeSP+$77F!tLoMCUPn`(OSh)55XR7C!hP*Aexn(=a~%hv@h z78#B<6rR(wv_?Zo+wT(xkbRW{^bTRX|KvA)w`kVcoC<`yy}C*{xtLO0&S3JAF$rsA zACbrUY9w7uC_{Yt5Pmd?A$q;X$lRzM*>ic?(N`qmFD+;7XR0LBKyq-@+3ydkz)y=) zyBazO$$JOnhhBZGiRtwyb+*PV)J0haGHVNh%${Jgc^tg20H z|FQHxCA8>1QXc8;zATmK(vq!*6s+jTqj%BVPsrY?L3ao z0-z-O(XGp)1PZ0eA67SDS8KcorwMFapeFo{s@Cz_zZf;x1_A~R4kO)1?JCW?*C zG6~RRzR7#S3W~%6Wb3suS^=SVk6daN(1a(ph^?%l@6d*nHI%N}+a2g^QV1E_-9mQM z6NH3Um(Cm-d`f6lP&X^lVvG0%HkKONbOBZn&{)CY>ShBi9nrU`J^4+)H>b7fNyo?R zp+`&MS+w0meXB{H!c`P4-6|ud4I82!jSdM&lSc{h>N-G36fK=@tN~SQ&tIT>wT)h^ z-2d_D5t+U<`BcbP*+|yfsq>}dC4HEWQ3cGLb7>l%{BfTD{aD_;Ky|qmZ=hX$8qhV@ z%Dvt|?ORhUp~-zk!8E$c%{8xRUAHCn47bh#it0B~^Hzu|QbD6yDMcX%RZ2_fPc7)6 zNbDbqIO(`2@zN#~NvpdAbMi)_ux5BmiC&X)U`A3AKfz{bsaj1}h&cKc7v?A&E3vpI zC+2-7r_V7x{EdE%uN{lSA#0&npx3^}gld=1=P47g+Klx7E9WuX)D~Jl3)ezD)(FR+ ze+YeH|NoDbkhhMpiLj~hQSCPR1y*7=w%_^5T(%l8;M~jO@flD8U10`}`bgQ*=Mn^& zH$(`^6Y50>$OOmnxK(mWLLmv?l2KvFLDdG*xEr77i__kStL;|-8d8E`Ch*yiMF2`< z+6F&81%8TCU#ch4$Q+v?fOX+4JZz@OENv2|lFH2(lLo-VdJ(;YvCdFY-#H!QQM|0Y zSw~Cu7j^1ao8|4oM1J^}Kkh9MWn1vA4=jmk zgJlj;FaQ{_T&);Z%aC6f_r`aKgFX>l;%JNL;{}iQdKFM#w$x~A$;c^q#LL|z47fMm zD$nqT^+)4^fKKfO#Haj5jP*7;wMzYuq@yyz{n$_$4Xd!Q`8lXlr}g@9yQ3JOR}J>U z66Se0v?|qgnge6=@l-f3=LG zqEM9m&SNF^(>@{jlU|+eV?r6ZF2U{jFq|jNfUOz=gm(EU$rv}|ny@L$AA}k?B2f3)a2dR0s$IT@YpO}Q*6;8bQi;8B^t$6GkP6bpn(XQ< zy;||+!adFkkNrVT{Vm zbtC-ZaU&Z;v2aXWzq~QFO(_CwW|e#gv5=>C4BzKzf!8>;uT7lYjbt$V5rW-tH)SZx z+U@;&64?h1r6*KjdFlYtD6>y;rE?BA#oo~4>-ni50N5b{tL zzZz8ncsVR2PT$~2>DSBn%91~+LuB?V4GInwj}l1ugtvNsOFCHTkcFvm3r*3xd+HI= zR)SfhuU{=(sc75ivx?#(KG?fbB@WR7cS_MYjYmL#hs40zb>O*4=Z?&rw^)j>6lyMF z0|A_O;`Zd*diKN+p3z1J67cn({DJW5#r>Q;IzRp{(7=~s zMgFw-kSP8%0{}Zp(XI3u{P|#RR1M!b82^6}4vo;-8wA0~3M{U<;1@v<2Ektpj->k8 z7uGl9^%u4wBz3p8A6YQ<9g}x@$GQgN-%si%vO*JdkmMU$kA#1SfPsI*I+J$o38S~# z4ruR&Oo@pRk+u={7a56eLl@z;n_(-LiLJh=Be4r{@vzU6@mZAb*lX|yL70X~sJ)X5(K^Qe zp%4ytK6U~gnX-nkaszk+wh#M>h{t(5phQt}*^rpa&9y27@g`JO`q1FvAp}e52};p- zRxu_Wmv|t}=W%SH<$PSnIO~8#Ge*H(dX-*;Ie+r6ovj-2>ov-l4Qc@#z%D|?&aH9< z$nni3*pMK~TV6{RoL^pC&KFE%Xe<8_W(|A@W0ptX;C-tl{3>eq2bW&8F$47HM%zMa6LW<1MkY{8Us<#H<-eC_o z$jK$#Lr7RFHscN8Qm5W7*jI7puvAXvr=b-2&=sq#2j2aXDU2;@u1Kgd`WjBcBAC?Y z_Gr|uLn!pyc+viV7hT|?0hP~auxA&HC-gXN~k>hwX#5L)FTcj)a93gOBj)-f{Asi(VQ-f|UtksirN5 znfPqf{0^JY!J*JMvM8i`6gF@7slJ<|JTuy-jOc2gO2=*(@<0*bFp7c3+1rfSLDjKb zY~$cjO9ZC#jd@4;_8iox!wonCQQ{X!4uTxK&3@1cWr^F$4g(!b&XTt4WJvKUw9w5D z%tLv&z)?MZy)!*-rP%WI!QqOFMzH1~=6TRO)D?j+zR4^QxyQtg1n%XUDE28tgyt}a zpJ?JExP2wa;af+-lWZb{a^U(4q7opUi*a&~_kzh^Bj%sCQL+YHb#4v3D|w0V>NEx> zx}hAWi>l$Gm~F|&@&A<$ZbMk5Vf~{9$Ve42Oi;3bqqDlsW|3^m)&e%-e3<_M^R@j- z?@YyeMC7EI^@Cs>QaS}?nzb9LL4T+qs44(9M5k_k5emhoFcI)3-k6SE^AB11%P=8Y zVE}{eY^}kWVg{23Xi3!tWkhqX2;`kjpMlfn2%@(hq9T)cSz&lww8#kAFB4ZYp(IYQC7z$K%0~*|#q0 z41l(wloUKwIx&^4-NvHeo!+}lB2`-OCSsF?a%&xUM;QvFM^Q$-IH-2Sjaf}uJvNNX zcEk($!Ka|lX9Cq7IXGgN{H}W?*+0&MZzg3ql1JVp!o+o7+faV&30D-Rds8FCvq&0gsNAJ(m*6Pum}Cq4!A@$^)czL>d9@MIhvCEmp1q3OJZxGTeQ=uYqUS zIKifTC%f#eBi@nM%ZEhP>)2DEpFj-XZDU^jcDG$dWR6J}*=u*X{Jr5a-&aotxSA{H zNJg13KFYM-eE?Q2X@J)CkwL-t0vw*lDI?-%pMV(1-xpq#4}S9?@iJu(Q{?$kq3k0zfx%e#7=$Adb;g>FJqfq-&#?GtPvCewK~nN z7#V)6XeRpXUN?U9L)<-DEd*H`(vFJRv{owUwS#_a1dLg3?;D3~+7o!^_$Psa98yux z`1y3TB@M|GUZ<&}y8#`%O1bcF9@HuS)vv_f1-}oOX$-d-Uwa+JpOX8=yWfMM@t-dt z_$L#vl(0|#z9q8k(uMmrBlIf|^3LY&`bt#&F!)yLL$41Gmz+M7iO%j)hYHW|0;WaF z6y7dsoO~`E)qfZXHyHZy3b376kC*c$eJJ{H$yFbxl__p+!9=tH$*GMhEA1tO@kxYf zVv2jQTE?Nl78jl4+>U4^qM=_h{+Pxyw0?>n6&m|sSO$cTAUyFSyEsdW2!$wR-xDiQ z$qWRUq<=7KCSHbtbJ$oNq26ks#r{ev9Z{tg*{6xxR4*c|m{FC+p4*Cko-#1-;?|J~ zM!Qng!&#F?^f@6ah?voj@U2~|z}@ce8+*y42%lK5np>oVkg8o<;#bOHM*1$ z5@k=jMkz`ZAJQ$B%Jm%!Ra7mm0t{w}QL>E)xPd^$$4yxT_x{WbB323$eTBiAj}3$= zy|{ox5piC9?!{p|`rMIl7@=dqk?AwERi{AZjgn`ym;eg?E!g5IL{$@a0ijAL`Ko>i)q^wk{l$o~ZiDJDZ>wS4XI;Eq%8*pttK zElsH+I=hiAKe$$kzCfc&iEgd}9#2Sy18iB40GdqzO~n99fV? zSjk84B`p374ZeosEmSN2hrRa!jWnzBhMy;0om4cV>D|n`neU6=Tca(T^qYPrt!ckZ zwrA)}lD5Nkx-*^h{P|{@RCTJ-shy-MR#m1uqApD^SDTbT*}W^Mqim?P#gj}OI1 zXJ_V+fLPtc1#7S0Z}!GTM|q4uTu{Lsw-+9M+E7TA#x>cm2_L!GH$5o3V~UVE!5=sS_6FLiS>bcn-l+5w~K}nQ+sZ9F#YMs$S^K z;jsg-7`iLD6A2{KYDm5ybX_f1rx=I(OG63*77l%i#r1;l90u)~>-7MvI}a zV%IR1h|{nO6$DGfqPYKV7YeQraD2gUfj>^BdSHvqkX~^t5r<^t{%0{F3=D3s;h(WQPqp`=QU(eI@ck2T1E&R|8qefvRMX% z_c}rj%snI5tVBuE!LttffUBp3SP~6ONOrnjWx+v`3%mGq3qs=`~ zWl2I_fa<6wy}5%VQe=Q(r`SI;ArZR)LM~ow6_ZQB0-d&y)-G)N)6J+Ex-i^@%x+q! zosrlFnO12JwlPx!g&c~Ef);ZuieGP+kgWD77A8rkAxBNB%~fWgLX$yyC&s#Hb(>)7 zysws5Qb1sGnH*9#6TrCCB0*$wxsK8a@T2>@=s|qcJbWlV#mjN7z9#9D3+0ES!)L$F z@(r?LHBy14il16^85g0>=ZndoW`J=>GPfs zRed_T6t7_5wR+tZN4Ys|`l5Zj)>vrl!V z@6;=^Vx(4iD?CUKpDt*Z(zf5gGi!A@v(hF^j$%O!AQ8xrIM(jsJQ?~MD9w9$>`vfe zZ|XJuWvh|3>F3hM(OKM3-ed%%2t~8`o!)qJ!KkjYR;izn+<+N;4UOI9Q`}*7Px86< z#FtvtO@s*31P*1hSzY5LcZJbExF5UODohm$4~^nyx{ejNDeE5GKg{Oz36y1oXBjEK zS1b2GKzc-OfE9dpksn3zxEaREKt~S6qdI_feWG}vvG(kPaXfgXUf+!Rql5Ipd@U79 z|Bc?ZSo&|EK2ID)-{{SE_0>#WOc`ge-lH}Subhj#Z6}IO&tFGQ2m~$reJ;ubVa8Fx zj>$!z?ujRSh#*2Vd!p!@sRhH!k`4a<6$W9!-%5@9OZ&LL=(z9fv9UdgA^M+f=8C@8 z+r75Zup)Dt6K{A@GwN6M`@yz+*P-qNGI&GEh&EoGaTSj&`!cc?d4Z8|yIiARUx5Ur z>r&yVRHiBP**e^VB4SYsl;stZm;G1-ba7$O%u3YEtYJnJ|cXBY(eez)KoKihFGwyo`EIpH+G$| zN|Mz^mcA*dl#mtcYr!4)+pAiL7K4?c++<)(NHPHjWgr$ zDT<}TE6gU%55R&HyU{aXI-mwr^4$6YS|ZCk9<~X zj;2;x4g_%As7*;AMbhGc%Iu^+Yu-W>`c4xz?P4O)_o1~Lat zJR9I#7{y`?KwPnn;D!8+wZjajP45||J{X8s@SvobVoI{BZDdcWrO9jyZ>62t)MKLa zQ*7Zft@88Cv|b<4Oz~wH2=pWb*({6gz#$CcN*yMg8kPg97dkgdm)xaYCt@<|Wfml1 z<{l!Fq@k$C5jPTi@zxa>5mX7ujQeuT!a-6_+#M{**`KSSmY0AjwiSW3?vzrHWOab#9Ky? zci!V0bvfTE`AL8gPzCg7=qIE>*xFdL?_te(mYl1-F3sdq0EaxEzI@Fr1W7R&H%P-f zryXlLNyUdIO9AfiIgw6Bjj-tiO$OJD(Sm9iButX_uYI!kI{~FW0~mIa8HrPN?|b9R1;Jou-7N+=J58fLfo~*40*|N z!sJ`5+AdpQ0eOT*!Kzz<@nwCpbQO{_s%vUl1Z%yJi~^R>lhp?qtTG3(0EU=Ex5*e}CE<~GU2W!g=d^h2 zyoJn?%(U0>cAJ@G`KHsl-ph`z`PyOD}r?R$UXC&ua}z zH0+kJL;z}V39yETkp6Eu|B}KLEPr0+-3u#%x9DuUeid&SVleTGNYQ)-|C1^-xp)8{ z=HrQFe6(FDi%lxZg=m29*IFa zC!lXMr4E0pI>jA9&A$e*$tuHx+{d#0c}l$l23GzJ{GCC~Zih~?c z0iiM&I|1sqhvULq8d#t_4_fbw3+-8j{q(lJ|j_s;JIyBCpz>G%Iei={53s2OA6qrW&Jf%dOL(sWw6v*J+ftFB(%NvLhFl!@ z+*(G0$O^5U_!@C(fQn|CYb56t15^;MC zFd%vHP&@=oVW+0i(r#t7-atpUU8gX1(jEGqeuW+|A`#saw(K0_1`}S4#MP@%t>7fn z+r!7nF2pNX#e1O>J&SG$IED986N8tpQoD-4Ok=!~SwWi`{R{+k7-1Dfe90;!4HT?N zqEErQBO&Ov$ zpmRUs{NXoe*gNJfZKBE&xNGvdOwc-mUX-Yeu*DWp=mh2{)&ZWC=B#Ef)uzP6P=S{m z6F4Sf7Xd#A{rYYi@^NehC{F}~W^PaqnmRhYNZZ@ceK+U%tKmhCdqdFUEEdJdGo0FN z;d|hWZ38LLNaB;K6S{9_#K@(2RQ~kOXLPJFVVRB6Z%dm@MWj{7H@JMBQWDL8@c=?M zFl3bqA7-FJO?naVymZdd56_N~D2VA>rGLUr*Fsygkml~^G2Q3}w9Ly|x$w5xwrT$z z6Lls`!yI|mY85w70|!ha?0zjs9p5j;l&&bxm%9*pTR{bE#8H8;DQ#YSL#%bk-yL-i zD*?995yPHFfc9sV&rc9yr)IHJL`5P}6-j_v zk<@-=0%#ndk3grh?Ev z0ocQ}WWmJ5@WK}KRL7_z38}tGhZj#dgOC^s6@)i-3N@D?*_d2+7)=eUm(0vS5gLN| zsJeOFS5(LvP~SQEO4zR2P2^L~g3H=rw@4y?NN;NohZ?flOGp@Bt0T3tT7!~+B*{?b zU?HrVmN}HD+h?W@y-%^jL$Hh%rg%=E#cO#6^dxs06&>p z!>Oa2vf=sBz{IPw{6yKX{aDDT0=ZW|*6jA;vUx}zfHsvx@5zv7XFT4Emu@l0H-pmD zmTpOkwv#za{!e)9*<}Mo+g!J9;{ah=6(n#dk7XRVth}xU904d!!cGxjot0Z>oY=Z3 z+YJt~6P}4gZua7)jqaH|60ek=aaKF~KDQ3jL1Po{YPs0OASx$m6+uVG+=&g$D zk5SaLTA1p%xIbZwfE}PJ%1z-TI~6omz5@OOX%orCjQzzN2-3V(sb1ZHj(n#h!0$r@ zAoS3iG;{o30HX4oI{X$N*yHHk5%AU_?@@pOF$B_HY&`%(ctV(^BV3dsl)^1=>zm(x z)EjS0g&ncujTe>;wSw!R!pqph(YrQ&DV|QHY4en5J6t+fY+0z=m+Z&39(SM0B}_@| zSyT{Wf{0AAzSF=wP@SwdwTX7qxIihd0Ix$vmZM6r+$#DO z#rCG7V47>8oH0<}BsA#9V&P-mG}BkgY@?HEii$AQ{%}a9;)~l%2HCL&Sa0fNtxm%| z#vUM8l^ZGsz++(6XGB#*9>*q3h;~cpuK1KJ-qFX(bQ1X|l zum{`W<%~h^;EW6R^nfcm_|sheEW~?kg&Zw}vk<&|V%Z;02$(_(A#uLs_i|CttXLQ| z?MI4c_ppHC;-&t;ni?pZMweSE$Y!3)u|Uvinu4eu40b$XcXVb8!p2f`D=4@p({^)M z%BA30uYoj3@&OAM+uv=OQjU`a&5A*dTL*O-_HV135}wfTZGsJS9CBm~g^Lz89#c+6 z{IJPaLVl*OV)6{@YX+B!)==Vc`eO!SUzNTUEJ6c6E+Og1rQoVm|6=&6h4NyxDai=_ zHMl&4Vo?%P(-f}2Da5r~I%FkANI8BD7T6B@hQC;8|6E!sCechIE>wkVnbx~swZ4gP zEg@>&Wd>-H)S@`2Y|RbWDm9(~P-)>&;{wh+t1_e%1qKQmMD9M7(lslHf+Va&$K`Ix zo19*dtQdQZ>l{+16E|breD~yU=0zouo8C?*cI3k7Qhjq5sbd?3g)NGJlFWy$(;DiP z>38%8;N8uNQ9L>cx%&+s_L=|;);Owy%VBbT{)oG3hBR9XjWxFu$L8#Hop9po>;%CY z9}d+-2NWb$wT>E}A{UbT3^--5w_NzjBaYEyH_4KQgQSlr9}l#btIUUPv%yoZNSw%9 zdT8P%z(Pr*D>z9#FC_STX_cNDd;k@Tl?VwYLQVE8pUx z!MJQ5YDp4*4Bwu>s6f`ldwbfDyx>(9LgHxgN6l2YJ^p`~PRX1E+1=Fr3=l=fH%7khzK z6sG)2D^n6@{8+(Fbs7#sfXhP(?4}EpMp|_^<~yBB&&YEZWg5b-R<9kmp^9!@Zv;s8 z*wqtg69ONJMV?gzT(s(CL?;exSIe))<8J$GBv$zD~yoz@1Lt(ex0xoAmxBDl@0 z3d#?}gS-YappEmbdiJ9s8UKsk_$U>|GoTmNn|m={#FZ-E(W_N<=>*`3NEm#zN-eKd zhir`R@e+_-3YgMQ-CZ}dA^B=EHhv-XfUVNJ`X9>CIt2&_z2gt+{tJlvP!UdViGKr z$rUgFH~lcCIhK2qHSkF1p3idDx$3&aC)nb?yGxcneIoCkQ?l|VlkN#6baK$ite}BX z!3(!WIb;on(0SZ~Vs0BVoHLAEaEnGFINfTFD9zHHA6n{XR%-Q~s~b{_)+V*fD$mzl zX-kx$LpsciM*qOrK#T*xm2(q8a5D%>ZA<4rN*o-6xH5D^P~{o<@3KlU-L9ZoL=&(% ze`W>u#09jtgiL1c3C}oMja?DIpy5%L1sY;}0rPVGd?k1k$}M!9cARpDP*W0!sXWhYrt@slwGMH0Q0-2igL0G<>F=hZHt%VB%!U~ z@>V=6t;3!J4Hmi}lJ+r6xHmtOLpnbjIftRT@ZHoW*hw{qj}-Qp&6u8`qTU65tr_0BpAsK9HEa1Om_>H&|A?&>7P(P^M>!j(Z$6 zds2*6)J4a%m#k279+xm!w~?UIGaP79zh6-M{#9@EtKNZg+s4L*$Q7msAa1znt2ho) z0F9!2D%}3Fs1U@@gFyQzMxBYR`aj1LruhLpfAxo>=s)-ZP@ClH)?0N%rL3-3Ds38h z-quQ8t5@`Mf@MCV?w5#fYH#MRBFek&xw3-v2qn&t4d>~3PGy@ zJIttx9c+OITg;sNg$rWN7SV=b=CpjM1TDWthoYibx3=r>!|E5yCP*d9MK8gJ3{Mxu zU9@UKs7nJA`p+)Soz~6umo&e(Q~1)_~sLE_&G6>IdUNCULi?!NyZ4RCNX7uq1|7*M8R;o3^(3&a0p(z$olyhvwlvkKqN-9-r9Qg>ci917wJ3Qs?1^p zxJGV!2AcTp7K*!rGVNRtom-{mGs!UIP{bDIyY6BLIr5e3wxMzEg;^OdQh0}H;dJ7x zQ}#7ta4HWm1RGcU3ce#-#`5oInDykIST@u{gBVt9_BEl<(p`z~CEV4a+;s~b^NqMf2kt;eq30d>UX{(#Zn9)ItI%1MZ`)7)4&U&(V~J2*sH-$$MoB2{csO-Tnc(J;^g{A0I_SPuTlF?8GcT z!3mS-B?tkgkqRZ{d6a}ER!EbmLg|X=vpV)6if-n;96HlzumQ%pDN0BQ1e!Meu||5J z5Y6$bD{n*c)Vm)RIe9r#0*0MR?mbT!yT1rsFS4KR|(h!K9}7bWodqHWoy}DvZN*pY4U{#BiL+k zT9P1G?TII0f`gtZff9r?(ja7jJ&Ql~#=j;KUeu506n9cMiI!i}(-+p)Are+=%Rq?| zjQ16^0E3?WEj(j|+MdzupYN!#+1&!u!KNeNBA$bm|h?-fU9Vc;7Z zbq!=l1=H`-lqFqX1(jCUt88)rpm#A~jlfyO+QKf!G*|fkynKY-jOcb8MY1f>sA%keB2))Wr^T9&(?(bTEbFlK-A8blRq#+AF;#_xeWAxk6()FV zwDs@zoea&RS)1y}v4XsMLb#t2eYe)P!?L^P&xEh9p$CvKF*svJ?ulpAzg3dl)jAv0 z>fpdo5?~&^;Lp}KpCy)C>uM6+G)z8DnCN>5635!@t2=OZWzQk8S^jQ3MzoeYpl9r$ z7Fefv-rVr5!K-(q3JVj>Fw)A*7^Fx&<&w znASeP2yZo=DU`qhW1QUm>GfG808QVP=C&42p1OASmLJA}e5>YJN2h&l_ox|> z-263ap3GiO=3`iK1Iq$jPt!R6*u#Pm&8lr9amEK#adT~N@O5`AR{DiYMB=QL#Jykqcx#}g6;$_WM zZ9gOf5=3JlNQL{cLl8T8l{~j?iDD*AA8Fep{Mrb&79HrP?l9YXi1Y23&^DtT(sfy% z=0qXhV2YU_QODM}d8(*bgj1KgbmpKTC?Ui&m1+nUnmwM6@Ob!P`b{J*1aFICpa65p z2hP;Wv>ZD*IN#LRUNdg}LJ>XWOg2{~BwPHxUN1uS zW1xs51e!p2pidP|cwmV1d>|`^sby7*3b~kdBma@XbK1hdKmIIA)Av>5tU zSU{E-{8Mg}t{HAAZnHNQ>;r}G(^1Elis~;+N8W3UB^r|574D0?w{UUajGYUjmLw0* z)DXPSZoZcMfRhG<(`NJv^dnq9w@5j16LaIJ|F#z;XtGaub9Flsughhk+U_YJzM5%l zB0<_ZTqyzIfUsE?3#F=*f}ua3H0Z=!4$M2xY2c1F?_(HG5Nj%+?K{pk_w1w zS^d|#f>P3LH?XBt(n36}N<{Ro+$Z9TsNgLkyJU*GR+Hll^2Zfv1ae4LG;vX*Bf~I@ zfU4$}ff!&bC8wbNF~jDFd(LL97HkpL2fJwPccA$?KCO!8YJGiGOi#`JzPM<_{TWYZ zv(%Fxj@~_S*V=6(h2Ah;e;>0`v&TYO1nUcwob2g`*3Ct9FmlCBlEvWo z{}3_cE^10P8{(&>99tmZ>;pBsUi9tQc5h#N)-qu_1PuEy75y z$e?#RYZ-dESC<6#Ny2kR^@%#?SU~V6ORH8HceB+z%DZR5$(8AIc8U{8Ru-) z5DR);QLRJk)H)BgPN#N!*_YOyDU34y1yDkUx!ZDS^IB<_Atl;#U@UpAqlOZkBcg`V zdu;a#{jZ^)A*ha_S9(%*KM3Rr*QP$>)b;gN9o@WmGQ1SGzoT<`pW&`FEUcVd?_gXA zz_=fBXfx_|u_yf9$PVDWr;FhL0ei9otS~(T6Wa0I1abu!W5SmdI`CE8wI2|2q5a@A z%PxfW(tJEZ00Jr7X)W&JKp8%D*;Hj|ix@$@;2j3b6pC62;!M4vkxYn{DrS4L*=7?G zF((|VbSbt3O#wAKJ-tT4b%gn%x+2@pRCS!T$)SlF@#5^P!@`No_dtD>>CYo-7)&^z zr6#HyqP&HaHI!I*w(I!~x|VoCrGv^AsRc7+At!Qi`iEKw9YZ@7DLBK7xa8aV0=xJ$ zH_~;$sE#FoxmL>wYQ@QVXt>gEO_&`-a+LK%br^m)>YN9@ueZoNjyr$HNHu0>AhXx^p39k4ZPf8XFzO z{$==`A4)3CUwRQ9n0+%cQ9+p{*0cM!L-Etblx-HjXud&~>0f&Dqs{GAbTKBOO)a8q zaCO|FTDe)uMgQF! zpRVxN@avukpAU>+6=;}N8Itdh1~14(abH|`YG>*n3LiRo87XyrQFLeq8Q1yfaNoc= zq^U7&2oKx5;pUwE>GLU-xD%C8wxv`KO0!&6`9*^%VUMe)Ubb%YEo?B)CBXB~U)m;Am!8H42C0VP4fbAi$0hEQ9a#108 z;bp3hFwRtiBarK_Rg;RkZiMP2f5K$$FHFZ}q>3G(Y>8BC2p1?D#zl&DVtCvy)JB#t zCy<{?3WbOkXtcIjVlOjPF?1m>j9L!sD~@rtWdj)LzIl=L)3kcCt6v;UY!auO;mhwN zd7g720UN=us(RRY7iyQ#n;ko4ATC2=P2L9JXjiPDl;BmymWUc=GW!BSB{|Mlgth%< z2wy4B<<19_@ErpAixOk=1TH9DP`JVyWf!6HteKj7D zvE=SYxfwyb-y>4n?j2lT6vgKI`{Jb(DqfPrQiO7!dKCgg9r0gGY(XgshWw!T1kkIF zV3}$QIW*1P+M2%f0m>jeQoao*8MYI-lhE`tA(ry&gQKpap&~=Ilb10_p~Ddh5D0ap zO{DqhX*rmppt`GhLP5%gW`Jw@ln*Z)ZbllVLYlItfIi*dvftc8;GIe;#m}@ zflzBFgh=4oqW8QY9enBtJ7GV7Mrc52JDkCVzWAR}mY_xk@U>Lc3DqCv0r|Rww{(&F zO(sHS#pD%C>cBxvRrGkkwAdLIDoCCOB!K>3Ts@bdcAXUEm`*H=#5h>{Z{t$G5 z-yMSd`u@x}aSq@7H@_Lnd~+Yaxi^Pzj`t0W+8Q6N_FCH`bEdclXUMBuHrjV~g<}tkHJT^-;wdJEEj6lZl@)vfnZo6< zr80(xfKQE9XWM=}0DY#*S7%NCYFNZzP;N1AEi4mu%0okH&m4z=`iujR6da1Se>tnE z(b~4$KOr;$LPR4sHf062vU0D5R}wuKryEP?0g!8Q^AMJxvaQjs5KO7r!n#-lMu^;r zzJZXco0a3SDTNG1>xe&x^Me9EgZ*9?W*psPRz@;X%$1<;RhJr?&|IzW0k-icy#UAd)&G9YgQ zgiUFoVrS{Pi0u+uV?a~V(;uxQSCjF=(uH$RJ^`~pwkrQXlWdW?Hk#`M*mea4>F6HX zQY&d?b5{-m)R~$HfA2XBEI~|hRNqt!vq;_Kc0%T)sLWQ~+S#(efsxdmyE!qJ^b3Uw zvsx}7oAhfJ>gR-KcMvRb90XsM!~s_D5)fWmU~v%WrMrbu)4)a&;gKa7J&{UlD43#n zWoEb>JEll0`q{B#(}h{sJFyT8duFnjQg=85#9eDbf~bIc=Q^^|{d_?t^;D%L;&-!C zi-p%#+5}XjYIjExB|bTrd0Jr>$gyLOiIw^S5Tw!EsBZHuOg>qNry%?pIC z$b?YoZl|FR&QU{c*5ny-_HrNLB;X4V_QgNsrvR(S;};+ zawO;S(M{oW-0~lL4N%2}42r~k==WkOCZYbnnEK!>;Du`bFsn_X6PcS8G{vS2x@BIQ zxXtX^lrcjoXa4|_n>Hx)uY_raIPKxZ!$j@PHPj9OO|~`~QpkOac4_8hha4NLM}yQ# zLs&iPx74nV#q@#8T|!4svvpj?ljEUWxKNKdb-qrVzP%Iv*W>5T7Hsy1TO?odb(g+#9gS(vH+J4 zi^lTN>yHV!T&*kybZd?~Z5>;Rr@Zy#ak;b|;~o$3olei@FALVu z3Xz5G41?&UwMLyqG$^m*f}%$jf3dHH+<)CJKMGIBj`>5}=RH;QWEh~s37PDSawv}( zyp9&uvn<1402*ipS8aG7zJ^0JE@d;LyY_;c&G>7J=B>&Xi~jN=gXec5F*eTETW9D6 z;z=xTBhw0%4OEQO?_F~RxzO0~IQ8r~_y_o?|By_`xK)9HYn!NhTbBFM51H4lP<(FI zbYZ1*#wSrXvB`w!b+96qEwteg*@5 z?@fai0I{Nm(DH&4uV&=_WRt+~`dh1$<7+dIYXu|Gg_sCti#BtR;E6uP#nSa9-XQaW zb!ypvB!!$79~EortoD;ef5A}+&;bq0l|uM|Ph)R0>Wb%1@n!ms>0pB8fjDqVxE;1j zXTNh4re`v|pbHl;kp^??a1VYI#jV}Ui0w&p=TPOo!L8qO_O%rlnb4EGQAHIdojZNM zl82ylJT(?tBt5y|o_K%!I18Di?qi3B;22D(rH=%d#GXOf2?{8xOa}=NsCjQ3M94w! zTWguv5X=XqbbSW_bHMBEl2%9*)T9oLIwiPbfdpDq?no>S1+C2oEgLEfr*FYb#X>q@ zZq+)vZe`V8dTS7swgVNHfeHTt2}{@@C*A>t)avNGfvyyIURZMWj+E0)p90U;-I2H* z>TA4agLbX{1bN3P=noT%{TDZPP3jcg`0JvuL|xH=DHjLB-R|YC&p3ph72ZYo`OhTQ zrnE^lYga>ba1>CyfR?~p<#sWr32l0uVpe%N+=I_Bxg5>DXh@OUTK#6BL-QOF-~h?% z&>T9P2m*mbG~~q}E>9hcgEy>=uCnc_?XqYJA~9CAz;@e|Qt2-<9{N!HWR4N8{;H-bB&|Ypz61qI7hw>(b(uDkd$6xi##5_Ocgp4@3QqQ6QAlP8 z`u1-=eZy_td^!b%es6|6uTdh_-eSGto?{e74e*WNz769xmACaB+PBAKHk<@65zbY& zmE!E#ri_|ov%%DD7Rk3EqxsYRF6AzKhT=wWrw6LX8F$gAE_F>CC>P+9qRbC`Q|Beb zE(`H7;ZjD3zR+e}%bYlF`=igKs{x(X}UZlV!07YOonrx!(5FLx)QGq!^%>{RqApTPT zdVg{_v6n$jh|GUlBMDGbNY!o;B!IO8wPuZP@NSB0yHM_8#UL@Ymk(lE zj*2mG1%_w@-p51Y6%SobLt^m`K8YSoJwJH{qKYG?8|O{L`4QtP$VC~?SrpM^C_aH) z^bk6SaB5}U7t?)6Tyn;^d&1cZ;RlQGbjKk60bEgmz?Gi$#%qrlB=2)R-pKronZAKj zCh!Qk4kg5p?6$?h=O^Gizp~S4O6Q?mJb9&3L+UAPXbp6_o9~OSGYsev_u=j-<0`zc zern}mbZUu49*q}Z0x`jeFd=IXX5-hhFD6@*xCwBE)GHt?(Us?1*N90L3-ufo3Ht=T z-%6s9_Z8+Fje6sU;Ap--A!;?d_JmY45Q)Yb^tvJ{p097*6mE@f=@4nD ztT_`qbUQeTq-sNI@reX07(v-a8tSA>$~9at^@z&izRfqB0SvO+O(q+a>Q- z5keeV`FqmvPQk9I58<|=Q?+Qr62WTeHOC!C$g zS!mjEQMA}MFlER?TRXN>$H?RApEC~Y^dnL_4ZExXWJrEyac zA#z*D-r9vcwKY9GE5Rev(~lq+Zx)L_Bh7}2SkvVD-iIcNh~I^KueJMAIFv?b$Bc1y zmL4xcEDa#BHUYMBepHbz#bQDdx3;Qaa6CVQ3=tT*0ME5*V{K=PutQ)1AYNy4Cd%93 z0CFBXaLT|@Yqz6oDT?OhDX%_coSdRSX%GO#F$C%1uF1BFPlaXC(x zjP+ha=%iYsWfH$Ma%-$ij{%EDvkh@`r8nMS$HCRs^?`U8x+w|@NAU!Vk?xw#q%|(# zJA2c+d)xHTywn$eUPB&;411DmJo)8|e6a&M_J}Z0S%9TXgVWKYu?(e#FQzQ4A7p?6 zxpb}}7FQ65pekKqr&#HMXAm0HYM7=RErN=!R5nVRAeZ$KeOVH1oT(rtloSGYsC3uB zQ~G?`w*Svy2>KAqM;O+w{6K(MDZh#lRCgrC0fQWXbW3J?*38NcaoO_l_YJqfQv{yj zGiF|BEq>t!O3`V?R4&dhpPgoR9uUk?LDf|}eKU-+XY#eZ8K+1J(8{-rKIbla3J0_# zS3uWwI4MOI(VHK5jy<4-+2$2Erep?^6$2`S<7%`4&jj*{;PhSgY;G%DDQ^q*JZ|q3 zsK)vDD2j0?%{t+-3%$^CT}Ez z{QOdFvkDNq61+^^(To%}FkA6T%>Vu4;V+^nxbd z{dOPCrQ>0J#8+)UJp4mT1-KiX9W0~)7rq85fVDA_=r|ZMu-%Pj+^{HBBJ0V0W8P!r zB2GuKh<&frN@freSJStpXuQ%FZzO%4Iv?9-xfKeW1m8foX!TiWG|!?R>kz}-uRnAM z%KC{9-2}(zAO5wu#RNPyMwJ>ACj?X7ZdP`nIqhy)fl!nFDQ2qJs&};6EX4r|y?9Ur zH zb9x}{ZdF^Y3aTBH`r2mD`;8gAYgVj80$LhMBxv3FfWd=Dd>+NB2a7kJZs3KHBPwkHpQ&=KAzB%6OEv ztE(GTh>0~Meywfppr6eu)O>KiznJp^Mf^OL6xe7S`v&K2end;$Ae8SjWH z2QWwV0Or{0%iE$UatyR*exz?;-0bfP^klQOLE<@*95Lb`O*cDz15cQj+1!~`jpb;2 zZ^3pqzY5n4JiZz<2Df1tzcNG*R`c8O(mWcGx(=Af2eQI=9n#`K1x z*Bj4*ec~Zl1Yn>bPh<<7!bA9Gp}dS}xC;2u^fa{E(Xqn+DV!*BM*7~198eseiPiSD zTi=0zSYsq6M-(N1@WX@)j2s9@sc(%+NW4bbpcOE^&DzgR_g3@5MtCHh^wem%* zHbQd;?6jCkO6XJ?KKX|;c0HhL^&L3jje)GV^T7|Gz2eLh?Rm(iy)!!(^B`7`F|sNU zTqWcThIXm%0XyZ%I3DC0aM1{)yPd9EES?JXrOl}1Ub9_WbF)B->I}sL0j&wi( ziRY(y+znG;A?uDQ9!2mD-(rY0)udsReT82L1ri7%!P{QISc_7&XosxJKZJ&l-pzjJ z;?%!mC+F+SJ8K&=A6D!HoF$z=5Zs)BSeArx!3)}w*fYp8f!Gju8kAFZkT>oWUlG{1 zW@*pzP^N`?vV6gFWqG`a zaZTCvnWQ-}&V$G@Yjkyr4w@a_3KP3!;*;`7H>N(`+$9DzZf+Jyc|dDvS*K+L%3wbd zxwbbso`Y8tZnV`a$nuA$Nbn*TkI?1~p>Gs={f8!_!>8jI$^zYOB%M%$WVtX)PKEc* zY$Ds~y|gcb%uq-R;+>hP_;U(S>{qUD@(+ntO)-wO5o7|N#FoZ7xpZ}5U}buDOZ#FH zReDu?nJhRU@p%e2;u)WwHooYYa4UvA+7~!WjAXoJD@2n{ z9FxqYtO?0Rt^_%(N$0zKHX0&BdX%zWKE&5fD6L8ZaHuZX?nfJhb^dAuFeO15@O%Y6Je_E69gs z(W5j={2~Z4m>kr|zoa}r-tL}a-DolBnH{Kh%L<28MDa?o7tMw?Yz_=TpT&{6J5_2N zhKyuZgd=52x&i#&rnX`o+$J`H?;K4ebLQgl`)#{+;;9$(){%S84^-}kH-1#&YSIu9 zQQh)z%emZGTpPlm%w-0kcyI?>eFLrvxzx?=lVa?huZs4ShZn`xtz8t57G}!ji*)2y z8cVWsl!VKI^DD~bTXvO|@|k+$63|M<@~Hh}~(C?I`_cZ1jA6 z$rD#QPTAT(VnPK?1{+k&gd*Buf?$}d#(*ZcOt}M9p@v%nB2b6f4vb}=)!ahVwQyJA zEnJz0M*lT5(D`sVy@rf1>n^o4cbBq_?mO8y|4Q|vk*ku`>`bj&8I^gBO76i%6ty(^ zk%mHDjDL#D+82`D=J_8nIGR3x$8jy{ys77oQcUEx&B}gH-o@m)DAL^cw-?MLosL7* zqOQ#2z)oEh7#sUbs>vQWMK)UbHF3=HBH)9+5&|*dukfrNBL30zk02M3>MyUF&)j>Pc(`QRf#2jp6-49PsYZnD94qZtm z;t__~?@S@0B6n{*S3xZfTGrW|r@{A;48PSoCscx+w}B!aL;==TI3oAt4Peu8&-(z@6XAm%ciw6c z9VLiXp)YQX$K$j39T>EMG$aK2WYDG!Rz0~B`-jy&AT++Sy;(1@vrM@%fHk(V?Z+F3C#7FJI(3iY`3SpCZ)<7%vg6PBx)BO%+jk_cQQO zq-;FseV5iqsTN{n`Y2^n#Y5_NrGbuJI)^+8`l>YMB~f6f=Dw$03n5PEP}Q4w#B;QjAuF6kmbQ$`!Ph0&7&0mgI>6FeWt#dV}VQzs`&yrq?m4uCS~t z+j|vc)qq>MzHOk%?TsdOi z$NsUp2V(&p;w*z@N>S#NR{=;V%?u1OGt`oRZJ?E$(17j%WcXzp5^AX;nAYD*#mmWf zKrXqsE9=V*o{TSg-@kx}s10x-^A+e)a0Ems?=6>f zg}~v_{ul|!&!RrvRlLDP9Lpi9^Ork~RfEm?Ecydw3*3M$mo} zfg0ty1TM(ZJf)b5y5eg(b_{Slb}ZG(sayuPbjf9QJ0v*-oq?y3P-SD%A@-qIpu$DC zq0kFu3Tz%71L=SU)<`Tgp~*Z_9<2b6SFb7dLf#F)oE1i5gD_c{JCUH<0}wNP0Qws% zV)mXs952eLgGcaWK@K=La0N=osP|+F65%?tSBpw;Ds z@D{!;VYL(yxxw~Va4u#>uEM^~-?h$Of^YQ&i4^s7vbmWAe;dC?r3T4(4JRpV$Z&6C zOauy8j+k6xorsQ-yqVIL@AQ@hw^AA_$t=JmL2r_}W);Pk3bIRJ6jlsFpYg*ma!;>c zt^s#?Ibl{er8x7tYHb^dq5MFfq-v$c3yZici+N0MO57VZ!8XvKOfvXNDEPlcSl#&~}QTt??+V9uPBIJ8w0^qSpo<#*! zv$SKMVU$h^)*I7G!T;x>xPu^o>%Z^_ZfSB@V(k`iAF;!f{!HuwJdUP5@Y-(SDhsGEEXzfVn9?N2GOZT5IpY z4uDr)qCiEv2SILcaht@X0y?`uE^#ld>1n$<#*Xm92a-iEcp4G23LV)}J_CG$F+GwJ zI1O=Kd;DgJ1#F4D!YXCsX2Vi>jBGR|>0q$M2wilkHGXwzzk4$%!o#?LE%D*$K8_jYD&g=Y{nY)Rx`I{Bg3J@P_i zZ_^w_K{OS76>yY-O3kgp72rYx5g;dHk&HuVs_z@*Piez)$^clQiY7WZBivcS0%x`m z6J-nyNb4cwF>a$i0$`1*Un+lu_^rB#s|40*k#jav*pl9Xnvg$%RJ-2i`=aMjjtR+G zno8LWjJwFWGNF>uCsR#*VIR&m_5B`ljPUd64rb{=f<0xoiu02xa|Lpz&d!kAEI?`1 z>KQa|VZP7y4V}}dNlw3MC zOKG$F-B2zuk$GQ^$CrF|NE8*1XQdTkFW?=_2p%88- z8R+g=E5nv-tOr=TbVozMT57Hc3mbn$Qb%oO1_n^)^A--&!v#H9?IVmhiC!TubMFE} zvRVt7SNISilJ^#}E+F=( zUaxc`1SbTzRf0{Yg^Id}-p5l^FVfC-hEjE3nCKa{w`Nx7xCB-ltWK`qwgo{mi$@@fD{I|J(BCnc>C?Gh1*&90$ZSIF{v+xL&w1!;&v_dF<73te-!RVx7 zcv52+_ah@*jMI1VVhJQ=poF=xdH15tjwcV5D>B(`6`UDZmfZ2CXabHJK`#`yJf}k9 z9zL0#?#P~iA~ZEHe0&2dt7?eq(aD}q4tlrS+bw$aVlXyH* z2X=%?ZZP3^@oPH8;n-z(_)!Lu#nyVk7MZ!61p{(erGfCmI-jAS;H1tScO=H z9-ffB5TCB!H$T@G7a4gm>ay$?aNAs|*Eh$|2Y#rf@r_a#%+$QVy<%obi&#E5^)nrr zB#Je$2_baoU8W@r-!TIEp^1YP#Xlae;64c$J|qTMW7D#@frO3r6kBCzKtt~(AC_%3 zd$m!e!Om-HJQwRGiBL5#7@>l6+np{*=FBP&oia!TO`l5o~NU1#_(nn~T)N^93 zrF=Yq|DzkEAmexh7{EB9a= zeW@?s!I(E5EQ6(pP}XZwto*Aca;l0h%Cj{4Kc?}Y5wc!cNDA8Mi`WJBHVaG3SrZKy zz1aCJ!7zDCE*|6znOMT;E52+xLX04yTy3wFG&l)&EYb$d_bARN&Yi$T84b2BqU$;= zzbq(g2g1joy)aC*Wa^skJLdb~58HK)P4wWmpuP_u@j8pcf+AsBVpCo4D@3R;SfwU5 zD0K_M6LJZ824fx;mxDZt$Jl=Yz8|%C^Vu-6&aN#vwZs0B;f@XL zMo?dqfREzgU(Z6rl`L?E0h-18?KzjLsk3H70Fvl+_ICU5dw<{fyo*5 zEy-!KzW@WW@aP$wi7zS?LIl7P9Ivs)MR90ZM}lTUNeDvr%sU~CSqRLcS(AYUq{BIM zYp2i5_&end1|c3q+yGcq14W8=F%h~LZkMV!0g1H(q6ip7YVo~299-%BP)H%47nL~B z_VcVmfIR?oXyCgBVM45D(P!uF6_jrf7TJK9xRWBNS*!|1s}0u(+Zn zgVh9m6h-aT!ut_2K7Z0PFd3G2?Y*OYnX4w%*npP2-`afA(1bJuoCtv_885b?2%jg$ z3DDe}_B0f9n44irL<)@Lbji=S!o|{cZK8f*oya&Jw2d~)^CkGv6uv}#OW{J9iD2>I zm{%{y@4xb^l6e=@p`iX24@-UO~0~+M(S`~b$Byb zEcYj^`25_7WYy1stxNr<4zDVd?U$Kj=ZxCej{uaQ3vrxuD=2YPs?U&(1iT}xllU}o z+wNx-R)$6u&7UjH@AbuHT6S@oV=fangt^()J5?sURq; zXqU;*lgN|r^J(%uAM~m>bP?cvnp!!j@*E2&0jxt$!=RFXqxHqmaNEfTwCoAcBMnK7 z6XG`Z;-MJ`ZqR{Afm-o6;_BhhmENcvRx&}1q$nY4nN(egfQj>uT2}Xl&{LP{ZR5uZ z4%0`$JS&wgQdgIV%{YWYit;vwJzi#FbnaHbSqXtyW#z>oUkQFD_sy{+fek1xtg z^={PzB_ccVRBu*z+#QCcuj)I5+Fmxqrgt}y6Db%0VS>mZ`J%lMN~0#f!C;~Xw&U8MDpHNhRUEQ+o&b<84_{sPTW5N~Z>S+qP9Z}ch1^$nP^+5tp!4wrVt`lC*;lgXe$p4e%%b$DTE1*P zI%R)hA~uQ)pnp_jRvKHe&t5zNRilQm-7n?iC)~)!a;>!8+^Dyfkq#L}Q!g#cTPbmw zS)Ckf7gCS~C((~rfZaBL9hN2O7_iP13*7p|THmB(6*cxNt7ud5P`tu#Woyz+mJ))5 zn&Tcf;j`-~hgMjGO@(z67?Xn`?%i%x_>dW5mtu%nRfzj|ULsT!YW&kknA>nZ`rGi> zF|=zgZ6XJ%27_Nxn3phnbZpq%HLsF1r^_&cK?;)`G-{p@!pwVYe^-5vt}awiHB3g! zJ3)d$7dPn-J=#R`cjR`Qrm)J4MTY6rT1eh}GG1XpLG5ToodS_;byTc@MC&#?Ds~j+ zEW*Smd#i3$9?)pZF|+Q}BA~o3#@i*7`)B$j*^ryd0|*5w`HkBc&!SqBKY0srE!Ro_ zi>4w7jJ}9)XO+yP_?jtWg?%aojmiy$ny`z{E+A3k760LSDXp*>RG!C0qo}R*!vF_BJv5|;j1KWYw7O#WoM8g^v#ZY6D2ZeNJ)s=+C zluhyEi4_F#zX%m`wHCHZhILI(%Tlp@ll91*+f+~NiTloiO09u1NQi`Q5mrLHE6!UW zV9rv!5@IaArV?SaWRZXKb(uX1!0;YuYv17rVYq+I1fW)F5?milaPwAn- z7LGa);8-L}P$KBBigtha02WPwg*_I0S(i*-fJC~0jh2B`t@_3m@@E^nh9F^TU`hkU z&aq@z$qnv@+hX2_j(%~uD`PgMGQ*aCO4#j_E$fqH%$M6hz71==WQReT5kz7jN0{cY zwpjufLLxos4cr2qX%sy8419pci%5bcBVwf&c{!d5eF-*$MrHx)t2aUeibZRrG==X6 zCbKdx*`H@`_r_anA4G&#onehLvn-9t$=kfMV9OK z?*T^Xd)QW0c}hT2A_bZ&4x%SThUsZfGg1w~bs{&GkWDO+IV-dv)W6Res8c^B^-R!9 zWiQTy)SiQsAb--A-w<94qt&qGO2WeN1!`p1 z%50DP!4E{y&-(IDyRd)bF@ouQYpY(HIu94vvXO7lohdpU5A#5qCw>7z()|8`|Mb6q z@W1@;lQAVb9e?s3|NDpT^S}SU@Atn?o$$Xu_z-^|(RWQO1b>{k6#VglQt-zIw}L+= zcY{ApJ|Fz?q0i!vi0kk9RbPZ3cuZf+{YPJfpQ!htLlL*r^V_}%KT&Sr#oX`u@XhaJ z+<)}_zAwU0)ceQ2=#S`-!#+C=0sVOl=*J(24(R{_vFAuW!jBBNmjmwQ0QB17 z41{dYd-4%}WWfC#a6bne)&T@}&saXfj|@1@0mnI@R|oJ6dQRpe{K$X@Ip9GKz(V;7 z9!$?nKEjU-nCF0b4#0mLz{BcU%t!c<0grOPqa4t$19*TvPv#^1$bicnaG3+%p#w@B zP{~L5kpWc>sB*wNb-)$}d?X*?M+WS0zzzot=zv`g_;^0Tj|}((2YiA9?$H6ybHFF_ z5q@OAr#ax$9Pln3@L3M{Tt32&4EO>Ee1QYrtpmQ4-yfxR)gbap8ja?Qh#4Ru#-=~1 z`yhHTpBq-L2`_pKLe8pA&*R*oEPjQH{aQZ450E+f27mH%z|9)S*U3uF5hE9++BUJV zmuVw^3bBZ|h$>~%;MovwqxsEz{Ld1s=!B{9LS`(Y7Nc)+8Q;oB_~9~!qwnOq_IZNU zTN8~QBRk2BKSJUE{La>uN+TXb=k_6}_Lb{{u#VGjj(mj${*CfOs5{%7iQ`jT&w?qR zDlWXiT4}fQH>TS5qjCK7BBf$^*Qwx*So`<7FLg*9KzT$vSg(U@PHNSxgE|yov>dJOuS&_h?6;E zGM9-ZKqBhRz2N_H$}tk|C9f0)a<%j(r_NLx%@&X0V&$Kp5JY_guggbr5LA<;XQ*u5 zxG0%!1v!UhSp38ox4jL49c69ecn117{*Z^Dg+XFN7X*ZDz)0m?ssz7qdWy^M{qQVK z>YtzuwRYc|yuQN5EnH5al3Yy~46?Ma#D8=iPGi1@If2D-aJ0vC0hRKxWJR_PjBlQU zCXCP)sTv&RbN>q89u=~niMC%S56d{qWPFnQR{W0s{{C5Qi1U<_b2WeF^5{mZwcVV4 z-~lA9HxtO-6vSJVq*{M~^9#UTzOm7{l>2P@kZ3K2piVi&vs9J) z*oUR>2lNY2nbh+|#3$uzP3=e~lsL@zp4>~bCDNb9sPJs`K{0073aLU5$r78_=yP}m zbp7Z~wFSEQDnGZ+8QI;Duqa970UyEOWMf7wBRYv5t98tRj8vnLdVkJ@WL!U(7SwI) z@*4Y!F4g+Wa0=Qz!C`IPBtFl|r1u!xy<@2@vUcWW_etFZWz=^W^<74N>x}x}?lNiyxfogNE~9><1cIO3Wz=^W^<74N>x}wmcNz6vMqPO0 zHMd`=xh9H!rN4|u{~^Ed&;QI1oO8BeYG)|D`Ygg(#32t)#hg`Esf5q6iX$Thj#_oP zX-e9}2>7B#Of}k8x%ur4rgoN}WfWAaQ1k zl8UY6cc!A~_xXYBsFb?PoR@gR*;-6*AWX1L!;V$jeGzC?G*PAp6$xM%5qlH*ozE>Y z>;X`=CC8E#ra4p*a2Tqu|)g-X0q zYnMiy73Pra;$Yvhfsj9?4S*R1+;xY|;b~(!ad2%W*a`emPS@?t&CS3uijN9(R#E>= zCK$ktnh(U=a@3cbGJlKZsGQh8XAE@mn8Fl^a1c6e&5zjdOc|c|s6Y2@`x#gBENmCz zZLI+!+=m4mVhl@sAPJ{HyB637-?9HGkiLR|;M2&~LLFJI!5CBCNrx0aq>atKl9oo4 zN~SMPe8k2!i4!7N+$g$+Ln};za2H~l+5EX`4OLNA>Wc<3qk-I!SVxF`28J|K9Tc%b z*fPAEoY6uq6VbpdBSr8oud%?4?t!)9)?Wj6we7PtcV6n#T@AqXuG|l2+(M`hz$_%j z)~4*7Ue6K^kQE`_a-X(r&%nj8kay==_A4<$Dcb`UAYBVV1P#X%to?N`x8xoO46fN1 zDBA+29?87G6axMJ}XQf=vL}{$=Al9UkoHNE| zhCx}lM}L?5O^Po&OPY!C;b2pX*`n-Ktyf)1CWZ2WPG{&+jfQhixP@~XmYfwzU+UD1 zHM%di1rIjd|E|v`4DNCnfed{!x}xo)C-!em4FPf05XfcX2PAJkVU&?%F^!Hf!7s_V z^MviWyn|2;RrZoU=JQkLnnNWwN$>BEpOFoMGZ+3Zuy1M&%{pt?)XHOP{g{wv|rzz(;;2e$p{qfiRhEvf}_5gy1 z0sILK(g8iJR%?jdcbkYu8GprErscEN3Z)0-P5+ANfrO(-RpJA zo7PzvtcR%EXhAe|VJ9D&#Ni!*4?340jG}wnragrTFA7dA)saHd?Cd2SjK_mPQ9KGK z77F5*k+yMPfBf7dD~(EJv9x_E@RSDQv4Z>ha|JsppZmu+$~^{$XD)gVz2p2}&;9)o ze&|6RjNZ==#`>eNw&hNtC!f|+US`lv{-}Fn99e7w4i3dfB~FolM-*b@PoQnrM>&KJf9zM;pkBZcvPPJ)R;-xMBDbLhvqvje=RDIs6WCF(GF?( zGi|RMVgg^Y>?_b!%J$k_LN5e>BOgyOr-@7xdGKEORi|FeE(rN5+rZ*ZY7S3S3+qvR@a z1162&^av{dQ47lzWq2qpUXibG!K(DQRH6m|H6>U>I2_<-D#FA(GNN`@SQ@|8gwj$p zzf!QPVY!g(m@~DTOgSH-V%Fi@Y4=ISGc5$Bqk41yEPp{IVeFj_lu%KKiE@uLA=IM~ zrYRZT;s)WCelk|yA)M+6GLtkd#$rR!!B0&YG=2jZ5vC{cvl@u&%g~Gdpb@!R8xk_f zmEDKpATDmSSwTV1MbvK4Nbh=sZ`WQV{Mhhv^YIwU<)ZCIjc^7I5tewzy|JJgHT7|1 zVxSz-CW;`_&8~jyEoe}1tXJ5`4~wPy+wqqN+(zhbWnjAA+VEX}2HO{@v58Ppkwg#& z$`pBt`Cg*{AZlB1lR}&NvVE#i;VK0%49nHWxM=g_1QNA@M|#%Kp?-|Sg&;K!R{_ug zU{@p*y+oT3QAR^%G!yBKWC+%tHJUVfSFS(S zbq20rE>ls==v)#LU;|JY5G)bQ?#Pmr1sg;k3QN(ubKiGgKt0e(83iO5NJ2FtKv5T0 z>yB<4JvRZUKoShc7YcFQd@%R2`zBQ24a+Z()3X|fs>=*rErS<8mOp|rCJW$u2+c&R zAbunvDOW&wh<#xM25aWISlz_3hrfYtV)YPzLa6m2 z+(Saj+2|@ciZvPB`rF(?F^vgUq%wm=*`o*~jj;s5=t;jq^ai1l&apJ94kBa_Z~$oV z!kT7DYZo{QI@2Xl3#3qlXoYG{5h7sxuykcwa~w^`6tBVguA%49CL$>iRt}1TUZLPa zWMUI_>gSAdX7Cj$8VDa;RecadMPl@vZq8;S({BJ{n&+%4)j z|3r0*(8obh(EnFN%`(VGzJ8`s*~XXhXS1}f`2`$oqD|ep9OG(2llx_dWjVy<*_I`p zCA+}Wv-Isr&J1>Y4zUh@mwUy3CVUQuP9soZ(I|<~qO@cv*`yy^OvXh#2EigDipm`` zmXyzP9ug{SDhUy`xnXbZxq79EC*~PV1r6`#Zc}Mq4?v-GinUB+je*;#DKT9rA4LCG z?z?VQaN^8VW@R{Y0|%h+N_IX}y~TC+~j{Cqp2s7hCg! zsc!(pf?$Gf0?i$bu8IDi+{yTH+mX!*PXYIFcqI4%yp;E_q~q)--U=a! z((W!;b5!=GhX5`153q(lu%4V|1ldE#393w8(0@_v9;W?f9(H}zRN|;0U!kaV{H++$ zH1my!M2&C7vHL2m+K855CxDjls0i?1pNK9|qJOeK!VfjHlfBVp`K{DH5taG}MzAj2 zNR{EW#_o2jeiSioG}j=19V*`Gc;u;_sedR;UXG$lAf!WUhG5VxaSu%xK?0Vl`Z{JP zTEPOU8yNaVb({BQeLZ>ld>xsWCSAhp@ASSYxAZqfSv73~)CNTC%&o@gUO@*WlORRdO8D-jP*qR&gC zrUjsk7xAlPUc<;CC3%_jN&&BZ8&%Rx!8cQbi ztj)oL=w9uw@G%*P8IW(Ti3YxN-8kgL-CbbmY+ zXC}z}$@#>Y)3&gO$KR1&893)BZ~b_TlVQRi&ZlpEvQPFa8~$u?)}Q5Bf3iRNT))f5 zac9-ekn`xBEF=JSK%oQ9bPZ%<4)pfU71Z7$M@W47NBJz=o2@IAQVRmdiX*%-dRv&! z-*jsELT3o>;p-VU*H_LT!KiH^X-WzyW0Z~v5zL;8N3CW+ z5zM3?!53j~TDp;5>^OI^eQszr>(#6F4al2C#;h!0RcmKzOiFxCtEB0A%vYILex>6p zCuX=cBQ=YtA?`h42me2N?*nJ&Ro-{LuXINqNnT(k01$f6sHydEYy8C7ZPIXZyz=u;)GZeb0H$InR0iKhIgDTzqsU zWchBJ-3)5?x*6`43&e!93`giXTQ01IOd($hy#q=pI$fbjVS;0KD;Sj zisJQXLs@MR+k@BX49ax*YjMKnGT{Qn5vz|ULHn)xq^FvKroTqk;RZN=tJv?`Yj%m{ z^YHt(+efyYSRj_q%dAGd4lFEYOz{+pY5xjUabl6&b*zf*&cZBwo_n1b(!X}KeR*%Q z@`^F$ZgHP~A0RHpdL(hX;w1DSO)*GGj!PJY%xy1In6Kn{QJI8`mnNiG zItd>NQ_+uZIHNvCR6Tou=~KZONj%oPtst!Uar6gYGWIT3yFl#I2bGd*=qkw%aICZP z`t~vrI~GgjA6FnpN#$pcY+5#92J7>qES=0@hQBe5-9Lr49c8pmdu^#W82ntPLXZ#^ z=*JOBv>S>ULh>VI48zmnESJw(2Akjvck>n}Dhrc(*j9V$*?X|_78Whpq3=Lr(H*zg zTd+glM=wE!B91HlQlM7#!itR4TGN1IhahS1VL1*4ias4K+rr-bQ2aaE93-%Lod;EH zz+`ly&yV3QK&;M>XcWJ>G0t5(z04AqZjWNRdPpWCdBCpx27SI^+Y$jOB}CR%yP`Of zreZg;(b^-GRfxMrL5$f}x0zmR6fH;hDt(U8HrLhOT5UE|D31@Z7v@7cea5TRvNbwy4Y0{FJ(a36H$Y!dUhj1#kL+CxZGMl}y_ONE^SWE+l7WUa+!mL;&#NmV; z`%`naV0SWRN)6jldy3yJb)0a+Oe^#kQ$(GQ~Z{}5gw2s5dtJ z+9)2jcd_wW<-W~afw0u94cMX|uKmt)8VDhc zswyJ<#$*x}JkmFaR$#I{w-FQmSnVa>$Ar9yq^WfqM{MQ!S{f4f81P);bGQwZ?7YFqn`LJauALfQ)(4OfM?pCio z?KBHhzNZ9Z+eC3TGg|UZhy^o!sy(U#eldR*n~w*JA)#~dy;8LV5UjyBR1F!bXcF8( z6z%CEzsJx_^fj_>WyZ&0>XmqLhgwfgq`SqUymw2hFg%QKHd$em-%o_y_>I+p{Bk2> z-*yT_ub__<&hP7#u4!M_X1+)EjPYD8by1!vPO1njqT^7k7uUAQ$G*@lrhRj*@XjJ-Q$j zVGh8z7Ub+t<(RXV*1qAsW3iy7VGtF9{H6MXmKE;D+17F?ke$F~0dSf24Y@BM-REZAFcuX#8BG-q@!TlbOIHf`UxEuivFXMv1Q>vIEbtL9KR(ouf-b%ckhycI)7R1 zOV84IkdZcYJ-<;tffBeE=qGC5o0fd!LWzsvuF`2u*Gb6Xtv=^danXBEKDrpPJ+bVY zH(q;6Be+}=dSIg>8N_@ehqVqUCPE{G_t=M1tvlK{9n7%j2?~25tINb^hFRwjWPSfUL>PXOUDzgl09pRdi>o#^q4>n4+4+1@4(Uy_?%C36p4I8f*9P)e9 zA92X<^IZ1fv!;k&+H^Vl{MM01Fa+WO!;(nA#td{xF)#ZlKjHP!c^aUhe{t*RbNhCq z>V9zFkqNf!FbFqCU52doxd~8YbwPS)byO2X?aB-DdWkFTJ?9^Br$tgPgUFD>*ZV(@ z2c#k=nB>W~ppk!5LS|RF9WYB;&;?n{=u0MlmC99tq2)Kqk|6DtjxF!WGs(o@QIXQgUbg z?g;@f3T*O4#8%wtQKO=nPgXiNEvx6ZPnWSTp|~FK>Hx-C89gfQ>BNTxHF;|9%G}Y}1+*zRM=z%JHlV_Sb&Jcv z!a$(J85naL*GFq@winF>n4Yew?a9sP>{lE}DMv!k%z~Z4g+etTwjnM`1NE@mbnSPr zR{-ceoQ&!Unzf2R;NjZGyatgeuj)*~rEU|6w{55`Ar(**hbEkM!eB!H+Sc0V)XCMp zN+^WQP|Q|e7Roxa)n>ZeYTv5D$J(KKLRD?e;X{5Kh#A8=iaA_X(n>lzn4l}@VMs%t z+iMi@=>xvhkwlLk;MD2H9cpO?Y{11^KX@CRKiKek)Dn72W5!)=mBc|e_B$Sl@Y_3R z03_=a_Q_PQr%>d41Q`9;yDutu1!Rq}_n3RpMY<9^ZWR zt%zHpj~CP)tNzNI@t+vlZ0P3sE*bP?x9h%bQ})~T*O#|m&c4Q9n`rs^*3ni>(C#g^W}1M$z2R@9B-oFnF;YoTKXAqWmW0C+k<7Ut6~g6ODr$uRFS;W*3JWa2l@NHge_nH=c)G>)ko`oz<0V0beVw zobkzp7RY|oLN)W+0UiydO-3m$1|4wVEb#1YB0xPs&oQthWfM>6rcd0Fwi<$?PeFf8 zi8{4B?IpYIx}OeG*kk?|91gB#@dv%mC7EQUjY&bp&U_wDRJ-C3&Wl2a4Klfiv!&3i=K+OO@4 z#R<<%HJ?#3NpHcjs@~&)4!Nr4F)|Y6d8)P&yoTM#vwc>w_2hLqs!rw1fRNp(6h!O?o(ggOf$lhHEM zI5NR)DM+zZf<#sg;y3!A1?B( z?X#1bU0HzQQ0#UJd%F1?x7L33O8u?OBF`HhX;LA-{2<)KQI8;~OKk79+M+gylmKHa z=(Wm3(ih5Lf4+&D5S)@67-LwrAUwjWs*{tBrK*z_^)dSRN<= zl=CYbpJ*kLY6}_|{`FgExKB-Y;dT781}MAHQ1j$~o}%T#IB6w4itj@q(8D$)G=}}% z07&0i4MH-QuF>uM7}gzKmgR(i(GA~otQ^P92w`+H+IPxR<#U#KVY#K^2M?xBYqe_! zcgmY~2>TCeuy6>as>Tmu!mXO}sktLYeNE&Jr9a85nzIC|Sdx}=*4!`+)0%^{EBY-1 z3)I@}OW4|sgs$E6%0_XTDk@Ts-9lhXg#5e(J=}lr<$xuGeJSb_h)KqBxc0?2--I)K zD}<88)c54bGfd{Qj~@O_1}dG+!mK&m4de& zg%-(;$EwSOf{_P*l2sWFY~0qG6Je}_rD;BZpTu-5xGGz{R7^Stx$DT?$5=pJyMW=t zO#3vYD-tvZh3^CwTu#F!+#*3G+5O4y{psWi6w|WkH(Q%{_~3=^WPRSJdegR%@i^6m)viY??mNw&(R;eS&ic-Lc%gNY zI~I8f(S|zooyCbwsb<32&LYvXnG&0F!e8<0@dxsuMOqtqm04;){KRDbAH16l1g1( zOO#Cv8hf7;E#)UH;?@`?ppwe>Zd!>;=S>j63+>8W@-bDyU-zapt$#B+I%wok(JXZQ zECq9BmENR=x zusn$(5V0QmOc()G4`t`9W*W})B~*_2r?F>gx`mU_^MgbWLqp0xYbf zG2H}}iZvkqp#%^CZ8QY^?y1w^#3sGc)YOIeX1b8c$w+^oWb9_B_NmlOa1}M@*giuM z3n3A7OR1uR4IZoR`IpT_WT>l_3_KzBoA%M`%i}`&lC2~tiKG$PaV+y5yh)X^5#?eu zg2Bs`pUMRp2vI|}JxS3HxAlc>Vvzny6_FWQ0({uaVmeBsCKM&}4^{I7Z@J?SNM`EW z)Ofl)hu7)!t7ihaO%>fHQMZ?aRd=-Zy`z!%y3rv~kCHabS;RB`G{4GD zx=k6NxES}A!#1^?2J@Z1uJ%3B65}?x(XprondTv zMzq8)N;YFCl68E!ymdSUfwH;jFchuSkHV9Ksy(%gV*@LM^Ul>YH?y}%Ii?F-&U~O- zX3BdSQQ(M9^B`p~J(^2EB^1-*kuw+&ms@^C3kx`r6dvq)2@Dve#j17V%Q3K5I9mEx zBoUF}O{llC;|SvzcRo({sa(|JASbZ7j7ju&v`$RNFajINto>#gC1xj$87UqSV`d4X ztH$ya243#vv;tydJno@Xu10fROTz^{M3q1qKQWyyMq(CW1&_5_kx($EE}N z5k}1t!6WCjU;4O$Oul~D+ib+}D#elFtL9Es6ch6W7sKnZvQiA|^skl3(}Meb%p`GX zbS(|1+mn}t4PmT&l!D7&Q2UreRdyxRy;^ts4Fe)<@U_RLlZVbK zV*!o}g<>^|&F~mXa|{66 z)|!UPDLL1kZ!XRikF5(`^_W%IakB@bObIRMP%tkI9RgJsLU|W0s*?_N-i3I`v9G@o zlRaEEzKS@3^@vrtu7kq(pdNO1WdII3?20-7uiG=fqsRc$rt|7 z22DOfenb=TDV>L|i(SVl)|OyZDci@xi`7jCEZsKD=@b*A_UiK-h`A*$x=GyVP^a_I<;fR&wG1ws@qvIm3>aVdnNMd-oQ%iy1 zbqN@G7)+q*jMwbIW~>+Nn}zgN9}wKw+g)f~ia=~y2ZU}XRH*9pAKV!`+T=LQKNS^rmeozdj0+o!v_2S?(e*31^Lwx9GsEo2@vZ8T@P*cgH|P6e6%hKvn1@VDy-ds#!};+z z?ya|;4vpNyD0=ngZMhAc>G@<&2{m5=SmzIzuLXs6qh@4ber9;?t& zSzz1X$^^TqLBut2=iA*~q0WGkqcOUT>^#vv-<-Wv%ST}@^W*s_5jpdOW$m1@vIMp4 zE!*<_;Tvyag?FA}*`m`j+o|&j%#+v!R>bxGj4}DaXde>1?!3 z?KtG=1=A~WvyqxxWy(SPRE`_gO%*pig&?<3Cvmbl>ZjVVi|@AVRq~L`3t7?c5e29N zf`IzIJ21$=RoqQk)!s#_gQ`IkY_B+8HJy=yg5L%~^jl?XNYsEUC8bKt&4e!k1*{ZF zRNTz1RqPNh%fbGcO12FGDN|Imwu`YT`oo+i-bN+03(q^jedpl#DT;9RdW+mtzuen# zcblq%ik8}Crty`|<^IY5W32UB+j8VTzB%7*uPeDK%id)=(nmKhY|7pf{-k7p{dM`H zo3r;n>)7Lvajtc@K$+omcSb*Xz^qGQ+4LH8U}00fzw)760(FORq4oLA`N43e4N$vu z^g?2+Mq{FZES9;Dz4ux_&ra4GLgn}GOHiYmagyVE-n_fBGmWc)f3$?tfu7)hc zm_kB69DsW!`^dAxHaS84*bc@Mq$-CI-^{MF%NGbyUIv_9B@}gkm2<-wAGI-_0c(EU z{(2l-`S`PsR@w5fBK?Sx?;Je#PA5l<%+658@U4>}Z*IeqS;>rNT{g;nctm-Bu?!aT)7wTSgG5zg`IXHRpS{ZK z74hroXz#H@1Wli|Kh~*TMSlb%=_oG6m#>+;8Db7wp2BHmGeS=PSJ1Oiw{=LEF_{ zC>Fs+3LLppESBlT8%`D)|4|z_n)w&X1*NW7B3)+SUaJI8gc4IWlyKM0-NAIWQQ#S& zs(=F|O%jb-8e?TBnQf`39Oz9Y>1SS+erR5~acfi%H`!dXTxFd>Xe z8Jy(3ew6J@t}+wO4R#mLs@b2yDiWZ3XnyjI^V;5uTm!{61K-ht8dbn zfXFI!0fjor5A)+*>ob`2gbAUaMYDqzX_m2{E6sA3hZU`#Wx0k|o#r?Q%F%Ug?y z5oH+TE)}{`ygeN33b}MKw@>c8q4pLJ^muJ!!;4rxJo=z>DNUX zkx#pp%e=z2O(|GTTZ&vn%z4oY`LFFTV3%z=wcG~lDVy=B_+#0n;O&9HW~mna)np7I zd_uBPMxQC21bynqYO51vO)W7?6NDp^T#XdV#8GGOC4T?77f#zq22DtacbfH6*V9$D z80a%myBdl@o$alCY~TrYIg%3$Wskm7zZ$fd);XOf0Rl;KX*E&b zqV^@|R`6Z*AAFmX7w|x&YT7$y=CU4&)yS(MqpI+w{t=OI3}HZ}dd1W0&r-rrXEq*{ zq4XHiNZfq(kdqc$^+-^NL{({g_s?{xWAQCuw-YH3uX$}kczhJiOilwMox0er*umgz z7KpBBBZZb=*_n}%?Alux~cXBO~-`1L=21+vZ}t%rH%j*4__`n?&2J14b`$QU&(xd zK0<`~!fba;3wTqvM_nTs3VqqJ#66zxvW=7pZZ{~?GxORvH|KSIU`HYQ?ZLf!ur2=P zN^a$SeON)nSSY_!(;S{HoAYbi(iMB{D?3;udSfrf5eYG6N?WwT$8qcUlJD;Y%C3$9VHte96A{R6n%# z4X+k0Bv)Xu4DNRPC`O7rK4AzXYUxG^ssGU+5Q(0-(@6&pGq7yUsCL#oIKz`OQ4Qlu zWeBV|1xivRAnO=wZv()6-46vZBK5!F_2)X!e?F-N$!056__1TzW~T124NP z|H?D9s;Xd%>2Z4Kue;%)JK!;TC~S!{;Gq&|gK(M!rF18clChPxUy~HVd8kX^AIf^e ztw?hVo~W^4MJOdv6vxp=LsyBXJM{umr+dy@2vD|)s)O^H!OP@P0`Q+5)8K++EN6L9gH ziyQ2?)lEz~Mz=m@!8w+~H4c7+G-LaQ+Dg6Ig6Om`5yV-fvgPxy!JW!&Qd>7-q38M8 z&wbYB>Udqu$RvKMERnBYTsyWF8PKK^WkL+Qb}5(C0;@I5k?~2fu|TUD({8o#xSXhm z_&X)$2BWSc{7T2_1|q=<_1zq)@L#61z4mI`B!5vqN24VBq-eAUO~HybfXZv!57nk* zCCR<6AMk#Oll|K3_2U9MuJwu{+M^m+rqi-TwmF~YnFSlQ*7lLm&3LIJYFGV-boQJ`~EL$uazf6s>zs{e?PqSMU0HN3N~gQ%dAH61xT* zEnS;)0)~ScbUD&rn6eeHM0g2>w@n-^UShP%MblK$z{OoE2@%;WUx`wOG02(Igfg|% zKUkh!Tr(=93rNLD3JT+JjW74AB%x`iIbgc-i3vsMUBBDuR8X-O`in9Xh@QP95BJ+~ z;OBKo3zukm2?hp-Jrw7Qh&8LtSpvBnB*?3Ud8#zM*0kHX-4E?7hmrWZJcWfvp68Ili1_w(+qu(PxArRpi&rH*e z!E2hQ>_;gfKr3%#$>>u^l1fJ1bZ0HaXRWhM?)XT;V8gm?sNYD_q&e!{0nm+!%ZHve zdy?Crp2X*`(#y0d#+zxdNzpNQk{Be56RwTGn24Mm&QXOgu`x5$ z04IKm)=c-;2d%K0)BKVv^;tP(^~tkHT5MxQHptv{*1(3+(I|$=hJU@D1&HW;G$kVZ zIIfToUtgR!ZD93xmH(l-qHsv+4E^|tY4D>0jgUvCY&W`Ez00s34HZJ^mEUf5k6qCUx;`P`_DyKXHJHym<4ajm3m4` zUz8?@Ee=B3>bhjSdwk^deoA2Em<~QT*Zk*oaBkQ>(As^KE3r1lFu!zr%Gkq!&=Z&M zjv~)49Xd_fujaYe@aIWt+Aiv{xGdX|Qyx3H0A}2|+>I3=-dm&K#4B#j@?F?>dJE0P zvLR@+sbN$C!k+E0&)`WvmkTX7 z&VKKeX209gdaV3}racla0wXRy$;hYX4A@=BXew3l>v_H}D01N!==z+AeY;teSMJZU zn+A-wOSh-MqV{2Uw$)E#*7IG+mI~%4$bF|$dF47d7>1(|xAlDsOBgcL17rr(ZY}Q& zC!V1Bajorf{u<=`aFe(auc(-6}J?N&B{ z$hhgY?b*=*eWjuY^_UM}GaAWvnm*E<0+tgC6m%c~hx+v!4&BM^IR>rN?7<*i+v9^| zgZ5_TmgD(+_4fSGahi@TSKi8|t_D;bI@_J^L%d(cUA3}`dn=;GuJd+(N_yUj7qhvT z9%0nM`=6TjEg@ZXF3qfh?Wu9BC;fA#OYxo9^Zs+4nT@UEB4<*zfAuwl6mCwx^l%?F4;j!E?IqonAXlc+63v`dMtMe0LzAK`>Fo z?#4s&`OeCNv2CZ;eDU>tkG=G`n_pK~R%e$JNP55hy7a<+J))j1x4H|jxHw=lg#p z7Pa~<=c4+!w6+)@ckwOPu%(g0a~ev|NK}2l^PGOy*hDYK?zA2&32pV`#s0_ceBaRB z`A%QgJg2U0=#^gI`{X#r-m_OjoV~{aJo8LIiZBhy5;=L9vxETKQoF@G6fxJVLPShvXr`3XM!i zI;gx_@BC<|jWK_@(ss~W2ED%91vV8!DSO|^bXzM+m6rWcm@y7h`Qg64A8Z6;Kb2SR z+4#yjnCbo8+W8qme7dll{!c4E41#|gf;AI_pUQ`gO0#`NZF7^OuJ#VTl=biIS3iT$ z4RXf?y8}kPr|*YBARiL0;~wn}_`0?Jw?Q3@L+%HBd%Ds*=(Bw)-8103>1z9+56kF_ z5=D%qRTh&iB>oRHn$bC|{NRi&9w4r^?cflg>`mpB(}}m?FvWDUeiOzeQ(;FWEU)_6 z#Y%HJp#uk)uf8cB>ZfNN7Gft(!`L!(n~S~mu)3bhl)6EAep!a>wPlG<+-_}*1Gl(p*^j1DT z?LR=lu$0G3zAL{UB0Ni^9n(4o3DbJzw??%;^Qca8|Xvu~9*)nu~U7C@9_ukA0`9fqi8SSK1v-RpvHt zMRY%5cn^HDeQ};^0W87;ABfn8J5EmXDXii!KFoFphs&8Iz$C9M&t>3Qu^({-=+{25 zR6j0sJ#l)Ctm>MP$xN;F$-z@6d*E_^LLI%jV_hDr@lV7&rMNYobm zSOT^1l~HYOf*3x97lbXBKhw6^mhcg_?Ln2M!Jt+;_(Mc*%r;DH{7%+%`OodFXcQ1bOO039-)W>0>qbF z=Tu}K_HZG`H}X&8L6vh(l1TLNL)qY*b9ODhI_$ol6S zFrzVzYp!|G-aW%_eiyIDjbQU^Oq-Pq($ad3F1EfakiTAb?J%MI;YWtk(p3&(wCILx z0lyU6$Wc71yb-)PU*T)}iKC$qr`Zcdo#;e4>o8WGr_?i`5~bqgCrN>g;(#qNK9UEU z9TjnYL2V+h(kRZi|3dc+7q?D+b+)FcPZ4UPY!TkGfD&Acp|o_Wq)cgi6EN`_$Woxy zlpFX5JgO?#4=S7N!@E#A0L{7E-9r?n&G12@pSyL+azJho+0bL3V9FH))xaL7o`>#S zIig&wqtZ@gcF3+9IqIjjZJ#j}RNH9e6S~a>8=@ zg$ybwq4)r!6tu2&*XZO@J-BGyuOP>>(3)8+uE^N}ksu&FZOA@8?6gA^J*G$OU`*iE zYwfkRd~ewg?#T1I?5-hvY<+kZf)T1TQVdC-d*MHkLiy&33~t2VMD63~Fo3wEKsN{Y zls6!k$5vUbJnI9ew47?3a;i)$5*H!2BG;qeP`W-I5#nLMbS_q9vZ$ z=CYS4^GX^3snf8c^g-Ql3*%+&R~8ACFf_)EM~dlWD(@930hftCJ&}MaeY=+N66~AA zSVR}9#nDl6DxP7g^DNVq+x{qNyJN&^<_E@V_n4~?ot*qmIaJP(C5Rss8A*R(f!Ckh zz|@imQ8~khB1M_y{%P^M>_uMLUc^AQYLh$&gdv`-N?;7*w6{np=e5>yAuaEX;#rS^ zk8T8q*~*j-njW>lPsM_Dxr+RT+zZ}Vz)o_1IXh3B9Eh<8+I}R5YE4fa7 zN283By_o5o6oHA~iMxg(*g7{Hj6ft~cD2K;!y>?gaJ2gftij{6ch;tIJ%JXumbt<5 zO2UHPVTru*9LE-~mX(vIPlCvZLm?b8B5^4d+@;71_BgwK^riW{F`9X;5=Ph{jOFrCUtpr!AFDj=n0r@bC+uG<HZuk^nrzD{jSqTN zAr%xNDG_!c0mqnuOTC|Ff)ir2^!r2H$ya&@uE)ix%a#2Oaa57z_b z4J$`5fN}OxuwnpU4Dnr&4wx8jejC`zqB%Y$^isrJ1_rL|EJp&ulpfI=gZeA&Q& zd=V1Gih|Ig%GFS|Z$ zBSc!~WK-wus=dumCG*irM=5!Cu1tlnlWfcIhpIvZG^FVf{~XLnw36+qHGXX_7J%R! z<5moC4=3Yw0-gLi@<;^IDzF!X!kCo87MGY2gn(;mpF)sz>M!!6Qx*B7gAsTE=R9t2 zw+Pv@cM>W>sQi-GrX}+K^0e5Pm`53FqF8yoAux*R5XVcj4Z3)Ul#-74XsU8+;M&3V z3OYt@>`g*73B5KHw`IROSZub{-hE0!oTt(TX*tL_o}4iu>MwsjHA5R;>J~Y-bqe#`)~|Sk2Ux9-{oan&cM3Xy2HDZ^qFV7 zLOesxts>)Rmy_9r@@GNd`N(j7dMtf0UJoDaAvmk_(`MQ3Fh;w@C9dJq_V#==R397E z17RRL%&-^TPwH^*mUNQ|VJ5tiW$o?Ns*AugJbEXx5+$`p&k$x?%RZt4URkza!JFfw z+0yqN9I!EL<#J`xfMa;c|V71AYo$tB5p)W zJ<#rsP+Dg{HF1ulBBTm>@viS16DuHZGgK)Z*;Y_F6sW^x_)L@7e7D(Gy*6OwqD zF+!wM77yM7Q*j&M@v>VG-VLjp{r1KFH_H?eN0ie^l|RXKonq*)Au#+46P5ZKMEBcI z#)fo0?7#+5g2xmaQ@O%ZrI6Uvq1weX0({z8kB(PlKZgSMvQT5o8sAcTcUp#28A5u7 zGJ>UNBlDeKAj(E%)Q$5+(8&+%EFcrKDUtTJ{3yZ&)PjFiZtj5LB0PC3e^+x2l98$` z{$X!NgJsF=(z3^D4$L)L`3G#oaP4!YyqPTgVH5YR+e#xPrg#)@2-BpF>b?hx~9{o*+--ntR&vTA_3B~vdOsXckM5zLxE?gf;8&N7PzEe3ZXy}s>b zrbylU(AD}g0;Y58>9K=gMEp&8a<&>+j&Hl_F7_j^6)R(z)tVNF5z*LFzkS8eIL~ES zm>;-OS(xe(_tI6#4Bx{6g&C|XT4QG?IPyAPH=pSh2P85tUP>6fqxOks=Ot#TK-O^^0d*Lx zkCLOj2wUp2bCh+x3_iu_DuExWJ$^OBWiCQn!sIB5QarKoXn79)pc4Hr{tqtEKY)q` z0Ia?ejG6R=Y^Q5dmW@l3?IbjGAvlnErHHwsU`-^)p(6)h-CXbYJGg&zP$xKcjHwty zf`k3ANuHfHN+U9tpK$)|s->}G9mPt5J*=DSQY+Uu{IS~ch|A>~rz55FS(ZE_-QApT z*)Ct!5E=z88!rk6zvTSdwdj5~gRap9b1^;NX)kZtKK%BWL>A-{75Z0RX=jEozTUzN zIY-?#3L2$X&#WwxOuMpd;cg>&R4Th~+n#?Y)UpZcC?UYN-dfSg+-XRzyY8uwTGb`p zuKng(zW-<#_KX?`+82388h8`JX8cJkLIOhew(nbQ`asZ|-cL1}5ZRx-<2lb6#@C7$ zPuZO5MK^wRy6@bcA5?$3Cahzj_DpJ**L3ZEFQ2rrDl0${n|CS<`(4{J{+HE8vazjO zv-f=8^LcNG5r2OrM*O|j;hSrtquKj42G1YZKJuKlb*JUiv<_J%vKBteV96L6tbx}f z0_2~)hLX%96w1r0b*YnHUCDyV_ffuS1_P{N&Zn=*r|)V$82dRG|6ujZ-eQ+aE`JBydf>9GNo$tKeoQE!Wv3NGeK-`QopjN@x#^)!4E0Be*#=oqZU5=X^r0)ueln zP$eGGU?JGlr7Y9egKH~TPpIW%UXL?wYe!t!1Ro>U zg%`|iVWT*Se>ViphCHjT^$m@QNGZEr7gMTRFRVhD$Cw^GHT$59#I`d>J54l+M^7Dj zjep8Az_kPVS+bUw{^;m%$NO{QA&;U7CcwvITPci$Bw|}bOEGROv~UDk0Su+xmpdyD z!9_&<&op$C&8@d0=;0zGfG^Iak=#x4zC?Z~55mRbfaZcIKM_h#Y^y!0-HRmp#1=8 z0=Y(jez#4ne<>xE$&6(662c+Cb$PVYK~)Rr=BH9v*ppGjZ8wVGWlvy>oS0Si)C9GN zBB14mw~vl>S7(9;W*4cmB>&Hzz-utymaH?A{CpH?4sFT!JGyJaBck(rheoxMx?op$ zie<6W&VP5y4!zpUKe8R0#6C7Ks!Ur-EPb^c9CVje&t>cc`v<-v5y1R$MnVi z9zK5M9`<_=TA%Jhcb|QJhd+ejKY8Vk5BkT%EcL+M-X$L$$Fo0L2es@sx91}|QT#Dz zPev%_W54Hltvx20!?YkPWjz(&%uLw0R?cFv#Md@oJU z4&RTZXNT{{Dl2ske(gBSEXl%@7DC}@cmSL zex<{AFg-hbx20!?@AmZU@cndpcK8mZXNPYhJv)4d)3d{OBt1KPlj+&vI~t#V(&0On zo*lkB(zC;NJUu&nQ|Z~^`_?qe2;X9X}9lqIYccjk_V5@9!2-{_YgE&_AxXB@1E*l)um9oJhT`e0N($|#@4r!-s za7eplgG1UY8ywQLvcVyJplonRA50B_saz}@9MVf=gG2iIvcVz!6J>)#`i8Q>A$?=n z;E?{wvcVz!g|fjRy<9dpq;ED$W&hx8p~gG2h~ z%La$^FO&@q=_6%>L;B9t5LnKCUp6?Tf3a+ENFOa59MX4{4G!sFDjOWqzg#vrr0*^p z9Mboc4G!sFDH|NpznU5X^Leana7f=q;k4(SI{LtsPyL)qYv{z}>4kUmj1IHVse8ywRAv21Wi|EIFSA^lL<;E;Z} zY;Z{bM%mzy{>{`77}Bqn4G!r?$_9t@*UAQm^nWfJ9MUJt28Z;cWrIWdzmyFQ>E9|F z9MY%C28Z<5Q$t`)|7+RckpAtm!6E%v+2D|Vyliktf1_-0NdHdR;E;ZzY;Z_FSvEMN zf46LKNdLFkaPvN={7;t+4(V@}4G!twD;pfrzh5>uq@OAq9MVsh4G!r)C>tEoe^@p+ zq@O7p9MaFGhQOo#QQ6>-{^PR2A^lw0;E;a4Y;Z{b_p-qu{XfbEhx7|&gG2hovcVz! zCuM^}`cG3s;89;H8ywOvmkkc-|5-LTq`y@*IHX@G8ywQ#E*l)ue^xd)r2o8Za7e#e zHaMhTOAUcX{fn}}A^pF~28Z;SvcVz!dfDKR{@-PTL;5ev28Z+;WrIWd&9cEE{a0m! zL;9~%L*P;0DjOWqZAxu(9MXSVHaMieQ#LrH-zgg$(*LJya7h1M+2D|Vw`_1o ze>XJ*9`*0b28Z>F<>d4(acg4G!raaM9kCZ6D)q`>=$|F*BPGt~Kk$ zg=!h)f$I1x+=iEZ_R8Jt^KRS-Id1*92{Tw>r_; z=JfJku)ykvV0zh5%P0Hd_Tl59ze-%;q+(s$vUEl3Wf=a;+eaEHz9$&dW+=CVmA1Dl z8rMQ3B{rMvV>{27r7I8rJ+v!0aPqviDI1v}fbBo-KecCwB3A)x44chR)N^535n&$F zuHcQP0#%5oUL&qGy)-ph97qN~H_YSG&T3EAr&lmvRq_C^856u-4uYRT zmfG?HH_BZW`xE$+*yycu7#vXz_4EVjS2EwH5Sr@R)yI~as{{tAVsw}gzE-neYbYgj z=;J-bPLD#!GrUv$L-0%A>Q;foIxNow?#Ef&2>4OzXLQLNd3+%yc*fpt6l14}a9!s5 z7gi;E4ok9H*Q?1UO;X0f3itL|Z^h2Z1=3A=c?Kn^eXH(I@!h`7z}vD&wNT+>{N2Hy z$2ZCiLpzVEL{T@-CNW|@R`)03z%45WgZIFNRLRx)ou{Uc-fHWj>QyrGuPwVpUjCin zb^w1v=AoB5wa~?8<)X3AC_fQ=C%4to!{kX~OGtR?Dchi3KfQ7{A(OAStkq_iezun# zH@NYuKcI{$3n1say&<7hUljGjWVou2w!h0B%MWqh0vh+O%!QY~SO0kuwPo5@8CBda zOKpXXctR1`$4Z}>XNDH{yeCyVl5gFT9!UguC!MXi!RZ+{M+vx; z??)-{l+)ciOU5!dr!%(*Oe*4LpWtd!7L_H$r6FKKb{!BNE&WbmJI(Q{X}g$L{BDk7 z^;`hN!fR10Gq!b5=p#!_f|2bFzPz=zg=Odi3;An|v5bdByZro*JCYes-P2$X!tLFp zpNFeLEuBl)L#OJ-H`YFAs6k#b$13u8Y#e38rco_EP9g2K95MX|;^cUq=L!S?WhwOT z>zwkwAYUP6xHk_~P}jD*pEz~e1 z@+Ms>P8kFx+%p*sV|8Ey>c>cZCZt?bsNZxL1@GwDSKNG8doCP{SLKYUmG7|VtOW~b zCpU!p%h^fqINTbx6Y)bUBC5*Dlw811$mtv-NU}+Y#~$^<(iDwy#OclgDSPqTJky}V z_dkb0W6TF^T>e@s1_L;%b|7#p35Hx8pG*Yh_(oXZ@9kL&88|%;Dao>TXsMkwJ3COu zuEnNkO|_g(&-3@!^3yx_8SXi2?|!6~Z@MOX`o)jeGJHNi^MTLiFZ_e>&!&I!-M^IO z+b_T4Xa7u*zi`g~`K5e&_UOO6{r>dY-$wL_Z(jdbzWvwIoBx70`#a39$sWGz=X);< zeEN`mCdT)fx`9;xv65pFv)9%s?%qoNC>vtuNKCcGsZ-6pAfX^%AWeL-hPUz}T|H+1 zuRU&OFGlbMiG!sGl)WN+6bEc*Q8mLMSTW34cuSO^t_iD9S6jsR+$S{P=rsar#O6Y~ zy;>hr#vjyS6&x0STj+Fqdy4wxIbZir*A89&*1zY zHfBHh&;R20-tdm^d{r+T`u$r!mw)%2e`yPU|D&fK{fqzVGk@+yoB8|S{o;@R;@5uq z=m|~YoA3JM6My56fAc$P|NDRMrT_e|?)cF^qxSjNf9_}g@h@!t4fXTXd*1T)Q?LE= zKdry#f9=A1Z~V=l{$;)MlTZJx7oPsWUwd4C|Jy&<@%dl5Yn2H2Ec=y%L!CW8@-Kf; z@9+HA_x$x=`xC#ss=sgk3y0rzN4NG1`aApK?R&oc#{75m_rLkGmoNX?Kl`oE2>!oy z;R8bl?|aWh{eADx{hbqk{Jr1#eZBKn9&7&6i~hks`+fC)=C@Ag6Mycfj_L15|KZNR zv-Zvx{D}T;{Ha&{gBLvT!GFu2nZok(+C%j_5VmxTU;zuu2y;>PfvZ@u|Ja!`w;Uj{ zg;e$1HV?ln+u;ZZ2AFdl1kei#gW(N7lL#`_TLJw5TX}@nD*e^>_Qr1amIKF3+`my` zA4&}cC1n~fY1do;bDC$I^bvgD6-J8TDEc$`OT~7v!a*}Rht~U{%d^!Ohn8yk= zABc!i!~&_|WTgm5l1G}|RnA;Bsyq-BhduuqSIi%7o@?j!@5!;Ft1Gi)#1X2IXJd6O zq5i2&*N?pzMPKr8VH*-${C zlV{INOJY_qiRIQxu0G#fI;Tn$$mpmcDcD5PuU&m$*~`uEvh|A#vnKsp08&$;U63RZ zvvrjY*?d;$X$0O-l*@~VQR`e5a51T&X zL`QOakdWDI<*9RiV$_WUb(0V*etMR&tjHe-y3OTlktSO@-=sCV2D-Y|L0#c|TD=YC z;4ti+U11G$xzS!7FLLUUGnxI$T(@YPc4^g)#gUcexrOsbO!~~S-xInw^LltAU@2k& z@2quP$>)$EsXDMR6(2@pm3We*#7(PIPV!?#^!YM~4t5{7ljiRa1#9=!^-<`n#KGdA znm3-+M)mdTLEU$zeO|_zKnGmA-Tj7o367^1S#tBvl2 zsvcAlCE`hf#~30FIEn(WSZD7=p6h$h*VExAXsg{}b3#!KiA3d`gxFn&(!{Q{Rfyjs z^~TvdCy(AWbL7;WXQuBudt`d*)SWYDj^1(d=$+FuCyw5E$Mo?=k$t0nN(mNRE#e)3 z#}p+ox($LkG~CvK&_ybgOS85|pnQRf50Hw6v_Q4kh0n$_k41$W`;d;EMq4Mkj7=2T zPQ|W30w&LDhG3Of4Pk<2s@Tdcn4~b&r(bjGp1rO;H>w-rcRxsCP~i+qnbyr?R0gsG zYWarDW935gQZYW|Wx`Q&TUmA;JrA?Y)0AgnGf4M!?PknsA9AVy*(oO#ksv0oH!R*0 z2r_*(6i?ScsYj@Wq3!jTLn-p`x@j#jP0UXvS{lm#Lf#Mu*$lXrLKO3cc$4{wGi zY5wA=T)KkFAFKq;MM}UZ*^4ZQRg7keehihK9FkyO(PFPH>o)G|iQ}e@)N)Icg*yvt z;4*9%WF=l|HRd%TS}Q7i!poBD!H&D{Iu`1z?J2UUTm}dL(#G?1gPL|>k=k7C5^e^9 ze%UdPod}J6iOndWN7IW8S_}d@^rQuMV22;vT#x)^hjbBM^*K4|L!9o@tRzRr#dO+X zR50+yabc+9_Q`o9=elv{-kVHY+rgg=s*ePt4473cq4!>GXrsS2?l>rH<3NH8CdX}D0tvW7e1Ojs3}(Bc_*!s!STFza;0#{{BIk(GGls}D&-&=qP4 zfc8aO+Q1=fi^G>ie#=lcvfs9NG6-v9^?Rf}^3TXO>=0DS&`~Q#my$(NWL;SyGaoCQ zFyTZ2$8ny0#1$sUF9eX?6mnLR_mXTFAqGyD8tt;n8{AUp#1bnJf>BU=`Y#=AQQ}}F z*!u`1zYs_WoUlc4GRb9=F@@`}OqRNleXPFvVxQ^`Q#^nmmRQ70Zc>`lE5Ca)YGj8e z4j+xw1R88*yFf=Mm%R;9bwY0MF=Jq$ROo_?tmqTvDqxhPPL<5ZuyP}l8ncZ$EMJO6BJt@<+5$ox&t$MM0a-ns06%$k2Et$1n#n0oD*H<;!Wtt4w8Pfo`f&~X{qm`4WnL)8kMmJcHOHwT0zBw zprPq?`Q0-Z>;%xU|+ z6#4x_o5vhmMfLN_-?g3IPPYKos{50OZ)EqjLWPE<@P(JE=;rCKVTyR-mY$*xqte#% zZ08}pTKxyNt&qrW4n{7Q@ML8h11fTO%{5=_I01d?%CD6*C5$`?PrC%yg{!r68>7gV zxT3k<;zGshgx%t$k@5z?#MmcvA}E~V6v(S#tHxbW@KsWUy|(#h@enddkuMG97i-6l zs&ok`46#c4P@S0m9){`|!#0Nm*nul1)J+Yh3e|+VK#5{kfFwos7DN@9k@PnZx%gb) zDGQ881y{IhgrmH|_n4&F&VU`dAbh#VUpF*#d}D}3KA>%QQYL_7?eVUjGsOfhjA4nn1F0m6?{>GvF?Zef6599f#yPbznEBpQ-OUfpr zdl3Mf^yuNH^}V-OsvY1E8lUR&@-ZvT019upY_6=Y#&^$2O)_$4k`aWM zLqL7yq?}qdwWugiQQd(WiY`A8H`DGgPX>lXP9e^h?znhDRW)1_BKQXWww_H?R=e1F z1RZ#Z$qWx|dfO0iDlA}ZTCqC4`qU(+Lcg0gYY$Eq6<6(yle@Xv-lG|lf*#Y%?M3pk zaB8kB#a?Se*XR4_^AQ+Vcctg;)40YcwaVvb6is2JV&O{5y%W`s$+HCINRqB?+IPL+ zdSw0U>Y?(5cRO8anQEO;r7fdE*XJIRanX>`)Q3jpRsWc1i=S;%@Fs5XQ1&iuFjA?) zObk5&?FN33xsl$M*A^VpHQp|=vVFJ}j0Tu$7ci)}k57)qC=%Ff$Uzo54P{R<*!xf{ z`mlg*II5x88>}XNQJkPFs{ydSoA=pjZS2NN15~>ZG^aUYb1RDrE9<-Y>J^|#^;5+7 z5;VKOc6x(c4{sTI&yZm|rlkpJnr&p{m^jw7bmrJc+;e@1Codl$Tosp!%Qb2A>9iYa zEpDw(AbN@dS~A_yp_o6X1$M%gLl-T)pl~VK%AG9LZz|@w$NGrO4bIhqh06QY86B%f zf>L`raK328TDF0haiRuT&fSIl||ET8J4E3F= zJ8`^X7wy)b)g!Ie1iu_x>6Fz2?}F89p-Z2+l}AL1w^Fe-L*ypWwVo6vH*88TOkKNp zZfDDG`Hb?NxhkR;>)k<(r$eY(S(?yv!V0=<;8q{j;!j%0f^5ygM6r|O;TVIk(LHZs zM!EmHK4In`%lEwzu&HZ)BdBa5thw}Dh>iT0oh!2Mi9+#W^*y)pONc;Q)&AN{vGSNe zW;fv`WY0cTKg~&KBM*7y%PS0A8MJ%r6ZMzXb)zGc{#KJ!8(0X!O{$_i4VVB#)~;5~ zcAti$EcZC7#=b7II3Ht76U!qQ+Ab}#n3{MdOTU20HS$2J&+C~kgpyl6;wK$eB$V@4 zLr=K)TxUmem)tMwUl@$O$3s8*3ztEA&v6f);d%_=yHHJ{-S@mfCh`s2b$Fpp=(9{(V_g2VeYp#W0>8liiG^k1IL2~ZpRwxWNM*+B2*YGPm= zI-ihepubA^XZZ8foQ~}H*R&1~qe9C0o!;v+*r~^2C&gMg_V&$3hxz7nL_~V!W0i3+ zwJDm<;%G*x-7EtY!wGu6*dK@Q4^up@YhN5fS)1mXonlwoD%*Wm@#0p6O^>t0bnffK zH5>plO~e#toJ9^&#p_YKT-T2*OZe3%3FlY^V9bWaap)cj6AA&iqq})1%%6#--6M*q zUoc#A+{16hJ`7(dP+co)oD;NI%MrI^da0X<4TW$)fd%EV8ui9b!B<88^`ZPI8~*FV zTTi5o4wIG+J*e@&%#-oWq5Lch_3`0t$EOLtTqX!{F|8Qd=!UlcdNv4|2o&Hy&9m|C zq5NL9{FB4mS2u2N<&a$U*Z(q4%XfzI`&qi*93D9oLQ>1KvZ3X_o|OO8Ps;BOP`?$<02GwRAk(i!637*$a)EOt&7>^Dxa4!vn-TDUmTYBJMv^j`Yf|qWIB4l zgkG~RrGAU-SJU6JX;iw`kf9=eoYd{b4wH}B+@YZ_+vbiujG>2XofldXx#LvA253lp zQP~sKosL6bMKLp}@0CW=+XY&(S5n!tcFo&-BC&_Q)FLA6MT03Nu%Fh5I^qc0F(zuA_fbZhYT8w-sm@d z1S5@_J^g(QY6IL}96B0fef-+6OThvBa5^uQXdu4}>{9*w8rK6Bhh)i^UWpJ>Ro2fN z#*vYyQb_C1D=;>q+d2y#Xckn~>_dH^%iO?6m9rLKrSO@LTreO1NecwWBDi|HD zc;jV6bc5)-5E(xcQiB@Bi4)CkEIJ$~CVe>5q>eh~THh6T(CncjQaVel4z|Y%$>oMs zO9Q~*ToTVd94!e;rSsc2m?ysuG7KL(Fwd^bo6EnL-P30wl0e$asu-} zxOGA-4Q63ipusET?;`jOBCuHG-yHsdT_DT_C{P~%c;A7$3Gc*2wnF$RvGd6;@@_*^ zwjBCVvAUTdC5G;-bh^4C#sUVe(9HyJhme7?7tmioK(&9YIr53Mc2hE-(~i^})dQ(^<L7%1akSvB2gtVl15(OB}XjGM^w-6Ji)G1X5bl^;1ix6yF(D0A4Egx>)m4K zVdBOJ*p-hcW1{#~l0!-sOPQCM6Xs$jcVl!4GkrHw2ePXBeS+zj>j91YR64{a-ib@qOf7HeSM);yB~!aJivShh%X40ufFFW|-iX+<3tzqlp=b zA;Ult71{q}KZGkW6l7znp2Y&pTU{$Pvo%1s4%q#;QH)wdB;3jMoq{77_5;SGb z7OgZf=i?TAp!7N@Kd}p-(g~$AbU>v|*|$Y~AcTFmG)ADbq0^rFjV0o2L@L!TKyW+{ z_s}8MOv8aLb|Bxh+X#n4*|l3h*RSe+!a!6z3Jq#WQc*%dC3v*65H+^Tj^8)jWq+F2)~--YzG79js$*_UHGqz=JI7Rk>fCfvJ3mrYBP*j(5PN< zUXdX7P9l+oI?)+%BucW@Cfe17kr5dA5XaXv*+2!wLJ{aoskk1$Xl^|PxL5{f2%;BV zg`AEhO5x7!p{=#-_*ytQaTEH^3}p-CA@ikQ&=rXs0{0JA_5qwGa1XMr#Yr=BT7Qok zb#EG7(T(mez`Jc3d3U-knf=puj1xALnN(IZB`j_5lOegY6qS!_e8TIRIZrriQ}NEZoG1h^?0mvWKh% zPa~vn-(|>(qEyZAr7Jou$ByH`4m;dHU0ESkrJRL_ptcG6Ghu=KqN}|&5`tSy&r`_L zUaJ&s`@+bTo%Xye19PDV&ttNcG745RA}KVWE<=Ei^(*a5ku`;Ubb<^)z*CS88WgN1 z3RKI}9otjbDH|he-+ZV3TeW#fIm}vT>N=M(jm+Fu480b?!p;fDvrtLiw(f(mEi-;s zXS_59uyEQ`{5%FG67GX6p$|$VuS#Bqx3(g-l10YI5_1A?Ho}aj$ad?@k!gMFt!bvv;bNL;bk7K$^dbu^ zDSA{JaFc@=QUHAQ`_qjzuFWSgV-w~Y$EVIrpStVbnaQK4Ngxz>m`|WC;xQ_11IXyB z3QpC&SPx>aaU`eA@yVCYVo}TSe1&}V_IxW1uaU$F8m}#}iHP++cnGXWn09}Iq#j>{ z3vRI-8oF-lNAnSs$(78Zt0_@jF`sSaQ-n9&-|~80HmT_hL)B7 zA(nOptXX!wE}@{7+%qK`7G)jS8F@5Tltn+MrD545AHb761Esa6kln@SW!Xkd$^<;?cH!l! zb;795=_-syLOqEaMP})W{yqH45Qq2S6E^OD+IW+e|1@HdTmU*yreN&2j?y?K8Z@d{ zAa2Wol;NRODF>`5$=3g0j@=1?pC;@0XOwd%3SF>PdjNle-N>}#KthhI(90XB#U*lP z(u|T-b+8EtMRo^ebh+uE!>zm4^rB_AI^V$VNk0zaY4jDUl8MB>XzLD(r5b*s?!QIh zEU4rIsm)7`+IYXuo!IOP9L$fhU-?1NKA^H(h%;tL5KJ3$A%?$UeA1UP==ye^-F2c9 zbLBPUz(X7T+viLfNl`TOgpr*9s{#jS#r5;-O*uw^X(U(AB5iYAIq9?TFD|eFlzCsw zWAHbR{ETLc@7hGLhRvd`NI^C34e8fMzRL`W=!lA}Pk!Xd224yd@uiE#rfc1UJ zdtjKWoK#O}NlXo-q+#%2=shCi8$Z}H#s{d-Aj{OSrRE}(EJZhfiy&ATQ=DA_NI)ph zOTc41L<95aAaWAFA+gy8v`|BWvzs1(M85CrLT7eui4``J!C1S%2Y6m8z_MEQ6o<|( zhb#mG7SpBh;-!dMwNF?G{&(61X7P$Z!9Ov7&K80lB zLd%R0XRlwi1MbYkM7*C0BB6f2zi}c_7+a00<)cW)PE+@?B*RBNtkiZv5|nKOI^S}I zVvgH<9V;|wnBF`Bt}#d3L9@bJDv8o&FrrwiBUZpuzSULZW^!2RY=8&4r|KRPm|F*c zQ?m8v1kQ$m_uF_(@eF2gx0l=`oOo+J{yB#09&VmgaH1KdVv?&5?{7L0`KiFn<_^*Xfa>rF9i%CSY z)E~(Rq-kKaSni#6t>%oYE>Y_XCQ$aM)O#YLcB#zKTB}fj_=BrGMfSQ<*O*hofB|gR8(J(q2)Igq0`(v|4gK6>DT5@>N>AG$z6+b-Pt$jAP=N zBTgSzfGoh-Kn+#e|>=qKuF~45KoPC_9A(iMtZRWy=K;UL(m_g;kI& z?XE}fpTl?wN9c0X-t4@*OUkRy`?;_a)*n3$C2SyI=VoyH$OT$4WBvv)=I1r zD{exD<){KHnvY&DvS$!8qpP7ROn_}EAJ#tRqsD6k5pY3bYhJI8N?xK?Y zi1T>DTyBMBNOGZ{YZqM#Pkq%TEUa*)Z&+-hJY=>UB%R<;bGMi?%Hq5ADb>-a@DH<( zl?9P1>+Y{MDstKFpQx@MVp`au8SIL^`9`$0S!@Vic`B?G*>$FCU^e7D88uclY<59t$4{Q+WIFPws>DKc*Hz{+rujBxOt;d z#RVhqW~UI^v3fXt9?7)e*h(9-%zhGmf zCGelcH6k~~ozB@|h43DVL@^VfLj~y{*G)5)Xkax}SPbwXYC4iz+g#MDud#vp>XX3s zEhpF#a2sYkVjE`qc5$Y8uCun3hKzauF zd>iMSLl7jsKa6cq9_zCfV8HqxnO|GJ01v9O?PE~qY2e(r01XdF;Qa=EDt*C8!1iCI zt#Z0Hmthhz3&Bn+UdL4ABd8^Ek%c5-!&szdV;hXDN@552F`|cD-`@>JeaR*30Dmro z2V}02o`Hm?oS)&LQB*swMpIaqlIYl0e%~~Qby>GurUO4WniIn60HdTngNP3sHkl1x&XYZAKKS(dy@2}q7V|{G$XQqE4js(@^ zQ2HB?EZqR&y+pH?kzms_swh9jghQE7`kXi52To?~6nsUQ31HF2y zWlHXmRSUHZF;c3vcamKHCOaT!p{iI7257Zv%FB->%4a`Yy(ATFQqrKPb@%Y4pXHM< zRBh;qeYI>SlEG1AFX#d;SJROzLy^9%F`6poQrZ!$V}?=UeyC-iJ!Mv+_^B9H&@Y4C z(!OCHVU?_yqy!s>UoZz{%gRTXd5Uurt$O^~K#V!KcHnlTPdidH#Y+Z2=QUtonOmUv zRatV$s?iG)DgPlXrd*;WBJvcBMcpvQ7K2str>!1wjZ*tiG%f7W{Juq&za`JIAKVq> z2*OBRpx9N7yi!PJ?F~jMqCOu?6Y0oxQ&kh+hZqBOF}g505}<kd;p>zALI6fK7Mt4V23yjxeRoFqKU}>yMHl8#y4Dw+X z-DyxP$&A8<)-Y4JXG@4B);8nT5g(aeBM`SI?ZehYT4`r^d zzb%moQ_WKMwiv`ys)wjg@83$iZM?^)QihOCahnN$$e5(9Z7^P_BUAqgYeDi?)Re|4 z@|(8gZzF@Lz4e916>Lvla_;cHMza-&$?v@sFK55OY+>Z9&xc?R9&K z$044okk60sDQw&y>QDRW$g(AU`H2+5?>^pJ>thzdE;DMA${eLp)qmeZ^d6Z$$IQrP z;VP6!u%+|zXhA`RsX#2EwM;LwA>Kow&~lae&B*CC*c+7ebOg zg7&f{InrU0P~VrOgDXZr&J$jATwBa{X;P34TpIL_yC&|OJUwAcw9tCC;-CPO$kT)hkNUBzoJ#lN0ku3t(Oes7 z2Z|y%kxEJi%SqTA`kIcFqg{m!tR{Q18YfS{5nFF^zxb#jm?*N;Ps>~?^4qrL@5qM- z7lXV{B4R8nWM)g)3ZLIYa}}wuY7)iS9jiYcgub0(ZXnOn2JH~U(W}C)Xl@ghXFdc<6S^dt15dYrZ}J+R4^Lr55c+56{WNV3ti+hb_R1#P?$RwvK&!9s#E`8ZD#{p z*IDNIa~#`=?NsYdQ%Kp;y=_zK6zAZSbS8v$i0dSchkTgC=?6)adlO$Lm)gFr?{yj@ zIvYl1wu~4pMa!xq(N#fo)y%-Em0+|;bOjnfpeYh%VYOXNcR>QFpn^JDkm!op+28+p z-uIkyubmXwnW{qLVM+pw(<&UN%LCVr>^FO)97DFfZ>mhr zA6`&(Xe?aer{SIZ5y9K1>$P?$7U3C5qi^+t=%9k-+7VXJr%9C>?L7EKw=@S6?LU#~ zZHXt7CAUC2TvY8W4NndF_>gF<&eYZgY`Y0EuSwtyo36UXY~E6H`RqA27zq>R8#B1f zBg=@`5Rbxn7<|)wDgbt;@WVA?vmis)adCl>-#WuHOi~I~Vh+9wK{SfoD8FvenF54o zihZzfMx^)!muPfy9L@qHu%*TfMe`I#C=+{P;YPy{HUeE0i#zHUJr=S;qBgQZj#2(}$y|v#Z!gS?0np6Kq4FVmncH&Vr8-A~ei7VpD-&spIHuh!bDuaYo++$5S9!Y;WQzt}o zCWnlSgR1oTbsr9*CtTaDL-Dlj?pp%`FB_TjDJ~*+-%?5t2J06>n3%+q@O!)YY^8c1 z9YC-`9$u^=|6&Og-J9{>4pI4)x~e9Z{9!d#K&#K(tsIgV9_4pO(HFnn)b5Qk>*S2J zyyJw~?{Ai*0K-5K!sIDrnV?`fAIRmREN%3sPp7@aURbW&%oJ5?C4P-mVr#77*I?fe z@vbW8Dk%*5_|v*X%K?HsoUvpjqB2X1oH$1HMfB$;$xH!~V(yrOdU z^@WhAOf#}zQkOJul8n#0bJX;c18=S#fvYv=Rk(fv--^fD?<1%&z3ex=JN=!5;HZ>3 zB1b@+jWwdz_}z5JaI--=l&B#7h!9{HZC7?~_pe3zp*}ED4glk%O@#TfM%^)ic0(bM zp~kf(o1xiZM=$*tL#zdm8elqR1ZAo-{l8h^xc23nXdS5L(s zW<+6!$~1B(#o82t)V7Ih3yltEn{9PcYGg9Yw*)xO;0 zD3Z;_?I>jk34(j?` zQAYH|kfZlCBi*JE`P+JM*DimlDtSM!#TG(~(#Mn>amcinToQ<1Ne04sZ#-!`_XwPJ z7ZW8VM~i7#q}YpAPW4y5#xquH)$j$;fC;cJW6`=5j&_#}}4AU`@vy+{cfPsbbmm2W%Ya!)|i*&28kulq};KToIT-btkkUONWsaBmk zxOA^7@gqsB1^{%TPb}Dehu~WK_ni<{+$J({Pg%C}ls!F5R$l%#t>(FAm(&!?ZqB(RV7# z7=&40c|M())$a$w6`*Vrl&31;L#Lc!Em*J##cQD8uUQxufTpKz*zmlt0=5YmI3!#B@{R**c#e zxZ?`b;#ti~Pp>(x60F|7V@&J{(<;L{(Xm9^f}^w#@&kN+;4ZE9Y&St6NPot;YvMt+ zIN>gojy<;%VJl5mF!c5yYm?&w+lz=EpM^Y_o~03T&d7akuQh<5mPSYnXc8H;R4+c}SGMv>!qEg*sy{q4SiETW)E8oBi71KLwyJYd!-w zRb*8&c>@=pE}&tDQ0#=DEtJQLvYM(;gD4&4oKhjb=x@lc!X6@bqlxE;jrnnUFN_$y zQ(6oWAz&5Zu6fMZwm5Sl{f4i9=?b*g(B@TafSZ8k&`Wm zc*0E!+TP74yTLqB1|vR<95CC#`UNvP*MaR_^GQ2Ot4Q+BDuY`-#l3iZC3R7^m@DazZ~$QZ$SDIpr}&_DjiInyRVl zbZ^g#MiMrDtg>IqWMKN1UBxA^+&~L7Cx_@g$!8tpsOni;F|PY~N42f(kszgO(D$sm z1mC~RCHN$vls!rM(!jqQnK)NJ^WdVAj?&W4W24h@%pWBZZEi*CP~XdINS+(NP_f6% zAB)8<;JL}1(Rq!O7U1J_O-s5;^&~Nn`Ip)<k>Bqyoami{|$ePI^l5- zT2ib66@xuR1u7$*bdQE{>t(TCDb3r_#JsH=4^VLK;~kT?i7qrVygl^Q@MG{{!g zPct$ts{_)F5k|-JiUt$`Jt4hdOighg`jqSil32MNZ(kJ;^?mx<> zO8IC(-iWfsJaz$2pOz~cx?D3K$RDB8;UV!^iw75}j+8=9@(7YZ#PDMm4nAJs;Kpam zdmLZYenkv)?Zd>*jFN_{R$6*zdZMNQWqY2;55Z{aGd}^pXf*B*xVx1{!~J)Wk9YIA zX9>3LXm&Iv&+*|RIrAWgqud2!n`WaZgOM+@<}z%@MkJ4|o_E*Ft*N+K1Yg97xl-`@ zz$e8JPE_(IN;n2KzR&@@@Hn%Jh70))6;o~PjwDMj9Y9fKjaGYLw^iJ}3auxIahs!YEC;QWn!hF-g>-QKfXo%v5WUX}d zM;mvWs8l@aYF6K%tg^qL4ytOw7|||Mh>p37vj$t2wtU$t}HV z@U3@FL~(B1Q-Zrc*s_}m20M*w3o+5}`je>)ILh+Dg<%L5=UIe$s1aDu=7oW3&9;rh zny*x6f+gGMH-QHS60dXt%&nO850zr-kOcT&w@@$&;8mFHQq=;&I=?thqQfGUp6acW z**HzU$*2-J0f+|*;|hY6;su;D>JXz(&Ml*^dt?A+T{l)5S!qM?p|_!%cwIRN?n^u~ zhqDoi%{`R=27%TytwP!ZcayqpBu3p@yVW8OxPdh(dz_Uml}U-Qk&ZFn{6GUC`a6}< z+;>&ZwcCrWUGI1Y7Q}}ew6c{AA!{z3eTRN~2hlFJ$`dFjHLA}}TkEf2ZO0pA82wVu zh9n(!CayU8u}U2;kIx#bNd3Z@xn-G9;mU*| z*w0z=A^H&M=}9XVicwtt++w_~(_xPH0ZOr^$Q9Ey0!6uVL=8(`tXy(rkFzO4huf&7 z?3jE_dbKigQ~Xg@Ailk6v~u6{)~p5>EENA zxfPbgD2-HPjDiexQ&%eE69@O=z~>IOGKj2xqb)YOd4_eHEkD<(>J_yYKDzh4TF3Yt zU0JdRq<--Omap?X&7D2^aGmpk);B9hAH>Wn8_|R8;)sx2Us`1}_9AzV(#_opZ@zQv z7Nb`9^fGScv^%!t2iLH-RrI|`g>9R9uw#{;_u)OX#wKt6dh=N_AbsOHr;#Pp#4H{0 zE#)KGx`)cbYaH$CkkisadX5z~@7SA23zif4zN{SilGdR=k?E(3Dex4A79 znWX}iL-1r^ooJLlGqOMQJoP2#>}%DWLj>f8Az85g=De~|MX`0r1vDrWUk7q%Kp}8B z)ZJZ_-9^2t2Y<|wY??EfAa{o7(zlUmh|O5aK3gH8hN=q0VN=eO*@|BK@PaQ2t=Jgo z^dq>Pu@>XTJAQ&=*3On5$0H@L$g*G>f3^; zvKhT0FcC_o2`I*n$vv$s7&A1|@%Yf>%*n0N%yd{}$p$ls^UaorUfJ#-4wfcuwppi& zdU0aBItqL9aBZla!DL^=1%vT{ z%?jxX<|}??!~pyOCt(4uLuONMaM7~aN{764l|*yxWh9!X`_u3DY#2jeh@6N7p;y)+ zthuSI;M}s|$f5-5fK1G-8sCTvigu0?JfJG)+7Zgv%-~i)(d81PE^c5Y$nCyo>2-rQ z6cP=F0dOzv{^0seGA9Pp*wyUd#*2l4(fEIXXpX*FGF>uuIat9kWuFKQDm%$&ywYSD6FaZyDIPh`M%e)!a0` zO>6f-UTQ8JTArUc*R;;YHqEzkpj*C4gfiGxO0}Xrv!2nlketaMPRe}z^9Ck{zp<@u zy})b;ic=f8Mg$2-37%A9T(j!0kX&Rik2hv6oHUUrmW10*qSL(2AzNN}7{P|Zjs8l@ zp3TCG8A2E(9(6sCe;cw?O0MJo4v4-XRJ?$wb&Bd;{Xy(rK{oG>s4y zkMO!SbmNhUd;KQMXEpqHDz!%Fjl2r}Mm+Tq9^9J8O-lW-ZE*B_4-)D=x0zsf$8lB? zW>wyUceP;_g;~e^N8FF3Yg7d;qGPj4;a3rP<)gM}y()`Ca>$Z9OY2c93=)l62#+Rg zuJqgpCSCt*#3W&Z+ciN}egu|<_ZklQf`qPNJ`(VQ7lie)rqS<+0~XlVZc>O_Ie;$p zu;G@ii3z|p1C#nkKV=*z=G1T^4>y+)c?4b3D_%ZQdhr$}kCs*vGuExiLr5=aoy^-w z^z^?tu${ZS`Ezk;wgiX|d!)6Q02l2Pfk^y{pez>69?S&Ce8I#^yKG{swqKFpoCPav zH*mpr%x{FD%(8ymcGB}-PA0fckICw23FIt_AIHi|P!tjqK*VpV@Rs&Xcxo_&G+Y-$ z?A1=BTP{Q6pYKlx)+OoI!GAS6CDqRY5L=Sp(`|#5;i<-AE49C?2d0RRs}}*g_Lb%P z;72>EBZC3wc?DczsE-1BD^rtGP&&mHgu0R3DJwOY-G9&vYfpuK1)-7mTJ@rO*_vrx z^UhM-j0qALX)xi6r1@qG9MNVVXw7>fFf(uqDYP=XKM09?)v-{1X4c(klDg!kEM@eC zCv+eE5qb1@hP{VKmC}Dg8llIzs-K|lAvo`CVc^5}OyI@#Od0lTue#S^EVXWTKSL?b z=|>2j6m~1QNLjE*@|I0qt5gGos&s9W8k*oR+(aXC zuOKw#LDG__6iZ$i+xk=)(QFFK*85wtfXFd|*A=DSXpG1fEsL5fmq<@mol)5hx8LKn zz^Dp}plR=ggOR{N%Y|zE&ZZvIV|}JTmYHN!Spp{Y1`nM}Z-!v!*>}lY?aVwYke_e^ zH7&+=U5dm2EF5YBf+PYNmiKpCV_}=f7gk<%TH%73EM+5SJ340N8@dVG%`~ga_w9|h zQ&4Re*etSq$&+vwPC*nWNhWn; z&V}1v{z~kgz?(6ULR`TKpj~bF%myc2fwb#eT18};d@32^P&!R!tM;VLw1&enbam5-_MX3rlqu4keGibrA6ojV;)pq= zlxs*~_WptD+U0W@IfX8ilSE_Ifv}!reu37Bpa-h!>>To>v4UGoyH}?9JA?Req^_`? z0M26Q{+%t?R%w!rw>bzM=wt-f^Vyw73#XfR(|THI6Hd_#z*nvaKvx*FG!bplUR^Dh z9ux+x5#03E{&aj@Zxt~mOnZD`#^&L32q8{CFw~o06=@Sjmb4ZwjgPND48>z*>H7w6 z+%iS&f!XFz?l>TCaQ=-;XfUPzi?3DEz>j)guwl(1tNH~7Be&E=3!YA-=+H&; z==h}AO@H69!H;mF8^@jWU}@J8=9rg*^)?H-+bFaOjA~i>U13HgbjCDLi+hl&1To9s zj&rfF01l#h2#Q!0G&BZ4$JWZ!TbGl{*BZD{Fz0*jPENqf{yw(UkCY zt_?9*ab+>&TA&Lk$GNIks@d2f{vo*5L}2Ym&jW+6aRq<0D&)P`xN2?$!1=3E7pEH^ zurwPa-j&hMYW27P8jx=#;b=o`$NcuibyDo>Kn~IjdpUJ_Wuy{Cj^1Av4sGlRiea@& ztHupVU(5qTjJFh<2$7X_n^GE`W1t|)v#FqwzMhkVYb0bmW=LgYMc}rC95$W3a+p{l z5!P(>mj}7wsmgd>UNnbYi)-^sgYZ?bo znot$LMO8zERD%#uZ>GEjOW{R1#0k})2T8Q-13`=A*1BuR&3+z*WwvUaTUbc#bSd`Y zLBi|D@}oSoZ`x3|Zo5cq=`=tWX0h-ThRz_==KEQ~1jpAdAWxL_4#9F0h6jffP^L>^ z;Q4$a)*Bl_=p5%T^H;(ymTc@y&EvssGeRJ^6$uS7T(t!Q_U+l91 z?@FnPf`LOAhb$0uRR-}mEF(nH;me0tnjLl_V-4tw)H|uo&93H)^Oxa^FZQP&UbjJf z(JANQS>kuk(mJnx5VshX^+70DFZ1JxuJBX1xjh&!xnWvhkKX#hsDiTH4*^(Lx0rf+&)^Cm4De#xf|;%pK=Pl zeLw79gM41=lm$GudfObU*Bh0a&AC88&(lCE^x}7(@vEwo zaGuVs*c0++*i56O7@ed;5lG8`Qo50DRl5kQr&;+i)aaM3S^6?@BI}ZLdGO{fQAb=# ziyt@MIZ34w#mu$qRu;fYek7a6ap29=wEW=};l@E6rtLaqHdt0kTZEEG<16m8S(c(4 zU`Gx)fI3hu4=ZZvO#~x4(lwh8E-#8)_o`F~mGJx%_b}s~glTI;k(3U|#^X)bWasrQ zmj4GcwVv6BS>yaW67Y_%ExQo$_|yvIZZXynbXSv`+ zF8d-c4Srr2wVjv%`_Lt|x%%07R$ar5lm=%!McSO@UkfPBA(IE1&(L$nsC#P0PhVw8 z{zg)C4rc=wxm>D)>gLj5hc1mPX)rgNt+4?v0-Oo}?hG?H64Js9S)LpGqL%#^g_Kwx zItUKt&9c)jmP32_(oAdz%)m=KJ4ul%wh=y}@d)45-9oL>r@r@JvPo<}RNY^nQ-YH8 z9`04FI&$D#1@27bakP#q(^8-zR0tl7P3^KD8Y1BL5wbJMA{@Ys{%! z!NOVaA*AT0JyBqn778CA4cM$hco-nXoJD-c?@~$Z2+~+-d7`=Jn{(&owSY{qkp_=; z>LJ*T8=1qS#F>rYQyZ6*r$AB`-_!TJ5tR*JO(PXBHX_y)sS6D2%Hwya7p8cXbqf}o zPsH%r=aLc1RFYFibNXTU6~=ZNXlgBqd&!s9RU++BPJVH%jP~SgsI`JtFkcz5*2~hp z3YWMjI#%MM==|0)p~?qp^b`X@IEsO~PQW7}|X!?~8l`ss?bZ4`R zr3vK8wxw}x(fwZ^{FV+1M;S0n3)B!r5?!sBZg!_Dm3Ur=81pEvFHAOO1!`j~4EyZ^qflY#Syy*BhqtTT3gr+WTxR0H`w|jQd>%ivgcPL()kPJBm#ZJW+-yEn zJc^hqVF*HkRJ1ol>Pvd)`H8C}Un`oXAhxPDfz*>%E>08&QKVG+CH;7xr(g8~bqyB(8T44pn?X)0Q?5FYwaH{6yuS99L7~#(1M-yudF}L;> zat)@>c=3nr-BT-i_hAaz!k(*~k9NONBVHcyW zp1K)lP87f(tR@cF%VFbg!~`xGaMF!51-MvhJBfGyXpA)bT1#KLnGH8YpWRSN*aIY-HaE&+$Oz!r5w`@ z_scs#1dz6{suGtgr`i{)*`CVO;R6pG+NVghGr7ubC0Fm8E?{TZd(dOwxzerw4m`H**=tqCylRg>Cq$ z4)c;{7lnp{+PCU-vw48TNTMVNX;8YPKZ4#Sl!XYzPK^55R0;Xq3Ft6lZyv- z6SWQbmdO%cMu2UW4h-G4bMFOIGHjZ%Ktidze&0MceorYVN_6}VuTM1WJL_&zLc41s zq?Pe|*2!@--Q3Hj^{-(Lz{6)hZ0>7*tQ!EqS!vM4guB7w5@66r)-^JZs?X{#_c_ zuKQ=!c|o@g?S^ec1V>W1^Y~Utm6DB;onzW-jkE*#WFP4!Hj?wOAe~G2^L2E<>qK%2 zcg@XFZ_=lu@f#H1vDrh{^O#VP-m8ZGGYbe9XPznYj_xr(C3}^RVT~8fG;K3SsEAOC zEj1Csm*o+?)-PlgO}ToA0oRbRm)EDqAR5;Wy`6|<^<-K~;}5-CjxL{WHD(&3y1hNg zb%5CXs^M45zVOyC1XjwdatcQmzBVI>-s#V49r~kiote?c+{%w{q5KL-6;&T-g)2Rv zU>!i2m}F)bYl|yAIu6QWRYH(l{t8TlP+esfgl~~Jt!6M3YE;4wv?qS>(d9=$F~lRZh@V{u1R}Liyt?S z5e}x#QuPVSr?Z{?qc`eAK!L6r+YAzNjwwQ-jw>j z5=Be0oFAUG0k>&DXh5;T-(W!KOK?d8C}db=n~Y7RCDwJnc?Tfl{9miwM%i)v=*@-3 zncHp?)wY;##CZ!^ zxf=>1z*ZJqBH>#zwHk)RCp1fN(5vVo;3&^f=Q*vap4mrx++)}al8sQc9CkZ zoj4T}z5-^)d1rH#+sP>r-NEnX1LoiTy7EqfXy#qb@^s%|sS~Qk$2{IcpIFzDV!<87 z-cQr6Gp;Yb&A~ZE^j#Mxr)?bmycw#tez2iPMGUn(%@+vl=ak6s06Ap7EFFR%DKl1A zBR_B+P-rN0Q(@ws6UugTpYti}v|JX=DpTxZOK`z2Z2;8Ay91CoKtGhZ8sd}B*pV)H zLpr>A<(1{9glC9&)YQmIk)bY7wo&f7s@x|_D6xqU9|p8y$9g1eBU6s3ZYDcYK1DMp zRdC#qCGG}GvfWS)Bhe+oZ6p{4_Mg$g*3K+}BRJ<&zLt&0{x1QBUbE4zNsnzgEqz+a z^_80u9ouzv)Y#KBkFq&aY`>7SnsjL6DzH zQ3rYj(n>U3;GD$tCEJIHMR5Vih$X^NSH4&%oP5T1N}1%-_Z_}}+o8kLdv{fij_=!x z94HC6I_^&(mpDmjsrs5z-)zSo;T_lJeF_k!I}4)@f0J4?jWfc=d|i$nMDMT<>Q@SO zie4Djib5tFjQXK=eeMI21Am_5gUP#8N)AR0Xm@eC$P~^GRi5jB@=mx~l#{YSONo-q ziqkIu^9zHBxE42w+fZ#ToU(dcl&Jn7k!9&4>(i6HTPo2#yLV_CL8ts@Zu}&<$d4B7 zufO=L!avDwGy(m~f6pPypQK;?*RD&F$9t0G4{k`3AFWH0@AW0gS=!>gooDJxN%FpL zB*~lC1CJL^^L>?nzsq;Cym#y^N%FT>C&{M&{g(8XLrHRpKV$s)8~&W;Pite6?A@Cr zGr+vWdk6RzHk{nbzYp>6wfwo7KYzua*ZK2q;Qt@~e270kBgEssUd6w_`2jx<^3KgX zb31>2kDp)Q87!a4pYgNaIsG0cbLjE!Z%n@N>o;AM{PYJmC&}B6u*mQJ4Kw|p2l?y# z+y8`jzspabxR!?(KF3ct{1t!w{O;obx`9=`?Wez&B;!5F?R}5hRM-9G@y{$LH@y7k zN%DdB|B{imAHOqsZZP@d8K#zAmAvggz2&atztO}#`S}C<^_gp4znJWL;!SrY-*`X2 z{*N2pa#eE2q2&Gl8<^4ZN`ltTw7n08$xsQCA zo@CvB_}fc=ohzK{r^rm8}W zI|rP(&95@0cHN<1I*B(x!gO(qpg9&K)=em!H$Z?T?wP7cqvE+!PK=;(+-&g(=pOby z7#ayi&KD0-x}xA?qZXPcY8i)&yrkpa2^c(Fq^(uUG5lk$!=m!BkU0x zEarv3^D!)ZK@S7O^972W)041?C{-H6fNa|H1ZvX#-Gk@zu3#40YMjc|aR9>2OirwJ z?Z~w>9T7KFy8)jl0+Qr|BF9W5%!Hy^XmsGLE$SW0=Tt`eH2cLUEtS60aoNy11Z||v zl~sWV($aS+paq#j@Ay|t5rFyrN(K%R7%PQZdDBsyo=dDY2lxo=F=p@CfM2K#XuQ>= z(zYXD6^XyFr20)E) zD3EYrkL6+nmM-H3(xojNuB`Yra}mZs8Zl63X1t4ha;E;uz<{4*=i1crwbRsS$i(#7 zvB0Sh>}+MDK~ni6`0XH{dPF`Axi$K!MW zd@6R`t~3X$E*~A6IL-y|KqtcxW;a(4A(Uow_3HqpDQOiWdVOwo*RHsy?~^!S!*m;T$-_dCr#jwICnXPUYSC`dJSgX61dqKZxBTM#Uc>|u$)*o6e8ta4MJ z(tan2l$^svqJz*e7ixHY2I)Td4Zaz+%6$3+ghuV3#t)8`pgcCVqHwq**s`K#z zV6HORKx_`=Zh3L8SySjIooW$hAd!X%AcM@rJX6JhgE-GF@EQM`QB6Ve9w@F2T~J2_C@QnB>4gbTX7mK^Q`WvpI$zDw{=eOOPN&Uz+C%I3cF_X0wmpft;7S&(qlu} zo~h;>UY6Fmd{@)e9}Q0l)s8s&QU$GDSIQYKs{VP>*0EXrLbcKSQ)AwRE^O$-X8Ydj z%=yL4Ij~2!`mJ^@J}?B#)wb82MYqmTGK*5ZU-l;6_^F-WgHp z4lKOd7@FtZBz<~)ir$t!G&HvH&}=)^Ut7j7%TpiZ@T`I(D zmzty&00nEMcX_B9XVv{L_3y`_jwRqBa@2M`=CYK&ZkW9zP6dKy{)m;{6>TxKn?#a9 z1qH*eK%Cn(s|;ackTLXFC^=tEwj*Y@->X{Q=0AUA$of`5Gqi;{6lWMZGGhJ_hWy-A z3#ns*)R?g#LbgdrnZM2?vfbK$5{L5PZMRFO<~Ex(PmK#L#v9j82GhQ2GcC*c)6*Dy zg&mkHhfBG=*yqc$V*&B`adHN{#|mUel3o=>5l}J0)a7tk zd60SOAZ2A5Q{19@dWG*sHhE7P%5h)~P=yxbU&^V7Hbbr3Xh$Ax=3QU1JnO@=+b+ zop~qbMQviX)1>&BqoMp~l6+KG>@KAyS@Z);R&*?U9irN;%wz1FHX3zt=L+7)MjRQs z5hsNL5mLUfhB3g##ry*=>JqlYjv%N|z8k?39Tm!shKkxii;qH;(qil)p21=*9oB}| zMo8cfdn3WUMctDbFDyodnqlVh0x|IRX~|`etJgZNi{@!t1AAajVT#Xq!a_(+H4zp4 zC@d0vh$l%=QCWd(clg5y;~-S|%RWb#`KHFH!+2QxSngR4{= zc2XHNu|&$2)XAN(Ot0(U=LS``cg5U6E6|S?+w!aUr-t8F*C$JsV-a!LkQQYFF22>m zb5MkwyW_|PdN&x4UBCzBG0WP~aQ1PLB?*fy!Hf4acDRf;$Bu=YsAv~IBV9{MB+7tm zcT`otf@~1S979bHav7E58(7j1FwD1Lg~Ckw?B2pjxF4pnP-6`9Snw@q*5uyRd>z_^ zdi&j6Xs!#)0u#@f+G33?N@YGva)f8Kl!!{&lw?PYV`ji94Uf>JkF8W)rP@6Yilr}B zM}Luz?@t@2M%qQs!0?5XjTy!|LrRx)ZQmK197WlQZlGatY4Rkua`U{rmEPK(bwY|I zSqD21=vk#UH9+}Fc}k(Rp925EFQuPy3mDR5gsOd5g$km)n082sQlAJ6ZuQ#meLrNU z;Tfo=d4m~<%(7CJg2++F!AcaERd^{95k2F+%n};4z}aB`qM$l^Og8RWR$?U=Z)Mgx zAECPjm4gV(QJr348|KY+gP<6rRF?SXwo})7{pTB{co6q4PklZQcE(d=0TRq(MxxBX zrNN+10iCJf9*PP~bsv$=UE=HTC64I&HkDDZWh!wyC&rOFqm6*l(@iLsB2!FRQE)+^ z1>vk?5fwv_F8tMO);JtamSV}TdRBraPOLZ^W&Su*sPa>>Y-{YNt}o|1;S+nfdBOaM zyKH+Al;T}hOoZqLqR(=>xh-dX8p;q!6QIxl_mfshoFf{RHkV?N?Ap>Vl&`{%@0M@U zHGR1YgZbvn(#j&;s#O+QmBe)a3g;FE>gj`C4eS^ij1~4iDkM*mkH9X6qj4k@3^V*^ z_AJcM{8pqDf9ckoN4oJ?9ofKi{*Q{J)Kys#CB@W_9a)+HCB7c=+EV==5H!>=9{+5(-!x*|f9BY}C;! zydy!K(Br4LLv=w~8tGw*tSsS7aHEd8}^@P+RvRMFv(|DE_qzJqw zPMg@qXzK@q;o2&N)Vjj(h$w=2a5wG{Hv>c| zzn|aaoo`p}aDuGj5)c&Pm==+RqOU+TqX`ObJ*rbMzUrne*_-Q2FtE7qMCucuvow7n zmTnrU{9o^;`>$jELtfh`Oh3o1k|-R;kW>)PE zNCYwqu=JdoV}zyxB|`h8ZIsEYEY&M~)@H=mjj)?%iI!rbyM@GHwmWSx!IG-gK7%?H z1ZwG&l0~@TWG!)WVz6+BSj}N{HK`0F)|wkf35Sh9Ffp@~F+lTAVM6=`A}T|ONAsxj zMuePI^HU_|DLJH0QA*GXmT3LlyH$ibj2{boW2NIlvbTk>Ot7bP?Z_UV zW^lP&2F}MF4%X?s_T}n>>VjmRoAPY*Gc7#v>THv%K(_8HKs(SeFUOiSR``s;3;1(o zh{{xPi^0NK6?$5Nvh4m;l5C88e3j?j)d*;Usy!iGfL26MN7B^_3LUAPPBrH(0}RP4 zd?7hs*kMwTyak5cCZL*-?A~;XGB+`Dn|+$=E66;&jEHQeVIf>B-Uqpsf!!ml3~(-n z8i-bQAg)#B@SxD%wQj@kt+D!GM8Co;Xp430d7mI(N6Qv87 z1mEc~W?m3w8;8|cG#F&4>Sxkih*q5HZmY>-ciE(sOtISvsoLeX7jwYZ=7`l&b(6|j z#AlADgNjwBaYaI+Bg|d9u-r?zKNXaBRfOJY7oF8$T0d)X7|C3c Date: Tue, 12 Aug 2025 21:23:38 +0800 Subject: [PATCH 05/97] Remove old docs, Dockerfiles and unused code. (#1844) * Remove workers site code. * Remove old Dockerfiles. * Remove old unused code. * Remove old scripts. --- Cargo.lock | 332 +-------- Cargo.toml | 2 +- deploy/Dockerfile | 33 - deploy/start.sh | 4 - errors_schema.json | 599 --------------- init_hooks.sh | 6 - package.json | 5 - pi-build.sh | 14 - pi/Dockerfile | 48 -- scripts/bd.sh | 15 - scripts/bench.sh | 10 - scripts/cargo-check.sh | 9 - scripts/cargo-test.sh | 13 - scripts/copy-schema.sh | 7 - scripts/fmt.sh | 2 - scripts/migration-tests.sh | 1 - scripts/noop.sh | 1 - scripts/pre-commit-substrate.sh | 11 - scripts/receipt.sh | 1 - scripts/rustc.sh | 3 - scripts/transfers-bench.sh | 1 - utils/permissions/Cargo.toml | 10 - utils/permissions/src/doc_parser/enums.rs | 68 -- utils/permissions/src/doc_parser/mod.rs | 1 - utils/permissions/src/main.rs | 146 ---- workers-site/.cargo-ok | 0 workers-site/.gitignore | 3 - workers-site/index.js | 87 --- workers-site/package.json | 11 - wrangler.toml | 7 - yarn.lock | 862 ---------------------- 31 files changed, 10 insertions(+), 2302 deletions(-) delete mode 100644 deploy/Dockerfile delete mode 100755 deploy/start.sh delete mode 100644 errors_schema.json delete mode 100755 init_hooks.sh delete mode 100644 package.json delete mode 100755 pi-build.sh delete mode 100644 pi/Dockerfile delete mode 100755 scripts/bd.sh delete mode 100755 scripts/bench.sh delete mode 100755 scripts/cargo-check.sh delete mode 100755 scripts/cargo-test.sh delete mode 100755 scripts/copy-schema.sh delete mode 100755 scripts/fmt.sh delete mode 100755 scripts/migration-tests.sh delete mode 100755 scripts/noop.sh delete mode 100755 scripts/pre-commit-substrate.sh delete mode 100755 scripts/receipt.sh delete mode 100755 scripts/rustc.sh delete mode 100755 scripts/transfers-bench.sh delete mode 100644 utils/permissions/Cargo.toml delete mode 100644 utils/permissions/src/doc_parser/enums.rs delete mode 100644 utils/permissions/src/doc_parser/mod.rs delete mode 100644 utils/permissions/src/main.rs delete mode 100644 workers-site/.cargo-ok delete mode 100644 workers-site/.gitignore delete mode 100644 workers-site/index.js delete mode 100644 workers-site/package.json delete mode 100644 wrangler.toml delete mode 100644 yarn.lock diff --git a/Cargo.lock b/Cargo.lock index f7bbd87a7b..22574a0725 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1036,12 +1036,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - [[package]] name = "core-foundation" version = "0.9.4" @@ -1290,33 +1284,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "cssparser" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa 0.4.8", - "matches", - "phf", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn 2.0.40", -] - [[package]] name = "ctr" version = "0.8.0" @@ -1599,10 +1566,8 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.0", "syn 1.0.109", ] @@ -1711,15 +1676,6 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" -[[package]] -name = "dtoa-short" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74" -dependencies = [ - "dtoa", -] - [[package]] name = "dyn-clonable" version = "0.9.0" @@ -1821,12 +1777,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ego-tree" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68a4904193147e0a8dec3314640e6db742afd5f6e634f428a6af230d9b3591" - [[package]] name = "either" version = "1.9.0" @@ -2139,7 +2089,7 @@ dependencies = [ "log", "parity-scale-codec 3.6.9", "rand 0.8.5", - "rand_pcg 0.3.1", + "rand_pcg", "sc-block-builder", "sc-cli", "sc-client-api", @@ -2359,16 +2309,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - [[package]] name = "futures" version = "0.3.29" @@ -2524,15 +2464,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "getopts" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" -dependencies = [ - "unicode-width", -] - [[package]] name = "getrandom" version = "0.1.16" @@ -2839,20 +2770,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "html5ever" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "http" version = "0.2.11" @@ -2861,7 +2778,7 @@ checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", - "itoa 1.0.10", + "itoa", ] [[package]] @@ -2923,7 +2840,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.10", + "itoa", "pin-project-lite 0.2.13", "socket2 0.4.10", "tokio", @@ -3208,12 +3125,6 @@ dependencies = [ "either", ] -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - [[package]] name = "itoa" version = "1.0.10" @@ -4058,12 +3969,6 @@ dependencies = [ "libc", ] -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - [[package]] name = "mach" version = "0.3.2" @@ -4073,20 +3978,6 @@ dependencies = [ "libc", ] -[[package]] -name = "markup5ever" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" -dependencies = [ - "log", - "phf", - "phf_codegen", - "string_cache", - "string_cache_codegen", - "tendril", -] - [[package]] name = "match_cfg" version = "0.1.0" @@ -4474,12 +4365,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - [[package]] name = "nix" version = "0.24.3" @@ -4538,12 +4423,6 @@ dependencies = [ "sp-weights", ] -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - [[package]] name = "nohash-hasher" version = "0.2.0" @@ -4593,7 +4472,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ "arrayvec 0.7.4", - "itoa 1.0.10", + "itoa", ] [[package]] @@ -4937,7 +4816,7 @@ dependencies = [ "pallet-contracts-proc-macro", "parity-scale-codec 3.6.9", "rand 0.8.5", - "rand_pcg 0.3.1", + "rand_pcg", "scale-info", "serde", "smallvec", @@ -5912,15 +5791,6 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "permissions" -version = "0.1.0" -dependencies = [ - "lazy_static", - "regex", - "scraper", -] - [[package]] name = "pest" version = "2.7.5" @@ -5976,79 +5846,6 @@ dependencies = [ "indexmap 2.1.0", ] -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros", - "phf_shared 0.8.0", - "proc-macro-hack", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - [[package]] name = "pin-project" version = "1.1.3" @@ -6809,12 +6606,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - [[package]] name = "predicates" version = "2.1.5" @@ -6957,7 +6748,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" dependencies = [ "dtoa", - "itoa 1.0.10", + "itoa", "parking_lot 0.12.1", "prometheus-client-derive-text-encode", ] @@ -7131,7 +6922,6 @@ dependencies = [ "rand_chacha 0.2.2", "rand_core 0.5.1", "rand_hc", - "rand_pcg 0.2.1", ] [[package]] @@ -7192,15 +6982,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - [[package]] name = "rand_pcg" version = "0.3.1" @@ -8586,7 +8367,7 @@ dependencies = [ "libc", "log", "rand 0.8.5", - "rand_pcg 0.3.1", + "rand_pcg", "regex", "sc-telemetry", "serde", @@ -8801,22 +8582,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scraper" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e02aa790c80c2e494130dec6a522033b6a23603ffc06360e9fe6c611ea2c12" -dependencies = [ - "cssparser", - "ego-tree", - "getopts", - "html5ever", - "matches", - "selectors", - "smallvec", - "tendril", -] - [[package]] name = "scratch" version = "1.0.7" @@ -8919,26 +8684,6 @@ dependencies = [ "libc", ] -[[package]] -name = "selectors" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -dependencies = [ - "bitflags 1.3.2", - "cssparser", - "derive_more", - "fxhash", - "log", - "matches", - "phf", - "phf_codegen", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", -] - [[package]] name = "semver" version = "0.6.0" @@ -9007,21 +8752,11 @@ version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ - "itoa 1.0.10", + "itoa", "ryu", "serde", ] -[[package]] -name = "servo_arc" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - [[package]] name = "sha-1" version = "0.9.8" @@ -9973,32 +9708,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot 0.12.1", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - [[package]] name = "strsim" version = "0.10.0" @@ -10231,17 +9940,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - [[package]] name = "termcolor" version = "1.4.0" @@ -10257,12 +9955,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - [[package]] name = "thiserror" version = "1.0.50" @@ -10325,7 +10017,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" dependencies = [ "deranged", - "itoa 1.0.10", + "itoa", "powerfmt", "serde", "time-core", @@ -10864,12 +10556,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf8parse" version = "0.2.1" diff --git a/Cargo.toml b/Cargo.toml index eee2a1e0e6..9ea5758187 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -144,7 +144,7 @@ members = [ "primitives/asset-metadata", "rpc", "rpc/runtime-api", - "utils/permissions", "pallets/common", + "pallets/common", ] exclude = [ "contracts", diff --git a/deploy/Dockerfile b/deploy/Dockerfile deleted file mode 100644 index ee9fadbffd..0000000000 --- a/deploy/Dockerfile +++ /dev/null @@ -1,33 +0,0 @@ -# A container that launches the Polymesh node in unsafe development mode with an open WS port 9944. -# -# Build from the repo root with `docker build -t polymesh -f deploy/Dockerfile .` - -FROM cimg/rust:1.43.0-node - -RUN sudo apt-get update && \ - sudo apt-get upgrade -y && \ - sudo apt-get install -y \ - gcc \ - g++ \ - pkg-config \ - cmake \ - libssl-dev \ - git \ - clang \ - libclang-dev - -RUN rustup install nightly-2020-04-17 && \ - rustup target add wasm32-unknown-unknown --toolchain nightly-2020-04-17 && \ - cargo +nightly-2020-04-17 install --git https://github.com/alexcrichton/wasm-gc --force - -# Hack to use an older version of nightly -RUN mv ~/.rustup/toolchains/nightly-2020-04-17-x86_64-unknown-linux-gnu ~/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu -RUN rustup default nightly - -COPY --chown=circleci:circleci . polymesh/ -WORKDIR polymesh -RUN cargo build --release -RUN cd ./scripts/cli && npm i -EXPOSE 9944 - -CMD ./deploy/start.sh diff --git a/deploy/start.sh b/deploy/start.sh deleted file mode 100755 index 65f9c11cab..0000000000 --- a/deploy/start.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -rm -rf ~/.local/share/polymesh -./target/release/polymesh --dev --unsafe-ws-external diff --git a/errors_schema.json b/errors_schema.json deleted file mode 100644 index bfbf80114e..0000000000 --- a/errors_schema.json +++ /dev/null @@ -1,599 +0,0 @@ -{ - "InvalidModuleError": { - "_enum": [ "Invalid" ] - }, - "ModuleNoErrors": { - "_enum": [ "None" ] - }, - "SystemError": { - "_enum": [ - "InvalidSpecName", - "SpecVersionNeedsToIncrease", - "FailedToExtractRuntimeVersion", - "NonDefaultComposite", - "NonZeroRefCount" - ] - }, - "AuthorshipError": { - "_enum": [ - "InvalidUncleParent", - "UnclesAlreadySet", - "TooManyUncles", - "GenesisUncle", - "TooHighUncle", - "UncleAlreadyIncluded", - "OldUncle" - ] - }, - "BalancesError": { - "_enum": [ - "LiquidityRestrictions", - "Overflow", - "InsufficientBalance", - "ExistentialDeposit", - "ReceiverCddMissing" - ] - }, - "IdentityError": { - "_enum": [ - "AlreadyLinked", - "MissingCurrentIdentity", - "Unauthorized", - "InvalidAccountKey", - "UnAuthorizedCddProvider", - "InvalidAuthorizationFromOwner", - "InvalidAuthorizationFromCddProvider", - "NotCddProviderAttestation", - "AuthorizationsNotForSameDids", - "DidMustAlreadyExist", - "CurrentIdentityCannotBeForwarded", - "AuthorizationExpired", - "TargetHasNoCdd", - "AuthorizationHasBeenRevoked", - "InvalidAuthorizationSignature", - "KeyNotAllowed", - "NotPrimaryKey", - "DidDoesNotExist", - "DidAlreadyExists", - "SecondaryKeysContainPrimaryKey", - "FailedToChargeFee", - "NotASigner", - "CannotDecodeSignerAccountId", - "MultiSigHasBalance", - "ConfidentialScopeClaimNotAllowed", - "InvalidScopeClaim", - "ClaimVariantNotAllowed", - "TargetHasNonZeroBalanceAtScopeId", - "CDDIdNotUniqueForIdentity", - "InvalidCDDId", - "ClaimAndProofVersionsDoNotMatch", - "AccountKeyIsBeingUsed", - "CustomScopeTooLong", - "CustomClaimTypeAlreadyExists", - "CustomClaimTypeDoesNotExist", - "ClaimDoesNotExist", - "IsChildIdentity", - "NoParentIdentity", - "NotParentOrChildIdentity", - "DuplicateKey", - "ExceptNotAllowedForExtrinsics" - ] - }, - "CddServiceProvidersError": { - "_enum": [ - "OnlyPrimaryKeyAllowed", - "DuplicateMember", - "NoSuchMember", - "LastMemberCannotQuit", - "MissingCurrentIdentity", - "ActiveMembersLimitExceeded", - "ActiveMembersLimitOverflow" - ] - }, - "PolymeshCommitteeError": { - "_enum": [ - "DuplicateVote", - "NotAMember", - "NoSuchProposal", - "ProposalExpired", - "DuplicateProposal", - "MismatchedVotingIndex", - "InvalidProportion", - "FirstVoteReject", - "ProposalsLimitReached" - ] - }, - "CommitteeMembershipError": { - "_enum": [ - "OnlyPrimaryKeyAllowed", - "DuplicateMember", - "NoSuchMember", - "LastMemberCannotQuit", - "MissingCurrentIdentity", - "ActiveMembersLimitExceeded", - "ActiveMembersLimitOverflow" - ] - }, - "TechnicalCommitteeError": { - "_enum": [ - "DuplicateVote", - "NotAMember", - "NoSuchProposal", - "ProposalExpired", - "DuplicateProposal", - "MismatchedVotingIndex", - "InvalidProportion", - "FirstVoteReject", - "ProposalsLimitReached" - ] - }, - "TechnicalCommitteeMembershipError": { - "_enum": [ - "OnlyPrimaryKeyAllowed", - "DuplicateMember", - "NoSuchMember", - "LastMemberCannotQuit", - "MissingCurrentIdentity", - "ActiveMembersLimitExceeded", - "ActiveMembersLimitOverflow" - ] - }, - "UpgradeCommitteeError": { - "_enum": [ - "DuplicateVote", - "NotAMember", - "NoSuchProposal", - "ProposalExpired", - "DuplicateProposal", - "MismatchedVotingIndex", - "InvalidProportion", - "FirstVoteReject", - "ProposalsLimitReached" - ] - }, - "UpgradeCommitteeMembershipError": { - "_enum": [ - "OnlyPrimaryKeyAllowed", - "DuplicateMember", - "NoSuchMember", - "LastMemberCannotQuit", - "MissingCurrentIdentity", - "ActiveMembersLimitExceeded", - "ActiveMembersLimitOverflow" - ] - }, - "MultiSigError": { - "_enum": [ - "CddMissing", - "ProposalMissing", - "DecodingError", - "NoSigners", - "RequiredSignaturesOutOfBounds", - "NotASigner", - "NoSuchMultisig", - "NotEnoughSigners", - "NonceOverflow", - "AlreadyVoted", - "AlreadyASigner", - "FailedToChargeFee", - "IdentityNotCreator", - "ChangeNotAllowed", - "SignerAlreadyLinked", - "MissingCurrentIdentity", - "NotPrimaryKey", - "ProposalAlreadyRejected", - "ProposalExpired", - "ProposalAlreadyExecuted", - "MultisigMissingIdentity", - "FailedToSchedule", - "TooManySigners" - ] - }, - "BridgeError": { - "_enum": [ - "ControllerNotSet", - "BadCaller", - "BadAdmin", - "NoValidCdd", - "ProposalAlreadyHandled", - "Unauthorized", - "Frozen", - "NotFrozen", - "FrozenTx", - "BridgeLimitReached", - "Overflow", - "DivisionByZero", - "TimelockedTx" - ] - }, - "StakingError": { - "_enum": [ - "NotController", - "NotStash", - "AlreadyBonded", - "AlreadyPaired", - "EmptyTargets", - "InvalidSlashIndex", - "InsufficientValue", - "NoMoreChunks", - "NoUnlockChunk", - "FundedTarget", - "InvalidEraToReward", - "NotSortedAndUnique", - "AlreadyClaimed", - "OffchainElectionEarlySubmission", - "OffchainElectionWeakSubmission", - "SnapshotUnavailable", - "OffchainElectionBogusWinnerCount", - "OffchainElectionBogusWinner", - "OffchainElectionBogusCompact", - "OffchainElectionBogusNominator", - "OffchainElectionBogusNomination", - "OffchainElectionSlashedNomination", - "OffchainElectionBogusSelfVote", - "OffchainElectionBogusEdge", - "OffchainElectionBogusScore", - "OffchainElectionBogusElectionSize", - "CallNotAllowed", - "IncorrectSlashingSpans", - "AlreadyExists", - "NotExists", - "NoChange", - "InvalidValidatorIdentity", - "InvalidValidatorCommission", - "StashIdentityDoesNotExist", - "StashIdentityNotPermissioned", - "StashIdentityNotCDDed", - "HitIntendedValidatorCount", - "IntendedCountIsExceedingConsensusLimit", - "BondTooSmall", - "BadState", - "TooManyTargets", - "BadTarget" - ] - }, - "SessionError": { - "_enum": [ - "InvalidProof", - "NoAssociatedValidatorId", - "DuplicatedKey", - "NoKeys", - "NoAccount" - ] - }, - "GrandpaError": { - "_enum": [ - "PauseFailed", - "ResumeFailed", - "ChangePending", - "TooSoon", - "InvalidKeyOwnershipProof", - "InvalidEquivocationProof", - "DuplicateOffenceReport" - ] - }, - "ImOnlineError": { - "_enum": [ - "InvalidKey", - "DuplicatedHeartbeat" - ] - }, - "SudoError": { - "_enum": [ - "RequireSudo" - ] - }, - "AssetError": { - "_enum": [ - "Unauthorized", - "AlreadyArchived", - "AlreadyUnArchived", - "ExtensionAlreadyPresent", - "AssetAlreadyCreated", - "TickerTooLong", - "TickerNotAlphanumeric", - "TickerAlreadyRegistered", - "TotalSupplyAboveLimit", - "NoSuchAsset", - "AlreadyFrozen", - "NotAnOwner", - "BalanceOverflow", - "TotalSupplyOverflow", - "InvalidGranularity", - "NotFrozen", - "InvalidTransfer", - "InsufficientBalance", - "AssetAlreadyDivisible", - "MaximumTMExtensionLimitReached", - "IncompatibleExtensionVersion", - "InvalidEthereumSignature", - "TickerRegistrationExpired", - "SenderSameAsReceiver", - "NoSuchDoc", - "MaxLengthOfAssetNameExceeded", - "FundingRoundNameMaxLengthExceeded", - "InvalidAssetIdentifier", - "InvestorUniquenessClaimNotAllowed", - "InvalidCustomAssetTypeId" - ] - }, - "CapitalDistributionError": { - "_enum": [ - "CANotBenefit", - "AlreadyExists", - "ExpiryBeforePayment", - "HolderAlreadyPaid", - "NoSuchDistribution", - "CannotClaimBeforeStart", - "CannotClaimAfterExpiry", - "BalancePerShareProductOverflowed", - "NotDistributionCreator", - "AlreadyReclaimed", - "NotExpired", - "DistributionStarted", - "InsufficientRemainingAmount" - ] - }, - "CheckpointError": { - "_enum": [ - "NoSuchSchedule", - "ScheduleNotRemovable", - "FailedToComputeNextCheckpoint", - "ScheduleDurationTooShort", - "SchedulesTooComplex" - ] - }, - "ComplianceManagerError": { - "_enum": [ - "Unauthorized", - "DidNotExist", - "InvalidComplianceRequirementId", - "IncorrectOperationOnTrustedIssuer", - "DuplicateComplianceRequirements", - "ComplianceRequirementTooComplex" - ] - }, - "CorporateActionError": { - "_enum": [ - "DetailsTooLong", - "DuplicateDidTax", - "TooManyDidTaxes", - "TooManyTargetIds", - "NoSuchCheckpointId", - "NoSuchCA", - "NoRecordDate", - "RecordDateAfterStart", - "DeclDateAfterRecordDate", - "DeclDateInFuture", - "NotTargetedByCA" - ] - }, - "CorporateBallotError": { - "_enum": [ - "CANotNotice", - "AlreadyExists", - "NoSuchBallot", - "StartAfterEnd", - "NowAfterEnd", - "NumberOfChoicesOverflow", - "VotingAlreadyStarted", - "VotingNotStarted", - "VotingAlreadyEnded", - "WrongVoteCount", - "InsufficientVotes", - "NoSuchRCVFallback", - "RCVSelfCycle", - "RCVNotAllowed" - ] - }, - "PermissionsError": { - "_enum": [ - "UnauthorizedCaller" - ] - }, - "PipsError": { - "_enum": [ - "RescheduleNotByReleaseCoordinator", - "NotFromCommunity", - "NotByCommittee", - "TooManyActivePips", - "IncorrectDeposit", - "InsufficientDeposit", - "NoSuchProposal", - "NotACommitteeMember", - "InvalidFutureBlockNumber", - "NumberOfVotesExceeded", - "StakeAmountOfVotesExceeded", - "MissingCurrentIdentity", - "IncorrectProposalState", - "CannotSkipPip", - "SnapshotResultTooLarge", - "SnapshotIdMismatch", - "ScheduledProposalDoesntExist", - "ProposalNotInScheduledState" - ] - }, - "PortfolioError": { - "_enum": [ - "PortfolioDoesNotExist", - "InsufficientPortfolioBalance", - "DestinationIsSamePortfolio", - "PortfolioNameAlreadyInUse", - "SecondaryKeyNotAuthorizedForPortfolio", - "UnauthorizedCustodian", - "InsufficientTokensLocked", - "PortfolioNotEmpty", - "DifferentIdentityPortfolios" - ] - }, - "ProtocolFeeError": { - "_enum": [ - "InsufficientAccountBalance", - "UnHandledImbalances", - "InsufficientSubsidyBalance" - ] - }, - "SchedulerError": { - "_enum": [ - "FailedToSchedule", - "NotFound", - "TargetBlockNumberInPast", - "RescheduleNoChange" - ] - }, - "SettlementError": { - "_enum": [ - "InvalidVenue", - "Unauthorized", - "NoPendingAffirm", - "InstructionNotAffirmed", - "InstructionNotPending", - "InstructionNotFailed", - "LegNotPending", - "UnauthorizedSigner", - "ReceiptAlreadyClaimed", - "ReceiptNotClaimed", - "UnauthorizedVenue", - "FailedToLockTokens", - "InstructionFailed", - "InstructionDatesInvalid", - "InstructionSettleBlockPassed", - "InvalidSignature", - "SameSenderReceiver", - "PortfolioMismatch", - "SettleOnPastBlock", - "NoPortfolioProvided", - "UnexpectedAffirmationStatus", - "FailedToSchedule", - "LegCountTooSmall", - "UnknownInstruction", - "InstructionHasTooManyLegs" - ] - }, - "StatisticsError": { - "_enum": [ - "DuplicateTransferManager", - "TransferManagerMissing", - "InvalidTransfer", - "TransferManagersLimitReached" - ] - }, - "StoError": { - "_enum": [ - "Unauthorized", - "Overflow", - "InsufficientTokensRemaining", - "FundraiserNotFound", - "FundraiserNotLive", - "FundraiserClosed", - "FundraiserExpired", - "InvalidVenue", - "InvalidPriceTiers", - "InvalidOfferingWindow", - "MaxPriceExceeded", - "InvestmentAmountTooLow" - ] - }, - "TreasuryError": { - "_enum": [ - "InsufficientBalance" - ] - }, - "UtilityError": { - "_enum": [ - "InvalidSignature", - "TargetCddMissing", - "InvalidNonce" - ] - }, - "BaseError": { - "_enum": [ - "TooLong", - "CounterOverflow" - ] - }, - "ExternalAgentsError": { - "_enum": [ - "NoSuchAG", - "UnauthorizedAgent", - "AlreadyAnAgent", - "NotAnAgent", - "RemovingLastFullAgent", - "SecondaryKeyNotAuthorizedForAsset" - ] - }, - "RelayerError": { - "_enum": [ - "UserKeyCddMissing", - "PayingKeyCddMissing", - "NoPayingKey", - "NotPayingKey", - "NotAuthorizedForPayingKey", - "NotAuthorizedForUserKey", - "Overflow" - ] - }, - "RewardsError": { - "_enum": [ - "UnknownItnAddress", - "ItnRewardAlreadyClaimed", - "InvalidSignature", - "UnableToCovertBalance" - ] - }, - "DispatchErrorModule": { - "_enum": { - "System": "SystemError", - "Babe": "ModuleNoErrors", - "Timestamp": "ModuleNoErrors", - "Indices": "ModuleNoErrors", - "Authorship": "AuthorshipError", - "Balances": "BalancesError", - "TransactionPayment": "ModuleNoErrors", - "Identity": "IdentityError", - "CddServiceProviders": "CddServiceProvidersError", - "PolymeshCommittee": "PolymeshCommitteeError", - "CommitteeMembership": "CommitteeMembershipError", - "TechnicalCommittee": "TechnicalCommitteeError", - "TechnicalCommitteeMembership": "TechnicalCommitteeMembershipError", - "UpgradeCommittee": "UpgradeCommitteeError", - "UpgradeCommitteeMembership": "UpgradeCommitteeMembershipError", - "MultiSig": "MultiSigError", - "Bridge": "BridgeError", - "Staking": "StakingError", - "Offences": "ModuleNoErrors", - "Session": "SessionError", - "AuthorityDiscovery": "ModuleNoErrors", - "Grandpa": "GrandpaError", - "Historical": "ModuleNoErrors", - "ImOnline": "ImOnlineError", - "RandomnessCollectiveFlip": "ModuleNoErrors", - "Sudo": "SudoError", - "Asset": "AssetError", - "CapitalDistribution": "CapitalDistributionError", - "Checkpoint": "CheckpointError", - "ComplianceManager": "ComplianceManagerError", - "CorporateAction": "CorporateActionError", - "CorporateBallot": "CorporateBallotError", - "Permissions": "PermissionsError", - "Pips": "PipsError", - "Portfolio": "PortfolioError", - "ProtocolFee": "ProtocolFeeError", - "Scheduler": "SchedulerError", - "Settlement": "SettlementError", - "Statistics": "StatisticsError", - "Sto": "StoError", - "Treasury": "TreasuryError", - "Utility": "UtilityError", - "Base": "BaseError", - "ExternalAgents": "ExternalAgentsError", - "Relayer": "RelayerError", - "Rewards": "RewardsError", - "InvalidModule46": "InvalidModuleError", - "InvalidModule47": "InvalidModuleError", - "InvalidModule48": "InvalidModuleError", - "InvalidModule49": "InvalidModuleError", - "TestUtils": "ModuleNoErrors" - } - } -} diff --git a/init_hooks.sh b/init_hooks.sh deleted file mode 100755 index 9481b357a6..0000000000 --- a/init_hooks.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env sh -set -x -# Make sure we're in this script's directory -pushd $(dirname $0) -ln -sf $PWD/scripts/pre-commit-substrate.sh .git/hooks/pre-commit -popd diff --git a/package.json b/package.json deleted file mode 100644 index dbbf124d7d..0000000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "@polymeshassociation/polymesh-rust-docs": "./workers-site/" - } -} diff --git a/pi-build.sh b/pi-build.sh deleted file mode 100755 index 7a2918757f..0000000000 --- a/pi-build.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -# Run this script from the directory with the Cargo project. -cd pi - -docker build . -t "pimesh" - -cd .. - -docker run --rm -it \ - --env BINDGEN_EXTRA_CLANG_ARGS="--sysroot=/usr/arm-linux-gnueabihf -D__ARM_PCS_VFP -mfpu=vfp -mfloat-abi=hard" \ - --env CARGO_HOME=/home/rust/src/cargo_home \ - -v "$(pwd)":/home/rust/src pimesh \ - cargo build --target=armv7-unknown-linux-gnueabihf --release diff --git a/pi/Dockerfile b/pi/Dockerfile deleted file mode 100644 index c3279b2110..0000000000 --- a/pi/Dockerfile +++ /dev/null @@ -1,48 +0,0 @@ -# Original source: https://gist.github.com/pepyakin/2ff227c2d837a2eacd8d3879d5e0c94f -# Includes some customizations for polymesh - -FROM rust:latest - -RUN dpkg --add-architecture armhf && \ - apt-get update && apt-get upgrade -y && \ - apt-get install -y aptitude && \ - aptitude install -y \ - gcc-arm-linux-gnueabihf \ - g++-arm-linux-gnueabihf \ - pkg-config \ - cmake \ - libssl-dev \ - git \ - clang \ - libclang-dev \ - libssl-dev:armhf - -# Install nightly with w32-u-u and add arvm7 to stable -RUN rustup target add armv7-unknown-linux-gnueabihf -RUN rustup install nightly-2020-04-17 && \ - rustup target add wasm32-unknown-unknown --toolchain nightly-2020-04-17 &&\ - cargo +nightly-2020-04-17 install --git https://github.com/alexcrichton/wasm-gc --force - -# Hack to use an older version of nightly with cargo +nightly -RUN mv /usr/local/rustup/toolchains/nightly-2020-04-17-x86_64-unknown-linux-gnu /usr/local/rustup/toolchains/nightly-x86_64-unknown-linux-gnu - -ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER arm-linux-gnueabihf-gcc -ENV PKG_CONFIG_ALLOW_CROSS 1 -ENV PKG_CONFIG_PATH /usr/lib/arm-linux-gnueabihf/pkgconfig/ - - -# Disallow the `pkg-config` crate to look for the config for zlib, because build.rs of `libz-sys` -# gets confused and pulls the system-wide library (i.e. of the host) instead of the target when -# cross-compiling. This essentially leads to static linking of zlib. -# -# Alternatively, we can supply LIBZ_SYS_STATIC=1. Weirdly enough, installing libgtk-3-dev:armhf -# also solves the problem somehow. -# -# Here is the related issue: https://github.com/rust-lang/libz-sys/issues/49 -ENV ZLIB_NO_PKG_CONFIG 1 - -# This is for compiling GUI apps. -# RUN aptitude install -y libasound2-dev:armhf libgtk-3-dev:armhf libsdl2-dev:armhf - -RUN useradd rust --user-group --create-home --shell /bin/bash --groups sudo -WORKDIR /home/rust/src diff --git a/scripts/bd.sh b/scripts/bd.sh deleted file mode 100755 index c91f85740d..0000000000 --- a/scripts/bd.sh +++ /dev/null @@ -1,15 +0,0 @@ -#! /bin/bash - -pallet=$1 -extrinsic=$2 - -if [[ -z "${pallet}" ]]; then - pallet="*" -fi - -if [[ -z "${extrinsic}" ]]; then - extrinsic="*" -fi - -cargo build --release --features=runtime-benchmarks,running-ci && \ -./target/release/polymesh benchmark pallet -p=${pallet} -e=${extrinsic} -r=1 -s=1 diff --git a/scripts/bench.sh b/scripts/bench.sh deleted file mode 100755 index 5065e39e6b..0000000000 --- a/scripts/bench.sh +++ /dev/null @@ -1,10 +0,0 @@ -#! /bin/bash - -pallet=$1 - -if [[ -z "${pallet}" ]]; then - pallet="*" -fi - -cargo build --release --features=runtime-benchmarks && \ -./target/release/polymesh benchmark pallet -p=${pallet} -e=* -s 200 -r 10 --execution Wasm --wasm-execution Compiled --output ${pallet}.rs diff --git a/scripts/cargo-check.sh b/scripts/cargo-check.sh deleted file mode 100755 index 5aa5e0739c..0000000000 --- a/scripts/cargo-check.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash -set -e - -script_dir=$(dirname $0) -pushd $script_dir/../ 1>/dev/null - # Do linting, the custom script has to account for wasm gimmicks - cargo check || (echo "cargo-check FAIL" && false) - echo cargo-check OK -popd 1>/dev/null diff --git a/scripts/cargo-test.sh b/scripts/cargo-test.sh deleted file mode 100755 index 12725e99d8..0000000000 --- a/scripts/cargo-test.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash -set -e - -script_dir=$(dirname $0) -pushd $script_dir/../runtime 1>/dev/null - if [ -z "${VERBOSE-}" ] ; then - cargo test || (echo "cargo-test FAIL" && false) - echo cargo-test OK - else # rustfmt output not suppresed - cargo test -- --nocapture || (echo "cargo-test FAIL" && false) - echo cargo-test OK - fi -popd 1>/dev/null diff --git a/scripts/copy-schema.sh b/scripts/copy-schema.sh deleted file mode 100755 index 710cef6889..0000000000 --- a/scripts/copy-schema.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -# Copies schema to the clipboard -# To run, call it from root dire of the repo: ./scripts/copy-schema.sh -# Must have jq and xclip installed. Works on Linux systems -# There are xlicp alternatives for mac and windows available -cat polymesh_schema.json | jq '.types' | xclip -sel clip diff --git a/scripts/fmt.sh b/scripts/fmt.sh deleted file mode 100755 index 85703362d3..0000000000 --- a/scripts/fmt.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -find . -name "Cargo.toml" -not -path "*/target/*" -not -path "*/external/*" -not -path "*/pallets/staking/fuzzer/*" -execdir bash -c "cargo fmt" \; diff --git a/scripts/migration-tests.sh b/scripts/migration-tests.sh deleted file mode 100755 index a7f114cb88..0000000000 --- a/scripts/migration-tests.sh +++ /dev/null @@ -1 +0,0 @@ -BUILD_DUMMY_WASM_BINARY=1 cargo test -p migration-tests --lib -- --nocapture diff --git a/scripts/noop.sh b/scripts/noop.sh deleted file mode 100755 index 18b010d6d1..0000000000 --- a/scripts/noop.sh +++ /dev/null @@ -1 +0,0 @@ -cargo run --release -p node-bench -- ::node::import::wasm::sr25519::noop::rocksdb::custom --transactions 100 diff --git a/scripts/pre-commit-substrate.sh b/scripts/pre-commit-substrate.sh deleted file mode 100755 index 07770ab6db..0000000000 --- a/scripts/pre-commit-substrate.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -# Aggregated pre-commit checks of polymesh Rust code -set -e - -# This particular script needs to work in and out of git context -#script_dir=${GIT_WORK_TREE:=$(dirname $0)/..} -root_dir=$(git rev-parse --git-dir)/.. - -$root_dir/scripts/rustfmt.sh -$root_dir/scripts/cargo-check.sh -$root_dir/scripts/cargo-test.sh diff --git a/scripts/receipt.sh b/scripts/receipt.sh deleted file mode 100755 index 26d9485907..0000000000 --- a/scripts/receipt.sh +++ /dev/null @@ -1 +0,0 @@ -SKIP_WASM_BUILD=true cargo test --package polymesh-runtime-common encode_receipt -- --nocapture diff --git a/scripts/rustc.sh b/scripts/rustc.sh deleted file mode 100755 index 1dc4905b14..0000000000 --- a/scripts/rustc.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -"$@" -D warnings diff --git a/scripts/transfers-bench.sh b/scripts/transfers-bench.sh deleted file mode 100755 index d0fe1425d9..0000000000 --- a/scripts/transfers-bench.sh +++ /dev/null @@ -1 +0,0 @@ -cargo run --release -p node-bench -- ::node::import::wasm::sr25519::transfer::rocksdb::custom --transactions 100 diff --git a/utils/permissions/Cargo.toml b/utils/permissions/Cargo.toml deleted file mode 100644 index aec704fd4f..0000000000 --- a/utils/permissions/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "permissions" -version = "0.1.0" -authors = ["PolymeshAssociation"] -edition = "2021" - -[dependencies] -scraper = "0.12" -regex = "1" -lazy_static = "1" \ No newline at end of file diff --git a/utils/permissions/src/doc_parser/enums.rs b/utils/permissions/src/doc_parser/enums.rs deleted file mode 100644 index 7c400d9f7e..0000000000 --- a/utils/permissions/src/doc_parser/enums.rs +++ /dev/null @@ -1,68 +0,0 @@ -use lazy_static::lazy_static; -use regex::Regex; -use scraper::{ElementRef, Html, Selector}; - -lazy_static! { - static ref VARIANT_REGEX: Regex = Regex::new(r#"variant\.(.+)\.fields"#).unwrap(); -} - -#[derive(Debug)] -pub struct EnumDoc { - pub variants: Vec, -} - -#[derive(Debug)] -pub struct Variant { - pub name: String, - pub doc_block: Html, -} - -pub struct EnumDocParser { - html: Html, -} - -impl EnumDocParser { - pub fn parse(html: Html) -> Option { - let parser = Self { html }; - Some(EnumDoc { - variants: parser.parse_all_variants(), - }) - } - - fn parse_all_variants(&self) -> Vec { - let all_div_selector = Selector::parse("div").unwrap(); - let all_divs: Vec = self.html.select(&all_div_selector).collect(); - - all_divs - .iter() - .enumerate() - .filter_map(|(i, _)| self.parse_variant(&all_divs, i)) - .collect() - } - - fn parse_variant(&self, all_divs: &[ElementRef], index: usize) -> Option { - let variant_div = all_divs[index]; - // Look for a variant div and parse the name - let name = VARIANT_REGEX - .captures(variant_div.value().id()?)? - .get(1)? - .as_str() - .to_owned(); - - // Check for a doc block associated with the above variant - let doc_block = all_divs[index + 1..] - .iter() - // Stop iterating once we hit the next variant - .take_while(|div| { - div.value() - .id() - .map(|id| !VARIANT_REGEX.is_match(id)) - .unwrap_or(true) - }) - .filter(|div| div.value().classes.iter().any(|s| s == "docblock")) - .map(|div| Html::parse_document(&div.html())) - .next()?; - - Some(Variant { name, doc_block }) - } -} diff --git a/utils/permissions/src/doc_parser/mod.rs b/utils/permissions/src/doc_parser/mod.rs deleted file mode 100644 index e4e9fda934..0000000000 --- a/utils/permissions/src/doc_parser/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod enums; diff --git a/utils/permissions/src/main.rs b/utils/permissions/src/main.rs deleted file mode 100644 index 6455ed4a1b..0000000000 --- a/utils/permissions/src/main.rs +++ /dev/null @@ -1,146 +0,0 @@ -/// # Overview -/// The intended purpose of this script is to parse the permissions of individual extrinsics. -/// Extrinsics are documented as variants of a `Call` enum located at the root of the pallet. -/// The output is in CSV in the following format `, , , ...` -/// -/// # Usage -/// Build a fresh version of the rustdoc -/// ``` -/// cargo doc -/// ``` -/// -/// Run the script -/// ``` -/// cargo run --package permissions --bin permissions -/// ``` -use crate::doc_parser::enums::{EnumDoc, EnumDocParser}; -use regex::Regex; -use scraper::{Html, Selector}; -use std::collections::BTreeMap; -use std::fs::{read_dir, File}; -use std::io::Read; - -mod doc_parser; - -type PalletName = String; -type ExtrinsicName = String; -type Permissions = Vec; - -fn main() { - assert!( - std::env::current_dir() - .ok() - .map(|dir| dir.join("target/doc").exists()) - .unwrap_or(false), - "can't find target directory! try running in project root" - ); - - let pallets_regex = Regex::new("target/doc/pallet_.*").unwrap(); - - let mut permission_mappings: BTreeMap> = - BTreeMap::new(); - - // read the docs of all crates in target that match a regex. - read_dir("target/doc") - .expect("dir does not exist") - .into_iter() - .filter_map(|entry| entry.ok().map(|entry| entry.path())) - // check path is a ref to a pallet. - .filter(|path| { - path.to_str() - .map(|str| pallets_regex.is_match(str)) - .unwrap_or(false) - }) - .filter_map(|path| { - path.file_name() - .and_then(|name| name.to_str().map(|s| s.to_owned())) - .map(|name| (name, path.join("enum.Call.html"))) - }) - .filter_map(|(pallet, path)| File::open(&path).ok().map(|f| (pallet, f))) - .filter_map(|(pallet, mut file)| { - let mut text = String::new(); - file.read_to_string(&mut text).ok().map(|_| (pallet, text)) - }) - .filter(|(_, text)| !text.is_empty()) - .filter_map(|(pallet, text)| { - EnumDocParser::parse(Html::parse_document(&text)).map(|doc| (pallet, doc)) - }) - .for_each(|(pallet, doc)| { - *permission_mappings - .entry(pallet.clone()) - .or_insert(Default::default()) = parse_permissions(doc); - }); - - permission_mappings - .into_iter() - .for_each(|(pallet, mapping)| { - mapping - .into_iter() - .for_each(|(extrinsic, mut permissions)| { - if permissions.is_empty() { - permissions.push("None".into()); - } - println!("{},{},{}", pallet, extrinsic, permissions.join(",")); - }) - }); -} - -fn parse_permissions(doc: EnumDoc) -> BTreeMap { - let heading_selector = Selector::parse("h1,h2").unwrap(); - let ul_selector = Selector::parse("ul").unwrap(); - let li_selector = Selector::parse("li").unwrap(); - let is_heading = |child| heading_selector.matches(&child); - - let mut permissions = BTreeMap::new(); - doc.variants - .iter() - // Find the div that contains the content of the doc block - .filter_map(|variant| { - variant - .doc_block - .select(&Selector::parse("div.docblock").unwrap()) - .next() - .map(|div| (variant.name.clone(), div)) - }) - .for_each(|(extrinsic, doc_block_div)| { - permissions - .entry(extrinsic.clone()) - .or_insert(Permissions::new()); - - // Collect all children of the doc block, which in practice is the content of the doc block - let children: Vec<_> = doc_block_div - .select(&Selector::parse("*").unwrap()) - .collect(); - - children - .iter() - .enumerate() - .filter(|(_, child)| is_heading(**child)) - // Check if the heading is `Permissions` - .filter(|(_, child)| { - child - .value() - .id() - .map(|s| s.starts_with("permissions")) - .unwrap_or(false) - }) - // Look for a ul in the contents before the next heading - .for_each(|(i, _)| { - children[i + 1..] - .iter() - // Stop once we hit another heading - .take_while(|element| !is_heading(**element)) - .filter(|element| ul_selector.matches(element)) - .next() - .map(|ul| { - ul.select(&li_selector) - .map(|element| element.text().collect::()) - .for_each(|permission| { - permissions.get_mut(&extrinsic).unwrap().push(permission) - }) - }); - }) - }); - - permissions -} diff --git a/workers-site/.cargo-ok b/workers-site/.cargo-ok deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/workers-site/.gitignore b/workers-site/.gitignore deleted file mode 100644 index 7915249fd6..0000000000 --- a/workers-site/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -dist -worker diff --git a/workers-site/index.js b/workers-site/index.js deleted file mode 100644 index 54231d16bc..0000000000 --- a/workers-site/index.js +++ /dev/null @@ -1,87 +0,0 @@ -import { - getAssetFromKV, - mapRequestToAsset, -} from "@cloudflare/kv-asset-handler"; - -/** - * The DEBUG flag will do two things that help during development: - * 1. we will skip caching on the edge, which makes it easier to - * debug. - * 2. we will return an error message on exception in your Response rather - * than the default 404.html page. - */ -const DEBUG = false; - -addEventListener("fetch", (event) => { - event.respondWith(handleEvent(event)); -}); - -async function handleEvent(event) { - let options = {}; - - /** - * You can add custom logic to how we fetch your assets - * by configuring the function `mapRequestToAsset` - */ - // options.mapRequestToAsset = handlePrefix(/^\/docs/) - - try { - if (DEBUG) { - // customize caching - options.cacheControl = { - bypassCache: true, - }; - } - - const page = await getAssetFromKV(event, options); - - // allow headers to be altered - const response = new Response(page.body, page); - - response.headers.set("X-XSS-Protection", "1; mode=block"); - response.headers.set("X-Content-Type-Options", "nosniff"); - response.headers.set("X-Frame-Options", "DENY"); - response.headers.set("Referrer-Policy", "unsafe-url"); - response.headers.set("Feature-Policy", "none"); - - return response; - } catch (e) { - // if an error is thrown try to serve the asset at 404.html - if (!DEBUG) { - try { - let notFoundResponse = await getAssetFromKV(event, { - mapRequestToAsset: (req) => - new Request(`${new URL(req.url).origin}/404.html`, req), - }); - - return new Response(notFoundResponse.body, { - ...notFoundResponse, - status: 404, - }); - } catch (e) {} - } - - return new Response(e.message || e.toString(), { status: 500 }); - } -} - -/** - * Here's one example of how to modify a request to - * remove a specific prefix, in this case `/docs` from - * the url. This can be useful if you are deploying to a - * route on a zone, or if you only want your static content - * to exist at a specific path. - */ -function handlePrefix(prefix) { - return (request) => { - // compute the default (e.g. / -> index.html) - let defaultAssetKey = mapRequestToAsset(request); - let url = new URL(defaultAssetKey.url); - - // strip the prefix from the path for lookup - url.pathname = url.pathname.replace(prefix, "/"); - - // inherit all other props from the default request - return new Request(url.toString(), defaultAssetKey); - }; -} diff --git a/workers-site/package.json b/workers-site/package.json deleted file mode 100644 index ffd0de70d0..0000000000 --- a/workers-site/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "private": true, - "name": "@polymeshassociation/polymesh-rust-docs", - "version": "1.0.0", - "description": "Polymesh Rust docs on Cloudflare Workers", - "main": "index.js", - "dependencies": { - "@cloudflare/kv-asset-handler": "^0.2.0", - "wrangler": "^2.20.1" - } -} diff --git a/wrangler.toml b/wrangler.toml deleted file mode 100644 index d1284ffc0d..0000000000 --- a/wrangler.toml +++ /dev/null @@ -1,7 +0,0 @@ -name = "polymesh-docs" -workers_dev = true -main = "workers-site/index.js" -compatibility_date = "2023-03-24" - -[site] -bucket = "./target/doc" diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index e5e46a6430..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,862 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@cloudflare/kv-asset-handler@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz#c9959bbd7a1c40bd7c674adae98aa8c8d0e5ca68" - integrity sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A== - dependencies: - mime "^3.0.0" - -"@esbuild-plugins/node-globals-polyfill@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz#a313ab3efbb2c17c8ce376aa216c627c9b40f9d7" - integrity sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg== - -"@esbuild-plugins/node-modules-polyfill@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz#eb2f55da11967b2986c913f1a7957d1c868849c0" - integrity sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg== - dependencies: - escape-string-regexp "^4.0.0" - rollup-plugin-node-polyfills "^0.2.1" - -"@esbuild/android-arm64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.3.tgz#6af6d16be6d534d776a51fc215bfd81a68906d2c" - integrity sha512-RolFVeinkeraDvN/OoRf1F/lP0KUfGNb5jxy/vkIMeRRChkrX/HTYN6TYZosRJs3a1+8wqpxAo5PI5hFmxyPRg== - -"@esbuild/android-arm@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.3.tgz#2a091222f3b1928e3246fb3c5202eaca88baab67" - integrity sha512-mueuEoh+s1eRbSJqq9KNBQwI4QhQV6sRXIfTyLXSHGMpyew61rOK4qY21uKbXl1iBoMb0AdL1deWFCQVlN2qHA== - -"@esbuild/android-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.3.tgz#a6d749c58b022d371dc40d50ac1bb4aebd1eb953" - integrity sha512-SFpTUcIT1bIJuCCBMCQWq1bL2gPTjWoLZdjmIhjdcQHaUfV41OQfho6Ici5uvvkMmZRXIUGpM3GxysP/EU7ifQ== - -"@esbuild/darwin-arm64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.3.tgz#92d1826ed2f21dcac5830b70d7215c6afbb744e2" - integrity sha512-DO8WykMyB+N9mIDfI/Hug70Dk1KipavlGAecxS3jDUwAbTpDXj0Lcwzw9svkhxfpCagDmpaTMgxWK8/C/XcXvw== - -"@esbuild/darwin-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.3.tgz#7fc3570c2b16e9ff4fc178593a0a4adb1ae8ea57" - integrity sha512-uEqZQ2omc6BvWqdCiyZ5+XmxuHEi1SPzpVxXCSSV2+Sh7sbXbpeNhHIeFrIpRjAs0lI1FmA1iIOxFozKBhKgRQ== - -"@esbuild/freebsd-arm64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.3.tgz#16735ce16f8c9a4e7289e9e259aa01a8d9874307" - integrity sha512-nJansp3sSXakNkOD5i5mIz2Is/HjzIhFs49b1tjrPrpCmwgBmH9SSzhC/Z1UqlkivqMYkhfPwMw1dGFUuwmXhw== - -"@esbuild/freebsd-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.3.tgz#f4edd1464cb072799ed6b8ab5178478e71c13459" - integrity sha512-TfoDzLw+QHfc4a8aKtGSQ96Wa+6eimljjkq9HKR0rHlU83vw8aldMOUSJTUDxbcUdcgnJzPaX8/vGWm7vyV7ug== - -"@esbuild/linux-arm64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.3.tgz#4b7ae6fe3618d9a40d6ca39c6edc991ac1447203" - integrity sha512-7I3RlsnxEFCHVZNBLb2w7unamgZ5sVwO0/ikE2GaYvYuUQs9Qte/w7TqWcXHtCwxvZx/2+F97ndiUQAWs47ZfQ== - -"@esbuild/linux-arm@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.3.tgz#4b3e9f849822e16a76a70844c4db68075b259a58" - integrity sha512-VwswmSYwVAAq6LysV59Fyqk3UIjbhuc6wb3vEcJ7HEJUtFuLK9uXWuFoH1lulEbE4+5GjtHi3MHX+w1gNHdOWQ== - -"@esbuild/linux-ia32@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.3.tgz#2ff3936b91bfff62f9ecf7f6411ef399b29ed22d" - integrity sha512-X8FDDxM9cqda2rJE+iblQhIMYY49LfvW4kaEjoFbTTQ4Go8G96Smj2w3BRTwA8IHGoi9dPOPGAX63dhuv19UqA== - -"@esbuild/linux-loong64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.3.tgz#ff8aa59f49d9ccbc1ff952ba1f5cd01a534562df" - integrity sha512-hIbeejCOyO0X9ujfIIOKjBjNAs9XD/YdJ9JXAy1lHA+8UXuOqbFe4ErMCqMr8dhlMGBuvcQYGF7+kO7waj2KHw== - -"@esbuild/linux-mips64el@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.3.tgz#5dd5e118071c3912df69beedbfd11fb117f0fe5e" - integrity sha512-znFRzICT/V8VZQMt6rjb21MtAVJv/3dmKRMlohlShrbVXdBuOdDrGb+C2cZGQAR8RFyRe7HS6klmHq103WpmVw== - -"@esbuild/linux-ppc64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.3.tgz#36c62e24eae7fa3f0d921506da8fc1e6098a1364" - integrity sha512-EV7LuEybxhXrVTDpbqWF2yehYRNz5e5p+u3oQUS2+ZFpknyi1NXxr8URk4ykR8Efm7iu04//4sBg249yNOwy5Q== - -"@esbuild/linux-riscv64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.3.tgz#f0fec8e7affb5bcc817fefc61a21cbb95539e393" - integrity sha512-uDxqFOcLzFIJ+r/pkTTSE9lsCEaV/Y6rMlQjUI9BkzASEChYL/aSQjZjchtEmdnVxDKETnUAmsaZ4pqK1eE5BQ== - -"@esbuild/linux-s390x@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.3.tgz#22e10edd6e91f53c2e1f60e46abd453d7794409b" - integrity sha512-NbeREhzSxYwFhnCAQOQZmajsPYtX71Ufej3IQ8W2Gxskfz9DK58ENEju4SbpIj48VenktRASC52N5Fhyf/aliQ== - -"@esbuild/linux-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.3.tgz#38388b73fd9eebe45b073d7d8099b9c2e54f7139" - integrity sha512-SDiG0nCixYO9JgpehoKgScwic7vXXndfasjnD5DLbp1xltANzqZ425l7LSdHynt19UWOcDjG9wJJzSElsPvk0w== - -"@esbuild/netbsd-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.3.tgz#e0270569567f1530b8dbe6d11d5b4930b9cc71ae" - integrity sha512-AzbsJqiHEq1I/tUvOfAzCY15h4/7Ivp3ff/o1GpP16n48JMNAtbW0qui2WCgoIZArEHD0SUQ95gvR0oSO7ZbdA== - -"@esbuild/openbsd-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.3.tgz#3b16642d443848bca605f33ee3978a1890911e6d" - integrity sha512-gSABi8qHl8k3Cbi/4toAzHiykuBuWLZs43JomTcXkjMZVkp0gj3gg9mO+9HJW/8GB5H89RX/V0QP4JGL7YEEVg== - -"@esbuild/sunos-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.3.tgz#a838f247867380f0ae25ce1936dc5ab6f57b7734" - integrity sha512-SF9Kch5Ete4reovvRO6yNjMxrvlfT0F0Flm+NPoUw5Z4Q3r1d23LFTgaLwm3Cp0iGbrU/MoUI+ZqwCv5XJijCw== - -"@esbuild/win32-arm64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.3.tgz#bedd9bef5fb41f89ce2599f1761973cf6d6a67b6" - integrity sha512-u5aBonZIyGopAZyOnoPAA6fGsDeHByZ9CnEzyML9NqntK6D/xl5jteZUKm/p6nD09+v3pTM6TuUIqSPcChk5gg== - -"@esbuild/win32-ia32@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.3.tgz#49800aa812d8cc35ceef61e8d3b01224684cc0b1" - integrity sha512-GlgVq1WpvOEhNioh74TKelwla9KDuAaLZrdxuuUgsP2vayxeLgVc+rbpIv0IYF4+tlIzq2vRhofV+KGLD+37EQ== - -"@esbuild/win32-x64@0.16.3": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.3.tgz#94047dae921949cfb308117d993c4b941291ae10" - integrity sha512-5/JuTd8OWW8UzEtyf19fbrtMJENza+C9JoPIkvItgTBQ1FO2ZLvjbPO6Xs54vk0s5JB5QsfieUEshRQfu7ZHow== - -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - -"@iarna/toml@^2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" - integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== - -"@miniflare/cache@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/cache/-/cache-2.14.4.tgz#3b3e6b2fba9055d8e0deacc175aacef33c402765" - integrity sha512-ayzdjhcj+4mjydbNK7ZGDpIXNliDbQY4GPcY2KrYw0v1OSUdj5kZUkygD09fqoGRfAks0d91VelkyRsAXX8FQA== - dependencies: - "@miniflare/core" "2.14.4" - "@miniflare/shared" "2.14.4" - http-cache-semantics "^4.1.0" - undici "5.28.4" - -"@miniflare/cli-parser@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/cli-parser/-/cli-parser-2.14.4.tgz#282197bc3611d5354ffe3f4d8cbfb046bde2a677" - integrity sha512-ltc6DDg0Sb1ZI6zbaPf9+CJbpRQXOLoCZqUdwtQyWCdZpAYQCT3tOeN19/tJC/uuL8NHj+EWKQIQriDYwp6uYQ== - dependencies: - "@miniflare/shared" "2.14.4" - kleur "^4.1.4" - -"@miniflare/core@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/core/-/core-2.14.4.tgz#2088e4e99b698a0434f0ee720af86f1122a334da" - integrity sha512-FMmZcC1f54YpF4pDWPtdQPIO8NXfgUxCoR9uyrhxKJdZu7M6n8QKopPVNuaxR40jcsdxb7yKoQoFWnHfzJD9GQ== - dependencies: - "@iarna/toml" "^2.2.5" - "@miniflare/queues" "2.14.4" - "@miniflare/shared" "2.14.4" - "@miniflare/watcher" "2.14.4" - busboy "^1.6.0" - dotenv "^10.0.0" - kleur "^4.1.4" - set-cookie-parser "^2.4.8" - undici "5.28.4" - urlpattern-polyfill "^4.0.3" - -"@miniflare/d1@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/d1/-/d1-2.14.4.tgz#41c36ec5fd6cd4a5dbde0fcf2933bf45322fa9ff" - integrity sha512-pMBVq9XWxTDdm+RRCkfXZP+bREjPg1JC8s8C0JTovA9OGmLQXqGTnFxIaS9vf1d8k3uSUGhDzPTzHr0/AUW1gA== - dependencies: - "@miniflare/core" "2.14.4" - "@miniflare/shared" "2.14.4" - -"@miniflare/durable-objects@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/durable-objects/-/durable-objects-2.14.4.tgz#a303a754a7f9141f757a409cefddaadf85e83333" - integrity sha512-+JrmHP6gHHrjxV8S3axVw5lGHLgqmAGdcO/1HJUPswAyJEd3Ah2YnKhpo+bNmV4RKJCtEq9A2hbtVjBTD2YzwA== - dependencies: - "@miniflare/core" "2.14.4" - "@miniflare/shared" "2.14.4" - "@miniflare/storage-memory" "2.14.4" - undici "5.28.4" - -"@miniflare/html-rewriter@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/html-rewriter/-/html-rewriter-2.14.4.tgz#58984bcbf287cb1eeb896dafd73d8bbc7fc072e3" - integrity sha512-GB/vZn7oLbnhw+815SGF+HU5EZqSxbhIa3mu2L5MzZ2q5VOD5NHC833qG8c2GzDPhIaZ99ITY+ZJmbR4d+4aNQ== - dependencies: - "@miniflare/core" "2.14.4" - "@miniflare/shared" "2.14.4" - html-rewriter-wasm "^0.4.1" - undici "5.28.4" - -"@miniflare/http-server@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/http-server/-/http-server-2.14.4.tgz#105576933960174d10f48b0b5957d0ee6a63f6f2" - integrity sha512-2YrJi4o5Jf1FdT2XvdPCgaYpxuai7jn6Z1k5pgL1+s2qIaXr/uShceBLjJjEf3jz+daDxwmB1+BP0xyO/Cu4+g== - dependencies: - "@miniflare/core" "2.14.4" - "@miniflare/shared" "2.14.4" - "@miniflare/web-sockets" "2.14.4" - kleur "^4.1.4" - selfsigned "^2.0.0" - undici "5.28.4" - ws "^8.2.2" - youch "^2.2.2" - -"@miniflare/kv@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/kv/-/kv-2.14.4.tgz#e59247d9a466eae53d7ebde092424ba42f517a34" - integrity sha512-QlERH0Z+klwLg0xw+/gm2yC34Nnr/I0GcQ+ASYqXeIXBwjqOtMBa3YVQnocaD+BPy/6TUtSpOAShHsEj76R2uw== - dependencies: - "@miniflare/shared" "2.14.4" - -"@miniflare/queues@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/queues/-/queues-2.14.4.tgz#021d5e5c6a8700c42c9d9294dd36084650ebe9c4" - integrity sha512-aXQ5Ik8Iq1KGMBzGenmd6Js/jJgqyYvjom95/N9GptCGpiVWE5F0XqC1SL5rCwURbHN+aWY191o8XOFyY2nCUA== - dependencies: - "@miniflare/shared" "2.14.4" - -"@miniflare/r2@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/r2/-/r2-2.14.4.tgz#ad37b8ca3dac0e8812eb90a1252534a66ace19dd" - integrity sha512-4ctiZWh7Ty7LB3brUjmbRiGMqwyDZgABYaczDtUidblo2DxX4JZPnJ/ZAyxMPNJif32kOJhcg6arC2hEthR9Sw== - dependencies: - "@miniflare/core" "2.14.4" - "@miniflare/shared" "2.14.4" - undici "5.28.4" - -"@miniflare/runner-vm@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/runner-vm/-/runner-vm-2.14.4.tgz#c319d52b1fd1893482a88b616f3f80770d012ac6" - integrity sha512-Nog0bB9SVhPbZAkTWfO4lpLAUsBXKEjlb4y+y66FJw77mPlmPlVdpjElCvmf8T3VN/pqh83kvELGM+/fucMf4g== - dependencies: - "@miniflare/shared" "2.14.4" - -"@miniflare/scheduler@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/scheduler/-/scheduler-2.14.4.tgz#668261443e08bcaeea9da403910b47ceb4ca9d98" - integrity sha512-tBgQGFiRoqDSSuWyJDPbk6sNvGYrjE7O6Fhsx1d7h7/2ThofSqPxOnlttTTzeqnGc7Nt4Rf/s/JjQnzXOVXmqQ== - dependencies: - "@miniflare/core" "2.14.4" - "@miniflare/shared" "2.14.4" - cron-schedule "^3.0.4" - -"@miniflare/shared@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/shared/-/shared-2.14.4.tgz#b807add75fa2706ea6cac02876cd958488f05b8e" - integrity sha512-upl4RSB3hyCnITOFmRZjJj4A72GmkVrtfZTilkdq5Qe5TTlzsjVeDJp7AuNUM9bM8vswRo+N5jOiot6O4PVwwQ== - dependencies: - "@types/better-sqlite3" "^7.6.0" - kleur "^4.1.4" - npx-import "^1.1.4" - picomatch "^2.3.1" - -"@miniflare/sites@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/sites/-/sites-2.14.4.tgz#21245563d5b9fa36cf0eedffabf78a96a9095714" - integrity sha512-O5npWopi+fw9W9Ki0gy99nuBbgDva/iXy8PDC4dAXDB/pz45nISDqldabk0rL2t4W2+lY6LXKzdOw+qJO1GQTA== - dependencies: - "@miniflare/kv" "2.14.4" - "@miniflare/shared" "2.14.4" - "@miniflare/storage-file" "2.14.4" - -"@miniflare/storage-file@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/storage-file/-/storage-file-2.14.4.tgz#8f967ef66d9a729e3524c8a61ea0d3cf2af2ed91" - integrity sha512-JxcmX0hXf4cB0cC9+s6ZsgYCq+rpyUKRPCGzaFwymWWplrO3EjPVxKCcMxG44jsdgsII6EZihYUN2J14wwCT7A== - dependencies: - "@miniflare/shared" "2.14.4" - "@miniflare/storage-memory" "2.14.4" - -"@miniflare/storage-memory@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/storage-memory/-/storage-memory-2.14.4.tgz#4d39f5178aa146c5128ce98782f06d1ff133ae6a" - integrity sha512-9jB5BqNkMZ3SFjbPFeiVkLi1BuSahMhc/W1Y9H0W89qFDrrD+z7EgRgDtHTG1ZRyi9gIlNtt9qhkO1B6W2qb2A== - dependencies: - "@miniflare/shared" "2.14.4" - -"@miniflare/watcher@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/watcher/-/watcher-2.14.4.tgz#1dd672697c8ef055f45b5e46e58bf7e6477f5b04" - integrity sha512-PYn05ET2USfBAeXF6NZfWl0O32KVyE8ncQ/ngysrh3hoIV7l3qGGH7ubeFx+D8VWQ682qYhwGygUzQv2j1tGGg== - dependencies: - "@miniflare/shared" "2.14.4" - -"@miniflare/web-sockets@2.14.4": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@miniflare/web-sockets/-/web-sockets-2.14.4.tgz#a0b6dda2d56fc695dabe7420954c7003e9f69ecf" - integrity sha512-stTxvLdJ2IcGOs76AnvGYAzGvx8JvQPRxC5DW0P5zdAAnhL33noqb5LKdPt3P37BKp9FzBKZHuihQI9oVqwm0g== - dependencies: - "@miniflare/core" "2.14.4" - "@miniflare/shared" "2.14.4" - undici "5.28.4" - ws "^8.2.2" - -"@polymeshassociation/polymesh-rust-docs@./workers-site/": - version "1.0.0" - dependencies: - "@cloudflare/kv-asset-handler" "^0.2.0" - wrangler "^2.20.1" - -"@types/better-sqlite3@^7.6.0": - version "7.6.12" - resolved "https://registry.yarnpkg.com/@types/better-sqlite3/-/better-sqlite3-7.6.12.tgz#e5712d46d71097dcc2775c0b068072eadc15deb7" - integrity sha512-fnQmj8lELIj7BSrZQAdBMHEHX8OZLYIHXqAKT1O7tDfLxaINzf00PMjw22r3N/xXh0w/sGHlO6SVaCQ2mj78lg== - dependencies: - "@types/node" "*" - -"@types/node-forge@^1.3.0": - version "1.3.11" - resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" - integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== - dependencies: - "@types/node" "*" - -"@types/node@*": - version "22.10.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.2.tgz#a485426e6d1fdafc7b0d4c7b24e2c78182ddabb9" - integrity sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ== - dependencies: - undici-types "~6.20.0" - -"@types/stack-trace@0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/stack-trace/-/stack-trace-0.0.29.tgz#eb7a7c60098edb35630ed900742a5ecb20cfcb4d" - integrity sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -blake3-wasm@^2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/blake3-wasm/-/blake3-wasm-2.1.5.tgz#b22dbb84bc9419ed0159caa76af4b1b132e6ba52" - integrity sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g== - -braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -builtins@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.1.0.tgz#6d85eeb360c4ebc166c3fdef922a15aa7316a5e8" - integrity sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg== - dependencies: - semver "^7.0.0" - -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - -chokidar@^3.5.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cron-schedule@^3.0.4: - version "3.0.6" - resolved "https://registry.yarnpkg.com/cron-schedule/-/cron-schedule-3.0.6.tgz#7d0a3ad9154112fc3720fe43238a43d50e8465e7" - integrity sha512-izfGgKyzzIyLaeb1EtZ3KbglkS6AKp9cv7LxmiyoOu+fXfol1tQDC0Cof0enVZGNtudTHW+3lfuW9ZkLQss4Wg== - -cross-spawn@^7.0.3: - version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -dotenv@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -esbuild@0.16.3: - version "0.16.3" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.3.tgz#5868632fa23f7a8547f2a4ea359c44e946515c94" - integrity sha512-71f7EjPWTiSguen8X/kxEpkAS7BFHwtQKisCDDV3Y4GLGWBaoSCyD5uXkaUew6JDzA9FEN1W23mdnSwW9kqCeg== - optionalDependencies: - "@esbuild/android-arm" "0.16.3" - "@esbuild/android-arm64" "0.16.3" - "@esbuild/android-x64" "0.16.3" - "@esbuild/darwin-arm64" "0.16.3" - "@esbuild/darwin-x64" "0.16.3" - "@esbuild/freebsd-arm64" "0.16.3" - "@esbuild/freebsd-x64" "0.16.3" - "@esbuild/linux-arm" "0.16.3" - "@esbuild/linux-arm64" "0.16.3" - "@esbuild/linux-ia32" "0.16.3" - "@esbuild/linux-loong64" "0.16.3" - "@esbuild/linux-mips64el" "0.16.3" - "@esbuild/linux-ppc64" "0.16.3" - "@esbuild/linux-riscv64" "0.16.3" - "@esbuild/linux-s390x" "0.16.3" - "@esbuild/linux-x64" "0.16.3" - "@esbuild/netbsd-x64" "0.16.3" - "@esbuild/openbsd-x64" "0.16.3" - "@esbuild/sunos-x64" "0.16.3" - "@esbuild/win32-arm64" "0.16.3" - "@esbuild/win32-ia32" "0.16.3" - "@esbuild/win32-x64" "0.16.3" - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -execa@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" - integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^3.0.1" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -html-rewriter-wasm@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/html-rewriter-wasm/-/html-rewriter-wasm-0.4.1.tgz#235e3d96c1aa4bfd2182661ee13881e290ff5ff2" - integrity sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q== - -http-cache-semantics@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -human-signals@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" - integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -kleur@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -magic-string@^0.25.3: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -miniflare@2.14.4: - version "2.14.4" - resolved "https://registry.yarnpkg.com/miniflare/-/miniflare-2.14.4.tgz#75900b78894ea2f0b93346c77dc98b1295a33b29" - integrity sha512-sMV8oJRWwqxPsgg7EOMizkv7pLxd1HOzqv055PcsM4kcRECPhnJSaCtAUc+ZfpOgR4musgfooM6kQo8o+ifZ+w== - dependencies: - "@miniflare/cache" "2.14.4" - "@miniflare/cli-parser" "2.14.4" - "@miniflare/core" "2.14.4" - "@miniflare/d1" "2.14.4" - "@miniflare/durable-objects" "2.14.4" - "@miniflare/html-rewriter" "2.14.4" - "@miniflare/http-server" "2.14.4" - "@miniflare/kv" "2.14.4" - "@miniflare/queues" "2.14.4" - "@miniflare/r2" "2.14.4" - "@miniflare/runner-vm" "2.14.4" - "@miniflare/scheduler" "2.14.4" - "@miniflare/shared" "2.14.4" - "@miniflare/sites" "2.14.4" - "@miniflare/storage-file" "2.14.4" - "@miniflare/storage-memory" "2.14.4" - "@miniflare/web-sockets" "2.14.4" - kleur "^4.1.4" - semiver "^1.1.0" - source-map-support "^0.5.20" - undici "5.28.4" - -mustache@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" - integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== - -nanoid@^3.3.3: - version "3.3.8" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" - integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== - -node-forge@^1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" - integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== - dependencies: - path-key "^4.0.0" - -npx-import@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/npx-import/-/npx-import-1.1.4.tgz#0ee9a27484c633255528f7ec2e4c2adeaa1fcda3" - integrity sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA== - dependencies: - execa "^6.1.0" - parse-package-name "^1.0.0" - semver "^7.3.7" - validate-npm-package-name "^4.0.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -parse-package-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-package-name/-/parse-package-name-1.0.0.tgz#1a108757e4ffc6889d5e78bcc4932a97c097a5a7" - integrity sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-to-regexp@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" - integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -rollup-plugin-inject@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz#e4233855bfba6c0c12a312fd6649dff9a13ee9f4" - integrity sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w== - dependencies: - estree-walker "^0.6.1" - magic-string "^0.25.3" - rollup-pluginutils "^2.8.1" - -rollup-plugin-node-polyfills@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz#53092a2744837164d5b8a28812ba5f3ff61109fd" - integrity sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA== - dependencies: - rollup-plugin-inject "^3.0.0" - -rollup-pluginutils@^2.8.1: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -selfsigned@^2.0.0, selfsigned@^2.0.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" - integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== - dependencies: - "@types/node-forge" "^1.3.0" - node-forge "^1" - -semiver@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semiver/-/semiver-1.1.0.tgz#9c97fb02c21c7ce4fcf1b73e2c7a24324bdddd5f" - integrity sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg== - -semver@^7.0.0, semver@^7.3.7: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -set-cookie-parser@^2.4.8: - version "2.7.1" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943" - integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -source-map-support@^0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -stack-trace@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== - -undici@5.28.4: - version "5.28.4" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" - integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== - dependencies: - "@fastify/busboy" "^2.0.0" - -urlpattern-polyfill@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-4.0.3.tgz#c1fa7a73eb4e6c6a1ffb41b24cf31974f7392d3b" - integrity sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ== - -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== - dependencies: - builtins "^5.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wrangler@^2.20.1: - version "2.21.2" - resolved "https://registry.yarnpkg.com/wrangler/-/wrangler-2.21.2.tgz#77bd420540fbcde6e7e0f459188bd3ee9b4ead98" - integrity sha512-2vD2dXjGa1zWnv+0o2esVIYvWA0zupiHitZNhWL3WyQrAyRMvWKzFK3XSag9Cgbjxv3WbuOXMx8EroM704Vy3A== - dependencies: - "@cloudflare/kv-asset-handler" "^0.2.0" - "@esbuild-plugins/node-globals-polyfill" "^0.1.1" - "@esbuild-plugins/node-modules-polyfill" "^0.1.4" - "@miniflare/core" "2.14.4" - "@miniflare/d1" "2.14.4" - "@miniflare/durable-objects" "2.14.4" - blake3-wasm "^2.1.5" - chokidar "^3.5.3" - esbuild "0.16.3" - miniflare "2.14.4" - nanoid "^3.3.3" - path-to-regexp "^6.2.0" - selfsigned "^2.0.1" - source-map "^0.7.4" - xxhash-wasm "^1.0.1" - optionalDependencies: - fsevents "~2.3.2" - -ws@^8.2.2: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== - -xxhash-wasm@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz#ffe7f0b98220a4afac171e3fb9b6d1f8771f015e" - integrity sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA== - -youch@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/youch/-/youch-2.2.2.tgz#cb87a359a5c524ebd35eb07ca3a1521dbc7e1a3e" - integrity sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ== - dependencies: - "@types/stack-trace" "0.0.29" - cookie "^0.4.1" - mustache "^4.2.0" - stack-trace "0.0.10" From 1a3e4825c0871c4cc8ced3ff66f4fb6b16df0cac Mon Sep 17 00:00:00 2001 From: Robert Gabriel Jakabosky Date: Mon, 5 May 2025 17:45:35 +0800 Subject: [PATCH 06/97] Refactor our changes out of the core Staking code. (#1802) * Start moving our changes out of the core Staking code. * Refactor chill/nominate code. * Refactor slashing switch. * Add missing "Polymesh added" notes. * FIXUP * Access Polymesh staking logic through an associated type. * Impl PermissionedStaking on the pallet. * Refactor some of our logic out of the benchmarking and testing code. * Avoid using our User type. * Add ED check to trait. --- pallets/runtime/common/src/runtime.rs | 3 +- .../develop/src/benchmarks/pallet_session.rs | 3 +- pallets/runtime/tests/src/staking/mock.rs | 5 +- pallets/staking/Cargo.toml | 1 - pallets/staking/src/benchmarking.rs | 299 +++++++------ pallets/staking/src/lib.rs | 26 +- pallets/staking/src/pallet/impls.rs | 186 ++------ pallets/staking/src/pallet/mod.rs | 151 ++----- pallets/staking/src/permissioned.rs | 423 ++++++++++++++++++ pallets/staking/src/slashing.rs | 8 +- pallets/staking/src/testing_utils.rs | 75 ++-- pallets/staking/src/types.rs | 88 +++- 12 files changed, 775 insertions(+), 493 deletions(-) create mode 100644 pallets/staking/src/permissioned.rs diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 4bb6d0fed0..17eef1f277 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -259,7 +259,7 @@ macro_rules! misc_pallet_impls { type SlashDeferDuration = SlashDeferDuration; type AdminOrigin = polymesh_primitives::EnsureRoot; type SessionInterface = Self; - type EraPayout = pallet_staking::ConvertCurve; + type EraPayout = pallet_staking::PolymeshConvertCurve; type NextNewSession = Session; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; type OffendingValidatorsThreshold = OffendingValidatorsThreshold; @@ -275,6 +275,7 @@ macro_rules! misc_pallet_impls { type Call = RuntimeCall; type PalletsOrigin = OriginCaller; type RewardScheduler = Scheduler; + type Permissioned = Staking; } impl pallet_authority_discovery::Config for Runtime { diff --git a/pallets/runtime/develop/src/benchmarks/pallet_session.rs b/pallets/runtime/develop/src/benchmarks/pallet_session.rs index 7a4cfa13b5..b0a01519bc 100644 --- a/pallets/runtime/develop/src/benchmarks/pallet_session.rs +++ b/pallets/runtime/develop/src/benchmarks/pallet_session.rs @@ -69,8 +69,7 @@ impl ValidatorInfo { Some(balance), ) .unwrap() - .0 - .account(); + .0; let controller = pallet_staking::Pallet::::bonded(&stash).expect("not stash"); let keys = T::Keys::decode(&mut TrailingZeroInput::zeroes()).unwrap(); diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index 879199a78c..1d234484ae 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -40,7 +40,7 @@ use sp_staking::{EraIndex, SessionIndex}; use pallet_balances::AccountData; use pallet_balances::BlockRewardConfig; use pallet_staking::types::SlashingSwitch; -use pallet_staking::{self as pallet_staking, *}; +use pallet_staking::*; use polymesh_primitives::asset::AssetId; use polymesh_primitives::constants::currency::POLY; use polymesh_primitives::identity_id::GenesisIdentityRecord; @@ -599,7 +599,7 @@ impl pallet_staking::Config for Test { type SlashDeferDuration = SlashDeferDuration; type AdminOrigin = frame_system::EnsureRoot; type SessionInterface = Self; - type EraPayout = ConvertCurve; + type EraPayout = PolymeshConvertCurve; type NextNewSession = Session; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; type OffendingValidatorsThreshold = OffendingValidatorsThreshold; @@ -615,6 +615,7 @@ impl pallet_staking::Config for Test { type Call = RuntimeCall; type PalletsOrigin = OriginCaller; type RewardScheduler = Scheduler; + type Permissioned = Staking; } impl frame_system::offchain::SendTransactionTypes for Test diff --git a/pallets/staking/Cargo.toml b/pallets/staking/Cargo.toml index d081526f64..9c03892561 100644 --- a/pallets/staking/Cargo.toml +++ b/pallets/staking/Cargo.toml @@ -60,7 +60,6 @@ std = [ "pallet-babe/std", "sp-arithmetic/std", "rand_chacha", - "frame-benchmarking", ] runtime-benchmarks = [ "frame-benchmarking", diff --git a/pallets/staking/src/benchmarking.rs b/pallets/staking/src/benchmarking.rs index 33debdac78..1d5bb478e3 100644 --- a/pallets/staking/src/benchmarking.rs +++ b/pallets/staking/src/benchmarking.rs @@ -36,7 +36,7 @@ use sp_staking::SessionIndex; use sp_std::prelude::*; pub use frame_benchmarking::v1::{ - account, benchmarks, impl_benchmark_test_suite, whitelisted_caller, + account, benchmarks, impl_benchmark_test_suite, whitelist_account, whitelisted_caller, }; use frame_system::RawOrigin; @@ -50,26 +50,23 @@ type MaxNominators = <::BenchmarkingConfig as BenchmarkingConfig // Polymesh change // ----------------------------------------------------------------- -use pallet_identity::benchmarking::{User, UserBuilder}; +use pallet_identity::benchmarking::UserBuilder; use polymesh_primitives::{IdentityId, Permissions}; -use crate::types::SlashingSwitch; +use crate::types::{PermissionedStaking, SlashingSwitch}; // ----------------------------------------------------------------- // Polymesh change // ----------------------------------------------------------------- -macro_rules! whitelist_account { - ($acc:expr) => { - let x = $acc.account(); - frame_benchmarking::v1::whitelist_account!(x); - }; -} -fn add_permissioned_validator_(id: IdentityId, intended_count: Option) { +fn add_permissioned_validator_(stash: &T::AccountId) { Staking::::set_validator_count(RawOrigin::Root.into(), 10) .expect("Failed to set the validator count"); - Staking::::add_permissioned_validator(RawOrigin::Root.into(), id, intended_count) - .expect("Failed to add permissioned validator"); + T::Permissioned::permission_validator(stash); +} + +fn get_did(who: &T::AccountId) -> IdentityId { + pallet_identity::Pallet::::get_identity(who).expect("Failed to get identity id") } // ----------------------------------------------------------------- @@ -101,7 +98,7 @@ pub fn create_validator_with_nominators( dead: bool, destination: RewardDestination, balance: Option, -) -> Result<(User, Vec<(User, User)>), &'static str> +) -> Result<(T::AccountId, Vec<(T::AccountId, T::AccountId)>), &'static str> where T: Config, { @@ -119,12 +116,12 @@ where }; Staking::::set_commission_cap(RawOrigin::Root.into(), Perbill::from_percent(60)).unwrap(); Staking::::set_validator_count(RawOrigin::Root.into(), 10)?; - Staking::::add_permissioned_validator(RawOrigin::Root.into(), v_stash.did(), Some(2))?; - Staking::::validate(v_controller.origin().into(), validator_prefs)?; - let stash_lookup = v_stash.lookup(); + T::Permissioned::permission_validator(&v_stash); + Staking::::validate(RawOrigin::Signed(v_controller).into(), validator_prefs)?; + let stash_lookup = T::Lookup::unlookup(v_stash.clone()); points_total += 10; - points_individual.push((v_stash.account().clone(), 10)); + points_individual.push((v_stash.clone(), 10)); let original_nominator_count = Nominators::::count(); let mut nominators = Vec::new(); @@ -138,7 +135,7 @@ where }; if i < n { Staking::::nominate( - RawOrigin::Signed(n_controller.account()).into(), + RawOrigin::Signed(n_controller.clone()).into(), vec![stash_lookup.clone()], )?; nominators.push((n_stash, n_controller)); @@ -152,8 +149,7 @@ where assert_eq!(new_validators.len(), 1); assert_eq!( - new_validators[0], - v_stash.account(), + new_validators[0], v_stash, "Our validator was not selected!" ); assert_ne!(Validators::::count(), 0); @@ -184,13 +180,13 @@ benchmarks! { bond { let stash = create_funded_user::("stash", USER_SEED, 100); let controller = create_funded_user::("controller", USER_SEED, 100); - let controller_lookup = controller.lookup(); + let controller_lookup = T::Lookup::unlookup(controller.clone()); let reward_destination = RewardDestination::Staked; whitelist_account!(stash); - }: _(stash.origin(), controller_lookup, 2_000_000u32.into(), reward_destination) + }: _(RawOrigin::Signed(stash.clone()), controller_lookup, 2_000_000u32.into(), reward_destination) verify { - assert!(Bonded::::contains_key(stash.account())); - assert!(Ledger::::contains_key(controller.account())); + assert!(Bonded::::contains_key(stash)); + assert!(Ledger::::contains_key(controller)); } bond_extra { @@ -205,12 +201,12 @@ benchmarks! { let (stash, controller) = create_stash_controller::(USER_SEED, 100, RewardDestination::Staked).unwrap(); let original_bonded = - Ledger::::get(controller.account()).map(|l| l.active).ok_or("ledger not created")?; + Ledger::::get(controller.clone()).map(|l| l.active).ok_or("ledger not created")?; whitelist_account!(stash); - }: _(stash.origin(), 2_000_000u32.into()) + }: _(RawOrigin::Signed(stash), 2_000_000u32.into()) verify { - let ledger = Ledger::::get(controller.account()).ok_or("ledger not created after")?; + let ledger = Ledger::::get(controller).ok_or("ledger not created after")?; let new_bonded: BalanceOf = ledger.active; assert!(original_bonded < new_bonded); } @@ -227,12 +223,12 @@ benchmarks! { let (stash, controller) = create_stash_controller::(USER_SEED, 100, RewardDestination::Staked).unwrap(); let original_bonded = - Ledger::::get(controller.account()).map(|l| l.active).ok_or("ledger not created")?; + Ledger::::get(controller.clone()).map(|l| l.active).ok_or("ledger not created")?; whitelist_account!(controller); - }: _(controller.origin(), 20u32.into()) + }: _(RawOrigin::Signed(controller.clone()), 20u32.into()) verify { - let ledger = Ledger::::get(controller.account()).ok_or("ledger not created after")?; + let ledger = Ledger::::get(controller).ok_or("ledger not created after")?; let new_bonded: BalanceOf = ledger.active; assert!(original_bonded > new_bonded); } @@ -246,16 +242,16 @@ benchmarks! { clear_validators_and_nominators::(); let (stash, controller) = create_stash_controller::(0, 10_000_000, Default::default())?; - add_slashing_spans::(&stash.account(), s); - Staking::::unbond(controller.origin().into(), 50u32.into())?; + add_slashing_spans::(&stash, s); + Staking::::unbond(RawOrigin::Signed(controller.clone()).into(), 50u32.into())?; CurrentEra::::put(EraIndex::max_value()); let original_total = - Ledger::::get(controller.account()).map(|l| l.total).ok_or("ledger not created before")?; + Ledger::::get(controller.clone()).map(|l| l.total).ok_or("ledger not created before")?; whitelist_account!(controller); - }: withdraw_unbonded(controller.origin(), s) + }: withdraw_unbonded(RawOrigin::Signed(controller.clone()), s) verify { - let ledger = Ledger::::get(controller.account()).ok_or("ledger not created after")?; + let ledger = Ledger::::get(controller).ok_or("ledger not created after")?; let new_total: BalanceOf = ledger.total; assert!(original_total > new_total); } @@ -273,16 +269,16 @@ benchmarks! { // ----------------------------------------------------------------- let (stash, controller) = create_stash_controller::(0, 10_000_000, Default::default())?; - add_slashing_spans::(&stash.account(), s); - Staking::::unbond(controller.origin().into(), 10_000_000u32.into())?; + add_slashing_spans::(&stash, s); + Staking::::unbond(RawOrigin::Signed(controller.clone()).into(), 10_000_000u32.into())?; CurrentEra::::put(EraIndex::max_value()); - let _ = Ledger::::get(&controller.account()).expect("ledger not created before"); + let _ = Ledger::::get(&controller).expect("ledger not created before"); whitelist_account!(controller); - }: withdraw_unbonded(controller.origin(), s) + }: withdraw_unbonded(RawOrigin::Signed(controller.clone()), s) verify { - assert!(!Ledger::::contains_key(controller.account())); - assert!(!T::VoterList::contains(&stash.account())); + assert!(!Ledger::::contains_key(controller)); + assert!(!T::VoterList::contains(&stash)); } validate { @@ -294,18 +290,18 @@ benchmarks! { Default::default(), )?; // because it is chilled. - assert!(!T::VoterList::contains(&stash.account())); + assert!(!T::VoterList::contains(&stash)); // Polymesh change // ----------------------------------------------------------------- - add_permissioned_validator_::(stash.did(), Some(2)); + add_permissioned_validator_::(&stash); // ----------------------------------------------------------------- whitelist_account!(controller); - }: _(controller.origin(), ValidatorPrefs::default()) + }: _(RawOrigin::Signed(controller), ValidatorPrefs::default()) verify { - assert!(Validators::::contains_key(stash.account())); - assert!(T::VoterList::contains(&stash.account())); + assert!(Validators::::contains_key(stash.clone())); + assert!(T::VoterList::contains(&stash)); } kick { @@ -325,12 +321,12 @@ benchmarks! { 100, Default::default(), )?; - let stash_lookup = stash.lookup(); + let stash_lookup = T::Lookup::unlookup(stash.clone()); - add_permissioned_validator_::(stash.did(), Some(2)); + add_permissioned_validator_::(&stash); // they start validating. - Staking::::validate(controller.origin().into(), Default::default())?; + Staking::::validate(RawOrigin::Signed(controller.clone()).into(), Default::default())?; // we now create the nominators. there will be `k` of them; each will nominate all // validators. we will then kick each of the `k` nominators from the main validator. @@ -349,14 +345,14 @@ benchmarks! { // optimisations/pessimisations. nominations.insert(i as usize % (nominations.len() + 1), stash_lookup.clone()); // then we nominate. - Staking::::nominate(n_controller.origin().into(), nominations)?; + Staking::::nominate(RawOrigin::Signed(n_controller).into(), nominations)?; - nominator_stashes.push(n_stash.account()); + nominator_stashes.push(n_stash); } // all nominators now should be nominating our validator... for n in nominator_stashes.iter() { - assert!(Nominators::::get(n).unwrap().targets.contains(&stash.account())); + assert!(Nominators::::get(n).unwrap().targets.contains(&stash)); } // we need the unlookuped version of the nominator stash for the kick. @@ -365,11 +361,11 @@ benchmarks! { .collect::>(); whitelist_account!(controller); - }: _(controller.origin(), kicks) + }: _(RawOrigin::Signed(controller), kicks) verify { // all nominators now should *not* be nominating our validator... for n in nominator_stashes.iter() { - assert!(!Nominators::::get(n).unwrap().targets.contains(&stash.account())); + assert!(!Nominators::::get(n).unwrap().targets.contains(&stash)); } } @@ -385,16 +381,16 @@ benchmarks! { 10_000_000, Default::default(), )?; - assert!(!Nominators::::contains_key(&stash.account())); - assert!(!T::VoterList::contains(&stash.account())); + assert!(!Nominators::::contains_key(&stash)); + assert!(!T::VoterList::contains(&stash)); let validators = create_validators::(n, 100).unwrap(); whitelist_account!(controller); - }: _(controller.origin(), validators) + }: _(RawOrigin::Signed(controller), validators) verify { - assert!(Nominators::::contains_key(&stash.account())); - assert!(T::VoterList::contains(&stash.account())) + assert!(Nominators::::contains_key(&stash)); + assert!(T::VoterList::contains(&stash)) } chill { @@ -404,35 +400,36 @@ benchmarks! { // Polymesh change // ----------------------------------------------------------------- let (stash, controller) = create_stash_controller::(0, 10_000_000, Default::default())?; - Staking::::add_permissioned_validator(RawOrigin::Root.into(), stash.did(), Some(2))?; - Staking::::validate(controller.origin().into(), ValidatorPrefs::default())?; - assert!(T::VoterList::contains(&stash.account())); - assert!(Validators::::contains_key(&stash.account())); + T::Permissioned::permission_validator(&stash); + Staking::::validate(RawOrigin::Signed(controller.clone()).into(), ValidatorPrefs::default())?; + assert!(T::VoterList::contains(&stash)); + assert!(Validators::::contains_key(&stash)); // ----------------------------------------------------------------- whitelist_account!(controller); - }: _(controller.origin()) + }: _(RawOrigin::Signed(controller)) verify { - assert!(!T::VoterList::contains(&stash.account())); - assert!(!Validators::::contains_key(&stash.account())); + assert!(!T::VoterList::contains(&stash)); + assert!(!Validators::::contains_key(&stash)); } set_payee { let (stash, controller) = create_stash_controller::(USER_SEED, 100, Default::default())?; - assert_eq!(Payee::::get(&stash.account()), RewardDestination::Staked); + assert_eq!(Payee::::get(&stash), RewardDestination::Staked); whitelist_account!(controller); - }: _(controller.origin(), RewardDestination::Controller) + }: _(RawOrigin::Signed(controller), RewardDestination::Controller) verify { - assert_eq!(Payee::::get(&stash.account()), RewardDestination::Controller); + assert_eq!(Payee::::get(&stash), RewardDestination::Controller); } set_controller { let (stash, _) = create_stash_controller::(USER_SEED, 100, Default::default())?; let new_controller = create_funded_user::("new_controller", USER_SEED, 100); + let new_controller_lookup = T::Lookup::unlookup(new_controller.clone()); whitelist_account!(stash); - }: _(stash.origin(), new_controller.lookup()) + }: _(RawOrigin::Signed(stash), new_controller_lookup) verify { - assert!(Ledger::::contains_key(&new_controller.account())); + assert!(Ledger::::contains_key(&new_controller)); } set_validator_count { @@ -472,18 +469,18 @@ benchmarks! { // Polymesh change // ----------------------------------------------------------------- let (stash, controller) = create_stash_controller::(USER_SEED, 10_000_000, Default::default())?; - Staking::::add_permissioned_validator(RawOrigin::Root.into(), stash.did(), Some(2))?; - Staking::::validate(controller.origin().into(), ValidatorPrefs::default())?; - add_slashing_spans::(&stash.account(), s); - assert!(T::VoterList::contains(&stash.account())); - assert!(Validators::::contains_key(&stash.account())); + T::Permissioned::permission_validator(&stash); + Staking::::validate(RawOrigin::Signed(controller.clone()).into(), ValidatorPrefs::default())?; + add_slashing_spans::(&stash, s); + assert!(T::VoterList::contains(&stash)); + assert!(Validators::::contains_key(&stash)); // ----------------------------------------------------------------- - }: _(RawOrigin::Root, stash.account(), s) + }: _(RawOrigin::Root, stash.clone(), s) verify { - assert!(!Ledger::::contains_key(&controller.account())); - assert!(!T::VoterList::contains(&stash.account())); - assert!(!Validators::::contains_key(&stash.account())); + assert!(!Ledger::::contains_key(&controller)); + assert!(!T::VoterList::contains(&stash)); + assert!(!Validators::::contains_key(&stash)); } cancel_deferred_slash { @@ -514,19 +511,19 @@ benchmarks! { let current_era = CurrentEra::::get().unwrap(); // set the commission for this particular era as well. - >::insert(current_era, validator.account().clone(), >::validators(&validator.account())); + >::insert(current_era, validator.clone(), >::validators(&validator)); - let validator_controller = >::get(&validator.account()).unwrap(); + let validator_controller = >::get(&validator).unwrap(); let balance_before = T::Currency::free_balance(&validator_controller); for (_, controller) in &nominators { - let balance = T::Currency::free_balance(&controller.account()); + let balance = T::Currency::free_balance(&controller); ensure!(balance.is_zero(), "Controller has balance, but should be dead."); } - let caller = UserBuilder::::default().seed(SEED).generate_did().build("caller"); - let caller_key = frame_system::Account::::hashed_key_for(&caller.account()); + let caller = UserBuilder::::default().seed(SEED).generate_did().build("caller").account(); + let caller_key = frame_system::Account::::hashed_key_for(&caller); frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into()); - }: payout_stakers(caller.origin(), validator.account(), current_era) + }: payout_stakers(RawOrigin::Signed(caller), validator, current_era) verify { let balance_after = T::Currency::free_balance(&validator_controller); ensure!( @@ -534,7 +531,7 @@ benchmarks! { "Balance of validator controller should have increased after payout.", ); for (_, controller) in &nominators { - let balance = T::Currency::free_balance(&controller.account()); + let balance = T::Currency::free_balance(&controller); ensure!(!balance.is_zero(), "Payout not given to controller."); } } @@ -554,29 +551,29 @@ benchmarks! { // set the commission for this particular era as well. >::insert( current_era, - validator.account().clone(), - >::validators(&validator.account()) + validator.clone(), + >::validators(&validator) ); - let caller = UserBuilder::::default().seed(SEED).generate_did().build("caller"); - let caller_key = frame_system::Account::::hashed_key_for(&caller.account()); + let caller = UserBuilder::::default().seed(SEED).generate_did().build("caller").account(); + let caller_key = frame_system::Account::::hashed_key_for(&caller); frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into()); - let balance_before = T::Currency::free_balance(&validator.account()); + let balance_before = T::Currency::free_balance(&validator); let mut nominator_balances_before = Vec::new(); for (stash, _) in &nominators { - let balance = T::Currency::free_balance(&stash.account()); + let balance = T::Currency::free_balance(&stash); nominator_balances_before.push(balance); } - }: payout_stakers(caller.origin(), validator.account().clone(), current_era) + }: payout_stakers(RawOrigin::Signed(caller), validator.clone(), current_era) verify { - let balance_after = T::Currency::free_balance(&validator.account()); + let balance_after = T::Currency::free_balance(&validator); ensure!( balance_before < balance_after, "Balance of validator stash should have increased after payout.", ); for ((stash, _), balance_before) in nominators.iter().zip(nominator_balances_before.iter()) { - let balance_after = T::Currency::free_balance(&stash.account()); + let balance_after = T::Currency::free_balance(&stash); ensure!( balance_before < &balance_after, "Balance of nominator stash should have increased after payout.", @@ -593,7 +590,7 @@ benchmarks! { let (stash, controller) = create_stash_controller::(1, 10_000_000, RewardDestination::Staked)?; - let mut staking_ledger = Ledger::::get(controller.account()).unwrap(); + let mut staking_ledger = Ledger::::get(controller.clone()).unwrap(); let unlock_chunk = UnlockChunk::> { value: 1u32.into(), era: EraIndex::zero(), @@ -601,13 +598,13 @@ benchmarks! { for _ in 0 .. l { staking_ledger.unlocking.try_push(unlock_chunk.clone()).unwrap() } - Ledger::::insert(controller.account(), staking_ledger.clone()); + Ledger::::insert(controller.clone(), staking_ledger.clone()); let original_bonded: BalanceOf = staking_ledger.active; whitelist_account!(controller); - }: _(controller.origin(), 101u32.into()) + }: _(RawOrigin::Signed(controller.clone()), 101u32.into()) verify { - let ledger = Ledger::::get(&controller.account()).ok_or("ledger not created after")?; + let ledger = Ledger::::get(&controller).ok_or("ledger not created after")?; let new_bonded: BalanceOf = ledger.active; assert!(original_bonded < new_bonded); } @@ -619,28 +616,28 @@ benchmarks! { let (stash, controller) = create_stash_controller::(1, 1, RewardDestination::Staked)?; - Staking::::add_permissioned_validator(RawOrigin::Root.into(), stash.did(), Some(2))?; - Staking::::validate(controller.origin().into(), ValidatorPrefs::default())?; + T::Permissioned::permission_validator(&stash); + Staking::::validate(RawOrigin::Signed(controller.clone()).into(), ValidatorPrefs::default())?; - add_slashing_spans::(&stash.account(), s); + add_slashing_spans::(&stash, s); let l = StakingLedger { - stash: stash.account().clone(), + stash: stash.clone(), active: T::Currency::minimum_balance(), total: T::Currency::minimum_balance(), unlocking: Default::default(), claimed_rewards: Default::default(), }; - T::Currency::make_free_balance_be(&stash.account(), 0u32.into()); - Ledger::::insert(&controller.account(), l); + T::Currency::make_free_balance_be(&stash, 0u32.into()); + Ledger::::insert(&controller, l); - assert!(Bonded::::contains_key(&stash.account())); - assert!(T::VoterList::contains(&stash.account())); + assert!(Bonded::::contains_key(&stash)); + assert!(T::VoterList::contains(&stash)); whitelist_account!(controller); - }: _(controller.origin(), stash.account(), s) + }: _(RawOrigin::Signed(controller), stash.clone(), s) verify { - assert!(!Bonded::::contains_key(&stash.account())); - assert!(!T::VoterList::contains(&stash.account())); + assert!(!Bonded::::contains_key(&stash)); + assert!(!T::VoterList::contains(&stash)); } new_era { @@ -716,7 +713,7 @@ benchmarks! { do_slash { let l in 1 .. T::MaxUnlockingChunks::get() as u32; let (stash, controller) = create_stash_controller::(0, 100, Default::default())?; - let mut staking_ledger = Ledger::::get(controller.account()).unwrap(); + let mut staking_ledger = Ledger::::get(controller.clone()).unwrap(); let unlock_chunk = UnlockChunk::> { value: 1u32.into(), era: EraIndex::zero(), @@ -724,18 +721,18 @@ benchmarks! { for _ in 0 .. l { staking_ledger.unlocking.try_push(unlock_chunk.clone()).unwrap(); } - Ledger::::insert(controller.account(), staking_ledger); - let balance_before = T::Currency::free_balance(&stash.account()); + Ledger::::insert(controller, staking_ledger); + let balance_before = T::Currency::free_balance(&stash); }: { crate::slashing::do_slash::( - &stash.account(), + &stash, 10u32.into(), &mut BalanceOf::::zero(), &mut NegativeImbalanceOf::::zero(), EraIndex::zero() ); } verify { - let balance_after = T::Currency::free_balance(&stash.account()); + let balance_after = T::Currency::free_balance(&stash); assert!(balance_before > balance_after); } @@ -821,9 +818,9 @@ benchmarks! { let validator_prefs = ValidatorPrefs { commission: Perbill::from_percent(50), ..Default::default() }; Staking::::set_commission_cap(RawOrigin::Root.into(), Perbill::from_percent(60)).unwrap(); - Staking::::add_permissioned_validator(RawOrigin::Root.into(), stash.did(), Some(2))?; - Staking::::validate(controller.origin().into(), validator_prefs)?; - assert!(T::VoterList::contains(&stash.account())); + T::Permissioned::permission_validator(&stash); + Staking::::validate(RawOrigin::Signed(controller.clone()).into(), validator_prefs)?; + assert!(T::VoterList::contains(&stash)); Staking::::set_staking_configs( RawOrigin::Root.into(), @@ -835,10 +832,10 @@ benchmarks! { ConfigOp::Set(Zero::zero()), )?; - let caller = UserBuilder::::default().seed(SEED).generate_did().build("caller"); - }: _(caller.origin(), controller.account()) + let caller = UserBuilder::::default().seed(SEED).generate_did().build("caller").account(); + }: _(RawOrigin::Signed(caller), controller) verify { - assert!(!T::VoterList::contains(&stash.account())); + assert!(!T::VoterList::contains(&stash)); } force_apply_min_commission { @@ -851,22 +848,23 @@ benchmarks! { let validator_prefs = ValidatorPrefs { commission: Perbill::from_percent(50), ..Default::default() }; Staking::::set_commission_cap(RawOrigin::Root.into(), Perbill::from_percent(60)).unwrap(); - Staking::::add_permissioned_validator(RawOrigin::Root.into(), stash.did(), Some(2))?; - Staking::::validate(controller.origin().into(), validator_prefs)?; + T::Permissioned::permission_validator(&stash); + Staking::::validate(RawOrigin::Signed(controller).into(), validator_prefs)?; // Sanity check assert_eq!( - Validators::::get(&stash.account()), + Validators::::get(&stash), ValidatorPrefs { commission: Perbill::from_percent(50), ..Default::default() } ); // Set the min commission to 75% MinCommission::::set(Perbill::from_percent(75)); - }: _(stash.origin(), stash.account().clone()) + let caller = whitelisted_caller(); + }: _(RawOrigin::Signed(caller), stash.clone()) verify { // The validators commission has been bumped to 75% assert_eq!( - Validators::::get(&stash.account()), + Validators::::get(&stash), ValidatorPrefs { commission: Perbill::from_percent(75), ..Default::default() } ); } @@ -885,9 +883,10 @@ benchmarks! { let (stash, controller) = create_stash_controller::(1, 1, RewardDestination::Staked)?; Staking::::set_validator_count(RawOrigin::Root.into(), 10).unwrap(); - }: _(RawOrigin::Root, stash.did(), Some(1)) + let did = get_did::(&stash); + }: _(RawOrigin::Root, did, Some(1)) verify { - let identity_preferences = Staking::::permissioned_identity(stash.did()); + let identity_preferences = Staking::::permissioned_identity(did); assert!(identity_preferences.is_some()); assert_eq!(identity_preferences.unwrap().intended_count, 1); } @@ -896,10 +895,11 @@ benchmarks! { clear_validators_and_nominators::(); let (stash, controller) = create_stash_controller::(1, 1, RewardDestination::Staked)?; - add_permissioned_validator_::(stash.did(), Some(1)); - }: _(RawOrigin::Root, stash.did()) + add_permissioned_validator_::(&stash); + let did = get_did::(&stash); + }: _(RawOrigin::Root, did) verify { - let identity_preferences = Staking::::permissioned_identity(stash.did()); + let identity_preferences = Staking::::permissioned_identity(did); assert!(identity_preferences.is_none()); } @@ -912,10 +912,11 @@ benchmarks! { clear_validators_and_nominators::(); let (stash, controller) = create_stash_controller::(1, 1, RewardDestination::Staked)?; - add_permissioned_validator_::(stash.did(), Some(1)); - }: _(RawOrigin::Root, stash.did(), 2) + add_permissioned_validator_::(&stash); + let did = get_did::(&stash); + }: _(RawOrigin::Root, did, 2) verify { - assert_eq!(Staking::::permissioned_identity(stash.did()).unwrap().intended_count, 2); + assert_eq!(Staking::::permissioned_identity(did).unwrap().intended_count, 2); } chill_from_governance { @@ -926,9 +927,10 @@ benchmarks! { Staking::::set_validator_count(RawOrigin::Root.into(), 1_000).unwrap(); assert_eq!(Staking::::validator_count(), 1_000); + let did = get_did::(&validator); Staking::::add_permissioned_validator( RawOrigin::Root.into(), - validator.did(), + did, Some(100) ).unwrap(); @@ -936,28 +938,31 @@ benchmarks! { let mut signatories = Vec::new(); for x in 0 .. s { - let key = UserBuilder::::default().seed(x).balance(10_000u32).build("key"); + let key = UserBuilder::::default().seed(x).balance(10_000u32).build("key").account(); + let key_lookup = T::Lookup::unlookup(key.clone()); let _ = T::Currency::issue(10_000u32.into()); + let did = get_did::(&validator); pallet_identity::Pallet::::unsafe_join_identity( - validator.did(), + did, Permissions::default(), - key.account.clone() + key.clone() ); Staking::::bond( - key.origin().into(), - key.lookup(), + RawOrigin::Signed(key.clone()).into(), + key_lookup, 2_000_000u32.into(), RewardDestination::Staked ) .unwrap(); whitelist_account!(key); - Staking::::validate(key.origin().into(), ValidatorPrefs::default()).unwrap(); - assert_eq!(>::contains_key(&key.account), true); - signatories.push(key.account.clone()); + Staking::::validate(RawOrigin::Signed(key.clone()).into(), ValidatorPrefs::default()).unwrap(); + assert_eq!(>::contains_key(&key), true); + signatories.push(key.clone()); } - }: _(RawOrigin::Root, validator.did(), signatories.clone()) + let did = get_did::(&validator); + }: _(RawOrigin::Root, did, signatories.clone()) verify { for key in signatories { assert!(!>::contains_key(&key)); @@ -970,9 +975,9 @@ benchmarks! { let mut stashes = Vec::with_capacity(m as usize); for i in 0 .. m { let stash = create_funded_user::("stash", i, 1000); - stashes.push(stash.account()); + stashes.push(stash.clone()); Validators::::insert( - stash.account(), + stash, ValidatorPrefs { commission: Perbill::from_percent(70), ..Default::default() diff --git a/pallets/staking/src/lib.rs b/pallets/staking/src/lib.rs index 99ffdcdeb4..9c4dac9b20 100644 --- a/pallets/staking/src/lib.rs +++ b/pallets/staking/src/lib.rs @@ -289,9 +289,12 @@ pub mod testing_utils; pub mod inflation; pub mod slashing; -pub mod types; pub mod weights; +pub mod permissioned; +pub use permissioned::PolymeshConvertCurve; +pub mod types; + pub mod pallet; use codec::{Decode, Encode, HasCompact, MaxEncodedLen}; @@ -886,8 +889,6 @@ pub trait EraPayout { total_staked: Balance, total_issuance: Balance, era_duration_millis: u64, - max_inflated_issuance: Balance, - non_inflated_yearly_reward: Balance, ) -> (Balance, Balance); } @@ -896,8 +897,6 @@ impl EraPayout for () { _total_staked: Balance, _total_issuance: Balance, _era_duration_millis: u64, - _max_inflated_issuance: Balance, - _non_inflated_yearly_reward: Balance, ) -> (Balance, Balance) { (Default::default(), Default::default()) } @@ -905,26 +904,27 @@ impl EraPayout for () { /// Adaptor to turn a `PiecewiseLinear` curve definition into an `EraPayout` impl, used for /// backwards compatibility. -pub struct ConvertCurve(sp_std::marker::PhantomData); +pub struct ConvertCurve(sp_std::marker::PhantomData<(T, C)>); -impl>> - EraPayout for ConvertCurve +impl< + Balance: AtLeast32BitUnsigned + Clone, + T: Config, + C: Get<&'static PiecewiseLinear<'static>>, + > EraPayout for ConvertCurve { fn era_payout( total_staked: Balance, total_issuance: Balance, era_duration_millis: u64, - max_inflated_issuance: Balance, - non_inflated_yearly_reward: Balance, ) -> (Balance, Balance) { let (validator_payout, max_payout) = inflation::compute_total_payout( - T::get(), + C::get(), total_staked, total_issuance, // Duration of era; more than u64::MAX is rewarded as u64::MAX. era_duration_millis, - max_inflated_issuance, - non_inflated_yearly_reward, + T::MaxVariableInflationTotalIssuance::get(), + T::FixedYearlyReward::get(), ); let rest = max_payout.saturating_sub(validator_payout.clone()); (validator_payout, rest) diff --git a/pallets/staking/src/pallet/impls.rs b/pallets/staking/src/pallet/impls.rs index 5c66658b32..b35ee14724 100644 --- a/pallets/staking/src/pallet/impls.rs +++ b/pallets/staking/src/pallet/impls.rs @@ -53,15 +53,11 @@ use super::{pallet::*, STAKING_ID}; // Polymesh change // ----------------------------------------------------------------- -use frame_support::traits::schedule::Anon; -use frame_support::traits::schedule::{DispatchTime, HIGHEST_PRIORITY}; use frame_support::traits::DefensiveSaturating; use polymesh_primitives::traits::IdentityFnTrait; -use polymesh_primitives::IdentityId; -use polymesh_primitives::GC_DID; -use crate::pallet::SlashingSwitch; +use crate::types::PermissionedStaking; use crate::UnlockChunk; // ----------------------------------------------------------------- @@ -120,23 +116,25 @@ impl Pallet { ledger = ledger.consolidate_unlocked(current_era) } - let used_weight = - if ledger.unlocking.is_empty() && ledger.active <= T::Currency::minimum_balance() { - // This account must have called `unbond()` with some value that caused the active - // portion to fall below existential deposit + will have no more unlocking chunks - // left. We can now safely remove all staking-related information. - Self::kill_stash(&stash, num_slashing_spans)?; - // Remove the lock. - T::Currency::remove_lock(STAKING_ID, &stash); - - ::WeightInfo::withdraw_unbonded_kill(num_slashing_spans) - } else { - // This was the consequence of a partial unbond. just update the ledger and move on. - Self::update_ledger(&controller, &ledger); + // Polymesh change: + // use T::Permissioned::reapable(amount) + let used_weight = if ledger.unlocking.is_empty() && T::Permissioned::reapable(ledger.active) + { + // This account must have called `unbond()` with some value that caused the active + // portion to fall below existential deposit + will have no more unlocking chunks + // left. We can now safely remove all staking-related information. + Self::kill_stash(&stash, num_slashing_spans)?; + // Remove the lock. + T::Currency::remove_lock(STAKING_ID, &stash); + + ::WeightInfo::withdraw_unbonded_kill(num_slashing_spans) + } else { + // This was the consequence of a partial unbond. just update the ledger and move on. + Self::update_ledger(&controller, &ledger); - // This is only an update, so we use less overall weight. - ::WeightInfo::withdraw_unbonded_update(num_slashing_spans) - }; + // This is only an update, so we use less overall weight. + ::WeightInfo::withdraw_unbonded_update(num_slashing_spans) + }; // `old_total` should never be less than the new total because // `consolidate_unlocked` strictly subtracts balance. @@ -152,7 +150,7 @@ impl Pallet { Ok(used_weight) } - pub(super) fn do_payout_stakers( + pub fn do_payout_stakers( validator_stash: T::AccountId, era: EraIndex, ) -> DispatchResultWithPostInfo { @@ -309,7 +307,7 @@ impl Pallet { /// Update the ledger for a controller. /// /// This will also update the stash lock. - pub(crate) fn update_ledger(controller: &T::AccountId, ledger: &StakingLedger) { + pub fn update_ledger(controller: &T::AccountId, ledger: &StakingLedger) { T::Currency::set_lock( STAKING_ID, &ledger.stash, @@ -320,10 +318,10 @@ impl Pallet { } /// Chill a stash account. - pub(crate) fn chill_stash(stash: &T::AccountId) { + pub fn chill_stash(stash: &T::AccountId) { // Polymesh change // ----------------------------------------------------------------- - Self::release_running_validator(stash); + T::Permissioned::on_chill(stash); // ----------------------------------------------------------------- let chilled_as_validator = Self::do_remove_validator(stash); let chilled_as_nominator = Self::do_remove_nominator(stash); @@ -496,51 +494,13 @@ impl Pallet { let era_duration = (now_as_millis_u64 - active_era_start).saturated_into::(); let staked = Self::eras_total_stake(&active_era.index); let issuance = T::Currency::total_issuance(); - let (validator_payout, remainder) = T::EraPayout::era_payout( - staked, - issuance, - era_duration, - T::MaxVariableInflationTotalIssuance::get(), - T::FixedYearlyReward::get(), - ); + let (validator_payout, remainder) = + T::EraPayout::era_payout(staked, issuance, era_duration); // Polymesh change // ----------------------------------------------------------------- // Schedule rewards - let next_block_number = >::block_number() + 1u32.into(); - for (index, validator_id) in T::SessionInterface::validators().into_iter().enumerate() { - let schedule_block_number = - next_block_number + index.saturated_into::(); - match T::RewardScheduler::schedule( - DispatchTime::At(schedule_block_number), - None, - HIGHEST_PRIORITY, - RawOrigin::Root.into(), - Call::::payout_stakers_by_system { - validator_stash: validator_id.clone(), - era: active_era.index, - }.into() - ) { - Ok(_) => log!( - info, - "💸 Rewards are successfully scheduled for validator id: {:?} at block number: {:?}", - &validator_id, - schedule_block_number, - ), - Err(error) => { - log!( - error, - "â›” Detected error in scheduling the reward payment: {:?}", - error - ); - Self::deposit_event(Event::::RewardPaymentSchedulingInterrupted { - account_id: validator_id, - era: active_era.index, - error - }); - } - } - } + T::Permissioned::schedule_payouts(&active_era); // ----------------------------------------------------------------- Self::deposit_event(Event::::EraPaid { @@ -904,9 +864,8 @@ impl Pallet { }; } else if Validators::::contains_key(&voter) { validators_seen.saturating_inc(); - if Self::is_validator_compliant(&voter) - && Self::is_validator_active_balance_valid(&voter) - { + // Polymesh change: check if the validator is compliant + if T::Permissioned::is_validator_compliant(&voter) { // if this voter is a validator: let self_vote = ( voter.clone(), @@ -981,9 +940,8 @@ impl Pallet { if Validators::::contains_key(&target) { validators_seen.saturating_inc(); - if Self::is_validator_compliant(&target) - && Self::is_validator_active_balance_valid(&target) - { + // Polymesh change: check if the validator is compliant + if T::Permissioned::is_validator_compliant(&target) { all_targets.push(target); } } @@ -1097,50 +1055,6 @@ impl Pallet { ); } - // Polymesh change - // ----------------------------------------------------------------- - - /// Returns `true` if active balance is above [`MinValidatorBond`]. Otherwise, returns `false`. - pub(crate) fn is_validator_active_balance_valid(who: &T::AccountId) -> bool { - if let Some(controller) = Self::bonded(&who) { - if let Some(ledger) = Self::ledger(&controller) { - return ledger.active >= MinValidatorBond::::get(); - } - } - false - } - - /// Returns `true` if `stash` has a valid cdd claim and is permissioned. Otherwise, returns `false`. - pub(crate) fn is_validator_compliant(stash: &T::AccountId) -> bool { - pallet_identity::Pallet::::get_identity(stash).map_or(false, |id| { - pallet_identity::Pallet::::has_valid_cdd(id) - && Self::permissioned_identity(id).is_some() - }) - } - - /// Decrease the running count of validators by 1 for the stash identity. - pub(crate) fn release_running_validator(stash: &T::AccountId) { - if !>::contains_key(stash) { - return; - } - - if let Some(did) = pallet_identity::Pallet::::get_identity(stash) { - PermissionedIdentity::::mutate(&did, |preferences| { - if let Some(p) = preferences { - if p.running_count > 0 { - p.running_count -= 1; - } - } - }); - pallet_identity::Pallet::::remove_account_key_ref_count(&stash); - } - } - - /// Returns the maximum number of validators per identiy - pub fn maximum_number_of_validators_per_identity() -> u32 { - (T::MaxValidatorPerIdentity::get() * Self::validator_count()).max(1) - } - pub fn unbond_balance( controller_account: T::AccountId, ledger: &mut StakingLedger, @@ -1208,40 +1122,6 @@ impl Pallet { Ok(()) } - - pub(crate) fn base_chill_from_governance( - origin: T::RuntimeOrigin, - identity: IdentityId, - stash_keys: Vec, - ) -> DispatchResult { - T::AdminOrigin::ensure_origin(origin)?; - - for key in &stash_keys { - let key_did = pallet_identity::Pallet::::get_identity(&key); - // Checks if the stash key identity is the same as the identity given. - ensure!(key_did == Some(identity), Error::::NotStash); - // Checks if the key is a validator if not returns an error. - ensure!( - >::contains_key(&key), - Error::::ValidatorNotFound - ); - } - - for key in stash_keys { - Self::chill_stash(&key); - } - - // Change identity status to be Non-Permissioned - PermissionedIdentity::::remove(&identity); - - Self::deposit_event(Event::::PermissionedIdentityRemoved { - governance_councill_did: GC_DID, - validators_identity: identity, - }); - Ok(()) - } - - // ----------------------------------------------------------------- } impl Pallet { @@ -1558,10 +1438,10 @@ where // Polymesh change // ----------------------------------------------------------------- let slash_fraction_none = vec![Perbill::from_parts(0); slash_fraction.len()]; - let slash_fraction = if SlashingAllowedFor::::get() == SlashingSwitch::None { - slash_fraction_none.as_slice() - } else { + let slash_fraction = if T::Permissioned::is_slashing_enabled() { slash_fraction + } else { + slash_fraction_none.as_slice() }; // ----------------------------------------------------------------- diff --git a/pallets/staking/src/pallet/mod.rs b/pallets/staking/src/pallet/mod.rs index 76c103a480..83e5679e08 100644 --- a/pallets/staking/src/pallet/mod.rs +++ b/pallets/staking/src/pallet/mod.rs @@ -60,7 +60,7 @@ use pallet_identity::Config as IdentityConfig; use polymesh_primitives::GC_DID; use polymesh_primitives::{storage_migration_ver, traits::IdentityFnTrait, IdentityId}; -use crate::types::{PermissionedIdentityPrefs, SlashingSwitch}; +use crate::types::{PermissionedIdentityPrefs, PermissionedStaking, SlashingSwitch}; // ----------------------------------------------------------------- const STAKING_ID: LockIdentifier = *b"staking "; @@ -327,6 +327,9 @@ pub mod pallet { // Polymesh change // ----------------------------------------------------------------- + /// Permissioned staking. + type Permissioned: PermissionedStaking; + /// Maximum amount of validators that can run by an identity. /// It will be MaxValidatorPerIdentity * Self::validator_count(). #[pallet::constant] @@ -1096,6 +1099,7 @@ pub mod pallet { return Err(Error::::AlreadyBonded.into()); } + // Polymesh added: // An existing controller cannot become a stash. if >::contains_key(&stash) { return Err(Error::::AlreadyPaired.into()); @@ -1326,19 +1330,6 @@ pub mod pallet { Error::::CommissionTooLow ); - // ensure their commission is correct. - ensure!( - prefs.commission <= Self::validator_commission_cap(), - Error::::CommissionTooHigh - ); - - // Polymesh change - // ----------------------------------------------------------------- - let stash_did = pallet_identity::Pallet::::get_identity(stash) - .ok_or(Error::::StashIdentityDoesNotExist)?; - let mut stash_did_prefs = Self::permissioned_identity(stash_did) - .ok_or(Error::::StashIdentityNotPermissioned)?; - // Only check limits if they are not already a validator. if !Validators::::contains_key(stash) { // If this error is reached, we need to adjust the `MinValidatorBond` and start @@ -1350,16 +1341,11 @@ pub mod pallet { Error::::TooManyValidators ); } - // Ensure the identity doesn't run more validators than the intended count - ensure!( - stash_did_prefs.running_count < stash_did_prefs.intended_count, - Error::::TooManyValidators - ); - stash_did_prefs.running_count += 1; - pallet_identity::Pallet::::add_account_key_ref_count(&stash); - PermissionedIdentity::::insert(stash_did, stash_did_prefs); + // Polymesh change + // ----------------------------------------------------------------- + T::Permissioned::on_validate(stash, prefs.commission)?; + // ----------------------------------------------------------------- } - // ----------------------------------------------------------------- Self::do_remove_nominator(stash); Self::do_add_validator(stash, prefs.clone()); @@ -1435,9 +1421,9 @@ pub mod pallet { // Polymesh change // ----------------------------------------------------------------- - let nominator_did = pallet_identity::Pallet::::get_identity(&stash); + T::Permissioned::on_nominate(&stash)?; - Self::release_running_validator(&stash); + let nominator_did = pallet_identity::Pallet::::get_identity(&stash); Self::deposit_event(Event::::Nominated { nominator_identity: nominator_did.unwrap_or_default(), stash: ledger.stash.clone(), @@ -1525,6 +1511,7 @@ pub mod pallet { return Err(Error::::AlreadyPaired.into()); } + // Polymesh added: // Prevents stashes which are controllers of another ledger from calling the extrinsic if old_controller != stash { if >::contains_key(&stash) { @@ -1835,12 +1822,14 @@ pub mod pallet { ) -> DispatchResultWithPostInfo { let _ = ensure_signed(origin)?; - let ed = T::Currency::minimum_balance(); - let reapable = T::Currency::total_balance(&stash) <= ed - || Self::ledger(Self::bonded(stash.clone()).ok_or(Error::::NotStash)?) - .map(|l| l.total) - .unwrap_or_default() - < ed; + // Polymesh change: + // use T::Permissioned::reapable(amount) + let reapable = T::Permissioned::reapable(T::Currency::total_balance(&stash)) + || T::Permissioned::reapable( + Self::ledger(Self::bonded(stash.clone()).ok_or(Error::::NotStash)?) + .map(|l| l.total) + .unwrap_or_default(), + ); ensure!(reapable, Error::::FundedTarget); Self::kill_stash(&stash, num_slashing_spans)?; @@ -2079,42 +2068,7 @@ pub mod pallet { identity: IdentityId, intended_count: Option, ) -> DispatchResult { - T::AdminOrigin::ensure_origin(origin)?; - - ensure!( - Self::permissioned_identity(&identity).is_none(), - Error::::IdentityIsAlreadyPermissioned - ); - - ensure!( - pallet_identity::Pallet::::has_valid_cdd(identity), - Error::::IdentityIsMissingCDD - ); - - match intended_count { - Some(intended_count) => { - ensure!( - intended_count < Self::maximum_number_of_validators_per_identity(), - Error::::IntendedCountIsExceedingConsensusLimit - ); - PermissionedIdentity::::insert( - &identity, - PermissionedIdentityPrefs::new(intended_count), - ); - } - None => { - PermissionedIdentity::::insert( - &identity, - PermissionedIdentityPrefs::default(), - ); - } - } - - Self::deposit_event(Event::::PermissionedIdentityAdded { - governance_councill_did: GC_DID, - validators_identity: identity, - }); - Ok(()) + Self::base_add_permissioned_validator(origin, identity, intended_count) } /// Remove an identity from the pool of (wannabe) validator identities. Effects are known in the next session. @@ -2130,20 +2084,7 @@ pub mod pallet { origin: OriginFor, identity: IdentityId, ) -> DispatchResult { - T::AdminOrigin::ensure_origin(origin)?; - - ensure!( - Self::permissioned_identity(&identity).is_some(), - Error::::IdentityNotFound - ); - - PermissionedIdentity::::remove(&identity); - - Self::deposit_event(Event::::PermissionedIdentityRemoved { - governance_councill_did: GC_DID, - validators_identity: identity, - }); - Ok(()) + Self::base_remove_permissioned_validator(origin, identity) } #[pallet::call_index(29)] @@ -2155,8 +2096,7 @@ pub mod pallet { validator_stash: T::AccountId, era: EraIndex, ) -> DispatchResultWithPostInfo { - ensure_root(origin)?; - Self::do_payout_stakers(validator_stash, era) + Self::base_payout_stakers_by_system(origin, validator_stash, era) } /// Switch slashing status on the basis of given `slashing_switch`. Can only be called by root. @@ -2166,10 +2106,7 @@ pub mod pallet { origin: OriginFor, slashing_switch: SlashingSwitch, ) -> DispatchResult { - ensure_root(origin)?; - SlashingAllowedFor::::put(slashing_switch); - Self::deposit_event(Event::::SlashingAllowedForChanged { slashing_switch }); - Ok(()) + Self::base_change_slashing_allowed_for(origin, slashing_switch) } /// Sets the intended count to `new_intended_count` for the given `identity`. @@ -2180,18 +2117,11 @@ pub mod pallet { identity: IdentityId, new_intended_count: u32, ) -> DispatchResult { - T::AdminOrigin::ensure_origin(origin)?; - - ensure!( - Self::maximum_number_of_validators_per_identity() > new_intended_count, - Error::::IntendedCountIsExceedingConsensusLimit - ); - - PermissionedIdentity::::try_mutate(&identity, |pref| { - pref.as_mut() - .ok_or_else(|| Error::::IdentityNotFound.into()) - .map(|p| p.intended_count = new_intended_count) - }) + Self::base_update_permissioned_validator_intended_count( + origin, + identity, + new_intended_count, + ) } /// Governance council forcefully chills a validator. Effects will be felt at the beginning of the next era. @@ -2213,28 +2143,7 @@ pub mod pallet { #[pallet::call_index(33)] #[pallet::weight(::WeightInfo::set_commission_cap(150))] pub fn set_commission_cap(origin: OriginFor, new_cap: Perbill) -> DispatchResult { - T::AdminOrigin::ensure_origin(origin.clone())?; - - // Update the cap, assuming it changed, or error. - let old_cap = - ValidatorCommissionCap::::try_mutate(|cap| -> Result<_, DispatchError> { - ensure!(*cap != new_cap, Error::::CommissionUnchanged); - Ok(core::mem::replace(cap, new_cap)) - })?; - - // Update `commission` in each validator prefs to `min(comission, new_cap)`. - >::translate(|_, mut prefs: ValidatorPrefs| { - prefs.commission = prefs.commission.min(new_cap); - Some(prefs) - }); - - Self::deposit_event(Event::::CommissionCapUpdated { - governance_councill_did: GC_DID, - old_commission_cap: old_cap, - new_commission_cap: new_cap, - }); - - Ok(()) + Self::base_set_commission_cap(origin, new_cap) } // ----------------------------------------------------------------- } diff --git a/pallets/staking/src/permissioned.rs b/pallets/staking/src/permissioned.rs new file mode 100644 index 0000000000..85c3e91a44 --- /dev/null +++ b/pallets/staking/src/permissioned.rs @@ -0,0 +1,423 @@ +use frame_support::{pallet_prelude::*, traits::Get}; +use frame_system::RawOrigin; +use frame_system::{ensure_root, pallet_prelude::*}; +use sp_runtime::traits::SaturatedConversion; +use sp_std::prelude::*; + +use frame_support::traits::schedule::Anon; +use frame_support::traits::schedule::{DispatchTime, HIGHEST_PRIORITY}; +use frame_support::traits::Currency; + +use polymesh_primitives::constants::GC_PALLET_ID; +use polymesh_primitives::IdentityId; +use polymesh_primitives::GC_DID; +#[cfg(feature = "runtime-benchmarks")] +use polymesh_primitives::{AuthorizationData, Permissions, Signatory}; + +use sp_runtime::traits::AccountIdConversion; + +use crate::types::{PermissionedIdentityPrefs, PermissionedStaking, SlashingSwitch, WhoToSlash}; +use crate::*; + +/// Adaptor to turn a `PiecewiseLinear` curve definition into an `EraPayout` impl, used for +/// backwards compatibility. +pub struct PolymeshConvertCurve(sp_std::marker::PhantomData<(T, C)>); + +impl< + Balance: AtLeast32BitUnsigned + Clone, + T: Config, + C: Get<&'static PiecewiseLinear<'static>>, + > EraPayout for PolymeshConvertCurve +{ + fn era_payout( + total_staked: Balance, + total_issuance: Balance, + era_duration_millis: u64, + ) -> (Balance, Balance) { + let (validator_payout, max_payout) = inflation::compute_total_payout( + C::get(), + total_staked, + total_issuance, + // Duration of era; more than u64::MAX is rewarded as u64::MAX. + era_duration_millis, + T::MaxVariableInflationTotalIssuance::get(), + T::FixedYearlyReward::get(), + ); + let rest = max_payout.saturating_sub(validator_payout.clone()); + (validator_payout, rest) + } +} + +impl PermissionedStaking for Pallet { + /// Permission a validator. + #[cfg(feature = "runtime-benchmarks")] + fn permission_validator(stash: &T::AccountId) { + let did = + pallet_identity::Pallet::::get_identity(stash).expect("Failed to get identity"); + Pallet::::add_permissioned_validator(RawOrigin::Root.into(), did, Some(2)) + .expect("Failed to add permissioned validator"); + } + + /// Setup stash and controller. + #[cfg(feature = "runtime-benchmarks")] + fn setup_stash_and_controller(stash: &T::AccountId, controller: &T::AccountId) { + let did = + pallet_identity::Pallet::::get_identity(stash).expect("Failed to get identity"); + let auth_id = pallet_identity::Pallet::::add_auth( + did, + Signatory::Account(controller.clone()), + AuthorizationData::JoinIdentity(Permissions::default()), + None, + ) + .expect("Failed to add auth"); + pallet_identity::Pallet::::join_identity_as_key( + RawOrigin::Signed(controller.clone()).into(), + auth_id, + ) + .expect("Failed to join identity as key"); + } + + /// Check if amount is under the existential deposit. + fn reapable(amount: BalanceOf) -> bool { + amount <= T::Currency::minimum_balance() + } + + fn on_validate(stash: &T::AccountId, commission: Perbill) -> DispatchResult { + // ensure their commission is correct. + ensure!( + commission <= ValidatorCommissionCap::::get(), + Error::::CommissionTooHigh + ); + + let stash_did = pallet_identity::Pallet::::get_identity(stash) + .ok_or(Error::::StashIdentityDoesNotExist)?; + let mut stash_did_prefs = PermissionedIdentity::::get(stash_did) + .ok_or(Error::::StashIdentityNotPermissioned)?; + + // Ensure the identity doesn't run more validators than the intended count + ensure!( + stash_did_prefs.running_count < stash_did_prefs.intended_count, + Error::::TooManyValidators + ); + stash_did_prefs.running_count += 1; + pallet_identity::Pallet::::add_account_key_ref_count(&stash); + PermissionedIdentity::::insert(stash_did, stash_did_prefs); + + Ok(()) + } + + /// On chill hook. + fn on_chill(stash: &T::AccountId) { + Self::release_running_validator(stash); + } + + /// On nominate hook. + fn on_nominate(stash: &T::AccountId) -> DispatchResult { + Self::release_running_validator(stash); + Ok(()) + } + + /// Returns `true` if `stash` has a valid cdd claim and is permissioned. Otherwise, returns `false`. + fn is_validator_compliant(stash: &T::AccountId) -> bool { + pallet_identity::Pallet::::get_identity(stash).map_or(false, |id| { + pallet_identity::Pallet::::has_valid_cdd(id) + && PermissionedIdentity::::get(id).is_some() + && Self::is_validator_active_balance_valid(stash) + }) + } + + /// Returns `true` if `who` has a valid cdd claim. Otherwise, returns `false`. + fn is_nominator_compliant(_who: &T::AccountId) -> bool { + true + } + + /// Schedule reward payouts. + fn schedule_payouts(active_era: &ActiveEraInfo) { + let next_block_number = >::block_number() + 1u32.into(); + for (index, validator_id) in T::SessionInterface::validators().into_iter().enumerate() { + let schedule_block_number = + next_block_number + index.saturated_into::(); + match T::RewardScheduler::schedule( + DispatchTime::At(schedule_block_number), + None, + HIGHEST_PRIORITY, + RawOrigin::Root.into(), + Call::::payout_stakers_by_system { + validator_stash: validator_id.clone(), + era: active_era.index, + }.into() + ) { + Ok(_) => log!( + info, + "💸 Rewards are successfully scheduled for validator id: {:?} at block number: {:?}", + &validator_id, + schedule_block_number, + ), + Err(error) => { + log!( + error, + "â›” Detected error in scheduling the reward payment: {:?}", + error + ); + Pallet::::deposit_event(Event::::RewardPaymentSchedulingInterrupted { + account_id: validator_id, + era: active_era.index, + error + }); + } + } + } + } + + /// Who should be slashed? + /// Returns `None` if no one should be slashed. + fn who_to_slash() -> Option { + SlashingAllowedFor::::get().into() + } +} + +impl Pallet { + /// Returns `true` if active balance is above [`MinValidatorBond`]. Otherwise, returns `false`. + pub(crate) fn is_validator_active_balance_valid(who: &T::AccountId) -> bool { + if let Some(controller) = Bonded::::get(&who) { + if let Some(ledger) = Ledger::::get(&controller) { + return ledger.active >= MinValidatorBond::::get(); + } + } + false + } + + pub(crate) fn get_bonding_duration_period() -> u64 { + (T::SessionsPerEra::get() * T::BondingDuration::get()) as u64 // total session + * T::EpochDuration::get() // session length + * T::ExpectedBlockTime::get().saturated_into::() + } + + /// Decrease the running count of validators by 1 for the stash identity. + pub(crate) fn release_running_validator(stash: &T::AccountId) { + if !>::contains_key(stash) { + return; + } + + if let Some(did) = pallet_identity::Pallet::::get_identity(stash) { + PermissionedIdentity::::mutate(&did, |preferences| { + if let Some(p) = preferences { + if p.running_count > 0 { + p.running_count -= 1; + } + } + }); + pallet_identity::Pallet::::remove_account_key_ref_count(&stash); + } + } + + /// Returns the maximum number of validators per identiy + pub fn maximum_number_of_validators_per_identity() -> u32 { + (T::MaxValidatorPerIdentity::get() * ValidatorCount::::get()).max(1) + } + + pub(crate) fn base_add_permissioned_validator( + origin: OriginFor, + identity: IdentityId, + intended_count: Option, + ) -> DispatchResult { + T::AdminOrigin::ensure_origin(origin)?; + + ensure!( + Self::permissioned_identity(&identity).is_none(), + Error::::IdentityIsAlreadyPermissioned + ); + + ensure!( + pallet_identity::Pallet::::has_valid_cdd(identity), + Error::::IdentityIsMissingCDD + ); + + match intended_count { + Some(intended_count) => { + ensure!( + intended_count < Self::maximum_number_of_validators_per_identity(), + Error::::IntendedCountIsExceedingConsensusLimit + ); + PermissionedIdentity::::insert( + &identity, + PermissionedIdentityPrefs::new(intended_count), + ); + } + None => { + PermissionedIdentity::::insert(&identity, PermissionedIdentityPrefs::default()); + } + } + + Pallet::::deposit_event(Event::::PermissionedIdentityAdded { + governance_councill_did: GC_DID, + validators_identity: identity, + }); + Ok(()) + } + + pub(crate) fn base_remove_permissioned_validator( + origin: OriginFor, + identity: IdentityId, + ) -> DispatchResult { + T::AdminOrigin::ensure_origin(origin)?; + + ensure!( + Self::permissioned_identity(&identity).is_some(), + Error::::IdentityNotFound + ); + + PermissionedIdentity::::remove(&identity); + + Pallet::::deposit_event(Event::::PermissionedIdentityRemoved { + governance_councill_did: GC_DID, + validators_identity: identity, + }); + Ok(()) + } + + pub(crate) fn base_validate_cdd_expiry_nominators( + origin: OriginFor, + targets: Vec, + ) -> DispatchResult { + ensure_root(origin.clone())?; + + ensure!(!targets.is_empty(), Error::::EmptyTargets); + + let mut expired_nominators = Vec::new(); + // Iterate provided list of accountIds (These accountIds should be stash type account). + for target in targets + .iter() + // Nominator must be vouching for someone. + .filter(|target| Self::nominators(target).is_some()) + // Access the DIDs of the nominators whose CDDs have expired. + .filter(|target| { + // Fetch all the claim values provided by the trusted service providers + // There is a possibility that nominator will have more than one claim for the same key, + // So we iterate all of them and if any one of the claim value doesn't expire then nominator posses + // valid CDD otherwise it will be removed from the pool of the nominators. + // If the target has no DID, it's also removed. + pallet_identity::Pallet::::get_identity(&target) + .filter(|did| pallet_identity::Pallet::::has_valid_cdd(*did)) + .is_none() + }) + { + // Un-bonding the balance that bonded with the controller account of a Stash account + // This unbonded amount only be accessible after completion of the BondingDuration + // Controller account need to call the dispatchable function `withdraw_unbond` to withdraw fund. + + let controller = Self::bonded(target).ok_or(Error::::NotStash)?; + let mut ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; + let active_balance = ledger.active; + if ledger.unlocking.len() < T::MaxUnlockingChunks::get() as usize { + Self::unbond_balance(controller, &mut ledger, active_balance)?; + + expired_nominators.push(target.clone()); + // Free the nominator from the valid nominator list + >::remove(target); + } + } + Pallet::::deposit_event(Event::::InvalidatedNominators { + governance_councill_did: GC_DID, + governance_councill_account: GC_PALLET_ID.into_account_truncating(), + expired_nominators: expired_nominators, + }); + Ok(()) + } + + pub(crate) fn base_payout_stakers_by_system( + origin: OriginFor, + validator_stash: T::AccountId, + era: EraIndex, + ) -> DispatchResultWithPostInfo { + ensure_root(origin)?; + Self::do_payout_stakers(validator_stash, era) + } + + pub(crate) fn base_change_slashing_allowed_for( + origin: OriginFor, + slashing_switch: SlashingSwitch, + ) -> DispatchResult { + ensure_root(origin)?; + SlashingAllowedFor::::put(slashing_switch); + Pallet::::deposit_event(Event::::SlashingAllowedForChanged { slashing_switch }); + Ok(()) + } + + pub(crate) fn base_update_permissioned_validator_intended_count( + origin: OriginFor, + identity: IdentityId, + new_intended_count: u32, + ) -> DispatchResult { + T::AdminOrigin::ensure_origin(origin)?; + + ensure!( + Self::maximum_number_of_validators_per_identity() > new_intended_count, + Error::::IntendedCountIsExceedingConsensusLimit + ); + + PermissionedIdentity::::try_mutate(&identity, |pref| { + pref.as_mut() + .ok_or_else(|| Error::::IdentityNotFound.into()) + .map(|p| p.intended_count = new_intended_count) + }) + } + + pub(crate) fn base_set_commission_cap( + origin: OriginFor, + new_cap: Perbill, + ) -> DispatchResult { + T::AdminOrigin::ensure_origin(origin.clone())?; + + // Update the cap, assuming it changed, or error. + let old_cap = ValidatorCommissionCap::::try_mutate(|cap| -> Result<_, DispatchError> { + ensure!(*cap != new_cap, Error::::CommissionUnchanged); + Ok(core::mem::replace(cap, new_cap)) + })?; + + // Update `commission` in each validator prefs to `min(comission, new_cap)`. + >::translate(|_, mut prefs: ValidatorPrefs| { + prefs.commission = prefs.commission.min(new_cap); + Some(prefs) + }); + + Pallet::::deposit_event(Event::::CommissionCapUpdated { + governance_councill_did: GC_DID, + old_commission_cap: old_cap, + new_commission_cap: new_cap, + }); + + Ok(()) + } + pub(crate) fn base_chill_from_governance( + origin: T::RuntimeOrigin, + identity: IdentityId, + stash_keys: Vec, + ) -> DispatchResult { + T::AdminOrigin::ensure_origin(origin)?; + + for key in &stash_keys { + let key_did = pallet_identity::Pallet::::get_identity(&key); + // Checks if the stash key identity is the same as the identity given. + ensure!(key_did == Some(identity), Error::::NotStash); + // Checks if the key is a validator if not returns an error. + ensure!( + >::contains_key(&key), + Error::::ValidatorNotFound + ); + } + + for key in stash_keys { + Self::chill_stash(&key); + } + + // Change identity status to be Non-Permissioned + PermissionedIdentity::::remove(&identity); + + Pallet::::deposit_event(Event::::PermissionedIdentityRemoved { + governance_councill_did: GC_DID, + validators_identity: identity, + }); + Ok(()) + } +} diff --git a/pallets/staking/src/slashing.rs b/pallets/staking/src/slashing.rs index 5314bb97a2..e7ca928177 100644 --- a/pallets/staking/src/slashing.rs +++ b/pallets/staking/src/slashing.rs @@ -50,8 +50,8 @@ //! Based on research at use crate::{ - types::SlashingSwitch, BalanceOf, Config, Error, Exposure, NegativeImbalanceOf, Pallet, - Perbill, SessionInterface, SlashingAllowedFor, Store, UnappliedSlash, + types::PermissionedStaking, BalanceOf, Config, Error, Exposure, NegativeImbalanceOf, Pallet, + Perbill, SessionInterface, Store, UnappliedSlash, }; use codec::{Decode, Encode, MaxEncodedLen}; use frame_support::{ @@ -303,7 +303,7 @@ pub(crate) fn compute_slash( // Polymesh change // ----------------------------------------------------------------- let mut nominators_slashed = Vec::new(); - if SlashingAllowedFor::::get() == SlashingSwitch::ValidatorAndNominator { + if T::Permissioned::slash_nominators() { reward_payout += slash_nominators::(params.clone(), prior_slash_p, &mut nominators_slashed); } @@ -665,7 +665,7 @@ pub(crate) fn apply_slash( // Polymesh change // ----------------------------------------------------------------- - if SlashingAllowedFor::::get() == SlashingSwitch::ValidatorAndNominator { + if T::Permissioned::slash_nominators() { for &(ref nominator, nominator_slash) in &unapplied_slash.others { do_slash::( nominator, diff --git a/pallets/staking/src/testing_utils.rs b/pallets/staking/src/testing_utils.rs index 089673a73b..d4267fbe9f 100644 --- a/pallets/staking/src/testing_utils.rs +++ b/pallets/staking/src/testing_utils.rs @@ -36,8 +36,8 @@ const SEED: u32 = 0; // Polymesh change // ----------------------------------------------------------------- -use pallet_identity::benchmarking::{User, UserBuilder}; -use polymesh_primitives::{AuthorizationData, Permissions, Signatory}; +use crate::types::PermissionedStaking; +use pallet_identity::benchmarking::UserBuilder; // ----------------------------------------------------------------- /// This function removes all validators and nominators from storage. @@ -54,10 +54,7 @@ pub fn clear_validators_and_nominators() { } /// Grab a funded user. -pub fn create_funded_user(string: &'static str, n: u32, balance: u32) -> User -where - T: Config, -{ +pub fn create_funded_user(string: &'static str, n: u32, balance: u32) -> T::AccountId { // Polymesh change // ----------------------------------------------------------------- let _ = T::Currency::issue(balance.into()); @@ -66,39 +63,32 @@ where .seed(n) .generate_did() .build(string) + .account() // ----------------------------------------------------------------- } /// Create a stash and controller pair. -pub fn create_stash_controller( +pub fn create_stash_controller( n: u32, balance: u32, destination: RewardDestination, -) -> Result<(User, User), &'static str> -where - T: Config, -{ +) -> Result<(T::AccountId, T::AccountId), &'static str> { let stash = create_funded_user::("stash", n, balance); let controller = UserBuilder::::default() .balance(balance) .seed(n) - .build("controller"); + .build("controller") + .account(); + let controller_lookup = T::Lookup::unlookup(controller.clone()); // Polymesh change // ----------------------------------------------------------------- // Attach the controller key as secondary key of the stash - let auth_id = pallet_identity::Pallet::::add_auth( - stash.did(), - Signatory::Account(controller.account()), - AuthorizationData::JoinIdentity(Permissions::default()), - None, - )?; - pallet_identity::Pallet::::join_identity_as_key(controller.origin().into(), auth_id)?; + T::Permissioned::setup_stash_and_controller(&stash, &controller); // ----------------------------------------------------------------- - let controller_lookup = controller.lookup(); Staking::::bond( - stash.origin().into(), + RawOrigin::Signed(stash.clone()).into(), controller_lookup, (balance / 10).into(), destination, @@ -112,34 +102,19 @@ pub fn create_stash_and_dead_controller( n: u32, balance: u32, destination: RewardDestination, -) -> Result<(User, User), &'static str> -where - T: Config, -{ +) -> Result<(T::AccountId, T::AccountId), &'static str> { let stash = create_funded_user::("stash", n, balance); - let controller_account: T::AccountId = account("controller", n, 100); - let controller = User { - account: controller_account.clone(), - origin: RawOrigin::Signed(controller_account), - did: None, - secret: None, - }; + let controller: T::AccountId = account("controller", n, 100); + let controller_lookup = T::Lookup::unlookup(controller.clone()); // Polymesh change // ----------------------------------------------------------------- // Attach the controller key as secondary key of the stash - let auth_id = pallet_identity::Pallet::::add_auth( - stash.did(), - Signatory::Account(controller.account()), - AuthorizationData::JoinIdentity(Permissions::default()), - None, - )?; - pallet_identity::Pallet::::join_identity_as_key(controller.origin().into(), auth_id)?; + T::Permissioned::setup_stash_and_controller(&stash, &controller); // ----------------------------------------------------------------- - let controller_lookup = controller.lookup(); Staking::::bond( - stash.origin().into(), + RawOrigin::Signed(stash.clone()).into(), controller_lookup, (balance / 10).into(), destination, @@ -178,10 +153,11 @@ where }; // Polymesh change // ----------------------------------------------------------------- - Staking::::add_permissioned_validator(RawOrigin::Root.into(), stash.did(), Some(2))?; + T::Permissioned::permission_validator(&stash); // ----------------------------------------------------------------- - Staking::::validate(controller.origin().into(), validator_prefs)?; - validators.push(stash.lookup()); + Staking::::validate(RawOrigin::Signed(controller).into(), validator_prefs)?; + let stash_lookup = T::Lookup::unlookup(stash); + validators.push(stash_lookup); } Ok(validators) @@ -227,13 +203,16 @@ where }; let (v_stash, v_controller) = create_stash_controller::(i, balance_factor, RewardDestination::Staked)?; - Staking::::add_permissioned_validator(RawOrigin::Root.into(), v_stash.did(), Some(2))?; + T::Permissioned::permission_validator(&v_stash); let validator_prefs = ValidatorPrefs { commission: Perbill::from_percent(50), ..Default::default() }; - Staking::::validate(v_controller.origin().into(), validator_prefs)?; - let stash_lookup = v_stash.lookup(); + Staking::::validate( + RawOrigin::Signed(v_controller.clone()).into(), + validator_prefs, + )?; + let stash_lookup = T::Lookup::unlookup(v_stash.clone()); validators_stash.push(stash_lookup.clone()); } @@ -260,7 +239,7 @@ where let validator = available_validators.remove(selected); selected_validators.push(validator); } - Staking::::nominate(n_controller.origin().into(), selected_validators)?; + Staking::::nominate(RawOrigin::Signed(n_controller).into(), selected_validators)?; } ValidatorCount::::put(validators); diff --git a/pallets/staking/src/types.rs b/pallets/staking/src/types.rs index 2377d56c79..2a36226f5f 100644 --- a/pallets/staking/src/types.rs +++ b/pallets/staking/src/types.rs @@ -2,8 +2,73 @@ use sp_runtime::{Deserialize, Serialize}; use codec::{Decode, Encode, MaxEncodedLen}; +use frame_support::dispatch::DispatchResult; +use frame_support::traits::Currency; use scale_info::TypeInfo; -use sp_runtime::RuntimeDebug; +use sp_runtime::{Perbill, RuntimeDebug}; + +use crate::{ActiveEraInfo, BalanceOf, Config}; + +/// A trait used by the staking pallet for permissioned staking. +/// +/// A permissioned Substrate network can be configured to allow only a set of +/// identities to participate in staking. This trait is used to define the +/// behavior of the staking pallet in such a network. +pub trait PermissionedStaking { + /// Permission a validator. + #[cfg(feature = "runtime-benchmarks")] + fn permission_validator(_who: &T::AccountId) {} + + /// Setup stash and controller. + #[cfg(feature = "runtime-benchmarks")] + fn setup_stash_and_controller(_stash: &T::AccountId, _controller: &T::AccountId) {} + + /// Check if amount is under the existential deposit. + fn reapable(amount: BalanceOf) -> bool { + amount < T::Currency::minimum_balance() + } + + /// On validate hook. + fn on_validate(_who: &T::AccountId, _commission: Perbill) -> DispatchResult { + Ok(()) + } + + /// On chill hook. + fn on_chill(_who: &T::AccountId) {} + + /// On nominate hook. + fn on_nominate(_who: &T::AccountId) -> DispatchResult { + Ok(()) + } + + /// Is the validator still compliant? + fn is_validator_compliant(_who: &T::AccountId) -> bool { + true + } + + /// Is the nominator still compliant? + fn is_nominator_compliant(_who: &T::AccountId) -> bool { + true + } + + /// Schedule reward payouts. + fn schedule_payouts(_active_era: &ActiveEraInfo) {} + + /// Who should be slashed? + fn who_to_slash() -> Option { + Some(WhoToSlash::ValidatorAndNominator) + } + + /// Is slashing enabled? + fn is_slashing_enabled() -> bool { + Self::who_to_slash().is_some() + } + + /// Slash nominators? + fn slash_nominators() -> bool { + Self::who_to_slash() == Some(WhoToSlash::ValidatorAndNominator) + } +} /// Preference of an identity regarding validation. #[derive(Decode, Encode, RuntimeDebug, TypeInfo)] @@ -38,6 +103,17 @@ impl PermissionedIdentityPrefs { } } +/// Who should be slashed. +#[derive(Decode, Encode, MaxEncodedLen, RuntimeDebug, TypeInfo)] +#[derive(Clone, Copy, Eq, PartialEq)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub enum WhoToSlash { + /// Allow validators but not nominators to get slashed. + Validator, + /// Allow both validators and nominators to get slashed. + ValidatorAndNominator, +} + /// Switch used to change the "victim" for slashing. Victims can be /// validators, both validators and nominators, or no-one. #[derive(Decode, Encode, MaxEncodedLen, RuntimeDebug, TypeInfo)] @@ -52,3 +128,13 @@ pub enum SlashingSwitch { #[default] None, } + +impl From for Option { + fn from(value: SlashingSwitch) -> Self { + match value { + SlashingSwitch::Validator => Some(WhoToSlash::Validator), + SlashingSwitch::ValidatorAndNominator => Some(WhoToSlash::ValidatorAndNominator), + SlashingSwitch::None => None, + } + } +} From eec94dc61c589fac742bc4cb7c1fa1667a0ae014 Mon Sep 17 00:00:00 2001 From: Robert Gabriel Jakabosky Date: Tue, 20 May 2025 22:35:02 +0800 Subject: [PATCH 07/97] Staking split (#1813) * Revert benchmarking and testing utils to Substrate code. * Port our staking benchmarks onto the Substrate code. * Split the permissioned validator logic into a different pallet. * Update tests. * cargo fmt * Move Polymesh types out of staking pallet. * Cleanup * Clean and revert some changes. * Import Substrate mock/tests. * Use staking pallet from Substrate. * Fix tests. * Remove old PolymeshStorageVersion. * Remove unused events. * Add migration. * Switch Substrate branches. * FIXUP: weights. --- .circleci/config.yml | 2 +- Cargo.lock | 344 +-- Cargo.toml | 194 +- node-rpc/Cargo.toml | 1 - node-rpc/src/lib.rs | 3 - pallets/runtime/common/src/runtime.rs | 18 +- pallets/runtime/develop/Cargo.toml | 8 +- .../develop/src/benchmarks/pallet_session.rs | 5 - pallets/runtime/develop/src/runtime.rs | 8 +- pallets/runtime/mainnet/Cargo.toml | 6 +- pallets/runtime/mainnet/src/runtime.rs | 7 +- pallets/runtime/testnet/Cargo.toml | 6 +- pallets/runtime/testnet/src/runtime.rs | 7 +- pallets/runtime/tests/Cargo.toml | 4 +- pallets/runtime/tests/src/staking/mock.rs | 54 +- pallets/runtime/tests/src/staking/mod.rs | 79 +- .../runtime/tests/src/staking_extra_tests.rs | 4 +- pallets/runtime/tests/src/storage.rs | 5 +- pallets/staking/rpc/Cargo.toml | 26 - pallets/staking/rpc/runtime-api/Cargo.toml | 21 - pallets/staking/rpc/runtime-api/src/lib.rs | 12 - pallets/staking/rpc/src/lib.rs | 56 - pallets/staking/src/benchmarking.rs | 1118 --------- pallets/staking/src/lib.rs | 1057 -------- pallets/staking/src/pallet/impls.rs | 2004 --------------- pallets/staking/src/pallet/mod.rs | 2155 ----------------- pallets/staking/src/slashing.rs | 996 -------- pallets/staking/src/testing_utils.rs | 252 -- pallets/staking/src/types.rs | 140 -- pallets/staking/src/weights.rs | 63 - pallets/{staking => validators}/Cargo.toml | 26 +- pallets/validators/src/benchmarking.rs | 277 +++ .../{staking => validators}/src/inflation.rs | 0 pallets/validators/src/lib.rs | 391 +++ .../src/permissioned.rs | 43 +- pallets/validators/src/types.rs | 65 + pallets/weights/Cargo.toml | 2 + pallets/weights/src/lib.rs | 1 + pallets/weights/src/pallet_staking.rs | 80 - pallets/weights/src/pallet_validators.rs | 175 ++ scripts/test.sh | 2 +- src/chain_spec.rs | 53 +- src/service.rs | 8 +- 43 files changed, 1403 insertions(+), 8375 deletions(-) delete mode 100644 pallets/staking/rpc/Cargo.toml delete mode 100644 pallets/staking/rpc/runtime-api/Cargo.toml delete mode 100644 pallets/staking/rpc/runtime-api/src/lib.rs delete mode 100644 pallets/staking/rpc/src/lib.rs delete mode 100644 pallets/staking/src/benchmarking.rs delete mode 100644 pallets/staking/src/lib.rs delete mode 100644 pallets/staking/src/pallet/impls.rs delete mode 100644 pallets/staking/src/pallet/mod.rs delete mode 100644 pallets/staking/src/slashing.rs delete mode 100644 pallets/staking/src/testing_utils.rs delete mode 100644 pallets/staking/src/types.rs delete mode 100644 pallets/staking/src/weights.rs rename pallets/{staking => validators}/Cargo.toml (78%) create mode 100644 pallets/validators/src/benchmarking.rs rename pallets/{staking => validators}/src/inflation.rs (100%) create mode 100644 pallets/validators/src/lib.rs rename pallets/{staking => validators}/src/permissioned.rs (91%) create mode 100644 pallets/validators/src/types.rs create mode 100644 pallets/weights/src/pallet_validators.rs diff --git a/.circleci/config.yml b/.circleci/config.yml index 0b68a27491..25c2d2c8f5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -419,7 +419,7 @@ jobs: name: Tests command: >- cargo test - --package pallet-staking + --package pallet-validators --package pallet-group --package pallet-sudo --package pallet-pips diff --git a/Cargo.lock b/Cargo.lock index 22574a0725..c04909417a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2023,7 +2023,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", ] @@ -2046,7 +2046,7 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-support", "frame-support-procedural", @@ -2071,7 +2071,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "Inflector", "array-bytes", @@ -2118,7 +2118,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -2129,7 +2129,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2146,7 +2146,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-support", "frame-system", @@ -2174,7 +2174,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "bitflags 1.3.2", "environmental", @@ -2207,7 +2207,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "Inflector", "cfg-expr", @@ -2222,7 +2222,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.1.3", @@ -2234,7 +2234,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "proc-macro2", "quote", @@ -2244,7 +2244,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-support", "log", @@ -2262,7 +2262,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-benchmarking", "frame-support", @@ -2277,7 +2277,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "sp-api", @@ -4640,7 +4640,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-support", "frame-system", @@ -4656,7 +4656,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-support", "frame-system", @@ -4670,7 +4670,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-benchmarking", "frame-support", @@ -4719,7 +4719,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-benchmarking", "frame-support", @@ -4804,7 +4804,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "bitflags 1.3.2", "frame-benchmarking", @@ -4833,7 +4833,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "bitflags 1.3.2", "parity-scale-codec 3.6.9", @@ -4846,7 +4846,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "proc-macro2", "quote", @@ -4887,7 +4887,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4910,7 +4910,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4944,7 +4944,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-benchmarking", "frame-support", @@ -5050,7 +5050,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-benchmarking", "frame-support", @@ -5070,7 +5070,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-benchmarking", "frame-support", @@ -5087,7 +5087,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-support", "frame-system", @@ -5142,7 +5142,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-support", "frame-system", @@ -5228,7 +5228,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-benchmarking", "frame-support", @@ -5312,7 +5312,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-benchmarking", "frame-support", @@ -5329,7 +5329,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-support", "frame-system", @@ -5382,7 +5382,8 @@ dependencies = [ [[package]] name = "pallet-staking" -version = "2.0.0" +version = "4.0.0-dev" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5390,30 +5391,22 @@ dependencies = [ "frame-system", "log", "pallet-authorship", - "pallet-babe", - "pallet-identity", "pallet-session", - "pallet-staking-reward-curve", "parity-scale-codec 3.6.9", - "polymesh-primitives", "rand_chacha 0.2.2", "scale-info", "serde", - "sp-arithmetic", - "sp-core", + "sp-application-crypto", "sp-io", - "sp-npos-elections", "sp-runtime", "sp-staking", "sp-std", - "sp-tracing", - "static_assertions", ] [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -5422,31 +5415,12 @@ dependencies = [ ] [[package]] -name = "pallet-staking-rpc" -version = "2.0.0" +name = "pallet-staking-runtime-api" +version = "4.0.0-dev" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ - "frame-support", - "frame-system", - "jsonrpsee", - "node-rpc", - "pallet-staking-rpc-runtime-api", "parity-scale-codec 3.6.9", - "serde", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-staking-rpc-runtime-api" -version = "2.0.0" -dependencies = [ - "frame-support", "sp-api", - "sp-runtime", ] [[package]] @@ -5523,7 +5497,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-benchmarking", "frame-support", @@ -5599,6 +5573,37 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-validators" +version = "0.1.0" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-babe", + "pallet-identity", + "pallet-session", + "pallet-staking", + "pallet-staking-reward-curve", + "parity-scale-codec 3.6.9", + "polymesh-primitives", + "rand_chacha 0.2.2", + "scale-info", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-staking", + "sp-std", + "sp-tracing", + "static_assertions", +] + [[package]] name = "parity-db" version = "0.4.12" @@ -5976,9 +5981,10 @@ dependencies = [ "pallet-protocol-fee-rpc-runtime-api", "pallet-session", "pallet-staking", - "pallet-staking-rpc-runtime-api", + "pallet-staking-runtime-api", "pallet-sudo", "pallet-transaction-payment", + "pallet-validators", "parity-scale-codec 3.6.9", "polymesh-common-utilities", "polymesh-contracts", @@ -6090,7 +6096,6 @@ dependencies = [ "node-rpc", "pallet-group-rpc", "pallet-protocol-fee-rpc", - "pallet-staking-rpc", "polymesh-primitives", "sc-chain-spec", "sc-client-api", @@ -6229,7 +6234,7 @@ dependencies = [ "pallet-settlement", "pallet-staking", "pallet-staking-reward-curve", - "pallet-staking-rpc-runtime-api", + "pallet-staking-runtime-api", "pallet-statistics", "pallet-sto", "pallet-sudo", @@ -6237,6 +6242,7 @@ dependencies = [ "pallet-transaction-payment", "pallet-treasury", "pallet-utility", + "pallet-validators", "parity-scale-codec 3.6.9", "polymesh-build-tool", "polymesh-common-utilities", @@ -6311,7 +6317,7 @@ dependencies = [ "pallet-settlement", "pallet-staking", "pallet-staking-reward-curve", - "pallet-staking-rpc-runtime-api", + "pallet-staking-runtime-api", "pallet-statistics", "pallet-sto", "pallet-sudo", @@ -6319,6 +6325,7 @@ dependencies = [ "pallet-transaction-payment", "pallet-treasury", "pallet-utility", + "pallet-validators", "parity-scale-codec 3.6.9", "polymesh-build-tool", "polymesh-common-utilities", @@ -6395,7 +6402,7 @@ dependencies = [ "pallet-settlement", "pallet-staking", "pallet-staking-reward-curve", - "pallet-staking-rpc-runtime-api", + "pallet-staking-runtime-api", "pallet-statistics", "pallet-sto", "pallet-sudo", @@ -6403,6 +6410,7 @@ dependencies = [ "pallet-transaction-payment", "pallet-treasury", "pallet-utility", + "pallet-validators", "parity-scale-codec 3.6.9", "polymesh-build-tool", "polymesh-common-utilities", @@ -6485,7 +6493,7 @@ dependencies = [ "pallet-settlement", "pallet-staking", "pallet-staking-reward-curve", - "pallet-staking-rpc-runtime-api", + "pallet-staking-runtime-api", "pallet-statistics", "pallet-sto", "pallet-sudo", @@ -6493,6 +6501,7 @@ dependencies = [ "pallet-transaction-payment", "pallet-treasury", "pallet-utility", + "pallet-validators", "parity-scale-codec 3.6.9", "parking_lot 0.12.1", "polymesh-common-utilities", @@ -6565,6 +6574,7 @@ dependencies = [ "pallet-timestamp", "pallet-treasury", "pallet-utility", + "pallet-validators", "polymesh-contracts", "polymesh-primitives", "sp-std", @@ -7451,7 +7461,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "log", "sp-core", @@ -7462,7 +7472,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "futures", @@ -7489,7 +7499,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "futures", "futures-timer", @@ -7512,7 +7522,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "sc-client-api", @@ -7527,7 +7537,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "memmap2", "sc-chain-spec-derive", @@ -7546,7 +7556,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -7557,7 +7567,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "array-bytes", "chrono", @@ -7597,7 +7607,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "fnv", "futures", @@ -7623,7 +7633,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "hash-db", "kvdb", @@ -7649,7 +7659,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "futures", @@ -7674,7 +7684,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "fork-tree", @@ -7713,7 +7723,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "futures", "jsonrpsee", @@ -7735,7 +7745,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "fork-tree", "parity-scale-codec 3.6.9", @@ -7748,7 +7758,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "ahash 0.8.11", "array-bytes", @@ -7788,7 +7798,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "finality-grandpa", "futures", @@ -7808,7 +7818,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "futures", @@ -7831,7 +7841,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "lru", "parity-scale-codec 3.6.9", @@ -7855,7 +7865,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "sc-allocator", "sp-maybe-compressed-blob", @@ -7868,7 +7878,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "log", "sc-allocator", @@ -7881,7 +7891,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -7899,7 +7909,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "ansi_term", "futures", @@ -7914,7 +7924,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "array-bytes", "async-trait", @@ -7929,7 +7939,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "array-bytes", "async-trait", @@ -7972,7 +7982,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "cid", "futures", @@ -7991,7 +8001,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "bitflags 1.3.2", @@ -8017,7 +8027,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "ahash 0.8.11", "futures", @@ -8035,7 +8045,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "array-bytes", "futures", @@ -8056,7 +8066,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "array-bytes", "async-trait", @@ -8088,7 +8098,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "array-bytes", "futures", @@ -8107,7 +8117,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "array-bytes", "bytes", @@ -8137,7 +8147,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "futures", "libp2p", @@ -8150,7 +8160,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8159,7 +8169,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "futures", "jsonrpsee", @@ -8189,7 +8199,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "jsonrpsee", "parity-scale-codec 3.6.9", @@ -8208,7 +8218,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "http", "jsonrpsee", @@ -8223,7 +8233,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "array-bytes", "futures", @@ -8249,7 +8259,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "directories", @@ -8315,7 +8325,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "log", "parity-scale-codec 3.6.9", @@ -8326,7 +8336,7 @@ dependencies = [ [[package]] name = "sc-storage-monitor" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "clap", "fs4", @@ -8342,7 +8352,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "jsonrpsee", "parity-scale-codec 3.6.9", @@ -8361,7 +8371,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "futures", "libc", @@ -8380,7 +8390,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "chrono", "futures", @@ -8399,7 +8409,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "ansi_term", "atty", @@ -8430,7 +8440,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -8441,7 +8451,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "futures", @@ -8468,7 +8478,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "futures", @@ -8482,7 +8492,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "backtrace", "futures", @@ -8973,7 +8983,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "hash-db", "log", @@ -8991,7 +9001,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "blake2", "proc-macro-crate 1.1.3", @@ -9003,7 +9013,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9016,7 +9026,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "integer-sqrt", "num-traits", @@ -9030,7 +9040,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9043,7 +9053,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "sp-api", @@ -9055,7 +9065,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "futures", "log", @@ -9073,7 +9083,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "futures", @@ -9091,7 +9101,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "merlin 2.0.1", @@ -9114,7 +9124,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "finality-grandpa", "log", @@ -9132,7 +9142,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9144,7 +9154,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9157,7 +9167,7 @@ dependencies = [ [[package]] name = "sp-core" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "array-bytes", "base58", @@ -9200,7 +9210,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "blake2", "byteorder", @@ -9214,7 +9224,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "proc-macro2", "quote", @@ -9225,7 +9235,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -9234,7 +9244,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "proc-macro2", "quote", @@ -9244,7 +9254,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.13.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "environmental", "parity-scale-codec 3.6.9", @@ -9255,7 +9265,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -9270,7 +9280,7 @@ dependencies = [ [[package]] name = "sp-io" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "bytes", "ed25519 1.5.3", @@ -9295,7 +9305,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "lazy_static", "sp-core", @@ -9306,7 +9316,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.13.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "futures", @@ -9323,7 +9333,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "thiserror", "zstd", @@ -9332,7 +9342,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9346,7 +9356,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "sp-api", "sp-core", @@ -9356,7 +9366,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "backtrace", "lazy_static", @@ -9366,7 +9376,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "rustc-hash", "serde", @@ -9376,7 +9386,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "either", "hash256-std-hasher", @@ -9398,7 +9408,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -9416,7 +9426,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "Inflector", "proc-macro-crate 1.1.3", @@ -9428,7 +9438,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9442,7 +9452,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9454,7 +9464,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.13.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "hash-db", "log", @@ -9474,12 +9484,12 @@ dependencies = [ [[package]] name = "sp-std" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" [[package]] name = "sp-storage" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "impl-serde", "parity-scale-codec 3.6.9", @@ -9492,7 +9502,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "futures-timer", @@ -9507,7 +9517,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "sp-std", @@ -9519,7 +9529,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "sp-api", "sp-runtime", @@ -9528,7 +9538,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "async-trait", "log", @@ -9544,7 +9554,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "ahash 0.8.11", "hash-db", @@ -9567,7 +9577,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "impl-serde", "parity-scale-codec 3.6.9", @@ -9584,7 +9594,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "proc-macro2", @@ -9595,7 +9605,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -9609,7 +9619,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9771,7 +9781,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "platforms", ] @@ -9779,7 +9789,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -9798,7 +9808,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "hyper", "log", @@ -9810,7 +9820,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "futures", "substrate-test-utils-derive", @@ -9820,7 +9830,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -9831,7 +9841,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v6-monthly-2023-03#74ef745933703849d756dc16d41d938157d6943a" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" dependencies = [ "ansi_term", "build-helper", diff --git a/Cargo.toml b/Cargo.toml index 9ea5758187..64d98df163 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,97 +9,99 @@ edition = "2021" name = "polymesh" path = "src/main.rs" -# Path build to use our Substrate version from github, `branch = "polymesh-v6-monthly-2023-03"`. +# Path build to use our Substrate version from github, `branch = "polymesh-v8-monthly-2023-03"`. [patch.crates-io] -frame-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -frame-benchmarking-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -frame-executive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -frame-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -frame-election-provider-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -frame-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -frame-system-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -frame-system-rpc-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-balances = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-contracts = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-contracts-primitives = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-election-provider-multi-phase = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-im-online = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-indices = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-offences = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-preimage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-insecure-randomness-collective-flip = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-scheduler = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-staking-reward-curve = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -pallet-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-basic-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-chain-spec = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-client-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-client-db = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-consensus-babe-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-consensus-epochs = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-executor = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-consensus-grandpa-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-network = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-network-common = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-rpc-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-rpc-spec-v2 = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-service = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-telemetry = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-transaction-pool-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sc-sync-state-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-application-crypto = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-arithmetic = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-blockchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-core = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-externalities = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-inherents = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-io = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-keyring = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-npos-elections = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-runtime = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-weights = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-runtime-interface = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-state-machine = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-std = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-storage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-tracing = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-transaction-storage-proof = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-trie = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -sp-version = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -substrate-frame-rpc-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -substrate-prometheus-endpoint = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -substrate-build-script-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -substrate-wasm-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } -substrate-test-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v6-monthly-2023-03" } +frame-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +frame-benchmarking-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +frame-executive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +frame-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +frame-election-provider-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +frame-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +frame-system-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +frame-system-rpc-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-balances = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-contracts = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-contracts-primitives = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-election-provider-multi-phase = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-im-online = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-indices = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-offences = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-preimage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-insecure-randomness-collective-flip = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-scheduler = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-staking-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-staking-reward-curve = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +pallet-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-basic-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-chain-spec = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-client-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-client-db = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-consensus-babe-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-consensus-epochs = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-executor = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-consensus-grandpa-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-network = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-network-common = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-rpc-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-rpc-spec-v2 = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-service = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-telemetry = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-transaction-pool-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sc-sync-state-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-application-crypto = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-arithmetic = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-blockchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-core = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-externalities = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-inherents = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-io = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-keyring = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-npos-elections = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-runtime = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-weights = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-runtime-interface = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-state-machine = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-std = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-storage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-tracing = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-transaction-storage-proof = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-trie = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +sp-version = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +substrate-frame-rpc-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +substrate-prometheus-endpoint = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +substrate-build-script-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +substrate-wasm-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +substrate-test-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } [workspace] members = [ @@ -130,11 +132,9 @@ members = [ "pallets/runtime/tests", "pallets/runtime/tests/exec_macro", "pallets/settlement", - "pallets/staking", - "pallets/staking/rpc", - "pallets/staking/rpc/runtime-api", "pallets/statistics", "pallets/sto", + "pallets/validators", "pallets/transaction-payment", "pallets/treasury", "pallets/utility", @@ -173,7 +173,7 @@ pallet-protocol-fee = { path = "pallets/protocol-fee", default-features = false pallet-relayer = { path = "pallets/relayer", default-features = false } pallet-sto = { path = "pallets/sto", default-features = false } pallet-settlement = { path = "pallets/settlement", default-features = false } -pallet-staking = { path = "pallets/staking", default-features = false } +pallet-validators = { path = "pallets/validators", default-features = false } pallet-statistics = { path = "pallets/statistics", default-features = false } pallet-transaction-payment = { path = "pallets/transaction-payment", default-features = false } pallet-treasury = { path = "pallets/treasury", default-features = false } @@ -195,7 +195,6 @@ pallet-group-rpc = { path = "pallets/group/rpc", default-features = false } pallet-group-rpc-runtime-api = { path = "pallets/group/rpc/runtime-api", default-features = false } pallet-protocol-fee-rpc = { path = "pallets/protocol-fee/rpc", default-features = false } pallet-protocol-fee-rpc-runtime-api = { path = "pallets/protocol-fee/rpc/runtime-api", default-features = false } -pallet-staking-rpc-runtime-api = { path = "pallets/staking/rpc/runtime-api", default-features = false } polymesh-node-rpc = { path = "node-rpc", default-features = false } # Runtimes @@ -226,6 +225,8 @@ pallet-preimage = { version = "4.0.0-dev", default-features = false } pallet-insecure-randomness-collective-flip = { version = "4.0.0-dev", default-features = false } pallet-scheduler = { version = "4.0.0-dev", default-features = false } pallet-session = { version = "4.0.0-dev", default-features = false } +pallet-staking = { version = "4.0.0-dev", default-features = false } +pallet-staking-runtime-api = { version = "4.0.0-dev", default-features = false } pallet-staking-reward-curve = { version = "4.0.0-dev", default-features = false } pallet-timestamp = { version = "4.0.0-dev", default-features = false } scale-info = { version = "2.0", default-features = false, features = ["derive"] } @@ -271,6 +272,8 @@ pallet-permissions = { workspace = true, default-features = false } pallet-pips = { workspace = true, default-features = false } pallet-protocol-fee = { workspace = true, default-features = false } pallet-staking = { workspace = true, default-features = false } +pallet-staking-runtime-api = { workspace = true, default-features = false } +pallet-validators = { workspace = true, default-features = false } pallet-sudo = { workspace = true, default-features = false } pallet-transaction-payment = { workspace = true, default-features = false } polymesh-contracts = { workspace = true, default-features = false } @@ -285,7 +288,6 @@ pallet-group-rpc = { workspace = true } pallet-group-rpc-runtime-api = { workspace = true } pallet-protocol-fee-rpc = { workspace = true } pallet-protocol-fee-rpc-runtime-api = { workspace = true } -pallet-staking-rpc-runtime-api = { workspace = true } polymesh-node-rpc = { workspace = true } # Runtimes diff --git a/node-rpc/Cargo.toml b/node-rpc/Cargo.toml index 48cf175997..8fec7e760e 100644 --- a/node-rpc/Cargo.toml +++ b/node-rpc/Cargo.toml @@ -14,7 +14,6 @@ jsonrpsee = { version = "0.16.2", features = ["server"] } polymesh-primitives = { path = "../primitives", default-features = false } pallet-group-rpc = { path = "../pallets/group/rpc" } -pallet-staking-rpc = { path = "../pallets/staking/rpc" } pallet-protocol-fee-rpc = { path = "../pallets/protocol-fee/rpc" } node-rpc = { path = "../rpc" } diff --git a/node-rpc/src/lib.rs b/node-rpc/src/lib.rs index 41bc76f2c1..46fe7a3e2d 100644 --- a/node-rpc/src/lib.rs +++ b/node-rpc/src/lib.rs @@ -108,7 +108,6 @@ where + 'static, C::Api: substrate_frame_rpc_system::AccountNonceApi, C::Api: node_rpc::transaction_payment::TransactionPaymentRuntimeApi, - C::Api: pallet_staking_rpc::StakingRuntimeApi, C::Api: node_rpc::pips::PipsRuntimeApi, C::Api: node_rpc::identity::IdentityRuntimeApi, C::Api: pallet_protocol_fee_rpc::ProtocolFeeRuntimeApi, @@ -133,7 +132,6 @@ where }; use pallet_group_rpc::{Group, GroupApiServer}; use pallet_protocol_fee_rpc::{ProtocolFee, ProtocolFeeApiServer}; - use pallet_staking_rpc::{Staking, StakingApiServer}; use sc_consensus_babe_rpc::{Babe, BabeApiServer}; use sc_consensus_grandpa_rpc::{Grandpa, GrandpaApiServer}; use sc_rpc::dev::{Dev, DevApiServer}; @@ -210,7 +208,6 @@ where io.merge(Dev::new(client.clone(), deny_unsafe).into_rpc())?; - io.merge(Staking::new(client.clone()).into_rpc())?; io.merge(Pips::new(client.clone()).into_rpc())?; io.merge(Identity::new(client.clone()).into_rpc())?; io.merge(ProtocolFee::new(client.clone()).into_rpc())?; diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 17eef1f277..eae131ea95 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -259,7 +259,7 @@ macro_rules! misc_pallet_impls { type SlashDeferDuration = SlashDeferDuration; type AdminOrigin = polymesh_primitives::EnsureRoot; type SessionInterface = Self; - type EraPayout = pallet_staking::PolymeshConvertCurve; + type EraPayout = pallet_validators::PolymeshConvertCurve; type NextNewSession = Session; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; type OffendingValidatorsThreshold = OffendingValidatorsThreshold; @@ -267,15 +267,21 @@ macro_rules! misc_pallet_impls { type TargetList = pallet_staking::UseValidatorsMap; type MaxUnlockingChunks = polymesh_runtime_common::MaxUnlockingChunks; type OnStakerSlash = pallet_staking::OnStakerSlashMock; - type BenchmarkingConfig = pallet_staking::SampleBenchmarkingConfig; + type BenchmarkingConfig = pallet_staking::TestBenchmarkingConfig; type WeightInfo = polymesh_weights::pallet_staking::SubstrateWeight; + type Permissioned = Validators; + } + + impl pallet_validators::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = polymesh_weights::pallet_validators::SubstrateWeight; + type MaxValidatorPerIdentity = polymesh_runtime_common::MaxValidatorPerIdentity; type MaxVariableInflationTotalIssuance = MaxVariableInflationTotalIssuance; type FixedYearlyReward = FixedYearlyReward; type Call = RuntimeCall; type PalletsOrigin = OriginCaller; type RewardScheduler = Scheduler; - type Permissioned = Staking; } impl pallet_authority_discovery::Config for Runtime { @@ -1034,9 +1040,9 @@ macro_rules! runtime_apis { } } - impl pallet_staking_rpc_runtime_api::StakingApi for Runtime { - fn get_curve() -> Vec<(Perbill, Perbill)> { - RewardCurve::get().points.to_vec() + impl pallet_staking_runtime_api::StakingApi for Runtime { + fn nominations_quota(balance: Balance) -> u32 { + Staking::api_nominations_quota(balance) } } diff --git a/pallets/runtime/develop/Cargo.toml b/pallets/runtime/develop/Cargo.toml index f4ad8eb883..43c09825c7 100644 --- a/pallets/runtime/develop/Cargo.toml +++ b/pallets/runtime/develop/Cargo.toml @@ -34,6 +34,7 @@ pallet-relayer = { workspace = true, default-features = false } pallet-sto = { workspace = true, default-features = false } pallet-settlement = { workspace = true, default-features = false } pallet-staking = { workspace = true, default-features = false } +pallet-validators = { workspace = true, default-features = false } pallet-staking-reward-curve = { version = "4.0.0-dev", default-features = false } pallet-statistics = { workspace = true, default-features = false } pallet-transaction-payment = { workspace = true, default-features = false } @@ -91,7 +92,7 @@ frame-support = { version = "4.0.0-dev", default-features = false } frame-system-rpc-runtime-api = { version = "4.0.0-dev", default-features = false } pallet-group-rpc-runtime-api = { workspace = true, default-features = false } pallet-protocol-fee-rpc-runtime-api = { workspace = true, default-features = false } -pallet-staking-rpc-runtime-api = { workspace = true, default-features = false } +pallet-staking-runtime-api = { workspace = true, default-features = false } node-rpc-runtime-api = { workspace = true, default-features = false } # Used for runtime benchmarking @@ -165,8 +166,9 @@ std = [ "pallet-scheduler/std", "pallet-session/std", "pallet-settlement/std", - "pallet-staking-rpc-runtime-api/std", + "pallet-staking-runtime-api/std", "pallet-staking/std", + "pallet-validators/std", "pallet-statistics/std", "pallet-sudo/std", "pallet-timestamp/std", @@ -227,11 +229,11 @@ runtime-benchmarks = [ "pallet-settlement/runtime-benchmarks", "pallet-sto/runtime-benchmarks", "pallet-staking/runtime-benchmarks", + "pallet-validators/runtime-benchmarks", "pallet-statistics/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", "pallet-treasury/runtime-benchmarks", "pallet-utility/runtime-benchmarks", - "pallet-staking/runtime-benchmarks", "polymesh-contracts/runtime-benchmarks", "polymesh-primitives/runtime-benchmarks", "sp-runtime/runtime-benchmarks", diff --git a/pallets/runtime/develop/src/benchmarks/pallet_session.rs b/pallets/runtime/develop/src/benchmarks/pallet_session.rs index b0a01519bc..ea300a64bf 100644 --- a/pallets/runtime/develop/src/benchmarks/pallet_session.rs +++ b/pallets/runtime/develop/src/benchmarks/pallet_session.rs @@ -22,7 +22,6 @@ // - It uses our Staking pallet. use codec::Decode; -use core::convert::TryInto; use frame_benchmarking::benchmarks; use frame_support::traits::{Currency, Get, OnInitialize}; use frame_system::RawOrigin; @@ -33,8 +32,6 @@ use sp_runtime::traits::TrailingZeroInput; use sp_std::prelude::*; use sp_std::vec; -use polymesh_primitives::constants::currency::POLY; - pub struct Pallet(Session); pub trait Config: pallet_session::Config + pallet_session::historical::Config + pallet_staking::Config @@ -60,13 +57,11 @@ impl ValidatorInfo { ::AccountId, >>::Balance: From, { - let balance: u32 = (4_000 * POLY).try_into().unwrap(); let stash = create_validator_with_nominators::( nominators, ::MaxNominations::get(), false, RewardDestination::Staked, - Some(balance), ) .unwrap() .0; diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index 6d9a80cc9b..2bda565d3f 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -337,6 +337,7 @@ mod benches { [pallet_grandpa, Grandpa] [pallet_scheduler, Scheduler] [pallet_staking, Staking] + [pallet_validators, Validators] [polymesh_contracts, PolymeshContracts] [pallet_nft, Nft] [pallet_contracts, Contracts] @@ -386,11 +387,8 @@ construct_runtime!( MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, - // Removed: - //Bridge = 16, - - // Staking: Genesis config deps: Bridge, Balances, Indices, Identity, Babe, Timestamp, Committees - Staking: pallet_staking::{Pallet, Call, Config, Storage, Event} = 17, + Validators: pallet_validators = 16, + Staking: pallet_staking = 17, Offences: pallet_offences::{Pallet, Storage, Event} = 18, diff --git a/pallets/runtime/mainnet/Cargo.toml b/pallets/runtime/mainnet/Cargo.toml index 8817641f41..59bea3c540 100644 --- a/pallets/runtime/mainnet/Cargo.toml +++ b/pallets/runtime/mainnet/Cargo.toml @@ -34,6 +34,7 @@ pallet-protocol-fee = { workspace = true, default-features = false } pallet-relayer = { workspace = true, default-features = false } pallet-settlement = { workspace = true, default-features = false } pallet-staking = { workspace = true, default-features = false } +pallet-validators = { workspace = true, default-features = false } pallet-statistics = { workspace = true, default-features = false } pallet-sto = { workspace = true, default-features = false } pallet-sudo = { workspace = true, default-features = false } @@ -44,7 +45,7 @@ polymesh-contracts = { workspace = true, default-features = false } # RPC node-rpc-runtime-api = { workspace = true, default-features = false } -pallet-staking-rpc-runtime-api = { workspace = true, default-features = false } +pallet-staking-runtime-api = { workspace = true, default-features = false } pallet-protocol-fee-rpc-runtime-api = { workspace = true, default-features = false } # Others @@ -151,8 +152,9 @@ std = [ "pallet-scheduler/std", "pallet-session/std", "pallet-settlement/std", - "pallet-staking-rpc-runtime-api/std", + "pallet-staking-runtime-api/std", "pallet-staking/std", + "pallet-validators/std", "pallet-statistics/std", "pallet-sto/std", "pallet-sudo/std", diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index fe60d7d8c2..dd61cb4920 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -336,11 +336,8 @@ construct_runtime!( MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, - // Removed: - //Bridge = 16, - - // Staking: Genesis config deps: Bridge, Balances, Indices, Identity, Babe, Timestamp, Committees - Staking: pallet_staking::{Pallet, Call, Config, Storage, Event} = 17, + Validators: pallet_validators = 16, + Staking: pallet_staking = 17, Offences: pallet_offences::{Pallet, Storage, Event} = 18, diff --git a/pallets/runtime/testnet/Cargo.toml b/pallets/runtime/testnet/Cargo.toml index 871738d78a..8dc05994a5 100644 --- a/pallets/runtime/testnet/Cargo.toml +++ b/pallets/runtime/testnet/Cargo.toml @@ -35,6 +35,7 @@ pallet-protocol-fee = { workspace = true, default-features = false } pallet-relayer = { workspace = true, default-features = false } pallet-settlement = { workspace = true, default-features = false } pallet-staking = { workspace = true, default-features = false } +pallet-validators = { workspace = true, default-features = false } pallet-statistics = { workspace = true, default-features = false } pallet-transaction-payment = { workspace = true, default-features = false } pallet-treasury = { workspace = true, default-features = false } @@ -44,7 +45,7 @@ polymesh-contracts = { workspace = true, default-features = false } # RPC node-rpc-runtime-api = { workspace = true, default-features = false } -pallet-staking-rpc-runtime-api = { workspace = true, default-features = false } +pallet-staking-runtime-api = { workspace = true, default-features = false } pallet-protocol-fee-rpc-runtime-api = { workspace = true, default-features = false } # Others @@ -155,8 +156,9 @@ std = [ "pallet-scheduler/std", "pallet-session/std", "pallet-settlement/std", - "pallet-staking-rpc-runtime-api/std", + "pallet-staking-runtime-api/std", "pallet-staking/std", + "pallet-validators/std", "pallet-statistics/std", "pallet-sudo/std", "pallet-timestamp/std", diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index b3f92e4857..b986f8964b 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -342,11 +342,8 @@ construct_runtime!( MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, - // Removed: - //Bridge = 16, - - // Staking: Genesis config deps: Bridge, Balances, Indices, Identity, Babe, Timestamp, Committees - Staking: pallet_staking::{Pallet, Call, Config, Storage, Event} = 17, + Validators: pallet_validators = 16, + Staking: pallet_staking = 17, Offences: pallet_offences::{Pallet, Storage, Event} = 18, diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index b57f1a65e8..8ab15187e8 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -26,7 +26,8 @@ pallet-protocol-fee-rpc-runtime-api = { workspace = true, default-features = fal pallet-relayer = { workspace = true, default-features = false } pallet-settlement = { workspace = true, default-features = false } pallet-staking = { workspace = true, default-features = false } -pallet-staking-rpc-runtime-api = { workspace = true, default-features = false } +pallet-validators = { workspace = true, default-features = false } +pallet-staking-runtime-api = { workspace = true, default-features = false } pallet-statistics = { workspace = true, default-features = false } pallet-sto = { workspace = true, default-features = false } pallet-sudo = { workspace = true, default-features = false } @@ -151,6 +152,7 @@ std = [ "pallet-scheduler/std", "pallet-session/std", "pallet-staking/std", + "pallet-validators/std", "pallet-statistics/std", "pallet-timestamp/std", "pallet-transaction-payment/std", diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index 1d234484ae..c343cad934 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -39,8 +39,8 @@ use sp_staking::{EraIndex, SessionIndex}; use pallet_balances::AccountData; use pallet_balances::BlockRewardConfig; -use pallet_staking::types::SlashingSwitch; use pallet_staking::*; +use pallet_validators::types::SlashingSwitch; use polymesh_primitives::asset::AssetId; use polymesh_primitives::constants::currency::POLY; use polymesh_primitives::identity_id::GenesisIdentityRecord; @@ -113,6 +113,7 @@ frame_support::construct_runtime!( Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, Authorship: pallet_authorship, Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + Validators: pallet_validators, Staking: pallet_staking::{Pallet, Call, Config, Storage, Event}, Session: pallet_session::{Pallet, Call, Storage, Event, Config}, Historical: pallet_session::historical::{Pallet}, @@ -599,7 +600,7 @@ impl pallet_staking::Config for Test { type SlashDeferDuration = SlashDeferDuration; type AdminOrigin = frame_system::EnsureRoot; type SessionInterface = Self; - type EraPayout = PolymeshConvertCurve; + type EraPayout = pallet_validators::PolymeshConvertCurve; type NextNewSession = Session; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; type OffendingValidatorsThreshold = OffendingValidatorsThreshold; @@ -607,15 +608,21 @@ impl pallet_staking::Config for Test { type TargetList = pallet_staking::UseValidatorsMap; type MaxUnlockingChunks = MaxUnlockingChunks; type OnStakerSlash = OnStakerSlashMock; - type BenchmarkingConfig = pallet_staking::SampleBenchmarkingConfig; + type BenchmarkingConfig = pallet_staking::TestBenchmarkingConfig; type WeightInfo = polymesh_weights::pallet_staking::SubstrateWeight; + type Permissioned = Validators; +} + +impl pallet_validators::Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = polymesh_weights::pallet_validators::SubstrateWeight; + type MaxValidatorPerIdentity = polymesh_runtime_common::MaxValidatorPerIdentity; type MaxVariableInflationTotalIssuance = MaxVariableInflationTotalIssuance; type FixedYearlyReward = FixedYearlyReward; type Call = RuntimeCall; type PalletsOrigin = OriginCaller; type RewardScheduler = Scheduler; - type Permissioned = Staking; } impl frame_system::offchain::SendTransactionTypes for Test @@ -938,15 +945,40 @@ impl ExtBuilder { stakers.extend(self.stakers) } + let genesis = pallet_validators::GenesisConfig { + validators: stakers + .iter() + .filter_map(|(did, _stash, _controller, _balance, status)| { + if let StakerStatus::Validator = status { + Some(*did) + } else { + None + } + }) + .collect::>(), + slashing_allowed_for: self.slashing_allowed_for, + ..Default::default() + }; + GenesisBuild::::assimilate_storage(&genesis, &mut storage).unwrap(); + let _ = pallet_staking::GenesisConfig:: { - stakers: stakers.clone(), + stakers: stakers + .iter() + .map(|(_, stash, controller, balance, status)| { + ( + stash.clone(), + controller.clone(), + balance.clone(), + status.clone(), + ) + }) + .collect::>(), validator_count: self.validator_count, minimum_validator_count: self.minimum_validator_count, invulnerables: self.invulnerables, slash_reward_fraction: Perbill::from_percent(10), min_nominator_bond: self.min_nominator_bond, min_validator_bond: self.min_validator_bond, - slashing_allowed_for: self.slashing_allowed_for, ..Default::default() } .assimilate_storage(&mut storage); @@ -1099,8 +1131,8 @@ pub fn bond_validator_with_intended_count( bond(stash, ctrl, val); let stash_id = Identity::get_identity(&stash).unwrap(); - if Staking::permissioned_identity(stash_id).is_none() { - assert_ok!(Staking::add_permissioned_validator( + if Validators::permissioned_identity(stash_id).is_none() { + assert_ok!(Validators::add_permissioned_validator( frame_system::RawOrigin::Root.into(), stash_id, i_count @@ -1180,7 +1212,8 @@ pub(crate) fn start_active_era(era_index: EraIndex) { } pub(crate) fn current_total_payout_for_duration(duration: u64) -> Balance { - let reward = inflation::compute_total_payout( + use pallet_validators::Config; + let reward = pallet_validators::inflation::compute_total_payout( &I_NPOS, Staking::eras_total_stake(active_era()), Balances::total_issuance(), @@ -1194,7 +1227,8 @@ pub(crate) fn current_total_payout_for_duration(duration: u64) -> Balance { } pub(crate) fn maximum_payout_for_duration(duration: u64) -> Balance { - inflation::compute_total_payout( + use pallet_validators::Config; + pallet_validators::inflation::compute_total_payout( &I_NPOS, 0, Balances::total_issuance(), diff --git a/pallets/runtime/tests/src/staking/mod.rs b/pallets/runtime/tests/src/staking/mod.rs index 9a85dfdeeb..f0251b8563 100644 --- a/pallets/runtime/tests/src/staking/mod.rs +++ b/pallets/runtime/tests/src/staking/mod.rs @@ -47,11 +47,14 @@ use std::collections::BTreeMap; use sp_runtime::traits::Zero; -use pallet_staking::{ConfigOp, Event, *}; +use pallet_staking::{ConfigOp, Event, Validators, *}; +use pallet_validators::Error as ValidatorsError; + +type PalletValidators = pallet_validators::Pallet; macro_rules! assert_add_permissioned_validator { ($acc_id:expr) => { - assert_ok!(Staking::add_permissioned_validator( + assert_ok!(PalletValidators::add_permissioned_validator( RuntimeOrigin::root(), pallet_identity::Pallet::::get_identity($acc_id).unwrap(), None @@ -1893,7 +1896,6 @@ fn rebond_emits_right_value_in_event() { assert_eq!( *staking_events().last().unwrap(), Event::Bonded { - identity: IdentityId::default(), stash: 11, amount: 100 } @@ -1915,7 +1917,6 @@ fn rebond_emits_right_value_in_event() { assert_eq!( *staking_events().last().unwrap(), Event::Bonded { - identity: IdentityId::default(), stash: 11, amount: 800 } @@ -5548,7 +5549,7 @@ fn capped_stakers_works() {} #[test] fn min_commission_works() { ExtBuilder::default().build_and_execute(|| { - assert_ok!(Staking::set_commission_cap( + assert_ok!(PalletValidators::set_commission_cap( RuntimeOrigin::root(), Perbill::from_percent(60) )); @@ -5802,7 +5803,7 @@ fn force_apply_min_commission_works() { }; let validators = || Validators::::iter().collect::>(); ExtBuilder::default().build_and_execute(|| { - assert_ok!(Staking::set_commission_cap( + assert_ok!(PalletValidators::set_commission_cap( RuntimeOrigin::root(), Perbill::from_percent(60) )); @@ -6462,7 +6463,7 @@ fn set_min_commission_works_with_admin_origin() { ); // setting commission >= min_commission works - assert_ok!(Staking::set_commission_cap( + assert_ok!(PalletValidators::set_commission_cap( RuntimeOrigin::root(), Perbill::from_percent(60) )); @@ -6533,32 +6534,32 @@ mod staking_interface { use chrono::Utc; use crate::asset_test::set_timestamp; -use pallet_staking::types::{PermissionedIdentityPrefs, SlashingSwitch}; +use pallet_validators::types::{PermissionedIdentityPrefs, SlashingSwitch}; type PError = pallet_pips::Error; macro_rules! assert_absent_identity { ($acc_id:expr) => { - assert!( - Staking::permissioned_identity(mock::Identity::get_identity($acc_id).unwrap()) - .is_none() - ); + assert!(PalletValidators::permissioned_identity( + mock::Identity::get_identity($acc_id).unwrap() + ) + .is_none()); }; } macro_rules! assert_present_identity { ($acc_id:expr) => { - assert!( - Staking::permissioned_identity(mock::Identity::get_identity($acc_id).unwrap()) - .is_some() - ); + assert!(PalletValidators::permissioned_identity( + mock::Identity::get_identity($acc_id).unwrap() + ) + .is_some()); }; } macro_rules! assert_permissioned_identity_prefs { ($id:expr, $i_count:expr, $r_count:expr) => { assert_eq!( - Staking::permissioned_identity($id).unwrap(), + PalletValidators::permissioned_identity($id).unwrap(), PermissionedIdentityPrefs { intended_count: $i_count, running_count: $r_count @@ -6741,7 +6742,7 @@ fn should_remove_permissioned_validators() { assert_add_permissioned_validator!(&acc_10); assert_add_permissioned_validator!(&acc_20); - assert_ok!(Staking::remove_permissioned_validator( + assert_ok!(PalletValidators::remove_permissioned_validator( RuntimeOrigin::root(), mock::Identity::get_identity(&acc_20).unwrap() )); @@ -6870,14 +6871,17 @@ fn check_slashing_switch_for_validators_and_nominators() { .validator_count(4) .build_and_execute(|| { // Check the initial state of the Slashing Switch. - assert_eq!(Staking::slashing_allowed_for(), SlashingSwitch::Validator); + assert_eq!( + PalletValidators::slashing_allowed_for(), + SlashingSwitch::Validator + ); let change_slashing_allowed_for = |switch: SlashingSwitch| { - assert_ok!(Staking::change_slashing_allowed_for( + assert_ok!(PalletValidators::change_slashing_allowed_for( RuntimeOrigin::root(), switch )); - assert_eq!(Staking::slashing_allowed_for(), switch); + assert_eq!(PalletValidators::slashing_allowed_for(), switch); }; change_slashing_allowed_for(SlashingSwitch::None); @@ -6891,11 +6895,14 @@ fn offence_is_blocked_when_slashing_status_is_off() { .validator_count(4) .has_stakers(false) .build_and_execute(|| { - assert_ok!(Staking::change_slashing_allowed_for( + assert_ok!(PalletValidators::change_slashing_allowed_for( RuntimeOrigin::root(), SlashingSwitch::None )); - assert_eq!(Staking::slashing_allowed_for(), SlashingSwitch::None); + assert_eq!( + PalletValidators::slashing_allowed_for(), + SlashingSwitch::None + ); let initial_balance = Balances::free_balance(10); create_on_offence_now(10); // No slashing happened. @@ -6912,12 +6919,12 @@ fn check_slashing_for_different_switches() { assert_eq!(Balances::free_balance(21), 2000); // Switch to ValidatorAndNominator. - assert_ok!(Staking::change_slashing_allowed_for( + assert_ok!(PalletValidators::change_slashing_allowed_for( RuntimeOrigin::root(), SlashingSwitch::ValidatorAndNominator )); assert_eq!( - Staking::slashing_allowed_for(), + PalletValidators::slashing_allowed_for(), SlashingSwitch::ValidatorAndNominator ); @@ -6967,7 +6974,7 @@ fn chill_from_governance() { assert_permissioned_identity_prefs!(entity_id, 2, 2); // Removes 50 and 60 from being validators - assert_ok!(Staking::chill_from_governance( + assert_ok!(PalletValidators::chill_from_governance( RuntimeOrigin::root(), entity_id, vec![50, 60] @@ -6975,8 +6982,12 @@ fn chill_from_governance() { // No longer permissioned identity assert_noop!( - Staking::chill_from_governance(RuntimeOrigin::root(), entity_id, vec![50, 60]), - Error::::ValidatorNotFound + PalletValidators::chill_from_governance( + RuntimeOrigin::root(), + entity_id, + vec![50, 60] + ), + ValidatorsError::::ValidatorNotFound ); // 70 stash and 71 controller @@ -6992,13 +7003,21 @@ fn chill_from_governance() { // Check keys that aren't joined with identity gives error assert_noop!( - Staking::chill_from_governance(RuntimeOrigin::root(), entity_id_2, vec![90, 95]), + PalletValidators::chill_from_governance( + RuntimeOrigin::root(), + entity_id_2, + vec![90, 95] + ), Error::::NotStash ); // Check key that is not GC gives error assert_noop!( - Staking::chill_from_governance(Origin::signed(20), entity_id_2, vec![90, 95]), + PalletValidators::chill_from_governance( + Origin::signed(20), + entity_id_2, + vec![90, 95] + ), BadOrigin ); }); diff --git a/pallets/runtime/tests/src/staking_extra_tests.rs b/pallets/runtime/tests/src/staking_extra_tests.rs index 4fad1dde4e..c16837e692 100644 --- a/pallets/runtime/tests/src/staking_extra_tests.rs +++ b/pallets/runtime/tests/src/staking_extra_tests.rs @@ -29,7 +29,7 @@ fn updating_controller() { .unwrap(); assert_ok!( - pallet_staking::Pallet::::add_permissioned_validator( + pallet_validators::Pallet::::add_permissioned_validator( Origin::root(), alice.did, None @@ -55,7 +55,7 @@ fn updating_controller() { )); assert_ok!( - pallet_staking::Pallet::::remove_permissioned_validator( + pallet_validators::Pallet::::remove_permissioned_validator( Origin::root(), alice.did, ) diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index 37f0446a23..7d0c2b576f 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -287,8 +287,9 @@ frame_support::construct_runtime!( MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, - // Staking: Genesis config deps: Balances, Indices, Identity, Babe, Timestamp, CddServiceProviders. - Staking: pallet_staking::{Pallet, Call, Config, Storage, Event} = 17, + Validators: pallet_validators = 16, + Staking: pallet_staking = 17, + Offences: pallet_offences::{Pallet, Storage, Event} = 18, // Session: Genesis config deps: System. diff --git a/pallets/staking/rpc/Cargo.toml b/pallets/staking/rpc/Cargo.toml deleted file mode 100644 index cca6e62550..0000000000 --- a/pallets/staking/rpc/Cargo.toml +++ /dev/null @@ -1,26 +0,0 @@ -[package] -name = "pallet-staking-rpc" -version = "2.0.0" -authors = ["Anonymous"] -edition = "2021" - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] - -[dependencies] -codec = { workspace = true, default-features = false, features = ["derive"] } -jsonrpsee = { version = "0.16.2", features = ["server", "macros"] } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-blockchain = { version = "4.0.0-dev" } -sp-core = { version = "7.0.0", default-features = false } -sp-rpc = { version = "6.0.0" } -sp-runtime = { version = "7.0.0", default-features = false } -sp-std = {version = "5.0.0", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } - -# General -serde = { version = "1.0.104", features = ["derive"] } - -node-rpc = { workspace = true } -pallet-staking-rpc-runtime-api = { version = "2.0.0", path = "./runtime-api" } diff --git a/pallets/staking/rpc/runtime-api/Cargo.toml b/pallets/staking/rpc/runtime-api/Cargo.toml deleted file mode 100644 index 7e601e397a..0000000000 --- a/pallets/staking/rpc/runtime-api/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "pallet-staking-rpc-runtime-api" -version = "2.0.0" -authors = ["Anonymous"] -edition = "2021" - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] - -[dependencies] -sp-api = { version = "4.0.0-dev", default-features = false} -sp-runtime = { version = "7.0.0", default-features = false} -frame-support = { version = "4.0.0-dev", default-features = false } - -[features] -default = ["std"] -std = [ - "sp-api/std", - "sp-runtime/std", - "frame-support/std" -] diff --git a/pallets/staking/rpc/runtime-api/src/lib.rs b/pallets/staking/rpc/runtime-api/src/lib.rs deleted file mode 100644 index bdf2e622b7..0000000000 --- a/pallets/staking/rpc/runtime-api/src/lib.rs +++ /dev/null @@ -1,12 +0,0 @@ -//! Runtime API definition for staking module. - -#![cfg_attr(not(feature = "std"), no_std)] - -use frame_support::dispatch::Vec; -use sp_runtime::Perbill; - -sp_api::decl_runtime_apis! { - pub trait StakingApi { - fn get_curve() -> Vec<(Perbill, Perbill)>; - } -} diff --git a/pallets/staking/rpc/src/lib.rs b/pallets/staking/rpc/src/lib.rs deleted file mode 100644 index 06d956d565..0000000000 --- a/pallets/staking/rpc/src/lib.rs +++ /dev/null @@ -1,56 +0,0 @@ -use jsonrpsee::{ - core::RpcResult, - proc_macros::rpc, - types::error::{CallError, ErrorObject}, -}; -use node_rpc::Error; -pub use pallet_staking_rpc_runtime_api::StakingApi as StakingRuntimeApi; -use sp_api::ProvideRuntimeApi; -use sp_blockchain::HeaderBackend; -use sp_runtime::{traits::Block as BlockT, Perbill}; -use std::sync::Arc; - -#[rpc(client, server)] -pub trait StakingApi { - #[method(name = "staking_getCurve")] - fn get_curve(&self, at: Option) -> RpcResult>; -} - -/// A struct that implements the [`StakingApi`]. -pub struct Staking { - client: Arc, - _marker: std::marker::PhantomData, -} - -impl Staking { - /// Create new `Staking` instance with the given reference to the client. - pub fn new(client: Arc) -> Self { - Self { - client, - _marker: Default::default(), - } - } -} - -impl StakingApiServer<::Hash> for Staking -where - Block: BlockT, - C: ProvideRuntimeApi + HeaderBackend + Send + Sync + 'static, - C::Api: StakingRuntimeApi, -{ - fn get_curve(&self, at: Option<::Hash>) -> RpcResult> { - let api = self.client.runtime_api(); - let at_hash = at.unwrap_or_else(|| - // If the block hash is not supplied assume the best block. - self.client.info().best_hash); - - api.get_curve(at_hash).map_err(|e| { - CallError::Custom(ErrorObject::owned( - Error::RuntimeError.into(), - "Unable to get curve.", - Some(e.to_string()), - )) - .into() - }) - } -} diff --git a/pallets/staking/src/benchmarking.rs b/pallets/staking/src/benchmarking.rs deleted file mode 100644 index 1d5bb478e3..0000000000 --- a/pallets/staking/src/benchmarking.rs +++ /dev/null @@ -1,1118 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Staking pallet benchmarking. - -use super::*; -use crate::{ConfigOp, Pallet as Staking}; -use testing_utils::*; - -use codec::Decode; -use frame_election_provider_support::SortedListProvider; -use frame_support::{ - dispatch::UnfilteredDispatchable, - pallet_prelude::*, - traits::{Currency, Get, Imbalance}, -}; -use sp_runtime::{ - traits::{Bounded, One, StaticLookup, TrailingZeroInput, Zero}, - Perbill, Percent, -}; -use sp_staking::SessionIndex; -use sp_std::prelude::*; - -pub use frame_benchmarking::v1::{ - account, benchmarks, impl_benchmark_test_suite, whitelist_account, whitelisted_caller, -}; -use frame_system::RawOrigin; - -const SEED: u32 = 0; -const MAX_SPANS: u32 = 100; -const MAX_SLASHES: u32 = 1000; - -type MaxValidators = <::BenchmarkingConfig as BenchmarkingConfig>::MaxValidators; -type MaxNominators = <::BenchmarkingConfig as BenchmarkingConfig>::MaxNominators; - -// Polymesh change -// ----------------------------------------------------------------- - -use pallet_identity::benchmarking::UserBuilder; -use polymesh_primitives::{IdentityId, Permissions}; - -use crate::types::{PermissionedStaking, SlashingSwitch}; -// ----------------------------------------------------------------- - -// Polymesh change -// ----------------------------------------------------------------- - -fn add_permissioned_validator_(stash: &T::AccountId) { - Staking::::set_validator_count(RawOrigin::Root.into(), 10) - .expect("Failed to set the validator count"); - T::Permissioned::permission_validator(stash); -} - -fn get_did(who: &T::AccountId) -> IdentityId { - pallet_identity::Pallet::::get_identity(who).expect("Failed to get identity id") -} - -// ----------------------------------------------------------------- - -// Add slashing spans to a user account. Not relevant for actual use, only to benchmark -// read and write operations. -pub fn add_slashing_spans(who: &T::AccountId, spans: u32) { - if spans == 0 { - return; - } - - // For the first slashing span, we initialize - let mut slashing_spans = crate::slashing::SlashingSpans::new(0); - SpanSlash::::insert((who, 0), crate::slashing::SpanRecord::default()); - - for i in 1..spans { - assert!(slashing_spans.end_span(i)); - SpanSlash::::insert((who, i), crate::slashing::SpanRecord::default()); - } - SlashingSpans::::insert(who, slashing_spans); -} - -// This function clears all existing validators and nominators from the set, and generates one new -// validator being nominated by n nominators, and returns the validator stash account and the -// nominators' stash and controller. It also starts an era and creates pending payouts. -pub fn create_validator_with_nominators( - n: u32, - upper_bound: u32, - dead: bool, - destination: RewardDestination, - balance: Option, -) -> Result<(T::AccountId, Vec<(T::AccountId, T::AccountId)>), &'static str> -where - T: Config, -{ - // Clean up any existing state. - clear_validators_and_nominators::(); - - let mut points_total = 0; - let mut points_individual = Vec::new(); - - let (v_stash, v_controller) = - create_stash_controller::(0, balance.unwrap_or_default(), destination.clone())?; - let validator_prefs = ValidatorPrefs { - commission: Perbill::from_percent(50), - ..Default::default() - }; - Staking::::set_commission_cap(RawOrigin::Root.into(), Perbill::from_percent(60)).unwrap(); - Staking::::set_validator_count(RawOrigin::Root.into(), 10)?; - T::Permissioned::permission_validator(&v_stash); - Staking::::validate(RawOrigin::Signed(v_controller).into(), validator_prefs)?; - let stash_lookup = T::Lookup::unlookup(v_stash.clone()); - - points_total += 10; - points_individual.push((v_stash.clone(), 10)); - - let original_nominator_count = Nominators::::count(); - let mut nominators = Vec::new(); - - // Give the validator n nominators, but keep total users in the system the same. - for i in 0..upper_bound { - let (n_stash, n_controller) = if !dead { - create_stash_controller::(u32::MAX - i, 10_000_000, destination.clone())? - } else { - create_stash_and_dead_controller::(u32::MAX - i, 10_000_000, destination.clone())? - }; - if i < n { - Staking::::nominate( - RawOrigin::Signed(n_controller.clone()).into(), - vec![stash_lookup.clone()], - )?; - nominators.push((n_stash, n_controller)); - } - } - - ValidatorCount::::put(1); - - // Start a new Era - let new_validators = Staking::::try_trigger_new_era(SessionIndex::one(), true).unwrap(); - - assert_eq!(new_validators.len(), 1); - assert_eq!( - new_validators[0], v_stash, - "Our validator was not selected!" - ); - assert_ne!(Validators::::count(), 0); - assert_eq!( - Nominators::::count(), - original_nominator_count + nominators.len() as u32 - ); - - // Give Era Points - let reward = EraRewardPoints:: { - total: points_total, - individual: points_individual.into_iter().collect(), - }; - - let current_era = CurrentEra::::get().unwrap(); - ErasRewardPoints::::insert(current_era, reward); - - // Create reward pool - let total_payout: BalanceOf = 10_000u32.into(); - >::insert(current_era, total_payout); - - Ok((v_stash, nominators)) -} - -const USER_SEED: u32 = 999666; - -benchmarks! { - bond { - let stash = create_funded_user::("stash", USER_SEED, 100); - let controller = create_funded_user::("controller", USER_SEED, 100); - let controller_lookup = T::Lookup::unlookup(controller.clone()); - let reward_destination = RewardDestination::Staked; - whitelist_account!(stash); - }: _(RawOrigin::Signed(stash.clone()), controller_lookup, 2_000_000u32.into(), reward_destination) - verify { - assert!(Bonded::::contains_key(stash)); - assert!(Ledger::::contains_key(controller)); - } - - bond_extra { - // clean up any existing state. - clear_validators_and_nominators::(); - - // Polymesh change - // ----------------------------------------------------------------- - // UseNominatorsAndValidatorsMap does not provide nominators in sorted order - // ----------------------------------------------------------------- - - let (stash, controller) = - create_stash_controller::(USER_SEED, 100, RewardDestination::Staked).unwrap(); - let original_bonded = - Ledger::::get(controller.clone()).map(|l| l.active).ok_or("ledger not created")?; - - whitelist_account!(stash); - }: _(RawOrigin::Signed(stash), 2_000_000u32.into()) - verify { - let ledger = Ledger::::get(controller).ok_or("ledger not created after")?; - let new_bonded: BalanceOf = ledger.active; - assert!(original_bonded < new_bonded); - } - - unbond { - // clean up any existing state. - clear_validators_and_nominators::(); - - // Polymesh change - // ----------------------------------------------------------------- - // UseNominatorsAndValidatorsMap does not provide nominators in sorted order - // ----------------------------------------------------------------- - - let (stash, controller) = - create_stash_controller::(USER_SEED, 100, RewardDestination::Staked).unwrap(); - let original_bonded = - Ledger::::get(controller.clone()).map(|l| l.active).ok_or("ledger not created")?; - - whitelist_account!(controller); - }: _(RawOrigin::Signed(controller.clone()), 20u32.into()) - verify { - let ledger = Ledger::::get(controller).ok_or("ledger not created after")?; - let new_bonded: BalanceOf = ledger.active; - assert!(original_bonded > new_bonded); - } - - // Withdraw only updates the ledger - withdraw_unbonded_update { - // Slashing Spans - let s in 0 .. MAX_SPANS; - - // clean up any existing state. - clear_validators_and_nominators::(); - - let (stash, controller) = create_stash_controller::(0, 10_000_000, Default::default())?; - add_slashing_spans::(&stash, s); - Staking::::unbond(RawOrigin::Signed(controller.clone()).into(), 50u32.into())?; - CurrentEra::::put(EraIndex::max_value()); - let original_total = - Ledger::::get(controller.clone()).map(|l| l.total).ok_or("ledger not created before")?; - - whitelist_account!(controller); - }: withdraw_unbonded(RawOrigin::Signed(controller.clone()), s) - verify { - let ledger = Ledger::::get(controller).ok_or("ledger not created after")?; - let new_total: BalanceOf = ledger.total; - assert!(original_total > new_total); - } - - // Worst case scenario, everything is removed after the bonding duration - withdraw_unbonded_kill { - // Slashing Spans - let s in 0 .. MAX_SPANS; - // clean up any existing state. - clear_validators_and_nominators::(); - - // Polymesh change - // ----------------------------------------------------------------- - // UseNominatorsAndValidatorsMap does not provide nominators in sorted order - // ----------------------------------------------------------------- - - let (stash, controller) = create_stash_controller::(0, 10_000_000, Default::default())?; - add_slashing_spans::(&stash, s); - Staking::::unbond(RawOrigin::Signed(controller.clone()).into(), 10_000_000u32.into())?; - CurrentEra::::put(EraIndex::max_value()); - let _ = Ledger::::get(&controller).expect("ledger not created before"); - - whitelist_account!(controller); - }: withdraw_unbonded(RawOrigin::Signed(controller.clone()), s) - verify { - assert!(!Ledger::::contains_key(controller)); - assert!(!T::VoterList::contains(&stash)); - } - - validate { - clear_validators_and_nominators::(); - - let (stash, controller) = create_stash_controller::( - T::MaxNominations::get() - 1, - 100, - Default::default(), - )?; - // because it is chilled. - assert!(!T::VoterList::contains(&stash)); - - // Polymesh change - // ----------------------------------------------------------------- - add_permissioned_validator_::(&stash); - // ----------------------------------------------------------------- - - whitelist_account!(controller); - }: _(RawOrigin::Signed(controller), ValidatorPrefs::default()) - verify { - assert!(Validators::::contains_key(stash.clone())); - assert!(T::VoterList::contains(&stash)); - } - - kick { - // scenario: we want to kick `k` nominators from nominating us (we are a validator). - // we'll assume that `k` is under 128 for the purposes of determining the slope. - // each nominator should have `T::MaxNominations::get()` validators nominated, and our validator - // should be somewhere in there. - let k in 1 .. 128; - - // these are the other validators; there are `T::MaxNominations::get() - 1` of them, so - // there are a total of `T::MaxNominations::get()` validators in the system. - let rest_of_validators = create_validators_with_seed::(T::MaxNominations::get() - 1, 100, 415)?; - - // this is the validator that will be kicking. - let (stash, controller) = create_stash_controller::( - T::MaxNominations::get() - 1, - 100, - Default::default(), - )?; - let stash_lookup = T::Lookup::unlookup(stash.clone()); - - add_permissioned_validator_::(&stash); - - // they start validating. - Staking::::validate(RawOrigin::Signed(controller.clone()).into(), Default::default())?; - - // we now create the nominators. there will be `k` of them; each will nominate all - // validators. we will then kick each of the `k` nominators from the main validator. - let mut nominator_stashes = Vec::with_capacity(k as usize); - for i in 0 .. k { - // create a nominator stash. - let (n_stash, n_controller) = create_stash_controller::( - T::MaxNominations::get() + i, - 100, - Default::default(), - )?; - - // bake the nominations; we first clone them from the rest of the validators. - let mut nominations = rest_of_validators.clone(); - // then insert "our" validator somewhere in there (we vary it) to avoid accidental - // optimisations/pessimisations. - nominations.insert(i as usize % (nominations.len() + 1), stash_lookup.clone()); - // then we nominate. - Staking::::nominate(RawOrigin::Signed(n_controller).into(), nominations)?; - - nominator_stashes.push(n_stash); - } - - // all nominators now should be nominating our validator... - for n in nominator_stashes.iter() { - assert!(Nominators::::get(n).unwrap().targets.contains(&stash)); - } - - // we need the unlookuped version of the nominator stash for the kick. - let kicks = nominator_stashes.iter() - .map(|n| T::Lookup::unlookup(n.clone())) - .collect::>(); - - whitelist_account!(controller); - }: _(RawOrigin::Signed(controller), kicks) - verify { - // all nominators now should *not* be nominating our validator... - for n in nominator_stashes.iter() { - assert!(!Nominators::::get(n).unwrap().targets.contains(&stash)); - } - } - - // Worst case scenario, T::MaxNominations::get() - nominate { - let n in 1 .. T::MaxNominations::get(); - - // clean up any existing state. - clear_validators_and_nominators::(); - - let (stash, controller) = create_stash_controller::( - n + 1, - 10_000_000, - Default::default(), - )?; - assert!(!Nominators::::contains_key(&stash)); - assert!(!T::VoterList::contains(&stash)); - - let validators = create_validators::(n, 100).unwrap(); - - whitelist_account!(controller); - }: _(RawOrigin::Signed(controller), validators) - verify { - assert!(Nominators::::contains_key(&stash)); - assert!(T::VoterList::contains(&stash)) - } - - chill { - // clean up any existing state. - clear_validators_and_nominators::(); - - // Polymesh change - // ----------------------------------------------------------------- - let (stash, controller) = create_stash_controller::(0, 10_000_000, Default::default())?; - T::Permissioned::permission_validator(&stash); - Staking::::validate(RawOrigin::Signed(controller.clone()).into(), ValidatorPrefs::default())?; - assert!(T::VoterList::contains(&stash)); - assert!(Validators::::contains_key(&stash)); - // ----------------------------------------------------------------- - - whitelist_account!(controller); - }: _(RawOrigin::Signed(controller)) - verify { - assert!(!T::VoterList::contains(&stash)); - assert!(!Validators::::contains_key(&stash)); - } - - set_payee { - let (stash, controller) = create_stash_controller::(USER_SEED, 100, Default::default())?; - assert_eq!(Payee::::get(&stash), RewardDestination::Staked); - whitelist_account!(controller); - }: _(RawOrigin::Signed(controller), RewardDestination::Controller) - verify { - assert_eq!(Payee::::get(&stash), RewardDestination::Controller); - } - - set_controller { - let (stash, _) = create_stash_controller::(USER_SEED, 100, Default::default())?; - let new_controller = create_funded_user::("new_controller", USER_SEED, 100); - let new_controller_lookup = T::Lookup::unlookup(new_controller.clone()); - whitelist_account!(stash); - }: _(RawOrigin::Signed(stash), new_controller_lookup) - verify { - assert!(Ledger::::contains_key(&new_controller)); - } - - set_validator_count { - let validator_count = MaxValidators::::get(); - }: _(RawOrigin::Root, validator_count) - verify { - assert_eq!(ValidatorCount::::get(), validator_count); - } - - force_no_eras {}: _(RawOrigin::Root) - verify { assert_eq!(ForceEra::::get(), Forcing::ForceNone); } - - force_new_era {}: _(RawOrigin::Root) - verify { assert_eq!(ForceEra::::get(), Forcing::ForceNew); } - - force_new_era_always {}: _(RawOrigin::Root) - verify { assert_eq!(ForceEra::::get(), Forcing::ForceAlways); } - - // Worst case scenario, the list of invulnerables is very long. - set_invulnerables { - let v in 0 .. MaxValidators::::get(); - let mut invulnerables = Vec::new(); - for i in 0 .. v { - invulnerables.push(account("invulnerable", i, SEED)); - } - }: _(RawOrigin::Root, invulnerables) - verify { - assert_eq!(Invulnerables::::get().len(), v as usize); - } - - force_unstake { - // Slashing Spans - let s in 0 .. MAX_SPANS; - // Clean up any existing state. - clear_validators_and_nominators::(); - - // Polymesh change - // ----------------------------------------------------------------- - let (stash, controller) = create_stash_controller::(USER_SEED, 10_000_000, Default::default())?; - T::Permissioned::permission_validator(&stash); - Staking::::validate(RawOrigin::Signed(controller.clone()).into(), ValidatorPrefs::default())?; - add_slashing_spans::(&stash, s); - assert!(T::VoterList::contains(&stash)); - assert!(Validators::::contains_key(&stash)); - // ----------------------------------------------------------------- - - }: _(RawOrigin::Root, stash.clone(), s) - verify { - assert!(!Ledger::::contains_key(&controller)); - assert!(!T::VoterList::contains(&stash)); - assert!(!Validators::::contains_key(&stash)); - } - - cancel_deferred_slash { - let s in 1 .. MAX_SLASHES; - let mut unapplied_slashes = Vec::new(); - let era = EraIndex::one(); - let dummy = || T::AccountId::decode(&mut TrailingZeroInput::zeroes()).unwrap(); - for _ in 0 .. MAX_SLASHES { - unapplied_slashes.push(UnappliedSlash::>::default_from(dummy())); - } - UnappliedSlashes::::insert(era, &unapplied_slashes); - - let slash_indices: Vec = (0 .. s).collect(); - }: _(RawOrigin::Root, era, slash_indices) - verify { - assert_eq!(UnappliedSlashes::::get(&era).len(), (MAX_SLASHES - s) as usize); - } - - payout_stakers_dead_controller { - let n in 0 .. T::MaxNominatorRewardedPerValidator::get() as u32; - let (validator, nominators) = create_validator_with_nominators::( - n, - T::MaxNominatorRewardedPerValidator::get() as u32, - true, - RewardDestination::Controller, - Some(10_000_000) - )?; - - let current_era = CurrentEra::::get().unwrap(); - // set the commission for this particular era as well. - >::insert(current_era, validator.clone(), >::validators(&validator)); - - let validator_controller = >::get(&validator).unwrap(); - let balance_before = T::Currency::free_balance(&validator_controller); - for (_, controller) in &nominators { - let balance = T::Currency::free_balance(&controller); - ensure!(balance.is_zero(), "Controller has balance, but should be dead."); - } - - let caller = UserBuilder::::default().seed(SEED).generate_did().build("caller").account(); - let caller_key = frame_system::Account::::hashed_key_for(&caller); - frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into()); - }: payout_stakers(RawOrigin::Signed(caller), validator, current_era) - verify { - let balance_after = T::Currency::free_balance(&validator_controller); - ensure!( - balance_before < balance_after, - "Balance of validator controller should have increased after payout.", - ); - for (_, controller) in &nominators { - let balance = T::Currency::free_balance(&controller); - ensure!(!balance.is_zero(), "Payout not given to controller."); - } - } - - payout_stakers_alive_staked { - let n in 0 .. T::MaxNominatorRewardedPerValidator::get() as u32; - - let (validator, nominators) = create_validator_with_nominators::( - n, - T::MaxNominatorRewardedPerValidator::get() as u32, - false, - RewardDestination::Staked, - Some(10_000_000) - )?; - - let current_era = CurrentEra::::get().unwrap(); - // set the commission for this particular era as well. - >::insert( - current_era, - validator.clone(), - >::validators(&validator) - ); - - let caller = UserBuilder::::default().seed(SEED).generate_did().build("caller").account(); - let caller_key = frame_system::Account::::hashed_key_for(&caller); - frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into()); - - let balance_before = T::Currency::free_balance(&validator); - let mut nominator_balances_before = Vec::new(); - for (stash, _) in &nominators { - let balance = T::Currency::free_balance(&stash); - nominator_balances_before.push(balance); - } - }: payout_stakers(RawOrigin::Signed(caller), validator.clone(), current_era) - verify { - let balance_after = T::Currency::free_balance(&validator); - ensure!( - balance_before < balance_after, - "Balance of validator stash should have increased after payout.", - ); - for ((stash, _), balance_before) in nominators.iter().zip(nominator_balances_before.iter()) { - let balance_after = T::Currency::free_balance(&stash); - ensure!( - balance_before < &balance_after, - "Balance of nominator stash should have increased after payout.", - ); - } - } - - rebond { - let l in 1 .. T::MaxUnlockingChunks::get() as u32; - - // clean up any existing state. - clear_validators_and_nominators::(); - - let (stash, controller) = - create_stash_controller::(1, 10_000_000, RewardDestination::Staked)?; - - let mut staking_ledger = Ledger::::get(controller.clone()).unwrap(); - let unlock_chunk = UnlockChunk::> { - value: 1u32.into(), - era: EraIndex::zero(), - }; - for _ in 0 .. l { - staking_ledger.unlocking.try_push(unlock_chunk.clone()).unwrap() - } - Ledger::::insert(controller.clone(), staking_ledger.clone()); - let original_bonded: BalanceOf = staking_ledger.active; - - whitelist_account!(controller); - }: _(RawOrigin::Signed(controller.clone()), 101u32.into()) - verify { - let ledger = Ledger::::get(&controller).ok_or("ledger not created after")?; - let new_bonded: BalanceOf = ledger.active; - assert!(original_bonded < new_bonded); - } - - reap_stash { - let s in 1 .. MAX_SPANS; - // clean up any existing state. - clear_validators_and_nominators::(); - - let (stash, controller) = - create_stash_controller::(1, 1, RewardDestination::Staked)?; - T::Permissioned::permission_validator(&stash); - Staking::::validate(RawOrigin::Signed(controller.clone()).into(), ValidatorPrefs::default())?; - - add_slashing_spans::(&stash, s); - let l = StakingLedger { - stash: stash.clone(), - active: T::Currency::minimum_balance(), - total: T::Currency::minimum_balance(), - unlocking: Default::default(), - claimed_rewards: Default::default(), - }; - T::Currency::make_free_balance_be(&stash, 0u32.into()); - Ledger::::insert(&controller, l); - - assert!(Bonded::::contains_key(&stash)); - assert!(T::VoterList::contains(&stash)); - - whitelist_account!(controller); - }: _(RawOrigin::Signed(controller), stash.clone(), s) - verify { - assert!(!Bonded::::contains_key(&stash)); - assert!(!T::VoterList::contains(&stash)); - } - - new_era { - let v in 1 .. 10; - let n in 0 .. 100; - - create_validators_with_nominators_for_era::( - v, - n, - ::MaxNominations::get() as usize, - false, - None, - )?; - let session_index = SessionIndex::one(); - }: { - let validators = Staking::::try_trigger_new_era(session_index, true) - .ok_or("`new_era` failed")?; - assert!(validators.len() == v as usize); - } - - #[extra] - payout_all { - let v in 1 .. 10; - let n in 0 .. 100; - create_validators_with_nominators_for_era::( - v, - n, - ::MaxNominations::get() as usize, - false, - None, - )?; - // Start a new Era - let new_validators = Staking::::try_trigger_new_era(SessionIndex::one(), true).unwrap(); - assert!(new_validators.len() == v as usize); - - let current_era = CurrentEra::::get().unwrap(); - let mut points_total = 0; - let mut points_individual = Vec::new(); - let mut payout_calls_arg = Vec::new(); - - for validator in new_validators.iter() { - points_total += 10; - points_individual.push((validator.clone(), 10)); - payout_calls_arg.push((validator.clone(), current_era)); - } - - // Give Era Points - let reward = EraRewardPoints:: { - total: points_total, - individual: points_individual.into_iter().collect(), - }; - - ErasRewardPoints::::insert(current_era, reward); - - // Create reward pool - let total_payout = T::Currency::minimum_balance() * 1000u32.into(); - >::insert(current_era, total_payout); - - let caller: T::AccountId = whitelisted_caller(); - let origin = RawOrigin::Signed(caller); - let calls: Vec<_> = payout_calls_arg.iter().map(|arg| - Call::::payout_stakers { validator_stash: arg.0.clone(), era: arg.1 }.encode() - ).collect(); - }: { - for call in calls { - as Decode>::decode(&mut &*call) - .expect("call is encoded above, encoding must be correct") - .dispatch_bypass_filter(origin.clone().into())?; - } - } - - #[extra] - do_slash { - let l in 1 .. T::MaxUnlockingChunks::get() as u32; - let (stash, controller) = create_stash_controller::(0, 100, Default::default())?; - let mut staking_ledger = Ledger::::get(controller.clone()).unwrap(); - let unlock_chunk = UnlockChunk::> { - value: 1u32.into(), - era: EraIndex::zero(), - }; - for _ in 0 .. l { - staking_ledger.unlocking.try_push(unlock_chunk.clone()).unwrap(); - } - Ledger::::insert(controller, staking_ledger); - let balance_before = T::Currency::free_balance(&stash); - }: { - crate::slashing::do_slash::( - &stash, - 10u32.into(), - &mut BalanceOf::::zero(), - &mut NegativeImbalanceOf::::zero(), - EraIndex::zero() - ); - } verify { - let balance_after = T::Currency::free_balance(&stash); - assert!(balance_before > balance_after); - } - - get_npos_voters { - // number of validator intention. we will iterate all of them. - let v in (MaxValidators::::get() / 2) .. MaxValidators::::get(); - // number of nominator intention. we will iterate all of them. - let n in (MaxNominators::::get() / 2) .. MaxNominators::::get(); - - let validators = create_validators_with_nominators_for_era::( - v, n, T::MaxNominations::get() as usize, false, None - )? - .into_iter() - .map(|v| T::Lookup::lookup(v).unwrap()) - .collect::>(); - - assert_eq!(Validators::::count(), v); - assert_eq!(Nominators::::count(), n); - - let num_voters = (v + n) as usize; - }: { - let voters = >::get_npos_voters(None); - assert_eq!(voters.len(), num_voters); - } - - get_npos_targets { - // number of validator intention. - let v in (MaxValidators::::get() / 2) .. MaxValidators::::get(); - // number of nominator intention. - let n = MaxNominators::::get(); - - let _ = create_validators_with_nominators_for_era::( - v, n, T::MaxNominations::get() as usize, false, None - )?; - }: { - let targets = >::get_npos_targets(None); - assert_eq!(targets.len() as u32, v); - } - - set_staking_configs_all_set { - }: set_staking_configs( - RawOrigin::Root, - ConfigOp::Set(BalanceOf::::max_value()), - ConfigOp::Set(BalanceOf::::max_value()), - ConfigOp::Set(u32::MAX), - ConfigOp::Set(u32::MAX), - ConfigOp::Set(Percent::max_value()), - ConfigOp::Set(Perbill::max_value()) - ) verify { - assert_eq!(MinNominatorBond::::get(), BalanceOf::::max_value()); - assert_eq!(MinValidatorBond::::get(), BalanceOf::::max_value()); - assert_eq!(MaxNominatorsCount::::get(), Some(u32::MAX)); - assert_eq!(MaxValidatorsCount::::get(), Some(u32::MAX)); - assert_eq!(ChillThreshold::::get(), Some(Percent::from_percent(100))); - assert_eq!(MinCommission::::get(), Perbill::from_percent(100)); - } - - set_staking_configs_all_remove { - }: set_staking_configs( - RawOrigin::Root, - ConfigOp::Remove, - ConfigOp::Remove, - ConfigOp::Remove, - ConfigOp::Remove, - ConfigOp::Remove, - ConfigOp::Remove - ) verify { - assert!(!MinNominatorBond::::exists()); - assert!(!MinValidatorBond::::exists()); - assert!(!MaxNominatorsCount::::exists()); - assert!(!MaxValidatorsCount::::exists()); - assert!(!ChillThreshold::::exists()); - assert!(!MinCommission::::exists()); - } - - chill_other { - // clean up any existing state. - clear_validators_and_nominators::(); - - // Create a validator with a commission of 50% - let (stash, controller) = - create_stash_controller::(1, 1, RewardDestination::Staked)?; - let validator_prefs = - ValidatorPrefs { commission: Perbill::from_percent(50), ..Default::default() }; - Staking::::set_commission_cap(RawOrigin::Root.into(), Perbill::from_percent(60)).unwrap(); - T::Permissioned::permission_validator(&stash); - Staking::::validate(RawOrigin::Signed(controller.clone()).into(), validator_prefs)?; - assert!(T::VoterList::contains(&stash)); - - Staking::::set_staking_configs( - RawOrigin::Root.into(), - ConfigOp::Set(BalanceOf::::max_value()), - ConfigOp::Set(BalanceOf::::max_value()), - ConfigOp::Set(0), - ConfigOp::Set(0), - ConfigOp::Set(Percent::from_percent(0)), - ConfigOp::Set(Zero::zero()), - )?; - - let caller = UserBuilder::::default().seed(SEED).generate_did().build("caller").account(); - }: _(RawOrigin::Signed(caller), controller) - verify { - assert!(!T::VoterList::contains(&stash)); - } - - force_apply_min_commission { - // Clean up any existing state - clear_validators_and_nominators::(); - - // Create a validator with a commission of 50% - let (stash, controller) = - create_stash_controller::(1, 1, RewardDestination::Staked)?; - let validator_prefs = - ValidatorPrefs { commission: Perbill::from_percent(50), ..Default::default() }; - Staking::::set_commission_cap(RawOrigin::Root.into(), Perbill::from_percent(60)).unwrap(); - T::Permissioned::permission_validator(&stash); - Staking::::validate(RawOrigin::Signed(controller).into(), validator_prefs)?; - - // Sanity check - assert_eq!( - Validators::::get(&stash), - ValidatorPrefs { commission: Perbill::from_percent(50), ..Default::default() } - ); - - // Set the min commission to 75% - MinCommission::::set(Perbill::from_percent(75)); - let caller = whitelisted_caller(); - }: _(RawOrigin::Signed(caller), stash.clone()) - verify { - // The validators commission has been bumped to 75% - assert_eq!( - Validators::::get(&stash), - ValidatorPrefs { commission: Perbill::from_percent(75), ..Default::default() } - ); - } - - set_min_commission { - let min_commission = Perbill::max_value(); - }: _(RawOrigin::Root, min_commission) - verify { - assert_eq!(MinCommission::::get(), Perbill::from_percent(100)); - } - - // Polymesh change - // ----------------------------------------------------------------- - add_permissioned_validator { - clear_validators_and_nominators::(); - let (stash, controller) = - create_stash_controller::(1, 1, RewardDestination::Staked)?; - Staking::::set_validator_count(RawOrigin::Root.into(), 10).unwrap(); - let did = get_did::(&stash); - }: _(RawOrigin::Root, did, Some(1)) - verify { - let identity_preferences = Staking::::permissioned_identity(did); - assert!(identity_preferences.is_some()); - assert_eq!(identity_preferences.unwrap().intended_count, 1); - } - - remove_permissioned_validator { - clear_validators_and_nominators::(); - let (stash, controller) = - create_stash_controller::(1, 1, RewardDestination::Staked)?; - add_permissioned_validator_::(&stash); - let did = get_did::(&stash); - }: _(RawOrigin::Root, did) - verify { - let identity_preferences = Staking::::permissioned_identity(did); - assert!(identity_preferences.is_none()); - } - - change_slashing_allowed_for {}: _(RawOrigin::Root, SlashingSwitch::ValidatorAndNominator) - verify { - assert_eq!(Staking::::slashing_allowed_for(), SlashingSwitch::ValidatorAndNominator); - } - - update_permissioned_validator_intended_count { - clear_validators_and_nominators::(); - let (stash, controller) = - create_stash_controller::(1, 1, RewardDestination::Staked)?; - add_permissioned_validator_::(&stash); - let did = get_did::(&stash); - }: _(RawOrigin::Root, did, 2) - verify { - assert_eq!(Staking::::permissioned_identity(did).unwrap().intended_count, 2); - } - - chill_from_governance { - let s in 1..100; - - let validator = create_funded_user::("validator", USER_SEED, 10_000); - - Staking::::set_validator_count(RawOrigin::Root.into(), 1_000).unwrap(); - assert_eq!(Staking::::validator_count(), 1_000); - - let did = get_did::(&validator); - Staking::::add_permissioned_validator( - RawOrigin::Root.into(), - did, - Some(100) - ).unwrap(); - - whitelist_account!(validator); - - let mut signatories = Vec::new(); - for x in 0 .. s { - let key = UserBuilder::::default().seed(x).balance(10_000u32).build("key").account(); - let key_lookup = T::Lookup::unlookup(key.clone()); - let _ = T::Currency::issue(10_000u32.into()); - - let did = get_did::(&validator); - pallet_identity::Pallet::::unsafe_join_identity( - did, - Permissions::default(), - key.clone() - ); - Staking::::bond( - RawOrigin::Signed(key.clone()).into(), - key_lookup, - 2_000_000u32.into(), - RewardDestination::Staked - ) - .unwrap(); - whitelist_account!(key); - - Staking::::validate(RawOrigin::Signed(key.clone()).into(), ValidatorPrefs::default()).unwrap(); - assert_eq!(>::contains_key(&key), true); - signatories.push(key.clone()); - } - let did = get_did::(&validator); - }: _(RawOrigin::Root, did, signatories.clone()) - verify { - for key in signatories { - assert!(!>::contains_key(&key)); - } - } - - set_commission_cap { - let m in 0 .. 150; - - let mut stashes = Vec::with_capacity(m as usize); - for i in 0 .. m { - let stash = create_funded_user::("stash", i, 1000); - stashes.push(stash.clone()); - Validators::::insert( - stash, - ValidatorPrefs { - commission: Perbill::from_percent(70), - ..Default::default() - } - ); - } - }: _(RawOrigin::Root, Perbill::from_percent(50)) - verify { - stashes.iter().for_each(|s| { - assert_eq!( - Staking::::validators(s), - ValidatorPrefs { commission: Perbill::from_percent(50), ..Default::default() } - ); - }); - } - - // ----------------------------------------------------------------- -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::mock::{Balances, ExtBuilder, RuntimeOrigin, Staking, Test}; - use frame_support::assert_ok; - - #[test] - fn create_validators_with_nominators_for_era_works() { - ExtBuilder::default().build_and_execute(|| { - let v = 10; - let n = 100; - - create_validators_with_nominators_for_era::( - v, - n, - ::MaxNominations::get() as usize, - false, - None, - ) - .unwrap(); - - let count_validators = Validators::::iter().count(); - let count_nominators = Nominators::::iter().count(); - - assert_eq!(count_validators, Validators::::count() as usize); - assert_eq!(count_nominators, Nominators::::count() as usize); - - assert_eq!(count_validators, v as usize); - assert_eq!(count_nominators, n as usize); - }); - } - - #[test] - fn create_validator_with_nominators_works() { - ExtBuilder::default().build_and_execute(|| { - let n = 10; - - let (validator_stash, nominators) = create_validator_with_nominators::( - n, - <::MaxNominatorRewardedPerValidator as Get<_>>::get(), - false, - RewardDestination::Staked, - ) - .unwrap(); - - assert_eq!(nominators.len() as u32, n); - - let current_era = CurrentEra::::get().unwrap(); - - let original_free_balance = Balances::free_balance(&validator_stash); - assert_ok!(Staking::payout_stakers( - RuntimeOrigin::signed(1337), - validator_stash, - current_era - )); - let new_free_balance = Balances::free_balance(&validator_stash); - - assert!(original_free_balance < new_free_balance); - }); - } - - #[test] - fn add_slashing_spans_works() { - ExtBuilder::default().build_and_execute(|| { - let n = 10; - - let (validator_stash, _nominators) = create_validator_with_nominators::( - n, - <::MaxNominatorRewardedPerValidator as Get<_>>::get(), - false, - RewardDestination::Staked, - ) - .unwrap(); - - // Add 20 slashing spans - let num_of_slashing_spans = 20; - add_slashing_spans::(&validator_stash, num_of_slashing_spans); - - let slashing_spans = SlashingSpans::::get(&validator_stash).unwrap(); - assert_eq!( - slashing_spans.iter().count(), - num_of_slashing_spans as usize - ); - for i in 0..num_of_slashing_spans { - assert!(SpanSlash::::contains_key((&validator_stash, i))); - } - - // Test everything is cleaned up - assert_ok!(Staking::kill_stash(&validator_stash, num_of_slashing_spans)); - assert!(SlashingSpans::::get(&validator_stash).is_none()); - for i in 0..num_of_slashing_spans { - assert!(!SpanSlash::::contains_key((&validator_stash, i))); - } - }); - } - - #[test] - fn test_payout_all() { - ExtBuilder::default().build_and_execute(|| { - let v = 10; - let n = 100; - - let selected_benchmark = SelectedBenchmark::payout_all; - let c = vec![ - (frame_benchmarking::BenchmarkParameter::v, v), - (frame_benchmarking::BenchmarkParameter::n, n), - ]; - let closure_to_benchmark = - >::instance( - &selected_benchmark, - &c, - true, - ) - .unwrap(); - - assert_ok!(closure_to_benchmark()); - }); - } -} diff --git a/pallets/staking/src/lib.rs b/pallets/staking/src/lib.rs deleted file mode 100644 index 9c4dac9b20..0000000000 --- a/pallets/staking/src/lib.rs +++ /dev/null @@ -1,1057 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! # Staking Pallet -//! -//! The Staking pallet is used to manage funds at stake by network maintainers. -//! -//! - [`Config`] -//! - [`Call`] -//! - [`Pallet`] -//! -//! ## Overview -//! -//! The Staking pallet is the means by which a set of network maintainers (known as _authorities_ in -//! some contexts and _validators_ in others) are chosen based upon those who voluntarily place -//! funds under deposit. Under deposit, those funds are rewarded under normal operation but are held -//! at pain of _slash_ (expropriation) should the staked maintainer be found not to be discharging -//! its duties properly. -//! -//! ### Terminology -//! -//! -//! - Staking: The process of locking up funds for some time, placing them at risk of slashing -//! (loss) in order to become a rewarded maintainer of the network. -//! - Validating: The process of running a node to actively maintain the network, either by -//! producing blocks or guaranteeing finality of the chain. -//! - Nominating: The process of placing staked funds behind one or more validators in order to -//! share in any reward, and punishment, they take. -//! - Stash account: The account holding an owner's funds used for staking. -//! - Controller account: The account that controls an owner's funds for staking. -//! - Era: A (whole) number of sessions, which is the period that the validator set (and each -//! validator's active nominator set) is recalculated and where rewards are paid out. -//! - Slash: The punishment of a staker by reducing its funds. -//! -//! ### Goals -//! -//! -//! The staking system in Substrate NPoS is designed to make the following possible: -//! -//! - Stake funds that are controlled by a cold wallet. -//! - Withdraw some, or deposit more, funds without interrupting the role of an entity. -//! - Switch between roles (nominator, validator, idle) with minimal overhead. -//! -//! ### Scenarios -//! -//! #### Staking -//! -//! Almost any interaction with the Staking pallet requires a process of _**bonding**_ (also known -//! as being a _staker_). To become *bonded*, a fund-holding register known as the _stash account_, -//! which holds some or all of the funds that become frozen in place as part of the staking process, -//! is paired with an active **controller** account, which issues instructions on how they shall be -//! used. -//! -//! An account pair can become bonded using the [`bond`](Call::bond) call. -//! -//! Stash accounts can change their associated controller using the -//! [`set_controller`](Call::set_controller) call. -//! -//! There are three possible roles that any staked account pair can be in: `Validator`, `Nominator` -//! and `Idle` (defined in [`StakerStatus`]). There are three -//! corresponding instructions to change between roles, namely: -//! [`validate`](Call::validate), -//! [`nominate`](Call::nominate), and [`chill`](Call::chill). -//! -//! #### Validating -//! -//! A **validator** takes the role of either validating blocks or ensuring their finality, -//! maintaining the veracity of the network. A validator should avoid both any sort of malicious -//! misbehavior and going offline. Bonded accounts that state interest in being a validator do NOT -//! get immediately chosen as a validator. Instead, they are declared as a _candidate_ and they -//! _might_ get elected at the _next era_ as a validator. The result of the election is determined -//! by nominators and their votes. -//! -//! An account can become a validator candidate via the -//! [`validate`](Call::validate) call. -//! -//! #### Nomination -//! -//! A **nominator** does not take any _direct_ role in maintaining the network, instead, it votes on -//! a set of validators to be elected. Once interest in nomination is stated by an account, it -//! takes effect at the next election round. The funds in the nominator's stash account indicate the -//! _weight_ of its vote. Both the rewards and any punishment that a validator earns are shared -//! between the validator and its nominators. This rule incentivizes the nominators to NOT vote for -//! the misbehaving/offline validators as much as possible, simply because the nominators will also -//! lose funds if they vote poorly. -//! -//! An account can become a nominator via the [`nominate`](Call::nominate) call. -//! -//! #### Voting -//! -//! Staking is closely related to elections; actual validators are chosen from among all potential -//! validators via election by the potential validators and nominators. To reduce use of the phrase -//! "potential validators and nominators", we often use the term **voters**, who are simply -//! the union of potential validators and nominators. -//! -//! #### Rewards and Slash -//! -//! The **reward and slashing** procedure is the core of the Staking pallet, attempting to _embrace -//! valid behavior_ while _punishing any misbehavior or lack of availability_. -//! -//! Rewards must be claimed for each era before it gets too old by `$HISTORY_DEPTH` using the -//! `payout_stakers` call. Any account can call `payout_stakers`, which pays the reward to the -//! validator as well as its nominators. Only the [`Config::MaxNominatorRewardedPerValidator`] -//! biggest stakers can claim their reward. This is to limit the i/o cost to mutate storage for each -//! nominator's account. -//! -//! Slashing can occur at any point in time, once misbehavior is reported. Once slashing is -//! determined, a value is deducted from the balance of the validator and all the nominators who -//! voted for this validator (values are deducted from the _stash_ account of the slashed entity). -//! -//! Slashing logic is further described in the documentation of the `slashing` pallet. -//! -//! Similar to slashing, rewards are also shared among a validator and its associated nominators. -//! Yet, the reward funds are not always transferred to the stash account and can be configured. See -//! [Reward Calculation](#reward-calculation) for more details. -//! -//! #### Chilling -//! -//! Finally, any of the roles above can choose to step back temporarily and just chill for a while. -//! This means that if they are a nominator, they will not be considered as voters anymore and if -//! they are validators, they will no longer be a candidate for the next election. -//! -//! An account can step back via the [`chill`](Call::chill) call. -//! -//! ### Session managing -//! -//! The pallet implement the trait `SessionManager`. Which is the only API to query new validator -//! set and allowing these validator set to be rewarded once their era is ended. -//! -//! ## Interface -//! -//! ### Dispatchable Functions -//! -//! The dispatchable functions of the Staking pallet enable the steps needed for entities to accept -//! and change their role, alongside some helper functions to get/set the metadata of the pallet. -//! -//! ### Public Functions -//! -//! The Staking pallet contains many public storage items and (im)mutable functions. -//! -//! ## Usage -//! -//! ### Example: Rewarding a validator by id. -//! -//! ``` -//! use pallet_staking::{self as staking}; -//! -//! #[frame_support::pallet] -//! pub mod pallet { -//! use super::*; -//! use frame_support::pallet_prelude::*; -//! use frame_system::pallet_prelude::*; -//! -//! #[pallet::pallet] -//! pub struct Pallet(_); -//! -//! #[pallet::config] -//! pub trait Config: frame_system::Config + staking::Config {} -//! -//! #[pallet::call] -//! impl Pallet { -//! /// Reward a validator. -//! #[pallet::weight(0)] -//! pub fn reward_myself(origin: OriginFor) -> DispatchResult { -//! let reported = ensure_signed(origin)?; -//! >::reward_by_ids(vec![(reported, 10)]); -//! Ok(()) -//! } -//! } -//! } -//! # fn main() { } -//! ``` -//! -//! ## Implementation Details -//! -//! ### Era payout -//! -//! The era payout is computed using yearly inflation curve defined at -//! [`Config::EraPayout`] as such: -//! -//! ```nocompile -//! staker_payout = yearly_inflation(npos_token_staked / total_tokens) * total_tokens / era_per_year -//! ``` -//! This payout is used to reward stakers as defined in next section -//! -//! ```nocompile -//! remaining_payout = max_yearly_inflation * total_tokens / era_per_year - staker_payout -//! ``` -//! The remaining reward is send to the configurable end-point -//! [`Config::RewardRemainder`]. -//! -//! ### Reward Calculation -//! -//! Validators and nominators are rewarded at the end of each era. The total reward of an era is -//! calculated using the era duration and the staking rate (the total amount of tokens staked by -//! nominators and validators, divided by the total token supply). It aims to incentivize toward a -//! defined staking rate. The full specification can be found -//! [here](https://research.web3.foundation/en/latest/polkadot/Token%20Economics.html#inflation-model). -//! -//! Total reward is split among validators and their nominators depending on the number of points -//! they received during the era. Points are added to a validator using -//! [`reward_by_ids`](Pallet::reward_by_ids). -//! -//! [`Pallet`] implements -//! [`pallet_authorship::EventHandler`] to add reward -//! points to block producer and block producer of referenced uncles. -//! -//! The validator and its nominator split their reward as following: -//! -//! The validator can declare an amount, named [`commission`](ValidatorPrefs::commission), that does -//! not get shared with the nominators at each reward payout through its [`ValidatorPrefs`]. This -//! value gets deducted from the total reward that is paid to the validator and its nominators. The -//! remaining portion is split pro rata among the validator and the top -//! [`Config::MaxNominatorRewardedPerValidator`] nominators that nominated the validator, -//! proportional to the value staked behind the validator (_i.e._ dividing the -//! [`own`](Exposure::own) or [`others`](Exposure::others) by [`total`](Exposure::total) in -//! [`Exposure`]). Note that the pro rata division of rewards uses the total exposure behind the -//! validator, *not* just the exposure of the validator and the top -//! [`Config::MaxNominatorRewardedPerValidator`] nominators. -//! -//! All entities who receive a reward have the option to choose their reward destination through the -//! [`Payee`] storage item (see -//! [`set_payee`](Call::set_payee)), to be one of the following: -//! -//! - Controller account, (obviously) not increasing the staked value. -//! - Stash account, not increasing the staked value. -//! - Stash account, also increasing the staked value. -//! -//! ### Additional Fund Management Operations -//! -//! Any funds already placed into stash can be the target of the following operations: -//! -//! The controller account can free a portion (or all) of the funds using the -//! [`unbond`](Call::unbond) call. Note that the funds are not immediately -//! accessible. Instead, a duration denoted by -//! [`Config::BondingDuration`] (in number of eras) must -//! pass until the funds can actually be removed. Once the `BondingDuration` is over, the -//! [`withdraw_unbonded`](Call::withdraw_unbonded) call can be used to actually -//! withdraw the funds. -//! -//! Note that there is a limitation to the number of fund-chunks that can be scheduled to be -//! unlocked in the future via [`unbond`](Call::unbond). In case this maximum -//! (`MAX_UNLOCKING_CHUNKS`) is reached, the bonded account _must_ first wait until a successful -//! call to `withdraw_unbonded` to remove some of the chunks. -//! -//! ### Election Algorithm -//! -//! The current election algorithm is implemented based on Phragmén. The reference implementation -//! can be found [here](https://github.com/w3f/consensus/tree/master/NPoS). -//! -//! The election algorithm, aside from electing the validators with the most stake value and votes, -//! tries to divide the nominator votes among candidates in an equal manner. To further assure this, -//! an optional post-processing can be applied that iteratively normalizes the nominator staked -//! values until the total difference among votes of a particular nominator are less than a -//! threshold. -//! -//! ## GenesisConfig -//! -//! The Staking pallet depends on the [`GenesisConfig`]. The -//! `GenesisConfig` is optional and allow to set some initial stakers. -//! -//! ## Related Modules -//! -//! - [Balances](../pallet_balances/index.html): Used to manage values at stake. -//! - [Session](../pallet_session/index.html): Used to manage sessions. Also, a list of new -//! validators is stored in the Session pallet's `Validators` at the end of each era. - -#![cfg_attr(not(feature = "std"), no_std)] -#![recursion_limit = "256"] - -#[cfg(feature = "runtime-benchmarks")] -pub mod benchmarking; -#[cfg(any(feature = "runtime-benchmarks"))] -pub mod testing_utils; - -pub mod inflation; -pub mod slashing; -pub mod weights; - -pub mod permissioned; -pub use permissioned::PolymeshConvertCurve; -pub mod types; - -pub mod pallet; - -use codec::{Decode, Encode, HasCompact, MaxEncodedLen}; -use frame_support::{ - traits::{Currency, Defensive, Get}, - BoundedVec, CloneNoBound, EqNoBound, PartialEqNoBound, RuntimeDebugNoBound, -}; -use scale_info::TypeInfo; -use sp_runtime::{ - curve::PiecewiseLinear, - traits::{AtLeast32BitUnsigned, Convert, Saturating, StaticLookup, Zero}, - Perbill, Perquintill, Rounding, RuntimeDebug, -}; -use sp_staking::{ - offence::{Offence, OffenceError, ReportOffence}, - EraIndex, SessionIndex, -}; -use sp_std::{collections::btree_map::BTreeMap, prelude::*}; -pub use weights::WeightInfo; - -pub use pallet::{pallet::*, *}; - -pub(crate) const LOG_TARGET: &str = "runtime::staking"; - -// syntactic sugar for logging. -#[macro_export] -macro_rules! log { - ($level:tt, $patter:expr $(, $values:expr)* $(,)?) => { - log::$level!( - target: crate::LOG_TARGET, - concat!("[{:?}] 💸 ", $patter), >::block_number() $(, $values)* - ) - }; -} - -/// Maximum number of winners (aka. active validators), as defined in the election provider of this -/// pallet. -pub type MaxWinnersOf = <::ElectionProvider as frame_election_provider_support::ElectionProviderBase>::MaxWinners; - -/// Counter for the number of "reward" points earned by a given validator. -pub type RewardPoint = u32; - -/// The balance type of this pallet. -pub type BalanceOf = ::CurrencyBalance; - -pub type PositiveImbalanceOf = <::Currency as Currency< - ::AccountId, ->>::PositiveImbalance; -pub type NegativeImbalanceOf = <::Currency as Currency< - ::AccountId, ->>::NegativeImbalance; - -type AccountIdLookupOf = <::Lookup as StaticLookup>::Source; - -/// Information regarding the active era (era in used in session). -#[derive(Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] -pub struct ActiveEraInfo { - /// Index of era. - pub index: EraIndex, - /// Moment of start expressed as millisecond from `$UNIX_EPOCH`. - /// - /// Start can be none if start hasn't been set for the era yet, - /// Start is set on the first on_finalize of the era to guarantee usage of `Time`. - start: Option, -} - -/// Reward points of an era. Used to split era total payout between validators. -/// -/// This points will be used to reward validators and their respective nominators. -#[derive(PartialEq, Encode, Decode, RuntimeDebug, TypeInfo)] -pub struct EraRewardPoints { - /// Total number of points. Equals the sum of reward points for each validator. - pub total: RewardPoint, - /// The reward points earned by a given validator. - pub individual: BTreeMap, -} - -impl Default for EraRewardPoints { - fn default() -> Self { - EraRewardPoints { - total: Default::default(), - individual: BTreeMap::new(), - } - } -} - -/// Indicates the initial status of the staker. -#[derive(RuntimeDebug, TypeInfo)] -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize, Clone))] -pub enum StakerStatus { - /// Chilling. - Idle, - /// Declared desire in validating or already participating in it. - Validator, - /// Nominating for a group of other stakers. - Nominator(Vec), -} - -/// A destination account for payment. -#[derive( - PartialEq, - Eq, - Copy, - Clone, - Encode, - Decode, - RuntimeDebug, - TypeInfo, - MaxEncodedLen -)] -pub enum RewardDestination { - /// Pay into the stash account, increasing the amount at stake accordingly. - Staked, - /// Pay into the stash account, not increasing the amount at stake. - Stash, - /// Pay into the controller account. - Controller, - /// Pay into a specified account. - Account(AccountId), - /// Receive no reward. - None, -} - -impl Default for RewardDestination { - fn default() -> Self { - RewardDestination::Staked - } -} - -/// Preference of what happens regarding validation. -#[derive( - PartialEq, - Eq, - Clone, - Encode, - Decode, - RuntimeDebug, - TypeInfo, - Default, - MaxEncodedLen -)] -pub struct ValidatorPrefs { - /// Reward that validator takes up-front; only the rest is split between themselves and - /// nominators. - #[codec(compact)] - pub commission: Perbill, - /// Whether or not this validator is accepting more nominations. If `true`, then no nominator - /// who is not already nominating this validator may nominate them. By default, validators - /// are accepting nominations. - pub blocked: bool, -} - -/// Just a Balance/BlockNumber tuple to encode when a chunk of funds will be unlocked. -#[derive( - PartialEq, - Eq, - Clone, - Encode, - Decode, - RuntimeDebug, - TypeInfo, - MaxEncodedLen -)] -pub struct UnlockChunk { - /// Amount of funds to be unlocked. - #[codec(compact)] - pub value: Balance, - /// Era number at which point it'll be unlocked. - #[codec(compact)] - pub era: EraIndex, -} - -/// The ledger of a (bonded) stash. -#[derive( - PartialEqNoBound, - EqNoBound, - CloneNoBound, - Encode, - Decode, - RuntimeDebugNoBound, - TypeInfo, - MaxEncodedLen -)] -#[scale_info(skip_type_params(T))] -pub struct StakingLedger { - /// The stash account whose balance is actually locked and at stake. - pub stash: T::AccountId, - /// The total amount of the stash's balance that we are currently accounting for. - /// It's just `active` plus all the `unlocking` balances. - #[codec(compact)] - pub total: BalanceOf, - /// The total amount of the stash's balance that will be at stake in any forthcoming - /// rounds. - #[codec(compact)] - pub active: BalanceOf, - /// Any balance that is becoming free, which may eventually be transferred out of the stash - /// (assuming it doesn't get slashed first). It is assumed that this will be treated as a first - /// in, first out queue where the new (higher value) eras get pushed on the back. - pub unlocking: BoundedVec>, T::MaxUnlockingChunks>, - /// List of eras for which the stakers behind a validator have claimed rewards. Only updated - /// for validators. - pub claimed_rewards: BoundedVec, -} - -impl StakingLedger { - /// Initializes the default object using the given `validator`. - pub fn default_from(stash: T::AccountId) -> Self { - Self { - stash, - total: Zero::zero(), - active: Zero::zero(), - unlocking: Default::default(), - claimed_rewards: Default::default(), - } - } - - /// Remove entries from `unlocking` that are sufficiently old and reduce the - /// total by the sum of their balances. - fn consolidate_unlocked(self, current_era: EraIndex) -> Self { - let mut total = self.total; - let unlocking: BoundedVec<_, _> = self - .unlocking - .into_iter() - .filter(|chunk| { - if chunk.era > current_era { - true - } else { - total = total.saturating_sub(chunk.value); - false - } - }) - .collect::>() - .try_into() - .expect( - "filtering items from a bounded vec always leaves length less than bounds. qed", - ); - - Self { - stash: self.stash, - total, - active: self.active, - unlocking, - claimed_rewards: self.claimed_rewards, - } - } - - /// Re-bond funds that were scheduled for unlocking. - /// - /// Returns the updated ledger, and the amount actually rebonded. - fn rebond(mut self, value: BalanceOf) -> (Self, BalanceOf) { - let mut unlocking_balance = BalanceOf::::zero(); - - while let Some(last) = self.unlocking.last_mut() { - if unlocking_balance + last.value <= value { - unlocking_balance += last.value; - self.active += last.value; - self.unlocking.pop(); - } else { - let diff = value - unlocking_balance; - - unlocking_balance += diff; - self.active += diff; - last.value -= diff; - } - - if unlocking_balance >= value { - break; - } - } - - (self, unlocking_balance) - } - - /// Slash the staker for a given amount of balance. - /// - /// This implements a proportional slashing system, whereby we set our preference to slash as - /// such: - /// - /// - If any unlocking chunks exist that are scheduled to be unlocked at `slash_era + - /// bonding_duration` and onwards, the slash is divided equally between the active ledger and - /// the unlocking chunks. - /// - If no such chunks exist, then only the active balance is slashed. - /// - /// Note that the above is only a *preference*. If for any reason the active ledger, with or - /// without some portion of the unlocking chunks that are more justified to be slashed are not - /// enough, then the slashing will continue and will consume as much of the active and unlocking - /// chunks as needed. - /// - /// This will never slash more than the given amount. If any of the chunks become dusted, the - /// last chunk is slashed slightly less to compensate. Returns the amount of funds actually - /// slashed. - /// - /// `slash_era` is the era in which the slash (which is being enacted now) actually happened. - /// - /// This calls `Config::OnStakerSlash::on_slash` with information as to how the slash was - /// applied. - pub fn slash( - &mut self, - slash_amount: BalanceOf, - minimum_balance: BalanceOf, - slash_era: EraIndex, - ) -> BalanceOf { - if slash_amount.is_zero() { - return Zero::zero(); - } - - use sp_runtime::PerThing as _; - use sp_staking::OnStakerSlash as _; - let mut remaining_slash = slash_amount; - let pre_slash_total = self.total; - - // for a `slash_era = x`, any chunk that is scheduled to be unlocked at era `x + 28` - // (assuming 28 is the bonding duration) onwards should be slashed. - let slashable_chunks_start = slash_era + T::BondingDuration::get(); - - // `Some(ratio)` if this is proportional, with `ratio`, `None` otherwise. In both cases, we - // slash first the active chunk, and then `slash_chunks_priority`. - let (maybe_proportional, slash_chunks_priority) = { - if let Some(first_slashable_index) = self - .unlocking - .iter() - .position(|c| c.era >= slashable_chunks_start) - { - // If there exists a chunk who's after the first_slashable_start, then this is a - // proportional slash, because we want to slash active and these chunks - // proportionally. - - // The indices of the first chunk after the slash up through the most recent chunk. - // (The most recent chunk is at greatest from this era) - let affected_indices = first_slashable_index..self.unlocking.len(); - let unbonding_affected_balance = - affected_indices - .clone() - .fold(BalanceOf::::zero(), |sum, i| { - if let Some(chunk) = self.unlocking.get(i).defensive() { - sum.saturating_add(chunk.value) - } else { - sum - } - }); - let affected_balance = self.active.saturating_add(unbonding_affected_balance); - let ratio = Perquintill::from_rational_with_rounding( - slash_amount, - affected_balance, - Rounding::Up, - ) - .unwrap_or_else(|_| Perquintill::one()); - ( - Some(ratio), - affected_indices - .chain((0..first_slashable_index).rev()) - .collect::>(), - ) - } else { - // We just slash from the last chunk to the most recent one, if need be. - (None, (0..self.unlocking.len()).rev().collect::>()) - } - }; - - // Helper to update `target` and the ledgers total after accounting for slashing `target`. - log!( - debug, - "slashing {:?} for era {:?} out of {:?}, priority: {:?}, proportional = {:?}", - slash_amount, - slash_era, - self, - slash_chunks_priority, - maybe_proportional, - ); - - let mut slash_out_of = |target: &mut BalanceOf, slash_remaining: &mut BalanceOf| { - let mut slash_from_target = if let Some(ratio) = maybe_proportional { - ratio.mul_ceil(*target) - } else { - *slash_remaining - } - // this is the total that that the slash target has. We can't slash more than - // this anyhow! - .min(*target) - // this is the total amount that we would have wanted to slash - // non-proportionally, a proportional slash should never exceed this either! - .min(*slash_remaining); - - // slash out from *target exactly `slash_from_target`. - *target = *target - slash_from_target; - if *target < minimum_balance { - // Slash the rest of the target if it's dust. This might cause the last chunk to be - // slightly under-slashed, by at most `MaxUnlockingChunks * ED`, which is not a big - // deal. - slash_from_target = - sp_std::mem::replace(target, Zero::zero()).saturating_add(slash_from_target) - } - - self.total = self.total.saturating_sub(slash_from_target); - *slash_remaining = slash_remaining.saturating_sub(slash_from_target); - }; - - // If this is *not* a proportional slash, the active will always wiped to 0. - slash_out_of(&mut self.active, &mut remaining_slash); - - let mut slashed_unlocking = BTreeMap::<_, _>::new(); - for i in slash_chunks_priority { - if remaining_slash.is_zero() { - break; - } - - if let Some(chunk) = self.unlocking.get_mut(i).defensive() { - slash_out_of(&mut chunk.value, &mut remaining_slash); - // write the new slashed value of this chunk to the map. - slashed_unlocking.insert(chunk.era, chunk.value); - } else { - break; - } - } - - // clean unlocking chunks that are set to zero. - self.unlocking.retain(|c| !c.value.is_zero()); - - T::OnStakerSlash::on_slash(&self.stash, self.active, &slashed_unlocking); - pre_slash_total.saturating_sub(self.total) - } -} - -/// A record of the nominations made by a specific account. -#[derive( - PartialEqNoBound, - EqNoBound, - Clone, - Encode, - Decode, - RuntimeDebugNoBound, - TypeInfo, - MaxEncodedLen -)] -#[codec(mel_bound())] -#[scale_info(skip_type_params(T))] -pub struct Nominations { - /// The targets of nomination. - pub targets: BoundedVec, - /// The era the nominations were submitted. - /// - /// Except for initial nominations which are considered submitted at era 0. - pub submitted_in: EraIndex, - /// Whether the nominations have been suppressed. This can happen due to slashing of the - /// validators, or other events that might invalidate the nomination. - /// - /// NOTE: this for future proofing and is thus far not used. - pub suppressed: bool, -} - -/// The amount of exposure (to slashing) than an individual nominator has. -#[derive( - PartialEq, - Eq, - PartialOrd, - Ord, - Clone, - Encode, - Decode, - RuntimeDebug, - TypeInfo -)] -pub struct IndividualExposure { - /// The stash account of the nominator in question. - pub who: AccountId, - /// Amount of funds exposed. - #[codec(compact)] - pub value: Balance, -} - -/// A snapshot of the stake backing a single validator in the system. -#[derive( - PartialEq, - Eq, - PartialOrd, - Ord, - Clone, - Encode, - Decode, - RuntimeDebug, - TypeInfo -)] -pub struct Exposure { - /// The total balance backing this validator. - #[codec(compact)] - pub total: Balance, - /// The validator's own stash that is exposed. - #[codec(compact)] - pub own: Balance, - /// The portions of nominators stashes that are exposed. - pub others: Vec>, -} - -impl Default for Exposure { - fn default() -> Self { - Self { - total: Default::default(), - own: Default::default(), - others: vec![], - } - } -} - -/// A pending slash record. The value of the slash has been computed but not applied yet, -/// rather deferred for several eras. -#[derive(Encode, Decode, RuntimeDebug, TypeInfo)] -pub struct UnappliedSlash { - /// The stash ID of the offending validator. - pub validator: AccountId, - /// The validator's own slash. - pub own: Balance, - /// All other slashed stakers and amounts. - pub others: Vec<(AccountId, Balance)>, - /// Reporters of the offence; bounty payout recipients. - pub reporters: Vec, - /// The amount of payout. - pub payout: Balance, -} - -impl UnappliedSlash { - /// Initializes the default object using the given `validator`. - pub fn default_from(validator: AccountId) -> Self { - Self { - validator, - own: Zero::zero(), - others: vec![], - reporters: vec![], - payout: Zero::zero(), - } - } -} - -/// Means for interacting with a specialized version of the `session` trait. -/// -/// This is needed because `Staking` sets the `ValidatorIdOf` of the `pallet_session::Config` -pub trait SessionInterface { - /// Disable the validator at the given index, returns `false` if the validator was already - /// disabled or the index is out of bounds. - fn disable_validator(validator_index: u32) -> bool; - /// Get the validators from session. - fn validators() -> Vec; - /// Prune historical session tries up to but not including the given index. - fn prune_historical_up_to(up_to: SessionIndex); -} - -impl SessionInterface<::AccountId> for T -where - T: pallet_session::Config::AccountId>, - T: pallet_session::historical::Config< - FullIdentification = Exposure<::AccountId, BalanceOf>, - FullIdentificationOf = ExposureOf, - >, - T::SessionHandler: pallet_session::SessionHandler<::AccountId>, - T::SessionManager: pallet_session::SessionManager<::AccountId>, - T::ValidatorIdOf: Convert< - ::AccountId, - Option<::AccountId>, - >, -{ - fn disable_validator(validator_index: u32) -> bool { - >::disable_index(validator_index) - } - - fn validators() -> Vec<::AccountId> { - >::validators() - } - - fn prune_historical_up_to(up_to: SessionIndex) { - >::prune_up_to(up_to); - } -} - -impl SessionInterface for () { - fn disable_validator(_: u32) -> bool { - true - } - fn validators() -> Vec { - Vec::new() - } - fn prune_historical_up_to(_: SessionIndex) { - () - } -} - -/// Handler for determining how much of a balance should be paid out on the current era. -pub trait EraPayout { - /// Determine the payout for this era. - /// - /// Returns the amount to be paid to stakers in this era, as well as whatever else should be - /// paid out ("the rest"). - fn era_payout( - total_staked: Balance, - total_issuance: Balance, - era_duration_millis: u64, - ) -> (Balance, Balance); -} - -impl EraPayout for () { - fn era_payout( - _total_staked: Balance, - _total_issuance: Balance, - _era_duration_millis: u64, - ) -> (Balance, Balance) { - (Default::default(), Default::default()) - } -} - -/// Adaptor to turn a `PiecewiseLinear` curve definition into an `EraPayout` impl, used for -/// backwards compatibility. -pub struct ConvertCurve(sp_std::marker::PhantomData<(T, C)>); - -impl< - Balance: AtLeast32BitUnsigned + Clone, - T: Config, - C: Get<&'static PiecewiseLinear<'static>>, - > EraPayout for ConvertCurve -{ - fn era_payout( - total_staked: Balance, - total_issuance: Balance, - era_duration_millis: u64, - ) -> (Balance, Balance) { - let (validator_payout, max_payout) = inflation::compute_total_payout( - C::get(), - total_staked, - total_issuance, - // Duration of era; more than u64::MAX is rewarded as u64::MAX. - era_duration_millis, - T::MaxVariableInflationTotalIssuance::get(), - T::FixedYearlyReward::get(), - ); - let rest = max_payout.saturating_sub(validator_payout.clone()); - (validator_payout, rest) - } -} - -/// Mode of era-forcing. -#[derive( - Copy, - Clone, - PartialEq, - Eq, - Encode, - Decode, - RuntimeDebug, - TypeInfo, - MaxEncodedLen -)] -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -pub enum Forcing { - /// Not forcing anything - just let whatever happen. - NotForcing, - /// Force a new era, then reset to `NotForcing` as soon as it is done. - /// Note that this will force to trigger an election until a new era is triggered, if the - /// election failed, the next session end will trigger a new election again, until success. - ForceNew, - /// Avoid a new era indefinitely. - ForceNone, - /// Force a new era at the end of all sessions indefinitely. - ForceAlways, -} - -impl Default for Forcing { - fn default() -> Self { - Forcing::NotForcing - } -} - -/// A `Convert` implementation that finds the stash of the given controller account, -/// if any. -pub struct StashOf(sp_std::marker::PhantomData); - -impl Convert> for StashOf { - fn convert(controller: T::AccountId) -> Option { - >::ledger(&controller).map(|l| l.stash) - } -} - -/// A typed conversion from stash account ID to the active exposure of nominators -/// on that account. -/// -/// Active exposure is the exposure of the validator set currently validating, i.e. in -/// `active_era`. It can differ from the latest planned exposure in `current_era`. -pub struct ExposureOf(sp_std::marker::PhantomData); - -impl Convert>>> - for ExposureOf -{ - fn convert(validator: T::AccountId) -> Option>> { - >::active_era() - .map(|active_era| >::eras_stakers(active_era.index, &validator)) - } -} - -/// Filter historical offences out and only allow those from the bonding period. -pub struct FilterHistoricalOffences { - _inner: sp_std::marker::PhantomData<(T, R)>, -} - -impl ReportOffence - for FilterHistoricalOffences, R> -where - T: Config, - R: ReportOffence, - O: Offence, -{ - fn report_offence(reporters: Vec, offence: O) -> Result<(), OffenceError> { - // Disallow any slashing from before the current bonding period. - let offence_session = offence.session_index(); - let bonded_eras = BondedEras::::get(); - - if bonded_eras - .first() - .filter(|(_, start)| offence_session >= *start) - .is_some() - { - R::report_offence(reporters, offence) - } else { - >::deposit_event(Event::::OldSlashingReportDiscarded { - session_index: offence_session, - }); - Ok(()) - } - } - - fn is_known_offence(offenders: &[Offender], time_slot: &O::TimeSlot) -> bool { - R::is_known_offence(offenders, time_slot) - } -} - -pub struct OnStakerSlashMock(core::marker::PhantomData); - -impl sp_staking::OnStakerSlash - for OnStakerSlashMock -{ - fn on_slash( - _pool_account: &T::AccountId, - _slashed_bonded: T::CurrencyBalance, - _slashed_chunks: &BTreeMap, - ) { - } -} - -/// Configurations of the benchmarking of the pallet. -pub trait BenchmarkingConfig { - /// The maximum number of validators to use. - type MaxValidators: Get; - /// The maximum number of nominators to use. - type MaxNominators: Get; -} - -/// A mock benchmarking config for pallet-staking. -/// -/// Should only be used for testing. -pub struct SampleBenchmarkingConfig; - -impl BenchmarkingConfig for SampleBenchmarkingConfig { - type MaxValidators = frame_support::traits::ConstU32<100>; - type MaxNominators = frame_support::traits::ConstU32<100>; -} diff --git a/pallets/staking/src/pallet/impls.rs b/pallets/staking/src/pallet/impls.rs deleted file mode 100644 index b35ee14724..0000000000 --- a/pallets/staking/src/pallet/impls.rs +++ /dev/null @@ -1,2004 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Implementations for the Staking FRAME Pallet. - -use frame_election_provider_support::{ - data_provider, BoundedSupportsOf, ElectionDataProvider, ElectionProvider, ScoreProvider, - SortedListProvider, VoteWeight, VoterOf, -}; -use frame_support::{ - dispatch::WithPostDispatchInfo, - pallet_prelude::*, - traits::{ - Currency, CurrencyToVote, Defensive, DefensiveResult, EstimateNextNewSession, Get, - Imbalance, LockableCurrency, OnUnbalanced, TryCollect, UnixTime, WithdrawReasons, - }, - weights::Weight, -}; -use frame_system::{pallet_prelude::BlockNumberFor, RawOrigin}; -use pallet_session::historical; -use sp_runtime::{ - traits::{Bounded, Convert, One, SaturatedConversion, Saturating, StaticLookup, Zero}, - Perbill, -}; -use sp_staking::{ - offence::{DisableStrategy, OffenceDetails, OnOffenceHandler}, - EraIndex, SessionIndex, Stake, StakingInterface, -}; -use sp_std::prelude::*; - -use crate::{ - log, slashing, weights::WeightInfo, ActiveEraInfo, BalanceOf, EraPayout, Exposure, ExposureOf, - Forcing, IndividualExposure, MaxWinnersOf, Nominations, PositiveImbalanceOf, RewardDestination, - SessionInterface, StakingLedger, ValidatorPrefs, -}; - -use super::{pallet::*, STAKING_ID}; - -// Polymesh change -// ----------------------------------------------------------------- - -use frame_support::traits::DefensiveSaturating; - -use polymesh_primitives::traits::IdentityFnTrait; - -use crate::types::PermissionedStaking; -use crate::UnlockChunk; -// ----------------------------------------------------------------- - -/// The maximum number of iterations that we do whilst iterating over `T::VoterList` in -/// `get_npos_voters`. -/// -/// In most cases, if we want n items, we iterate exactly n times. In rare cases, if a voter is -/// invalid (for any reason) the iteration continues. With this constant, we iterate at most 2 * n -/// times and then give up. -const NPOS_MAX_ITERATIONS_COEFFICIENT: u32 = 2; - -impl Pallet { - /// The total balance that can be slashed from a stash account as of right now. - pub fn slashable_balance_of(stash: &T::AccountId) -> BalanceOf { - // Weight note: consider making the stake accessible through stash. - Self::bonded(stash) - .and_then(Self::ledger) - .map(|l| l.active) - .unwrap_or_default() - } - - /// Internal impl of [`Self::slashable_balance_of`] that returns [`VoteWeight`]. - pub fn slashable_balance_of_vote_weight( - stash: &T::AccountId, - issuance: BalanceOf, - ) -> VoteWeight { - T::CurrencyToVote::to_vote(Self::slashable_balance_of(stash), issuance) - } - - /// Returns a closure around `slashable_balance_of_vote_weight` that can be passed around. - /// - /// This prevents call sites from repeatedly requesting `total_issuance` from backend. But it is - /// important to be only used while the total issuance is not changing. - pub fn weight_of_fn() -> Box VoteWeight> { - // NOTE: changing this to unboxed `impl Fn(..)` return type and the pallet will still - // compile, while some types in mock fail to resolve. - let issuance = T::Currency::total_issuance(); - Box::new(move |who: &T::AccountId| -> VoteWeight { - Self::slashable_balance_of_vote_weight(who, issuance) - }) - } - - /// Same as `weight_of_fn`, but made for one time use. - pub fn weight_of(who: &T::AccountId) -> VoteWeight { - let issuance = T::Currency::total_issuance(); - Self::slashable_balance_of_vote_weight(who, issuance) - } - - pub(super) fn do_withdraw_unbonded( - controller: &T::AccountId, - num_slashing_spans: u32, - ) -> Result { - let mut ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; - let (stash, old_total) = (ledger.stash.clone(), ledger.total); - if let Some(current_era) = Self::current_era() { - ledger = ledger.consolidate_unlocked(current_era) - } - - // Polymesh change: - // use T::Permissioned::reapable(amount) - let used_weight = if ledger.unlocking.is_empty() && T::Permissioned::reapable(ledger.active) - { - // This account must have called `unbond()` with some value that caused the active - // portion to fall below existential deposit + will have no more unlocking chunks - // left. We can now safely remove all staking-related information. - Self::kill_stash(&stash, num_slashing_spans)?; - // Remove the lock. - T::Currency::remove_lock(STAKING_ID, &stash); - - ::WeightInfo::withdraw_unbonded_kill(num_slashing_spans) - } else { - // This was the consequence of a partial unbond. just update the ledger and move on. - Self::update_ledger(&controller, &ledger); - - // This is only an update, so we use less overall weight. - ::WeightInfo::withdraw_unbonded_update(num_slashing_spans) - }; - - // `old_total` should never be less than the new total because - // `consolidate_unlocked` strictly subtracts balance. - if ledger.total < old_total { - // Already checked that this won't overflow by entry condition. - let value = old_total - ledger.total; - Self::deposit_event(Event::::Withdrawn { - stash, - amount: value, - }); - } - - Ok(used_weight) - } - - pub fn do_payout_stakers( - validator_stash: T::AccountId, - era: EraIndex, - ) -> DispatchResultWithPostInfo { - // Validate input data - let current_era = CurrentEra::::get().ok_or_else(|| { - Error::::InvalidEraToReward - .with_weight(::WeightInfo::payout_stakers_alive_staked(0)) - })?; - let history_depth = T::HistoryDepth::get(); - ensure!( - era <= current_era && era >= current_era.saturating_sub(history_depth), - Error::::InvalidEraToReward - .with_weight(::WeightInfo::payout_stakers_alive_staked(0)) - ); - - // Note: if era has no reward to be claimed, era may be future. better not to update - // `ledger.claimed_rewards` in this case. - let era_payout = >::get(&era).ok_or_else(|| { - Error::::InvalidEraToReward - .with_weight(::WeightInfo::payout_stakers_alive_staked(0)) - })?; - - let controller = Self::bonded(&validator_stash).ok_or_else(|| { - Error::::NotStash - .with_weight(::WeightInfo::payout_stakers_alive_staked(0)) - })?; - let mut ledger = >::get(&controller).ok_or(Error::::NotController)?; - - ledger - .claimed_rewards - .retain(|&x| x >= current_era.saturating_sub(history_depth)); - - match ledger.claimed_rewards.binary_search(&era) { - Ok(_) => { - return Err(Error::::AlreadyClaimed - .with_weight(::WeightInfo::payout_stakers_alive_staked(0))) - } - Err(pos) => ledger - .claimed_rewards - .try_insert(pos, era) - // Since we retain era entries in `claimed_rewards` only upto - // `HistoryDepth`, following bound is always expected to be - // satisfied. - .defensive_map_err(|_| Error::::BoundNotMet)?, - } - - let exposure = >::get(&era, &ledger.stash); - - // Input data seems good, no errors allowed after this point - - >::insert(&controller, &ledger); - - // Get Era reward points. It has TOTAL and INDIVIDUAL - // Find the fraction of the era reward that belongs to the validator - // Take that fraction of the eras rewards to split to nominator and validator - // - // Then look at the validator, figure out the proportion of their reward - // which goes to them and each of their nominators. - - let era_reward_points = >::get(&era); - let total_reward_points = era_reward_points.total; - let validator_reward_points = era_reward_points - .individual - .get(&ledger.stash) - .copied() - .unwrap_or_else(Zero::zero); - - // Nothing to do if they have no reward points. - if validator_reward_points.is_zero() { - return Ok(Some(::WeightInfo::payout_stakers_alive_staked(0)).into()); - } - - // This is the fraction of the total reward that the validator and the - // nominators will get. - let validator_total_reward_part = - Perbill::from_rational(validator_reward_points, total_reward_points); - - // This is how much validator + nominators are entitled to. - let validator_total_payout = validator_total_reward_part * era_payout; - - let validator_prefs = Self::eras_validator_prefs(&era, &validator_stash); - // Validator first gets a cut off the top. - let validator_commission = validator_prefs.commission; - let validator_commission_payout = validator_commission * validator_total_payout; - - let validator_leftover_payout = validator_total_payout - validator_commission_payout; - // Now let's calculate how this is split to the validator. - let validator_exposure_part = Perbill::from_rational(exposure.own, exposure.total); - let validator_staking_payout = validator_exposure_part * validator_leftover_payout; - - Self::deposit_event(Event::::PayoutStarted { - era_index: era, - validator_stash: ledger.stash.clone(), - }); - - let mut total_imbalance = PositiveImbalanceOf::::zero(); - // We can now make total validator payout: - if let Some(imbalance) = Self::make_payout( - &ledger.stash, - validator_staking_payout + validator_commission_payout, - ) { - // Polymesh change - // ----------------------------------------------------------------- - let stash_did = - pallet_identity::Pallet::::get_identity(&ledger.stash).unwrap_or_default(); - // ----------------------------------------------------------------- - Self::deposit_event(Event::::Rewarded { - identity: stash_did, - stash: ledger.stash, - amount: imbalance.peek(), - }); - total_imbalance.subsume(imbalance); - } - - // Track the number of payout ops to nominators. Note: - // `WeightInfo::payout_stakers_alive_staked` always assumes at least a validator is paid - // out, so we do not need to count their payout op. - let mut nominator_payout_count: u32 = 0; - - // Lets now calculate how this is split to the nominators. - // Reward only the clipped exposures. Note this is not necessarily sorted. - for nominator in exposure.others.iter() { - let nominator_exposure_part = Perbill::from_rational(nominator.value, exposure.total); - - let nominator_reward: BalanceOf = - nominator_exposure_part * validator_leftover_payout; - // We can now make nominator payout: - if let Some(imbalance) = Self::make_payout(&nominator.who, nominator_reward) { - // Note: this logic does not count payouts for `RewardDestination::None`. - nominator_payout_count += 1; - // Polymesh change - // ----------------------------------------------------------------- - let nominator_did = - pallet_identity::Pallet::::get_identity(&nominator.who).unwrap_or_default(); - // ----------------------------------------------------------------- - let e = Event::::Rewarded { - identity: nominator_did, - stash: nominator.who.clone(), - amount: imbalance.peek(), - }; - Self::deposit_event(e); - total_imbalance.subsume(imbalance); - } - } - - T::Reward::on_unbalanced(total_imbalance); - debug_assert!(nominator_payout_count <= T::MaxNominatorRewardedPerValidator::get()); - Ok(Some(::WeightInfo::payout_stakers_alive_staked( - nominator_payout_count, - )) - .into()) - } - - /// Update the ledger for a controller. - /// - /// This will also update the stash lock. - pub fn update_ledger(controller: &T::AccountId, ledger: &StakingLedger) { - T::Currency::set_lock( - STAKING_ID, - &ledger.stash, - ledger.total, - WithdrawReasons::all(), - ); - >::insert(controller, ledger); - } - - /// Chill a stash account. - pub fn chill_stash(stash: &T::AccountId) { - // Polymesh change - // ----------------------------------------------------------------- - T::Permissioned::on_chill(stash); - // ----------------------------------------------------------------- - let chilled_as_validator = Self::do_remove_validator(stash); - let chilled_as_nominator = Self::do_remove_nominator(stash); - if chilled_as_validator || chilled_as_nominator { - Self::deposit_event(Event::::Chilled { - stash: stash.clone(), - }); - } - } - - /// Actually make a payment to a staker. This uses the currency's reward function - /// to pay the right payee for the given staker account. - fn make_payout(stash: &T::AccountId, amount: BalanceOf) -> Option> { - let dest = Self::payee(stash); - match dest { - RewardDestination::Controller => Self::bonded(stash) - .map(|controller| T::Currency::deposit_creating(&controller, amount)), - RewardDestination::Stash => T::Currency::deposit_into_existing(stash, amount).ok(), - RewardDestination::Staked => Self::bonded(stash) - .and_then(|c| Self::ledger(&c).map(|l| (c, l))) - .and_then(|(controller, mut l)| { - l.active += amount; - l.total += amount; - let r = T::Currency::deposit_into_existing(stash, amount).ok(); - Self::update_ledger(&controller, &l); - r - }), - RewardDestination::Account(dest_account) => { - Some(T::Currency::deposit_creating(&dest_account, amount)) - } - RewardDestination::None => None, - } - } - - /// Plan a new session potentially trigger a new era. - fn new_session( - session_index: SessionIndex, - is_genesis: bool, - ) -> Option>> { - if let Some(current_era) = Self::current_era() { - // Initial era has been set. - let current_era_start_session_index = Self::eras_start_session_index(current_era) - .unwrap_or_else(|| { - frame_support::print("Error: start_session_index must be set for current_era"); - 0 - }); - - let era_length = session_index.saturating_sub(current_era_start_session_index); // Must never happen. - - match ForceEra::::get() { - // Will be set to `NotForcing` again if a new era has been triggered. - Forcing::ForceNew => (), - // Short circuit to `try_trigger_new_era`. - Forcing::ForceAlways => (), - // Only go to `try_trigger_new_era` if deadline reached. - Forcing::NotForcing if era_length >= T::SessionsPerEra::get() => (), - _ => { - // Either `Forcing::ForceNone`, - // or `Forcing::NotForcing if era_length >= T::SessionsPerEra::get()`. - return None; - } - } - - // New era. - let maybe_new_era_validators = Self::try_trigger_new_era(session_index, is_genesis); - if maybe_new_era_validators.is_some() - && matches!(ForceEra::::get(), Forcing::ForceNew) - { - Self::set_force_era(Forcing::NotForcing); - } - - maybe_new_era_validators - } else { - // Set initial era. - log!(debug, "Starting the first era."); - Self::try_trigger_new_era(session_index, is_genesis) - } - } - - /// Start a session potentially starting an era. - fn start_session(start_session: SessionIndex) { - let next_active_era = Self::active_era().map(|e| e.index + 1).unwrap_or(0); - // This is only `Some` when current era has already progressed to the next era, while the - // active era is one behind (i.e. in the *last session of the active era*, or *first session - // of the new current era*, depending on how you look at it). - if let Some(next_active_era_start_session_index) = - Self::eras_start_session_index(next_active_era) - { - if next_active_era_start_session_index == start_session { - Self::start_era(start_session); - } else if next_active_era_start_session_index < start_session { - // This arm should never happen, but better handle it than to stall the staking - // pallet. - frame_support::print("Warning: A session appears to have been skipped."); - Self::start_era(start_session); - } - } - - // disable all offending validators that have been disabled for the whole era - for (index, disabled) in >::get() { - if disabled { - T::SessionInterface::disable_validator(index); - } - } - } - - /// End a session potentially ending an era. - fn end_session(session_index: SessionIndex) { - if let Some(active_era) = Self::active_era() { - if let Some(next_active_era_start_session_index) = - Self::eras_start_session_index(active_era.index + 1) - { - if next_active_era_start_session_index == session_index + 1 { - Self::end_era(active_era, session_index); - } - } - } - } - - /// Start a new era. It does: - /// - /// * Increment `active_era.index`, - /// * reset `active_era.start`, - /// * update `BondedEras` and apply slashes. - fn start_era(start_session: SessionIndex) { - let active_era = ActiveEra::::mutate(|active_era| { - let new_index = active_era.as_ref().map(|info| info.index + 1).unwrap_or(0); - *active_era = Some(ActiveEraInfo { - index: new_index, - // Set new active era start in next `on_finalize`. To guarantee usage of `Time` - start: None, - }); - new_index - }); - - let bonding_duration = T::BondingDuration::get(); - - BondedEras::::mutate(|bonded| { - bonded.push((active_era, start_session)); - - if active_era > bonding_duration { - let first_kept = active_era - bonding_duration; - - // Prune out everything that's from before the first-kept index. - let n_to_prune = bonded - .iter() - .take_while(|&&(era_idx, _)| era_idx < first_kept) - .count(); - - // Kill slashing metadata. - for (pruned_era, _) in bonded.drain(..n_to_prune) { - slashing::clear_era_metadata::(pruned_era); - } - - if let Some(&(_, first_session)) = bonded.first() { - T::SessionInterface::prune_historical_up_to(first_session); - } - } - }); - - Self::apply_unapplied_slashes(active_era); - } - - /// Compute payout for era. - fn end_era(active_era: ActiveEraInfo, _session_index: SessionIndex) { - // Note: active_era_start can be None if end era is called during genesis config. - if let Some(active_era_start) = active_era.start { - let now_as_millis_u64 = T::UnixTime::now().as_millis().saturated_into::(); - - let era_duration = (now_as_millis_u64 - active_era_start).saturated_into::(); - let staked = Self::eras_total_stake(&active_era.index); - let issuance = T::Currency::total_issuance(); - let (validator_payout, remainder) = - T::EraPayout::era_payout(staked, issuance, era_duration); - - // Polymesh change - // ----------------------------------------------------------------- - // Schedule rewards - T::Permissioned::schedule_payouts(&active_era); - // ----------------------------------------------------------------- - - Self::deposit_event(Event::::EraPaid { - era_index: active_era.index, - validator_payout, - remainder, - }); - - // Set ending era reward. - >::insert(&active_era.index, validator_payout); - T::RewardRemainder::on_unbalanced(T::Currency::issue(remainder)); - - // Clear offending validators. - >::kill(); - } - } - - /// Plan a new era. - /// - /// * Bump the current era storage (which holds the latest planned era). - /// * Store start session index for the new planned era. - /// * Clean old era information. - /// * Store staking information for the new planned era - /// - /// Returns the new validator set. - pub fn trigger_new_era( - start_session_index: SessionIndex, - exposures: BoundedVec< - (T::AccountId, Exposure>), - MaxWinnersOf, - >, - ) -> BoundedVec> { - // Increment or set current era. - let new_planned_era = CurrentEra::::mutate(|s| { - *s = Some(s.map(|s| s + 1).unwrap_or(0)); - s.unwrap() - }); - ErasStartSessionIndex::::insert(&new_planned_era, &start_session_index); - - // Clean old era information. - if let Some(old_era) = new_planned_era.checked_sub(T::HistoryDepth::get() + 1) { - Self::clear_era_information(old_era); - } - - // Set staking information for the new era. - Self::store_stakers_info(exposures, new_planned_era) - } - - /// Potentially plan a new era. - /// - /// Get election result from `T::ElectionProvider`. - /// In case election result has more than [`MinimumValidatorCount`] validator trigger a new era. - /// - /// In case a new era is planned, the new validator set is returned. - pub(crate) fn try_trigger_new_era( - start_session_index: SessionIndex, - is_genesis: bool, - ) -> Option>> { - let election_result: BoundedVec<_, MaxWinnersOf> = if is_genesis { - let result = ::elect().map_err(|e| { - log!(warn, "genesis election provider failed due to {:?}", e); - Self::deposit_event(Event::StakingElectionFailed); - }); - - result - .ok()? - .into_inner() - .try_into() - // both bounds checked in integrity test to be equal - .defensive_unwrap_or_default() - } else { - let result = ::elect().map_err(|e| { - log!(warn, "election provider failed due to {:?}", e); - Self::deposit_event(Event::StakingElectionFailed); - }); - result.ok()? - }; - - let exposures = Self::collect_exposures(election_result); - if (exposures.len() as u32) < Self::minimum_validator_count().max(1) { - // Session will panic if we ever return an empty validator set, thus max(1) ^^. - match CurrentEra::::get() { - Some(current_era) if current_era > 0 => log!( - warn, - "chain does not have enough staking candidates to operate for era {:?} ({} \ - elected, minimum is {})", - CurrentEra::::get().unwrap_or(0), - exposures.len(), - Self::minimum_validator_count(), - ), - None => { - // The initial era is allowed to have no exposures. - // In this case the SessionManager is expected to choose a sensible validator - // set. - // TODO: this should be simplified #8911 - CurrentEra::::put(0); - ErasStartSessionIndex::::insert(&0, &start_session_index); - } - _ => (), - } - - Self::deposit_event(Event::StakingElectionFailed); - return None; - } - - Self::deposit_event(Event::StakersElected); - Some(Self::trigger_new_era(start_session_index, exposures)) - } - - /// Process the output of the election. - /// - /// Store staking information for the new planned era - pub fn store_stakers_info( - exposures: BoundedVec< - (T::AccountId, Exposure>), - MaxWinnersOf, - >, - new_planned_era: EraIndex, - ) -> BoundedVec> { - let elected_stashes: BoundedVec<_, MaxWinnersOf> = exposures - .iter() - .cloned() - .map(|(x, _)| x) - .collect::>() - .try_into() - .expect("since we only map through exposures, size of elected_stashes is always same as exposures; qed"); - - // Populate stakers, exposures, and the snapshot of validator prefs. - let mut total_stake: BalanceOf = Zero::zero(); - exposures.into_iter().for_each(|(stash, exposure)| { - total_stake = total_stake.saturating_add(exposure.total); - >::insert(new_planned_era, &stash, &exposure); - - let mut exposure_clipped = exposure; - let clipped_max_len = T::MaxNominatorRewardedPerValidator::get() as usize; - if exposure_clipped.others.len() > clipped_max_len { - exposure_clipped - .others - .sort_by(|a, b| a.value.cmp(&b.value).reverse()); - exposure_clipped.others.truncate(clipped_max_len); - } - >::insert(&new_planned_era, &stash, exposure_clipped); - }); - - // Insert current era staking information - >::insert(&new_planned_era, total_stake); - - // Collect the pref of all winners. - for stash in &elected_stashes { - let pref = Self::validators(stash); - >::insert(&new_planned_era, stash, pref); - } - - if new_planned_era > 0 { - log!( - info, - "new validator set of size {:?} has been processed for era {:?}", - elected_stashes.len(), - new_planned_era, - ); - } - - elected_stashes - } - - /// Consume a set of [`BoundedSupports`] from [`sp_npos_elections`] and collect them into a - /// [`Exposure`]. - fn collect_exposures( - supports: BoundedSupportsOf, - ) -> BoundedVec<(T::AccountId, Exposure>), MaxWinnersOf> { - let total_issuance = T::Currency::total_issuance(); - let to_currency = |e: frame_election_provider_support::ExtendedBalance| { - T::CurrencyToVote::to_currency(e, total_issuance) - }; - - supports - .into_iter() - .map(|(validator, support)| { - // Build `struct exposure` from `support`. - let mut others = Vec::with_capacity(support.voters.len()); - let mut own: BalanceOf = Zero::zero(); - let mut total: BalanceOf = Zero::zero(); - support - .voters - .into_iter() - .map(|(nominator, weight)| (nominator, to_currency(weight))) - .for_each(|(nominator, stake)| { - if nominator == validator { - own = own.saturating_add(stake); - } else { - others.push(IndividualExposure { - who: nominator, - value: stake, - }); - } - total = total.saturating_add(stake); - }); - - let exposure = Exposure { own, others, total }; - (validator, exposure) - }) - .try_collect() - .expect("we only map through support vector which cannot change the size; qed") - } - - /// Remove all associated data of a stash account from the staking system. - /// - /// Assumes storage is upgraded before calling. - /// - /// This is called: - /// - after a `withdraw_unbonded()` call that frees all of a stash's bonded balance. - /// - through `reap_stash()` if the balance has fallen to zero (through slashing). - pub fn kill_stash(stash: &T::AccountId, num_slashing_spans: u32) -> DispatchResult { - let controller = >::get(stash).ok_or(Error::::NotStash)?; - - slashing::clear_stash_metadata::(stash, num_slashing_spans)?; - - >::remove(stash); - >::remove(&controller); - - >::remove(stash); - Self::do_remove_validator(stash); - Self::do_remove_nominator(stash); - - frame_system::Pallet::::dec_consumers(stash); - - Ok(()) - } - - /// Clear all era information for given era. - pub(crate) fn clear_era_information(era_index: EraIndex) { - #[allow(deprecated)] - >::remove_prefix(era_index, None); - #[allow(deprecated)] - >::remove_prefix(era_index, None); - #[allow(deprecated)] - >::remove_prefix(era_index, None); - >::remove(era_index); - >::remove(era_index); - >::remove(era_index); - ErasStartSessionIndex::::remove(era_index); - } - - /// Apply previously-unapplied slashes on the beginning of a new era, after a delay. - fn apply_unapplied_slashes(active_era: EraIndex) { - let era_slashes = ::UnappliedSlashes::take(&active_era); - log!( - debug, - "found {} slashes scheduled to be executed in era {:?}", - era_slashes.len(), - active_era, - ); - for slash in era_slashes { - let slash_era = active_era.saturating_sub(T::SlashDeferDuration::get()); - slashing::apply_slash::(slash, slash_era); - } - } - - /// Add reward points to validators using their stash account ID. - /// - /// Validators are keyed by stash account ID and must be in the current elected set. - /// - /// For each element in the iterator the given number of points in u32 is added to the - /// validator, thus duplicates are handled. - /// - /// At the end of the era each the total payout will be distributed among validator - /// relatively to their points. - /// - /// COMPLEXITY: Complexity is `number_of_validator_to_reward x current_elected_len`. - pub fn reward_by_ids(validators_points: impl IntoIterator) { - if let Some(active_era) = Self::active_era() { - >::mutate(active_era.index, |era_rewards| { - for (validator, points) in validators_points.into_iter() { - *era_rewards.individual.entry(validator).or_default() += points; - era_rewards.total += points; - } - }); - } - } - - /// Helper to set a new `ForceEra` mode. - pub fn set_force_era(mode: Forcing) { - log!(info, "Setting force era mode {:?}.", mode); - ForceEra::::put(mode); - Self::deposit_event(Event::::ForceEra { mode }); - } - - /// Ensures that at the end of the current session there will be a new era. - pub(crate) fn ensure_new_era() { - match ForceEra::::get() { - Forcing::ForceAlways | Forcing::ForceNew => (), - _ => Self::set_force_era(Forcing::ForceNew), - } - } - - #[cfg(feature = "runtime-benchmarks")] - pub fn add_era_stakers( - current_era: EraIndex, - stash: T::AccountId, - exposure: Exposure>, - ) { - >::insert(¤t_era, &stash, &exposure); - } - - #[cfg(feature = "runtime-benchmarks")] - pub fn set_slash_reward_fraction(fraction: Perbill) { - SlashRewardFraction::::put(fraction); - } - - /// Get all of the voters that are eligible for the npos election. - /// - /// `maybe_max_len` can imposes a cap on the number of voters returned; - /// - /// Sets `MinimumActiveStake` to the minimum active nominator stake in the returned set of - /// nominators. - /// - /// This function is self-weighing as [`DispatchClass::Mandatory`]. - pub fn get_npos_voters(maybe_max_len: Option) -> Vec> { - let max_allowed_len = { - let all_voter_count = T::VoterList::count() as usize; - maybe_max_len - .unwrap_or(all_voter_count) - .min(all_voter_count) - }; - - let mut all_voters = Vec::<_>::with_capacity(max_allowed_len); - - // cache a few things. - let weight_of = Self::weight_of_fn(); - - let mut voters_seen = 0u32; - let mut validators_seen = 0u32; - let mut nominators_seen = 0u32; - let mut min_active_stake = u64::MAX; - - let mut sorted_voters = T::VoterList::iter(); - while all_voters.len() < max_allowed_len - && voters_seen < (NPOS_MAX_ITERATIONS_COEFFICIENT * max_allowed_len as u32) - { - let voter = match sorted_voters.next() { - Some(voter) => { - voters_seen.saturating_inc(); - voter - } - None => break, - }; - - if let Some(Nominations { targets, .. }) = >::get(&voter) { - nominators_seen.saturating_inc(); - - let voter_weight = weight_of(&voter); - if !targets.is_empty() { - all_voters.push((voter.clone(), voter_weight, targets)); - } - min_active_stake = { - if voter_weight < min_active_stake { - voter_weight - } else { - min_active_stake - } - }; - } else if Validators::::contains_key(&voter) { - validators_seen.saturating_inc(); - // Polymesh change: check if the validator is compliant - if T::Permissioned::is_validator_compliant(&voter) { - // if this voter is a validator: - let self_vote = ( - voter.clone(), - weight_of(&voter), - vec![voter.clone()] - .try_into() - .expect("`MaxVotesPerVoter` must be greater than or equal to 1"), - ); - all_voters.push(self_vote); - } - } else { - // this can only happen if: 1. there a bug in the bags-list (or whatever is the - // sorted list) logic and the state of the two pallets is no longer compatible, or - // because the nominators is not decodable since they have more nomination than - // `T::MaxNominations`. The latter can rarely happen, and is not really an emergency - // or bug if it does. - log!( - warn, - "DEFENSIVE: invalid item in `VoterList`: {:?}, this nominator probably has too many nominations now", - voter - ); - } - } - - // all_voters should have not re-allocated. - debug_assert!(all_voters.capacity() == max_allowed_len); - - Self::register_weight(::WeightInfo::get_npos_voters( - validators_seen, - nominators_seen, - )); - - let min_active_stake: T::CurrencyBalance = if all_voters.len() == 0 { - 0u64.into() - } else { - min_active_stake.into() - }; - - MinimumActiveStake::::put(min_active_stake); - - log!( - info, - "generated {} npos voters, {} from validators and {} nominators", - all_voters.len(), - validators_seen, - nominators_seen - ); - - all_voters - } - - /// Get the targets for an upcoming npos election. - /// - /// This function is self-weighing as [`DispatchClass::Mandatory`]. - pub fn get_npos_targets(maybe_max_len: Option) -> Vec { - let max_allowed_len = maybe_max_len.unwrap_or_else(|| T::TargetList::count() as usize); - let mut all_targets = Vec::::with_capacity(max_allowed_len); - let mut targets_seen = 0; - let mut validators_seen = 0; - - let mut targets_iter = T::TargetList::iter(); - while all_targets.len() < max_allowed_len - && targets_seen < (NPOS_MAX_ITERATIONS_COEFFICIENT * max_allowed_len as u32) - { - let target = match targets_iter.next() { - Some(target) => { - targets_seen.saturating_inc(); - target - } - None => break, - }; - - if Validators::::contains_key(&target) { - validators_seen.saturating_inc(); - // Polymesh change: check if the validator is compliant - if T::Permissioned::is_validator_compliant(&target) { - all_targets.push(target); - } - } - } - - Self::register_weight(::WeightInfo::get_npos_targets(validators_seen)); - log!(info, "generated {} npos targets", all_targets.len()); - - all_targets - } - - /// This function will add a nominator to the `Nominators` storage map, - /// and `VoterList`. - /// - /// If the nominator already exists, their nominations will be updated. - /// - /// NOTE: you must ALWAYS use this function to add nominator or update their targets. Any access - /// to `Nominators` or `VoterList` outside of this function is almost certainly - /// wrong. - pub fn do_add_nominator(who: &T::AccountId, nominations: Nominations) { - if !Nominators::::contains_key(who) { - // maybe update sorted list. - let _ = T::VoterList::on_insert(who.clone(), Self::weight_of(who)) - .defensive_unwrap_or_default(); - } - Nominators::::insert(who, nominations); - - debug_assert_eq!( - Nominators::::count() + Validators::::count(), - T::VoterList::count() - ); - } - - /// This function will remove a nominator from the `Nominators` storage map, - /// and `VoterList`. - /// - /// Returns true if `who` was removed from `Nominators`, otherwise false. - /// - /// NOTE: you must ALWAYS use this function to remove a nominator from the system. Any access to - /// `Nominators` or `VoterList` outside of this function is almost certainly - /// wrong. - pub fn do_remove_nominator(who: &T::AccountId) -> bool { - let outcome = if Nominators::::contains_key(who) { - Nominators::::remove(who); - let _ = T::VoterList::on_remove(who).defensive(); - true - } else { - false - }; - - debug_assert_eq!( - Nominators::::count() + Validators::::count(), - T::VoterList::count() - ); - - outcome - } - - /// This function will add a validator to the `Validators` storage map. - /// - /// If the validator already exists, their preferences will be updated. - /// - /// NOTE: you must ALWAYS use this function to add a validator to the system. Any access to - /// `Validators` or `VoterList` outside of this function is almost certainly - /// wrong. - pub fn do_add_validator(who: &T::AccountId, prefs: ValidatorPrefs) { - if !Validators::::contains_key(who) { - // maybe update sorted list. - let _ = T::VoterList::on_insert(who.clone(), Self::weight_of(who)) - .defensive_unwrap_or_default(); - } - Validators::::insert(who, prefs); - - debug_assert_eq!( - Nominators::::count() + Validators::::count(), - T::VoterList::count() - ); - } - - /// This function will remove a validator from the `Validators` storage map. - /// - /// Returns true if `who` was removed from `Validators`, otherwise false. - /// - /// NOTE: you must ALWAYS use this function to remove a validator from the system. Any access to - /// `Validators` or `VoterList` outside of this function is almost certainly - /// wrong. - pub fn do_remove_validator(who: &T::AccountId) -> bool { - let outcome = if Validators::::contains_key(who) { - Validators::::remove(who); - let _ = T::VoterList::on_remove(who).defensive(); - true - } else { - false - }; - - debug_assert_eq!( - Nominators::::count() + Validators::::count(), - T::VoterList::count() - ); - - outcome - } - - /// Register some amount of weight directly with the system pallet. - /// - /// This is always mandatory weight. - fn register_weight(weight: Weight) { - >::register_extra_weight_unchecked( - weight, - DispatchClass::Mandatory, - ); - } - - pub fn unbond_balance( - controller_account: T::AccountId, - ledger: &mut StakingLedger, - value: BalanceOf, - ) -> DispatchResult { - let mut value = value.min(ledger.active); - - if !value.is_zero() { - ledger.active -= value; - - // Avoid there being a dust balance left in the staking system. - if ledger.active < T::Currency::minimum_balance() { - value += ledger.active; - ledger.active = Zero::zero(); - } - - let min_active_bond = if Nominators::::contains_key(&ledger.stash) { - MinNominatorBond::::get() - } else if Validators::::contains_key(&ledger.stash) { - MinValidatorBond::::get() - } else { - Zero::zero() - }; - - // Make sure that the user maintains enough active bond for their role. - // If a user runs into this error, they should chill first. - ensure!( - ledger.active >= min_active_bond, - Error::::InsufficientBond - ); - - // Note: in case there is no current era it is fine to bond one era more. - let era = Self::current_era().unwrap_or(0) + T::BondingDuration::get(); - if let Some(chunk) = ledger.unlocking.last_mut().filter(|chunk| chunk.era == era) { - // To keep the chunk count down, we only keep one chunk per era. Since - // `unlocking` is a FiFo queue, if a chunk exists for `era` we know that it will - // be the last one. - chunk.value = chunk.value.defensive_saturating_add(value) - } else { - ledger - .unlocking - .try_push(UnlockChunk { value, era }) - .map_err(|_| Error::::NoMoreChunks)?; - }; - // NOTE: ledger must be updated prior to calling `Self::weight_of`. - Self::update_ledger(&controller_account, &ledger); - - // update this staker in the sorted list, if they exist in it. - if T::VoterList::contains(&ledger.stash) { - let _ = T::VoterList::on_update(&ledger.stash, Self::weight_of(&ledger.stash)) - .defensive(); - } - - // Polymesh change - // ----------------------------------------------------------------- - let controller_did = - T::IdentityFn::get_identity(&controller_account).unwrap_or_default(); - Self::deposit_event(Event::::Unbonded { - identity: controller_did, - stash: ledger.stash.clone(), - amount: value, - }); - // ----------------------------------------------------------------- - } - - Ok(()) - } -} - -impl Pallet { - /// Returns the current nominations quota for nominators. - /// - /// Used by the runtime API. - /// Note: for now, this api runtime will always return value of `T::MaxNominations` and thus it - /// is redundant. However, with the upcoming changes in - /// , the nominations quota will change - /// depending on the nominators balance. We're introducing this runtime API now to prepare the - /// community to use it before rolling out PR#12970. - pub fn api_nominations_quota(_balance: BalanceOf) -> u32 { - T::MaxNominations::get() - } -} - -impl ElectionDataProvider for Pallet { - type AccountId = T::AccountId; - type BlockNumber = BlockNumberFor; - type MaxVotesPerVoter = T::MaxNominations; - - fn desired_targets() -> data_provider::Result { - Self::register_weight(T::DbWeight::get().reads(1)); - Ok(Self::validator_count()) - } - - fn electing_voters(maybe_max_len: Option) -> data_provider::Result>> { - // This can never fail -- if `maybe_max_len` is `Some(_)` we handle it. - let voters = Self::get_npos_voters(maybe_max_len); - debug_assert!(maybe_max_len.map_or(true, |max| voters.len() <= max)); - - Ok(voters) - } - - fn electable_targets(maybe_max_len: Option) -> data_provider::Result> { - let target_count = T::TargetList::count(); - - // We can't handle this case yet -- return an error. - if maybe_max_len.map_or(false, |max_len| target_count > max_len as u32) { - return Err("Target snapshot too big"); - } - - Ok(Self::get_npos_targets(None)) - } - - fn next_election_prediction(now: T::BlockNumber) -> T::BlockNumber { - let current_era = Self::current_era().unwrap_or(0); - let current_session = Self::current_planned_session(); - let current_era_start_session_index = - Self::eras_start_session_index(current_era).unwrap_or(0); - // Number of session in the current era or the maximum session per era if reached. - let era_progress = current_session - .saturating_sub(current_era_start_session_index) - .min(T::SessionsPerEra::get()); - - let until_this_session_end = T::NextNewSession::estimate_next_new_session(now) - .0 - .unwrap_or_default() - .saturating_sub(now); - - let session_length = T::NextNewSession::average_session_length(); - - let sessions_left: T::BlockNumber = match ForceEra::::get() { - Forcing::ForceNone => Bounded::max_value(), - Forcing::ForceNew | Forcing::ForceAlways => Zero::zero(), - Forcing::NotForcing if era_progress >= T::SessionsPerEra::get() => Zero::zero(), - Forcing::NotForcing => T::SessionsPerEra::get() - .saturating_sub(era_progress) - // One session is computed in this_session_end. - .saturating_sub(1) - .into(), - }; - - now.saturating_add( - until_this_session_end.saturating_add(sessions_left.saturating_mul(session_length)), - ) - } - - #[cfg(feature = "runtime-benchmarks")] - fn add_voter( - voter: T::AccountId, - weight: VoteWeight, - targets: BoundedVec, - ) { - let stake = >::try_from(weight).unwrap_or_else(|_| { - panic!("cannot convert a VoteWeight into BalanceOf, benchmark needs reconfiguring.") - }); - >::insert(voter.clone(), voter.clone()); - >::insert( - voter.clone(), - StakingLedger { - stash: voter.clone(), - active: stake, - total: stake, - unlocking: Default::default(), - claimed_rewards: Default::default(), - }, - ); - - Self::do_add_nominator( - &voter, - Nominations { - targets, - submitted_in: 0, - suppressed: false, - }, - ); - } - - #[cfg(feature = "runtime-benchmarks")] - fn add_target(target: T::AccountId) { - let stake = MinValidatorBond::::get() * 100u32.into(); - >::insert(target.clone(), target.clone()); - >::insert( - target.clone(), - StakingLedger { - stash: target.clone(), - active: stake, - total: stake, - unlocking: Default::default(), - claimed_rewards: Default::default(), - }, - ); - Self::do_add_validator( - &target, - ValidatorPrefs { - commission: Perbill::zero(), - blocked: false, - }, - ); - } - - #[cfg(feature = "runtime-benchmarks")] - fn clear() { - #[allow(deprecated)] - >::remove_all(None); - #[allow(deprecated)] - >::remove_all(None); - #[allow(deprecated)] - >::remove_all(); - #[allow(deprecated)] - >::remove_all(); - - T::VoterList::unsafe_clear(); - } - - #[cfg(feature = "runtime-benchmarks")] - fn put_snapshot( - voters: Vec>, - targets: Vec, - target_stake: Option, - ) { - targets.into_iter().for_each(|v| { - let stake: BalanceOf = target_stake - .and_then(|w| >::try_from(w).ok()) - .unwrap_or_else(|| MinNominatorBond::::get() * 100u32.into()); - >::insert(v.clone(), v.clone()); - >::insert( - v.clone(), - StakingLedger { - stash: v.clone(), - active: stake, - total: stake, - unlocking: Default::default(), - claimed_rewards: Default::default(), - }, - ); - Self::do_add_validator( - &v, - ValidatorPrefs { - commission: Perbill::zero(), - blocked: false, - }, - ); - }); - - voters.into_iter().for_each(|(v, s, t)| { - let stake = >::try_from(s).unwrap_or_else(|_| { - panic!("cannot convert a VoteWeight into BalanceOf, benchmark needs reconfiguring.") - }); - >::insert(v.clone(), v.clone()); - >::insert( - v.clone(), - StakingLedger { - stash: v.clone(), - active: stake, - total: stake, - unlocking: Default::default(), - claimed_rewards: Default::default(), - }, - ); - Self::do_add_nominator( - &v, - Nominations { - targets: t, - submitted_in: 0, - suppressed: false, - }, - ); - }); - } -} - -/// In this implementation `new_session(session)` must be called before `end_session(session-1)` -/// i.e. the new session must be planned before the ending of the previous session. -/// -/// Once the first new_session is planned, all session must start and then end in order, though -/// some session can lag in between the newest session planned and the latest session started. -impl pallet_session::SessionManager for Pallet { - fn new_session(new_index: SessionIndex) -> Option> { - log!(trace, "planning new session {}", new_index); - CurrentPlannedSession::::put(new_index); - Self::new_session(new_index, false).map(|v| v.into_inner()) - } - fn new_session_genesis(new_index: SessionIndex) -> Option> { - log!(trace, "planning new session {} at genesis", new_index); - CurrentPlannedSession::::put(new_index); - Self::new_session(new_index, true).map(|v| v.into_inner()) - } - fn start_session(start_index: SessionIndex) { - log!(trace, "starting session {}", start_index); - Self::start_session(start_index) - } - fn end_session(end_index: SessionIndex) { - log!(trace, "ending session {}", end_index); - Self::end_session(end_index) - } -} - -impl historical::SessionManager>> - for Pallet -{ - fn new_session( - new_index: SessionIndex, - ) -> Option>)>> { - >::new_session(new_index).map(|validators| { - let current_era = Self::current_era() - // Must be some as a new era has been created. - .unwrap_or(0); - - validators - .into_iter() - .map(|v| { - let exposure = Self::eras_stakers(current_era, &v); - (v, exposure) - }) - .collect() - }) - } - fn new_session_genesis( - new_index: SessionIndex, - ) -> Option>)>> { - >::new_session_genesis(new_index).map( - |validators| { - let current_era = Self::current_era() - // Must be some as a new era has been created. - .unwrap_or(0); - - validators - .into_iter() - .map(|v| { - let exposure = Self::eras_stakers(current_era, &v); - (v, exposure) - }) - .collect() - }, - ) - } - fn start_session(start_index: SessionIndex) { - >::start_session(start_index) - } - fn end_session(end_index: SessionIndex) { - >::end_session(end_index) - } -} - -/// Add reward points to block authors: -/// * 20 points to the block producer for producing a (non-uncle) block in the relay chain, -impl pallet_authorship::EventHandler for Pallet -where - T: Config + pallet_authorship::Config + pallet_session::Config, -{ - fn note_author(author: T::AccountId) { - Self::reward_by_ids(vec![(author, 20)]) - } -} - -/// This is intended to be used with `FilterHistoricalOffences`. -impl - OnOffenceHandler, Weight> - for Pallet -where - T: pallet_session::Config::AccountId>, - T: pallet_session::historical::Config< - FullIdentification = Exposure<::AccountId, BalanceOf>, - FullIdentificationOf = ExposureOf, - >, - T::SessionHandler: pallet_session::SessionHandler<::AccountId>, - T::SessionManager: pallet_session::SessionManager<::AccountId>, - T::ValidatorIdOf: Convert< - ::AccountId, - Option<::AccountId>, - >, -{ - fn on_offence( - offenders: &[OffenceDetails< - T::AccountId, - pallet_session::historical::IdentificationTuple, - >], - slash_fraction: &[Perbill], - slash_session: SessionIndex, - disable_strategy: DisableStrategy, - ) -> Weight { - // Polymesh change - // ----------------------------------------------------------------- - let slash_fraction_none = vec![Perbill::from_parts(0); slash_fraction.len()]; - let slash_fraction = if T::Permissioned::is_slashing_enabled() { - slash_fraction - } else { - slash_fraction_none.as_slice() - }; - // ----------------------------------------------------------------- - - let reward_proportion = SlashRewardFraction::::get(); - let mut consumed_weight = Weight::from_ref_time(0); - let mut add_db_reads_writes = |reads, writes| { - consumed_weight += T::DbWeight::get().reads_writes(reads, writes); - }; - - let active_era = { - let active_era = Self::active_era(); - add_db_reads_writes(1, 0); - if active_era.is_none() { - // This offence need not be re-submitted. - return consumed_weight; - } - active_era - .expect("value checked not to be `None`; qed") - .index - }; - let active_era_start_session_index = Self::eras_start_session_index(active_era) - .unwrap_or_else(|| { - frame_support::print("Error: start_session_index must be set for current_era"); - 0 - }); - add_db_reads_writes(1, 0); - - let window_start = active_era.saturating_sub(T::BondingDuration::get()); - - // Fast path for active-era report - most likely. - // `slash_session` cannot be in a future active era. It must be in `active_era` or before. - let slash_era = if slash_session >= active_era_start_session_index { - active_era - } else { - let eras = BondedEras::::get(); - add_db_reads_writes(1, 0); - - // Reverse because it's more likely to find reports from recent eras. - match eras - .iter() - .rev() - .find(|&&(_, ref sesh)| sesh <= &slash_session) - { - Some(&(ref slash_era, _)) => *slash_era, - // Before bonding period. defensive - should be filtered out. - None => return consumed_weight, - } - }; - - add_db_reads_writes(1, 1); - - let slash_defer_duration = T::SlashDeferDuration::get(); - - let invulnerables = Self::invulnerables(); - add_db_reads_writes(1, 0); - - for (details, slash_fraction) in offenders.iter().zip(slash_fraction) { - let (stash, exposure) = &details.offender; - - // Skip if the validator is invulnerable. - if invulnerables.contains(stash) { - continue; - } - - let unapplied = slashing::compute_slash::(slashing::SlashParams { - stash, - slash: *slash_fraction, - exposure, - slash_era, - window_start, - now: active_era, - reward_proportion, - disable_strategy, - }); - - Self::deposit_event(Event::::SlashReported { - validator: stash.clone(), - fraction: *slash_fraction, - slash_era, - }); - - if let Some(mut unapplied) = unapplied { - let nominators_len = unapplied.others.len() as u64; - let reporters_len = details.reporters.len() as u64; - - { - let upper_bound = 1 /* Validator/NominatorSlashInEra */ + 2 /* fetch_spans */; - let rw = upper_bound + nominators_len * upper_bound; - add_db_reads_writes(rw, rw); - } - unapplied.reporters = details.reporters.clone(); - if slash_defer_duration == 0 { - // Apply right away. - slashing::apply_slash::(unapplied, slash_era); - { - let slash_cost = (6, 5); - let reward_cost = (2, 2); - add_db_reads_writes( - (1 + nominators_len) * slash_cost.0 + reward_cost.0 * reporters_len, - (1 + nominators_len) * slash_cost.1 + reward_cost.1 * reporters_len, - ); - } - } else { - // Defer to end of some `slash_defer_duration` from now. - log!( - debug, - "deferring slash of {:?}% happened in {:?} (reported in {:?}) to {:?}", - slash_fraction, - slash_era, - active_era, - slash_era + slash_defer_duration + 1, - ); - ::UnappliedSlashes::mutate( - slash_era - .saturating_add(slash_defer_duration) - .saturating_add(One::one()), - move |for_later| for_later.push(unapplied), - ); - add_db_reads_writes(1, 1); - } - } else { - add_db_reads_writes(4 /* fetch_spans */, 5 /* kick_out_if_recent */) - } - } - - consumed_weight - } -} - -impl ScoreProvider for Pallet { - type Score = VoteWeight; - - fn score(who: &T::AccountId) -> Self::Score { - Self::weight_of(who) - } - - #[cfg(feature = "runtime-benchmarks")] - fn set_score_of(who: &T::AccountId, weight: Self::Score) { - // this will clearly results in an inconsistent state, but it should not matter for a - // benchmark. - let active: BalanceOf = weight.try_into().map_err(|_| ()).unwrap(); - let mut ledger = match Self::ledger(who) { - None => StakingLedger::default_from(who.clone()), - Some(l) => l, - }; - ledger.active = active; - - >::insert(who, ledger); - >::insert(who, who); - - // also, we play a trick to make sure that a issuance based-`CurrencyToVote` behaves well: - // This will make sure that total issuance is zero, thus the currency to vote will be a 1-1 - // conversion. - let imbalance = T::Currency::burn(T::Currency::total_issuance()); - // kinda ugly, but gets the job done. The fact that this works here is a HUGE exception. - // Don't try this pattern in other places. - sp_std::mem::forget(imbalance); - } -} - -/// A simple sorted list implementation that does not require any additional pallets. Note, this -/// does not provide validators in sorted order. If you desire nominators in a sorted order take -/// a look at [`pallet-bags-list`]. -pub struct UseValidatorsMap(sp_std::marker::PhantomData); -impl SortedListProvider for UseValidatorsMap { - type Score = BalanceOf; - type Error = (); - - /// Returns iterator over voter list, which can have `take` called on it. - fn iter() -> Box> { - Box::new(Validators::::iter().map(|(v, _)| v)) - } - fn iter_from( - start: &T::AccountId, - ) -> Result>, Self::Error> { - if Validators::::contains_key(start) { - let start_key = Validators::::hashed_key_for(start); - Ok(Box::new( - Validators::::iter_from(start_key).map(|(n, _)| n), - )) - } else { - Err(()) - } - } - fn count() -> u32 { - Validators::::count() - } - fn contains(id: &T::AccountId) -> bool { - Validators::::contains_key(id) - } - fn on_insert(_: T::AccountId, _weight: Self::Score) -> Result<(), Self::Error> { - // nothing to do on insert. - Ok(()) - } - fn get_score(id: &T::AccountId) -> Result { - Ok(Pallet::::weight_of(id).into()) - } - fn on_update(_: &T::AccountId, _weight: Self::Score) -> Result<(), Self::Error> { - // nothing to do on update. - Ok(()) - } - fn on_remove(_: &T::AccountId) -> Result<(), Self::Error> { - // nothing to do on remove. - Ok(()) - } - fn unsafe_regenerate( - _: impl IntoIterator, - _: Box Self::Score>, - ) -> u32 { - // nothing to do upon regenerate. - 0 - } - #[cfg(feature = "try-runtime")] - fn try_state() -> Result<(), &'static str> { - Ok(()) - } - - fn unsafe_clear() { - #[allow(deprecated)] - Validators::::remove_all(); - } - - #[cfg(feature = "runtime-benchmarks")] - fn score_update_worst_case(_who: &T::AccountId, _is_increase: bool) -> Self::Score { - unimplemented!() - } -} - -/// A simple voter list implementation that does not require any additional pallets. Note, this -/// does not provided nominators in sorted ordered. If you desire nominators in a sorted order take -/// a look at [`pallet-bags-list]. -pub struct UseNominatorsAndValidatorsMap(sp_std::marker::PhantomData); -impl SortedListProvider for UseNominatorsAndValidatorsMap { - type Error = (); - type Score = VoteWeight; - - fn iter() -> Box> { - Box::new( - Validators::::iter() - .map(|(v, _)| v) - .chain(Nominators::::iter().map(|(n, _)| n)), - ) - } - fn iter_from( - start: &T::AccountId, - ) -> Result>, Self::Error> { - if Validators::::contains_key(start) { - let start_key = Validators::::hashed_key_for(start); - Ok(Box::new( - Validators::::iter_from(start_key) - .map(|(n, _)| n) - .chain(Nominators::::iter().map(|(x, _)| x)), - )) - } else if Nominators::::contains_key(start) { - let start_key = Nominators::::hashed_key_for(start); - Ok(Box::new( - Nominators::::iter_from(start_key).map(|(n, _)| n), - )) - } else { - Err(()) - } - } - fn count() -> u32 { - Nominators::::count().saturating_add(Validators::::count()) - } - fn contains(id: &T::AccountId) -> bool { - Nominators::::contains_key(id) || Validators::::contains_key(id) - } - fn on_insert(_: T::AccountId, _weight: Self::Score) -> Result<(), Self::Error> { - // nothing to do on insert. - Ok(()) - } - fn get_score(id: &T::AccountId) -> Result { - Ok(Pallet::::weight_of(id)) - } - fn on_update(_: &T::AccountId, _weight: Self::Score) -> Result<(), Self::Error> { - // nothing to do on update. - Ok(()) - } - fn on_remove(_: &T::AccountId) -> Result<(), Self::Error> { - // nothing to do on remove. - Ok(()) - } - fn unsafe_regenerate( - _: impl IntoIterator, - _: Box Self::Score>, - ) -> u32 { - // nothing to do upon regenerate. - 0 - } - - #[cfg(feature = "try-runtime")] - fn try_state() -> Result<(), &'static str> { - Ok(()) - } - - fn unsafe_clear() { - // NOTE: Caller must ensure this doesn't lead to too many storage accesses. This is a - // condition of SortedListProvider::unsafe_clear. - #[allow(deprecated)] - Nominators::::remove_all(); - #[allow(deprecated)] - Validators::::remove_all(); - } - - #[cfg(feature = "runtime-benchmarks")] - fn score_update_worst_case(_who: &T::AccountId, _is_increase: bool) -> Self::Score { - unimplemented!() - } -} - -// NOTE: in this entire impl block, the assumption is that `who` is a stash account. -impl StakingInterface for Pallet { - type AccountId = T::AccountId; - type Balance = BalanceOf; - - fn minimum_nominator_bond() -> Self::Balance { - MinNominatorBond::::get() - } - - fn minimum_validator_bond() -> Self::Balance { - MinValidatorBond::::get() - } - - fn desired_validator_count() -> u32 { - ValidatorCount::::get() - } - - fn election_ongoing() -> bool { - T::ElectionProvider::ongoing() - } - - fn force_unstake(who: Self::AccountId) -> sp_runtime::DispatchResult { - let num_slashing_spans = Self::slashing_spans(&who).map_or(0, |s| s.iter().count() as u32); - Self::force_unstake(RawOrigin::Root.into(), who.clone(), num_slashing_spans) - } - - fn stash_by_ctrl(controller: &Self::AccountId) -> Result { - Self::ledger(controller) - .map(|l| l.stash) - .ok_or(Error::::NotController.into()) - } - - fn is_exposed_in_era(who: &Self::AccountId, era: &EraIndex) -> bool { - ErasStakers::::iter_prefix(era).any(|(validator, exposures)| { - validator == *who || exposures.others.iter().any(|i| i.who == *who) - }) - } - - fn bonding_duration() -> EraIndex { - T::BondingDuration::get() - } - - fn current_era() -> EraIndex { - Self::current_era().unwrap_or(Zero::zero()) - } - - fn stake(who: &Self::AccountId) -> Result, DispatchError> { - Self::bonded(who) - .and_then(|c| Self::ledger(c)) - .map(|l| Stake { - stash: l.stash, - total: l.total, - active: l.active, - }) - .ok_or(Error::::NotStash.into()) - } - - fn bond_extra(who: &Self::AccountId, extra: Self::Balance) -> DispatchResult { - Self::bond_extra(RawOrigin::Signed(who.clone()).into(), extra) - } - - fn unbond(who: &Self::AccountId, value: Self::Balance) -> DispatchResult { - let ctrl = Self::bonded(who).ok_or(Error::::NotStash)?; - Self::unbond(RawOrigin::Signed(ctrl).into(), value) - .map_err(|with_post| with_post.error) - .map(|_| ()) - } - - fn chill(who: &Self::AccountId) -> DispatchResult { - // defensive-only: any account bonded via this interface has the stash set as the - // controller, but we have to be sure. Same comment anywhere else that we read this. - let ctrl = Self::bonded(who).ok_or(Error::::NotStash)?; - Self::chill(RawOrigin::Signed(ctrl).into()) - } - - fn withdraw_unbonded( - who: Self::AccountId, - num_slashing_spans: u32, - ) -> Result { - let ctrl = Self::bonded(who).ok_or(Error::::NotStash)?; - Self::withdraw_unbonded(RawOrigin::Signed(ctrl.clone()).into(), num_slashing_spans) - .map(|_| !Ledger::::contains_key(&ctrl)) - .map_err(|with_post| with_post.error) - } - - fn bond( - who: &Self::AccountId, - value: Self::Balance, - payee: &Self::AccountId, - ) -> DispatchResult { - Self::bond( - RawOrigin::Signed(who.clone()).into(), - T::Lookup::unlookup(who.clone()), - value, - RewardDestination::Account(payee.clone()), - ) - } - - fn nominate(who: &Self::AccountId, targets: Vec) -> DispatchResult { - let ctrl = Self::bonded(who).ok_or(Error::::NotStash)?; - let targets = targets - .into_iter() - .map(T::Lookup::unlookup) - .collect::>(); - Self::nominate(RawOrigin::Signed(ctrl).into(), targets) - } - - sp_staking::runtime_benchmarks_enabled! { - fn nominations(who: Self::AccountId) -> Option> { - Nominators::::get(who).map(|n| n.targets.into_inner()) - } - - fn add_era_stakers( - current_era: &EraIndex, - stash: &T::AccountId, - exposures: Vec<(Self::AccountId, Self::Balance)>, - ) { - let others = exposures - .iter() - .map(|(who, value)| IndividualExposure { who: who.clone(), value: value.clone() }) - .collect::>(); - let exposure = Exposure { total: Default::default(), own: Default::default(), others }; - >::insert(¤t_era, &stash, &exposure); - } - - fn set_current_era(era: EraIndex) { - CurrentEra::::put(era); - } - } -} - -#[cfg(feature = "std")] -impl Pallet { - pub fn do_try_state(_: BlockNumberFor) -> Result<(), &'static str> { - ensure!( - T::VoterList::iter() - .all(|x| >::contains_key(&x) || >::contains_key(&x)), - "VoterList contains non-staker" - ); - - Self::check_nominators()?; - Self::check_exposures()?; - Self::check_ledgers()?; - Self::check_count() - } - - fn check_count() -> Result<(), &'static str> { - ensure!( - ::VoterList::count() - == Nominators::::count() + Validators::::count(), - "wrong external count" - ); - ensure!( - ::TargetList::count() == Validators::::count(), - "wrong external count" - ); - ensure!( - ValidatorCount::::get() <= - ::MaxWinners::get(), - "validator count exceeded election max winners" - ); - Ok(()) - } - - fn check_ledgers() -> Result<(), &'static str> { - Bonded::::iter() - .map(|(_, ctrl)| Self::ensure_ledger_consistent(ctrl)) - .collect::>() - } - - fn check_exposures() -> Result<(), &'static str> { - // a check per validator to ensure the exposure struct is always sane. - let era = Self::active_era().unwrap().index; - ErasStakers::::iter_prefix_values(era) - .map(|expo| { - ensure!( - expo.total - == expo.own - + expo - .others - .iter() - .map(|e| e.value) - .fold(Zero::zero(), |acc, x| acc + x), - "wrong total exposure.", - ); - Ok(()) - }) - .collect::>() - } - - fn check_nominators() -> Result<(), &'static str> { - // a check per nominator to ensure their entire stake is correctly distributed. Will only - // kick-in if the nomination was submitted before the current era. - let era = Self::active_era().unwrap().index; - >::iter() - .filter_map(|(nominator, nomination)| { - if nomination.submitted_in < era { - Some(nominator) - } else { - None - } - }) - .map(|nominator| { - // must be bonded. - Self::ensure_is_stash(&nominator)?; - let mut sum = BalanceOf::::zero(); - T::SessionInterface::validators() - .iter() - .map(|v| Self::eras_stakers(era, v)) - .map(|e| { - let individual = e - .others - .iter() - .filter(|e| e.who == nominator) - .collect::>(); - let len = individual.len(); - match len { - 0 => { /* not supporting this validator at all. */ } - 1 => sum += individual[0].value, - _ => return Err("nominator cannot back a validator more than once."), - }; - Ok(()) - }) - .collect::>() - }) - .collect::>() - } - - fn ensure_is_stash(who: &T::AccountId) -> Result<(), &'static str> { - ensure!(Self::bonded(who).is_some(), "Not a stash."); - Ok(()) - } - - fn ensure_ledger_consistent(ctrl: T::AccountId) -> Result<(), &'static str> { - // ensures ledger.total == ledger.active + sum(ledger.unlocking). - let ledger = Self::ledger(ctrl.clone()).ok_or("Not a controller.")?; - let real_total: BalanceOf = ledger - .unlocking - .iter() - .fold(ledger.active, |a, c| a + c.value); - ensure!(real_total == ledger.total, "ledger.total corrupt"); - - if !(ledger.active >= T::Currency::minimum_balance() || ledger.active.is_zero()) { - log!(warn, "ledger.active less than ED: {:?}, {:?}", ctrl, ledger) - } - - Ok(()) - } -} diff --git a/pallets/staking/src/pallet/mod.rs b/pallets/staking/src/pallet/mod.rs deleted file mode 100644 index 83e5679e08..0000000000 --- a/pallets/staking/src/pallet/mod.rs +++ /dev/null @@ -1,2155 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Staking FRAME Pallet. - -use frame_election_provider_support::{ - ElectionProvider, ElectionProviderBase, SortedListProvider, VoteWeight, -}; -use frame_support::{ - dispatch::Codec, - pallet_prelude::*, - traits::{ - Currency, CurrencyToVote, Defensive, DefensiveResult, EnsureOrigin, EstimateNextNewSession, - Get, LockIdentifier, LockableCurrency, OnUnbalanced, TryCollect, UnixTime, - }, - weights::Weight, - BoundedVec, -}; -use frame_system::{ensure_root, ensure_signed, pallet_prelude::*}; -use sp_runtime::{ - traits::{CheckedSub, SaturatedConversion, StaticLookup, Zero}, - ArithmeticError, Perbill, Percent, -}; -use sp_staking::{EraIndex, SessionIndex}; -use sp_std::prelude::*; - -mod impls; - -pub use impls::*; - -use crate::{ - slashing, weights::WeightInfo, AccountIdLookupOf, ActiveEraInfo, BalanceOf, EraPayout, - EraRewardPoints, Exposure, Forcing, NegativeImbalanceOf, Nominations, PositiveImbalanceOf, - RewardDestination, SessionInterface, StakingLedger, UnappliedSlash, ValidatorPrefs, -}; - -// Polymesh change -// ----------------------------------------------------------------- -use frame_support::traits::schedule::Anon; -use frame_support::traits::IsSubType; -use frame_system::offchain::SendTransactionTypes; -use sp_runtime::traits::Dispatchable; -use sp_runtime::Permill; - -use pallet_identity::Config as IdentityConfig; -use polymesh_primitives::GC_DID; -use polymesh_primitives::{storage_migration_ver, traits::IdentityFnTrait, IdentityId}; - -use crate::types::{PermissionedIdentityPrefs, PermissionedStaking, SlashingSwitch}; -// ----------------------------------------------------------------- - -const STAKING_ID: LockIdentifier = *b"staking "; -// The speculative number of spans are used as an input of the weight annotation of -// [`Call::unbond`], as the post dipatch weight may depend on the number of slashing span on the -// account which is not provided as an input. The value set should be conservative but sensible. -pub(crate) const SPECULATIVE_NUM_SPANS: u32 = 32; - -storage_migration_ver!(2); - -mod migrations { - use super::pallet::*; - use frame_support::{ - pallet_prelude::*, - storage_alias, - traits::{Get, GetStorageVersion}, - }; - - /// Alias to the old storage item used for release versioning. Obsolete since v13. - #[storage_alias] - type StorageVersion = StorageValue, u8, ValueQuery>; - - pub fn migrate_v13() -> Weight { - let in_code = Pallet::::current_storage_version(); - let on_chain = Pallet::::on_chain_storage_version(); - - // We need to remove the old obsolete storage version and - // initialize the pallet storage version. - if in_code == 13 && on_chain < 13 { - // The old storage item is not used anymore, so we can just remove it. - StorageVersion::::kill(); - // Make sure that the new storage version is initialized. - in_code.put::>(); - - crate::log!(info, "v13 applied successfully"); - T::DbWeight::get().reads_writes(1, 2) - } else { - T::DbWeight::get().reads(1) - } - } -} - -#[frame_support::pallet] -pub mod pallet { - use frame_election_provider_support::ElectionDataProvider; - - use crate::BenchmarkingConfig; - - use super::*; - - /// The in-code storage version. - const STORAGE_VERSION: StorageVersion = StorageVersion::new(13); - - #[pallet::pallet] - #[pallet::generate_store(pub(crate) trait Store)] - #[pallet::storage_version(STORAGE_VERSION)] - pub struct Pallet(_); - - /// Possible operations on the configuration values of this pallet. - #[derive(TypeInfo, Debug, Clone, Encode, Decode, PartialEq)] - pub enum ConfigOp { - /// Don't change. - Noop, - /// Set the given value. - Set(T), - /// Remove from storage. - Remove, - } - - #[pallet::config] - pub trait Config: - frame_system::Config - + SendTransactionTypes> - + pallet_babe::Config - + IdentityConfig - { - /// The staking balance. - type Currency: LockableCurrency< - Self::AccountId, - Moment = Self::BlockNumber, - Balance = Self::CurrencyBalance, - >; - /// Just the `Currency::Balance` type; we have this item to allow us to constrain it to - /// `From`. - type CurrencyBalance: sp_runtime::traits::AtLeast32BitUnsigned - + codec::FullCodec - + Copy - + MaybeSerializeDeserialize - + sp_std::fmt::Debug - + Default - + From - + TypeInfo - + MaxEncodedLen; - /// Time used for computing era duration. - /// - /// It is guaranteed to start being called from the first `on_finalize`. Thus value at - /// genesis is not used. - type UnixTime: UnixTime; - - /// Convert a balance into a number used for election calculation. This must fit into a - /// `u64` but is allowed to be sensibly lossy. The `u64` is used to communicate with the - /// [`frame_election_provider_support`] crate which accepts u64 numbers and does operations - /// in 128. - /// Consequently, the backward convert is used convert the u128s from sp-elections back to a - /// [`BalanceOf`]. - type CurrencyToVote: CurrencyToVote>; - - /// Something that provides the election functionality. - type ElectionProvider: ElectionProvider< - AccountId = Self::AccountId, - BlockNumber = Self::BlockNumber, - // we only accept an election provider that has staking as data provider. - DataProvider = Pallet, - >; - /// Something that provides the election functionality at genesis. - type GenesisElectionProvider: ElectionProvider< - AccountId = Self::AccountId, - BlockNumber = Self::BlockNumber, - DataProvider = Pallet, - >; - - /// Maximum number of nominations per nominator. - #[pallet::constant] - type MaxNominations: Get; - - /// Number of eras to keep in history. - /// - /// Following information is kept for eras in `[current_era - - /// HistoryDepth, current_era]`: `ErasStakers`, `ErasStakersClipped`, - /// `ErasValidatorPrefs`, `ErasValidatorReward`, `ErasRewardPoints`, - /// `ErasTotalStake`, `ErasStartSessionIndex`, - /// `StakingLedger.claimed_rewards`. - /// - /// Must be more than the number of eras delayed by session. - /// I.e. active era must always be in history. I.e. `active_era > - /// current_era - history_depth` must be guaranteed. - /// - /// If migrating an existing pallet from storage value to config value, - /// this should be set to same value or greater as in storage. - /// - /// Note: `HistoryDepth` is used as the upper bound for the `BoundedVec` - /// item `StakingLedger.claimed_rewards`. Setting this value lower than - /// the existing value can lead to inconsistencies in the - /// `StakingLedger` and will need to be handled properly in a migration. - /// The test `reducing_history_depth_abrupt` shows this effect. - #[pallet::constant] - type HistoryDepth: Get; - - /// Tokens have been minted and are unused for validator-reward. - /// See [Era payout](./index.html#era-payout). - type RewardRemainder: OnUnbalanced>; - - /// The overarching event type. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - - /// Handler for the unbalanced reduction when slashing a staker. - type Slash: OnUnbalanced>; - - /// Handler for the unbalanced increment when rewarding a staker. - /// NOTE: in most cases, the implementation of `OnUnbalanced` should modify the total - /// issuance. - type Reward: OnUnbalanced>; - - /// Number of sessions per era. - #[pallet::constant] - type SessionsPerEra: Get; - - /// Number of eras that staked funds must remain bonded for. - #[pallet::constant] - type BondingDuration: Get; - - /// Number of eras that slashes are deferred by, after computation. - /// - /// This should be less than the bonding duration. Set to 0 if slashes - /// should be applied immediately, without opportunity for intervention. - #[pallet::constant] - type SlashDeferDuration: Get; - - /// The origin which can manage less critical staking parameters that does not require root. - /// - /// Supported actions: (1) cancel deferred slash, (2) set minimum commission. - type AdminOrigin: EnsureOrigin; - - /// Interface for interacting with a session pallet. - type SessionInterface: SessionInterface; - - /// The payout for validators and the system for the current era. - /// See [Era payout](./index.html#era-payout). - type EraPayout: EraPayout>; - - /// Something that can estimate the next session change, accurately or as a best effort - /// guess. - type NextNewSession: EstimateNextNewSession; - - /// The maximum number of nominators rewarded for each validator. - /// - /// For each validator only the `$MaxNominatorRewardedPerValidator` biggest stakers can - /// claim their reward. This used to limit the i/o cost for the nominator payout. - #[pallet::constant] - type MaxNominatorRewardedPerValidator: Get; - - /// The fraction of the validator set that is safe to be offending. - /// After the threshold is reached a new era will be forced. - type OffendingValidatorsThreshold: Get; - - /// Something that provides a best-effort sorted list of voters aka electing nominators, - /// used for NPoS election. - /// - /// The changes to nominators are reported to this. Moreover, each validator's self-vote is - /// also reported as one independent vote. - /// - /// To keep the load off the chain as much as possible, changes made to the staked amount - /// via rewards and slashes are not reported and thus need to be manually fixed by the - /// staker. In case of `bags-list`, this always means using `rebag` and `putInFrontOf`. - /// - /// Invariant: what comes out of this list will always be a nominator. - type VoterList: SortedListProvider; - - /// WIP: This is a noop as of now, the actual business logic that's described below is going - /// to be introduced in a follow-up PR. - /// - /// Something that provides a best-effort sorted list of targets aka electable validators, - /// used for NPoS election. - /// - /// The changes to the approval stake of each validator are reported to this. This means any - /// change to: - /// 1. The stake of any validator or nominator. - /// 2. The targets of any nominator - /// 3. The role of any staker (e.g. validator -> chilled, nominator -> validator, etc) - /// - /// Unlike `VoterList`, the values in this list are always kept up to date with reward and - /// slash as well, and thus represent the accurate approval stake of all account being - /// nominated by nominators. - /// - /// Note that while at the time of nomination, all targets are checked to be real - /// validators, they can chill at any point, and their approval stakes will still be - /// recorded. This implies that what comes out of iterating this list MIGHT NOT BE AN ACTIVE - /// VALIDATOR. - type TargetList: SortedListProvider>; - - /// The maximum number of `unlocking` chunks a [`StakingLedger`] can - /// have. Effectively determines how many unique eras a staker may be - /// unbonding in. - /// - /// Note: `MaxUnlockingChunks` is used as the upper bound for the - /// `BoundedVec` item `StakingLedger.unlocking`. Setting this value - /// lower than the existing value can lead to inconsistencies in the - /// `StakingLedger` and will need to be handled properly in a runtime - /// migration. The test `reducing_max_unlocking_chunks_abrupt` shows - /// this effect. - #[pallet::constant] - type MaxUnlockingChunks: Get; - - /// A hook called when any staker is slashed. Mostly likely this can be a no-op unless - /// other pallets exist that are affected by slashing per-staker. - type OnStakerSlash: sp_staking::OnStakerSlash>; - - /// Some parameters of the benchmarking. - type BenchmarkingConfig: BenchmarkingConfig; - - /// Weight information for extrinsics in this pallet. - type WeightInfo: WeightInfo; - - // Polymesh change - // ----------------------------------------------------------------- - - /// Permissioned staking. - type Permissioned: PermissionedStaking; - - /// Maximum amount of validators that can run by an identity. - /// It will be MaxValidatorPerIdentity * Self::validator_count(). - #[pallet::constant] - type MaxValidatorPerIdentity: Get; - - /// Maximum amount of total issuance after which fixed rewards kicks in. - #[pallet::constant] - type MaxVariableInflationTotalIssuance: Get>; - - /// Yearly total reward amount that gets distributed when fixed rewards kicks in. - #[pallet::constant] - type FixedYearlyReward: Get>; - - /// The overarching call type. - type Call: Dispatchable + From> + IsSubType> + Clone; - - /// Overarching type of all pallets origins. - type PalletsOrigin: From>; - - /// To schedule the rewards for the stakers after the end of era. - type RewardScheduler: Anon::Call, Self::PalletsOrigin>; - - // ----------------------------------------------------------------- - } - - /// The ideal number of active validators. - #[pallet::storage] - #[pallet::getter(fn validator_count)] - pub type ValidatorCount = StorageValue<_, u32, ValueQuery>; - - /// Minimum number of staking participants before emergency conditions are imposed. - #[pallet::storage] - #[pallet::getter(fn minimum_validator_count)] - pub type MinimumValidatorCount = StorageValue<_, u32, ValueQuery>; - - /// Any validators that may never be slashed or forcibly kicked. It's a Vec since they're - /// easy to initialize and the performance hit is minimal (we expect no more than four - /// invulnerables) and restricted to testnets. - #[pallet::storage] - #[pallet::getter(fn invulnerables)] - #[pallet::unbounded] - pub type Invulnerables = StorageValue<_, Vec, ValueQuery>; - - /// Map from all locked "stash" accounts to the controller account. - /// - /// TWOX-NOTE: SAFE since `AccountId` is a secure hash. - #[pallet::storage] - #[pallet::getter(fn bonded)] - pub type Bonded = StorageMap<_, Twox64Concat, T::AccountId, T::AccountId>; - - /// The minimum active bond to become and maintain the role of a nominator. - #[pallet::storage] - pub type MinNominatorBond = StorageValue<_, BalanceOf, ValueQuery>; - - /// The minimum active bond to become and maintain the role of a validator. - #[pallet::storage] - pub type MinValidatorBond = StorageValue<_, BalanceOf, ValueQuery>; - - /// The minimum active nominator stake of the last successful election. - #[pallet::storage] - pub type MinimumActiveStake = StorageValue<_, BalanceOf, ValueQuery>; - - /// The minimum amount of commission that validators can set. - /// - /// If set to `0`, no limit exists. - #[pallet::storage] - pub type MinCommission = StorageValue<_, Perbill, ValueQuery>; - - /// Map from all (unlocked) "controller" accounts to the info regarding the staking. - #[pallet::storage] - #[pallet::getter(fn ledger)] - pub type Ledger = StorageMap<_, Blake2_128Concat, T::AccountId, StakingLedger>; - - /// Where the reward payment should be made. Keyed by stash. - /// - /// TWOX-NOTE: SAFE since `AccountId` is a secure hash. - #[pallet::storage] - #[pallet::getter(fn payee)] - pub type Payee = - StorageMap<_, Twox64Concat, T::AccountId, RewardDestination, ValueQuery>; - - /// The map from (wannabe) validator stash key to the preferences of that validator. - /// - /// TWOX-NOTE: SAFE since `AccountId` is a secure hash. - #[pallet::storage] - #[pallet::getter(fn validators)] - pub type Validators = - CountedStorageMap<_, Twox64Concat, T::AccountId, ValidatorPrefs, ValueQuery>; - - /// The maximum validator count before we stop allowing new validators to join. - /// - /// When this value is not set, no limits are enforced. - #[pallet::storage] - pub type MaxValidatorsCount = StorageValue<_, u32, OptionQuery>; - - /// The map from nominator stash key to their nomination preferences, namely the validators that - /// they wish to support. - /// - /// Note that the keys of this storage map might become non-decodable in case the - /// [`Config::MaxNominations`] configuration is decreased. In this rare case, these nominators - /// are still existent in storage, their key is correct and retrievable (i.e. `contains_key` - /// indicates that they exist), but their value cannot be decoded. Therefore, the non-decodable - /// nominators will effectively not-exist, until they re-submit their preferences such that it - /// is within the bounds of the newly set `Config::MaxNominations`. - /// - /// This implies that `::iter_keys().count()` and `::iter().count()` might return different - /// values for this map. Moreover, the main `::count()` is aligned with the former, namely the - /// number of keys that exist. - /// - /// Lastly, if any of the nominators become non-decodable, they can be chilled immediately via - /// [`Call::chill_other`] dispatchable by anyone. - /// - /// TWOX-NOTE: SAFE since `AccountId` is a secure hash. - #[pallet::storage] - #[pallet::getter(fn nominators)] - pub type Nominators = - CountedStorageMap<_, Twox64Concat, T::AccountId, Nominations>; - - /// The maximum nominator count before we stop allowing new validators to join. - /// - /// When this value is not set, no limits are enforced. - #[pallet::storage] - pub type MaxNominatorsCount = StorageValue<_, u32, OptionQuery>; - - /// The current era index. - /// - /// This is the latest planned era, depending on how the Session pallet queues the validator - /// set, it might be active or not. - #[pallet::storage] - #[pallet::getter(fn current_era)] - pub type CurrentEra = StorageValue<_, EraIndex>; - - /// The active era information, it holds index and start. - /// - /// The active era is the era being currently rewarded. Validator set of this era must be - /// equal to [`SessionInterface::validators`]. - #[pallet::storage] - #[pallet::getter(fn active_era)] - pub type ActiveEra = StorageValue<_, ActiveEraInfo>; - - /// The session index at which the era start for the last `HISTORY_DEPTH` eras. - /// - /// Note: This tracks the starting session (i.e. session index when era start being active) - /// for the eras in `[CurrentEra - HISTORY_DEPTH, CurrentEra]`. - #[pallet::storage] - #[pallet::getter(fn eras_start_session_index)] - pub type ErasStartSessionIndex = StorageMap<_, Twox64Concat, EraIndex, SessionIndex>; - - /// Exposure of validator at era. - /// - /// This is keyed first by the era index to allow bulk deletion and then the stash account. - /// - /// Is it removed after `HISTORY_DEPTH` eras. - /// If stakers hasn't been set or has been removed then empty exposure is returned. - #[pallet::storage] - #[pallet::getter(fn eras_stakers)] - #[pallet::unbounded] - pub type ErasStakers = StorageDoubleMap< - _, - Twox64Concat, - EraIndex, - Twox64Concat, - T::AccountId, - Exposure>, - ValueQuery, - >; - - /// Clipped Exposure of validator at era. - /// - /// This is similar to [`ErasStakers`] but number of nominators exposed is reduced to the - /// `T::MaxNominatorRewardedPerValidator` biggest stakers. - /// (Note: the field `total` and `own` of the exposure remains unchanged). - /// This is used to limit the i/o cost for the nominator payout. - /// - /// This is keyed fist by the era index to allow bulk deletion and then the stash account. - /// - /// Is it removed after `HISTORY_DEPTH` eras. - /// If stakers hasn't been set or has been removed then empty exposure is returned. - #[pallet::storage] - #[pallet::unbounded] - #[pallet::getter(fn eras_stakers_clipped)] - pub type ErasStakersClipped = StorageDoubleMap< - _, - Twox64Concat, - EraIndex, - Twox64Concat, - T::AccountId, - Exposure>, - ValueQuery, - >; - - /// Similar to `ErasStakers`, this holds the preferences of validators. - /// - /// This is keyed first by the era index to allow bulk deletion and then the stash account. - /// - /// Is it removed after `HISTORY_DEPTH` eras. - // If prefs hasn't been set or has been removed then 0 commission is returned. - #[pallet::storage] - #[pallet::getter(fn eras_validator_prefs)] - pub type ErasValidatorPrefs = StorageDoubleMap< - _, - Twox64Concat, - EraIndex, - Twox64Concat, - T::AccountId, - ValidatorPrefs, - ValueQuery, - >; - - /// The total validator era payout for the last `HISTORY_DEPTH` eras. - /// - /// Eras that haven't finished yet or has been removed doesn't have reward. - #[pallet::storage] - #[pallet::getter(fn eras_validator_reward)] - pub type ErasValidatorReward = StorageMap<_, Twox64Concat, EraIndex, BalanceOf>; - - /// Rewards for the last `HISTORY_DEPTH` eras. - /// If reward hasn't been set or has been removed then 0 reward is returned. - #[pallet::storage] - #[pallet::unbounded] - #[pallet::getter(fn eras_reward_points)] - pub type ErasRewardPoints = - StorageMap<_, Twox64Concat, EraIndex, EraRewardPoints, ValueQuery>; - - /// The total amount staked for the last `HISTORY_DEPTH` eras. - /// If total hasn't been set or has been removed then 0 stake is returned. - #[pallet::storage] - #[pallet::getter(fn eras_total_stake)] - pub type ErasTotalStake = - StorageMap<_, Twox64Concat, EraIndex, BalanceOf, ValueQuery>; - - /// Mode of era forcing. - #[pallet::storage] - #[pallet::getter(fn force_era)] - pub type ForceEra = StorageValue<_, Forcing, ValueQuery>; - - /// The percentage of the slash that is distributed to reporters. - /// - /// The rest of the slashed value is handled by the `Slash`. - #[pallet::storage] - #[pallet::getter(fn slash_reward_fraction)] - pub type SlashRewardFraction = StorageValue<_, Perbill, ValueQuery>; - - /// The amount of currency given to reporters of a slash event which was - /// canceled by extraordinary circumstances (e.g. governance). - #[pallet::storage] - #[pallet::getter(fn canceled_payout)] - pub type CanceledSlashPayout = StorageValue<_, BalanceOf, ValueQuery>; - - /// All unapplied slashes that are queued for later. - #[pallet::storage] - #[pallet::unbounded] - pub type UnappliedSlashes = StorageMap< - _, - Twox64Concat, - EraIndex, - Vec>>, - ValueQuery, - >; - - /// A mapping from still-bonded eras to the first session index of that era. - /// - /// Must contains information for eras for the range: - /// `[active_era - bounding_duration; active_era]` - #[pallet::storage] - #[pallet::unbounded] - pub type BondedEras = StorageValue<_, Vec<(EraIndex, SessionIndex)>, ValueQuery>; - - /// All slashing events on validators, mapped by era to the highest slash proportion - /// and slash value of the era. - #[pallet::storage] - pub type ValidatorSlashInEra = StorageDoubleMap< - _, - Twox64Concat, - EraIndex, - Twox64Concat, - T::AccountId, - (Perbill, BalanceOf), - >; - - /// All slashing events on nominators, mapped by era to the highest slash value of the era. - #[pallet::storage] - pub type NominatorSlashInEra = - StorageDoubleMap<_, Twox64Concat, EraIndex, Twox64Concat, T::AccountId, BalanceOf>; - - /// Slashing spans for stash accounts. - #[pallet::storage] - #[pallet::getter(fn slashing_spans)] - #[pallet::unbounded] - pub type SlashingSpans = - StorageMap<_, Twox64Concat, T::AccountId, slashing::SlashingSpans>; - - /// Records information about the maximum slash of a stash within a slashing span, - /// as well as how much reward has been paid out. - #[pallet::storage] - pub type SpanSlash = StorageMap< - _, - Twox64Concat, - (T::AccountId, slashing::SpanIndex), - slashing::SpanRecord>, - ValueQuery, - >; - - /// The last planned session scheduled by the session pallet. - /// - /// This is basically in sync with the call to [`pallet_session::SessionManager::new_session`]. - #[pallet::storage] - #[pallet::getter(fn current_planned_session)] - pub type CurrentPlannedSession = StorageValue<_, SessionIndex, ValueQuery>; - - /// Indices of validators that have offended in the active era and whether they are currently - /// disabled. - /// - /// This value should be a superset of disabled validators since not all offences lead to the - /// validator being disabled (if there was no slash). This is needed to track the percentage of - /// validators that have offended in the current era, ensuring a new era is forced if - /// `OffendingValidatorsThreshold` is reached. The vec is always kept sorted so that we can find - /// whether a given validator has previously offended using binary search. It gets cleared when - /// the era ends. - #[pallet::storage] - #[pallet::unbounded] - #[pallet::getter(fn offending_validators)] - pub type OffendingValidators = StorageValue<_, Vec<(u32, bool)>, ValueQuery>; - - /// The threshold for when users can start calling `chill_other` for other validators / - /// nominators. The threshold is compared to the actual number of validators / nominators - /// (`CountFor*`) in the system compared to the configured max (`Max*Count`). - #[pallet::storage] - pub type ChillThreshold = StorageValue<_, Percent, OptionQuery>; - - // Polymesh change - // ----------------------------------------------------------------- - - /// Entities that are allowed to run operator/validator nodes. - #[pallet::storage] - #[pallet::unbounded] - #[pallet::getter(fn permissioned_identity)] - pub type PermissionedIdentity = - StorageMap<_, Twox64Concat, IdentityId, PermissionedIdentityPrefs, OptionQuery>; - - /// Slashing switch for validators & Nominators. - #[pallet::storage] - #[pallet::getter(fn slashing_allowed_for)] - pub type SlashingAllowedFor = StorageValue<_, SlashingSwitch, ValueQuery>; - - /// Allows flexibility in commission. Every validator has commission that should be in the range [0, Cap]. - #[pallet::storage] - #[pallet::getter(fn validator_commission_cap)] - pub type ValidatorCommissionCap = StorageValue<_, Perbill, ValueQuery>; - - #[pallet::storage] - pub type PolymeshStorageVersion = StorageValue<_, Version, ValueQuery>; - - // ----------------------------------------------------------------- - - #[pallet::genesis_config] - pub struct GenesisConfig { - pub validator_count: u32, - pub minimum_validator_count: u32, - pub invulnerables: Vec, - pub force_era: Forcing, - pub slash_reward_fraction: Perbill, - pub canceled_payout: BalanceOf, - pub stakers: Vec<( - IdentityId, - T::AccountId, - T::AccountId, - BalanceOf, - crate::StakerStatus, - )>, - pub min_nominator_bond: BalanceOf, - pub min_validator_bond: BalanceOf, - pub max_validator_count: Option, - pub max_nominator_count: Option, - pub slashing_allowed_for: SlashingSwitch, - pub validator_commission_cap: Perbill, - } - - #[cfg(feature = "std")] - impl Default for GenesisConfig { - fn default() -> Self { - GenesisConfig { - validator_count: Default::default(), - minimum_validator_count: Default::default(), - invulnerables: Default::default(), - force_era: Default::default(), - slash_reward_fraction: Default::default(), - canceled_payout: Default::default(), - stakers: Default::default(), - min_nominator_bond: Default::default(), - min_validator_bond: Default::default(), - max_validator_count: None, - max_nominator_count: None, - slashing_allowed_for: Default::default(), - validator_commission_cap: Default::default(), - } - } - } - - #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { - fn build(&self) { - ValidatorCount::::put(self.validator_count); - MinimumValidatorCount::::put(self.minimum_validator_count); - Invulnerables::::put(&self.invulnerables); - ForceEra::::put(self.force_era); - CanceledSlashPayout::::put(self.canceled_payout); - SlashRewardFraction::::put(self.slash_reward_fraction); - MinNominatorBond::::put(self.min_nominator_bond); - MinValidatorBond::::put(self.min_validator_bond); - SlashingAllowedFor::::put(self.slashing_allowed_for); - ValidatorCommissionCap::::put(self.validator_commission_cap); - PolymeshStorageVersion::::put(Version::new(2)); - if let Some(x) = self.max_validator_count { - MaxValidatorsCount::::put(x); - } - if let Some(x) = self.max_nominator_count { - MaxNominatorsCount::::put(x); - } - - for &(did, ref stash, ref controller, balance, ref status) in &self.stakers { - crate::log!( - trace, - "inserting genesis staker: {:?} => {:?} => {:?}", - stash, - balance, - status - ); - assert!( - T::Currency::free_balance(stash) >= balance, - "Stash does not have enough balance to bond." - ); - frame_support::assert_ok!(>::bond( - T::RuntimeOrigin::from(Some(stash.clone()).into()), - T::Lookup::unlookup(controller.clone()), - balance, - RewardDestination::Staked, - )); - frame_support::assert_ok!(match status { - crate::StakerStatus::Validator => { - // Polymesh change - // ----------------------------------------------------------------- - if >::permissioned_identity(&did).is_none() { - // Adding identity directly in the storage by assuming it is CDD'ed - PermissionedIdentity::::insert( - &did, - PermissionedIdentityPrefs::new(3), - ); - >::deposit_event(Event::::PermissionedIdentityAdded { - governance_councill_did: GC_DID, - validators_identity: did, - }); - } - // ----------------------------------------------------------------- - >::validate( - T::RuntimeOrigin::from(Some(controller.clone()).into()), - ValidatorPrefs { - commission: self.validator_commission_cap, - blocked: Default::default(), - }, - ) - } - crate::StakerStatus::Nominator(votes) => >::nominate( - T::RuntimeOrigin::from(Some(controller.clone()).into()), - votes - .iter() - .map(|l| T::Lookup::unlookup(l.clone())) - .collect(), - ), - _ => Ok(()), - }); - assert!( - ValidatorCount::::get() - <= ::MaxWinners::get() - ); - } - - // all voters are reported to the `VoterList`. - assert_eq!( - T::VoterList::count(), - Nominators::::count() + Validators::::count(), - "not all genesis stakers were inserted into sorted list provider, something is wrong." - ); - } - } - - #[pallet::event] - #[pallet::generate_deposit(pub(crate) fn deposit_event)] - pub enum Event { - /// The era payout has been set; the first balance is the validator-payout; the second is - /// the remainder from the maximum amount of reward. - EraPaid { - era_index: EraIndex, - validator_payout: BalanceOf, - remainder: BalanceOf, - }, - /// The nominator has been rewarded by this amount. - Rewarded { - identity: IdentityId, - stash: T::AccountId, - amount: BalanceOf, - }, - /// A staker (validator or nominator) has been slashed by the given amount. - Slashed { - staker: T::AccountId, - amount: BalanceOf, - }, - /// A slash for the given validator, for the given percentage of their stake, at the given - /// era as been reported. - SlashReported { - validator: T::AccountId, - fraction: Perbill, - slash_era: EraIndex, - }, - /// An old slashing report from a prior era was discarded because it could - /// not be processed. - OldSlashingReportDiscarded { session_index: SessionIndex }, - /// A new set of stakers was elected. - StakersElected, - /// An account has bonded this amount. \[stash, amount\] - /// - /// NOTE: This event is only emitted when funds are bonded via a dispatchable. Notably, - /// it will not be emitted for staking rewards when they are added to stake. - Bonded { - identity: IdentityId, - stash: T::AccountId, - amount: BalanceOf, - }, - /// An account has unbonded this amount. - Unbonded { - identity: IdentityId, - stash: T::AccountId, - amount: BalanceOf, - }, - /// An account has called `withdraw_unbonded` and removed unbonding chunks worth `Balance` - /// from the unlocking queue. - Withdrawn { - stash: T::AccountId, - amount: BalanceOf, - }, - /// A nominator has been kicked from a validator. - Kicked { - nominator: T::AccountId, - stash: T::AccountId, - }, - /// The election failed. No new era is planned. - StakingElectionFailed, - /// An account has stopped participating as either a validator or nominator. - Chilled { stash: T::AccountId }, - /// The stakers' rewards are getting paid. - PayoutStarted { - era_index: EraIndex, - validator_stash: T::AccountId, - }, - /// A validator has set their preferences. - ValidatorPrefsSet { - stash: T::AccountId, - prefs: ValidatorPrefs, - }, - /// A new force era mode was set. - ForceEra { mode: Forcing }, - - // Polymesh change - // ----------------------------------------------------------------- - /// User has updated their nominations. - Nominated { - nominator_identity: IdentityId, - stash: T::AccountId, - targets: Vec, - }, - /// An identity has issued a candidacy for becoming a validator. - PermissionedIdentityAdded { - governance_councill_did: IdentityId, - validators_identity: IdentityId, - }, - /// An identity has been removed from the permissioned identities pool. - PermissionedIdentityRemoved { - governance_councill_did: IdentityId, - validators_identity: IdentityId, - }, - /// Remove the nominators from the valid nominators when there CDD expired. - InvalidatedNominators { - governance_councill_did: IdentityId, - governance_councill_account: IdentityId, - expired_nominators: Vec, - }, - /// Slashing allowed has been updated. - SlashingAllowedForChanged { slashing_switch: SlashingSwitch }, - /// Reward scheduling interrupted. - RewardPaymentSchedulingInterrupted { - account_id: T::AccountId, - era: EraIndex, - error: DispatchError, - }, - /// Commission cap has been updated. - CommissionCapUpdated { - governance_councill_did: IdentityId, - old_commission_cap: Perbill, - new_commission_cap: Perbill, - }, - // ----------------------------------------------------------------- - } - - #[pallet::error] - pub enum Error { - /// Not a controller account. - NotController, - /// Not a stash account. - NotStash, - /// Stash is already bonded. - AlreadyBonded, - /// Controller is already paired. - AlreadyPaired, - /// Targets cannot be empty. - EmptyTargets, - /// Duplicate index. - DuplicateIndex, - /// Slash record index out of bounds. - InvalidSlashIndex, - /// Cannot have a validator or nominator role, with value less than the minimum defined by - /// governance (see `MinValidatorBond` and `MinNominatorBond`). If unbonding is the - /// intention, `chill` first to remove one's role as validator/nominator. - InsufficientBond, - /// Can not schedule more unlock chunks. - NoMoreChunks, - /// Can not rebond without unlocking chunks. - NoUnlockChunk, - /// Attempting to target a stash that still has funds. - FundedTarget, - /// Invalid era to reward. - InvalidEraToReward, - /// Invalid number of nominations. - InvalidNumberOfNominations, - /// Items are not sorted and unique. - NotSortedAndUnique, - /// Rewards for this era have already been claimed for this validator. - AlreadyClaimed, - /// Incorrect previous history depth input provided. - IncorrectHistoryDepth, - /// Incorrect number of slashing spans provided. - IncorrectSlashingSpans, - /// Internal state has become somehow corrupted and the operation cannot continue. - BadState, - /// Too many nomination targets supplied. - TooManyTargets, - /// A nomination target was supplied that was blocked or otherwise not a validator. - BadTarget, - /// The user has enough bond and thus cannot be chilled forcefully by an external person. - CannotChillOther, - /// There are too many nominators in the system. Governance needs to adjust the staking - /// settings to keep things safe for the runtime. - TooManyNominators, - /// There are too many validator candidates in the system. - TooManyValidators, - /// Commission is too low. Must be at least `MinCommission`. - CommissionTooLow, - /// Some bound is not met. - BoundNotMet, - /// Validator or nominator stash identity does not exist. - StashIdentityDoesNotExist, - /// Validator's stash identity is not permissioned. - StashIdentityNotPermissioned, - /// Nominator stash has not gone through CDD. - StashIdentityNotCDDed, - /// Permissioned validator already exists. - IdentityIsAlreadyPermissioned, - /// Identity has not gone throught CDD. - IdentityIsMissingCDD, - /// When the intended number of validators to run is >= 2/3 of `validator_count`. - IntendedCountIsExceedingConsensusLimit, - /// Identity was not found in the permissioned identity pool. - IdentityNotFound, - /// No validator was found for the given key. - ValidatorNotFound, - /// Validator commiission is above maximum. - CommissionTooHigh, - /// New commission must be different from previous commission. - CommissionUnchanged, - } - - #[pallet::hooks] - impl Hooks> for Pallet { - fn on_runtime_upgrade() -> frame_support::weights::Weight { - migrations::migrate_v13::() - } - - fn on_initialize(_now: BlockNumberFor) -> Weight { - // just return the weight of the on_finalize. - T::DbWeight::get().reads(1) - } - - fn on_finalize(_n: BlockNumberFor) { - // Set the start of the first era. - if let Some(mut active_era) = Self::active_era() { - if active_era.start.is_none() { - let now_as_millis_u64 = T::UnixTime::now().as_millis().saturated_into::(); - active_era.start = Some(now_as_millis_u64); - // This write only ever happens once, we don't include it in the weight in - // general - ActiveEra::::put(active_era); - } - } - // `on_finalize` weight is tracked in `on_initialize` - } - - fn integrity_test() { - // ensure that we funnel the correct value to the `DataProvider::MaxVotesPerVoter`; - assert_eq!( - T::MaxNominations::get(), - ::MaxVotesPerVoter::get() - ); - // and that MaxNominations is always greater than 1, since we count on this. - assert!(!T::MaxNominations::get().is_zero()); - - // ensure election results are always bounded with the same value - assert!( - ::MaxWinners::get() - == ::MaxWinners::get() - ); - - sp_std::if_std! { - sp_io::TestExternalities::new_empty().execute_with(|| - assert!( - T::SlashDeferDuration::get() < T::BondingDuration::get() || T::BondingDuration::get() == 0, - "As per documentation, slash defer duration ({}) should be less than bonding duration ({}).", - T::SlashDeferDuration::get(), - T::BondingDuration::get(), - ) - ); - } - } - - #[cfg(feature = "try-runtime")] - fn try_state(n: BlockNumberFor) -> Result<(), &'static str> { - Self::do_try_state(n) - } - } - - #[pallet::call] - impl Pallet { - /// Take the origin account as a stash and lock up `value` of its balance. `controller` will - /// be the account that controls it. - /// - /// `value` must be more than the `minimum_balance` specified by `T::Currency`. - /// - /// The dispatch origin for this call must be _Signed_ by the stash account. - /// - /// Emits `Bonded`. - /// ## Complexity - /// - Independent of the arguments. Moderate complexity. - /// - O(1). - /// - Three extra DB entries. - /// - /// NOTE: Two of the storage writes (`Self::bonded`, `Self::payee`) are _never_ cleaned - /// unless the `origin` falls below _existential deposit_ and gets removed as dust. - #[pallet::call_index(0)] - #[pallet::weight(::WeightInfo::bond())] - pub fn bond( - origin: OriginFor, - controller: AccountIdLookupOf, - #[pallet::compact] value: BalanceOf, - payee: RewardDestination, - ) -> DispatchResult { - let stash = ensure_signed(origin)?; - - if >::contains_key(&stash) { - return Err(Error::::AlreadyBonded.into()); - } - - // Polymesh added: - // An existing controller cannot become a stash. - if >::contains_key(&stash) { - return Err(Error::::AlreadyPaired.into()); - } - - let controller = T::Lookup::lookup(controller)?; - - if >::contains_key(&controller) { - return Err(Error::::AlreadyPaired.into()); - } - - // Reject a bond which is considered to be _dust_. - if value < T::Currency::minimum_balance() { - return Err(Error::::InsufficientBond.into()); - } - - frame_system::Pallet::::inc_consumers(&stash).map_err(|_| Error::::BadState)?; - - // You're auto-bonded forever, here. We might improve this by only bonding when - // you actually validate/nominate and remove once you unbond __everything__. - >::insert(&stash, &controller); - >::insert(&stash, payee); - - let current_era = CurrentEra::::get().unwrap_or(0); - let history_depth = T::HistoryDepth::get(); - let last_reward_era = current_era.saturating_sub(history_depth); - - let stash_balance = T::Currency::free_balance(&stash); - let value = value.min(stash_balance); - - // Polymesh change - // ----------------------------------------------------------------- - let stash_did = T::IdentityFn::get_identity(&stash).unwrap_or_default(); - Self::deposit_event(Event::::Bonded { - identity: stash_did, - stash: stash.clone(), - amount: value, - }); - // ----------------------------------------------------------------- - - let item = StakingLedger { - stash, - total: value, - active: value, - unlocking: Default::default(), - claimed_rewards: (last_reward_era..current_era) - .try_collect() - // Since last_reward_era is calculated as `current_era - - // HistoryDepth`, following bound is always expected to be - // satisfied. - .defensive_map_err(|_| Error::::BoundNotMet)?, - }; - Self::update_ledger(&controller, &item); - Ok(()) - } - - /// Add some extra amount that have appeared in the stash `free_balance` into the balance up - /// for staking. - /// - /// The dispatch origin for this call must be _Signed_ by the stash, not the controller. - /// - /// Use this if there are additional funds in your stash account that you wish to bond. - /// Unlike [`bond`](Self::bond) or [`unbond`](Self::unbond) this function does not impose - /// any limitation on the amount that can be added. - /// - /// Emits `Bonded`. - /// - /// ## Complexity - /// - Independent of the arguments. Insignificant complexity. - /// - O(1). - #[pallet::call_index(1)] - #[pallet::weight(::WeightInfo::bond_extra())] - pub fn bond_extra( - origin: OriginFor, - #[pallet::compact] max_additional: BalanceOf, - ) -> DispatchResult { - let stash = ensure_signed(origin)?; - - let controller = Self::bonded(&stash).ok_or(Error::::NotStash)?; - let mut ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; - - let stash_balance = T::Currency::free_balance(&stash); - if let Some(extra) = stash_balance.checked_sub(&ledger.total) { - let extra = extra.min(max_additional); - ledger.total += extra; - ledger.active += extra; - // Last check: the new active amount of ledger must be more than ED. - ensure!( - ledger.active >= T::Currency::minimum_balance(), - Error::::InsufficientBond - ); - - // NOTE: ledger must be updated prior to calling `Self::weight_of`. - Self::update_ledger(&controller, &ledger); - // update this staker in the sorted list, if they exist in it. - if T::VoterList::contains(&stash) { - let _ = - T::VoterList::on_update(&stash, Self::weight_of(&ledger.stash)).defensive(); - } - - // Polymesh change - // ----------------------------------------------------------------- - let stash_did = T::IdentityFn::get_identity(&stash).unwrap_or_default(); - Self::deposit_event(Event::::Bonded { - identity: stash_did, - stash, - amount: extra, - }); - // ----------------------------------------------------------------- - } - Ok(()) - } - - /// Schedule a portion of the stash to be unlocked ready for transfer out after the bond - /// period ends. If this leaves an amount actively bonded less than - /// T::Currency::minimum_balance(), then it is increased to the full amount. - /// - /// The dispatch origin for this call must be _Signed_ by the controller, not the stash. - /// - /// Once the unlock period is done, you can call `withdraw_unbonded` to actually move - /// the funds out of management ready for transfer. - /// - /// No more than a limited number of unlocking chunks (see `MaxUnlockingChunks`) - /// can co-exists at the same time. If there are no unlocking chunks slots available - /// [`Call::withdraw_unbonded`] is called to remove some of the chunks (if possible). - /// - /// If a user encounters the `InsufficientBond` error when calling this extrinsic, - /// they should call `chill` first in order to free up their bonded funds. - /// - /// Emits `Unbonded`. - /// - /// See also [`Call::withdraw_unbonded`]. - #[pallet::call_index(2)] - #[pallet::weight( - ::WeightInfo::withdraw_unbonded_kill(SPECULATIVE_NUM_SPANS).saturating_add(::WeightInfo::unbond())) - ] - pub fn unbond( - origin: OriginFor, - #[pallet::compact] value: BalanceOf, - ) -> DispatchResultWithPostInfo { - let controller = ensure_signed(origin)?; - let unlocking = Self::ledger(&controller) - .map(|l| l.unlocking.len()) - .ok_or(Error::::NotController)?; - - // if there are no unlocking chunks available, try to withdraw chunks older than - // `BondingDuration` to proceed with the unbonding. - let maybe_withdraw_weight = { - if unlocking == T::MaxUnlockingChunks::get() as usize { - let real_num_slashing_spans = - Self::slashing_spans(&controller).map_or(0, |s| s.iter().count()); - Some(Self::do_withdraw_unbonded( - &controller, - real_num_slashing_spans as u32, - )?) - } else { - None - } - }; - - // we need to fetch the ledger again because it may have been mutated in the call - // to `Self::do_withdraw_unbonded` above. - let mut ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; - - ensure!( - ledger.unlocking.len() < T::MaxUnlockingChunks::get() as usize, - Error::::NoMoreChunks, - ); - - Self::unbond_balance(controller, &mut ledger, value)?; - - let actual_weight = if let Some(withdraw_weight) = maybe_withdraw_weight { - Some(::WeightInfo::unbond().saturating_add(withdraw_weight)) - } else { - Some(::WeightInfo::unbond()) - }; - - Ok(actual_weight.into()) - } - - /// Remove any unlocked chunks from the `unlocking` queue from our management. - /// - /// This essentially frees up that balance to be used by the stash account to do - /// whatever it wants. - /// - /// The dispatch origin for this call must be _Signed_ by the controller. - /// - /// Emits `Withdrawn`. - /// - /// See also [`Call::unbond`]. - /// - /// ## Complexity - /// O(S) where S is the number of slashing spans to remove - /// NOTE: Weight annotation is the kill scenario, we refund otherwise. - #[pallet::call_index(3)] - #[pallet::weight(::WeightInfo::withdraw_unbonded_kill(*num_slashing_spans))] - pub fn withdraw_unbonded( - origin: OriginFor, - num_slashing_spans: u32, - ) -> DispatchResultWithPostInfo { - let controller = ensure_signed(origin)?; - - let actual_weight = Self::do_withdraw_unbonded(&controller, num_slashing_spans)?; - Ok(Some(actual_weight).into()) - } - - /// Declare the desire to validate for the origin controller. - /// - /// Effects will be felt at the beginning of the next era. - /// - /// The dispatch origin for this call must be _Signed_ by the controller, not the stash. - #[pallet::call_index(4)] - #[pallet::weight(::WeightInfo::validate())] - pub fn validate(origin: OriginFor, prefs: ValidatorPrefs) -> DispatchResult { - let controller = ensure_signed(origin)?; - - let ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; - - ensure!( - ledger.active >= MinValidatorBond::::get(), - Error::::InsufficientBond - ); - let stash = &ledger.stash; - - // ensure their commission is correct. - ensure!( - prefs.commission >= MinCommission::::get(), - Error::::CommissionTooLow - ); - - // Only check limits if they are not already a validator. - if !Validators::::contains_key(stash) { - // If this error is reached, we need to adjust the `MinValidatorBond` and start - // calling `chill_other`. Until then, we explicitly block new validators to protect - // the runtime. - if let Some(max_validators) = MaxValidatorsCount::::get() { - ensure!( - Validators::::count() < max_validators, - Error::::TooManyValidators - ); - } - // Polymesh change - // ----------------------------------------------------------------- - T::Permissioned::on_validate(stash, prefs.commission)?; - // ----------------------------------------------------------------- - } - - Self::do_remove_nominator(stash); - Self::do_add_validator(stash, prefs.clone()); - Self::deposit_event(Event::::ValidatorPrefsSet { - stash: ledger.stash, - prefs, - }); - - Ok(()) - } - - /// Declare the desire to nominate `targets` for the origin controller. - /// - /// Effects will be felt at the beginning of the next era. - /// - /// The dispatch origin for this call must be _Signed_ by the controller, not the stash. - /// - /// ## Complexity - /// - The transaction's complexity is proportional to the size of `targets` (N) - /// which is capped at CompactAssignments::LIMIT (T::MaxNominations). - /// - Both the reads and writes follow a similar pattern. - #[pallet::call_index(5)] - #[pallet::weight(::WeightInfo::nominate(targets.len() as u32))] - pub fn nominate( - origin: OriginFor, - targets: Vec>, - ) -> DispatchResult { - let controller = ensure_signed(origin)?; - - let ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; - ensure!( - ledger.active >= MinNominatorBond::::get(), - Error::::InsufficientBond - ); - let stash = &ledger.stash; - - // Only check limits if they are not already a nominator. - if !Nominators::::contains_key(stash) { - // If this error is reached, we need to adjust the `MinNominatorBond` and start - // calling `chill_other`. Until then, we explicitly block new nominators to protect - // the runtime. - if let Some(max_nominators) = MaxNominatorsCount::::get() { - ensure!( - Nominators::::count() < max_nominators, - Error::::TooManyNominators - ); - } - } - - ensure!(!targets.is_empty(), Error::::EmptyTargets); - ensure!( - targets.len() <= T::MaxNominations::get() as usize, - Error::::TooManyTargets - ); - - let old = Nominators::::get(stash).map_or_else(Vec::new, |x| x.targets.into_inner()); - - let targets: BoundedVec<_, _> = targets - .into_iter() - .map(|t| T::Lookup::lookup(t).map_err(DispatchError::from)) - .map(|n| { - n.and_then(|n| { - if old.contains(&n) || !Validators::::get(&n).blocked { - Ok(n) - } else { - Err(Error::::BadTarget.into()) - } - }) - }) - .collect::, _>>()? - .try_into() - .map_err(|_| Error::::TooManyNominators)?; - - // Polymesh change - // ----------------------------------------------------------------- - T::Permissioned::on_nominate(&stash)?; - - let nominator_did = pallet_identity::Pallet::::get_identity(&stash); - Self::deposit_event(Event::::Nominated { - nominator_identity: nominator_did.unwrap_or_default(), - stash: ledger.stash.clone(), - targets: targets.to_vec(), - }); - // ----------------------------------------------------------------- - - let nominations = Nominations { - targets, - // Initial nominations are considered submitted at era 0. See `Nominations` doc. - submitted_in: Self::current_era().unwrap_or(0), - suppressed: false, - }; - - Self::do_remove_validator(stash); - Self::do_add_nominator(stash, nominations); - Ok(()) - } - - /// Declare no desire to either validate or nominate. - /// - /// Effects will be felt at the beginning of the next era. - /// - /// The dispatch origin for this call must be _Signed_ by the controller, not the stash. - /// - /// ## Complexity - /// - Independent of the arguments. Insignificant complexity. - /// - Contains one read. - /// - Writes are limited to the `origin` account key. - #[pallet::call_index(6)] - #[pallet::weight(::WeightInfo::chill())] - pub fn chill(origin: OriginFor) -> DispatchResult { - let controller = ensure_signed(origin)?; - let ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; - Self::chill_stash(&ledger.stash); - Ok(()) - } - - /// (Re-)set the payment target for a controller. - /// - /// Effects will be felt instantly (as soon as this function is completed successfully). - /// - /// The dispatch origin for this call must be _Signed_ by the controller, not the stash. - /// - /// ## Complexity - /// - O(1) - /// - Independent of the arguments. Insignificant complexity. - /// - Contains a limited number of reads. - /// - Writes are limited to the `origin` account key. - /// --------- - #[pallet::call_index(7)] - #[pallet::weight(::WeightInfo::set_payee())] - pub fn set_payee( - origin: OriginFor, - payee: RewardDestination, - ) -> DispatchResult { - let controller = ensure_signed(origin)?; - let ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; - let stash = &ledger.stash; - >::insert(stash, payee); - Ok(()) - } - - /// (Re-)set the controller of a stash. - /// - /// Effects will be felt instantly (as soon as this function is completed successfully). - /// - /// The dispatch origin for this call must be _Signed_ by the stash, not the controller. - /// - /// ## Complexity - /// O(1) - /// - Independent of the arguments. Insignificant complexity. - /// - Contains a limited number of reads. - /// - Writes are limited to the `origin` account key. - #[pallet::call_index(8)] - #[pallet::weight(::WeightInfo::set_controller())] - pub fn set_controller( - origin: OriginFor, - controller: AccountIdLookupOf, - ) -> DispatchResult { - let stash = ensure_signed(origin)?; - let old_controller = Self::bonded(&stash).ok_or(Error::::NotStash)?; - let controller = T::Lookup::lookup(controller)?; - if >::contains_key(&controller) { - return Err(Error::::AlreadyPaired.into()); - } - - // Polymesh added: - // Prevents stashes which are controllers of another ledger from calling the extrinsic - if old_controller != stash { - if >::contains_key(&stash) { - return Err(Error::::BadState.into()); - } - } - - if controller != old_controller { - >::insert(&stash, &controller); - if let Some(l) = >::take(&old_controller) { - >::insert(&controller, l); - } - } - Ok(()) - } - - /// Sets the ideal number of validators. - /// - /// The dispatch origin must be Root. - /// - /// ## Complexity - /// O(1) - #[pallet::call_index(9)] - #[pallet::weight(::WeightInfo::set_validator_count())] - pub fn set_validator_count( - origin: OriginFor, - #[pallet::compact] new: u32, - ) -> DispatchResult { - ensure_root(origin)?; - // ensure new validator count does not exceed maximum winners - // support by election provider. - ensure!( - new <= ::MaxWinners::get(), - Error::::TooManyValidators - ); - ValidatorCount::::put(new); - Ok(()) - } - - /// Increments the ideal number of validators upto maximum of - /// `ElectionProviderBase::MaxWinners`. - /// - /// The dispatch origin must be Root. - /// - /// ## Complexity - /// Same as [`Self::set_validator_count`]. - #[pallet::call_index(10)] - #[pallet::weight(::WeightInfo::set_validator_count())] - pub fn increase_validator_count( - origin: OriginFor, - #[pallet::compact] additional: u32, - ) -> DispatchResult { - ensure_root(origin)?; - let old = ValidatorCount::::get(); - let new = old - .checked_add(additional) - .ok_or(ArithmeticError::Overflow)?; - ensure!( - new <= ::MaxWinners::get(), - Error::::TooManyValidators - ); - - ValidatorCount::::put(new); - Ok(()) - } - - /// Scale up the ideal number of validators by a factor upto maximum of - /// `ElectionProviderBase::MaxWinners`. - /// - /// The dispatch origin must be Root. - /// - /// ## Complexity - /// Same as [`Self::set_validator_count`]. - #[pallet::call_index(11)] - #[pallet::weight(::WeightInfo::set_validator_count())] - pub fn scale_validator_count(origin: OriginFor, factor: Percent) -> DispatchResult { - ensure_root(origin)?; - let old = ValidatorCount::::get(); - let new = old - .checked_add(factor.mul_floor(old)) - .ok_or(ArithmeticError::Overflow)?; - - ensure!( - new <= ::MaxWinners::get(), - Error::::TooManyValidators - ); - - ValidatorCount::::put(new); - Ok(()) - } - - /// Force there to be no new eras indefinitely. - /// - /// The dispatch origin must be Root. - /// - /// # Warning - /// - /// The election process starts multiple blocks before the end of the era. - /// Thus the election process may be ongoing when this is called. In this case the - /// election will continue until the next era is triggered. - /// - /// ## Complexity - /// - No arguments. - /// - Weight: O(1) - #[pallet::call_index(12)] - #[pallet::weight(::WeightInfo::force_no_eras())] - pub fn force_no_eras(origin: OriginFor) -> DispatchResult { - ensure_root(origin)?; - Self::set_force_era(Forcing::ForceNone); - Ok(()) - } - - /// Force there to be a new era at the end of the next session. After this, it will be - /// reset to normal (non-forced) behaviour. - /// - /// The dispatch origin must be Root. - /// - /// # Warning - /// - /// The election process starts multiple blocks before the end of the era. - /// If this is called just before a new era is triggered, the election process may not - /// have enough blocks to get a result. - /// - /// ## Complexity - /// - No arguments. - /// - Weight: O(1) - #[pallet::call_index(13)] - #[pallet::weight(::WeightInfo::force_new_era())] - pub fn force_new_era(origin: OriginFor) -> DispatchResult { - ensure_root(origin)?; - Self::set_force_era(Forcing::ForceNew); - Ok(()) - } - - /// Set the validators who cannot be slashed (if any). - /// - /// The dispatch origin must be Root. - #[pallet::call_index(14)] - #[pallet::weight(::WeightInfo::set_invulnerables(invulnerables.len() as u32))] - pub fn set_invulnerables( - origin: OriginFor, - invulnerables: Vec, - ) -> DispatchResult { - ensure_root(origin)?; - >::put(invulnerables); - Ok(()) - } - - /// Force a current staker to become completely unstaked, immediately. - /// - /// The dispatch origin must be Root. - #[pallet::call_index(15)] - #[pallet::weight(::WeightInfo::force_unstake(*num_slashing_spans))] - pub fn force_unstake( - origin: OriginFor, - stash: T::AccountId, - num_slashing_spans: u32, - ) -> DispatchResult { - ensure_root(origin)?; - - // Remove all staking-related information. - Self::kill_stash(&stash, num_slashing_spans)?; - - // Remove the lock. - T::Currency::remove_lock(STAKING_ID, &stash); - Ok(()) - } - - /// Force there to be a new era at the end of sessions indefinitely. - /// - /// The dispatch origin must be Root. - /// - /// # Warning - /// - /// The election process starts multiple blocks before the end of the era. - /// If this is called just before a new era is triggered, the election process may not - /// have enough blocks to get a result. - #[pallet::call_index(16)] - #[pallet::weight(::WeightInfo::force_new_era_always())] - pub fn force_new_era_always(origin: OriginFor) -> DispatchResult { - ensure_root(origin)?; - Self::set_force_era(Forcing::ForceAlways); - Ok(()) - } - - /// Cancel enactment of a deferred slash. - /// - /// Can be called by the `T::AdminOrigin`. - /// - /// Parameters: era and indices of the slashes for that era to kill. - #[pallet::call_index(17)] - #[pallet::weight(::WeightInfo::cancel_deferred_slash(slash_indices.len() as u32))] - pub fn cancel_deferred_slash( - origin: OriginFor, - era: EraIndex, - slash_indices: Vec, - ) -> DispatchResult { - T::AdminOrigin::ensure_origin(origin)?; - - ensure!(!slash_indices.is_empty(), Error::::EmptyTargets); - ensure!( - is_sorted_and_unique(&slash_indices), - Error::::NotSortedAndUnique - ); - - let mut unapplied = ::UnappliedSlashes::get(&era); - let last_item = slash_indices[slash_indices.len() - 1]; - ensure!( - (last_item as usize) < unapplied.len(), - Error::::InvalidSlashIndex - ); - - for (removed, index) in slash_indices.into_iter().enumerate() { - let index = (index as usize) - removed; - unapplied.remove(index); - } - - ::UnappliedSlashes::insert(&era, &unapplied); - Ok(()) - } - - /// Pay out all the stakers behind a single validator for a single era. - /// - /// - `validator_stash` is the stash account of the validator. Their nominators, up to - /// `T::MaxNominatorRewardedPerValidator`, will also receive their rewards. - /// - `era` may be any era between `[current_era - history_depth; current_era]`. - /// - /// The origin of this call must be _Signed_. Any account can call this function, even if - /// it is not one of the stakers. - /// - /// ## Complexity - /// - At most O(MaxNominatorRewardedPerValidator). - #[pallet::call_index(18)] - #[pallet::weight(::WeightInfo::payout_stakers_alive_staked( - T::MaxNominatorRewardedPerValidator::get() - ))] - pub fn payout_stakers( - origin: OriginFor, - validator_stash: T::AccountId, - era: EraIndex, - ) -> DispatchResultWithPostInfo { - ensure_signed(origin)?; - Self::do_payout_stakers(validator_stash, era) - } - - /// Rebond a portion of the stash scheduled to be unlocked. - /// - /// The dispatch origin must be signed by the controller. - /// - /// ## Complexity - /// - Time complexity: O(L), where L is unlocking chunks - /// - Bounded by `MaxUnlockingChunks`. - #[pallet::call_index(19)] - #[pallet::weight(::WeightInfo::rebond(T::MaxUnlockingChunks::get() as u32))] - pub fn rebond( - origin: OriginFor, - #[pallet::compact] value: BalanceOf, - ) -> DispatchResultWithPostInfo { - let controller = ensure_signed(origin)?; - let ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; - ensure!(!ledger.unlocking.is_empty(), Error::::NoUnlockChunk); - - let initial_unlocking = ledger.unlocking.len() as u32; - let (ledger, rebonded_value) = ledger.rebond(value); - // Last check: the new active amount of ledger must be more than ED. - ensure!( - ledger.active >= T::Currency::minimum_balance(), - Error::::InsufficientBond - ); - - Self::deposit_event(Event::::Bonded { - identity: IdentityId::default(), - stash: ledger.stash.clone(), - amount: rebonded_value, - }); - - // NOTE: ledger must be updated prior to calling `Self::weight_of`. - Self::update_ledger(&controller, &ledger); - if T::VoterList::contains(&ledger.stash) { - let _ = T::VoterList::on_update(&ledger.stash, Self::weight_of(&ledger.stash)) - .defensive(); - } - - let removed_chunks = 1u32 // for the case where the last iterated chunk is not removed - .saturating_add(initial_unlocking) - .saturating_sub(ledger.unlocking.len() as u32); - Ok(Some(::WeightInfo::rebond(removed_chunks)).into()) - } - - /// Remove all data structures concerning a staker/stash once it is at a state where it can - /// be considered `dust` in the staking system. The requirements are: - /// - /// 1. the `total_balance` of the stash is below existential deposit. - /// 2. or, the `ledger.total` of the stash is below existential deposit. - /// - /// The former can happen in cases like a slash; the latter when a fully unbonded account - /// is still receiving staking rewards in `RewardDestination::Staked`. - /// - /// It can be called by anyone, as long as `stash` meets the above requirements. - /// - /// Refunds the transaction fees upon successful execution. - #[pallet::call_index(20)] - #[pallet::weight(::WeightInfo::reap_stash(*num_slashing_spans))] - pub fn reap_stash( - origin: OriginFor, - stash: T::AccountId, - num_slashing_spans: u32, - ) -> DispatchResultWithPostInfo { - let _ = ensure_signed(origin)?; - - // Polymesh change: - // use T::Permissioned::reapable(amount) - let reapable = T::Permissioned::reapable(T::Currency::total_balance(&stash)) - || T::Permissioned::reapable( - Self::ledger(Self::bonded(stash.clone()).ok_or(Error::::NotStash)?) - .map(|l| l.total) - .unwrap_or_default(), - ); - ensure!(reapable, Error::::FundedTarget); - - Self::kill_stash(&stash, num_slashing_spans)?; - T::Currency::remove_lock(STAKING_ID, &stash); - - Ok(Pays::No.into()) - } - - /// Remove the given nominations from the calling validator. - /// - /// Effects will be felt at the beginning of the next era. - /// - /// The dispatch origin for this call must be _Signed_ by the controller, not the stash. - /// - /// - `who`: A list of nominator stash accounts who are nominating this validator which - /// should no longer be nominating this validator. - /// - /// Note: Making this call only makes sense if you first set the validator preferences to - /// block any further nominations. - #[pallet::call_index(21)] - #[pallet::weight(::WeightInfo::kick(who.len() as u32))] - pub fn kick(origin: OriginFor, who: Vec>) -> DispatchResult { - let controller = ensure_signed(origin)?; - let ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; - let stash = &ledger.stash; - - for nom_stash in who - .into_iter() - .map(T::Lookup::lookup) - .collect::, _>>()? - .into_iter() - { - Nominators::::mutate(&nom_stash, |maybe_nom| { - if let Some(ref mut nom) = maybe_nom { - if let Some(pos) = nom.targets.iter().position(|v| v == stash) { - nom.targets.swap_remove(pos); - Self::deposit_event(Event::::Kicked { - nominator: nom_stash.clone(), - stash: stash.clone(), - }); - } - } - }); - } - - Ok(()) - } - - /// Update the various staking configurations . - /// - /// * `min_nominator_bond`: The minimum active bond needed to be a nominator. - /// * `min_validator_bond`: The minimum active bond needed to be a validator. - /// * `max_nominator_count`: The max number of users who can be a nominator at once. When - /// set to `None`, no limit is enforced. - /// * `max_validator_count`: The max number of users who can be a validator at once. When - /// set to `None`, no limit is enforced. - /// * `chill_threshold`: The ratio of `max_nominator_count` or `max_validator_count` which - /// should be filled in order for the `chill_other` transaction to work. - /// * `min_commission`: The minimum amount of commission that each validators must maintain. - /// This is checked only upon calling `validate`. Existing validators are not affected. - /// - /// RuntimeOrigin must be Root to call this function. - /// - /// NOTE: Existing nominators and validators will not be affected by this update. - /// to kick people under the new limits, `chill_other` should be called. - // We assume the worst case for this call is either: all items are set or all items are - // removed. - #[pallet::call_index(22)] - #[pallet::weight( - ::WeightInfo::set_staking_configs_all_set() - .max(::WeightInfo::set_staking_configs_all_remove()) - )] - pub fn set_staking_configs( - origin: OriginFor, - min_nominator_bond: ConfigOp>, - min_validator_bond: ConfigOp>, - max_nominator_count: ConfigOp, - max_validator_count: ConfigOp, - chill_threshold: ConfigOp, - min_commission: ConfigOp, - ) -> DispatchResult { - ensure_root(origin)?; - - macro_rules! config_op_exp { - ($storage:ty, $op:ident) => { - match $op { - ConfigOp::Noop => (), - ConfigOp::Set(v) => <$storage>::put(v), - ConfigOp::Remove => <$storage>::kill(), - } - }; - } - - config_op_exp!(MinNominatorBond, min_nominator_bond); - config_op_exp!(MinValidatorBond, min_validator_bond); - config_op_exp!(MaxNominatorsCount, max_nominator_count); - config_op_exp!(MaxValidatorsCount, max_validator_count); - config_op_exp!(ChillThreshold, chill_threshold); - config_op_exp!(MinCommission, min_commission); - Ok(()) - } - /// Declare a `controller` to stop participating as either a validator or nominator. - /// - /// Effects will be felt at the beginning of the next era. - /// - /// The dispatch origin for this call must be _Signed_, but can be called by anyone. - /// - /// If the caller is the same as the controller being targeted, then no further checks are - /// enforced, and this function behaves just like `chill`. - /// - /// If the caller is different than the controller being targeted, the following conditions - /// must be met: - /// - /// * `controller` must belong to a nominator who has become non-decodable, - /// - /// Or: - /// - /// * A `ChillThreshold` must be set and checked which defines how close to the max - /// nominators or validators we must reach before users can start chilling one-another. - /// * A `MaxNominatorCount` and `MaxValidatorCount` must be set which is used to determine - /// how close we are to the threshold. - /// * A `MinNominatorBond` and `MinValidatorBond` must be set and checked, which determines - /// if this is a person that should be chilled because they have not met the threshold - /// bond required. - /// - /// This can be helpful if bond requirements are updated, and we need to remove old users - /// who do not satisfy these requirements. - #[pallet::call_index(23)] - #[pallet::weight(::WeightInfo::chill_other())] - pub fn chill_other(origin: OriginFor, controller: T::AccountId) -> DispatchResult { - // Anyone can call this function. - let caller = ensure_signed(origin)?; - let ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; - let stash = ledger.stash; - - // In order for one user to chill another user, the following conditions must be met: - // - // * `controller` belongs to a nominator who has become non-decodable, - // - // Or - // - // * A `ChillThreshold` is set which defines how close to the max nominators or - // validators we must reach before users can start chilling one-another. - // * A `MaxNominatorCount` and `MaxValidatorCount` which is used to determine how close - // we are to the threshold. - // * A `MinNominatorBond` and `MinValidatorBond` which is the final condition checked to - // determine this is a person that should be chilled because they have not met the - // threshold bond required. - // - // Otherwise, if caller is the same as the controller, this is just like `chill`. - - if Nominators::::contains_key(&stash) && Nominators::::get(&stash).is_none() { - Self::chill_stash(&stash); - return Ok(()); - } - - if caller != controller { - let threshold = ChillThreshold::::get().ok_or(Error::::CannotChillOther)?; - let min_active_bond = if Nominators::::contains_key(&stash) { - let max_nominator_count = - MaxNominatorsCount::::get().ok_or(Error::::CannotChillOther)?; - let current_nominator_count = Nominators::::count(); - ensure!( - threshold * max_nominator_count < current_nominator_count, - Error::::CannotChillOther - ); - MinNominatorBond::::get() - } else if Validators::::contains_key(&stash) { - let max_validator_count = - MaxValidatorsCount::::get().ok_or(Error::::CannotChillOther)?; - let current_validator_count = Validators::::count(); - ensure!( - threshold * max_validator_count < current_validator_count, - Error::::CannotChillOther - ); - MinValidatorBond::::get() - } else { - Zero::zero() - }; - - ensure!( - ledger.active < min_active_bond, - Error::::CannotChillOther - ); - } - - Self::chill_stash(&stash); - Ok(()) - } - - /// Force a validator to have at least the minimum commission. This will not affect a - /// validator who already has a commission greater than or equal to the minimum. Any account - /// can call this. - #[pallet::call_index(24)] - #[pallet::weight(::WeightInfo::force_apply_min_commission())] - pub fn force_apply_min_commission( - origin: OriginFor, - validator_stash: T::AccountId, - ) -> DispatchResult { - ensure_signed(origin)?; - let min_commission = MinCommission::::get(); - Validators::::try_mutate_exists(validator_stash, |maybe_prefs| { - maybe_prefs - .as_mut() - .map(|prefs| { - (prefs.commission < min_commission) - .then(|| prefs.commission = min_commission) - }) - .ok_or(Error::::NotStash) - })?; - Ok(()) - } - - /// Sets the minimum amount of commission that each validators must maintain. - /// - /// This call has lower privilege requirements than `set_staking_config` and can be called - /// by the `T::AdminOrigin`. Root can always call this. - #[pallet::call_index(25)] - #[pallet::weight(::WeightInfo::set_min_commission())] - pub fn set_min_commission(origin: OriginFor, new: Perbill) -> DispatchResult { - T::AdminOrigin::ensure_origin(origin)?; - MinCommission::::put(new); - Ok(()) - } - - // Polymesh change - // ----------------------------------------------------------------- - - /// Adds a permissioned identity and sets its preferences. - /// - /// The dispatch origin must be Root. - #[pallet::call_index(26)] - #[pallet::weight(::WeightInfo::add_permissioned_validator())] - pub fn add_permissioned_validator( - origin: OriginFor, - identity: IdentityId, - intended_count: Option, - ) -> DispatchResult { - Self::base_add_permissioned_validator(origin, identity, intended_count) - } - - /// Remove an identity from the pool of (wannabe) validator identities. Effects are known in the next session. - /// - /// The dispatch origin must be Root. - /// - /// # Arguments - /// * origin Required origin for removing a potential validator. - /// * identity Validator's IdentityId. - #[pallet::call_index(27)] - #[pallet::weight(::WeightInfo::remove_permissioned_validator())] - pub fn remove_permissioned_validator( - origin: OriginFor, - identity: IdentityId, - ) -> DispatchResult { - Self::base_remove_permissioned_validator(origin, identity) - } - - #[pallet::call_index(29)] - #[pallet::weight(::WeightInfo::payout_stakers_alive_staked( - T::MaxNominatorRewardedPerValidator::get() - ))] - pub fn payout_stakers_by_system( - origin: OriginFor, - validator_stash: T::AccountId, - era: EraIndex, - ) -> DispatchResultWithPostInfo { - Self::base_payout_stakers_by_system(origin, validator_stash, era) - } - - /// Switch slashing status on the basis of given `slashing_switch`. Can only be called by root. - #[pallet::call_index(30)] - #[pallet::weight(::WeightInfo::change_slashing_allowed_for())] - pub fn change_slashing_allowed_for( - origin: OriginFor, - slashing_switch: SlashingSwitch, - ) -> DispatchResult { - Self::base_change_slashing_allowed_for(origin, slashing_switch) - } - - /// Sets the intended count to `new_intended_count` for the given `identity`. - #[pallet::call_index(31)] - #[pallet::weight(::WeightInfo::update_permissioned_validator_intended_count())] - pub fn update_permissioned_validator_intended_count( - origin: OriginFor, - identity: IdentityId, - new_intended_count: u32, - ) -> DispatchResult { - Self::base_update_permissioned_validator_intended_count( - origin, - identity, - new_intended_count, - ) - } - - /// Governance council forcefully chills a validator. Effects will be felt at the beginning of the next era. - #[pallet::call_index(32)] - #[pallet::weight(::WeightInfo::chill_from_governance(stash_keys.len() as u32))] - pub fn chill_from_governance( - origin: OriginFor, - identity: IdentityId, - stash_keys: Vec, - ) -> DispatchResult { - Self::base_chill_from_governance(origin, identity, stash_keys) - } - - /// Changes commission rate which applies to all validators. Only Governance - /// committee is allowed to change this value. - /// - /// # Arguments - /// * `new_cap` the new commission cap. - #[pallet::call_index(33)] - #[pallet::weight(::WeightInfo::set_commission_cap(150))] - pub fn set_commission_cap(origin: OriginFor, new_cap: Perbill) -> DispatchResult { - Self::base_set_commission_cap(origin, new_cap) - } - // ----------------------------------------------------------------- - } -} - -/// Check that list is sorted and has no duplicates. -fn is_sorted_and_unique(list: &[u32]) -> bool { - list.windows(2).all(|w| w[0] < w[1]) -} diff --git a/pallets/staking/src/slashing.rs b/pallets/staking/src/slashing.rs deleted file mode 100644 index e7ca928177..0000000000 --- a/pallets/staking/src/slashing.rs +++ /dev/null @@ -1,996 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! A slashing implementation for NPoS systems. -//! -//! For the purposes of the economic model, it is easiest to think of each validator as a nominator -//! which nominates only its own identity. -//! -//! The act of nomination signals intent to unify economic identity with the validator - to take -//! part in the rewards of a job well done, and to take part in the punishment of a job done badly. -//! -//! There are 3 main difficulties to account for with slashing in NPoS: -//! - A nominator can nominate multiple validators and be slashed via any of them. -//! - Until slashed, stake is reused from era to era. Nominating with N coins for E eras in a row -//! does not mean you have N*E coins to be slashed - you've only ever had N. -//! - Slashable offences can be found after the fact and out of order. -//! -//! The algorithm implemented in this module tries to balance these 3 difficulties. -//! -//! First, we only slash participants for the _maximum_ slash they receive in some time period, -//! rather than the sum. This ensures a protection from overslashing. -//! -//! Second, we do not want the time period (or "span") that the maximum is computed -//! over to last indefinitely. That would allow participants to begin acting with -//! impunity after some point, fearing no further repercussions. For that reason, we -//! automatically "chill" validators and withdraw a nominator's nomination after a slashing event, -//! requiring them to re-enlist voluntarily (acknowledging the slash) and begin a new -//! slashing span. -//! -//! Typically, you will have a single slashing event per slashing span. Only in the case -//! where a validator releases many misbehaviors at once, or goes "back in time" to misbehave in -//! eras that have already passed, would you encounter situations where a slashing span -//! has multiple misbehaviors. However, accounting for such cases is necessary -//! to deter a class of "rage-quit" attacks. -//! -//! Based on research at - -use crate::{ - types::PermissionedStaking, BalanceOf, Config, Error, Exposure, NegativeImbalanceOf, Pallet, - Perbill, SessionInterface, Store, UnappliedSlash, -}; -use codec::{Decode, Encode, MaxEncodedLen}; -use frame_support::{ - ensure, - traits::{Currency, Defensive, Get, Imbalance, OnUnbalanced}, -}; -use scale_info::TypeInfo; -use sp_runtime::{ - traits::{Saturating, Zero}, - DispatchResult, RuntimeDebug, -}; -use sp_staking::{offence::DisableStrategy, EraIndex}; -use sp_std::vec::Vec; - -/// The proportion of the slashing reward to be paid out on the first slashing detection. -/// This is f_1 in the paper. -const REWARD_F1: Perbill = Perbill::from_percent(50); - -/// The index of a slashing span - unique to each stash. -pub type SpanIndex = u32; - -// A range of start..end eras for a slashing span. -#[derive(Encode, Decode, TypeInfo)] -#[cfg_attr(feature = "std", derive(Debug, PartialEq))] -pub struct SlashingSpan { - pub index: SpanIndex, - pub start: EraIndex, - pub length: Option, // the ongoing slashing span has indeterminate length. -} - -impl SlashingSpan { - fn contains_era(&self, era: EraIndex) -> bool { - self.start <= era && self.length.map_or(true, |l| self.start + l > era) - } -} - -/// An encoding of all of a nominator's slashing spans. -#[derive(Encode, Decode, RuntimeDebug, TypeInfo)] -pub struct SlashingSpans { - // the index of the current slashing span of the nominator. different for - // every stash, resets when the account hits free balance 0. - span_index: SpanIndex, - // the start era of the most recent (ongoing) slashing span. - last_start: EraIndex, - // the last era at which a non-zero slash occurred. - last_nonzero_slash: EraIndex, - // all prior slashing spans' start indices, in reverse order (most recent first) - // encoded as offsets relative to the slashing span after it. - prior: Vec, -} - -impl SlashingSpans { - // creates a new record of slashing spans for a stash, starting at the beginning - // of the bonding period, relative to now. - pub(crate) fn new(window_start: EraIndex) -> Self { - SlashingSpans { - span_index: 0, - last_start: window_start, - // initialize to zero, as this structure is lazily created until - // the first slash is applied. setting equal to `window_start` would - // put a time limit on nominations. - last_nonzero_slash: 0, - prior: Vec::new(), - } - } - - // update the slashing spans to reflect the start of a new span at the era after `now` - // returns `true` if a new span was started, `false` otherwise. `false` indicates - // that internal state is unchanged. - pub(crate) fn end_span(&mut self, now: EraIndex) -> bool { - let next_start = now + 1; - if next_start <= self.last_start { - return false; - } - - let last_length = next_start - self.last_start; - self.prior.insert(0, last_length); - self.last_start = next_start; - self.span_index += 1; - true - } - - // an iterator over all slashing spans in _reverse_ order - most recent first. - pub fn iter(&'_ self) -> impl Iterator + '_ { - let mut last_start = self.last_start; - let mut index = self.span_index; - let last = SlashingSpan { - index, - start: last_start, - length: None, - }; - let prior = self.prior.iter().cloned().map(move |length| { - let start = last_start - length; - last_start = start; - index -= 1; - - SlashingSpan { - index, - start, - length: Some(length), - } - }); - - sp_std::iter::once(last).chain(prior) - } - - /// Yields the era index where the most recent non-zero slash occurred. - pub fn last_nonzero_slash(&self) -> EraIndex { - self.last_nonzero_slash - } - - // prune the slashing spans against a window, whose start era index is given. - // - // If this returns `Some`, then it includes a range start..end of all the span - // indices which were pruned. - fn prune(&mut self, window_start: EraIndex) -> Option<(SpanIndex, SpanIndex)> { - let old_idx = self - .iter() - .skip(1) // skip ongoing span. - .position(|span| { - span.length - .map_or(false, |len| span.start + len <= window_start) - }); - - let earliest_span_index = self.span_index - self.prior.len() as SpanIndex; - let pruned = match old_idx { - Some(o) => { - self.prior.truncate(o); - let new_earliest = self.span_index - self.prior.len() as SpanIndex; - Some((earliest_span_index, new_earliest)) - } - None => None, - }; - - // readjust the ongoing span, if it started before the beginning of the window. - self.last_start = sp_std::cmp::max(self.last_start, window_start); - pruned - } -} - -/// A slashing-span record for a particular stash. -#[derive(Encode, Decode, Default, TypeInfo, MaxEncodedLen)] -pub struct SpanRecord { - slashed: Balance, - paid_out: Balance, -} - -impl SpanRecord { - /// The value of stash balance slashed in this span. - pub fn amount(&self) -> &Balance { - &self.slashed - } -} - -/// Parameters for performing a slash. -#[derive(Clone)] -pub(crate) struct SlashParams<'a, T: 'a + Config> { - /// The stash account being slashed. - pub(crate) stash: &'a T::AccountId, - /// The proportion of the slash. - pub(crate) slash: Perbill, - /// The exposure of the stash and all nominators. - pub(crate) exposure: &'a Exposure>, - /// The era where the offence occurred. - pub(crate) slash_era: EraIndex, - /// The first era in the current bonding period. - pub(crate) window_start: EraIndex, - /// The current era. - pub(crate) now: EraIndex, - /// The maximum percentage of a slash that ever gets paid out. - /// This is f_inf in the paper. - pub(crate) reward_proportion: Perbill, - /// When to disable offenders. - pub(crate) disable_strategy: DisableStrategy, -} - -/// Computes a slash of a validator and nominators. It returns an unapplied -/// record to be applied at some later point. Slashing metadata is updated in storage, -/// since unapplied records are only rarely intended to be dropped. -/// -/// The pending slash record returned does not have initialized reporters. Those have -/// to be set at a higher level, if any. -pub(crate) fn compute_slash( - params: SlashParams, -) -> Option>> { - let mut reward_payout = Zero::zero(); - let mut val_slashed = Zero::zero(); - - // is the slash amount here a maximum for the era? - let own_slash = params.slash * params.exposure.own; - if params.slash * params.exposure.total == Zero::zero() { - // kick out the validator even if they won't be slashed, - // as long as the misbehavior is from their most recent slashing span. - kick_out_if_recent::(params); - return None; - } - - let prior_slash_p = - as Store>::ValidatorSlashInEra::get(¶ms.slash_era, params.stash) - .map_or(Zero::zero(), |(prior_slash_proportion, _)| { - prior_slash_proportion - }); - - // compare slash proportions rather than slash values to avoid issues due to rounding - // error. - if params.slash.deconstruct() > prior_slash_p.deconstruct() { - as Store>::ValidatorSlashInEra::insert( - ¶ms.slash_era, - params.stash, - &(params.slash, own_slash), - ); - } else { - // we slash based on the max in era - this new event is not the max, - // so neither the validator or any nominators will need an update. - // - // this does lead to a divergence of our system from the paper, which - // pays out some reward even if the latest report is not max-in-era. - // we opt to avoid the nominator lookups and edits and leave more rewards - // for more drastic misbehavior. - return None; - } - - // apply slash to validator. - { - let mut spans = fetch_spans::( - params.stash, - params.window_start, - &mut reward_payout, - &mut val_slashed, - params.reward_proportion, - ); - - let target_span = spans.compare_and_update_span_slash(params.slash_era, own_slash); - - if target_span == Some(spans.span_index()) { - // misbehavior occurred within the current slashing span - take appropriate - // actions. - - // chill the validator - it misbehaved in the current span and should - // not continue in the next election. also end the slashing span. - spans.end_span(params.now); - >::chill_stash(params.stash); - } - } - - let disable_when_slashed = params.disable_strategy != DisableStrategy::Never; - add_offending_validator::(params.stash, disable_when_slashed); - - // Polymesh change - // ----------------------------------------------------------------- - let mut nominators_slashed = Vec::new(); - if T::Permissioned::slash_nominators() { - reward_payout += - slash_nominators::(params.clone(), prior_slash_p, &mut nominators_slashed); - } - // ----------------------------------------------------------------- - - Some(UnappliedSlash { - validator: params.stash.clone(), - own: val_slashed, - others: nominators_slashed, - reporters: Vec::new(), - payout: reward_payout, - }) -} - -// doesn't apply any slash, but kicks out the validator if the misbehavior is from -// the most recent slashing span. -fn kick_out_if_recent(params: SlashParams) { - // these are not updated by era-span or end-span. - let mut reward_payout = Zero::zero(); - let mut val_slashed = Zero::zero(); - let mut spans = fetch_spans::( - params.stash, - params.window_start, - &mut reward_payout, - &mut val_slashed, - params.reward_proportion, - ); - - if spans.era_span(params.slash_era).map(|s| s.index) == Some(spans.span_index()) { - spans.end_span(params.now); - >::chill_stash(params.stash); - } - - let disable_without_slash = params.disable_strategy == DisableStrategy::Always; - add_offending_validator::(params.stash, disable_without_slash); -} - -/// Add the given validator to the offenders list and optionally disable it. -/// If after adding the validator `OffendingValidatorsThreshold` is reached -/// a new era will be forced. -fn add_offending_validator(stash: &T::AccountId, disable: bool) { - as Store>::OffendingValidators::mutate(|offending| { - let validators = T::SessionInterface::validators(); - let validator_index = match validators.iter().position(|i| i == stash) { - Some(index) => index, - None => return, - }; - - let validator_index_u32 = validator_index as u32; - - match offending.binary_search_by_key(&validator_index_u32, |(index, _)| *index) { - // this is a new offending validator - Err(index) => { - offending.insert(index, (validator_index_u32, disable)); - - let offending_threshold = - T::OffendingValidatorsThreshold::get() * validators.len() as u32; - - if offending.len() >= offending_threshold as usize { - // force a new era, to select a new validator set - >::ensure_new_era() - } - - if disable { - T::SessionInterface::disable_validator(validator_index_u32); - } - } - Ok(index) => { - if disable && !offending[index].1 { - // the validator had previously offended without being disabled, - // let's make sure we disable it now - offending[index].1 = true; - T::SessionInterface::disable_validator(validator_index_u32); - } - } - } - }); -} - -/// Slash nominators. Accepts general parameters and the prior slash percentage of the validator. -/// -/// Returns the amount of reward to pay out. -fn slash_nominators( - params: SlashParams, - prior_slash_p: Perbill, - nominators_slashed: &mut Vec<(T::AccountId, BalanceOf)>, -) -> BalanceOf { - let mut reward_payout = Zero::zero(); - - nominators_slashed.reserve(params.exposure.others.len()); - for nominator in ¶ms.exposure.others { - let stash = &nominator.who; - let mut nom_slashed = Zero::zero(); - - // the era slash of a nominator always grows, if the validator - // had a new max slash for the era. - let era_slash = { - let own_slash_prior = prior_slash_p * nominator.value; - let own_slash_by_validator = params.slash * nominator.value; - let own_slash_difference = own_slash_by_validator.saturating_sub(own_slash_prior); - - let mut era_slash = - as Store>::NominatorSlashInEra::get(¶ms.slash_era, stash) - .unwrap_or_else(Zero::zero); - era_slash += own_slash_difference; - as Store>::NominatorSlashInEra::insert(¶ms.slash_era, stash, &era_slash); - - era_slash - }; - - // compare the era slash against other eras in the same span. - { - let mut spans = fetch_spans::( - stash, - params.window_start, - &mut reward_payout, - &mut nom_slashed, - params.reward_proportion, - ); - - let target_span = spans.compare_and_update_span_slash(params.slash_era, era_slash); - - if target_span == Some(spans.span_index()) { - // end the span, but don't chill the nominator. - spans.end_span(params.now); - } - } - nominators_slashed.push((stash.clone(), nom_slashed)); - } - - reward_payout -} - -// helper struct for managing a set of spans we are currently inspecting. -// writes alterations to disk on drop, but only if a slash has been carried out. -// -// NOTE: alterations to slashing metadata should not be done after this is dropped. -// dropping this struct applies any necessary slashes, which can lead to free balance -// being 0, and the account being garbage-collected -- a dead account should get no new -// metadata. -struct InspectingSpans<'a, T: Config + 'a> { - dirty: bool, - window_start: EraIndex, - stash: &'a T::AccountId, - spans: SlashingSpans, - paid_out: &'a mut BalanceOf, - slash_of: &'a mut BalanceOf, - reward_proportion: Perbill, - _marker: sp_std::marker::PhantomData, -} - -// fetches the slashing spans record for a stash account, initializing it if necessary. -fn fetch_spans<'a, T: Config + 'a>( - stash: &'a T::AccountId, - window_start: EraIndex, - paid_out: &'a mut BalanceOf, - slash_of: &'a mut BalanceOf, - reward_proportion: Perbill, -) -> InspectingSpans<'a, T> { - let spans = as Store>::SlashingSpans::get(stash).unwrap_or_else(|| { - let spans = SlashingSpans::new(window_start); - as Store>::SlashingSpans::insert(stash, &spans); - spans - }); - - InspectingSpans { - dirty: false, - window_start, - stash, - spans, - slash_of, - paid_out, - reward_proportion, - _marker: sp_std::marker::PhantomData, - } -} - -impl<'a, T: 'a + Config> InspectingSpans<'a, T> { - fn span_index(&self) -> SpanIndex { - self.spans.span_index - } - - fn end_span(&mut self, now: EraIndex) { - self.dirty = self.spans.end_span(now) || self.dirty; - } - - // add some value to the slash of the staker. - // invariant: the staker is being slashed for non-zero value here - // although `amount` may be zero, as it is only a difference. - fn add_slash(&mut self, amount: BalanceOf, slash_era: EraIndex) { - *self.slash_of += amount; - self.spans.last_nonzero_slash = sp_std::cmp::max(self.spans.last_nonzero_slash, slash_era); - } - - // find the span index of the given era, if covered. - fn era_span(&self, era: EraIndex) -> Option { - self.spans.iter().find(|span| span.contains_era(era)) - } - - // compares the slash in an era to the overall current span slash. - // if it's higher, applies the difference of the slashes and then updates the span on disk. - // - // returns the span index of the era where the slash occurred, if any. - fn compare_and_update_span_slash( - &mut self, - slash_era: EraIndex, - slash: BalanceOf, - ) -> Option { - let target_span = self.era_span(slash_era)?; - let span_slash_key = (self.stash.clone(), target_span.index); - let mut span_record = as Store>::SpanSlash::get(&span_slash_key); - let mut changed = false; - - let reward = if span_record.slashed < slash { - // new maximum span slash. apply the difference. - let difference = slash - span_record.slashed; - span_record.slashed = slash; - - // compute reward. - let reward = - REWARD_F1 * (self.reward_proportion * slash).saturating_sub(span_record.paid_out); - - self.add_slash(difference, slash_era); - changed = true; - - reward - } else if span_record.slashed == slash { - // compute reward. no slash difference to apply. - REWARD_F1 * (self.reward_proportion * slash).saturating_sub(span_record.paid_out) - } else { - Zero::zero() - }; - - if !reward.is_zero() { - changed = true; - span_record.paid_out += reward; - *self.paid_out += reward; - } - - if changed { - self.dirty = true; - as Store>::SpanSlash::insert(&span_slash_key, &span_record); - } - - Some(target_span.index) - } -} - -impl<'a, T: 'a + Config> Drop for InspectingSpans<'a, T> { - fn drop(&mut self) { - // only update on disk if we slashed this account. - if !self.dirty { - return; - } - - if let Some((start, end)) = self.spans.prune(self.window_start) { - for span_index in start..end { - as Store>::SpanSlash::remove(&(self.stash.clone(), span_index)); - } - } - - as Store>::SlashingSpans::insert(self.stash, &self.spans); - } -} - -/// Clear slashing metadata for an obsolete era. -pub(crate) fn clear_era_metadata(obsolete_era: EraIndex) { - #[allow(deprecated)] - as Store>::ValidatorSlashInEra::remove_prefix(&obsolete_era, None); - #[allow(deprecated)] - as Store>::NominatorSlashInEra::remove_prefix(&obsolete_era, None); -} - -/// Clear slashing metadata for a dead account. -pub(crate) fn clear_stash_metadata( - stash: &T::AccountId, - num_slashing_spans: u32, -) -> DispatchResult { - let spans = match as Store>::SlashingSpans::get(stash) { - None => return Ok(()), - Some(s) => s, - }; - - ensure!( - num_slashing_spans as usize >= spans.iter().count(), - Error::::IncorrectSlashingSpans - ); - - as Store>::SlashingSpans::remove(stash); - - // kill slashing-span metadata for account. - // - // this can only happen while the account is staked _if_ they are completely slashed. - // in that case, they may re-bond, but it would count again as span 0. Further ancient - // slashes would slash into this new bond, since metadata has now been cleared. - for span in spans.iter() { - as Store>::SpanSlash::remove(&(stash.clone(), span.index)); - } - - Ok(()) -} - -// apply the slash to a stash account, deducting any missing funds from the reward -// payout, saturating at 0. this is mildly unfair but also an edge-case that -// can only occur when overlapping locked funds have been slashed. -pub fn do_slash( - stash: &T::AccountId, - value: BalanceOf, - reward_payout: &mut BalanceOf, - slashed_imbalance: &mut NegativeImbalanceOf, - slash_era: EraIndex, -) { - let controller = match >::bonded(stash).defensive() { - None => return, - Some(c) => c, - }; - - let mut ledger = match >::ledger(&controller) { - Some(ledger) => ledger, - None => return, // nothing to do. - }; - - let value = ledger.slash(value, T::Currency::minimum_balance(), slash_era); - - if !value.is_zero() { - let (imbalance, missing) = T::Currency::slash(stash, value); - slashed_imbalance.subsume(imbalance); - - if !missing.is_zero() { - // deduct overslash from the reward payout - *reward_payout = reward_payout.saturating_sub(missing); - } - - >::update_ledger(&controller, &ledger); - - // trigger the event - >::deposit_event(super::Event::::Slashed { - staker: stash.clone(), - amount: value, - }); - } -} - -/// Apply a previously-unapplied slash. -pub(crate) fn apply_slash( - unapplied_slash: UnappliedSlash>, - slash_era: EraIndex, -) { - let mut slashed_imbalance = NegativeImbalanceOf::::zero(); - let mut reward_payout = unapplied_slash.payout; - - do_slash::( - &unapplied_slash.validator, - unapplied_slash.own, - &mut reward_payout, - &mut slashed_imbalance, - slash_era, - ); - - // Polymesh change - // ----------------------------------------------------------------- - if T::Permissioned::slash_nominators() { - for &(ref nominator, nominator_slash) in &unapplied_slash.others { - do_slash::( - nominator, - nominator_slash, - &mut reward_payout, - &mut slashed_imbalance, - slash_era, - ); - } - } - // ----------------------------------------------------------------- - - pay_reporters::(reward_payout, slashed_imbalance, &unapplied_slash.reporters); -} - -/// Apply a reward payout to some reporters, paying the rewards out of the slashed imbalance. -fn pay_reporters( - reward_payout: BalanceOf, - slashed_imbalance: NegativeImbalanceOf, - reporters: &[T::AccountId], -) { - if reward_payout.is_zero() || reporters.is_empty() { - // nobody to pay out to or nothing to pay; - // just treat the whole value as slashed. - T::Slash::on_unbalanced(slashed_imbalance); - return; - } - - // take rewards out of the slashed imbalance. - let reward_payout = reward_payout.min(slashed_imbalance.peek()); - let (mut reward_payout, mut value_slashed) = slashed_imbalance.split(reward_payout); - - let per_reporter = reward_payout.peek() / (reporters.len() as u32).into(); - for reporter in reporters { - let (reporter_reward, rest) = reward_payout.split(per_reporter); - reward_payout = rest; - - // this cancels out the reporter reward imbalance internally, leading - // to no change in total issuance. - T::Currency::resolve_creating(reporter, reporter_reward); - } - - // the rest goes to the on-slash imbalance handler (e.g. treasury) - value_slashed.subsume(reward_payout); // remainder of reward division remains. - T::Slash::on_unbalanced(value_slashed); -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn span_contains_era() { - // unbounded end - let span = SlashingSpan { - index: 0, - start: 1000, - length: None, - }; - assert!(!span.contains_era(0)); - assert!(!span.contains_era(999)); - - assert!(span.contains_era(1000)); - assert!(span.contains_era(1001)); - assert!(span.contains_era(10000)); - - // bounded end - non-inclusive range. - let span = SlashingSpan { - index: 0, - start: 1000, - length: Some(10), - }; - assert!(!span.contains_era(0)); - assert!(!span.contains_era(999)); - - assert!(span.contains_era(1000)); - assert!(span.contains_era(1001)); - assert!(span.contains_era(1009)); - assert!(!span.contains_era(1010)); - assert!(!span.contains_era(1011)); - } - - #[test] - fn single_slashing_span() { - let spans = SlashingSpans { - span_index: 0, - last_start: 1000, - last_nonzero_slash: 0, - prior: Vec::new(), - }; - - assert_eq!( - spans.iter().collect::>(), - vec![SlashingSpan { - index: 0, - start: 1000, - length: None - }], - ); - } - - #[test] - fn many_prior_spans() { - let spans = SlashingSpans { - span_index: 10, - last_start: 1000, - last_nonzero_slash: 0, - prior: vec![10, 9, 8, 10], - }; - - assert_eq!( - spans.iter().collect::>(), - vec![ - SlashingSpan { - index: 10, - start: 1000, - length: None - }, - SlashingSpan { - index: 9, - start: 990, - length: Some(10) - }, - SlashingSpan { - index: 8, - start: 981, - length: Some(9) - }, - SlashingSpan { - index: 7, - start: 973, - length: Some(8) - }, - SlashingSpan { - index: 6, - start: 963, - length: Some(10) - }, - ], - ) - } - - #[test] - fn pruning_spans() { - let mut spans = SlashingSpans { - span_index: 10, - last_start: 1000, - last_nonzero_slash: 0, - prior: vec![10, 9, 8, 10], - }; - - assert_eq!(spans.prune(981), Some((6, 8))); - assert_eq!( - spans.iter().collect::>(), - vec![ - SlashingSpan { - index: 10, - start: 1000, - length: None - }, - SlashingSpan { - index: 9, - start: 990, - length: Some(10) - }, - SlashingSpan { - index: 8, - start: 981, - length: Some(9) - }, - ], - ); - - assert_eq!(spans.prune(982), None); - assert_eq!( - spans.iter().collect::>(), - vec![ - SlashingSpan { - index: 10, - start: 1000, - length: None - }, - SlashingSpan { - index: 9, - start: 990, - length: Some(10) - }, - SlashingSpan { - index: 8, - start: 981, - length: Some(9) - }, - ], - ); - - assert_eq!(spans.prune(989), None); - assert_eq!( - spans.iter().collect::>(), - vec![ - SlashingSpan { - index: 10, - start: 1000, - length: None - }, - SlashingSpan { - index: 9, - start: 990, - length: Some(10) - }, - SlashingSpan { - index: 8, - start: 981, - length: Some(9) - }, - ], - ); - - assert_eq!(spans.prune(1000), Some((8, 10))); - assert_eq!( - spans.iter().collect::>(), - vec![SlashingSpan { - index: 10, - start: 1000, - length: None - },], - ); - - assert_eq!(spans.prune(2000), None); - assert_eq!( - spans.iter().collect::>(), - vec![SlashingSpan { - index: 10, - start: 2000, - length: None - },], - ); - - // now all in one shot. - let mut spans = SlashingSpans { - span_index: 10, - last_start: 1000, - last_nonzero_slash: 0, - prior: vec![10, 9, 8, 10], - }; - assert_eq!(spans.prune(2000), Some((6, 10))); - assert_eq!( - spans.iter().collect::>(), - vec![SlashingSpan { - index: 10, - start: 2000, - length: None - },], - ); - } - - #[test] - fn ending_span() { - let mut spans = SlashingSpans { - span_index: 1, - last_start: 10, - last_nonzero_slash: 0, - prior: Vec::new(), - }; - - assert!(spans.end_span(10)); - - assert_eq!( - spans.iter().collect::>(), - vec![ - SlashingSpan { - index: 2, - start: 11, - length: None - }, - SlashingSpan { - index: 1, - start: 10, - length: Some(1) - }, - ], - ); - - assert!(spans.end_span(15)); - assert_eq!( - spans.iter().collect::>(), - vec![ - SlashingSpan { - index: 3, - start: 16, - length: None - }, - SlashingSpan { - index: 2, - start: 11, - length: Some(5) - }, - SlashingSpan { - index: 1, - start: 10, - length: Some(1) - }, - ], - ); - - // does nothing if not a valid end. - assert!(!spans.end_span(15)); - assert_eq!( - spans.iter().collect::>(), - vec![ - SlashingSpan { - index: 3, - start: 16, - length: None - }, - SlashingSpan { - index: 2, - start: 11, - length: Some(5) - }, - SlashingSpan { - index: 1, - start: 10, - length: Some(1) - }, - ], - ); - } -} diff --git a/pallets/staking/src/testing_utils.rs b/pallets/staking/src/testing_utils.rs deleted file mode 100644 index d4267fbe9f..0000000000 --- a/pallets/staking/src/testing_utils.rs +++ /dev/null @@ -1,252 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Testing utils for staking. Provides some common functions to setup staking state, such as -//! bonding validators, nominators, and generating different types of solutions. - -use crate::{Pallet as Staking, *}; -use frame_benchmarking::account; -use frame_system::RawOrigin; -use rand_chacha::{ - rand_core::{RngCore, SeedableRng}, - ChaChaRng, -}; -use sp_io::hashing::blake2_256; - -use frame_election_provider_support::SortedListProvider; -use frame_support::{pallet_prelude::*, traits::Currency}; -use sp_runtime::Perbill; -use sp_std::prelude::*; - -const SEED: u32 = 0; - -// Polymesh change -// ----------------------------------------------------------------- -use crate::types::PermissionedStaking; -use pallet_identity::benchmarking::UserBuilder; -// ----------------------------------------------------------------- - -/// This function removes all validators and nominators from storage. -pub fn clear_validators_and_nominators() { - #[allow(deprecated)] - Validators::::remove_all(); - - // whenever we touch nominators counter we should update `T::VoterList` as well. - #[allow(deprecated)] - Nominators::::remove_all(); - - // NOTE: safe to call outside block production - T::VoterList::unsafe_clear(); -} - -/// Grab a funded user. -pub fn create_funded_user(string: &'static str, n: u32, balance: u32) -> T::AccountId { - // Polymesh change - // ----------------------------------------------------------------- - let _ = T::Currency::issue(balance.into()); - UserBuilder::::default() - .balance(balance) - .seed(n) - .generate_did() - .build(string) - .account() - // ----------------------------------------------------------------- -} - -/// Create a stash and controller pair. -pub fn create_stash_controller( - n: u32, - balance: u32, - destination: RewardDestination, -) -> Result<(T::AccountId, T::AccountId), &'static str> { - let stash = create_funded_user::("stash", n, balance); - let controller = UserBuilder::::default() - .balance(balance) - .seed(n) - .build("controller") - .account(); - let controller_lookup = T::Lookup::unlookup(controller.clone()); - - // Polymesh change - // ----------------------------------------------------------------- - // Attach the controller key as secondary key of the stash - T::Permissioned::setup_stash_and_controller(&stash, &controller); - // ----------------------------------------------------------------- - - Staking::::bond( - RawOrigin::Signed(stash.clone()).into(), - controller_lookup, - (balance / 10).into(), - destination, - )?; - Ok((stash, controller)) -} - -/// Create a stash and controller pair, where the controller is dead, and payouts go to controller. -/// This is used to test worst case payout scenarios. -pub fn create_stash_and_dead_controller( - n: u32, - balance: u32, - destination: RewardDestination, -) -> Result<(T::AccountId, T::AccountId), &'static str> { - let stash = create_funded_user::("stash", n, balance); - let controller: T::AccountId = account("controller", n, 100); - let controller_lookup = T::Lookup::unlookup(controller.clone()); - - // Polymesh change - // ----------------------------------------------------------------- - // Attach the controller key as secondary key of the stash - T::Permissioned::setup_stash_and_controller(&stash, &controller); - // ----------------------------------------------------------------- - - Staking::::bond( - RawOrigin::Signed(stash.clone()).into(), - controller_lookup, - (balance / 10).into(), - destination, - )?; - Ok((stash, controller)) -} - -/// create `max` validators. -pub fn create_validators( - max: u32, - balance: u32, -) -> Result>, &'static str> -where - T: Config, -{ - create_validators_with_seed::(max, balance, 0) -} - -/// create `max` validators, with a seed to help unintentional prevent account collisions. -pub fn create_validators_with_seed( - max: u32, - balance: u32, - seed: u32, -) -> Result>, &'static str> -where - T: Config, -{ - Staking::::set_commission_cap(RawOrigin::Root.into(), Perbill::from_percent(50)).unwrap(); - let mut validators: Vec> = Vec::with_capacity(max as usize); - for i in 0..max { - let (stash, controller) = - create_stash_controller::(i + seed, balance, RewardDestination::Staked)?; - let validator_prefs = ValidatorPrefs { - commission: Perbill::from_percent(50), - ..Default::default() - }; - // Polymesh change - // ----------------------------------------------------------------- - T::Permissioned::permission_validator(&stash); - // ----------------------------------------------------------------- - Staking::::validate(RawOrigin::Signed(controller).into(), validator_prefs)?; - let stash_lookup = T::Lookup::unlookup(stash); - validators.push(stash_lookup); - } - - Ok(validators) -} - -/// This function generates validators and nominators who are randomly nominating -/// `edge_per_nominator` random validators (until `to_nominate` if provided). -/// -/// NOTE: This function will remove any existing validators or nominators to ensure -/// we are working with a clean state. -/// -/// Parameters: -/// - `validators`: number of bonded validators -/// - `nominators`: number of bonded nominators. -/// - `edge_per_nominator`: number of edge (vote) per nominator. -/// - `randomize_stake`: whether to randomize the stakes. -/// - `to_nominate`: if `Some(n)`, only the first `n` bonded validator are voted upon. Else, all of -/// them are considered and `edge_per_nominator` random validators are voted for. -/// -/// Return the validators chosen to be nominated. -pub fn create_validators_with_nominators_for_era( - validators: u32, - nominators: u32, - edge_per_nominator: usize, - randomize_stake: bool, - to_nominate: Option, -) -> Result>, &'static str> -where - T: Config, -{ - clear_validators_and_nominators::(); - - Staking::::set_commission_cap(RawOrigin::Root.into(), Perbill::from_percent(50)).unwrap(); - let mut validators_stash: Vec> = Vec::with_capacity(validators as usize); - let mut rng = ChaChaRng::from_seed(SEED.using_encoded(blake2_256)); - - // Create validators - for i in 0..validators { - let balance_factor = if randomize_stake { - rng.next_u32() % 255 + 10 - } else { - 100u32 - }; - let (v_stash, v_controller) = - create_stash_controller::(i, balance_factor, RewardDestination::Staked)?; - T::Permissioned::permission_validator(&v_stash); - let validator_prefs = ValidatorPrefs { - commission: Perbill::from_percent(50), - ..Default::default() - }; - Staking::::validate( - RawOrigin::Signed(v_controller.clone()).into(), - validator_prefs, - )?; - let stash_lookup = T::Lookup::unlookup(v_stash.clone()); - validators_stash.push(stash_lookup.clone()); - } - - let to_nominate = to_nominate.unwrap_or(validators_stash.len() as u32) as usize; - let validator_chosen = validators_stash[0..to_nominate].to_vec(); - - // Create nominators - for j in 0..nominators { - let balance_factor = if randomize_stake { - rng.next_u32() % 100_000_000u32 + 10_000_000u32 - } else { - 10_000_000u32 - }; - let (_n_stash, n_controller) = - create_stash_controller::(u32::MAX - j, balance_factor, RewardDestination::Staked)?; - - // Have them randomly validate - let mut available_validators = validator_chosen.clone(); - let mut selected_validators: Vec> = - Vec::with_capacity(edge_per_nominator); - - for _ in 0..validators.min(edge_per_nominator as u32) { - let selected = rng.next_u32() as usize % available_validators.len(); - let validator = available_validators.remove(selected); - selected_validators.push(validator); - } - Staking::::nominate(RawOrigin::Signed(n_controller).into(), selected_validators)?; - } - - ValidatorCount::::put(validators); - - Ok(validator_chosen) -} -/// get the current era. -pub fn current_era() -> EraIndex { - >::current_era().unwrap_or(0) -} diff --git a/pallets/staking/src/types.rs b/pallets/staking/src/types.rs deleted file mode 100644 index 2a36226f5f..0000000000 --- a/pallets/staking/src/types.rs +++ /dev/null @@ -1,140 +0,0 @@ -#[cfg(feature = "std")] -use sp_runtime::{Deserialize, Serialize}; - -use codec::{Decode, Encode, MaxEncodedLen}; -use frame_support::dispatch::DispatchResult; -use frame_support::traits::Currency; -use scale_info::TypeInfo; -use sp_runtime::{Perbill, RuntimeDebug}; - -use crate::{ActiveEraInfo, BalanceOf, Config}; - -/// A trait used by the staking pallet for permissioned staking. -/// -/// A permissioned Substrate network can be configured to allow only a set of -/// identities to participate in staking. This trait is used to define the -/// behavior of the staking pallet in such a network. -pub trait PermissionedStaking { - /// Permission a validator. - #[cfg(feature = "runtime-benchmarks")] - fn permission_validator(_who: &T::AccountId) {} - - /// Setup stash and controller. - #[cfg(feature = "runtime-benchmarks")] - fn setup_stash_and_controller(_stash: &T::AccountId, _controller: &T::AccountId) {} - - /// Check if amount is under the existential deposit. - fn reapable(amount: BalanceOf) -> bool { - amount < T::Currency::minimum_balance() - } - - /// On validate hook. - fn on_validate(_who: &T::AccountId, _commission: Perbill) -> DispatchResult { - Ok(()) - } - - /// On chill hook. - fn on_chill(_who: &T::AccountId) {} - - /// On nominate hook. - fn on_nominate(_who: &T::AccountId) -> DispatchResult { - Ok(()) - } - - /// Is the validator still compliant? - fn is_validator_compliant(_who: &T::AccountId) -> bool { - true - } - - /// Is the nominator still compliant? - fn is_nominator_compliant(_who: &T::AccountId) -> bool { - true - } - - /// Schedule reward payouts. - fn schedule_payouts(_active_era: &ActiveEraInfo) {} - - /// Who should be slashed? - fn who_to_slash() -> Option { - Some(WhoToSlash::ValidatorAndNominator) - } - - /// Is slashing enabled? - fn is_slashing_enabled() -> bool { - Self::who_to_slash().is_some() - } - - /// Slash nominators? - fn slash_nominators() -> bool { - Self::who_to_slash() == Some(WhoToSlash::ValidatorAndNominator) - } -} - -/// Preference of an identity regarding validation. -#[derive(Decode, Encode, RuntimeDebug, TypeInfo)] -#[derive(Clone, Copy, Eq, PartialEq)] -pub struct PermissionedIdentityPrefs { - /// Intended number of validators an identity wants to run. - /// - /// Act as a hard limit on the number of validators an identity can run. - /// However, it can be amended using governance. - /// - /// The count satisfies `count < MaxValidatorPerIdentity * Self::validator_count()`. - pub intended_count: u32, - /// Keeps track of the running number of validators of a DID. - pub running_count: u32, -} - -impl Default for PermissionedIdentityPrefs { - fn default() -> Self { - Self { - intended_count: 1, - running_count: 0, - } - } -} - -impl PermissionedIdentityPrefs { - pub fn new(intended_count: u32) -> Self { - Self { - intended_count, - running_count: 0, - } - } -} - -/// Who should be slashed. -#[derive(Decode, Encode, MaxEncodedLen, RuntimeDebug, TypeInfo)] -#[derive(Clone, Copy, Eq, PartialEq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum WhoToSlash { - /// Allow validators but not nominators to get slashed. - Validator, - /// Allow both validators and nominators to get slashed. - ValidatorAndNominator, -} - -/// Switch used to change the "victim" for slashing. Victims can be -/// validators, both validators and nominators, or no-one. -#[derive(Decode, Encode, MaxEncodedLen, RuntimeDebug, TypeInfo)] -#[derive(Clone, Copy, Default, Eq, PartialEq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -pub enum SlashingSwitch { - /// Allow validators but not nominators to get slashed. - Validator, - /// Allow both validators and nominators to get slashed. - ValidatorAndNominator, - /// Forbid slashing. - #[default] - None, -} - -impl From for Option { - fn from(value: SlashingSwitch) -> Self { - match value { - SlashingSwitch::Validator => Some(WhoToSlash::Validator), - SlashingSwitch::ValidatorAndNominator => Some(WhoToSlash::ValidatorAndNominator), - SlashingSwitch::None => None, - } - } -} diff --git a/pallets/staking/src/weights.rs b/pallets/staking/src/weights.rs deleted file mode 100644 index b6df69cbc4..0000000000 --- a/pallets/staking/src/weights.rs +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for pallet_staking. -pub trait WeightInfo { - fn bond() -> Weight; - fn bond_extra() -> Weight; - fn unbond() -> Weight; - fn withdraw_unbonded_update(s: u32, ) -> Weight; - fn withdraw_unbonded_kill(s: u32, ) -> Weight; - fn validate() -> Weight; - fn kick(k: u32, ) -> Weight; - fn nominate(n: u32, ) -> Weight; - fn chill() -> Weight; - fn set_payee() -> Weight; - fn set_controller() -> Weight; - fn set_validator_count() -> Weight; - fn force_no_eras() -> Weight; - fn force_new_era() -> Weight; - fn force_new_era_always() -> Weight; - fn set_invulnerables(v: u32, ) -> Weight; - fn force_unstake(s: u32, ) -> Weight; - fn cancel_deferred_slash(s: u32, ) -> Weight; - fn payout_stakers_dead_controller(n: u32, ) -> Weight; - fn payout_stakers_alive_staked(n: u32, ) -> Weight; - fn rebond(l: u32, ) -> Weight; - fn reap_stash(s: u32, ) -> Weight; - fn new_era(v: u32, n: u32, ) -> Weight; - fn get_npos_voters(v: u32, n: u32, ) -> Weight; - fn get_npos_targets(v: u32, ) -> Weight; - fn set_staking_configs_all_set() -> Weight; - fn set_staking_configs_all_remove() -> Weight; - fn chill_other() -> Weight; - fn force_apply_min_commission() -> Weight; - fn set_min_commission() -> Weight; - fn add_permissioned_validator() -> Weight; - fn remove_permissioned_validator() -> Weight; - fn change_slashing_allowed_for() -> Weight; - fn update_permissioned_validator_intended_count() -> Weight; - fn chill_from_governance(n: u32) -> Weight; - fn set_commission_cap(n: u32) -> Weight; -} diff --git a/pallets/staking/Cargo.toml b/pallets/validators/Cargo.toml similarity index 78% rename from pallets/staking/Cargo.toml rename to pallets/validators/Cargo.toml index 9c03892561..b2720108bd 100644 --- a/pallets/staking/Cargo.toml +++ b/pallets/validators/Cargo.toml @@ -1,12 +1,15 @@ [package] -name = "pallet-staking" -version = "2.0.0" -authors = ["Parity Technologies "] +name = "pallet-validators" +version = "0.1.0" +authors = ["PolymeshAssociation"] edition = "2021" [dependencies] polymesh-primitives = { workspace = true, default-features = false } -pallet-identity = { workspace = true, default-features = false} +pallet-identity = { workspace = true, default-features = false } + +# Substrate staking +pallet-staking = { workspace = true, default-features = false } # General static_assertions = "1.1.0" @@ -15,19 +18,23 @@ log = "0.4.8" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.0", default-features = false, features = [ + "derive", +] } sp-core = { version = "7.0.0", default-features = false } sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false} +sp-io = { version = "7.0.0", default-features = false } sp-runtime = { version = "7.0.0", default-features = false } sp-arithmetic = { version = "6.0.0", default-features = false } sp-staking = { version = "4.0.0-dev", default-features = false } frame-support = { version = "4.0.0-dev", default-features = false } frame-system = { version = "4.0.0-dev", default-features = false } frame-election-provider-support = { version = "4.0.0-dev", default-features = false } -sp-npos-elections = { version = "4.0.0-dev", default-features = false} +sp-npos-elections = { version = "4.0.0-dev", default-features = false } -pallet-session = { features = ["historical"], version = "4.0.0-dev", default-features = false } +pallet-session = { features = [ + "historical", +], version = "4.0.0-dev", default-features = false } pallet-authorship = { version = "4.0.0-dev", default-features = false } pallet-babe = { version = "4.0.0-dev", default-features = false } @@ -57,12 +64,15 @@ std = [ "frame-system/std", "pallet-authorship/std", "pallet-identity/std", + "pallet-staking/std", "pallet-babe/std", "sp-arithmetic/std", "rand_chacha", ] runtime-benchmarks = [ "frame-benchmarking", + "pallet-staking/runtime-benchmarks", + "pallet-identity/runtime-benchmarks", "rand_chacha", ] try-runtime = [] diff --git a/pallets/validators/src/benchmarking.rs b/pallets/validators/src/benchmarking.rs new file mode 100644 index 0000000000..9136663675 --- /dev/null +++ b/pallets/validators/src/benchmarking.rs @@ -0,0 +1,277 @@ +// This file is part of the Polymesh distribution (https://github.com/PolymeshAssociation/Polymesh). +// Copyright (c) 2020 Polymesh Association + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3. + +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +use super::*; +use testing_utils::*; + +use frame_support::traits::{Currency, Get}; +use sp_runtime::{ + traits::{One, StaticLookup}, + Perbill, Saturating, +}; +use sp_staking::SessionIndex; +use sp_std::prelude::*; + +pub use frame_benchmarking::v1::{ + account, benchmarks, impl_benchmark_test_suite, whitelist_account, whitelisted_caller, +}; +use frame_system::RawOrigin; + +use pallet_staking::{ + CurrentEra, EraRewardPoints, ErasRewardPoints, ErasValidatorReward, RewardDestination, +}; + +use crate::types::SlashingSwitch; +use pallet_identity::benchmarking::UserBuilder; +use polymesh_primitives::identity_claim::ClaimType; +use polymesh_primitives::IdentityId; +use polymesh_primitives::Permissions; + +pub fn get_did(who: &T::AccountId) -> IdentityId { + pallet_identity::Pallet::::get_identity(who).expect("Failed to get identity id") +} + +// This function clears all existing validators and nominators from the set, and generates one new +// validator being nominated by n nominators, and returns the validator stash account and the +// nominators' stash and controller. It also starts an era and creates pending payouts. +pub fn create_validator_with_nominators( + n: u32, + upper_bound: u32, + dead: bool, + destination: RewardDestination, +) -> Result<(T::AccountId, Vec<(T::AccountId, T::AccountId)>), &'static str> { + // Clean up any existing state. + clear_validators_and_nominators::(); + let mut points_total = 0; + let mut points_individual = Vec::new(); + + let (v_stash, v_controller) = create_stash_controller::(0, 100, destination.clone())?; + let validator_prefs = ValidatorPrefs { + commission: Perbill::from_percent(50), + ..Default::default() + }; + add_permissioned_validator_::(&v_stash); + StakingPallet::::validate(RawOrigin::Signed(v_controller).into(), validator_prefs)?; + let stash_lookup = T::Lookup::unlookup(v_stash.clone()); + + points_total += 10; + points_individual.push((v_stash.clone(), 10)); + + let original_nominator_count = Nominators::::count(); + let mut nominators = Vec::new(); + + // Give the validator n nominators, but keep total users in the system the same. + for i in 0..upper_bound { + let (n_stash, n_controller) = if !dead { + create_stash_controller::(u32::MAX - i, 100, destination.clone())? + } else { + create_stash_and_dead_controller::(u32::MAX - i, 100, destination.clone())? + }; + if i < n { + StakingPallet::::nominate( + RawOrigin::Signed(n_controller.clone()).into(), + vec![stash_lookup.clone()], + )?; + nominators.push((n_stash, n_controller)); + } + } + + ValidatorCount::::put(1); + + // Start a new Era + let new_validators = + StakingPallet::::try_trigger_new_era(SessionIndex::one(), true).unwrap(); + + assert_eq!(new_validators.len(), 1); + assert_eq!( + new_validators[0], v_stash, + "Our validator was not selected!" + ); + assert_ne!(Validators::::count(), 0); + assert_eq!( + Nominators::::count(), + original_nominator_count + nominators.len() as u32 + ); + + // Give Era Points + let reward = EraRewardPoints:: { + total: points_total, + individual: points_individual.into_iter().collect(), + }; + + let current_era = CurrentEra::::get().unwrap(); + ErasRewardPoints::::insert(current_era, reward); + + // Create reward pool + let total_payout = minimum_balance::() + .saturating_mul(upper_bound.into()) + .saturating_mul(1000u32.into()); + >::insert(current_era, total_payout); + + Ok((v_stash, nominators)) +} + +const USER_SEED: u32 = 999666; + +benchmarks! { + add_permissioned_validator { + clear_validators_and_nominators::(); + let (stash, controller) = + create_stash_controller::(1, 1, RewardDestination::Staked)?; + StakingPallet::::set_validator_count(RawOrigin::Root.into(), 10).unwrap(); + let did = get_did::(&stash); + }: _(RawOrigin::Root, did, Some(1)) + verify { + let identity_preferences = Pallet::::permissioned_identity(did); + assert!(identity_preferences.is_some()); + assert_eq!(identity_preferences.unwrap().intended_count, 1); + } + + remove_permissioned_validator { + clear_validators_and_nominators::(); + let (stash, controller) = + create_stash_controller::(1, 1, RewardDestination::Staked)?; + add_permissioned_validator_::(&stash); + let did = get_did::(&stash); + }: _(RawOrigin::Root, did) + verify { + let identity_preferences = Pallet::::permissioned_identity(did); + assert!(identity_preferences.is_none()); + } + + change_slashing_allowed_for {}: _(RawOrigin::Root, SlashingSwitch::ValidatorAndNominator) + verify { + assert_eq!(Pallet::::slashing_allowed_for(), SlashingSwitch::ValidatorAndNominator); + } + + update_permissioned_validator_intended_count { + clear_validators_and_nominators::(); + let (stash, controller) = + create_stash_controller::(1, 1, RewardDestination::Staked)?; + add_permissioned_validator_::(&stash); + let did = get_did::(&stash); + }: _(RawOrigin::Root, did, 2) + verify { + assert_eq!(Pallet::::permissioned_identity(did).unwrap().intended_count, 2); + } + + chill_from_governance { + let s in 1..100; + + let validator = create_funded_user::("validator", USER_SEED, 10_000); + + StakingPallet::::set_validator_count(RawOrigin::Root.into(), 1_000).unwrap(); + assert_eq!(StakingPallet::::validator_count(), 1_000); + + let did = get_did::(&validator); + Pallet::::add_permissioned_validator( + RawOrigin::Root.into(), + did, + Some(100) + ).unwrap(); + + whitelist_account!(validator); + + let mut signatories = Vec::new(); + for x in 0 .. s { + let key = UserBuilder::::default().seed(x).balance(10_000u32).build("key").account(); + let key_lookup = T::Lookup::unlookup(key.clone()); + let _ = T::Currency::issue(10_000u32.into()); + + let did = get_did::(&validator); + pallet_identity::Pallet::::unsafe_join_identity( + did, + Permissions::default(), + key.clone() + ); + StakingPallet::::bond( + RawOrigin::Signed(key.clone()).into(), + key_lookup, + 2_000_000u32.into(), + RewardDestination::Staked + ) + .unwrap(); + whitelist_account!(key); + + StakingPallet::::validate(RawOrigin::Signed(key.clone()).into(), ValidatorPrefs::default())?; + assert_eq!(>::contains_key(&key), true); + signatories.push(key.clone()); + } + let did = get_did::(&validator); + }: _(RawOrigin::Root, did, signatories.clone()) + verify { + for key in signatories { + assert!(!>::contains_key(&key)); + } + } + + set_commission_cap { + let m in 0 .. 150; + + let mut stashes = Vec::with_capacity(m as usize); + for i in 0 .. m { + let stash = create_funded_user::("stash", i, 1000); + stashes.push(stash.clone()); + Validators::::insert( + stash, + ValidatorPrefs { + commission: Perbill::from_percent(70), + ..Default::default() + } + ); + } + }: _(RawOrigin::Root, Perbill::from_percent(50)) + verify { + stashes.iter().for_each(|s| { + assert_eq!( + StakingPallet::::validators(s), + ValidatorPrefs { commission: Perbill::from_percent(50), ..Default::default() } + ); + }); + } + + validate_cdd_expiry_nominators { + let n in 1 .. T::MaxNominations::get(); + + clear_validators_and_nominators::(); + + let (validator, nominators) = create_validator_with_nominators::( + n, + T::MaxNominatorRewardedPerValidator::get() as u32, + true, + RewardDestination::Controller, + )?; + + for nominator in &nominators { + let did = get_did::(&nominator.0); + let claim_first = pallet_identity::Claim1stKey { + target: did, + claim_type: ClaimType::CustomerDueDiligence + }; + let _ = pallet_identity::Claims::::clear_prefix(claim_first, 1, None); + } + + let nominators: Vec = nominators.iter().map(|x| x.0.clone()).collect(); + for nominator in &nominators { + assert!(Nominators::::contains_key(nominator)); + } + + }: _(RawOrigin::Root, nominators.clone()) + verify { + for nominator in nominators { + assert!(!Nominators::::contains_key(nominator)); + } + } +} diff --git a/pallets/staking/src/inflation.rs b/pallets/validators/src/inflation.rs similarity index 100% rename from pallets/staking/src/inflation.rs rename to pallets/validators/src/inflation.rs diff --git a/pallets/validators/src/lib.rs b/pallets/validators/src/lib.rs new file mode 100644 index 0000000000..cd61671cf2 --- /dev/null +++ b/pallets/validators/src/lib.rs @@ -0,0 +1,391 @@ +// This file is part of the Polymesh distribution (https://github.com/PolymeshAssociation/Polymesh). +// Copyright (c) 2020 Polymesh Association + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3. + +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! # Permissioned Validtors Module +//! + +#![cfg_attr(not(feature = "std"), no_std)] + +#[cfg(feature = "runtime-benchmarks")] +pub mod benchmarking; +#[cfg(feature = "runtime-benchmarks")] +pub use pallet_staking::testing_utils; + +pub mod inflation; + +pub mod permissioned; +pub use permissioned::PolymeshConvertCurve; + +pub mod types; +pub use pallet_staking::PermissionedStaking; + +use frame_support::traits::schedule::Anon; +use frame_support::traits::IsSubType; +use frame_support::{ + dispatch::{DispatchError, DispatchResult}, + pallet_prelude::*, + traits::Get, + weights::Weight, +}; +use frame_system::pallet_prelude::*; +use sp_runtime::traits::Dispatchable; +use sp_runtime::{curve::PiecewiseLinear, traits::AtLeast32BitUnsigned, Perbill, Permill}; +use sp_staking::EraIndex; +use sp_std::prelude::*; +use sp_std::vec; + +use polymesh_primitives::{IdentityId, GC_DID}; + +pub(crate) use pallet_staking::{ + ActiveEraInfo, BalanceOf, Bonded, Config as StakingConfig, EraPayout, Error as StakingError, + Ledger, MinValidatorBond, Nominators, Pallet as StakingPallet, SessionInterface as _, + ValidatorCount, ValidatorPrefs, Validators, WeightInfo as _, +}; + +use types::{PermissionedIdentityPrefs, SlashingSwitch}; + +pub(crate) const LOG_TARGET: &str = "runtime::permissioned_validators"; + +// syntactic sugar for logging. +#[macro_export] +macro_rules! log { + ($level:tt, $patter:expr $(, $values:expr)* $(,)?) => { + log::$level!( + target: crate::LOG_TARGET, + concat!("[{:?}] 💸 ", $patter), >::block_number() $(, $values)* + ) + }; +} + +/// Weight functions needed for pallet_staking. +pub trait WeightInfo { + fn add_permissioned_validator() -> Weight; + fn remove_permissioned_validator() -> Weight; + fn change_slashing_allowed_for() -> Weight; + fn update_permissioned_validator_intended_count() -> Weight; + fn chill_from_governance(n: u32) -> Weight; + fn set_commission_cap(n: u32) -> Weight; + fn validate_cdd_expiry_nominators(n: u32) -> Weight; +} + +mod migrations { + use super::*; + use frame_support::traits::{Get, GetStorageVersion}; + + pub fn migrate_v1() -> Weight { + let in_code = Pallet::::current_storage_version(); + let on_chain = Pallet::::on_chain_storage_version(); + + if on_chain < 1 { + let old_pallet = b"Staking"; + let new_pallet = Pallet::::name().as_bytes(); + // Move: PermissionedIdentity + frame_support::storage::migration::move_storage_from_pallet( + b"PermissionedIdentity", + old_pallet, + new_pallet, + ); + // Move: SlashingAllowedFor + frame_support::storage::migration::move_storage_from_pallet( + b"SlashingAllowedFor", + old_pallet, + new_pallet, + ); + // Move: ValidatorCommissionCap + frame_support::storage::migration::move_storage_from_pallet( + b"ValidatorCommissionCap", + old_pallet, + new_pallet, + ); + in_code.put::>(); + + log::info!( + target: crate::LOG_TARGET, + "Moved some storage from pallet Staking to pallet Validators", + ); + return T::DbWeight::get().reads_writes(3, 3); + } + Weight::zero() + } +} + +pub use pallet::*; + +#[frame_support::pallet] +pub mod pallet { + use super::*; + + const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); + + #[pallet::pallet] + #[pallet::storage_version(STORAGE_VERSION)] + pub struct Pallet(_); + + #[pallet::config] + pub trait Config: + frame_system::Config + + pallet_identity::Config + + pallet_staking::Config + + pallet_babe::Config + { + /// The overarching event type. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + /// pallet weights. + type WeightInfo: WeightInfo; + + /// Maximum amount of validators that can run by an identity. + /// It will be MaxValidatorPerIdentity * Self::validator_count(). + #[pallet::constant] + type MaxValidatorPerIdentity: Get; + + /// Maximum amount of total issuance after which fixed rewards kicks in. + #[pallet::constant] + type MaxVariableInflationTotalIssuance: Get>; + + /// Yearly total reward amount that gets distributed when fixed rewards kicks in. + #[pallet::constant] + type FixedYearlyReward: Get>; + + /// The overarching call type. + type Call: Dispatchable + From> + IsSubType> + Clone; + + /// Overarching type of all pallets origins. + type PalletsOrigin: From>; + + /// To schedule the rewards for the stakers after the end of era. + type RewardScheduler: Anon::Call, Self::PalletsOrigin>; + } + + /// Entities that are allowed to run operator/validator nodes. + #[pallet::storage] + #[pallet::getter(fn permissioned_identity)] + pub type PermissionedIdentity = + StorageMap<_, Twox64Concat, IdentityId, PermissionedIdentityPrefs, OptionQuery>; + + /// Slashing switch for validators & Nominators. + #[pallet::storage] + #[pallet::getter(fn slashing_allowed_for)] + pub type SlashingAllowedFor = StorageValue<_, SlashingSwitch, ValueQuery>; + + /// Allows flexibility in commission. Every validator has commission that should be in the range [0, Cap]. + #[pallet::storage] + #[pallet::getter(fn validator_commission_cap)] + pub type ValidatorCommissionCap = StorageValue<_, Perbill, ValueQuery>; + + #[pallet::genesis_config] + #[derive(Default)] + pub struct GenesisConfig { + pub validators: Vec, + pub slashing_allowed_for: SlashingSwitch, + pub validator_commission_cap: Perbill, + } + + #[pallet::genesis_build] + impl GenesisBuild for GenesisConfig { + fn build(&self) { + SlashingAllowedFor::::put(self.slashing_allowed_for); + ValidatorCommissionCap::::put(self.validator_commission_cap); + + for &did in &self.validators { + crate::log!(trace, "inserting genesis permissioned validator: {:?}", did,); + if >::permissioned_identity(&did).is_none() { + // Adding identity directly in the storage by assuming it is CDD'ed + PermissionedIdentity::::insert(&did, PermissionedIdentityPrefs::new(3)); + >::deposit_event(Event::::PermissionedIdentityAdded { + governance_councill_did: GC_DID, + validators_identity: did, + }); + } + } + } + } + + #[pallet::event] + #[pallet::generate_deposit(pub(crate) fn deposit_event)] + pub enum Event { + /// User has updated their nominations. + Nominated { + nominator_identity: IdentityId, + stash: T::AccountId, + targets: Vec, + }, + /// An identity has issued a candidacy for becoming a validator. + PermissionedIdentityAdded { + governance_councill_did: IdentityId, + validators_identity: IdentityId, + }, + /// An identity has been removed from the permissioned identities pool. + PermissionedIdentityRemoved { + governance_councill_did: IdentityId, + validators_identity: IdentityId, + }, + /// Remove the nominators from the valid nominators when there CDD expired. + InvalidatedNominators { + governance_councill_did: IdentityId, + governance_councill_account: IdentityId, + expired_nominators: Vec, + }, + /// Slashing allowed has been updated. + SlashingAllowedForChanged { slashing_switch: SlashingSwitch }, + /// Reward scheduling interrupted. + RewardPaymentSchedulingInterrupted { + account_id: T::AccountId, + era: EraIndex, + error: DispatchError, + }, + /// Commission cap has been updated. + CommissionCapUpdated { + governance_councill_did: IdentityId, + old_commission_cap: Perbill, + new_commission_cap: Perbill, + }, + } + + #[pallet::error] + pub enum Error { + /// Validator or nominator stash identity does not exist. + StashIdentityDoesNotExist, + /// Validator's stash identity is not permissioned. + StashIdentityNotPermissioned, + /// Nominator stash has not gone through CDD. + StashIdentityNotCDDed, + /// Permissioned validator already exists. + IdentityIsAlreadyPermissioned, + /// Identity has not gone throught CDD. + IdentityIsMissingCDD, + /// When the intended number of validators to run is >= 2/3 of `validator_count`. + IntendedCountIsExceedingConsensusLimit, + /// Identity was not found in the permissioned identity pool. + IdentityNotFound, + /// No validator was found for the given key. + ValidatorNotFound, + /// Validator commiission is above maximum. + CommissionTooHigh, + /// New commission must be different from previous commission. + CommissionUnchanged, + } + + #[pallet::hooks] + impl Hooks> for Pallet { + fn on_runtime_upgrade() -> frame_support::weights::Weight { + migrations::migrate_v1::() + } + } + + #[pallet::call] + impl Pallet { + /// Adds a permissioned identity and sets its preferences. + /// + /// The dispatch origin must be Root. + #[pallet::call_index(0)] + #[pallet::weight(::WeightInfo::add_permissioned_validator())] + pub fn add_permissioned_validator( + origin: OriginFor, + identity: IdentityId, + intended_count: Option, + ) -> DispatchResult { + Self::base_add_permissioned_validator(origin, identity, intended_count) + } + + /// Remove an identity from the pool of (wannabe) validator identities. Effects are known in the next session. + /// + /// The dispatch origin must be Root. + /// + /// # Arguments + /// * origin Required origin for removing a potential validator. + /// * identity Validator's IdentityId. + #[pallet::call_index(1)] + #[pallet::weight(::WeightInfo::remove_permissioned_validator())] + pub fn remove_permissioned_validator( + origin: OriginFor, + identity: IdentityId, + ) -> DispatchResult { + Self::base_remove_permissioned_validator(origin, identity) + } + + /// Validate the nominators CDD expiry time. + /// + /// If an account from a given set of address is nominating then check the CDD expiry time + /// of it and if it is expired then the account should be unbonded and removed from the + /// nominating process. + #[pallet::call_index(2)] + #[pallet::weight(::WeightInfo::validate_cdd_expiry_nominators(targets.len() as u32))] + pub fn validate_cdd_expiry_nominators( + origin: OriginFor, + targets: Vec, + ) -> DispatchResult { + Self::base_validate_cdd_expiry_nominators(origin, targets) + } + + #[pallet::call_index(3)] + #[pallet::weight(::WeightInfo::payout_stakers_alive_staked( + T::MaxNominatorRewardedPerValidator::get() + ))] + pub fn payout_stakers_by_system( + origin: OriginFor, + validator_stash: T::AccountId, + era: EraIndex, + ) -> DispatchResultWithPostInfo { + Self::base_payout_stakers_by_system(origin, validator_stash, era) + } + + /// Switch slashing status on the basis of given `slashing_switch`. Can only be called by root. + #[pallet::call_index(4)] + #[pallet::weight(::WeightInfo::change_slashing_allowed_for())] + pub fn change_slashing_allowed_for( + origin: OriginFor, + slashing_switch: SlashingSwitch, + ) -> DispatchResult { + Self::base_change_slashing_allowed_for(origin, slashing_switch) + } + + /// Sets the intended count to `new_intended_count` for the given `identity`. + #[pallet::call_index(5)] + #[pallet::weight(::WeightInfo::update_permissioned_validator_intended_count())] + pub fn update_permissioned_validator_intended_count( + origin: OriginFor, + identity: IdentityId, + new_intended_count: u32, + ) -> DispatchResult { + Self::base_update_permissioned_validator_intended_count( + origin, + identity, + new_intended_count, + ) + } + + /// Governance council forcefully chills a validator. Effects will be felt at the beginning of the next era. + #[pallet::call_index(6)] + #[pallet::weight(::WeightInfo::chill_from_governance(stash_keys.len() as u32))] + pub fn chill_from_governance( + origin: OriginFor, + identity: IdentityId, + stash_keys: Vec, + ) -> DispatchResult { + Self::base_chill_from_governance(origin, identity, stash_keys) + } + + /// Changes commission rate which applies to all validators. Only Governance + /// committee is allowed to change this value. + /// + /// # Arguments + /// * `new_cap` the new commission cap. + #[pallet::call_index(7)] + #[pallet::weight(::WeightInfo::set_commission_cap(150))] + pub fn set_commission_cap(origin: OriginFor, new_cap: Perbill) -> DispatchResult { + Self::base_set_commission_cap(origin, new_cap) + } + } +} diff --git a/pallets/staking/src/permissioned.rs b/pallets/validators/src/permissioned.rs similarity index 91% rename from pallets/staking/src/permissioned.rs rename to pallets/validators/src/permissioned.rs index 85c3e91a44..8b85518d23 100644 --- a/pallets/staking/src/permissioned.rs +++ b/pallets/validators/src/permissioned.rs @@ -12,11 +12,13 @@ use polymesh_primitives::constants::GC_PALLET_ID; use polymesh_primitives::IdentityId; use polymesh_primitives::GC_DID; #[cfg(feature = "runtime-benchmarks")] -use polymesh_primitives::{AuthorizationData, Permissions, Signatory}; +use polymesh_primitives::{traits::IdentityFnTrait, AuthorizationData, Permissions, Signatory}; use sp_runtime::traits::AccountIdConversion; -use crate::types::{PermissionedIdentityPrefs, PermissionedStaking, SlashingSwitch, WhoToSlash}; +use pallet_staking::{PermissionedStaking, WhoToSlash}; + +use crate::types::{PermissionedIdentityPrefs, SlashingSwitch}; use crate::*; /// Adaptor to turn a `PiecewiseLinear` curve definition into an `EraPayout` impl, used for @@ -49,9 +51,16 @@ impl< } impl PermissionedStaking for Pallet { + /// Onboard an account. + #[cfg(feature = "runtime-benchmarks")] + fn onboard_account(who: &T::AccountId) { + let _ = T::IdentityFn::testing_cdd_register_did(who.clone(), vec![]); + } + /// Permission a validator. #[cfg(feature = "runtime-benchmarks")] fn permission_validator(stash: &T::AccountId) { + let _ = Pallet::::set_commission_cap(RawOrigin::Root.into(), Perbill::from_percent(99)); let did = pallet_identity::Pallet::::get_identity(stash).expect("Failed to get identity"); Pallet::::add_permissioned_validator(RawOrigin::Root.into(), did, Some(2)) @@ -97,7 +106,7 @@ impl PermissionedStaking for Pallet { // Ensure the identity doesn't run more validators than the intended count ensure!( stash_did_prefs.running_count < stash_did_prefs.intended_count, - Error::::TooManyValidators + StakingError::::TooManyValidators ); stash_did_prefs.running_count += 1; pallet_identity::Pallet::::add_account_key_ref_count(&stash); @@ -134,7 +143,10 @@ impl PermissionedStaking for Pallet { /// Schedule reward payouts. fn schedule_payouts(active_era: &ActiveEraInfo) { let next_block_number = >::block_number() + 1u32.into(); - for (index, validator_id) in T::SessionInterface::validators().into_iter().enumerate() { + for (index, validator_id) in ::SessionInterface::validators() + .into_iter() + .enumerate() + { let schedule_block_number = next_block_number + index.saturated_into::(); match T::RewardScheduler::schedule( @@ -187,12 +199,6 @@ impl Pallet { false } - pub(crate) fn get_bonding_duration_period() -> u64 { - (T::SessionsPerEra::get() * T::BondingDuration::get()) as u64 // total session - * T::EpochDuration::get() // session length - * T::ExpectedBlockTime::get().saturated_into::() - } - /// Decrease the running count of validators by 1 for the stash identity. pub(crate) fn release_running_validator(stash: &T::AccountId) { if !>::contains_key(stash) { @@ -282,14 +288,14 @@ impl Pallet { ) -> DispatchResult { ensure_root(origin.clone())?; - ensure!(!targets.is_empty(), Error::::EmptyTargets); + ensure!(!targets.is_empty(), StakingError::::EmptyTargets); let mut expired_nominators = Vec::new(); // Iterate provided list of accountIds (These accountIds should be stash type account). for target in targets .iter() // Nominator must be vouching for someone. - .filter(|target| Self::nominators(target).is_some()) + .filter(|target| Nominators::::get(target).is_some()) // Access the DIDs of the nominators whose CDDs have expired. .filter(|target| { // Fetch all the claim values provided by the trusted service providers @@ -306,11 +312,12 @@ impl Pallet { // This unbonded amount only be accessible after completion of the BondingDuration // Controller account need to call the dispatchable function `withdraw_unbond` to withdraw fund. - let controller = Self::bonded(target).ok_or(Error::::NotStash)?; - let mut ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; + let controller = Bonded::::get(target).ok_or(StakingError::::NotStash)?; + let mut ledger = + Ledger::::get(&controller).ok_or(StakingError::::NotController)?; let active_balance = ledger.active; if ledger.unlocking.len() < T::MaxUnlockingChunks::get() as usize { - Self::unbond_balance(controller, &mut ledger, active_balance)?; + StakingPallet::::unbond_balance(controller, &mut ledger, active_balance)?; expired_nominators.push(target.clone()); // Free the nominator from the valid nominator list @@ -331,7 +338,7 @@ impl Pallet { era: EraIndex, ) -> DispatchResultWithPostInfo { ensure_root(origin)?; - Self::do_payout_stakers(validator_stash, era) + StakingPallet::::do_payout_stakers(validator_stash, era) } pub(crate) fn base_change_slashing_allowed_for( @@ -399,7 +406,7 @@ impl Pallet { for key in &stash_keys { let key_did = pallet_identity::Pallet::::get_identity(&key); // Checks if the stash key identity is the same as the identity given. - ensure!(key_did == Some(identity), Error::::NotStash); + ensure!(key_did == Some(identity), StakingError::::NotStash); // Checks if the key is a validator if not returns an error. ensure!( >::contains_key(&key), @@ -408,7 +415,7 @@ impl Pallet { } for key in stash_keys { - Self::chill_stash(&key); + StakingPallet::::chill_stash(&key); } // Change identity status to be Non-Permissioned diff --git a/pallets/validators/src/types.rs b/pallets/validators/src/types.rs new file mode 100644 index 0000000000..d81d80c89f --- /dev/null +++ b/pallets/validators/src/types.rs @@ -0,0 +1,65 @@ +#[cfg(feature = "std")] +use sp_runtime::{Deserialize, Serialize}; + +use codec::{Decode, Encode, MaxEncodedLen}; +use pallet_staking::WhoToSlash; +use scale_info::TypeInfo; +use sp_runtime::RuntimeDebug; + +/// Preference of an identity regarding validation. +#[derive(Decode, Encode, MaxEncodedLen, RuntimeDebug, TypeInfo)] +#[derive(Clone, Copy, Eq, PartialEq)] +pub struct PermissionedIdentityPrefs { + /// Intended number of validators an identity wants to run. + /// + /// Act as a hard limit on the number of validators an identity can run. + /// However, it can be amended using governance. + /// + /// The count satisfies `count < MaxValidatorPerIdentity * Self::validator_count()`. + pub intended_count: u32, + /// Keeps track of the running number of validators of a DID. + pub running_count: u32, +} + +impl Default for PermissionedIdentityPrefs { + fn default() -> Self { + Self { + intended_count: 1, + running_count: 0, + } + } +} + +impl PermissionedIdentityPrefs { + pub fn new(intended_count: u32) -> Self { + Self { + intended_count, + running_count: 0, + } + } +} + +/// Switch used to change the "victim" for slashing. Victims can be +/// validators, both validators and nominators, or no-one. +#[derive(Decode, Encode, MaxEncodedLen, RuntimeDebug, TypeInfo)] +#[derive(Clone, Copy, Default, Eq, PartialEq)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub enum SlashingSwitch { + /// Allow validators but not nominators to get slashed. + Validator, + /// Allow both validators and nominators to get slashed. + ValidatorAndNominator, + /// Forbid slashing. + #[default] + None, +} + +impl From for Option { + fn from(value: SlashingSwitch) -> Self { + match value { + SlashingSwitch::Validator => Some(WhoToSlash::Validator), + SlashingSwitch::ValidatorAndNominator => Some(WhoToSlash::ValidatorAndNominator), + SlashingSwitch::None => None, + } + } +} diff --git a/pallets/weights/Cargo.toml b/pallets/weights/Cargo.toml index 410c003e80..e0c2fbaadc 100644 --- a/pallets/weights/Cargo.toml +++ b/pallets/weights/Cargo.toml @@ -23,6 +23,7 @@ sp-std = { version = "5.0.0", default-features = false } pallet-asset = { workspace = true, default-features = false } pallet-balances = { workspace = true, default-features = false } pallet-staking = { workspace = true, default-features = false } +pallet-validators = { workspace = true, default-features = false } pallet-committee = { workspace = true, default-features = false } pallet-compliance-manager = { workspace = true, default-features = false } pallet-corporate-actions = { workspace = true, default-features = false } @@ -52,6 +53,7 @@ std = [ "pallet-asset/std", "pallet-babe/std", "pallet-staking/std", + "pallet-validators/std", "pallet-balances/std", "pallet-compliance-manager/std", "pallet-corporate-actions/std", diff --git a/pallets/weights/src/lib.rs b/pallets/weights/src/lib.rs index 3dfcd82030..83d0ef8074 100644 --- a/pallets/weights/src/lib.rs +++ b/pallets/weights/src/lib.rs @@ -50,4 +50,5 @@ pub mod pallet_sto; pub mod pallet_timestamp; pub mod pallet_treasury; pub mod pallet_utility; +pub mod pallet_validators; pub mod polymesh_contracts; diff --git a/pallets/weights/src/pallet_staking.rs b/pallets/weights/src/pallet_staking.rs index ea2f120bb3..5c6869adfc 100644 --- a/pallets/weights/src/pallet_staking.rs +++ b/pallets/weights/src/pallet_staking.rs @@ -685,84 +685,4 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Minimum execution time: 3_406 nanoseconds. Weight::from_ref_time(4_727_000).saturating_add(DbWeight::get().writes(1)) } - // Storage: Staking PermissionedIdentity (r:1 w:1) - // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: Staking ValidatorCount (r:1 w:0) - // Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) - fn add_permissioned_validator() -> Weight { - // Minimum execution time: 43_595 nanoseconds. - Weight::from_ref_time(46_881_000) - .saturating_add(DbWeight::get().reads(6)) - .saturating_add(DbWeight::get().writes(1)) - } - // Storage: Staking PermissionedIdentity (r:1 w:1) - // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) - fn remove_permissioned_validator() -> Weight { - // Minimum execution time: 22_233 nanoseconds. - Weight::from_ref_time(22_965_000) - .saturating_add(DbWeight::get().reads(1)) - .saturating_add(DbWeight::get().writes(1)) - } - // Storage: Staking SlashingAllowedFor (r:0 w:1) - // Proof: Staking SlashingAllowedFor (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) - fn change_slashing_allowed_for() -> Weight { - // Minimum execution time: 7_831 nanoseconds. - Weight::from_ref_time(9_184_000).saturating_add(DbWeight::get().writes(1)) - } - // Storage: Staking ValidatorCount (r:1 w:0) - // Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) - // Storage: Staking PermissionedIdentity (r:1 w:1) - // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) - fn update_permissioned_validator_intended_count() -> Weight { - // Minimum execution time: 16_444 nanoseconds. - Weight::from_ref_time(17_467_000) - .saturating_add(DbWeight::get().reads(2)) - .saturating_add(DbWeight::get().writes(1)) - } - // Storage: Identity KeyRecords (r:100 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Identity IsDidFrozen (r:1 w:0) - // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) - // Storage: Staking Validators (r:100 w:100) - // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) - // Storage: Staking PermissionedIdentity (r:1 w:1) - // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) - // Storage: Identity AccountKeyRefCount (r:100 w:100) - // Proof: Identity AccountKeyRefCount (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) - // Storage: Staking CounterForValidators (r:1 w:1) - // Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) - // Storage: Staking Nominators (r:100 w:0) - // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) - /// The range of component `s` is `[1, 100]`. - fn chill_from_governance(s: u32) -> Weight { - // Minimum execution time: 65_999 nanoseconds. - Weight::from_ref_time(35_514_636) - // Standard Error: 33_301 - .saturating_add(Weight::from_ref_time(29_921_456).saturating_mul(s.into())) - .saturating_add(DbWeight::get().reads(3)) - .saturating_add(DbWeight::get().reads((4_u64).saturating_mul(s.into()))) - .saturating_add(DbWeight::get().writes(2)) - .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(s.into()))) - } - // Storage: Staking ValidatorCommissionCap (r:1 w:1) - // Proof: Staking ValidatorCommissionCap (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) - // Storage: Staking Validators (r:152 w:151) - // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) - /// The range of component `m` is `[0, 150]`. - fn set_commission_cap(m: u32) -> Weight { - // Minimum execution time: 25_629 nanoseconds. - Weight::from_ref_time(36_870_733) - // Standard Error: 14_027 - .saturating_add(Weight::from_ref_time(4_557_063).saturating_mul(m.into())) - .saturating_add(DbWeight::get().reads(3)) - .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(m.into()))) - .saturating_add(DbWeight::get().writes(2)) - .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(m.into()))) - } } diff --git a/pallets/weights/src/pallet_validators.rs b/pallets/weights/src/pallet_validators.rs new file mode 100644 index 0000000000..2c1501e662 --- /dev/null +++ b/pallets/weights/src/pallet_validators.rs @@ -0,0 +1,175 @@ +// This file is part of Substrate. + +// Copyright (C) 2021 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Autogenerated weights for pallet_validators +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2024-12-02, STEPS: `100`, REPEAT: 5, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 512 +//! HOSTNAME: `ubuntu-8gb-nbg1-1-bench2`, CPU: `AMD EPYC-Milan Processor` + +// Executed Command: +// ./polymesh +// benchmark +// pallet +// -s +// 100 +// -r +// 5 +// -p=pallet_validators +// -e=* +// --heap-pages +// 4096 +// --db-cache +// 512 +// --execution +// wasm +// --wasm-execution +// compiled +// --output +// ./Polymesh/pallets/weights/src/ +// --template +// ./Polymesh/.maintain/frame-weight-template.hbs + +#![allow(unused_parens)] +#![allow(unused_imports)] + +use polymesh_primitives::{RocksDbWeight as DbWeight, Weight}; + +/// Weights for pallet_validators using the Substrate node and recommended hardware. +pub struct SubstrateWeight; +impl pallet_validators::WeightInfo for SubstrateWeight { + // Storage: Staking PermissionedIdentity (r:1 w:1) + // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:2 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Staking ValidatorCount (r:1 w:0) + // Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + fn add_permissioned_validator() -> Weight { + // Minimum execution time: 41_553 nanoseconds. + Weight::from_ref_time(46_099_000) + .saturating_add(DbWeight::get().reads(6)) + .saturating_add(DbWeight::get().writes(1)) + } + // Storage: Staking PermissionedIdentity (r:1 w:1) + // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) + fn remove_permissioned_validator() -> Weight { + // Minimum execution time: 21_923 nanoseconds. + Weight::from_ref_time(23_775_000) + .saturating_add(DbWeight::get().reads(1)) + .saturating_add(DbWeight::get().writes(1)) + } + // Storage: Staking SlashingAllowedFor (r:0 w:1) + // Proof: Staking SlashingAllowedFor (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + fn change_slashing_allowed_for() -> Weight { + // Minimum execution time: 8_042 nanoseconds. + Weight::from_ref_time(8_202_000).saturating_add(DbWeight::get().writes(1)) + } + // Storage: Staking ValidatorCount (r:1 w:0) + // Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Staking PermissionedIdentity (r:1 w:1) + // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) + fn update_permissioned_validator_intended_count() -> Weight { + // Minimum execution time: 15_513 nanoseconds. + Weight::from_ref_time(16_815_000) + .saturating_add(DbWeight::get().reads(2)) + .saturating_add(DbWeight::get().writes(1)) + } + // Storage: Identity KeyRecords (r:100 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Identity IsDidFrozen (r:1 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Staking Validators (r:100 w:100) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + // Storage: Staking PermissionedIdentity (r:1 w:1) + // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) + // Storage: Identity AccountKeyRefCount (r:100 w:100) + // Proof Skipped: Identity AccountKeyRefCount (max_values: None, max_size: None, mode: Measured) + // Storage: Staking CounterForValidators (r:1 w:1) + // Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Staking Nominators (r:100 w:0) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// The range of component `s` is `[1, 100]`. + fn chill_from_governance(s: u32) -> Weight { + // Minimum execution time: 63_263 nanoseconds. + Weight::from_ref_time(39_954_272) + // Standard Error: 31_787 + .saturating_add(Weight::from_ref_time(29_199_031).saturating_mul(s.into())) + .saturating_add(DbWeight::get().reads(3)) + .saturating_add(DbWeight::get().reads((4_u64).saturating_mul(s.into()))) + .saturating_add(DbWeight::get().writes(2)) + .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(s.into()))) + } + // Storage: Staking ValidatorCommissionCap (r:1 w:1) + // Proof: Staking ValidatorCommissionCap (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Staking Validators (r:152 w:151) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// The range of component `m` is `[0, 150]`. + fn set_commission_cap(m: u32) -> Weight { + // Minimum execution time: 26_039 nanoseconds. + Weight::from_ref_time(36_161_210) + // Standard Error: 11_245 + .saturating_add(Weight::from_ref_time(4_450_891).saturating_mul(m.into())) + .saturating_add(DbWeight::get().reads(3)) + .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(m.into()))) + .saturating_add(DbWeight::get().writes(2)) + .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(m.into()))) + } + // Storage: Staking Nominators (r:16 w:16) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + // Storage: Identity KeyRecords (r:32 w:0) + // Proof Skipped: Identity KeyRecords (max_values: None, max_size: None, mode: Measured) + // Storage: Timestamp Now (r:1 w:0) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Instance2Group ActiveMembers (r:1 w:0) + // Proof Skipped: Instance2Group ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) + // Storage: Identity Claims (r:16 w:0) + // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + // Storage: Identity ParentDid (r:16 w:0) + // Proof Skipped: Identity ParentDid (max_values: None, max_size: None, mode: Measured) + // Storage: Staking Bonded (r:16 w:0) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + // Storage: Staking Ledger (r:16 w:16) + // Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) + // Storage: Staking MinNominatorBond (r:1 w:0) + // Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: Staking CurrentEra (r:1 w:0) + // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Balances Locks (r:16 w:16) + // Proof Skipped: Balances Locks (max_values: None, max_size: None, mode: Measured) + // Storage: System Account (r:16 w:16) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + // Storage: Identity IsDidFrozen (r:16 w:0) + // Proof Skipped: Identity IsDidFrozen (max_values: None, max_size: None, mode: Measured) + // Storage: Staking CounterForNominators (r:1 w:1) + // Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// The range of component `n` is `[1, 16]`. + fn validate_cdd_expiry_nominators(n: u32) -> Weight { + // Minimum execution time: 211_797 nanoseconds. + Weight::from_ref_time(153_423_017) + // Standard Error: 176_413 + .saturating_add(Weight::from_ref_time(82_196_945).saturating_mul(n.into())) + .saturating_add(DbWeight::get().reads(5)) + .saturating_add(DbWeight::get().reads((10_u64).saturating_mul(n.into()))) + .saturating_add(DbWeight::get().writes(1)) + .saturating_add(DbWeight::get().writes((4_u64).saturating_mul(n.into()))) + } +} diff --git a/scripts/test.sh b/scripts/test.sh index be4e52833b..5e27170371 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -2,7 +2,7 @@ SKIP_WASM_BUILD=1 RUST_BACKTRACE=1 \ cargo test \ - --package pallet-staking \ + --package pallet-validators \ --package pallet-group \ --package pallet-sudo \ --package pallet-pips \ diff --git a/src/chain_spec.rs b/src/chain_spec.rs index 19a00c4e6e..f760d0c0b1 100644 --- a/src/chain_spec.rs +++ b/src/chain_spec.rs @@ -364,12 +364,16 @@ macro_rules! session { } macro_rules! staking { - ($auths:expr, $stakers:expr, $cap:expr) => { + ($stakers:expr) => { pallet_staking::GenesisConfig { validator_count: 40, - validator_commission_cap: $cap, minimum_validator_count: 1, - stakers: $stakers, + stakers: $stakers + .iter() + .map(|(_did, stash, controller, balance, status)| { + (stash.clone(), controller.clone(), *balance, status.clone()) + }) + .collect::>(), invulnerables: vec![], slash_reward_fraction: sp_runtime::Perbill::from_percent(10), ..Default::default() @@ -377,6 +381,25 @@ macro_rules! staking { }; } +macro_rules! validators { + ($stakers:expr, $cap:expr) => { + pallet_validators::GenesisConfig { + validator_commission_cap: $cap, + validators: $stakers + .iter() + .filter_map(|(did, _stash, _controller, _balance, status)| { + if let StakerStatus::Validator = status { + Some(*did) + } else { + None + } + }) + .collect::>(), + ..Default::default() + } + }; +} + macro_rules! pips { ($period:expr, $expiry:expr, $limit:expr) => { pallet_pips::GenesisConfig { @@ -503,11 +526,8 @@ pub mod general { key: Some(root_key.clone()), }, session: session!(initial_authorities, session_keys), - staking: staking!( - initial_authorities, - stakers, - PerThing::from_rational(1u64, 4u64) - ), + validators: validators!(stakers, PerThing::from_rational(1u64, 4u64)), + staking: staking!(stakers), pips: pips!(time::MINUTES, MaybeBlock::None, 25), im_online: Default::default(), authority_discovery: Default::default(), @@ -648,11 +668,8 @@ pub mod testnet { balances: rt::runtime::BalancesConfig { balances }, indices: pallet_indices::GenesisConfig { indices: vec![] }, session: session!(initial_authorities, session_keys), - staking: staking!( - initial_authorities, - stakers, - PerThing::from_rational(1u64, 10u64) - ), + validators: validators!(stakers, PerThing::from_rational(1u64, 10u64)), + staking: staking!(stakers), pips: pips!(time::DAYS * 30, MaybeBlock::None, 1000), im_online: Default::default(), authority_discovery: Default::default(), @@ -821,11 +838,8 @@ pub mod mainnet { balances: rt::runtime::BalancesConfig { balances }, indices: pallet_indices::GenesisConfig { indices: vec![] }, session: session!(initial_authorities, session_keys), - staking: staking!( - initial_authorities, - stakers, - PerThing::from_rational(1u64, 10u64) - ), + validators: validators!(stakers, PerThing::from_rational(1u64, 10u64)), + staking: staking!(stakers), pips: pips!(time::DAYS * 30, MaybeBlock::Some(time::DAYS * 90), 1000), im_online: Default::default(), authority_discovery: Default::default(), @@ -1006,7 +1020,8 @@ pub mod general { key: Some(root_key.clone()), }, session: session!(initial_authorities, session_keys), - staking: staking!(initial_authorities, stakers, PerThing::zero()), + validators: validators!(stakers, PerThing::zero()), + staking: staking!(stakers), pips: pips!(time::DAYS * 7, MaybeBlock::None, 1000), im_online: Default::default(), authority_discovery: Default::default(), diff --git a/src/service.rs b/src/service.rs index 7748138b03..58cdd35844 100644 --- a/src/service.rs +++ b/src/service.rs @@ -2,7 +2,9 @@ use futures::stream::StreamExt; use polymesh_node_rpc as node_rpc; -pub use polymesh_primitives::{AccountId, Block, IdentityId, Index as Nonce, Moment, Ticker}; +pub use polymesh_primitives::{ + AccountId, Balance, Block, IdentityId, Index as Nonce, Moment, Ticker, +}; pub use polymesh_runtime_develop; pub use polymesh_runtime_mainnet; pub use polymesh_runtime_testnet; @@ -92,7 +94,7 @@ pub trait RuntimeApiCollection: + sp_offchain::OffchainWorkerApi + sp_session::SessionKeys + sp_authority_discovery::AuthorityDiscoveryApi - + pallet_staking_rpc_runtime_api::StakingApi + + pallet_staking_runtime_api::StakingApi + node_rpc_runtime_api::pips::PipsApi + node_rpc_runtime_api::identity::IdentityApi + pallet_protocol_fee_rpc_runtime_api::ProtocolFeeApi @@ -118,7 +120,7 @@ where + sp_offchain::OffchainWorkerApi + sp_session::SessionKeys + sp_authority_discovery::AuthorityDiscoveryApi - + pallet_staking_rpc_runtime_api::StakingApi + + pallet_staking_runtime_api::StakingApi + node_rpc_runtime_api::pips::PipsApi + node_rpc_runtime_api::identity::IdentityApi + pallet_protocol_fee_rpc_runtime_api::ProtocolFeeApi From f678125e371f156bebadefe92b082a6c92a0ae32 Mon Sep 17 00:00:00 2001 From: Henrique Nogara Date: Thu, 19 Jun 2025 10:42:50 -0300 Subject: [PATCH 08/97] Update balance pallet (#1833) * Remove pallet-balances * Fix benchmarks * Remove cdd check; Fix bench * Fix bench and integration tests * Add polymesh_v8 feature to polymesh-api * Update ci commands * Change ci flag * Remove error --- .circleci/config.yml | 1 - Cargo.lock | 311 ++-- Cargo.toml | 3 +- integration/Cargo.lock | 21 +- integration/Cargo.toml | 8 +- pallets/balances/Cargo.toml | 62 - pallets/balances/src/benchmarking.rs | 91 -- pallets/balances/src/imbalances.rs | 193 --- pallets/balances/src/lib.rs | 1514 -------------------- pallets/pips/src/lib.rs | 4 +- pallets/runtime/common/src/cdd_check.rs | 33 - pallets/runtime/common/src/impls.rs | 34 - pallets/runtime/common/src/lib.rs | 4 +- pallets/runtime/common/src/runtime.rs | 16 +- pallets/runtime/develop/src/runtime.rs | 3 + pallets/runtime/mainnet/src/runtime.rs | 2 + pallets/runtime/testnet/src/runtime.rs | 2 + pallets/runtime/tests/src/balances_test.rs | 226 +-- pallets/runtime/tests/src/staking/mock.rs | 18 +- pallets/runtime/tests/src/staking/mod.rs | 10 +- pallets/runtime/tests/src/storage.rs | 1 + pallets/runtime/tests/src/utility_test.rs | 10 - pallets/treasury/src/benchmarking.rs | 10 +- pallets/treasury/src/lib.rs | 5 +- pallets/utility/src/lib.rs | 7 +- pallets/weights/src/pallet_balances.rs | 88 +- scripts/test.sh | 1 - 27 files changed, 274 insertions(+), 2404 deletions(-) delete mode 100644 pallets/balances/Cargo.toml delete mode 100644 pallets/balances/src/benchmarking.rs delete mode 100644 pallets/balances/src/imbalances.rs delete mode 100644 pallets/balances/src/lib.rs delete mode 100644 pallets/runtime/common/src/cdd_check.rs diff --git a/.circleci/config.yml b/.circleci/config.yml index 25c2d2c8f5..7578ef2e57 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -427,7 +427,6 @@ jobs: --package node-rpc-runtime-api --package pallet-transaction-payment --package polymesh-runtime-tests - --package pallet-balances:0.1.0 --package asset-metadata no_output_timeout: 30m - save-sccache-cache diff --git a/Cargo.lock b/Cargo.lock index c04909417a..e437c0f90f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2023,7 +2023,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", ] @@ -2046,7 +2046,7 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-support", "frame-support-procedural", @@ -2071,7 +2071,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "Inflector", "array-bytes", @@ -2118,7 +2118,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -2129,7 +2129,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -2146,7 +2146,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-support", "frame-system", @@ -2174,7 +2174,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "bitflags 1.3.2", "environmental", @@ -2207,7 +2207,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "Inflector", "cfg-expr", @@ -2222,7 +2222,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.1.3", @@ -2234,7 +2234,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "proc-macro2", "quote", @@ -2244,7 +2244,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-support", "log", @@ -2262,7 +2262,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-benchmarking", "frame-support", @@ -2277,7 +2277,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "sp-api", @@ -4640,7 +4640,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-support", "frame-system", @@ -4656,7 +4656,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-support", "frame-system", @@ -4670,7 +4670,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-benchmarking", "frame-support", @@ -4691,35 +4691,10 @@ dependencies = [ "sp-std", ] -[[package]] -name = "pallet-balances" -version = "0.1.0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-identity", - "pallet-permissions", - "pallet-timestamp", - "parity-scale-codec 3.6.9", - "polymesh-primitives", - "scale-info", - "serde", - "serde_derive", - "sp-api", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-version", -] - [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-benchmarking", "frame-support", @@ -4804,7 +4779,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "bitflags 1.3.2", "frame-benchmarking", @@ -4833,7 +4808,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "bitflags 1.3.2", "parity-scale-codec 3.6.9", @@ -4846,7 +4821,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "proc-macro2", "quote", @@ -4887,7 +4862,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4910,7 +4885,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4944,7 +4919,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-benchmarking", "frame-support", @@ -5050,7 +5025,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-benchmarking", "frame-support", @@ -5070,7 +5045,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-benchmarking", "frame-support", @@ -5087,7 +5062,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-support", "frame-system", @@ -5142,12 +5117,12 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-support", "frame-system", "log", - "pallet-balances 4.0.0-dev", + "pallet-balances", "parity-scale-codec 3.6.9", "scale-info", "serde", @@ -5179,7 +5154,7 @@ dependencies = [ "frame-support", "frame-system", "log", - "pallet-balances 0.1.0", + "pallet-balances", "pallet-base", "pallet-committee", "pallet-group", @@ -5228,7 +5203,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-benchmarking", "frame-support", @@ -5312,7 +5287,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-benchmarking", "frame-support", @@ -5329,7 +5304,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-support", "frame-system", @@ -5383,7 +5358,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5406,7 +5381,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -5417,7 +5392,7 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "sp-api", @@ -5457,7 +5432,7 @@ dependencies = [ "frame-system", "log", "pallet-asset", - "pallet-balances 0.1.0", + "pallet-balances", "pallet-base", "pallet-compliance-manager", "pallet-external-agents", @@ -5497,7 +5472,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-benchmarking", "frame-support", @@ -5537,7 +5512,7 @@ dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "pallet-balances 0.1.0", + "pallet-balances", "pallet-identity", "pallet-permissions", "parity-scale-codec 3.6.9", @@ -5560,7 +5535,7 @@ dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "pallet-balances 0.1.0", + "pallet-balances", "pallet-identity", "pallet-permissions", "parity-scale-codec 3.6.9", @@ -5963,7 +5938,7 @@ dependencies = [ "node-rpc-runtime-api", "pallet-asset", "pallet-babe", - "pallet-balances 0.1.0", + "pallet-balances", "pallet-committee", "pallet-corporate-actions", "pallet-external-agents", @@ -6168,7 +6143,7 @@ dependencies = [ "frame-system", "log", "pallet-authorship", - "pallet-balances 0.1.0", + "pallet-balances", "pallet-committee", "pallet-election-provider-multi-phase", "pallet-group-rpc-runtime-api", @@ -6203,7 +6178,7 @@ dependencies = [ "pallet-authority-discovery", "pallet-authorship", "pallet-babe", - "pallet-balances 0.1.0", + "pallet-balances", "pallet-base", "pallet-committee", "pallet-compliance-manager", @@ -6286,7 +6261,7 @@ dependencies = [ "pallet-authority-discovery", "pallet-authorship", "pallet-babe", - "pallet-balances 0.1.0", + "pallet-balances", "pallet-base", "pallet-committee", "pallet-compliance-manager", @@ -6371,7 +6346,7 @@ dependencies = [ "pallet-authority-discovery", "pallet-authorship", "pallet-babe", - "pallet-balances 0.1.0", + "pallet-balances", "pallet-base", "pallet-committee", "pallet-compliance-manager", @@ -6462,7 +6437,7 @@ dependencies = [ "pallet-authority-discovery", "pallet-authorship", "pallet-babe", - "pallet-balances 0.1.0", + "pallet-balances", "pallet-base", "pallet-committee", "pallet-compliance-manager", @@ -6547,7 +6522,7 @@ dependencies = [ "frame-system", "pallet-asset", "pallet-babe", - "pallet-balances 0.1.0", + "pallet-balances", "pallet-committee", "pallet-compliance-manager", "pallet-contracts", @@ -7461,7 +7436,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "log", "sp-core", @@ -7472,7 +7447,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "futures", @@ -7499,7 +7474,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "futures", "futures-timer", @@ -7522,7 +7497,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "sc-client-api", @@ -7537,7 +7512,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "memmap2", "sc-chain-spec-derive", @@ -7556,7 +7531,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -7567,7 +7542,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "array-bytes", "chrono", @@ -7607,7 +7582,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "fnv", "futures", @@ -7633,7 +7608,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "hash-db", "kvdb", @@ -7659,7 +7634,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "futures", @@ -7684,7 +7659,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "fork-tree", @@ -7723,7 +7698,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "futures", "jsonrpsee", @@ -7745,7 +7720,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "fork-tree", "parity-scale-codec 3.6.9", @@ -7758,7 +7733,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "ahash 0.8.11", "array-bytes", @@ -7798,7 +7773,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "finality-grandpa", "futures", @@ -7818,7 +7793,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "futures", @@ -7841,7 +7816,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "lru", "parity-scale-codec 3.6.9", @@ -7865,7 +7840,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "sc-allocator", "sp-maybe-compressed-blob", @@ -7878,7 +7853,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "log", "sc-allocator", @@ -7891,7 +7866,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -7909,7 +7884,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "ansi_term", "futures", @@ -7924,7 +7899,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "array-bytes", "async-trait", @@ -7939,7 +7914,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "array-bytes", "async-trait", @@ -7982,7 +7957,7 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "cid", "futures", @@ -8001,7 +7976,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "bitflags 1.3.2", @@ -8027,7 +8002,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "ahash 0.8.11", "futures", @@ -8045,7 +8020,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "array-bytes", "futures", @@ -8066,7 +8041,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "array-bytes", "async-trait", @@ -8098,7 +8073,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "array-bytes", "futures", @@ -8117,7 +8092,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "array-bytes", "bytes", @@ -8147,7 +8122,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "futures", "libp2p", @@ -8160,7 +8135,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8169,7 +8144,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "futures", "jsonrpsee", @@ -8199,7 +8174,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "jsonrpsee", "parity-scale-codec 3.6.9", @@ -8218,7 +8193,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "http", "jsonrpsee", @@ -8233,7 +8208,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "array-bytes", "futures", @@ -8259,7 +8234,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "directories", @@ -8325,7 +8300,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "log", "parity-scale-codec 3.6.9", @@ -8336,7 +8311,7 @@ dependencies = [ [[package]] name = "sc-storage-monitor" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "clap", "fs4", @@ -8352,7 +8327,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "jsonrpsee", "parity-scale-codec 3.6.9", @@ -8371,7 +8346,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "futures", "libc", @@ -8390,7 +8365,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "chrono", "futures", @@ -8409,7 +8384,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "ansi_term", "atty", @@ -8440,7 +8415,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -8451,7 +8426,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "futures", @@ -8478,7 +8453,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "futures", @@ -8492,7 +8467,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "backtrace", "futures", @@ -8983,7 +8958,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "hash-db", "log", @@ -9001,7 +8976,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "blake2", "proc-macro-crate 1.1.3", @@ -9013,7 +8988,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9026,7 +9001,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "integer-sqrt", "num-traits", @@ -9040,7 +9015,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9053,7 +9028,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "sp-api", @@ -9065,7 +9040,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "futures", "log", @@ -9083,7 +9058,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "futures", @@ -9101,7 +9076,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "merlin 2.0.1", @@ -9124,7 +9099,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "finality-grandpa", "log", @@ -9142,7 +9117,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9154,7 +9129,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9167,7 +9142,7 @@ dependencies = [ [[package]] name = "sp-core" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "array-bytes", "base58", @@ -9210,7 +9185,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "blake2", "byteorder", @@ -9224,7 +9199,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "proc-macro2", "quote", @@ -9235,7 +9210,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -9244,7 +9219,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "proc-macro2", "quote", @@ -9254,7 +9229,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.13.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "environmental", "parity-scale-codec 3.6.9", @@ -9265,7 +9240,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -9280,7 +9255,7 @@ dependencies = [ [[package]] name = "sp-io" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "bytes", "ed25519 1.5.3", @@ -9305,7 +9280,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "lazy_static", "sp-core", @@ -9316,7 +9291,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.13.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "futures", @@ -9333,7 +9308,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "thiserror", "zstd", @@ -9342,7 +9317,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9356,7 +9331,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "sp-api", "sp-core", @@ -9366,7 +9341,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "backtrace", "lazy_static", @@ -9376,7 +9351,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "rustc-hash", "serde", @@ -9386,7 +9361,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "either", "hash256-std-hasher", @@ -9408,7 +9383,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -9426,7 +9401,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "Inflector", "proc-macro-crate 1.1.3", @@ -9438,7 +9413,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9452,7 +9427,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9464,7 +9439,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.13.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "hash-db", "log", @@ -9484,12 +9459,12 @@ dependencies = [ [[package]] name = "sp-std" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" [[package]] name = "sp-storage" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "impl-serde", "parity-scale-codec 3.6.9", @@ -9502,7 +9477,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "futures-timer", @@ -9517,7 +9492,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "sp-std", @@ -9529,7 +9504,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "sp-api", "sp-runtime", @@ -9538,7 +9513,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "async-trait", "log", @@ -9554,7 +9529,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "ahash 0.8.11", "hash-db", @@ -9577,7 +9552,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "impl-serde", "parity-scale-codec 3.6.9", @@ -9594,7 +9569,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "proc-macro2", @@ -9605,7 +9580,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -9619,7 +9594,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "parity-scale-codec 3.6.9", "scale-info", @@ -9781,7 +9756,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "platforms", ] @@ -9789,7 +9764,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -9808,7 +9783,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "hyper", "log", @@ -9820,7 +9795,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "futures", "substrate-test-utils-derive", @@ -9830,7 +9805,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", @@ -9841,7 +9816,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#daa41e9425270e0503d7b30c5ed61a863b9efc09" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" dependencies = [ "ansi_term", "build-helper", diff --git a/Cargo.toml b/Cargo.toml index 64d98df163..d59ad0abd7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -107,7 +107,6 @@ substrate-test-utils = { git = "https://github.com/PolymeshAssociation/polkadot- members = [ "node-rpc", "pallets/asset", - "pallets/balances", "pallets/base", "pallets/committee", "pallets/compliance-manager", @@ -156,7 +155,6 @@ exclude = [ [workspace.dependencies] # Our pallets pallet-asset = { path = "pallets/asset", default-features = false } -pallet-balances = { path = "pallets/balances", default-features = false } pallet-base = { path = "pallets/base", default-features = false } pallet-committee = { path = "pallets/committee", default-features = false } pallet-compliance-manager = { path = "pallets/compliance-manager", default-features = false } @@ -213,6 +211,7 @@ frame-system-rpc-runtime-api = { version = "4.0.0-dev", default-features = false pallet-authority-discovery = { version = "4.0.0-dev", default-features = false } pallet-authorship = { version = "4.0.0-dev", default-features = false } pallet-babe = { version = "4.0.0-dev", default-features = false } +pallet-balances = { version = "4.0.0-dev", default-features = false } pallet-contracts = { version = "4.0.0-dev", default-features = false } pallet-contracts-primitives = { version = "7.0.0", default-features = false} pallet-election-provider-multi-phase = { version = "4.0.0-dev", default-features = false } diff --git a/integration/Cargo.lock b/integration/Cargo.lock index c8d5eb3989..3c348b5a79 100644 --- a/integration/Cargo.lock +++ b/integration/Cargo.lock @@ -3078,8 +3078,7 @@ dependencies = [ [[package]] name = "polymesh-api" version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ff80f4052cb02de5dcf3eb34d709c054d56f9d670e1d0c79f6eb2aee8c8a9a" +source = "git+https://github.com/PolymeshAssociation/polymesh-api?branch=update-new-type#ec295c9d5c5a8c26c198072f5ac69b69efb0e6a9" dependencies = [ "async-trait", "ink", @@ -3096,8 +3095,7 @@ dependencies = [ [[package]] name = "polymesh-api-client" version = "3.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56cf9e3a73fada7c5859a0a8821975553d9478f840f8dfae0b97fbf766ea5bd" +source = "git+https://github.com/PolymeshAssociation/polymesh-api?branch=update-new-type#ec295c9d5c5a8c26c198072f5ac69b69efb0e6a9" dependencies = [ "async-stream", "async-trait", @@ -3130,8 +3128,7 @@ dependencies = [ [[package]] name = "polymesh-api-client-extras" version = "3.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a684432bc48150f1de14f8695da6c3bb9629e45b5e76fdfde14e994bd334f6b" +source = "git+https://github.com/PolymeshAssociation/polymesh-api?branch=update-new-type#ec295c9d5c5a8c26c198072f5ac69b69efb0e6a9" dependencies = [ "parity-scale-codec", "polymesh-api", @@ -3143,8 +3140,7 @@ dependencies = [ [[package]] name = "polymesh-api-codegen" version = "3.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a63d6a2adabd1d0dc37b9deefef14221e9a1c606044e42366677ddc0605887e7" +source = "git+https://github.com/PolymeshAssociation/polymesh-api?branch=update-new-type#ec295c9d5c5a8c26c198072f5ac69b69efb0e6a9" dependencies = [ "frame-metadata", "heck 0.4.1", @@ -3163,8 +3159,7 @@ dependencies = [ [[package]] name = "polymesh-api-codegen-macro" version = "3.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27676a20d1b51d72f53e6209ad4c0357e02a4a64459c88876df979b2dafc3615" +source = "git+https://github.com/PolymeshAssociation/polymesh-api?branch=update-new-type#ec295c9d5c5a8c26c198072f5ac69b69efb0e6a9" dependencies = [ "darling", "parity-scale-codec", @@ -3178,8 +3173,7 @@ dependencies = [ [[package]] name = "polymesh-api-ink" version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47a1895afdbf02486aa486e5508e7fe7c9fa2bffa23dbeb16f91558ce3b5c30b" +source = "git+https://github.com/PolymeshAssociation/polymesh-api?branch=update-new-type#ec295c9d5c5a8c26c198072f5ac69b69efb0e6a9" dependencies = [ "hex", "ink", @@ -3194,8 +3188,7 @@ dependencies = [ [[package]] name = "polymesh-api-tester" version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "998e2026b62c49a2bfe25b95f64815947eafd1ae8410a80d959780e02d3d8a99" +source = "git+https://github.com/PolymeshAssociation/polymesh-api?branch=update-new-type#ec295c9d5c5a8c26c198072f5ac69b69efb0e6a9" dependencies = [ "async-trait", "env_logger 0.11.8", diff --git a/integration/Cargo.toml b/integration/Cargo.toml index 78c3bb03df..beecccbbf2 100644 --- a/integration/Cargo.toml +++ b/integration/Cargo.toml @@ -16,7 +16,7 @@ edition = "2021" default = [] previous_release = [] -current_release = [] +current_release = ["polymesh-api/polymesh_v8", "polymesh-api-client-extras/polymesh_v8"] [dependencies] anyhow = "1" @@ -32,6 +32,6 @@ sp-keyring = "41.0" sp-weights = "31.1" codec = { package = "parity-scale-codec", version = "3.0.0", features = ["derive", "max-encoded-len"] } -polymesh-api = { version = "3.11.0", features = ["download_metadata"] } -polymesh-api-client-extras = { version = "3.6.0" } -polymesh-api-tester = { version = "0.10.0", features = ["download_metadata"] } +polymesh-api = { git = "https://github.com/PolymeshAssociation/polymesh-api", branch = "update-new-type", features = ["download_metadata"] } +polymesh-api-client-extras = { git = "https://github.com/PolymeshAssociation/polymesh-api", branch = "update-new-type"} +polymesh-api-tester = { git = "https://github.com/PolymeshAssociation/polymesh-api", branch = "update-new-type", features = ["download_metadata"] } diff --git a/pallets/balances/Cargo.toml b/pallets/balances/Cargo.toml deleted file mode 100644 index 2bd4a7fa41..0000000000 --- a/pallets/balances/Cargo.toml +++ /dev/null @@ -1,62 +0,0 @@ -[package] -name = "pallet-balances" -version = "0.1.0" -authors = ["PolymeshAssociation"] -edition = "2021" - -[dependencies] -# Our pallets -pallet-permissions = { workspace = true, default-features = false } -pallet-identity = { workspace = true, default-features = false } -polymesh-primitives = { workspace = true, default-features = false } - -log = "0.4.8" -serde = { version = "1.0.104", default-features = false } -serde_derive = { version = "1.0.104", optional = true, default-features = false} - -codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-arithmetic = { version = "6.0.0", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } - -pallet-timestamp = { version = "4.0.0-dev", default-features = false } - -# Benchmarking -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } - -[features] -equalize = [] -default = ["std", "equalize"] -no_std = [] -only-staking = [] -std = [ - "serde_derive", - "serde/std", - "codec/std", - "sp-std/std", - "sp-io/std", - "sp-core/std", - "sp-runtime/std", - "sp-version/std", - "sp-api/std", - "sp-arithmetic/std", - "frame-system/std", - "frame-support/std", - "pallet-timestamp/std", - "polymesh-primitives/std", - "pallet-permissions/std", - "pallet-identity/std", -] -runtime-benchmarks = [ - "frame-benchmarking", - "pallet-permissions/runtime-benchmarks", - "pallet-identity/runtime-benchmarks", -] -try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/balances/src/benchmarking.rs b/pallets/balances/src/benchmarking.rs deleted file mode 100644 index f8f1ac8dc5..0000000000 --- a/pallets/balances/src/benchmarking.rs +++ /dev/null @@ -1,91 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) 2020 Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Balances pallet benchmarking. - -use super::*; -use crate::Pallet as Balances; -use frame_benchmarking::benchmarks; -use frame_system::RawOrigin; -use pallet_identity::benchmarking::UserBuilder; - -fn make_worst_memo() -> Option { - Some(Memo([7u8; 32])) -} - -benchmarks! { - // Benchmark `transfer` extrinsic with the worst possible conditions: - // * Transfer will create the recipient account. - transfer { - let amount = Balance::from(500u32); - let caller = UserBuilder::::default().balance(1200u32).generate_did().build("caller"); - let recipient = UserBuilder::::default().balance(0u32).generate_did().build( "recipient"); - }: _(caller.origin(), recipient.lookup(), amount) - verify { - assert_eq!(Balances::::free_balance(&caller.account), (1200u32-500).into()); - assert_eq!(Balances::::free_balance(&recipient.account), amount); - } - - transfer_with_memo { - let caller = UserBuilder::::default().balance(1000u32).generate_did().build("caller"); - let recipient = UserBuilder::::default().balance(0u32).generate_did().build("recipient"); - let amount = 42u32.into(); - let memo = make_worst_memo(); - - }: _(caller.origin(), recipient.lookup(), amount, memo) - verify { - assert_eq!(Balances::::free_balance(&caller.account), (1000u32-42).into()); - assert_eq!(Balances::::free_balance(&recipient.account), amount); - } - - deposit_block_reward_reserve_balance { - let caller = UserBuilder::::default().balance(1000u32).generate_did().build("caller"); - let amount = 500u32.into(); - }: _(caller.origin(), amount) - verify { - assert_eq!(Balances::::free_balance(&caller.account), (1000u32-500).into()); - assert_eq!(Balances::::block_rewards_reserve_balance(), amount); - } - - set_balance { - let caller = UserBuilder::::default().balance(1000u32).generate_did().build("caller"); - let free_balance: Balance = 1_000_000u32.into(); - let reserved_balance: Balance = 100u32.into(); - }: _(RawOrigin::Root, caller.lookup(), free_balance.clone(), reserved_balance) - verify { - assert_eq!(Balances::::free_balance(&caller.account), free_balance); - assert_eq!(Balances::::reserved_balance(&caller.account), reserved_balance); - } - - force_transfer { - let source = UserBuilder::::default().balance(1000u32).generate_did().build("source"); - let dest = UserBuilder::::default().balance(1u32).generate_did().build("dest"); - let amount = 500u32.into(); - }: _(RawOrigin::Root, source.lookup(), dest.lookup(), amount) - verify { - assert_eq!(Balances::::free_balance(&source.account), (1000u32-500).into()); - assert_eq!(Balances::::free_balance(&dest.account), (1u32+500).into()); - } - - burn_account_balance { - let caller = UserBuilder::::default().balance(1000u32).generate_did().build("caller"); - let amount = 500u32.into(); - }: _(caller.origin(), amount) - verify { - assert_eq!(Balances::::free_balance(&caller.account), (1000u32-500).into()); - } -} diff --git a/pallets/balances/src/imbalances.rs b/pallets/balances/src/imbalances.rs deleted file mode 100644 index de981826b8..0000000000 --- a/pallets/balances/src/imbalances.rs +++ /dev/null @@ -1,193 +0,0 @@ -// This file is part of the Polymesh distribution (https://github.com/PolymeshAssociation/Polymesh). -// Copyright (c) 2020 Polymesh Association - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3. - -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -use crate::BlockRewardConfig; -use core::marker::PhantomData; -use frame_support::traits::{Imbalance, SameOrOther, TryDrop}; -use polymesh_primitives::traits::BlockRewardsReserveCurrency; -use polymesh_primitives::Balance; -use sp_arithmetic::traits::Zero; -use sp_std::{mem, result}; - -// wrapping these imbalances in a private module is necessary to ensure absolute privacy -// of the inner member. - -/// Opaque, move-only struct with private fields that serves as a token denoting that -/// funds have been created without any equal and opposite accounting. -#[must_use] -pub struct PositiveImbalance(Balance, PhantomData); - -impl Default for PositiveImbalance { - fn default() -> Self { - Self::new(<_>::default()) - } -} - -impl PositiveImbalance { - /// Create a new positive imbalance from a balance. - pub fn new(amount: Balance) -> Self { - PositiveImbalance(amount, PhantomData) - } -} - -impl TryDrop for PositiveImbalance { - fn try_drop(self) -> result::Result<(), Self> { - self.drop_zero() - } -} - -impl Imbalance for PositiveImbalance { - type Opposite = NegativeImbalance; - - fn zero() -> Self { - Self::new(Zero::zero()) - } - - fn drop_zero(self) -> result::Result<(), Self> { - if self.0.is_zero() { - Ok(()) - } else { - Err(self) - } - } - - fn split(self, amount: Balance) -> (Self, Self) { - let first = self.0.min(amount); - let second = self.0 - first; - - mem::forget(self); - (Self::new(first), Self::new(second)) - } - - fn merge(mut self, other: Self) -> Self { - self.0 = self.0.saturating_add(other.0); - mem::forget(other); - - self - } - - fn subsume(&mut self, other: Self) { - self.0 = self.0.saturating_add(other.0); - mem::forget(other); - } - - fn offset(self, other: Self::Opposite) -> SameOrOther { - let (a, b) = (self.0, other.0); - mem::forget((self, other)); - - if a > b { - SameOrOther::Same(Self::new(a - b)) - } else if b > a { - SameOrOther::Other(NegativeImbalance::new(b - a)) - } else { - SameOrOther::None - } - } - - fn peek(&self) -> Balance { - self.0 - } -} - -impl Drop for PositiveImbalance { - /// Basic drop handler will just square up the total issuance. - fn drop(&mut self) { - T::BlockRewardsReserve::drop_positive_imbalance(self.0); - } -} - -/// Opaque, move-only struct with private fields that serves as a token denoting that -/// funds have been destroyed without any equal and opposite accounting. -#[must_use] -pub struct NegativeImbalance(Balance, PhantomData); - -impl Default for NegativeImbalance { - fn default() -> Self { - Self::new(<_>::default()) - } -} - -impl NegativeImbalance { - /// Create a new negative imbalance from a balance. - pub fn new(amount: Balance) -> Self { - NegativeImbalance(amount, PhantomData) - } -} - -impl TryDrop for NegativeImbalance { - fn try_drop(self) -> result::Result<(), Self> { - self.drop_zero() - } -} - -impl Imbalance for NegativeImbalance { - type Opposite = PositiveImbalance; - - fn zero() -> Self { - Self::new(Zero::zero()) - } - - fn drop_zero(self) -> result::Result<(), Self> { - if self.0.is_zero() { - Ok(()) - } else { - Err(self) - } - } - - fn split(self, amount: Balance) -> (Self, Self) { - let first = self.0.min(amount); - let second = self.0 - first; - - mem::forget(self); - (Self::new(first), Self::new(second)) - } - - fn merge(mut self, other: Self) -> Self { - self.0 = self.0.saturating_add(other.0); - mem::forget(other); - - self - } - - fn subsume(&mut self, other: Self) { - self.0 = self.0.saturating_add(other.0); - mem::forget(other); - } - - fn offset(self, other: Self::Opposite) -> SameOrOther { - let (a, b) = (self.0, other.0); - mem::forget((self, other)); - - if a > b { - SameOrOther::Same(Self::new(a - b)) - } else if b > a { - SameOrOther::Other(PositiveImbalance::new(b - a)) - } else { - SameOrOther::None - } - } - - fn peek(&self) -> Balance { - self.0 - } -} - -impl Drop for NegativeImbalance { - /// Basic drop handler will just square up the total issuance. - fn drop(&mut self) { - T::BlockRewardsReserve::drop_negative_imbalance(self.0); - } -} diff --git a/pallets/balances/src/lib.rs b/pallets/balances/src/lib.rs deleted file mode 100644 index 5165a8d003..0000000000 --- a/pallets/balances/src/lib.rs +++ /dev/null @@ -1,1514 +0,0 @@ -// Copyright 2017-2019 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -// Modified by Polymesh Association - 16th March 2020 -// Implement `BlockRewardsReserveCurrency` trait in the balances module. -// Remove migration functionality from the balances module as Polymesh doesn't needed -// any migration data structure. - -//! # Balances Module -//! -//! The Balances module provides functionality for handling accounts and balances. -//! -//! - [`balances::Trait`](./trait.Trait.html) -//! - [`Call`](./enum.Call.html) -//! - [`Module`](./struct.Module.html) -//! -//! ## Overview -//! -//! This is a modified implementation of substrate's balances FRAME. -//! The modifications made are as follows: -//! -//! - To curb front running, sending a tip along with your transaction is now prohibited. -//! - Added From trait to Balances type. -//! - Removed existential amount requirement to prevent a replay attack scenario. -//! - Added block rewards reserve that subsidize minting for block rewards. -//! - Added CDD check for POLYX recipients. -//! - Added ability to attach a memo with a transfer. -//! - Added ability to burn your tokens. -//! -//! The Original Balances module provides functions for: -//! -//! - Getting and setting free balances. -//! - Retrieving total, reserved and unreserved balances. -//! - Repatriating a reserved balance to a beneficiary account that exists. -//! - Transferring a balance between accounts (when not reserved). -//! - Slashing an account balance. -//! - Account creation and removal. -//! - Managing total issuance. -//! - Setting and managing locks. -//! -//! ### Terminology -//! -//! - **Total Issuance:** The total number of units in existence in a system. -//! - **Reaping an account:** The act of removing an account by resetting its nonce. Happens after its balance is set -//! to zero. -//! - **Free Balance:** The portion of a balance that is not reserved. The free balance is the only balance that matters -//! for most operations. -//! - **Reserved Balance:** Reserved balance still belongs to the account holder, but is suspended. Reserved balance -//! can still be slashed, but only after all the free balance has been slashed. -//! - **Imbalance:** A condition when some funds were credited or debited without equal and opposite accounting -//! (i.e. a difference between total issuance and account balances). Functions that result in an imbalance will -//! return an object of the `Imbalance` trait that can be managed within your runtime logic. (If an imbalance is -//! simply dropped, it should automatically maintain any book-keeping such as total issuance.) -//! - **Lock:** A freeze on a specified amount of an account's free balance until a specified block number. Multiple -//! locks always operate over the same funds, so they "overlay" rather than "stack". -//! - **Vesting:** Similar to a lock, this is another, but independent, liquidity restriction that reduces linearly -//! over time. -//! -//! ### Implementations -//! -//! The Balances module provides implementations for the following traits. If these traits provide the functionality -//! that you need, then you can avoid coupling with the Balances module. -//! -//! - [`Currency`](../frame_support/traits/trait.Currency.html): Functions for dealing with a -//! fungible assets system. -//! - [`ReservableCurrency`](../frame_support/traits/trait.ReservableCurrency.html): -//! Functions for dealing with assets that can be reserved from an account. -//! - [`LockableCurrency`](../frame_support/traits/trait.LockableCurrency.html): Functions for -//! dealing with accounts that allow liquidity restrictions. -//! - [`Imbalance`](../frame_support/traits/trait.Imbalance.html): Functions for handling -//! imbalances between total issuance in the system and account balances. Must be used when a function -//! creates new funds (e.g. a reward) or destroys some funds (e.g. a system fee). -//! -//! ## Interface -//! -//! ### Dispatchable Functions -//! -//! - `transfer` - Transfer some liquid free balance to another account. -//! - `transfer_with_memo` - Transfer some liquid free balance to another account alon with a memo. -//! - `set_balance` - Set the balances of a given account. The origin of this call must be root. -//! - `deposit_block_reward_reserve_balance` - Transfer some liquid free balance to block rewards reserve. -//! - `force_transfer` - Force transfer some balance from one account to another. The origin of this call must be root. -//! - `burn_account_balance` - Burn some liquid free balance. - -//! ### Public Functions -//! -//! - `free_balance` - Get the free balance of an account. -//! - `usable_balance` - Get the balance of an account that can be used for transfers, reservations, or any other non-locking, non-transaction-fee activity. -//! - `usable_balance_for_fees` - Get the balance of an account that can be used for paying transaction fees (not tipping, or any other kind of fees, though). -//! - `reserved_balance` - Get the reserved balance of an account. -//! ## Usage -//! -//! The following examples show how to use the Balances module in your custom module. -//! -//! ### Examples from the FRAME -//! -//! The Contract module uses the `Currency` trait to handle gas payment, and its types inherit from `Currency`: -//! -//! ``` -//! use frame_support::traits::Currency; -//! # pub trait Trait: frame_system::Config { -//! # type Currency: Currency; -//! # } -//! -//! pub type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; -//! pub type NegativeImbalanceOf = <::Currency as Currency<::AccountId>>::NegativeImbalance; -//! -//! # fn main() {} -//! ``` -//! -//! The Staking module uses the `LockableCurrency` trait to lock a stash account's funds: -//! -//! ``` -//! use frame_support::traits::{WithdrawReasons, LockableCurrency}; -//! use sp_runtime::traits::Bounded; -//! pub trait Trait: frame_system::Config { -//! type Currency: LockableCurrency; -//! } -//! # struct StakingLedger { -//! # stash: ::AccountId, -//! # total: <::Currency as frame_support::traits::Currency<::AccountId>>::Balance, -//! # phantom: std::marker::PhantomData, -//! # } -//! # const STAKING_ID: [u8; 8] = *b"staking "; -//! -//! fn update_ledger( -//! controller: &T::AccountId, -//! ledger: &StakingLedger -//! ) { -//! T::Currency::set_lock( -//! STAKING_ID, -//! &ledger.stash, -//! ledger.total, -//! WithdrawReasons::all() -//! ); -//! // >::insert(controller, ledger); // Commented out as we don't have access to Staking's storage here. -//! } -//! # fn main() {} -//! ``` -//! -//! ## Genesis config -//! -//! The Balances module depends on the [`GenesisConfig`](./struct.GenesisConfig.html). -//! -//! ## Assumptions -//! -//! * Total issued balanced of all accounts should be less than `Trait::Balance::max_value()`. - -#![cfg_attr(not(feature = "std"), no_std)] - -#[cfg(feature = "runtime-benchmarks")] -pub mod benchmarking; - -pub mod imbalances; -pub use imbalances::{NegativeImbalance, PositiveImbalance}; - -use codec::{Decode, Encode, MaxEncodedLen}; -use frame_support::{ - dispatch::{DispatchError, DispatchResult}, - ensure, - traits::{ - tokens::{fungible, BalanceStatus as Status, DepositConsequence, WithdrawConsequence}, - Currency, ExistenceRequirement, Get, Imbalance, LockIdentifier, LockableCurrency, - OnUnbalanced, ReservableCurrency, SignedImbalance, StoredMap, WithdrawReasons, - }, - weights::Weight, -}; -use frame_system::{self as system, ensure_root, ensure_signed}; -use polymesh_primitives::traits::{BlockRewardsReserveCurrency, CheckCdd, IdentityFnTrait}; -use polymesh_primitives::{Balance, IdentityId, Memo, SystematicIssuers, GC_DID}; -use scale_info::TypeInfo; -use sp_runtime::{ - traits::{AccountIdConversion, StaticLookup, Zero}, - RuntimeDebug, -}; -use sp_std::ops::BitOr; -use sp_std::{cmp, mem, prelude::*, result}; - -type CallPermissions = pallet_permissions::Pallet; - -pub trait BlockRewardConfig: Sized { - type BlockRewardsReserve: BlockRewardsReserveCurrency>; -} - -// POLYMESH-NOTE: Make `AccountData` public to access it from the outside module. -/// All balance information for an account. -#[derive( - Encode, - Decode, - Clone, - PartialEq, - Eq, - Default, - RuntimeDebug, - MaxEncodedLen, - TypeInfo -)] -pub struct AccountData { - /// Non-reserved part of the balance. There may still be restrictions on this, but it is the - /// total pool what may in principle be transferred, reserved and used for tipping. - /// - /// This is the only balance that matters in terms of most operations on tokens. It - /// alone is used to determine the balance when in the contract execution environment. - pub free: Balance, - /// Balance which is reserved and may not be used at all. - /// - /// This can still get slashed, but gets slashed last of all. - /// - /// This balance is a 'reserve' balance that other subsystems use in order to set aside tokens - /// that are still 'owned' by the account holder, but which are suspendable. - pub reserved: Balance, - /// The amount that `free` may not drop below when withdrawing for *anything except transaction - /// fee payment*. - pub misc_frozen: Balance, - /// The amount that `free` may not drop below when withdrawing specifically for transaction - /// fee payment. - pub fee_frozen: Balance, -} - -impl AccountData { - /// How much this account's balance can be reduced for the given `reasons`. - pub fn usable(&self, reasons: Reasons) -> Balance { - self.free.saturating_sub(self.frozen(reasons)) - } - /// The amount that this account's free balance may not be reduced beyond for the given - /// `reasons`. - pub fn frozen(&self, reasons: Reasons) -> Balance { - match reasons { - Reasons::All => self.misc_frozen.max(self.fee_frozen), - Reasons::Misc => self.misc_frozen, - Reasons::Fee => self.fee_frozen, - } - } - /// The total balance in this account including any that is reserved and ignoring any frozen. - pub fn total(&self) -> Balance { - self.free.saturating_add(self.reserved) - } -} - -/// Simplified reasons for withdrawing balance. -#[derive(Encode, Decode, Clone, Copy, PartialEq, Eq, RuntimeDebug, TypeInfo)] -#[allow(clippy::unnecessary_cast)] -pub enum Reasons { - /// Paying system transaction fees. - Fee = 0, - /// Any reason other than paying system transaction fees. - Misc = 1, - /// Any reason at all. - All = 2, -} - -impl From for Reasons { - fn from(r: WithdrawReasons) -> Reasons { - if r == WithdrawReasons::TRANSACTION_PAYMENT { - Reasons::Fee - } else if r.contains(WithdrawReasons::TRANSACTION_PAYMENT) { - Reasons::All - } else { - Reasons::Misc - } - } -} - -impl BitOr for Reasons { - type Output = Reasons; - fn bitor(self, other: Reasons) -> Reasons { - if self == other { - return self; - } - Reasons::All - } -} - -pub use pallet::*; - -#[frame_support::pallet] -pub mod pallet { - use super::*; - use frame_support::pallet_prelude::*; - use frame_system::pallet_prelude::*; - - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - /// An account was created with some free balance. \[did, account, free_balance] - Endowed(Option, T::AccountId, Balance), - /// Transfer succeeded (from_did, from, to_did, to, value, memo). - Transfer( - Option, - T::AccountId, - Option, - T::AccountId, - Balance, - Option, - ), - /// A balance was set by root (did, who, free, reserved). - BalanceSet(IdentityId, T::AccountId, Balance, Balance), - /// The account and the amount of unlocked balance of that account that was burned. - /// (caller Id, caller account, amount) - AccountBalanceBurned(IdentityId, T::AccountId, Balance), - /// Some balance was reserved (moved from free to reserved). \[who, value] - Reserved(T::AccountId, Balance), - /// Some balance was unreserved (moved from reserved to free). \[who, value] - Unreserved(T::AccountId, Balance), - /// Some balance was moved from the reserve of the first account to the second account. - /// Final argument indicates the destination balance type. - /// \[from, to, balance, destination_status] - ReserveRepatriated(T::AccountId, T::AccountId, Balance, Status), - } - - #[pallet::pallet] - pub struct Pallet(_); - - pub trait WeightInfo { - fn transfer() -> Weight; - fn transfer_with_memo() -> Weight; - fn deposit_block_reward_reserve_balance() -> Weight; - fn set_balance() -> Weight; - fn force_transfer() -> Weight; - fn burn_account_balance() -> Weight; - } - - #[pallet::config] - pub trait Config: frame_system::Config + pallet_identity::Config + BlockRewardConfig { - /// The means of storing the balances of an account. - type AccountStore: StoredMap; - - /// Handler for the unbalanced reduction when removing a dust account. - type DustRemoval: OnUnbalanced>; - - /// The overarching event type. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - - /// This type is no longer needed but kept for compatibility reasons. - /// The minimum amount required to keep an account open. - #[pallet::constant] - type ExistentialDeposit: Get; - - /// Used to check if an account is linked to a CDD'd identity - type CddChecker: CheckCdd; - - /// Weight information for extrinsics in this pallet. - type WeightInfo: WeightInfo; - - /// The maximum number of locks that should exist on an account. - /// Not strictly enforced, but used for weight estimation. - type MaxLocks: Get; - } - - /// Additional functionality atop `LockableCurrency` allowing a local, - /// per-id, stacking layer atop the overlay. - pub trait LockableCurrencyExt: - LockableCurrency - { - /// Reduce the locked amount under `id` for `who`. - /// If less than `amount` was locked, then `InsufficientBalance` is raised. - /// If the whole locked amount is reduced, then the lock is removed. - fn reduce_lock(id: LockIdentifier, who: &AccountId, amount: Balance) -> DispatchResult; - - /// Increase the locked amount under `id` for `who` or raises `Overflow`. - /// If there's no lock already, it will be made, unless `amount.is_zero()`. - /// Before committing to storage, `check_sum` is called with the lock total, - /// allowing the transaction to be aborted. - fn increase_lock( - id: LockIdentifier, - who: &AccountId, - amount: Balance, - reasons: WithdrawReasons, - check_sum: impl FnOnce(Balance) -> DispatchResult, - ) -> DispatchResult; - } - - #[pallet::error] - pub enum Error { - /// Account liquidity restrictions prevent withdrawal - LiquidityRestrictions, - /// Got an overflow after adding - Overflow, - /// Balance too low to send value - InsufficientBalance, - /// Value too low to create account due to existential deposit - ExistentialDeposit, - /// Receiver does not have a valid CDD - ReceiverCddMissing, - } - - /// A single lock on a balance. There can be many of these on an account and they "overlap", so the - /// same balance is frozen by multiple locks. - #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo)] - pub struct BalanceLock { - /// An identifier for this lock. Only one lock may be in existence for each identifier. - pub id: LockIdentifier, - /// The amount which the free balance may not drop below when this lock is in effect. - pub amount: Balance, - /// If true, then the lock remains in effect even for payment of transaction fees. - pub reasons: Reasons, - } - - /// The total units issued in the system. - #[pallet::storage] - pub type TotalIssuance = StorageValue<_, Balance, ValueQuery>; - - /// Any liquidity locks on some account balances. - /// NOTE: Should only be accessed when setting, changing and freeing a lock. - #[pallet::storage] - #[pallet::unbounded] - pub type Locks = - StorageMap<_, Blake2_128Concat, T::AccountId, Vec>, ValueQuery>; - - #[pallet::genesis_config] - #[derive(frame_support::DefaultNoBound)] - pub struct GenesisConfig { - pub balances: Vec<(T::AccountId, Balance)>, - } - - #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { - fn build(&self) { - let f = |u: Balance, &v| u + v; - let total: Balance = self.balances.iter().map(|(_, v)| v).fold(Zero::zero(), f); - TotalIssuance::::put(total); - - for (who, free) in &self.balances { - T::AccountStore::insert( - who, - AccountData { - free: *free, - ..Default::default() - }, - ) - .unwrap(); - } - } - } - - #[pallet::call] - impl Pallet { - /// Transfer some liquid free balance to another account. - /// - /// `transfer` will set the `FreeBalance` of the sender and receiver. - /// It will decrease the total issuance of the system by the `TransferFee`. - /// - /// The dispatch origin for this call must be `Signed` by the transactor. - /// - /// # - /// - Dependent on arguments but not critical, given proper implementations for - /// input config types. See related functions below. - /// - It contains a limited number of reads and writes internally and no complex computation. - /// - /// Related functions: - /// - /// - `ensure_can_withdraw` is always called internally but has a bounded complexity. - /// - Transferring balances to accounts that did not exist before will cause - /// `T::OnNewAccount::on_new_account` to be called. - /// --------------------------------- - /// - Base Weight: 73.64 µs, worst case scenario (account created, account removed) - /// - DB Weight: 1 Read and 1 Write to destination account. - /// - Origin account is already in memory, so no DB operations for them. - /// # - #[pallet::weight(::WeightInfo::transfer())] - #[pallet::call_index(0)] - pub fn transfer( - origin: OriginFor, - dest: ::Source, - #[pallet::compact] value: Balance, - ) -> DispatchResult { - let transactor = ensure_signed(origin)?; - let dest = T::Lookup::lookup(dest)?; - // Polymesh modified code. CDD is checked before processing transfer. - Self::transfer_core( - &transactor, - &dest, - value, - None, - ExistenceRequirement::AllowDeath, - ) - } - - // Polymesh modified code. New function to transfer with a memo. - /// Transfer the native currency with the help of identifier string - /// this functionality can help to differentiate the transfers. - /// - /// # - /// - Base Weight: 73.64 µs, worst case scenario (account created, account removed) - /// - DB Weight: 1 Read and 1 Write to destination account. - /// - Origin account is already in memory, so no DB operations for them. - /// # - #[pallet::weight(::WeightInfo::transfer_with_memo())] - #[pallet::call_index(1)] - pub fn transfer_with_memo( - origin: OriginFor, - dest: ::Source, - #[pallet::compact] value: Balance, - memo: Option, - ) -> DispatchResult { - let transactor = ensure_signed(origin)?; - let dest = T::Lookup::lookup(dest)?; - Self::transfer_core( - &transactor, - &dest, - value, - memo, - ExistenceRequirement::AllowDeath, - ) - } - - // Polymesh specific change. New function to transfer balance to BRR. - /// Move some POLYX from balance of self to balance of BRR. - #[pallet::weight(::WeightInfo::deposit_block_reward_reserve_balance())] - #[pallet::call_index(2)] - pub fn deposit_block_reward_reserve_balance( - origin: OriginFor, - #[pallet::compact] value: Balance, - ) -> DispatchResult { - let transactor = ensure_signed(origin)?; - CallPermissions::::ensure_call_permissions(&transactor)?; - let dest = Self::block_rewards_reserve(); - Self::transfer_core( - &transactor, - &dest, - value, - None, - ExistenceRequirement::AllowDeath, - ) - } - - /// Set the balances of a given account. - /// - /// This will alter `FreeBalance` and `ReservedBalance` in storage. it will - /// also decrease the total issuance of the system (`TotalIssuance`). - /// - /// The dispatch origin for this call is `root`. - #[pallet::weight(::WeightInfo::set_balance())] - #[pallet::call_index(3)] - pub fn set_balance( - origin: OriginFor, - who: ::Source, - #[pallet::compact] new_free: Balance, - #[pallet::compact] new_reserved: Balance, - ) -> DispatchResult { - ensure_root(origin)?; - let who = T::Lookup::lookup(who)?; - let caller_id = GC_DID; - - let (free, reserved) = Self::mutate_account(&who, |account| { - if new_free > account.free { - mem::drop(PositiveImbalance::::new(new_free - account.free)); - } else if new_free < account.free { - mem::drop(NegativeImbalance::::new(account.free - new_free)); - } - - if new_reserved > account.reserved { - mem::drop(PositiveImbalance::::new(new_reserved - account.reserved)); - } else if new_reserved < account.reserved { - mem::drop(NegativeImbalance::::new(account.reserved - new_reserved)); - } - - account.free = new_free; - account.reserved = new_reserved; - - (account.free, account.reserved) - }); - Self::deposit_event(Event::BalanceSet(caller_id, who, free, reserved)); - Ok(()) - } - - /// Exactly as `transfer`, except the origin must be root and the source account may be - /// specified. - /// - /// # - /// - Same as transfer, but additional read and write because the source account is - /// not assumed to be in the overlay. - /// # - #[pallet::weight(::WeightInfo::force_transfer())] - #[pallet::call_index(4)] - pub fn force_transfer( - origin: OriginFor, - source: ::Source, - dest: ::Source, - #[pallet::compact] value: Balance, - ) -> DispatchResult { - ensure_root(origin)?; - let source = T::Lookup::lookup(source)?; - let dest = T::Lookup::lookup(dest)?; - Self::transfer_core( - &source, - &dest, - value, - None, - ExistenceRequirement::AllowDeath, - ) - } - - // Polymesh modified code. New dispatchable function that anyone can call to burn their balance. - /// Burns the given amount of tokens from the caller's free, unlocked balance. - #[pallet::weight(::WeightInfo::burn_account_balance())] - #[pallet::call_index(5)] - pub fn burn_account_balance(origin: OriginFor, amount: Balance) -> DispatchResult { - let who = ensure_signed(origin)?; - let caller_id = CallPermissions::::ensure_call_permissions(&who)?.primary_did; - // Withdraw the account balance and burn the resulting imbalance by dropping it. - let _ = >::withdraw( - &who, - amount, - // There is no specific "burn" reason in Substrate. However, if the caller is - // allowed to transfer then they should also be allowed to burn. - WithdrawReasons::TRANSFER, - ExistenceRequirement::AllowDeath, - )?; - Self::deposit_event(Event::AccountBalanceBurned(caller_id, who, amount)); - Ok(()) - } - } -} - -impl Pallet { - // PRIVATE MUTABLES - - /// Get the free balance of an account. - pub fn free_balance(who: impl sp_std::borrow::Borrow) -> Balance { - Self::account(who.borrow()).free - } - - /// Get the balance of an account that can be used for transfers, reservations, or any other - /// non-locking, non-transaction-fee activity. Will be at most `free_balance`. - pub fn usable_balance(who: impl sp_std::borrow::Borrow) -> Balance { - Self::account(who.borrow()).usable(Reasons::Misc) - } - - /// Get the balance of an account that can be used for paying transaction fees (not tipping, - /// or any other kind of fees, though). Will be at most `free_balance`. - pub fn usable_balance_for_fees(who: impl sp_std::borrow::Borrow) -> Balance { - Self::account(who.borrow()).usable(Reasons::Fee) - } - - /// Get the reserved balance of an account. - pub fn reserved_balance(who: impl sp_std::borrow::Borrow) -> Balance { - Self::account(who.borrow()).reserved - } - - pub fn block_rewards_reserve() -> T::AccountId { - SystematicIssuers::BlockRewardReserve - .as_pallet_id() - .into_account_truncating() - } - - /// Get both the free and reserved balances of an account. - fn account(who: &T::AccountId) -> AccountData { - T::AccountStore::get(&who) - } - - /// Places the `free` and `reserved` parts of `new` into `account`. Also does any steps needed - /// after mutating an account. This includes DustRemoval unbalancing, in the case than the `new` - /// account's total balance is non-zero but below ED. - /// - /// Returns the final free balance, iff the account was previously of total balance zero, known - /// as its "endowment". - fn post_mutation(_who: &T::AccountId, new: AccountData) -> Option { - // Polymesh modified code. Removed Existential Deposit logic - Some(new) - } - - fn deposit_consequence( - _who: &T::AccountId, - amount: Balance, - account: &AccountData, - mint: bool, - ) -> DepositConsequence { - if amount.is_zero() { - return DepositConsequence::Success; - } - - if mint && TotalIssuance::::get().checked_add(amount).is_none() { - return DepositConsequence::Overflow; - } - - let new_total_balance = match account.total().checked_add(amount) { - Some(x) => x, - None => return DepositConsequence::Overflow, - }; - - if new_total_balance < T::ExistentialDeposit::get() { - return DepositConsequence::BelowMinimum; - } - - // NOTE: We assume that we are a provider, so don't need to do any checks in the - // case of account creation. - - DepositConsequence::Success - } - - fn withdraw_consequence( - who: &T::AccountId, - amount: Balance, - account: &AccountData, - ) -> WithdrawConsequence { - if amount.is_zero() { - return WithdrawConsequence::Success; - } - - if TotalIssuance::::get().checked_sub(amount).is_none() { - return WithdrawConsequence::Underflow; - } - - let new_total_balance = match account.total().checked_sub(amount) { - Some(x) => x, - None => return WithdrawConsequence::NoFunds, - }; - - // Provider restriction - total account balance cannot be reduced to zero if it cannot - // sustain the loss of a provider reference. - // NOTE: This assumes that the pallet is a provider (which is true). Is this ever changes, - // then this will need to adapt accordingly. - let ed = T::ExistentialDeposit::get(); - let success = if new_total_balance < ed { - if frame_system::Pallet::::can_dec_provider(who) { - WithdrawConsequence::ReducedToZero(new_total_balance) - } else { - return WithdrawConsequence::WouldDie; - } - } else { - WithdrawConsequence::Success - }; - - // Enough free funds to have them be reduced. - let new_free_balance = match account.free.checked_sub(amount) { - Some(b) => b, - None => return WithdrawConsequence::NoFunds, - }; - - // Eventual free funds must be no less than the frozen balance. - let min_balance = account.frozen(Reasons::All); - if new_free_balance < min_balance { - return WithdrawConsequence::Frozen; - } - - success - } - - /// Mutate an account to some new value, or delete it entirely with `None`. - /// - /// NOTE: Doesn't do any preparatory work for creating a new account, so should only be used - /// when it is known that the account already exists. - /// - /// NOTE: LOW-LEVEL: This will not attempt to maintain total issuance. It is expected that - /// the caller will do this. - pub fn mutate_account(who: &T::AccountId, f: impl FnOnce(&mut AccountData) -> R) -> R { - Self::try_mutate_account(who, |a, _| -> Result { Ok(f(a)) }) - .expect("Error is infallible; qed") - } - - /// Mutate an account to some new value, or delete it entirely with `None`. - /// This will do nothing if the result of `f` is an `Err`. - /// - /// NOTE: Doesn't do any preparatory work for creating a new account, so should only be used - /// when it is known that the account already exists. - /// - /// NOTE: LOW-LEVEL: This will not attempt to maintain total issuance. It is expected that - /// the caller will do this. - fn try_mutate_account>( - who: &T::AccountId, - f: impl FnOnce(&mut AccountData, bool) -> Result, - ) -> Result { - T::AccountStore::try_mutate_exists(who, |maybe_account| { - let is_new = maybe_account.is_none(); - let mut account = maybe_account.take().unwrap_or_default(); - f(&mut account, is_new).map(move |result| { - let maybe_endowed = if is_new { Some(account.free) } else { None }; - // `post_mutation` always return the same account store - *maybe_account = Self::post_mutation(who, account); - (maybe_endowed, result) - }) - }) - .map(|(maybe_endowed, result)| { - if let Some(endowed) = maybe_endowed { - // Polymesh-note: Modified the code in the favour of Polymesh code base - let who_id = T::IdentityFn::get_identity(who); - Self::deposit_event(Event::Endowed(who_id, who.clone(), endowed)); - } - result - }) - } - - /// Update the account entry for `who`, given the locks. - fn update_locks(who: &T::AccountId, locks: &[BalanceLock]) { - if locks.len() as u32 > T::MaxLocks::get() { - log::warn!( - "Warning: A user has more currency locks than expected. \ - A runtime configuration adjustment may be needed." - ); - } - - Self::mutate_account(who, |b| { - b.misc_frozen = Zero::zero(); - b.fee_frozen = Zero::zero(); - for l in locks.iter() { - if l.reasons == Reasons::All || l.reasons == Reasons::Misc { - b.misc_frozen = b.misc_frozen.max(l.amount); - } - if l.reasons == Reasons::All || l.reasons == Reasons::Fee { - b.fee_frozen = b.fee_frozen.max(l.amount); - } - } - }); - - let existed = Locks::::contains_key(who); - if locks.is_empty() { - Locks::::remove(who); - if existed { - // TODO: use Locks::::hashed_key - // https://github.com/paritytech/substrate/issues/4969 - system::Pallet::::dec_consumers(who); - } - } else { - Locks::::insert(who, locks); - if !existed { - let _ = system::Pallet::::inc_consumers(who); - } - } - } - - /// Common functionality for transfers. - /// It does not emit any event. - /// - /// # Return - /// On success, It will return the applied feed. - // Transfer some free balance from `transactor` to `dest`. - // Is a no-op if value to be transferred is zero or the `transactor` is the same as `dest`. - fn transfer_core( - transactor: &T::AccountId, - dest: &T::AccountId, - value: Balance, - memo: Option, - _existence_requirement: ExistenceRequirement, - ) -> DispatchResult { - if value.is_zero() || transactor == dest { - return Ok(()); - } - - Self::try_mutate_account(dest, |to_account, _| -> DispatchResult { - Self::try_mutate_account(transactor, |from_account, _| -> DispatchResult { - from_account.free = from_account - .free - .checked_sub(value) - .ok_or(Error::::InsufficientBalance)?; - - // NOTE: total stake being stored in the same type means that this could never overflow - // but better to be safe than sorry. - to_account.free = to_account - .free - .checked_add(value) - .ok_or(Error::::Overflow)?; - - Self::ensure_can_withdraw( - transactor, - value, - WithdrawReasons::TRANSFER, - from_account.free, - )?; - - Ok(()) - }) - })?; - - let transactor_id = T::IdentityFn::get_identity(transactor); - let dest_id = T::IdentityFn::get_identity(dest); - - Self::deposit_event(Event::Transfer( - transactor_id, - transactor.clone(), - dest_id, - dest.clone(), - value, - memo, - )); - - Ok(()) - } -} - -// Polymesh modified code. Managed BRR related functions. -impl BlockRewardsReserveCurrency> for Pallet { - // Polymesh modified code. Drop behavious modified to reduce BRR balance instead of inflating total supply. - fn drop_positive_imbalance(mut amount: Balance) { - if amount.is_zero() { - return; - } - let brr = Self::block_rewards_reserve(); - let _ = Self::try_mutate_account(&brr, |account, _| -> DispatchResult { - if account.free > Zero::zero() { - let old_brr_free_balance = account.free; - let new_brr_free_balance = old_brr_free_balance.saturating_sub(amount); - account.free = new_brr_free_balance; - // Calculate how much amount to mint that is not available with the Brr - // eg. amount = 100 and the account.free = 60 then `amount_to_mint` = 40 - amount -= old_brr_free_balance - new_brr_free_balance; - } - TotalIssuance::::mutate(|v| *v = v.saturating_add(amount)); - Ok(()) - }); - } - - fn drop_negative_imbalance(amount: Balance) { - TotalIssuance::::mutate(|v| *v = v.saturating_sub(amount)); - } - - // Polymesh modified code. Instead of minting new tokens, this function tries to transfer tokens from BRR to the beneficiary. - // If BRR does not have enough free funds, new tokens are issued. - fn issue_using_block_rewards_reserve(mut amount: Balance) -> NegativeImbalance { - if amount.is_zero() { - return NegativeImbalance::zero(); - } - let brr = Self::block_rewards_reserve(); - Self::try_mutate_account( - &brr, - |account, _| -> Result, DispatchError> { - let amount_to_mint = if account.free > Zero::zero() { - let old_brr_free_balance = account.free; - let new_brr_free_balance = old_brr_free_balance.saturating_sub(amount); - account.free = new_brr_free_balance; - // Calculate how much amount to mint that is not available with the Brr - // eg. amount = 100 and the account.free = 60 then `amount_to_mint` = 40 - amount - (old_brr_free_balance - new_brr_free_balance) - } else { - amount - }; - TotalIssuance::::mutate(|issued| { - *issued = issued.checked_add(amount_to_mint).unwrap_or_else(|| { - amount = Balance::max_value() - *issued; - Balance::max_value() - }) - }); - Ok(NegativeImbalance::new(amount)) - }, - ) - .unwrap_or_else(|_x| NegativeImbalance::new(Zero::zero())) - } - - // Polymesh modified code. Returns balance of BRR - fn block_rewards_reserve_balance() -> Balance { - let brr = Self::block_rewards_reserve(); - >::free_balance(&brr) - } -} - -impl Currency for Pallet { - type Balance = Balance; - type PositiveImbalance = PositiveImbalance; - type NegativeImbalance = NegativeImbalance; - - fn total_balance(who: &T::AccountId) -> Self::Balance { - Self::account(who).total() - } - - // Check if `value` amount of free balance can be slashed from `who`. - fn can_slash(who: &T::AccountId, value: Self::Balance) -> bool { - if value.is_zero() { - return true; - } - Self::free_balance(who) >= value - } - - fn total_issuance() -> Self::Balance { - TotalIssuance::::get() - } - - fn minimum_balance() -> Self::Balance { - Zero::zero() - } - - fn free_balance(who: &T::AccountId) -> Self::Balance { - Self::account(who).free - } - - // Burn funds from the total issuance, returning a positive imbalance for the amount burned. - // Is a no-op if amount to be burned is zero. - fn burn(mut amount: Self::Balance) -> Self::PositiveImbalance { - if amount.is_zero() { - return PositiveImbalance::zero(); - } - TotalIssuance::::mutate(|issued| { - *issued = issued.checked_sub(amount).unwrap_or_else(|| { - amount = *issued; - Zero::zero() - }); - }); - PositiveImbalance::new(amount) - } - - // Create new funds into the total issuance, returning a negative imbalance - // for the amount issued. - // Is a no-op if amount to be issued it zero. - fn issue(mut amount: Self::Balance) -> Self::NegativeImbalance { - if amount.is_zero() { - return NegativeImbalance::zero(); - } - TotalIssuance::::mutate(|issued| { - *issued = issued.checked_add(amount).unwrap_or_else(|| { - amount = Self::Balance::max_value() - *issued; - Self::Balance::max_value() - }) - }); - NegativeImbalance::new(amount) - } - - // Ensure that an account can withdraw from their free balance given any existing withdrawal - // restrictions like locks and vesting balance. - // Is a no-op if amount to be withdrawn is zero. - // - // # - // Despite iterating over a list of locks, they are limited by the number of - // lock IDs, which means the number of runtime modules that intend to use and create locks. - // # - fn ensure_can_withdraw( - who: &T::AccountId, - amount: Balance, - reasons: WithdrawReasons, - new_balance: Balance, - ) -> DispatchResult { - if amount.is_zero() { - return Ok(()); - } - let min_balance = Self::account(who).frozen(reasons.into()); - ensure!( - new_balance >= min_balance, - Error::::LiquidityRestrictions - ); - Ok(()) - } - - /// Transfer some free balance from `transactor` to `dest`. - /// Is a no-op if value to be transferred is zero or the `transactor` is the same as `dest`. - fn transfer( - transactor: &T::AccountId, - dest: &T::AccountId, - value: Self::Balance, - existence_requirement: ExistenceRequirement, - ) -> DispatchResult { - Self::transfer_core(transactor, dest, value, None, existence_requirement) - } - - /// Transfer some free balance from `transactor` to `dest`. - /// Is a no-op if value to be transferred is zero or the `transactor` is the same as `dest`. - fn transfer_no_cdd( - transactor: &T::AccountId, - dest: &T::AccountId, - value: Self::Balance, - existence_requirement: ExistenceRequirement, - ) -> DispatchResult { - Self::transfer_core(transactor, dest, value, None, existence_requirement) - } - - /// Slash a target account `who`, returning the negative imbalance created and any left over - /// amount that could not be slashed. - /// - /// Is a no-op if `value` to be slashed is zero. - /// - /// NOTE: `slash()` prefers free balance, but assumes that reserve balance can be drawn - /// from in extreme circumstances. `can_slash()` should be used prior to `slash()` to avoid having - /// to draw from reserved funds, however we err on the side of punishment if things are inconsistent - /// or `can_slash` wasn't used appropriately. - fn slash(who: &T::AccountId, value: Self::Balance) -> (Self::NegativeImbalance, Self::Balance) { - if value.is_zero() { - return (NegativeImbalance::zero(), Zero::zero()); - } - if Self::total_balance(who).is_zero() { - return (NegativeImbalance::zero(), value); - } - - Self::mutate_account(who, |account| { - let free_slash = cmp::min(account.free, value); - account.free -= free_slash; - - let remaining_slash = value - free_slash; - if !remaining_slash.is_zero() { - let reserved_slash = cmp::min(account.reserved, remaining_slash); - account.reserved -= reserved_slash; - ( - NegativeImbalance::new(free_slash + reserved_slash), - remaining_slash - reserved_slash, - ) - } else { - (NegativeImbalance::new(value), Zero::zero()) - } - }) - } - - /// Deposit some `value` into the free balance of an existing target account `who`. - /// - /// Is a no-op if the `value` to be deposited is zero. - fn deposit_into_existing( - who: &T::AccountId, - value: Self::Balance, - ) -> Result { - if value.is_zero() { - return Ok(PositiveImbalance::zero()); - } - - Self::try_mutate_account( - who, - |account, _| -> Result { - // Polymesh modified code. Removed existential deposit requirements. - // This function is now logically equivalent to `deposit_creating`. - - account.free = account - .free - .checked_add(value) - .ok_or(Error::::Overflow)?; - Ok(PositiveImbalance::new(value)) - }, - ) - } - - /// Deposit some `value` into the free balance of `who`, possibly creating a new account. - /// - /// This function is a no-op if: - /// - the `value` to be deposited is zero; or - /// - `value` is so large it would cause the balance of `who` to overflow. - fn deposit_creating(who: &T::AccountId, value: Self::Balance) -> Self::PositiveImbalance { - if value.is_zero() { - return Self::PositiveImbalance::zero(); - } - - Self::try_mutate_account( - who, - |account, _| -> Result { - // Polymesh modified code. Removed existential deposit requirements. - // This function is now logically equivalent to `deposit_into_existing`. - account.free = match account.free.checked_add(value) { - Some(x) => x, - None => return Ok(Self::PositiveImbalance::zero()), - }; - - Ok(PositiveImbalance::new(value)) - }, - ) - .unwrap_or_else(|_| Self::PositiveImbalance::zero()) - } - - /// Withdraw some free balance from an account - /// - /// Is a no-op if value to be withdrawn is zero. - fn withdraw( - who: &T::AccountId, - value: Self::Balance, - reasons: WithdrawReasons, - _liveness: ExistenceRequirement, - ) -> result::Result { - if value.is_zero() { - return Ok(NegativeImbalance::zero()); - } - - Self::try_mutate_account( - who, - |account, _| -> Result { - let new_free_account = account - .free - .checked_sub(value) - .ok_or(Error::::InsufficientBalance)?; - - // Polymesh modified code. Removed existential deposit requirements. - - Self::ensure_can_withdraw(who, value, reasons, new_free_account)?; - - account.free = new_free_account; - - Ok(NegativeImbalance::new(value)) - }, - ) - } - - /// Force the new free balance of a target account `who` to some new value `balance`. - fn make_free_balance_be( - who: &T::AccountId, - value: Self::Balance, - ) -> SignedImbalance { - Self::try_mutate_account( - who, - |account, _| -> Result, DispatchError> { - // Polymesh modified code. Removed existential deposit requirements. - - let imbalance = if account.free <= value { - SignedImbalance::Positive(PositiveImbalance::new(value - account.free)) - } else { - SignedImbalance::Negative(NegativeImbalance::new(account.free - value)) - }; - account.free = value; - Ok(imbalance) - }, - ) - .unwrap_or_else(|_| SignedImbalance::Positive(Self::PositiveImbalance::zero())) - } -} - -impl ReservableCurrency for Pallet { - /// Check if `who` can reserve `value` from their free balance. - /// - /// Always `true` if value to be reserved is zero. - fn can_reserve(who: &T::AccountId, value: Self::Balance) -> bool { - if value.is_zero() { - return true; - } - Self::account(who) - .free - .checked_sub(value) - .map_or(false, |new_balance| { - Self::ensure_can_withdraw(who, value, WithdrawReasons::RESERVE, new_balance).is_ok() - }) - } - - fn reserved_balance(who: &T::AccountId) -> Self::Balance { - Self::account(who).reserved - } - - /// Move `value` from the free balance from `who` to their reserved balance. - /// - /// Is a no-op if value to be reserved is zero. - fn reserve(who: &T::AccountId, value: Self::Balance) -> DispatchResult { - if value.is_zero() { - return Ok(()); - } - - Self::try_mutate_account(who, |account, _| -> DispatchResult { - account.free = account - .free - .checked_sub(value) - .ok_or(Error::::InsufficientBalance)?; - account.reserved = account - .reserved - .checked_add(value) - .ok_or(Error::::Overflow)?; - Self::ensure_can_withdraw(who, value, WithdrawReasons::RESERVE, account.free) - })?; - Self::deposit_event(Event::Reserved(who.clone(), value)); - Ok(()) - } - - /// Unreserve some funds, returning any amount that was unable to be unreserved. - /// - /// Is a no-op if the value to be unreserved is zero. - /// - /// NOTE: returns amount value which wasn't successfully unreserved. - fn unreserve(who: &T::AccountId, value: Self::Balance) -> Self::Balance { - if value.is_zero() { - return Zero::zero(); - } - if Self::total_balance(who).is_zero() { - return value; - } - - let actual = Self::mutate_account(who, |account| { - let actual = cmp::min(account.reserved, value); - account.reserved -= actual; - // defensive only: this can never fail since total issuance which is at least free+reserved - // fits into the same data type. - account.free = account.free.saturating_add(actual); - actual - }); - - Self::deposit_event(Event::Unreserved(who.clone(), actual)); - value - actual - } - - /// Slash from reserved balance, returning the negative imbalance created, - /// and any amount that was unable to be slashed. - /// - /// Is a no-op if the value to be slashed is zero. - fn slash_reserved( - who: &T::AccountId, - value: Self::Balance, - ) -> (Self::NegativeImbalance, Self::Balance) { - if value.is_zero() { - return (NegativeImbalance::zero(), Zero::zero()); - } - if Self::total_balance(who).is_zero() { - return (NegativeImbalance::zero(), value); - } - - Self::mutate_account(who, |account| { - // underflow should never happen, but it if does, there's nothing to be done here. - let actual = cmp::min(account.reserved, value); - account.reserved -= actual; - (NegativeImbalance::new(actual), value - actual) - }) - } - - /// Move the reserved balance of one account into the balance of another, according to `status`. - /// - /// Is a no-op if: - /// - the value to be moved is zero; or - /// - the `slashed` id equal to `beneficiary` and the `status` is `Reserved`. - /// - /// NOTE: returns actual amount of transferred value in `Ok` case. - fn repatriate_reserved( - slashed: &T::AccountId, - beneficiary: &T::AccountId, - value: Self::Balance, - status: Status, - ) -> Result { - if value.is_zero() { - return Ok(Zero::zero()); - } - - if slashed == beneficiary { - return match status { - Status::Free => Ok(value.saturating_sub(Self::unreserve(slashed, value))), - Status::Reserved => Ok(value.saturating_sub(Self::reserved_balance(slashed))), - }; - } - - let actual = Self::try_mutate_account( - beneficiary, - |to_account, _| -> Result { - // Polymesh modified code. Removed existential deposit requirements. - Self::try_mutate_account( - slashed, - |from_account, _| -> Result { - let actual = cmp::min(from_account.reserved, value); - match status { - Status::Free => { - to_account.free = to_account - .free - .checked_add(actual) - .ok_or(Error::::Overflow)? - } - Status::Reserved => { - to_account.reserved = to_account - .reserved - .checked_add(actual) - .ok_or(Error::::Overflow)? - } - } - from_account.reserved -= actual; - Ok(actual) - }, - ) - }, - )?; - Self::deposit_event(Event::ReserveRepatriated( - slashed.clone(), - beneficiary.clone(), - actual, - status, - )); - Ok(value - actual) - } -} - -impl LockableCurrency for Pallet { - type Moment = T::BlockNumber; - - type MaxLocks = T::MaxLocks; - - // Polymesh-note: The implementations below differ from substrate in terms - // of performance (ours uses in-place modification), but are functionally equivalent. - - // Set a lock on the balance of `who`. - // Is a no-op if lock amount is zero or `reasons` `is_empty()`. - fn set_lock(id: LockIdentifier, who: &T::AccountId, amount: Balance, reasons: WithdrawReasons) { - if amount.is_zero() || reasons.is_empty() { - return; - } - let new_lock = BalanceLock { - id, - amount, - reasons: reasons.into(), - }; - let mut locks = Locks::::get(who); - if let Some(pos) = locks.iter().position(|l| l.id == id) { - locks[pos] = new_lock; - } else { - locks.push(new_lock); - } - Self::update_locks(who, &locks[..]); - } - - // Extend a lock on the balance of `who`. - // Is a no-op if lock amount is zero or `reasons` `is_empty()`. - fn extend_lock( - id: LockIdentifier, - who: &T::AccountId, - amount: Balance, - reasons: WithdrawReasons, - ) { - if amount.is_zero() || reasons.is_empty() { - return; - } - let reasons = reasons.into(); - let mut locks = Locks::::get(who); - if let Some(pos) = locks.iter().position(|l| l.id == id) { - let slot = &mut locks[pos]; - slot.amount = slot.amount.max(amount); - slot.reasons = slot.reasons | reasons; - } else { - locks.push(BalanceLock { - id, - amount, - reasons, - }); - } - Self::update_locks(who, &locks[..]); - } - - fn remove_lock(id: LockIdentifier, who: &T::AccountId) { - let mut locks = Locks::::get(who); - locks.retain(|l| l.id != id); - Self::update_locks(who, &locks[..]); - } -} - -impl LockableCurrencyExt for Pallet { - fn reduce_lock(id: LockIdentifier, who: &T::AccountId, amount: Balance) -> DispatchResult { - if amount.is_zero() { - return Ok(()); - } - let mut locks = Locks::::get(who); - locks - .iter() - .position(|l| l.id == id) - .and_then(|p| { - let slot = &mut locks[p].amount; - let new = slot.checked_sub(amount).map(|n| *slot = n); - if slot.is_zero() { - locks.swap_remove(p); - } - new - }) - .ok_or(Error::::InsufficientBalance)?; - Self::update_locks(who, &locks[..]); - Ok(()) - } - - fn increase_lock( - id: LockIdentifier, - who: &T::AccountId, - amount: Balance, - reasons: WithdrawReasons, - check_sum: impl FnOnce(Balance) -> DispatchResult, - ) -> DispatchResult { - if amount.is_zero() || reasons.is_empty() { - return Ok(()); - } - let reasons = reasons.into(); - let mut locks = Locks::::get(who); - check_sum(if let Some(pos) = locks.iter().position(|l| l.id == id) { - let slot = &mut locks[pos]; - slot.amount = slot - .amount - .checked_add(amount) - .ok_or(Error::::Overflow)?; - slot.reasons = slot.reasons | reasons; - slot.amount - } else { - locks.push(BalanceLock { - id, - amount, - reasons, - }); - amount - })?; - Self::update_locks(who, &locks[..]); - Ok(()) - } -} - -impl fungible::Inspect for Pallet { - type Balance = Balance; - - fn total_issuance() -> Self::Balance { - TotalIssuance::::get() - } - fn minimum_balance() -> Self::Balance { - T::ExistentialDeposit::get() - } - fn balance(who: &T::AccountId) -> Self::Balance { - Self::account(who).total() - } - fn reducible_balance(who: &T::AccountId, keep_alive: bool) -> Self::Balance { - let a = Self::account(who); - // Liquid balance is what is neither reserved nor locked/frozen. - let liquid = a.free.saturating_sub(a.fee_frozen.max(a.misc_frozen)); - if frame_system::Pallet::::can_dec_provider(who) && !keep_alive { - liquid - } else { - // `must_remain_to_exist` is the part of liquid balance which must remain to keep total - // over ED. - let must_remain_to_exist = - T::ExistentialDeposit::get().saturating_sub(a.total() - liquid); - liquid.saturating_sub(must_remain_to_exist) - } - } - fn can_deposit(who: &T::AccountId, amount: Self::Balance, mint: bool) -> DepositConsequence { - Self::deposit_consequence(who, amount, &Self::account(who), mint) - } - fn can_withdraw( - who: &T::AccountId, - amount: Self::Balance, - ) -> WithdrawConsequence { - Self::withdraw_consequence(who, amount, &Self::account(who)) - } -} diff --git a/pallets/pips/src/lib.rs b/pallets/pips/src/lib.rs index dc0fc19824..53752ed65d 100644 --- a/pallets/pips/src/lib.rs +++ b/pallets/pips/src/lib.rs @@ -89,7 +89,7 @@ use sp_std::convert::From; use sp_std::vec::Vec; use sp_version::RuntimeVersion; -use pallet_balances::LockableCurrencyExt; +use pallet_balances::impls::LockableCurrencyExt; use pallet_base::{ensure_opt_string_limited, try_next_post}; use pallet_identity::{Config as IdentityConfig, PermissionedCallOriginData}; use polymesh_common_utilities::protocol_fee::{ChargeProtocolFee, ProtocolOp}; @@ -361,7 +361,7 @@ pub mod pallet { frame_system::Config + pallet_timestamp::Config + IdentityConfig + pallet_base::Config { /// Currency type for this module. - type Currency: LockableCurrencyExt; + type Currency: LockableCurrencyExt; /// Origin type for enacting results for PIPs (e.g., reject, approve, skip). type VotingMajorityOrigin: EnsureOrigin; /// Governance committee responsible for overseeing the PIPs. diff --git a/pallets/runtime/common/src/cdd_check.rs b/pallets/runtime/common/src/cdd_check.rs deleted file mode 100644 index bb74a0910a..0000000000 --- a/pallets/runtime/common/src/cdd_check.rs +++ /dev/null @@ -1,33 +0,0 @@ -// This file is part of the Polymesh distribution (https://github.com/PolymeshAssociation/Polymesh). -// Copyright (c) 2020 Polymesh Association - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3. - -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -use pallet_identity::{Config as IdentityConfig, Pallet as Identity}; -use polymesh_primitives::traits::CheckCdd; -use polymesh_primitives::IdentityId; - -pub struct CddChecker(sp_std::marker::PhantomData); - -impl CheckCdd<::AccountId> for CddChecker -where - R: IdentityConfig, -{ - fn check_key_cdd(key: &::AccountId) -> bool { - Self::get_key_cdd_did(key).is_some() - } - - fn get_key_cdd_did(key: &::AccountId) -> Option { - Identity::::get_identity(key).filter(|&did| Identity::::has_valid_cdd(did)) - } -} diff --git a/pallets/runtime/common/src/impls.rs b/pallets/runtime/common/src/impls.rs index 01f4035d50..b623ec23b5 100644 --- a/pallets/runtime/common/src/impls.rs +++ b/pallets/runtime/common/src/impls.rs @@ -36,11 +36,9 @@ use frame_election_provider_support::BalancingConfig; use frame_support::traits::{Currency, OnUnbalanced}; use frame_system as system; -use sp_runtime::traits::Convert; use pallet_authorship as authorship; use pallet_balances as balances; -use polymesh_primitives::Balance; use crate::NegativeImbalance; @@ -59,38 +57,6 @@ where } } -/// Struct that handles the conversion of Balance -> `u128`. This is used for staking's election -/// calculation. -pub struct CurrencyToVoteHandler(sp_std::marker::PhantomData); - -impl CurrencyToVoteHandler -where - R: balances::Config, -{ - fn factor() -> Balance { - let issuance: Balance = >::total_issuance(); - (issuance / u64::max_value() as Balance).max(1) - } -} - -impl Convert for CurrencyToVoteHandler -where - R: balances::Config, -{ - fn convert(x: Balance) -> u64 { - (x / Self::factor()) as u64 - } -} - -impl Convert for CurrencyToVoteHandler -where - R: balances::Config, -{ - fn convert(x: u128) -> Balance { - x * Self::factor() - } -} - pub struct EstimateCallFeeMax; impl> frame_support::traits::EstimateCallFee diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index a4e8ee69f1..09ab7828dc 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -17,7 +17,6 @@ // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. #![recursion_limit = "256"] -pub mod cdd_check; pub mod fee_details; pub mod impls; pub mod migration; @@ -45,8 +44,7 @@ use polymesh_primitives::constants::currency::*; pub use polymesh_primitives::RocksDbWeight; use polymesh_primitives::{Balance, BlockNumber, IdentityId, Moment}; -pub use cdd_check::CddChecker; -pub use impls::{Author, CurrencyToVoteHandler}; +pub use impls::Author; pub type NegativeImbalance = as Currency<::AccountId>>::NegativeImbalance; diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index eae131ea95..d6dd208ad2 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -91,7 +91,7 @@ macro_rules! misc_pallet_impls { /// What to do if an account is fully reaped from the system. type OnKilledAccount = (); /// The data to be stored in an account. - type AccountData = pallet_balances::AccountData; + type AccountData = pallet_balances::AccountData; type SystemWeightInfo = polymesh_weights::frame_system::SubstrateWeight; type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; @@ -177,18 +177,20 @@ macro_rules! misc_pallet_impls { type WeightToFeeConst = polymesh_runtime_common::WeightToFee; } - impl pallet_balances::BlockRewardConfig for Runtime { - type BlockRewardsReserve = pallet_balances::Pallet; - } - impl pallet_balances::Config for Runtime { - type MaxLocks = MaxLocks; + type Balance = Balance; type DustRemoval = (); type RuntimeEvent = RuntimeEvent; + #[cfg(not(feature = "runtime-benchmarks"))] type ExistentialDeposit = ExistentialDeposit; + #[cfg(feature = "runtime-benchmarks")] + type ExistentialDeposit = BenchmarkEd; type AccountStore = frame_system::Pallet; - type CddChecker = polymesh_runtime_common::cdd_check::CddChecker; type WeightInfo = polymesh_weights::pallet_balances::SubstrateWeight; + type MaxLocks = MaxLocks; + type MaxReserves = MaxReserves; + type ReserveIdentifier = [u8; 8]; + type Memo = polymesh_primitives::Memo; } impl pallet_protocol_fee::Config for Runtime { diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index 2bda565d3f..3d8c7f0e60 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -81,7 +81,10 @@ parameter_types! { // Balances: pub const ExistentialDeposit: Balance = 0u128; + pub const BenchmarkEd: Balance = 1; pub const MaxLocks: u32 = 50; + pub const MaxReserves: u32 = 50; + // Timestamp: pub const MinimumPeriod: Moment = SLOT_DURATION / 2; diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index dd61cb4920..9d6f106f98 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -79,7 +79,9 @@ parameter_types! { // Balances: pub const ExistentialDeposit: Balance = 0u128; + pub const BenchmarkEd: Balance = 1; pub const MaxLocks: u32 = 50; + pub const MaxReserves: u32 = 50; // Timestamp: pub const MinimumPeriod: Moment = SLOT_DURATION / 2; diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index b986f8964b..bc8a44305e 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -82,7 +82,9 @@ parameter_types! { // Balances: pub const ExistentialDeposit: Balance = 0u128; + pub const BenchmarkEd: Balance = 1; pub const MaxLocks: u32 = 50; + pub const MaxReserves: u32 = 50; // Timestamp: pub const MinimumPeriod: Moment = SLOT_DURATION / 2; diff --git a/pallets/runtime/tests/src/balances_test.rs b/pallets/runtime/tests/src/balances_test.rs index 3ad412ff9f..658336b022 100644 --- a/pallets/runtime/tests/src/balances_test.rs +++ b/pallets/runtime/tests/src/balances_test.rs @@ -1,19 +1,15 @@ -use super::{ - storage::{register_keyring_account, EventTest, TestStorage}, - ExtBuilder, -}; +use super::{storage::TestStorage, ExtBuilder}; use pallet_balances::{self as balances, Event as BalancesRawEvent}; use pallet_identity as identity; use polymesh_runtime_develop::{runtime, Runtime}; use frame_support::{ - assert_noop, assert_ok, + assert_ok, dispatch::{DispatchInfo, Weight}, traits::Currency, }; -use frame_system::{EventRecord, Phase}; use pallet_transaction_payment::ChargeTransactionPayment; -use polymesh_primitives::{traits::BlockRewardsReserveCurrency, Memo}; +use polymesh_primitives::Memo; use sp_keyring::AccountKeyring; use sp_runtime::traits::SignedExtension; @@ -93,153 +89,6 @@ fn tipping_fails() { ); }); } -#[test] -fn mint_subsidy_works() { - ExtBuilder::default() - .monied(true) - .cdd_providers(vec![AccountKeyring::Ferdie.to_account_id()]) - .build() - .execute_with(|| { - let brr = Balances::block_rewards_reserve(); - assert_eq!(Balances::free_balance(&brr), 0); - let alice = AccountKeyring::Alice.to_account_id(); - // Create Eve's identity for `Balances::deposit_block_reward_reserve_balance`. - let _ = register_keyring_account(AccountKeyring::Eve).unwrap(); - let mut balance_alice = Balances::free_balance(&alice); - let mut ti = Balances::total_issuance(); - - // When there is no balance in BRR, minting should increase total supply - assert_ok!(Balances::deposit_into_existing(&alice, 10).map(drop)); - assert_eq!(Balances::free_balance(&alice), balance_alice + 10); - assert_eq!(Balances::total_issuance(), ti + 10); - ti = ti + 10; - balance_alice = balance_alice + 10; - - // Funding BRR - let eve_signed = Origin::signed(AccountKeyring::Eve.to_account_id()); - assert_ok!(Balances::deposit_block_reward_reserve_balance( - eve_signed, 500, - )); - assert_eq!(Balances::free_balance(&brr), 500); - assert_eq!(Balances::total_issuance(), ti); - - // When BRR has enough funds to subsidize a mint fully, it should subsidize it. - assert_ok!(Balances::deposit_into_existing(&alice, 100).map(drop)); - assert_eq!(Balances::free_balance(&brr), 400); - assert_eq!(Balances::free_balance(&alice), balance_alice + 100); - assert_eq!(Balances::total_issuance(), ti); - balance_alice = balance_alice + 100; - - // When BRR has funds to subsidize a mint partially, it should subsidize it and rest should be minted. - assert_ok!(Balances::deposit_into_existing(&alice, 1000).map(drop)); - assert_eq!(Balances::free_balance(&brr), 0); - assert_eq!(Balances::free_balance(&alice), balance_alice + 1000); - // 400 subsidized, 600 minted. - assert_eq!(Balances::total_issuance(), ti + 600); - ti = ti + 600; - balance_alice = balance_alice + 1000; - - // When BRR has no funds to subsidize a mint, it should be fully minted. - assert_ok!(Balances::deposit_into_existing(&alice, 100).map(drop)); - assert_eq!(Balances::free_balance(&brr), 0); - assert_eq!(Balances::free_balance(&alice), balance_alice + 100); - assert_eq!(Balances::total_issuance(), ti + 100); - }); -} - -#[test] -fn issue_must_work() { - ExtBuilder::default() - .monied(true) - .cdd_providers(vec![AccountKeyring::Ferdie.to_account_id()]) - .build() - .execute_with(|| { - // Create Eve's identity for `Balances::deposit_block_reward_reserve_balance`. - let _ = register_keyring_account(AccountKeyring::Eve).unwrap(); - let init_total_issuance = Balances::total_issuance(); - let imbalance = Balances::burn(10); - assert_eq!(Balances::total_issuance(), init_total_issuance - 10); - drop(imbalance); - assert_eq!(Balances::total_issuance(), init_total_issuance); - - let brr = Balances::block_rewards_reserve(); - assert_eq!(Balances::free_balance(&brr), 0); - let mut ti = Balances::total_issuance(); - let _alice = AccountKeyring::Alice.to_account_id(); - - // When there is no balance in BRR, issuance should increase total supply - // NOTE: dropping negative imbalance is equivalent to burning. It will decrease total supply. - let imbalance = Balances::issue_using_block_rewards_reserve(10); - assert_eq!(Balances::total_issuance(), ti + 10); - drop(imbalance); - assert_eq!(Balances::total_issuance(), ti); - - // Funding BRR - let eve_signed = Origin::signed(AccountKeyring::Eve.to_account_id()); - assert_ok!(Balances::deposit_block_reward_reserve_balance( - eve_signed, 500, - )); - assert_eq!(Balances::free_balance(&brr), 500); - assert_eq!(Balances::total_issuance(), ti); - - // When BRR has enough funds to subsidize a mint fully, it should subsidize it. - let imbalance2 = Balances::issue_using_block_rewards_reserve(100); - assert_eq!(Balances::total_issuance(), ti); - assert_eq!(Balances::free_balance(&brr), 400); - drop(imbalance2); - assert_eq!(Balances::total_issuance(), ti - 100); - ti = ti - 100; - - // When BRR has funds to subsidize a mint partially, it should subsidize it and rest should be minted. - let imbalance3 = Balances::issue_using_block_rewards_reserve(1000); - assert_eq!(Balances::total_issuance(), ti + 600); - assert_eq!(Balances::free_balance(&brr), 0); - drop(imbalance3); - // NOTE: Since burned POLYX reduces total supply rather than increasing BRR balance, - // the new total supply is 1000 less after dropping. - assert_eq!(Balances::total_issuance(), ti - 400); - ti = ti - 400; - - // When BRR has no funds to subsidize a mint, it should be fully minted. - let imbalance4 = Balances::issue_using_block_rewards_reserve(100); - assert_eq!(Balances::total_issuance(), ti + 100); - drop(imbalance4); - assert_eq!(Balances::total_issuance(), ti); - }); -} - -#[test] -fn burn_account_balance_works() { - ExtBuilder::default().monied(true).build().execute_with(|| { - let alice_pub = AccountKeyring::Alice.to_account_id(); - let _ = register_keyring_account(AccountKeyring::Alice).unwrap(); - let total_issuance0 = Balances::total_issuance(); - let alice_free_balance0 = Balances::free_balance(&alice_pub); - let burn_amount = 100_000; - assert_ok!(Balances::burn_account_balance( - Origin::signed(alice_pub.clone()), - burn_amount - )); - let alice_free_balance1 = Balances::free_balance(&alice_pub); - assert_eq!(alice_free_balance1, alice_free_balance0 - burn_amount); - let total_issuance1 = Balances::total_issuance(); - assert_eq!(total_issuance1, total_issuance0 - burn_amount); - let fat_finger_burn_amount = std::u128::MAX; - assert_noop!( - Balances::burn_account_balance( - Origin::signed(alice_pub.clone()), - fat_finger_burn_amount - ), - Error::InsufficientBalance - ); - let alice_free_balance2 = Balances::free_balance(&alice_pub); - // None of Alice's free balance is burned. - assert_eq!(alice_free_balance2, alice_free_balance1); - let total_issuance2 = Balances::total_issuance(); - // The total issuance is unchanged either. - assert_eq!(total_issuance2, total_issuance1); - }); -} #[test] fn transfer_with_memo() { @@ -253,9 +102,7 @@ fn transfer_with_memo() { fn transfer_with_memo_we() { let alice = AccountKeyring::Alice.to_account_id(); - let alice_id = register_keyring_account(AccountKeyring::Alice).unwrap(); let bob = AccountKeyring::Bob.to_account_id(); - let bob_id = register_keyring_account(AccountKeyring::Bob).unwrap(); let memo_1 = Some(Memo([7u8; 32])); assert_ok!(Balances::transfer_with_memo( @@ -287,35 +134,40 @@ fn transfer_with_memo_we() { None )); - let expected_events = vec![ - EventRecord { - phase: Phase::Initialization, - event: EventTest::Balances(BalancesRawEvent::Transfer( - Some(alice_id), - alice.clone(), - Some(bob_id), - bob.clone(), - 200, - memo_2, - )), - topics: vec![], - }, - EventRecord { - phase: Phase::Initialization, - event: EventTest::Balances(BalancesRawEvent::Transfer( - Some(alice_id), - alice, - Some(bob_id), - bob, - 300, - None, - )), - topics: vec![], - }, - ]; - // Ignoring `frame_system` events - let system_events = System::events(); - expected_events.into_iter().for_each(|expected| { - assert!(system_events.contains(&expected)); - }); + //// Ignoring `frame_system` events + let mut system_events = System::events(); + assert_eq!( + system_events.pop().unwrap().event, + crate::storage::RuntimeEvent::Balances(BalancesRawEvent::TransferMemo { + from: AccountKeyring::Alice.to_account_id(), + to: AccountKeyring::Bob.to_account_id(), + amount: 300, + memo: None + }) + ); + assert_eq!( + system_events.pop().unwrap().event, + crate::storage::RuntimeEvent::Balances(BalancesRawEvent::Transfer { + from: AccountKeyring::Alice.to_account_id(), + to: AccountKeyring::Bob.to_account_id(), + amount: 300, + }) + ); + assert_eq!( + system_events.pop().unwrap().event, + crate::storage::RuntimeEvent::Balances(BalancesRawEvent::TransferMemo { + from: AccountKeyring::Alice.to_account_id(), + to: AccountKeyring::Bob.to_account_id(), + amount: 200, + memo: memo_2 + }) + ); + assert_eq!( + system_events.pop().unwrap().event, + crate::storage::RuntimeEvent::Balances(BalancesRawEvent::Transfer { + from: AccountKeyring::Alice.to_account_id(), + to: AccountKeyring::Bob.to_account_id(), + amount: 200, + }) + ); } diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index c343cad934..a703f97775 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -38,7 +38,6 @@ use sp_staking::offence::{DisableStrategy, OffenceDetails, OnOffenceHandler}; use sp_staking::{EraIndex, SessionIndex}; use pallet_balances::AccountData; -use pallet_balances::BlockRewardConfig; use pallet_staking::*; use pallet_validators::types::SlashingSwitch; use polymesh_primitives::asset::AssetId; @@ -149,6 +148,7 @@ parameter_types! { pub const MaxLen: u32 = 256; pub const MaxLocks: u32 = 1024; + pub const MaxReserves: u32 = 50; pub const BlockHashCount: u64 = 250; pub const MaximumBlockWeight: Weight = Weight::from_ref_time(1024); pub BlockWeights: frame_system::limits::BlockWeights = @@ -175,7 +175,7 @@ impl frame_system::Config for Test { type BlockHashCount = BlockHashCount; type Version = (); type PalletInfo = PalletInfo; - type AccountData = AccountData; + type AccountData = AccountData; type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = (); @@ -189,19 +189,17 @@ impl pallet_base::Config for Test { type MaxLen = MaxLen; } -impl BlockRewardConfig for Test { - type BlockRewardsReserve = pallet_balances::Pallet; -} - impl pallet_balances::Config for Test { - type RuntimeEvent = RuntimeEvent; + type Balance = Balance; type DustRemoval = (); + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; - - type CddChecker = Test; - type MaxLocks = MaxLocks; type WeightInfo = polymesh_weights::pallet_balances::SubstrateWeight; + type MaxLocks = MaxLocks; + type MaxReserves = MaxReserves; + type ReserveIdentifier = [u8; 8]; + type Memo = polymesh_primitives::Memo; } sp_runtime::impl_opaque_keys! { diff --git a/pallets/runtime/tests/src/staking/mod.rs b/pallets/runtime/tests/src/staking/mod.rs index f0251b8563..18e1752f16 100644 --- a/pallets/runtime/tests/src/staking/mod.rs +++ b/pallets/runtime/tests/src/staking/mod.rs @@ -2178,7 +2178,7 @@ fn bond_with_no_staked_value() { // Particularly when they votes and the candidate is elected. ExtBuilder::default() .validator_count(3) - .existential_deposit(5) + .existential_deposit(0) .balance_factor(5) .nominate(false) .minimum_validator_count(1) @@ -3027,7 +3027,7 @@ fn only_slash_for_max_in_era() { fn garbage_collection_after_slashing() { // ensures that `SlashingSpans` and `SpanSlash` of an account is removed after reaping. ExtBuilder::default() - .existential_deposit(2) + .existential_deposit(0) .balance_factor(2) .build_and_execute(|| { assert_eq!(Balances::free_balance(11), 2000); @@ -5046,7 +5046,7 @@ fn session_buffering_no_offset() { #[test] fn cannot_rebond_to_lower_than_ed() { ExtBuilder::default() - .existential_deposit(10) + .existential_deposit(0) .balance_factor(10) .build_and_execute(|| { // initial stuff. @@ -5089,7 +5089,7 @@ fn cannot_rebond_to_lower_than_ed() { #[test] fn cannot_bond_extra_to_lower_than_ed() { ExtBuilder::default() - .existential_deposit(10) + .existential_deposit(0) .balance_factor(10) .build_and_execute(|| { // initial stuff. @@ -5133,7 +5133,7 @@ fn cannot_bond_extra_to_lower_than_ed() { fn do_not_die_when_active_is_ed() { let ed = 10; ExtBuilder::default() - .existential_deposit(ed) + .existential_deposit(0) .balance_factor(ed) .build_and_execute(|| { // given diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index 7d0c2b576f..570c252ace 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -454,6 +454,7 @@ parameter_types! { pub const SS58Prefix: u8 = 12; pub const ExistentialDeposit: u64 = 0; pub const MaxLocks: u32 = 50; + pub const MaxReserves: u32 = 50; pub const MaxLen: u32 = 256; pub const AssetNameMaxLength: u32 = 128; pub const FundingRoundNameMaxLength: u32 = 128; diff --git a/pallets/runtime/tests/src/utility_test.rs b/pallets/runtime/tests/src/utility_test.rs index bff3ccf0de..8281a103d2 100644 --- a/pallets/runtime/tests/src/utility_test.rs +++ b/pallets/runtime/tests/src/utility_test.rs @@ -284,16 +284,6 @@ fn _relay_unhappy_cases() { Error::InvalidSignature ); - assert_noop!( - Utility::relay_tx( - origin.clone(), - bob.clone(), - AccountKeyring::Bob.sign(&transaction.encode()).into(), - transaction.clone() - ), - Error::TargetCddMissing - ); - let _ = register_keyring_account_with_balance(AccountKeyring::Bob, 1_000).unwrap(); let transaction = UniqueCall::new( diff --git a/pallets/treasury/src/benchmarking.rs b/pallets/treasury/src/benchmarking.rs index bca5050e13..b2864d5333 100644 --- a/pallets/treasury/src/benchmarking.rs +++ b/pallets/treasury/src/benchmarking.rs @@ -28,14 +28,14 @@ benchmarks! { let b in 1..MAX_BENEFICIARIES; let initial_balance = Pallet::::balance(); // Refill treasury - let refiller = UserBuilder::::default().balance(200u32 + REWARD * b).generate_did().build("refiller"); - Pallet::::reimbursement( refiller.origin().into(), (100 + (REWARD * b)).into()) + let refiller = UserBuilder::::default().balance(5_000 + REWARD * b).generate_did().build("refiller"); + Pallet::::reimbursement( refiller.origin().into(), (5_000 + (REWARD * b)).into()) .expect("Tresury cannot be refill"); // Create beneficiaries let beneficiaries = (0..b).map( |idx| { let user = UserBuilder::::default() - .balance(100u32) + .balance(1_000u32) .seed(idx) .generate_did() .build("beneficiary") @@ -46,12 +46,12 @@ benchmarks! { }: _(RawOrigin::Root, beneficiaries) verify { - assert_eq!(Pallet::::balance(), (initial_balance + 100u32.into())); + assert_eq!(Pallet::::balance(), (initial_balance + 5_000u32.into())); } reimbursement { let initial_balance = Pallet::::balance(); - let caller = UserBuilder::::default().balance(1_000u32).generate_did().build("caller"); + let caller = UserBuilder::::default().balance(2_000u32).generate_did().build("caller"); let amount = 500u32.into(); }: _(caller.origin(), amount) verify { diff --git a/pallets/treasury/src/lib.rs b/pallets/treasury/src/lib.rs index 8a7c6ae7b6..7aa2c01ff3 100644 --- a/pallets/treasury/src/lib.rs +++ b/pallets/treasury/src/lib.rs @@ -43,7 +43,6 @@ use frame_support::{ weights::Weight, }; use frame_system::ensure_root; -use pallet_balances::Config as BalancesConfig; use pallet_identity as identity; use polymesh_primitives::{constants::TREASURY_PALLET_ID, Beneficiary, IdentityId, GC_DID}; use sp_runtime::traits::{AccountIdConversion, Saturating}; @@ -70,7 +69,9 @@ pub mod pallet { pub struct Pallet(_); #[pallet::config] - pub trait Config: frame_system::Config + BalancesConfig { + pub trait Config: + frame_system::Config + pallet_identity::Config + pallet_balances::Config + { /// The overarching event type. type RuntimeEvent: From> + IsType<::RuntimeEvent>; /// The native currency. diff --git a/pallets/utility/src/lib.rs b/pallets/utility/src/lib.rs index a838fc183f..1cad7bde13 100644 --- a/pallets/utility/src/lib.rs +++ b/pallets/utility/src/lib.rs @@ -88,7 +88,7 @@ use pallet_balances::Config as BalancesConfig; use pallet_identity::{Config as IdentityConfig, Context}; use pallet_permissions::with_call_metadata; use polymesh_common_utilities::identity::AuthorizationNonce; -use polymesh_primitives::{crypto::verify_signature, traits::CheckCdd, IdentityId}; +use polymesh_primitives::{crypto::verify_signature, IdentityId}; type Identity = pallet_identity::Pallet; @@ -362,11 +362,6 @@ pub mod pallet { Error::::InvalidSignature ); - ensure!( - T::CddChecker::check_key_cdd(&target), - Error::::TargetCddMissing - ); - >::insert(target.clone(), target_nonce + 1); let info = call.call.get_dispatch_info(); diff --git a/pallets/weights/src/pallet_balances.rs b/pallets/weights/src/pallet_balances.rs index b1d82a82c9..7e785c17bd 100644 --- a/pallets/weights/src/pallet_balances.rs +++ b/pallets/weights/src/pallet_balances.rs @@ -67,62 +67,50 @@ impl pallet_balances::WeightInfo for SubstrateWeight { // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Identity KeyRecords (r:2 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - fn transfer_with_memo() -> Weight { - // Minimum execution time: 42_414 nanoseconds. - Weight::from_ref_time(43_586_000) - .saturating_add(DbWeight::get().reads(4)) - .saturating_add(DbWeight::get().writes(2)) - } - // Storage: Identity KeyRecords (r:2 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) - // Storage: System Account (r:2 w:2) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - fn deposit_block_reward_reserve_balance() -> Weight { - // Minimum execution time: 60_511 nanoseconds. - Weight::from_ref_time(64_106_000) - .saturating_add(DbWeight::get().reads(8)) - .saturating_add(DbWeight::get().writes(2)) - } - // Storage: System Account (r:2 w:2) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - fn set_balance() -> Weight { - // Minimum execution time: 48_843 nanoseconds. - Weight::from_ref_time(50_946_000) - .saturating_add(DbWeight::get().reads(3)) - .saturating_add(DbWeight::get().writes(2)) - } - // Storage: System Account (r:2 w:2) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - // Storage: Identity KeyRecords (r:2 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn force_transfer() -> Weight { // Minimum execution time: 33_280 nanoseconds. Weight::from_ref_time(36_064_000) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(2)) } - // Storage: Identity KeyRecords (r:1 w:0) - // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) - // Storage: Timestamp Now (r:1 w:0) - // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) - // Storage: CddServiceProviders ActiveMembers (r:1 w:0) - // Proof Skipped: CddServiceProviders ActiveMembers (max_values: Some(1), max_size: None, mode: Measured) - // Storage: Identity Claims (r:2 w:0) - // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn transfer_keep_alive() -> Weight { + // Minimum execution time: 28_184 nanoseconds. + Weight::from_ref_time(49_250_000) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn set_balance_creating() -> Weight { + // Minimum execution time: 17_474 nanoseconds. + Weight::from_ref_time(17_777_000) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn set_balance_killing() -> Weight { + // Minimum execution time: 20_962 nanoseconds. + Weight::from_ref_time(21_419_000) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } // Storage: System Account (r:1 w:1) - // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - fn burn_account_balance() -> Weight { - // Minimum execution time: 44_236 nanoseconds. - Weight::from_ref_time(45_638_000) - .saturating_add(DbWeight::get().reads(6)) - .saturating_add(DbWeight::get().writes(1)) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn transfer_all() -> Weight { + // Minimum execution time: 34_878 nanoseconds. + Weight::from_ref_time(35_121_000) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) + } + /// Storage: System Account (r:1 w:1) + /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn force_unreserve() -> Weight { + // Minimum execution time: 16_790 nanoseconds. + Weight::from_ref_time(17_029_000) + .saturating_add(DbWeight::get().reads(1_u64)) + .saturating_add(DbWeight::get().writes(1_u64)) } } diff --git a/scripts/test.sh b/scripts/test.sh index 5e27170371..01d45aaf34 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -11,6 +11,5 @@ SKIP_WASM_BUILD=1 RUST_BACKTRACE=1 \ --package node-rpc-runtime-api \ --package pallet-transaction-payment \ --package polymesh-runtime-tests \ - --package pallet-balances:0.1.0 \ --package asset-metadata \ "$@" From 293718a9f2a10ed125c16e010b896ccd4dd0240b Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Fri, 3 Jan 2025 23:08:46 +0800 Subject: [PATCH 09/97] Add workspace dependency --- Cargo.toml | 79 ++++++++++++----- node-rpc/Cargo.toml | 48 +++++----- pallets/asset/Cargo.toml | 24 ++--- pallets/bridge/Cargo.toml | 16 ++-- pallets/committee/Cargo.toml | 22 ++--- pallets/compliance-manager/Cargo.toml | 22 ++--- pallets/contracts/Cargo.toml | 20 ++--- pallets/corporate-actions/Cargo.toml | 24 ++--- pallets/external-agents/Cargo.toml | 12 +-- pallets/group/Cargo.toml | 22 ++--- pallets/group/rpc/Cargo.toml | 18 ++-- pallets/group/rpc/runtime-api/Cargo.toml | 4 +- pallets/identity/Cargo.toml | 4 +- pallets/multisig/Cargo.toml | 18 ++-- pallets/nft/Cargo.toml | 12 +-- pallets/permissions/Cargo.toml | 12 +-- pallets/pips/Cargo.toml | 22 ++--- pallets/portfolio/Cargo.toml | 14 +-- pallets/protocol-fee/Cargo.toml | 16 ++-- pallets/protocol-fee/rpc/Cargo.toml | 16 ++-- .../protocol-fee/rpc/runtime-api/Cargo.toml | 4 +- pallets/relayer/Cargo.toml | 12 +-- pallets/runtime/build_tool/Cargo.toml | 2 +- pallets/runtime/common/Cargo.toml | 16 ++-- pallets/runtime/common/src/runtime.rs | 2 +- pallets/runtime/develop/Cargo.toml | 82 ++++++++--------- pallets/runtime/mainnet/Cargo.toml | 79 +++++++++-------- pallets/runtime/testnet/Cargo.toml | 81 +++++++++-------- pallets/runtime/tests/Cargo.toml | 87 +++++++++---------- pallets/settlement/Cargo.toml | 24 ++--- pallets/statistics/Cargo.toml | 22 ++--- pallets/sto/Cargo.toml | 22 ++--- pallets/transaction-payment/Cargo.toml | 16 ++-- pallets/treasury/Cargo.toml | 20 ++--- pallets/utility/Cargo.toml | 16 ++-- pallets/validators/Cargo.toml | 36 ++++---- pallets/weights/Cargo.toml | 24 ++--- primitives/Cargo.toml | 22 ++--- rpc/Cargo.toml | 32 +++---- rpc/runtime-api/Cargo.toml | 24 ++--- 40 files changed, 540 insertions(+), 508 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d59ad0abd7..d8e34865d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -207,7 +207,12 @@ polymesh-build-tool = { path = "pallets/runtime/build_tool", default-features = codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "max-encoded-len"] } frame-support = { version = "4.0.0-dev", default-features = false } frame-system = { version = "4.0.0-dev", default-features = false } +frame-system-benchmarking = { version = "4.0.0-dev", default-features = false } frame-system-rpc-runtime-api = { version = "4.0.0-dev", default-features = false } +frame-election-provider-support = { version = "4.0.0-dev", default-features = false } +frame-benchmarking = { version = "4.0.0-dev", default-features = false } +frame-benchmarking-cli = { version = "4.0.0-dev", default-features = false } +frame-executive = { version = "4.0.0-dev", default-features = false } pallet-authority-discovery = { version = "4.0.0-dev", default-features = false } pallet-authorship = { version = "4.0.0-dev", default-features = false } pallet-babe = { version = "4.0.0-dev", default-features = false } @@ -215,7 +220,6 @@ pallet-balances = { version = "4.0.0-dev", default-features = false } pallet-contracts = { version = "4.0.0-dev", default-features = false } pallet-contracts-primitives = { version = "7.0.0", default-features = false} pallet-election-provider-multi-phase = { version = "4.0.0-dev", default-features = false } -pallet-executive = { package = "frame-executive", version = "4.0.0-dev", default-features = false } pallet-grandpa = { version = "4.0.0-dev", default-features = false } pallet-im-online = { version = "4.0.0-dev", default-features = false } pallet-indices = { version = "4.0.0-dev", default-features = false } @@ -230,6 +234,7 @@ pallet-staking-reward-curve = { version = "4.0.0-dev", default-features = false pallet-timestamp = { version = "4.0.0-dev", default-features = false } scale-info = { version = "2.0", default-features = false, features = ["derive"] } sp-api = { version = "4.0.0-dev", default-features = false } +sp-application-crypto = { version = "7.0.0", default-features = false } sp-arithmetic = { version = "6.0.0", default-features = false } sp-authority-discovery = { version = "4.0.0-dev", default-features = false } sp-block-builder = { version = "4.0.0-dev", default-features = false } @@ -239,10 +244,13 @@ sp-consensus-babe = { version = "0.10.0-dev", default-features = false } sp-consensus-slots = { version = "0.10.0-dev", default-features = false } sp-consensus-grandpa = { version = "4.0.0-dev", default-features = false } sp-keyring = { version = "7.0.0", default-features = false } +sp-keystore = { version = "0.13.0", default-features = false } sp-core = { version = "7.0.0", default-features = false } +sp-rpc = { version = "6.0.0" } sp-inherents = { version = "4.0.0-dev", default-features = false } sp-transaction-storage-proof = { version = "4.0.0-dev", default-features = false } sp-io = { version = "7.0.0", default-features = false } +sp-npos-elections = { version = "4.0.0-dev", default-features = false } sp-offchain = { version = "4.0.0-dev", default-features = false } sp-runtime = { version = "7.0.0", default-features = false } sp-runtime-interface = { version = "7.0.0", default-features = false } @@ -251,7 +259,38 @@ sp-session = { version = "4.0.0-dev", default-features = false } sp-staking = { version = "4.0.0-dev", default-features = false } sp-std = { version = "5.0.0", default-features = false } sp-transaction-pool = { version = "4.0.0-dev", default-features = false } +sp-weights = { version = "4.0.0", default-features = false } sp-version = { version = "5.0.0", default-features = false } +sp-tracing = { version = "6.0.0", default-features = false, features = ["std"] } +substrate-test-utils = { version = "4.0.0-dev", default-features = false } +substrate-wasm-builder = { version = "5.0.0-dev", default-features = false } +substrate-frame-rpc-system = { version = "4.0.0-dev", default-features = false } + +# Substrate client deps. +sc-authority-discovery = "0.10.0-dev" +sc-basic-authorship = "0.10.0-dev" +sc-chain-spec = "4.0.0-dev" +sc-cli = { version = "0.10.0-dev" } +sc-client-api = "4.0.0-dev" +sc-client-db = { version = "0.10.0-dev", default-features = false } +sc-consensus = "0.10.0-dev" +sc-consensus-babe = "0.10.0-dev" +sc-consensus-babe-rpc = "0.10.0-dev" +sc-consensus-epochs = { version = "0.10.0-dev" } +sc-consensus-grandpa = "0.10.0-dev" +sc-consensus-grandpa-rpc = "0.10.0-dev" +sc-consensus-slots = "0.10.0-dev" +sc-executor = { version = "0.10.0-dev" } +sc-network = "0.10.0-dev" +sc-network-common = { version = "0.10.0-dev" } +sc-rpc = "4.0.0-dev" +sc-rpc-api = { version = "0.10.0-dev" } +sc-rpc-spec-v2 = { version = "0.10.0-dev" } +sc-service = { version = "0.10.0-dev" } +sc-telemetry = "4.0.0-dev" +sc-transaction-pool = "4.0.0-dev" +sc-transaction-pool-api = { version = "4.0.0-dev" } +sc-sync-state-rpc = { version = "0.10.0-dev" } # Crypto rand = { version = "0.8", default-features = false } @@ -304,23 +343,23 @@ clap = { version = "4.0.9", features = ["derive"] } rustc-hex = "2.1.0" # Substrate client deps. -sc-authority-discovery = "0.10.0-dev" -sc-basic-authorship = "0.10.0-dev" -sc-chain-spec = "4.0.0-dev" -sc-cli = { version = "0.10.0-dev" } -sc-client-api = "4.0.0-dev" -sc-client-db = { version = "0.10.0-dev", default-features = false } -sc-consensus = "0.10.0-dev" -sc-consensus-babe = "0.10.0-dev" -sc-consensus-slots = "0.10.0-dev" -sc-executor = { version = "0.10.0-dev" } -sc-network = "0.10.0-dev" -sc-network-common = { version = "0.10.0-dev" } -sc-rpc = "4.0.0-dev" -sc-service = { version = "0.10.0-dev" } -sc-telemetry = "4.0.0-dev" -sc-transaction-pool = "4.0.0-dev" -sc-sync-state-rpc = { version = "0.10.0-dev" } +sc-authority-discovery = { workspace = true } +sc-basic-authorship = { workspace = true } +sc-chain-spec = { workspace = true } +sc-cli = { workspace = true } +sc-client-api = { workspace = true } +sc-client-db = { workspace = true, default-features = false } +sc-consensus = { workspace = true } +sc-consensus-babe = { workspace = true } +sc-consensus-slots = { workspace = true } +sc-executor = { workspace = true } +sc-network = { workspace = true } +sc-network-common = { workspace = true } +sc-rpc = { workspace = true } +sc-service = { workspace = true } +sc-telemetry = { workspace = true } +sc-transaction-pool = { workspace = true } +sc-sync-state-rpc = { workspace = true } grandpa = { package = "sc-consensus-grandpa", version = "0.10.0-dev" } # Substrate @@ -351,8 +390,8 @@ sp-session = { workspace = true } sp-transaction-pool = { workspace = true } # These dependencies are used for runtime benchmarking -frame-benchmarking = "4.0.0-dev" -frame-benchmarking-cli = "4.0.0-dev" +frame-benchmarking = { workspace = true } +frame-benchmarking-cli = { workspace = true } [build-dependencies] substrate-build-script-utils = { version = "3.0.0" } diff --git a/node-rpc/Cargo.toml b/node-rpc/Cargo.toml index 8fec7e760e..85b6c48d6a 100644 --- a/node-rpc/Cargo.toml +++ b/node-rpc/Cargo.toml @@ -12,28 +12,28 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] jsonrpsee = { version = "0.16.2", features = ["server"] } -polymesh-primitives = { path = "../primitives", default-features = false } -pallet-group-rpc = { path = "../pallets/group/rpc" } -pallet-protocol-fee-rpc = { path = "../pallets/protocol-fee/rpc" } -node-rpc = { path = "../rpc" } +polymesh-primitives = { workspace = true, default-features = false } +pallet-group-rpc = { workspace = true } +pallet-protocol-fee-rpc = { workspace = true } +node-rpc = { workspace = true } -sc-chain-spec = { version = "4.0.0-dev" } -sc-client-api = { version = "4.0.0-dev" } -sc-consensus-babe = { version = "0.10.0-dev" } -sc-consensus-babe-rpc = { version = "0.10.0-dev" } -sc-consensus-epochs = { version = "0.10.0-dev" } -sc-consensus-grandpa = { version = "0.10.0-dev" } -sc-consensus-grandpa-rpc = { version = "0.10.0-dev" } -sc-rpc = { version = "4.0.0-dev" } -sc-rpc-api = { version = "0.10.0-dev" } -sc-rpc-spec-v2 = { version = "0.10.0-dev" } -sc-sync-state-rpc = { version = "0.10.0-dev" } -sc-transaction-pool-api = { version = "4.0.0-dev" } -sp-api = { version = "4.0.0-dev" } -sp-block-builder = { version = "4.0.0-dev" } -sp-blockchain = { version = "4.0.0-dev" } -sp-consensus = { version = "0.10.0-dev" } -sp-consensus-babe = { version = "0.10.0-dev" } -sp-keystore = { version = "0.13.0" } -sp-runtime = { version = "7.0.0" } -substrate-frame-rpc-system = { version = "4.0.0-dev" } +sc-chain-spec = { workspace = true } +sc-client-api = { workspace = true } +sc-consensus-babe = { workspace = true } +sc-consensus-babe-rpc = { workspace = true } +sc-consensus-epochs = { workspace = true } +sc-consensus-grandpa = { workspace = true } +sc-consensus-grandpa-rpc = { workspace = true } +sc-rpc = { workspace = true } +sc-rpc-api = { workspace = true } +sc-rpc-spec-v2 = { workspace = true } +sc-sync-state-rpc = { workspace = true } +sc-transaction-pool-api = { workspace = true } +sp-api = { workspace = true } +sp-block-builder = { workspace = true } +sp-blockchain = { workspace = true } +sp-consensus = { workspace = true } +sp-consensus-babe = { workspace = true } +sp-keystore = { workspace = true } +sp-runtime = { workspace = true } +substrate-frame-rpc-system = { workspace = true } diff --git a/pallets/asset/Cargo.toml b/pallets/asset/Cargo.toml index 83edd21c38..7d8f436b46 100644 --- a/pallets/asset/Cargo.toml +++ b/pallets/asset/Cargo.toml @@ -30,20 +30,20 @@ log = "0.4" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-arithmetic = { version = "6.0.0", default-features = false } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-arithmetic = { workspace = true, default-features = false } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +pallet-timestamp = { workspace = true, default-features = false } # Only in STD -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] default = ["std"] diff --git a/pallets/bridge/Cargo.toml b/pallets/bridge/Cargo.toml index f25ba0689b..a4cd7a036b 100644 --- a/pallets/bridge/Cargo.toml +++ b/pallets/bridge/Cargo.toml @@ -14,15 +14,15 @@ pallet-multisig = { workspace = true, default-features = false } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -pallet-scheduler = { version = "4.0.0-dev", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +pallet-scheduler = { workspace = true, default-features = false } -frame-benchmarking = { version = "4.0.0-dev", optional = true } +frame-benchmarking = { workspace = true, optional = true } # Other serde = { version = "1.0.104", default-features = false } diff --git a/pallets/committee/Cargo.toml b/pallets/committee/Cargo.toml index 1ef7fa995b..08c85c573f 100644 --- a/pallets/committee/Cargo.toml +++ b/pallets/committee/Cargo.toml @@ -15,19 +15,19 @@ serde_derive = { version = "1.0.104", optional = true, default-features = false # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +pallet-timestamp = { workspace = true, default-features = false } -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] equalize = [] diff --git a/pallets/compliance-manager/Cargo.toml b/pallets/compliance-manager/Cargo.toml index b4098e3831..59bf62dbe4 100644 --- a/pallets/compliance-manager/Cargo.toml +++ b/pallets/compliance-manager/Cargo.toml @@ -23,19 +23,19 @@ log = "0.4" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-benchmarking = { workspace = true, default-features = false, optional = true } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } +pallet-timestamp = { workspace = true, default-features = false } [features] equalize = [] diff --git a/pallets/contracts/Cargo.toml b/pallets/contracts/Cargo.toml index 26179cd207..9f235876fb 100644 --- a/pallets/contracts/Cargo.toml +++ b/pallets/contracts/Cargo.toml @@ -10,15 +10,15 @@ log = "0.4.8" wasm-instrument = { version = "0.3", default-features = false, optional = true } codec = { workspace = true, default-features = false, features = ["derive"] } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -pallet-contracts = { version = "4.0.0-dev", default-features = false } -pallet-contracts-primitives = { version = "7.0.0", default-features = false } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +pallet-contracts = { workspace = true, default-features = false } +pallet-contracts-primitives = { workspace = true, default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } # Polymesh specific pallet-base = { workspace = true, default-features = false } @@ -26,7 +26,7 @@ pallet-identity = { workspace = true, default-features = false } pallet-permissions = { workspace = true, default-features = false } polymesh-primitives = { workspace = true, default-features = false } -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] default = ["std"] diff --git a/pallets/corporate-actions/Cargo.toml b/pallets/corporate-actions/Cargo.toml index 56536e7013..97a5130594 100644 --- a/pallets/corporate-actions/Cargo.toml +++ b/pallets/corporate-actions/Cargo.toml @@ -24,18 +24,18 @@ log = "0.4" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-arithmetic = { version = "6.0.0", default-features = false } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-arithmetic = { workspace = true, default-features = false } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-benchmarking = { workspace = true, default-features = false, optional = true } +pallet-timestamp = { workspace = true, default-features = false } pallet-compliance-manager = { workspace = true, default-features = false, optional = true } diff --git a/pallets/external-agents/Cargo.toml b/pallets/external-agents/Cargo.toml index 7e8bd23bf0..081140ca7d 100644 --- a/pallets/external-agents/Cargo.toml +++ b/pallets/external-agents/Cargo.toml @@ -21,14 +21,14 @@ log = "0.4" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-runtime = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-runtime = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } # Only in STD -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] default = ["std"] diff --git a/pallets/group/Cargo.toml b/pallets/group/Cargo.toml index 02b3c416bd..351ed0a9ba 100644 --- a/pallets/group/Cargo.toml +++ b/pallets/group/Cargo.toml @@ -15,20 +15,20 @@ serde_derive = { version = "1.0.104", optional = true, default-features = false # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } +pallet-timestamp = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } # Only for benchmarking -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] equalize = [] diff --git a/pallets/group/rpc/Cargo.toml b/pallets/group/rpc/Cargo.toml index efdc9cc897..162472de4d 100644 --- a/pallets/group/rpc/Cargo.toml +++ b/pallets/group/rpc/Cargo.toml @@ -10,21 +10,21 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { workspace = true, default-features = false, features = ["derive"] } jsonrpsee = { version = "0.16.2", features = ["server", "macros"] } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-blockchain = { version = "4.0.0-dev" } -sp-core = { version = "7.0.0", default-features = false } -sp-rpc = { version = "6.0.0" } -sp-runtime = { version = "7.0.0", default-features = false } -sp-std = {version = "5.0.0", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } +sp-api = { workspace = true, default-features = false } +sp-blockchain = { workspace = true } +sp-core = { workspace = true, default-features = false } +sp-rpc = { workspace = true } +sp-runtime = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } # Common node-rpc = { workspace = true } polymesh-primitives = { workspace = true, default-features = false} # RPC -pallet-group-rpc-runtime-api = { version = "2.0.0", path = "./runtime-api" } +pallet-group-rpc-runtime-api = { workspace = true, default-features = false } # Others serde = { version = "1.0.104", features = ["derive"] } diff --git a/pallets/group/rpc/runtime-api/Cargo.toml b/pallets/group/rpc/runtime-api/Cargo.toml index aed64f03e0..86030dce5c 100644 --- a/pallets/group/rpc/runtime-api/Cargo.toml +++ b/pallets/group/rpc/runtime-api/Cargo.toml @@ -16,8 +16,8 @@ serde = { version = "1.0.104", optional = true, features = ["derive"] } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-std = { version = "5.0.0", default-features = false } +sp-api = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } [features] default = ["std"] diff --git a/pallets/identity/Cargo.toml b/pallets/identity/Cargo.toml index 0b8f850972..cce2903793 100644 --- a/pallets/identity/Cargo.toml +++ b/pallets/identity/Cargo.toml @@ -23,7 +23,7 @@ schnorrkel = { version = "0.11", default-features = false, optional = true } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } frame-support = { workspace = true, default-features = false } -scale-info = { version = "2.0", default-features = false, features = [ +scale-info = { workspace = true, default-features = false, features = [ "derive", ] } frame-system = { workspace = true, default-features = false } @@ -36,7 +36,7 @@ sp-std = { workspace = true, default-features = false } sp-version = { workspace = true, default-features = false } # Only Benchmarking -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } hex = { version = "^0.4.0", default-features = false, features = [ "alloc", ], optional = true } diff --git a/pallets/multisig/Cargo.toml b/pallets/multisig/Cargo.toml index be097a2484..6f5f171051 100644 --- a/pallets/multisig/Cargo.toml +++ b/pallets/multisig/Cargo.toml @@ -17,17 +17,17 @@ serde = { version = "1.0.104", default-features = false } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-runtime = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-core = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-runtime = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-core = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-benchmarking = { workspace = true, default-features = false, optional = true } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } +pallet-timestamp = { workspace = true, default-features = false } [features] equalize = [] diff --git a/pallets/nft/Cargo.toml b/pallets/nft/Cargo.toml index 8582f303e0..73fe9ff338 100644 --- a/pallets/nft/Cargo.toml +++ b/pallets/nft/Cargo.toml @@ -15,16 +15,16 @@ polymesh-primitives = { workspace = true, default-features = false } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-runtime = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-runtime = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } # Other crates log = "0.4.8" # Only in STD -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] default = ["std"] diff --git a/pallets/permissions/Cargo.toml b/pallets/permissions/Cargo.toml index c60e9b832b..d9027447c1 100644 --- a/pallets/permissions/Cargo.toml +++ b/pallets/permissions/Cargo.toml @@ -13,14 +13,14 @@ serde = { version = "1.0.104", default-features = false } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-runtime = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-runtime = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } # Only for benchmarking -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] equalize = [] diff --git a/pallets/pips/Cargo.toml b/pallets/pips/Cargo.toml index f7b9cd2b3f..9ecbca393d 100644 --- a/pallets/pips/Cargo.toml +++ b/pallets/pips/Cargo.toml @@ -24,21 +24,21 @@ log = "0.4.8" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } -frame-system = { package = "frame-system", version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } +pallet-timestamp = { workspace = true, default-features = false } # Benchmarking -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } rand = { version = "0.8.2", default-features = false, optional = true } rand_chacha = { version = "0.3.0", default-features = false, optional = true } pallet-committee = { workspace = true, default-features = false, optional = true } diff --git a/pallets/portfolio/Cargo.toml b/pallets/portfolio/Cargo.toml index 0e40021a8b..f99364c90a 100644 --- a/pallets/portfolio/Cargo.toml +++ b/pallets/portfolio/Cargo.toml @@ -19,15 +19,15 @@ log = "0.4.8" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-runtime = { version = "7.0.0", default-features = false } -sp-arithmetic = { version = "6.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-runtime = { workspace = true, default-features = false } +sp-arithmetic = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } # Only in STD -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] equalize = [] diff --git a/pallets/protocol-fee/Cargo.toml b/pallets/protocol-fee/Cargo.toml index 7d7f46128d..1f8698d520 100644 --- a/pallets/protocol-fee/Cargo.toml +++ b/pallets/protocol-fee/Cargo.toml @@ -16,16 +16,16 @@ serde = { version = "1.0.104", default-features = false } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } # benchmark-only -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] default = ["std"] diff --git a/pallets/protocol-fee/rpc/Cargo.toml b/pallets/protocol-fee/rpc/Cargo.toml index 630e99f3eb..911a1311f4 100644 --- a/pallets/protocol-fee/rpc/Cargo.toml +++ b/pallets/protocol-fee/rpc/Cargo.toml @@ -10,14 +10,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { workspace = true, default-features = false, features = ["derive"] } jsonrpsee = { version = "0.16.2", features = ["server", "macros"] } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-blockchain = { version = "4.0.0-dev" } -sp-core = { version = "7.0.0", default-features = false } -sp-rpc = { version = "6.0.0" } -sp-runtime = { version = "7.0.0", default-features = false } -sp-std = {version = "5.0.0", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } +sp-api = { workspace = true, default-features = false } +sp-blockchain = { workspace = true } +sp-core = { workspace = true, default-features = false } +sp-rpc = { workspace = true } +sp-runtime = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } node-rpc = { workspace = true } polymesh-common-utilities = { workspace = true, default-features = false } diff --git a/pallets/protocol-fee/rpc/runtime-api/Cargo.toml b/pallets/protocol-fee/rpc/runtime-api/Cargo.toml index 9ad78d3d44..83e8876d90 100644 --- a/pallets/protocol-fee/rpc/runtime-api/Cargo.toml +++ b/pallets/protocol-fee/rpc/runtime-api/Cargo.toml @@ -16,8 +16,8 @@ serde = { version = "1.0.104", optional = true, features = ["derive"] } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -sp-api = { version = "4.0.0-dev", default-features = false} -sp-runtime = { version = "7.0.0", default-features = false} +sp-api = { workspace = true, default-features = false} +sp-runtime = { workspace = true, default-features = false} [features] default = ["std"] diff --git a/pallets/relayer/Cargo.toml b/pallets/relayer/Cargo.toml index 6f7ea37e64..ea51043321 100644 --- a/pallets/relayer/Cargo.toml +++ b/pallets/relayer/Cargo.toml @@ -10,14 +10,14 @@ polymesh-primitives = { workspace = true, default-features = false} # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -sp-runtime = { version = "7.0.0", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-std = { version = "5.0.0", default-features = false } +sp-runtime = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-std = { workspace = true, default-features = false } # Only Benchmarking -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] default = ["std"] diff --git a/pallets/runtime/build_tool/Cargo.toml b/pallets/runtime/build_tool/Cargo.toml index 4f89505a81..f3f88d59fe 100644 --- a/pallets/runtime/build_tool/Cargo.toml +++ b/pallets/runtime/build_tool/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -substrate-wasm-builder = { version = "5.0.0-dev", default-features = false} +substrate-wasm-builder = { workspace = true, default-features = false} [features] default = ["std"] diff --git a/pallets/runtime/common/Cargo.toml b/pallets/runtime/common/Cargo.toml index 0fe471cfb2..43b92a314b 100644 --- a/pallets/runtime/common/Cargo.toml +++ b/pallets/runtime/common/Cargo.toml @@ -23,14 +23,14 @@ log = "0.4.8" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -frame-election-provider-support = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -pallet-authorship = { version = "4.0.0-dev", default-features = false } -pallet-election-provider-multi-phase = { version = "4.0.0-dev", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } +frame-election-provider-support = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +pallet-authorship = { workspace = true, default-features = false } +pallet-election-provider-multi-phase = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } [features] equalize = [] diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index d6dd208ad2..17f1164370 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -789,7 +789,7 @@ macro_rules! runtime_apis { /// Extrinsic type that has already been checked. pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Executive: handles dispatch to the various modules. - pub type Executive = pallet_executive::Executive< + pub type Executive = frame_executive::Executive< Runtime, Block, frame_system::ChainContext, diff --git a/pallets/runtime/develop/Cargo.toml b/pallets/runtime/develop/Cargo.toml index 43c09825c7..4e0dbce3bd 100644 --- a/pallets/runtime/develop/Cargo.toml +++ b/pallets/runtime/develop/Cargo.toml @@ -35,7 +35,7 @@ pallet-sto = { workspace = true, default-features = false } pallet-settlement = { workspace = true, default-features = false } pallet-staking = { workspace = true, default-features = false } pallet-validators = { workspace = true, default-features = false } -pallet-staking-reward-curve = { version = "4.0.0-dev", default-features = false } +pallet-staking-reward-curve = { workspace = true, default-features = false } pallet-statistics = { workspace = true, default-features = false } pallet-transaction-payment = { workspace = true, default-features = false } pallet-treasury = { workspace = true, default-features = false } @@ -49,55 +49,55 @@ log = "0.4.8" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-inherents = { version = "4.0.0-dev", default-features = false } -sp-offchain = { version = "4.0.0-dev", default-features = false } -sp-staking = { version = "4.0.0-dev", default-features = false } -sp-consensus-babe = { version = "0.10.0-dev", default-features = false } -sp-consensus-grandpa = { version = "4.0.0-dev", default-features = false } -sp-session = { version = "4.0.0-dev", default-features = false } -sp-authority-discovery = { version = "4.0.0-dev", default-features = false } -sp-transaction-pool = { version = "4.0.0-dev", default-features = false } -sp-block-builder = { version = "4.0.0-dev", default-features = false } -sp-arithmetic = { version = "6.0.0", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } +sp-inherents = { workspace = true, default-features = false } +sp-offchain = { workspace = true, default-features = false } +sp-staking = { workspace = true, default-features = false } +sp-consensus-babe = { workspace = true, default-features = false } +sp-consensus-grandpa = { workspace = true, default-features = false } +sp-session = { workspace = true, default-features = false } +sp-authority-discovery = { workspace = true, default-features = false } +sp-transaction-pool = { workspace = true, default-features = false } +sp-block-builder = { workspace = true, default-features = false } +sp-arithmetic = { workspace = true, default-features = false } # -pallet-authorship = { version = "4.0.0-dev", default-features = false } -pallet-contracts = { version = "4.0.0-dev", default-features = false } -pallet-contracts-primitives = { version = "7.0.0", default-features = false } -pallet-election-provider-multi-phase = { version = "4.0.0-dev", default-features = false } -pallet-executive = { package = "frame-executive", version = "4.0.0-dev", default-features = false } -pallet-grandpa = { version = "4.0.0-dev", default-features = false } -pallet-im-online = { version = "4.0.0-dev", default-features = false } -pallet-indices = { version = "4.0.0-dev", default-features = false } -pallet-offences = { version = "4.0.0-dev", default-features = false } -pallet-preimage = { version = "4.0.0-dev", default-features = false } -pallet-session = { version = "4.0.0-dev", default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } -pallet-babe = { version = "4.0.0-dev", default-features = false } -pallet-authority-discovery = { version = "4.0.0-dev", default-features = false } -pallet-insecure-randomness-collective-flip = { version = "4.0.0-dev", default-features = false } -pallet-scheduler = { version = "4.0.0-dev", default-features = false } +pallet-authorship = { workspace = true, default-features = false } +pallet-contracts = { workspace = true, default-features = false } +pallet-contracts-primitives = { workspace = true, default-features = false } +pallet-election-provider-multi-phase = { workspace = true, default-features = false } +pallet-grandpa = { workspace = true, default-features = false } +pallet-im-online = { workspace = true, default-features = false } +pallet-indices = { workspace = true, default-features = false } +pallet-offences = { workspace = true, default-features = false } +pallet-preimage = { workspace = true, default-features = false } +pallet-session = { workspace = true, default-features = false } +pallet-timestamp = { workspace = true, default-features = false } +pallet-babe = { workspace = true, default-features = false } +pallet-authority-discovery = { workspace = true, default-features = false } +pallet-insecure-randomness-collective-flip = { workspace = true, default-features = false } +pallet-scheduler = { workspace = true, default-features = false } -frame-election-provider-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } +frame-executive = { workspace = true, default-features = false } +frame-election-provider-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } # RPC -frame-system-rpc-runtime-api = { version = "4.0.0-dev", default-features = false } +frame-system-rpc-runtime-api = { workspace = true, default-features = false } pallet-group-rpc-runtime-api = { workspace = true, default-features = false } pallet-protocol-fee-rpc-runtime-api = { workspace = true, default-features = false } pallet-staking-runtime-api = { workspace = true, default-features = false } node-rpc-runtime-api = { workspace = true, default-features = false } # Used for runtime benchmarking -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } -frame-system-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } +frame-system-benchmarking = { workspace = true, default-features = false, optional = true } hex-literal = { version = "0.3.1", optional = true } # Import 'getrandom' here to enable feature `getrandom/js` for wasm builds. @@ -144,7 +144,7 @@ std = [ "pallet-contracts/std", "pallet-corporate-actions/std", "pallet-election-provider-multi-phase/std", - "pallet-executive/std", + "frame-executive/std", "pallet-external-agents/std", "pallet-grandpa/std", "pallet-group-rpc-runtime-api/std", diff --git a/pallets/runtime/mainnet/Cargo.toml b/pallets/runtime/mainnet/Cargo.toml index 59bea3c540..04b5a508d4 100644 --- a/pallets/runtime/mainnet/Cargo.toml +++ b/pallets/runtime/mainnet/Cargo.toml @@ -50,51 +50,50 @@ pallet-protocol-fee-rpc-runtime-api = { workspace = true, default-features = fal # Others log = "0.4.8" -lazy_static = { version = "1.4.0", default-features = false } serde = { version = "1.0.104", default-features = false } serde_derive = { version = "1.0.104", optional = true } smallvec = "1.4.0" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -frame-election-provider-support = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-system-rpc-runtime-api = { version = "4.0.0-dev", default-features = false } -pallet-authority-discovery = { version = "4.0.0-dev", default-features = false } -pallet-authorship = { version = "4.0.0-dev", default-features = false } -pallet-babe = { version = "4.0.0-dev", default-features = false } -pallet-contracts = { version = "4.0.0-dev", default-features = false } -pallet-contracts-primitives = { version = "7.0.0", default-features = false} -pallet-election-provider-multi-phase = { version = "4.0.0-dev", default-features = false } -pallet-executive = { package = "frame-executive", version = "4.0.0-dev", default-features = false } -pallet-grandpa = { version = "4.0.0-dev", default-features = false } -pallet-im-online = { version = "4.0.0-dev", default-features = false } -pallet-indices = { version = "4.0.0-dev", default-features = false } -pallet-offences = { version = "4.0.0-dev", default-features = false } -pallet-preimage = { version = "4.0.0-dev", default-features = false } -pallet-insecure-randomness-collective-flip = { version = "4.0.0-dev", default-features = false } -pallet-scheduler = { version = "4.0.0-dev", default-features = false } -pallet-session = { version = "4.0.0-dev", default-features = false } -pallet-staking-reward-curve = { version = "4.0.0-dev", default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-arithmetic = { version = "6.0.0", default-features = false } -sp-authority-discovery = { version = "4.0.0-dev", default-features = false } -sp-block-builder = { version = "4.0.0-dev", default-features = false } -sp-consensus-babe = { version = "0.10.0-dev", default-features = false } -sp-consensus-grandpa = { version = "4.0.0-dev", default-features = false } -sp-core = { version = "7.0.0", default-features = false } -sp-inherents = { version = "4.0.0-dev", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-offchain = { version = "4.0.0-dev", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-session = { version = "4.0.0-dev", default-features = false } -sp-staking = { version = "4.0.0-dev", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-transaction-pool = { version = "4.0.0-dev", default-features = false } -sp-version = { version = "5.0.0", default-features = false } +frame-election-provider-support = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-executive = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +frame-system-rpc-runtime-api = { workspace = true, default-features = false } +pallet-authority-discovery = { workspace = true, default-features = false } +pallet-authorship = { workspace = true, default-features = false } +pallet-babe = { workspace = true, default-features = false } +pallet-contracts = { workspace = true, default-features = false } +pallet-contracts-primitives = { workspace = true, default-features = false} +pallet-election-provider-multi-phase = { workspace = true, default-features = false } +pallet-grandpa = { workspace = true, default-features = false } +pallet-im-online = { workspace = true, default-features = false } +pallet-indices = { workspace = true, default-features = false } +pallet-offences = { workspace = true, default-features = false } +pallet-preimage = { workspace = true, default-features = false } +pallet-insecure-randomness-collective-flip = { workspace = true, default-features = false } +pallet-scheduler = { workspace = true, default-features = false } +pallet-session = { workspace = true, default-features = false } +pallet-staking-reward-curve = { workspace = true, default-features = false } +pallet-timestamp = { workspace = true, default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-api = { workspace = true, default-features = false } +sp-arithmetic = { workspace = true, default-features = false } +sp-authority-discovery = { workspace = true, default-features = false } +sp-block-builder = { workspace = true, default-features = false } +sp-consensus-babe = { workspace = true, default-features = false } +sp-consensus-grandpa = { workspace = true, default-features = false } +sp-core = { workspace = true, default-features = false } +sp-inherents = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-offchain = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-session = { workspace = true, default-features = false } +sp-staking = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-transaction-pool = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } [build-dependencies] polymesh-build-tool = { workspace = true, default-features = false } @@ -131,7 +130,7 @@ std = [ "pallet-compliance-manager/std", "pallet-contracts/std", "pallet-election-provider-multi-phase/std", - "pallet-executive/std", + "frame-executive/std", "pallet-external-agents/std", "pallet-grandpa/std", "pallet-group-rpc-runtime-api/std", diff --git a/pallets/runtime/testnet/Cargo.toml b/pallets/runtime/testnet/Cargo.toml index 8dc05994a5..71711e0b25 100644 --- a/pallets/runtime/testnet/Cargo.toml +++ b/pallets/runtime/testnet/Cargo.toml @@ -49,54 +49,53 @@ pallet-staking-runtime-api = { workspace = true, default-features = false } pallet-protocol-fee-rpc-runtime-api = { workspace = true, default-features = false } # Others -lazy_static = { version = "1.4.0", default-features = false } log = "0.4.8" serde = { version = "1.0.104", default-features = false } serde_derive = { version = "1.0.104", optional = true } +smallvec = "1.4.0" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-inherents = { version = "4.0.0-dev", default-features = false } -sp-offchain = { version = "4.0.0-dev", default-features = false } -sp-staking = { version = "4.0.0-dev", default-features = false } -sp-consensus-babe = { version = "0.10.0-dev", default-features = false } -sp-consensus-grandpa = { version = "4.0.0-dev", default-features = false } -sp-session = { version = "4.0.0-dev", default-features = false } -sp-authority-discovery = { version = "4.0.0-dev", default-features = false } -sp-transaction-pool = { version = "4.0.0-dev", default-features = false } -sp-block-builder = { version = "4.0.0-dev", default-features = false } -sp-arithmetic = { version = "6.0.0", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } +sp-inherents = { workspace = true, default-features = false } +sp-offchain = { workspace = true, default-features = false } +sp-staking = { workspace = true, default-features = false } +sp-consensus-babe = { workspace = true, default-features = false } +sp-consensus-grandpa = { workspace = true, default-features = false } +sp-session = { workspace = true, default-features = false } +sp-authority-discovery = { workspace = true, default-features = false } +sp-transaction-pool = { workspace = true, default-features = false } +sp-block-builder = { workspace = true, default-features = false } +sp-arithmetic = { workspace = true, default-features = false } -pallet-authorship = { version = "4.0.0-dev", default-features = false } -pallet-contracts = { version = "4.0.0-dev", default-features = false } -pallet-contracts-primitives = { version = "7.0.0", default-features = false} -pallet-election-provider-multi-phase = { version = "4.0.0-dev", default-features = false } -pallet-executive = { package = "frame-executive", version = "4.0.0-dev", default-features = false } -pallet-grandpa = { version = "4.0.0-dev", default-features = false } -pallet-im-online = { version = "4.0.0-dev", default-features = false } -pallet-indices = { version = "4.0.0-dev", default-features = false } -pallet-offences = { version = "4.0.0-dev", default-features = false } -pallet-preimage = { version = "4.0.0-dev", default-features = false } -pallet-session = { version = "4.0.0-dev", default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } -pallet-babe = { version = "4.0.0-dev", default-features = false } -pallet-authority-discovery = { version = "4.0.0-dev", default-features = false } -pallet-insecure-randomness-collective-flip = { version = "4.0.0-dev", default-features = false } -pallet-scheduler = { version = "4.0.0-dev", default-features = false } -pallet-staking-reward-curve = { version = "4.0.0-dev", default-features = false } +pallet-authorship = { workspace = true, default-features = false } +pallet-contracts = { workspace = true, default-features = false } +pallet-contracts-primitives = { workspace = true, default-features = false} +pallet-election-provider-multi-phase = { workspace = true, default-features = false } +pallet-grandpa = { workspace = true, default-features = false } +pallet-im-online = { workspace = true, default-features = false } +pallet-indices = { workspace = true, default-features = false } +pallet-offences = { workspace = true, default-features = false } +pallet-preimage = { workspace = true, default-features = false } +pallet-session = { workspace = true, default-features = false } +pallet-timestamp = { workspace = true, default-features = false } +pallet-babe = { workspace = true, default-features = false } +pallet-authority-discovery = { workspace = true, default-features = false } +pallet-insecure-randomness-collective-flip = { workspace = true, default-features = false } +pallet-scheduler = { workspace = true, default-features = false } +pallet-staking-reward-curve = { workspace = true, default-features = false } -frame-election-provider-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system-rpc-runtime-api = { version = "4.0.0-dev", default-features = false } -smallvec = "1.4.0" +frame-executive = { workspace = true, default-features = false } +frame-election-provider-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system-rpc-runtime-api = { workspace = true, default-features = false } [build-dependencies] polymesh-build-tool = { workspace = true, default-features = false } @@ -134,7 +133,7 @@ std = [ "pallet-compliance-manager/std", "pallet-contracts/std", "pallet-election-provider-multi-phase/std", - "pallet-executive/std", + "frame-executive/std", "pallet-external-agents/std", "pallet-grandpa/std", "pallet-group-rpc-runtime-api/std", diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index 8ab15187e8..69dca205a2 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -56,54 +56,53 @@ log = "0.4.8" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -frame-benchmarking = { version = "4.0.0-dev", optional = true } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-system-rpc-runtime-api = { version = "4.0.0-dev", default-features = false } -frame-election-provider-support = { version = "4.0.0-dev", default-features = false } +frame-benchmarking = { workspace = true, optional = true } +frame-support = { workspace = true, default-features = false } +frame-executive = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +frame-system-rpc-runtime-api = { workspace = true, default-features = false } +frame-election-provider-support = { workspace = true, default-features = false } ink_primitives = { git = "https://github.com/paritytech/ink", tag = "v2.1.0", default-features = false } -pallet-authority-discovery = { version = "4.0.0-dev", default-features = false } -pallet-authorship = { version = "4.0.0-dev", default-features = false } -pallet-babe = { version = "4.0.0-dev", default-features = false } -pallet-contracts = { version = "4.0.0-dev", default-features = false } -pallet-contracts-primitives = { version = "7.0.0", default-features = false } -pallet-election-provider-multi-phase = { version = "4.0.0-dev", default-features = false } -pallet-executive = { package = "frame-executive", version = "4.0.0-dev", default-features = false } -pallet-grandpa = { version = "4.0.0-dev", default-features = false } -pallet-im-online = { version = "4.0.0-dev", default-features = false } -pallet-indices = { version = "4.0.0-dev", default-features = false } -pallet-offences = { version = "4.0.0-dev", default-features = false } -pallet-preimage = { version = "4.0.0-dev", default-features = false } -pallet-insecure-randomness-collective-flip = { version = "4.0.0-dev", default-features = false } -pallet-scheduler = { version = "4.0.0-dev", default-features = false } -pallet-session = { version = "4.0.0-dev", default-features = false, features = ["historical"] } -pallet-staking-reward-curve = { version = "4.0.0-dev", default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-arithmetic = { version = "6.0.0", default-features = false } -sp-authority-discovery = { version = "4.0.0-dev", default-features = false } -sp-block-builder = { version = "4.0.0-dev", default-features = false } -sp-consensus-babe = { version = "0.10.0-dev", default-features = false } -sp-consensus-grandpa = { version = "4.0.0-dev", default-features = false } -sp-core = { version = "7.0.0", default-features = false } -sp-inherents = { version = "4.0.0-dev", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-npos-elections = { version = "4.0.0-dev", default-features = false } -sp-offchain = { version = "4.0.0-dev", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-session = { version = "4.0.0-dev", default-features = false } -sp-staking = { version = "4.0.0-dev", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-transaction-pool = { version = "4.0.0-dev", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-keyring = { version = "7.0.0" } -substrate-test-utils = { version = "4.0.0-dev", default-features = false } +pallet-authority-discovery = { workspace = true, default-features = false } +pallet-authorship = { workspace = true, default-features = false } +pallet-babe = { workspace = true, default-features = false } +pallet-contracts = { workspace = true, default-features = false } +pallet-contracts-primitives = { workspace = true, default-features = false } +pallet-election-provider-multi-phase = { workspace = true, default-features = false } +pallet-grandpa = { workspace = true, default-features = false } +pallet-im-online = { workspace = true, default-features = false } +pallet-indices = { workspace = true, default-features = false } +pallet-offences = { workspace = true, default-features = false } +pallet-preimage = { workspace = true, default-features = false } +pallet-insecure-randomness-collective-flip = { workspace = true, default-features = false } +pallet-scheduler = { workspace = true, default-features = false } +pallet-session = { workspace = true, default-features = false, features = ["historical"] } +pallet-staking-reward-curve = { workspace = true, default-features = false } +pallet-timestamp = { workspace = true, default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-api = { workspace = true, default-features = false } +sp-arithmetic = { workspace = true, default-features = false } +sp-authority-discovery = { workspace = true, default-features = false } +sp-block-builder = { workspace = true, default-features = false } +sp-consensus-babe = { workspace = true, default-features = false } +sp-consensus-grandpa = { workspace = true, default-features = false } +sp-core = { workspace = true, default-features = false } +sp-inherents = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-npos-elections = { workspace = true, default-features = false } +sp-offchain = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-session = { workspace = true, default-features = false } +sp-staking = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-transaction-pool = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } +sp-keyring = { workspace = true } +substrate-test-utils = { workspace = true, default-features = false } [dev-dependencies] -libsecp256k1 = { version = "0.7", default-features = false } wat = "1.0" -sp-tracing = { version = "6.0.0", default-features = false, features = ["std"] } +sp-tracing = { workspace = true, default-features = false, features = ["std"] } [features] default = ["std", "testing", "equalize"] diff --git a/pallets/settlement/Cargo.toml b/pallets/settlement/Cargo.toml index 8a7dda8987..c8d60a00e0 100644 --- a/pallets/settlement/Cargo.toml +++ b/pallets/settlement/Cargo.toml @@ -22,20 +22,20 @@ hex-literal = "0.2.1" hex = { version = "0.4.2", optional = true } log = "0.4.8" -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } -pallet-scheduler = { version = "4.0.0-dev", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +pallet-timestamp = { workspace = true, default-features = false } +pallet-scheduler = { workspace = true, default-features = false } # Only in STD -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] equalize = [] diff --git a/pallets/statistics/Cargo.toml b/pallets/statistics/Cargo.toml index e740db9215..d6f73f8b09 100644 --- a/pallets/statistics/Cargo.toml +++ b/pallets/statistics/Cargo.toml @@ -16,20 +16,20 @@ serde_derive = { version = "1.0.112", optional = true, default-features = false} # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-arithmetic = { version = "6.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } +sp-core = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } +sp-arithmetic = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } +pallet-timestamp = { workspace = true, default-features = false } # Only in Benchmarks -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [dev-dependencies] lazy_static = "1.4.0" diff --git a/pallets/sto/Cargo.toml b/pallets/sto/Cargo.toml index 86c59dd273..d150b79314 100644 --- a/pallets/sto/Cargo.toml +++ b/pallets/sto/Cargo.toml @@ -22,20 +22,20 @@ serde_derive = { version = "1.0.104", optional = true, default-features = false log = "0.4.8" codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } +pallet-timestamp = { workspace = true, default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } # Only in STD -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] equalize = [] diff --git a/pallets/transaction-payment/Cargo.toml b/pallets/transaction-payment/Cargo.toml index a469be17bc..2ddaaa2505 100644 --- a/pallets/transaction-payment/Cargo.toml +++ b/pallets/transaction-payment/Cargo.toml @@ -13,14 +13,14 @@ serde = { version = "1.0.104", default-features = false, optional = true } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-std = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-std = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +pallet-timestamp = { workspace = true, default-features = false } [dev-dependencies] serde_json = "1.0.56" diff --git a/pallets/treasury/Cargo.toml b/pallets/treasury/Cargo.toml index 5312526a2d..3025c88fbe 100644 --- a/pallets/treasury/Cargo.toml +++ b/pallets/treasury/Cargo.toml @@ -16,19 +16,19 @@ serde_derive = { version = "1.0.104", optional = true, default-features = false # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-api = { version = "4.0.0-dev", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } +sp-api = { workspace = true, default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } +frame-system = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } # Benchmarking -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } [features] equalize = [] diff --git a/pallets/utility/Cargo.toml b/pallets/utility/Cargo.toml index 16479fe24c..f4ea2876ab 100644 --- a/pallets/utility/Cargo.toml +++ b/pallets/utility/Cargo.toml @@ -14,14 +14,14 @@ polymesh-primitives = { workspace = true, default-features = false } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -sp-core = { version = "7.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +frame-benchmarking = { workspace = true, default-features = false, optional = true } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +sp-core = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } [features] default = ["std"] diff --git a/pallets/validators/Cargo.toml b/pallets/validators/Cargo.toml index b2720108bd..6bf73470a6 100644 --- a/pallets/validators/Cargo.toml +++ b/pallets/validators/Cargo.toml @@ -18,32 +18,28 @@ log = "0.4.8" # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -scale-info = { version = "2.0", default-features = false, features = [ - "derive", -] } -sp-core = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-arithmetic = { version = "6.0.0", default-features = false } -sp-staking = { version = "4.0.0-dev", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -frame-election-provider-support = { version = "4.0.0-dev", default-features = false } -sp-npos-elections = { version = "4.0.0-dev", default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive"] } +sp-core = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false} +sp-runtime = { workspace = true, default-features = false } +sp-arithmetic = { workspace = true, default-features = false } +sp-staking = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +frame-election-provider-support = { workspace = true, default-features = false } +sp-npos-elections = { workspace = true, default-features = false} -pallet-session = { features = [ - "historical", -], version = "4.0.0-dev", default-features = false } -pallet-authorship = { version = "4.0.0-dev", default-features = false } -pallet-babe = { version = "4.0.0-dev", default-features = false } +pallet-session = { features = ["historical"], workspace = true, default-features = false } +pallet-authorship = { workspace = true, default-features = false } +pallet-babe = { workspace = true, default-features = false } # Optional imports for benchmarking -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } rand_chacha = { version = "0.2", default-features = false, optional = true } [dev-dependencies] -pallet-staking-reward-curve = { version = "4.0.0-dev", default-features = false } +pallet-staking-reward-curve = { workspace = true, default-features = false } sp-tracing = "6.0.0" [features] diff --git a/pallets/weights/Cargo.toml b/pallets/weights/Cargo.toml index e0c2fbaadc..c1103c0c86 100644 --- a/pallets/weights/Cargo.toml +++ b/pallets/weights/Cargo.toml @@ -6,18 +6,18 @@ edition = "2021" [dependencies] # substrate pallets -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -pallet-timestamp = { version = "4.0.0-dev", default-features = false } -pallet-babe = { version = "4.0.0-dev", default-features = false } -pallet-contracts = { version = "4.0.0-dev", default-features = false } -pallet-im-online = { version = "4.0.0-dev", default-features = false } -pallet-indices = { version = "4.0.0-dev", default-features = false } -pallet-grandpa = { version = "4.0.0-dev", default-features = false } -pallet-preimage = { version = "4.0.0-dev", default-features = false } -pallet-scheduler = { version = "4.0.0-dev", default-features = false } -pallet-session = { version = "4.0.0-dev", default-features = false } -sp-std = { version = "5.0.0", default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +pallet-timestamp = { workspace = true, default-features = false } +pallet-babe = { workspace = true, default-features = false } +pallet-contracts = { workspace = true, default-features = false } +pallet-im-online = { workspace = true, default-features = false } +pallet-indices = { workspace = true, default-features = false } +pallet-grandpa = { workspace = true, default-features = false } +pallet-preimage = { workspace = true, default-features = false } +pallet-scheduler = { workspace = true, default-features = false } +pallet-session = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } # our pallets pallet-asset = { workspace = true, default-features = false } diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index fc9ef09d08..6537332caf 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -25,17 +25,17 @@ schnorrkel = { version = "0.11", default-features = false } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } -scale-info = { version = "2.0", default-features = false, features = ["derive", "decode"] } -sp-application-crypto = { version = "7.0.0", default-features = false, optional = true } -sp-arithmetic = { version = "6.0.0", default-features = false } -sp-core = { version = "7.0.0", default-features = false } -sp-io = { version = "7.0.0", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-runtime-interface = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +scale-info = { workspace = true, default-features = false, features = ["derive", "decode"] } +sp-application-crypto = { workspace = true, default-features = false, optional = true } +sp-arithmetic = { workspace = true, default-features = false } +sp-core = { workspace = true, default-features = false } +sp-io = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-runtime-interface = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-version = { workspace = true, default-features = false } libsecp256k1 = { version = "0.7", default-features = false, features = ["hmac", "static-context"] } [dev-dependencies] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 66929a2d0f..f4767fb9be 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -10,25 +10,25 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { workspace = true, default-features = false, features = ["derive"] } jsonrpsee = { version = "0.16.2", features = ["server", "macros"] } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-blockchain = { version = "4.0.0-dev" } -sp-core = { version = "7.0.0", default-features = false } -sp-rpc = { version = "6.0.0" } -sp-runtime = { version = "7.0.0", default-features = false } -sp-std = {version = "5.0.0", default-features = false } -sp-weights = { version = "4.0.0", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } +sp-api = { workspace = true, default-features = false } +sp-blockchain = { workspace = true } +sp-core = { workspace = true, default-features = false } +sp-rpc = { workspace = true } +sp-runtime = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-weights = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } -node-rpc-runtime-api = { path = "./runtime-api", default-features = false } +node-rpc-runtime-api = { workspace = true, default-features = false } -pallet-compliance-manager = { path = "../pallets/compliance-manager", default-features = false } -pallet-pips = { path = "../pallets/pips", default-features = false } -polymesh-primitives = { path = "../primitives", default-features = false } +pallet-compliance-manager = { workspace = true, default-features = false } +pallet-pips = { workspace = true, default-features = false } +polymesh-primitives = { workspace = true, default-features = false } -pallet-portfolio = { path = "../pallets/portfolio", default-features = false } -pallet-identity = { path = "../pallets/identity", default-features = false } -pallet-transaction-payment = { path = "../pallets/transaction-payment", default-features = false } +pallet-portfolio = { workspace = true, default-features = false } +pallet-identity = { workspace = true, default-features = false } +pallet-transaction-payment = { workspace = true, default-features = false } # Others serde = { version = "1.0.104", optional = true, features = ["derive"] } diff --git a/rpc/runtime-api/Cargo.toml b/rpc/runtime-api/Cargo.toml index 7f6e55c3a5..1b045934f7 100644 --- a/rpc/runtime-api/Cargo.toml +++ b/rpc/runtime-api/Cargo.toml @@ -9,20 +9,20 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { workspace = true, default-features = false, features = ["derive"] } -sp-api = { version = "4.0.0-dev", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-std = { version = "5.0.0", default-features = false } -sp-weights = { version = "4.0.0", default-features = false } -frame-support = { version = "4.0.0-dev", default-features = false } -frame-system = { version = "4.0.0-dev", default-features = false } +sp-api = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +sp-std = { workspace = true, default-features = false } +sp-weights = { workspace = true, default-features = false } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } # Our pallets -polymesh-primitives = { path = "../../primitives", default-features = false } -pallet-compliance-manager = { path = "../../pallets/compliance-manager", default-features = false } -pallet-pips = { path = "../../pallets/pips", default-features = false } -pallet-portfolio = { path = "../../pallets/portfolio", default-features = false } -pallet-identity = { path = "../../pallets/identity", default-features = false } -pallet-transaction-payment = { path = "../../pallets/transaction-payment", default-features = false } +polymesh-primitives = { workspace = true, default-features = false } +pallet-compliance-manager = { workspace = true, default-features = false } +pallet-pips = { workspace = true, default-features = false } +pallet-portfolio = { workspace = true, default-features = false } +pallet-identity = { workspace = true, default-features = false } +pallet-transaction-payment = { workspace = true, default-features = false } # Other serde = { version = "1.0.104", optional = true, features = ["derive"] } From 8ebaad5ab6ca2ff22873b01084844489764caa13 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Sat, 4 Jan 2025 00:21:52 +0800 Subject: [PATCH 10/97] Update Substrate --- Cargo.lock | 5452 ++++++++--------- Cargo.toml | 231 +- pallets/asset/Cargo.toml | 2 +- pallets/group/rpc/Cargo.toml | 2 +- pallets/group/rpc/runtime-api/Cargo.toml | 4 +- pallets/protocol-fee/rpc/Cargo.toml | 2 +- .../protocol-fee/rpc/runtime-api/Cargo.toml | 2 +- pallets/runtime/tests/Cargo.toml | 4 +- pallets/validators/Cargo.toml | 4 +- rpc/Cargo.toml | 2 +- rpc/runtime-api/Cargo.toml | 2 +- 11 files changed, 2830 insertions(+), 2877 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e437c0f90f..883997fb80 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,46 +14,27 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.17.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ - "gimli 0.26.2", + "gimli 0.27.3", ] [[package]] name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli 0.28.1", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aead" -version = "0.3.2" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ - "generic-array 0.14.7", + "gimli 0.31.1", ] [[package]] -name = "aead" -version = "0.4.3" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" -dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", -] +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aead" @@ -67,105 +48,48 @@ dependencies = [ [[package]] name = "aes" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" -dependencies = [ - "aes-soft", - "aesni", - "cipher 0.2.5", -] - -[[package]] -name = "aes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" -dependencies = [ - "cfg-if 1.0.0", - "cipher 0.3.0", - "cpufeatures", - "opaque-debug 0.3.0", -] - -[[package]] -name = "aes" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ - "cfg-if 1.0.0", - "cipher 0.4.4", + "cfg-if", + "cipher", "cpufeatures", ] -[[package]] -name = "aes-gcm" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" -dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "cipher 0.3.0", - "ctr 0.8.0", - "ghash 0.4.4", - "subtle", -] - [[package]] name = "aes-gcm" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" dependencies = [ - "aead 0.5.2", - "aes 0.8.3", - "cipher 0.4.4", - "ctr 0.9.2", - "ghash 0.5.0", + "aead", + "aes", + "cipher", + "ctr", + "ghash", "subtle", ] -[[package]] -name = "aes-soft" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" -dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", -] - -[[package]] -name = "aesni" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" -dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", -] - [[package]] name = "ahash" version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.11", + "getrandom 0.2.16", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ - "cfg-if 1.0.0", - "getrandom 0.2.11", + "cfg-if", + "getrandom 0.3.3", "once_cell", "version_check", "zerocopy", @@ -173,13 +97,19 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -206,9 +136,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -221,43 +151,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "6680de5231bd6ee4c6191b8a1325daa282b415391ec9d3a37bd34f2060dc73fa" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell_polyfill", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "approx" @@ -269,22 +200,30 @@ dependencies = [ ] [[package]] -name = "arc-swap" -version = "1.6.0" +name = "aquamarine" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" +checksum = "d1da02abba9f9063d786eab1509833ebb2fac0f966862ca59439c76b9c566760" +dependencies = [ + "include_dir", + "itertools", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] name = "array-bytes" -version = "4.2.0" +version = "6.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" +checksum = "5d5dde061bd34119e902bbb2d9b90c5692635cf59fb91d582c2b68043f1b8293" [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" @@ -294,25 +233,9 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" - -[[package]] -name = "asn1-rs" -version = "0.3.1" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" -dependencies = [ - "asn1-rs-derive 0.1.0", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror", - "time", -] +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "asn1-rs" @@ -320,28 +243,16 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ - "asn1-rs-derive 0.4.0", + "asn1-rs-derive", "asn1-rs-impl", "displaydoc", "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] -[[package]] -name = "asn1-rs-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure", -] - [[package]] name = "asn1-rs-derive" version = "0.4.0" @@ -351,7 +262,7 @@ dependencies = [ "proc-macro2", "quote", "syn 1.0.109", - "synstructure", + "synstructure 0.12.6", ] [[package]] @@ -365,60 +276,65 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "asn1_der" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" - [[package]] name = "asset-metadata" version = "0.1.0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", ] +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + [[package]] name = "async-io" -version = "2.2.2" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7" +checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" dependencies = [ "async-lock", - "cfg-if 1.0.0", + "cfg-if", "concurrent-queue", "futures-io", "futures-lite", "parking", "polling", - "rustix 0.38.28", + "rustix 1.0.7", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "async-lock" -version = "3.2.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener", + "event-listener 5.4.0", "event-listener-strategy", - "pin-project-lite 0.2.13", + "pin-project-lite", ] [[package]] name = "async-trait" -version = "0.1.74" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", ] [[package]] @@ -431,15 +347,9 @@ dependencies = [ "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.13", + "pin-project-lite", ] -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - [[package]] name = "atty" version = "0.2.14" @@ -453,23 +363,23 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ - "addr2line 0.21.0", - "cc", - "cfg-if 1.0.0", + "addr2line 0.24.2", + "cfg-if", "libc", "miniz_oxide", - "object 0.32.1", + "object 0.36.7", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -480,15 +390,9 @@ checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" [[package]] name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - -[[package]] -name = "base58" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base64" @@ -498,15 +402,21 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.5" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" [[package]] name = "beef" @@ -528,9 +438,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.64.0" +version = "0.65.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" dependencies = [ "bitflags 1.3.2", "cexpr", @@ -538,12 +448,13 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", + "prettyplease 0.2.33", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] @@ -554,19 +465,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" - -[[package]] -name = "bitvec" -version = "0.17.4" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c" -dependencies = [ - "either", - "radium 0.3.0", -] +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "bitvec" @@ -575,7 +476,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", - "radium 0.7.0", + "radium", "tap", "wyz", ] @@ -591,36 +492,36 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "constant_time_eq", ] [[package]] name = "blake2s_simd" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" +checksum = "e90f7deecfac93095eb874a40febd69427776e24e1bd7f87f33ac62d6f0174df" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "constant_time_eq", ] [[package]] name = "blake3" -version = "1.5.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "cc", - "cfg-if 1.0.0", + "cfg-if", "constant_time_eq", ] @@ -630,7 +531,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "block-padding 0.1.5", + "block-padding", "byte-tools", "byteorder", "generic-array 0.12.4", @@ -654,16 +555,6 @@ dependencies = [ "generic-array 0.14.7", ] -[[package]] -name = "block-modes" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" -dependencies = [ - "block-padding 0.2.1", - "cipher 0.2.5", -] - [[package]] name = "block-padding" version = "0.1.5" @@ -673,12 +564,6 @@ dependencies = [ "byte-tools", ] -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - [[package]] name = "bounded-collections" version = "0.1.9" @@ -686,7 +571,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca548b6163b872067dc5eb82fd130c56881435e30367d2073594a3d9744120dd" dependencies = [ "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "serde", ] @@ -697,11 +582,20 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bstr" -version = "1.8.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" +checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" dependencies = [ "memchr", "serde", @@ -718,21 +612,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byte-slice-cast" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0a5e3906bcbf133e33c1d4d95afc664ad37fbdb9f6568d8043e7ea8c27d93d3" - -[[package]] -name = "byte-slice-cast" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "byte-tools" @@ -742,9 +630,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.14.0" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" [[package]] name = "byteorder" @@ -754,35 +642,34 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "bzip2-sys" -version = "0.1.11+1.0.8" +version = "0.1.13+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" dependencies = [ "cc", - "libc", "pkg-config", ] [[package]] name = "camino" -version = "1.1.6" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" dependencies = [ "serde", ] [[package]] name = "cargo-platform" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" dependencies = [ "serde", ] @@ -795,34 +682,23 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.20", + "semver 1.0.26", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "cc" -version = "1.2.17" +version = "1.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" +checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" dependencies = [ "jobserver", "libc", "shlex", ] -[[package]] -name = "ccm" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7" -dependencies = [ - "aead 0.3.2", - "cipher 0.2.5", - "subtle", -] - [[package]] name = "cexpr" version = "0.6.0" @@ -834,19 +710,13 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.10.3" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ "smallvec", ] -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.0" @@ -859,14 +729,20 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chacha20" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ - "cfg-if 1.0.0", - "cipher 0.4.4", + "cfg-if", + "cipher", "cpufeatures", ] @@ -876,54 +752,36 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ - "aead 0.5.2", + "aead", "chacha20", - "cipher 0.4.4", + "cipher", "poly1305", "zeroize", ] [[package]] name = "chrono" -version = "0.4.31" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", - "windows-targets 0.48.5", + "windows-link", ] [[package]] name = "cid" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" +checksum = "b9b68e3193982cd54187d71afdb2a271ad4cf8af157858e9cb911b91321de143" dependencies = [ "core2", "multibase", - "multihash 0.16.3", + "multihash 0.17.0", "serde", - "unsigned-varint", -] - -[[package]] -name = "cipher" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "cipher" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" -dependencies = [ - "generic-array 0.14.7", + "unsigned-varint 0.7.2", ] [[package]] @@ -939,9 +797,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.6.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", @@ -950,9 +808,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.11" +version = "4.5.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" +checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" dependencies = [ "clap_builder", "clap_derive", @@ -960,81 +818,101 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.11" +version = "4.5.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" +checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.1", ] [[package]] name = "clap_derive" -version = "4.4.7" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", ] [[package]] name = "clap_lex" -version = "0.6.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "codespan-reporting" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" dependencies = [ + "serde", "termcolor", - "unicode-width", + "unicode-width 0.2.0", ] [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "comfy-table" -version = "6.2.0" +version = "7.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba" +checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" dependencies = [ - "strum", - "strum_macros", - "unicode-width", + "unicode-segmentation", + "unicode-width 0.2.0", ] [[package]] name = "concurrent-queue" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", ] [[package]] name = "const-oid" -version = "0.9.5" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-random" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.16", + "once_cell", + "tiny-keccak", +] [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "core-foundation" @@ -1048,9 +926,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core2" @@ -1067,42 +945,41 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] name = "cpufeatures" -version = "0.2.11" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "cranelift-bforest" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc42ba2e232e5b20ff7dc299a812d53337dadce9a7e39a238e6a5cb82d2e57b" +checksum = "1277fbfa94bc82c8ec4af2ded3e639d49ca5f7f3c7eeab2c66accd135ece4e70" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "253531aca9b6f56103c9420369db3263e784df39aa1c90685a1f69cfbba0623e" +checksum = "c6e8c31ad3b2270e9aeec38723888fe1b0ace3bea2b06b3f749ccf46661d3220" dependencies = [ - "arrayvec 0.7.4", "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", "cranelift-entity", "cranelift-isle", - "gimli 0.26.2", - "hashbrown 0.12.3", + "gimli 0.27.3", + "hashbrown 0.13.2", "log", "regalloc2", "smallvec", @@ -1111,33 +988,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f2154365e2bff1b1b8537a7181591fdff50d8e27fa6e40d5c69c3bad0ca7c8" +checksum = "c8ac5ac30d62b2d66f12651f6b606dbdfd9c2cfd0908de6b387560a277c5c9da" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "687e14e3f5775248930e0d5a84195abef8b829958e9794bf8d525104993612b4" +checksum = "dd82b8b376247834b59ed9bdc0ddeb50f517452827d4a11bccf5937b213748b8" [[package]] name = "cranelift-entity" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f42ea692c7b450ad18b8c9889661505d51c09ec4380cf1c2d278dbb2da22cae1" +checksum = "40099d38061b37e505e63f89bab52199037a72b931ad4868d9089ff7268660b0" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8483c2db6f45fe9ace984e5adc5d058102227e4c62e5aa2054e16b0275fd3a6e" +checksum = "64a25d9d0a0ae3079c463c34115ec59507b4707175454f0eee0891e83e30e82d" dependencies = [ "cranelift-codegen", "log", @@ -1147,15 +1024,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9793158837678902446c411741d87b43f57dadfb944f2440db4287cda8cbd59" +checksum = "80de6a7d0486e4acbd5f9f87ec49912bf4c8fb6aea00087b989685460d4469ba" [[package]] name = "cranelift-native" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72668c7755f2b880665cb422c8ad2d56db58a88b9bebfef0b73edc2277c13c49" +checksum = "bb6b03e0e03801c4b3fd8ce0758a94750c07a44e7944cc0ffbf0d3f2e7c79b00" dependencies = [ "cranelift-codegen", "libc", @@ -1164,9 +1041,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3852ce4b088b44ac4e29459573943009a70d1b192c8d77ef949b4e814f656fc1" +checksum = "ff3220489a3d928ad91e59dd7aeaa8b3de18afb554a6211213673a71c90737ac" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1174,78 +1051,55 @@ dependencies = [ "itertools", "log", "smallvec", - "wasmparser", + "wasmparser 0.102.0", "wasmtime-types", ] -[[package]] -name = "crc" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ - "cfg-if 1.0.0", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if 1.0.0", "crossbeam-utils", - "memoffset 0.9.0", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if 1.0.0", -] +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-bigint" -version = "0.4.9" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array 0.14.7", "rand_core 0.6.4", @@ -1299,7 +1153,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.4.4", + "cipher", ] [[package]] @@ -1334,12 +1188,12 @@ version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "subtle", "zeroize", ] @@ -1352,51 +1206,66 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", ] [[package]] name = "cxx" -version = "1.0.110" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7129e341034ecb940c9072817cd9007974ea696844fc4dd582dc1653a7fbe2e8" +checksum = "a71ea7f29c73f7ffa64c50b83c9fe4d3a6d4be89a86b009eb80d5a6d3429d741" dependencies = [ "cc", + "cxxbridge-cmd", "cxxbridge-flags", "cxxbridge-macro", + "foldhash", "link-cplusplus", ] [[package]] name = "cxx-build" -version = "1.0.110" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a24f3f5f8eed71936f21e570436f024f5c2e25628f7496aa7ccd03b90109d5" +checksum = "36a8232661d66dcf713394726157d3cfe0a89bfc85f52d6e9f9bbc2306797fe7" dependencies = [ "cc", "codespan-reporting", - "once_cell", "proc-macro2", "quote", "scratch", - "syn 2.0.40", + "syn 2.0.101", +] + +[[package]] +name = "cxxbridge-cmd" +version = "1.0.158" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f44296c8693e9ea226a48f6a122727f77aa9e9e338380cb021accaeeb7ee279" +dependencies = [ + "clap", + "codespan-reporting", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] name = "cxxbridge-flags" -version = "1.0.110" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06fdd177fc61050d63f67f5bd6351fac6ab5526694ea8e359cd9cd3b75857f44" +checksum = "c42f69c181c176981ae44ba9876e2ea41ce8e574c296b38d06925ce9214fb8e4" [[package]] name = "cxxbridge-macro" -version = "1.0.110" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "587663dd5fb3d10932c8aecfe7c844db1bcf0aee93eeab08fac13dc1212c2e7f" +checksum = "8faff5d4467e0709448187df29ccbf3b0982cc426ee444a193f87b11afb565a8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "rustversion", + "syn 2.0.101", ] [[package]] @@ -1419,7 +1288,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim", + "strsim 0.10.0", "syn 1.0.109", ] @@ -1436,15 +1305,15 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.5.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "data-encoding-macro" -version = "0.1.14" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c01c06f5f429efdf2bae21eb67c28b3df3cf85b7dd2d8ef09c0838dac5d33e" +checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -1452,56 +1321,31 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.12" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0047d07f2c89b17dd631c80450d69841a6b5d7fb17278cbc43d7e4cfcf2576f3" +checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" dependencies = [ "data-encoding", - "syn 1.0.109", -] - -[[package]] -name = "der" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", + "syn 2.0.101", ] [[package]] name = "der" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", "zeroize", ] -[[package]] -name = "der-parser" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" -dependencies = [ - "asn1-rs 0.3.1", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - [[package]] name = "der-parser" version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs", "displaydoc", "nom", "num-bigint", @@ -1511,9 +1355,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.10" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", ] @@ -1530,41 +1374,32 @@ dependencies = [ ] [[package]] -name = "derive_builder" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.11.2" +name = "derive_more" +version = "0.99.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" dependencies = [ - "darling", + "convert_case", "proc-macro2", "quote", - "syn 1.0.109", + "rustc_version 0.4.1", + "syn 2.0.101", ] [[package]] -name = "derive_builder_macro" -version = "0.11.2" +name = "derive_more" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" dependencies = [ - "derive_builder_core", - "syn 1.0.109", + "derive_more-impl", ] [[package]] -name = "derive_more" -version = "0.99.17" +name = "derive_more-impl" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", @@ -1602,6 +1437,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", + "const-oid", "crypto-common", "subtle", ] @@ -1621,7 +1457,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "dirs-sys-next", ] @@ -1649,13 +1485,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", ] [[package]] @@ -1666,21 +1502,21 @@ checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] name = "downcast-rs" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dtoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" [[package]] name = "dyn-clonable" -version = "0.9.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" +checksum = "a36efbb9bfd58e1723780aa04b61aba95ace6a05d9ffabfdb0b43672552f0805" dependencies = [ "dyn-clonable-impl", "dyn-clone", @@ -1688,31 +1524,33 @@ dependencies = [ [[package]] name = "dyn-clonable-impl" -version = "0.9.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" +checksum = "7e8671d54058979a37a26f3511fbf8d198ba1aa35ffb202c42587d918d77213a" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "dyn-clone" -version = "1.0.16" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" [[package]] name = "ecdsa" -version = "0.14.8" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "der 0.6.1", + "der", + "digest 0.10.7", "elliptic-curve", "rfc6979", - "signature 1.6.4", + "signature 2.2.0", + "spki", ] [[package]] @@ -1730,7 +1568,7 @@ version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "pkcs8 0.10.2", + "pkcs8", "signature 2.2.0", ] @@ -1750,15 +1588,15 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ "curve25519-dalek 4.1.3", "ed25519 2.2.3", "rand_core 0.6.4", "serde", - "sha2 0.10.8", + "sha2 0.10.9", "subtle", "zeroize", ] @@ -1779,26 +1617,23 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "elliptic-curve" -version = "0.12.3" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "der 0.6.1", "digest 0.10.7", "ff", "generic-array 0.14.7", "group", - "hkdf", - "pem-rfc7468", - "pkcs8 0.9.0", + "pkcs8", "rand_core 0.6.4", "sec1", "subtle", @@ -1811,12 +1646,24 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "env_logger" version = "0.7.1" @@ -1832,11 +1679,11 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" dependencies = [ - "humantime 2.1.0", + "humantime 2.2.0", "is-terminal", "log", "regex", @@ -1851,39 +1698,45 @@ checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "event-listener" -version = "4.0.0" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770d968249b5d99410d61f5bf89057f3199a077a04d087092f58e7d10692baae" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", - "pin-project-lite 0.2.13", + "pin-project-lite", ] [[package]] name = "event-listener-strategy" -version = "0.4.0" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener", - "pin-project-lite 0.2.13", + "event-listener 5.4.0", + "pin-project-lite", ] [[package]] @@ -1895,6 +1748,21 @@ dependencies = [ "futures", ] +[[package]] +name = "expander" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2c470c71d91ecbd179935b24170459e926382eaaa86b590b78814e180d8a8e2" +dependencies = [ + "blake2", + "file-guard", + "fs-err", + "prettyplease 0.2.33", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "fake-simd" version = "0.1.2" @@ -1909,9 +1777,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "2.0.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fdlimit" @@ -1924,9 +1792,9 @@ dependencies = [ [[package]] name = "ff" -version = "0.12.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ "rand_core 0.6.4", "subtle", @@ -1934,9 +1802,19 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.5" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "file-guard" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" +checksum = "21ef72acf95ec3d7dbf61275be556299490a245f017cf084bd23b4f68cf9407c" +dependencies = [ + "libc", + "winapi", +] [[package]] name = "file-per-thread-logger" @@ -1944,20 +1822,20 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" dependencies = [ - "env_logger 0.10.1", + "env_logger 0.10.2", "log", ] [[package]] name = "filetime" -version = "0.2.23" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", - "redox_syscall 0.4.1", - "windows-sys 0.52.0", + "libredox", + "windows-sys 0.59.0", ] [[package]] @@ -1971,8 +1849,8 @@ dependencies = [ "futures-timer", "log", "num-traits", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "scale-info", ] @@ -1994,17 +1872,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" -[[package]] -name = "flate2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "libz-sys", - "miniz_oxide", -] - [[package]] name = "float-cmp" version = "0.9.0" @@ -2020,12 +1887,18 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", ] [[package]] @@ -2039,21 +1912,21 @@ dependencies = [ [[package]] name = "fragile" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" +checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-support", "frame-support-procedural", "frame-system", "linregress", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "paste", "scale-info", "serde", @@ -2071,7 +1944,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "Inflector", "array-bytes", @@ -2087,7 +1960,7 @@ dependencies = [ "lazy_static", "linked-hash-map", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "rand 0.8.5", "rand_pcg", "sc-block-builder", @@ -2105,36 +1978,37 @@ dependencies = [ "sp-database", "sp-externalities", "sp-inherents", + "sp-io", "sp-keystore", "sp-runtime", "sp-state-machine", - "sp-std", "sp-storage", "sp-trie", - "thiserror", + "sp-wasm-interface", + "thiserror 1.0.69", "thousands", ] [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-election-provider-solution-type", "frame-support", "frame-system", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-arithmetic", "sp-core", @@ -2146,11 +2020,12 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-support", "frame-system", - "parity-scale-codec 3.6.9", + "frame-try-runtime", + "parity-scale-codec", "scale-info", "sp-core", "sp-io", @@ -2161,12 +2036,12 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "15.1.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" dependencies = [ - "cfg-if 1.0.0", - "parity-scale-codec 3.6.9", + "cfg-if", + "parity-scale-codec", "scale-info", "serde", ] @@ -2174,8 +2049,9 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ + "aquamarine", "bitflags 1.3.2", "environmental", "frame-metadata", @@ -2183,16 +2059,19 @@ dependencies = [ "impl-trait-for-tuples", "k256", "log", - "once_cell", - "parity-scale-codec 3.6.9", + "macro_magic", + "parity-scale-codec", "paste", "scale-info", "serde", + "serde_json", "smallvec", "sp-api", "sp-arithmetic", "sp-core", "sp-core-hashing-proc-macro", + "sp-debug-derive", + "sp-genesis-builder", "sp-inherents", "sp-io", "sp-runtime", @@ -2207,48 +2086,52 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "Inflector", "cfg-expr", "derive-syn-parse", + "expander", "frame-support-procedural-tools", "itertools", + "macro_magic", + "proc-macro-warning", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ + "cfg-if", "frame-support", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "serde", "sp-core", @@ -2262,12 +2145,12 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-core", "sp-runtime", @@ -2277,30 +2160,41 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sp-api", ] [[package]] -name = "fs2" -version = "0.4.3" +name = "frame-try-runtime" +version = "0.10.0-dev" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +dependencies = [ + "frame-support", + "parity-scale-codec", + "sp-api", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "fs-err" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" dependencies = [ - "libc", - "winapi", + "autocfg", ] [[package]] -name = "fs4" -version = "0.6.6" +name = "fs2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" dependencies = [ - "rustix 0.38.28", - "windows-sys 0.48.0", + "libc", + "winapi", ] [[package]] @@ -2311,9 +2205,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.29" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -2324,11 +2218,21 @@ dependencies = [ "futures-util", ] +[[package]] +name = "futures-bounded" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b07bbbe7d7e78809544c6f718d875627addc73a7c3582447abc052cd3dc67e0" +dependencies = [ + "futures-timer", + "futures-util", +] + [[package]] name = "futures-channel" -version = "0.3.29" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -2336,15 +2240,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.29" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.29" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -2354,65 +2258,64 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.29" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.1.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ "futures-core", - "pin-project-lite 0.2.13", + "pin-project-lite", ] [[package]] name = "futures-macro" -version = "0.3.29" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", ] [[package]] name = "futures-rustls" -version = "0.22.2" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" +checksum = "35bd3cf68c183738046838e300353e4716c674dc5e56890de4826801a6622a28" dependencies = [ "futures-io", - "rustls 0.20.9", - "webpki 0.22.4", + "rustls", ] [[package]] name = "futures-sink" -version = "0.3.29" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.29" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.29" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -2421,7 +2324,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.13", + "pin-project-lite", "pin-utils", "slab", ] @@ -2452,6 +2355,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -2470,18 +2374,18 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.9.0+wasi-snapshot-preview1", ] [[package]] name = "getrandom" -version = "0.2.11" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", @@ -2490,11 +2394,11 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "r-efi", "wasi 0.14.2+wasi-0.2.4", @@ -2512,29 +2416,19 @@ dependencies = [ [[package]] name = "ghash" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" -dependencies = [ - "opaque-debug 0.3.0", - "polyval 0.5.3", -] - -[[package]] -name = "ghash" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ - "opaque-debug 0.3.0", - "polyval 0.6.1", + "opaque-debug 0.3.1", + "polyval", ] [[package]] name = "gimli" -version = "0.26.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" dependencies = [ "fallible-iterator", "indexmap 1.9.3", @@ -2543,34 +2437,34 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "globset" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" dependencies = [ "aho-corasick", "bstr", "log", - "regex-automata 0.4.3", - "regex-syntax 0.8.2", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] name = "group" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core 0.6.4", @@ -2589,7 +2483,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.1.0", + "indexmap 2.9.0", "slab", "tokio", "tokio-util", @@ -2607,7 +2501,7 @@ dependencies = [ "pest_derive", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2640,14 +2534,19 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.11", + "ahash 0.8.12", ] [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] [[package]] name = "heck" @@ -2655,6 +2554,12 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -2666,9 +2571,15 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.3" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" [[package]] name = "hex" @@ -2703,9 +2614,9 @@ dependencies = [ [[package]] name = "hkdf" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ "hmac 0.12.1", ] @@ -2752,29 +2663,18 @@ dependencies = [ [[package]] name = "home" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" -dependencies = [ - "windows-sys 0.48.0", -] - -[[package]] -name = "hostname" -version = "0.3.1" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "libc", - "match_cfg", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "http" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", @@ -2789,7 +2689,7 @@ checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", - "pin-project-lite 0.2.13", + "pin-project-lite", ] [[package]] @@ -2800,9 +2700,9 @@ checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] name = "httparse" -version = "1.8.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -2821,15 +2721,15 @@ dependencies = [ [[package]] name = "humantime" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", @@ -2851,14 +2751,15 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.2" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ + "futures-util", "http", "hyper", "log", - "rustls 0.20.9", + "rustls", "rustls-native-certs", "tokio", "tokio-rustls", @@ -2866,16 +2767,17 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.58" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", - "windows-core", + "windows-core 0.61.2", ] [[package]] @@ -2888,11 +2790,97 @@ dependencies = [ ] [[package]] -name = "ident_case" -version = "1.0.1" +name = "icu_collections" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.2.3" @@ -2906,14 +2894,35 @@ dependencies = [ [[package]] name = "idna" -version = "0.5.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", ] +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "if-addrs" version = "0.10.2" @@ -2926,9 +2935,9 @@ dependencies = [ [[package]] name = "if-watch" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e" +checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" dependencies = [ "async-io", "core-foundation", @@ -2937,6 +2946,10 @@ dependencies = [ "if-addrs", "ipnet", "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-proto", + "netlink-sys", "rtnetlink", "system-configuration", "tokio", @@ -2949,7 +2962,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", ] [[package]] @@ -2963,13 +2976,32 @@ dependencies = [ [[package]] name = "impl-trait-for-tuples" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "include_dir" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", ] [[package]] @@ -2985,12 +3017,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.1.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.15.3", ] [[package]] @@ -3001,39 +3033,44 @@ checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" [[package]] name = "ink_prelude" -version = "2.1.0" -source = "git+https://github.com/paritytech/ink?tag=v2.1.0#cca31543d338dcd69c7ac922988b91ebf170edb2" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8cfdf91d2b442f08efb34dd3780fd6fbd3d033f63b42f62684fe47534948ef6" dependencies = [ - "cfg-if 0.1.10", + "cfg-if", ] [[package]] name = "ink_primitives" -version = "2.1.0" -source = "git+https://github.com/paritytech/ink?tag=v2.1.0#cca31543d338dcd69c7ac922988b91ebf170edb2" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6414bcad12ebf0c3abbbb192a09e4d06e22f662cf3e19545204e1b0684be12a1" dependencies = [ + "derive_more 0.99.20", "ink_prelude", - "parity-scale-codec 1.3.7", - "tiny-keccak", - "type-metadata", + "parity-scale-codec", + "scale-decode", + "scale-encode", + "scale-info", + "xxhash-rust", ] [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "generic-array 0.14.7", ] [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -3046,23 +3083,10 @@ dependencies = [ ] [[package]] -name = "interceptor" -version = "0.8.2" +name = "intx" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b" -dependencies = [ - "async-trait", - "bytes", - "log", - "rand 0.8.5", - "rtcp", - "rtp", - "thiserror", - "tokio", - "waitgroup", - "webrtc-srtp", - "webrtc-util", -] +checksum = "f6f38a50a899dc47a6d0ed5508e7f601a2e34c3a85303514b5d137f3c10a0c75" [[package]] name = "io-lifetimes" @@ -3070,7 +3094,7 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.3", + "hermit-abi 0.3.9", "libc", "windows-sys 0.48.0", ] @@ -3087,7 +3111,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2 0.5.5", + "socket2 0.5.10", "widestring", "windows-sys 0.48.0", "winreg", @@ -3095,19 +3119,19 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is-terminal" -version = "0.4.9" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ - "hermit-abi 0.3.3", - "rustix 0.38.28", - "windows-sys 0.48.0", + "hermit-abi 0.5.1", + "libc", + "windows-sys 0.59.0", ] [[package]] @@ -3129,7 +3153,7 @@ dependencies = [ name = "itoa" version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" @@ -3137,16 +3161,17 @@ version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.66" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -3170,7 +3195,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b5dde66c53d6dcdc8caea1874a45632ec0fcf5b437789f1e45766a1512ce803" dependencies = [ "anyhow", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "async-trait", "beef", "futures-channel", @@ -3178,13 +3203,13 @@ dependencies = [ "globset", "hyper", "jsonrpsee-types", - "parking_lot 0.12.1", + "parking_lot 0.12.4", "rand 0.8.5", "rustc-hash", "serde", "serde_json", - "soketto", - "thiserror", + "soketto 0.7.1", + "thiserror 1.0.69", "tokio", "tracing", ] @@ -3195,7 +3220,7 @@ version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44e8ab85614a08792b9bff6c8feee23be78c98d0182d4c622c05256ab553892a" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro-crate 1.1.3", "proc-macro2", "quote", @@ -3216,7 +3241,7 @@ dependencies = [ "jsonrpsee-types", "serde", "serde_json", - "soketto", + "soketto 0.7.1", "tokio", "tokio-stream", "tokio-util", @@ -3234,27 +3259,28 @@ dependencies = [ "beef", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tracing", ] [[package]] name = "k256" -version = "0.11.6" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "ecdsa", "elliptic-curve", - "sha2 0.10.8", + "once_cell", + "sha2 0.10.9", ] [[package]] name = "keccak" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ "cpufeatures", ] @@ -3275,18 +3301,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" dependencies = [ "kvdb", - "parking_lot 0.12.1", + "parking_lot 0.12.4", ] [[package]] name = "kvdb-rocksdb" -version = "0.17.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2182b8219fee6bd83aacaab7344e840179ae079d5216aa4e249b4d704646a844" +checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" dependencies = [ "kvdb", "num_cpus", - "parking_lot 0.12.1", + "parking_lot 0.12.4", "regex", "rocksdb", "smallvec", @@ -3294,9 +3320,9 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lazycell" @@ -3305,51 +3331,53 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] -name = "leb128" -version = "0.2.5" +name = "leb128fmt" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.171" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libloading" -version = "0.7.4" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ - "cfg-if 1.0.0", - "winapi", + "cfg-if", + "windows-targets 0.53.0", ] [[package]] name = "libm" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libp2p" -version = "0.50.1" +version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7b0104790be871edcf97db9bd2356604984e623a08d825c3f27852290266b8" +checksum = "32d07d1502a027366d55afe187621c2d7895dc111a3df13b35fed698049681d7" dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.11", + "getrandom 0.2.16", "instant", - "libp2p-core 0.38.0", + "libp2p-allow-block-list", + "libp2p-connection-limits", + "libp2p-core", "libp2p-dns", "libp2p-identify", + "libp2p-identity", "libp2p-kad", "libp2p-mdns", "libp2p-metrics", - "libp2p-mplex", "libp2p-noise", "libp2p-ping", "libp2p-quic", @@ -3357,54 +3385,41 @@ dependencies = [ "libp2p-swarm", "libp2p-tcp", "libp2p-wasm-ext", - "libp2p-webrtc", "libp2p-websocket", "libp2p-yamux", - "multiaddr 0.16.0", - "parking_lot 0.12.1", + "multiaddr", "pin-project", - "smallvec", ] [[package]] -name = "libp2p-core" -version = "0.38.0" +name = "libp2p-allow-block-list" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f" +checksum = "55b46558c5c0bf99d3e2a1a38fd54ff5476ca66dd1737b12466a1824dd219311" dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek 1.0.1", - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "log", - "multiaddr 0.16.0", - "multihash 0.16.3", - "multistream-select", - "once_cell", - "parking_lot 0.12.1", - "pin-project", - "prost", - "prost-build", - "rand 0.8.5", - "rw-stream-sink", - "sec1", - "sha2 0.10.8", - "smallvec", - "thiserror", - "unsigned-varint", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-connection-limits" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f5107ad45cb20b2f6c3628c7b6014b996fcb13a88053f4569c872c6e30abf58" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", "void", - "zeroize", ] [[package]] name = "libp2p-core" -version = "0.39.2" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2" +checksum = "dd44289ab25e4c9230d9246c475a22241e301b23e8f4061d3bdef304a1a99713" dependencies = [ "either", "fnv", @@ -3413,81 +3428,85 @@ dependencies = [ "instant", "libp2p-identity", "log", - "multiaddr 0.17.1", - "multihash 0.17.0", + "multiaddr", + "multihash 0.19.3", "multistream-select", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.4", "pin-project", "quick-protobuf", "rand 0.8.5", "rw-stream-sink", "smallvec", - "thiserror", - "unsigned-varint", + "thiserror 1.0.69", + "unsigned-varint 0.7.2", "void", ] [[package]] name = "libp2p-dns" -version = "0.38.0" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" +checksum = "e6a18db73084b4da2871438f6239fef35190b05023de7656e877c18a00541a3b" dependencies = [ + "async-trait", "futures", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "log", - "parking_lot 0.12.1", + "parking_lot 0.12.4", "smallvec", "trust-dns-resolver", ] [[package]] name = "libp2p-identify" -version = "0.41.1" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf" +checksum = "45a96638a0a176bec0a4bcaebc1afa8cf909b114477209d7456ade52c61cd9cd" dependencies = [ "asynchronous-codec", + "either", "futures", + "futures-bounded", "futures-timer", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", "lru", - "prost", - "prost-build", - "prost-codec", + "quick-protobuf", + "quick-protobuf-codec", "smallvec", - "thiserror", + "thiserror 1.0.69", "void", ] [[package]] name = "libp2p-identity" -version = "0.1.3" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276bb57e7af15d8f100d3c11cbdd32c6752b7eef4ba7a18ecf464972c07abcce" +checksum = "fbb68ea10844211a59ce46230909fd0ea040e8a192454d4cc2ee0d53e12280eb" dependencies = [ - "bs58", - "ed25519-dalek 2.1.0", - "log", - "multiaddr 0.17.1", - "multihash 0.17.0", + "bs58 0.5.1", + "ed25519-dalek 2.1.1", + "hkdf", + "multihash 0.19.3", "quick-protobuf", "rand 0.8.5", - "sha2 0.10.8", - "thiserror", + "sha2 0.10.9", + "thiserror 2.0.12", + "tracing", "zeroize", ] [[package]] name = "libp2p-kad" -version = "0.42.1" +version = "0.44.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2" +checksum = "16ea178dabba6dde6ffc260a8e0452ccdc8f79becf544946692fff9d412fc29d" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "asynchronous-codec", "bytes", "either", @@ -3495,105 +3514,96 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", - "prost", - "prost-build", + "quick-protobuf", + "quick-protobuf-codec", "rand 0.8.5", - "sha2 0.10.8", + "sha2 0.10.9", "smallvec", - "thiserror", + "thiserror 1.0.69", "uint", - "unsigned-varint", + "unsigned-varint 0.7.2", "void", ] [[package]] name = "libp2p-mdns" -version = "0.42.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b" +checksum = "42a2567c305232f5ef54185e9604579a894fd0674819402bb0ac0246da82f52a" dependencies = [ "data-encoding", "futures", "if-watch", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", "rand 0.8.5", "smallvec", - "socket2 0.4.10", + "socket2 0.5.10", "tokio", - "trust-dns-proto", + "trust-dns-proto 0.22.0", "void", ] [[package]] name = "libp2p-metrics" -version = "0.11.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" +checksum = "239ba7d28f8d0b5d77760dc6619c05c7e88e74ec8fbbe97f856f20a56745e620" dependencies = [ - "libp2p-core 0.38.0", + "instant", + "libp2p-core", "libp2p-identify", + "libp2p-identity", "libp2p-kad", "libp2p-ping", "libp2p-swarm", + "once_cell", "prometheus-client", ] -[[package]] -name = "libp2p-mplex" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core 0.38.0", - "log", - "nohash-hasher", - "parking_lot 0.12.1", - "rand 0.8.5", - "smallvec", - "unsigned-varint", -] - [[package]] name = "libp2p-noise" -version = "0.41.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e" +checksum = "71ce70757f2c0d82e9a3ef738fb10ea0723d16cec37f078f719e2c247704c1bb" dependencies = [ "bytes", - "curve25519-dalek 3.2.0", + "curve25519-dalek 4.1.3", "futures", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "log", + "multiaddr", + "multihash 0.19.3", "once_cell", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", - "sha2 0.10.8", + "sha2 0.10.9", "snow", "static_assertions", - "thiserror", + "thiserror 1.0.69", "x25519-dalek 1.1.1", "zeroize", ] [[package]] name = "libp2p-ping" -version = "0.41.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f" +checksum = "e702d75cd0827dfa15f8fd92d15b9932abe38d10d21f47c50438c71dd1b5dae3" dependencies = [ + "either", "futures", "futures-timer", "instant", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", "rand 0.8.5", @@ -3602,205 +3612,182 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.7.0-alpha" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" +checksum = "130d451d83f21b81eb7b35b360bc7972aeafb15177784adc56528db082e6b927" dependencies = [ "bytes", "futures", "futures-timer", "if-watch", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-tls", "log", - "parking_lot 0.12.1", - "quinn-proto", + "parking_lot 0.12.4", + "quinn", "rand 0.8.5", - "rustls 0.20.9", - "thiserror", + "ring 0.16.20", + "rustls", + "socket2 0.5.10", + "thiserror 1.0.69", "tokio", ] [[package]] name = "libp2p-request-response" -version = "0.23.0" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884" +checksum = "d8e3b4d67870478db72bac87bfc260ee6641d0734e0e3e275798f089c3fecfd4" dependencies = [ "async-trait", - "bytes", "futures", "instant", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", "rand 0.8.5", "smallvec", - "unsigned-varint", + "void", ] [[package]] name = "libp2p-swarm" -version = "0.41.1" +version = "0.43.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0" +checksum = "580189e0074af847df90e75ef54f3f30059aedda37ea5a1659e8b9fca05c0141" dependencies = [ "either", "fnv", "futures", "futures-timer", "instant", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm-derive", "log", - "pin-project", + "multistream-select", + "once_cell", "rand 0.8.5", "smallvec", - "thiserror", "tokio", "void", ] [[package]] name = "libp2p-swarm-derive" -version = "0.31.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" +checksum = "c4d5ec2a3df00c7836d7696c136274c9c59705bac69133253696a6c932cd1d74" dependencies = [ - "heck", + "heck 0.4.1", + "proc-macro-warning", + "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "libp2p-tcp" -version = "0.38.0" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d" +checksum = "b558dd40d1bcd1aaaed9de898e9ec6a436019ecc2420dd0016e712fbb61c5508" dependencies = [ "futures", "futures-timer", "if-watch", "libc", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "log", - "socket2 0.4.10", + "socket2 0.5.10", "tokio", ] [[package]] name = "libp2p-tls" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" +checksum = "8218d1d5482b122ccae396bbf38abdcb283ecc96fa54760e1dfd251f0546ac61" dependencies = [ "futures", "futures-rustls", - "libp2p-core 0.39.2", + "libp2p-core", "libp2p-identity", - "rcgen 0.10.0", + "rcgen", "ring 0.16.20", - "rustls 0.20.9", - "thiserror", - "webpki 0.22.4", - "x509-parser 0.14.0", + "rustls", + "rustls-webpki", + "thiserror 1.0.69", + "x509-parser", "yasna", ] [[package]] name = "libp2p-wasm-ext" -version = "0.38.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" +checksum = "1e5d8e3a9e07da0ef5b55a9f26c009c8fb3c725d492d8bb4b431715786eea79c" dependencies = [ "futures", "js-sys", - "libp2p-core 0.38.0", - "parity-send-wrapper", + "libp2p-core", + "send_wrapper", "wasm-bindgen", "wasm-bindgen-futures", ] -[[package]] -name = "libp2p-webrtc" -version = "0.4.0-alpha" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" -dependencies = [ - "async-trait", - "asynchronous-codec", - "bytes", - "futures", - "futures-timer", - "hex", - "if-watch", - "libp2p-core 0.38.0", - "libp2p-noise", - "log", - "multihash 0.16.3", - "prost", - "prost-build", - "prost-codec", - "rand 0.8.5", - "rcgen 0.9.3", - "serde", - "stun", - "thiserror", - "tinytemplate", - "tokio", - "tokio-util", - "webrtc", -] - [[package]] name = "libp2p-websocket" -version = "0.40.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54" +checksum = "004ee9c4a4631435169aee6aad2f62e3984dc031c43b6d29731e8e82a016c538" dependencies = [ "either", "futures", "futures-rustls", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "log", - "parking_lot 0.12.1", - "quicksink", + "parking_lot 0.12.4", + "pin-project-lite", "rw-stream-sink", - "soketto", + "soketto 0.8.1", + "thiserror 1.0.69", "url", "webpki-roots", ] [[package]] name = "libp2p-yamux" -version = "0.42.0" +version = "0.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" +checksum = "8eedcb62824c4300efb9cfd4e2a6edaf3ca097b9e68b36dabe45a44469fd6a85" dependencies = [ "futures", - "libp2p-core 0.38.0", + "libp2p-core", "log", - "parking_lot 0.12.1", - "thiserror", + "thiserror 1.0.69", "yamux", ] [[package]] name = "libredox" -version = "0.0.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.9.1", "libc", - "redox_syscall 0.4.1", + "redox_syscall 0.5.12", ] [[package]] name = "librocksdb-sys" -version = "0.8.3+7.4.4" +version = "0.11.0+8.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557b255ff04123fcc176162f56ed0c9cd42d8f357cf55b3fabeb60f7413741b3" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" dependencies = [ "bindgen", "bzip2-sys", @@ -3813,12 +3800,12 @@ dependencies = [ [[package]] name = "libsecp256k1" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +checksum = "e79019718125edc905a079a70cfa5f3820bc76139fc91d6f9abc27ea2a887139" dependencies = [ "arrayref", - "base64 0.13.1", + "base64 0.22.1", "digest 0.9.0", "hmac-drbg", "libsecp256k1-core", @@ -3861,9 +3848,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.12" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" dependencies = [ "cc", "pkg-config", @@ -3872,9 +3859,9 @@ dependencies = [ [[package]] name = "link-cplusplus" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" +checksum = "4a6f6da007f968f9def0d65a05b187e2960183de70c160204ecfccf0ee330212" dependencies = [ "cc", ] @@ -3887,18 +3874,18 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linked_hash_set" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" +checksum = "bae85b5be22d9843c80e5fc80e9b64c8a3b1f98f867c709956eca3efff4e92e2" dependencies = [ "linked-hash-map", ] [[package]] name = "linregress" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4de04dcecc58d366391f9920245b85ffa684558a5ef6e7736e754347c3aea9c2" +checksum = "a9eda9dcf4f2a99787827661f312ac3219292549c2ee992bf9a6248ffb066bf7" dependencies = [ "nalgebra", ] @@ -3911,15 +3898,27 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.4.12" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "litemap" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -3927,17 +3926,17 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "lru" -version = "0.8.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.12.3", + "hashbrown 0.15.3", ] [[package]] @@ -3951,19 +3950,18 @@ dependencies = [ [[package]] name = "lz4" -version = "1.24.0" +version = "1.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" +checksum = "a20b523e860d03443e98350ceaac5e71c6ba89aea7d960769ec3ce37f4de5af4" dependencies = [ - "libc", "lz4-sys", ] [[package]] name = "lz4-sys" -version = "1.9.4" +version = "1.11.1+lz4-1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" dependencies = [ "cc", "libc", @@ -4001,29 +3999,19 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matrixmultiply" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", "rawpointer", ] -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if 1.0.0", - "digest 0.10.7", -] - [[package]] name = "memchr" -version = "2.6.4" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memfd" @@ -4031,7 +4019,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" dependencies = [ - "rustix 0.38.28", + "rustix 0.38.44", ] [[package]] @@ -4045,18 +4033,9 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.9.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" dependencies = [ "autocfg", ] @@ -4070,12 +4049,6 @@ dependencies = [ "hash-db", ] -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - [[package]] name = "merlin" version = "2.0.1" @@ -4108,22 +4081,22 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4132,7 +4105,7 @@ version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "downcast", "fragile", "lazy_static", @@ -4147,7 +4120,7 @@ version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "proc-macro2", "quote", "syn 1.0.109", @@ -4155,38 +4128,20 @@ dependencies = [ [[package]] name = "multiaddr" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e" -dependencies = [ - "arrayref", - "byteorder", - "data-encoding", - "multibase", - "multihash 0.16.3", - "percent-encoding", - "serde", - "static_assertions", - "unsigned-varint", - "url", -] - -[[package]] -name = "multiaddr" -version = "0.17.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" +checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" dependencies = [ "arrayref", "byteorder", "data-encoding", - "log", + "libp2p-identity", "multibase", - "multihash 0.17.0", + "multihash 0.19.3", "percent-encoding", "serde", "static_assertions", - "unsigned-varint", + "unsigned-varint 0.8.0", "url", ] @@ -4203,30 +4158,48 @@ dependencies = [ [[package]] name = "multihash" -version = "0.16.3" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" dependencies = [ "blake2b_simd", "blake2s_simd", "blake3", "core2", "digest 0.10.7", - "multihash-derive", - "sha2 0.10.8", + "multihash-derive 0.8.1", + "sha2 0.10.9", "sha3", - "unsigned-varint", + "unsigned-varint 0.7.2", ] [[package]] name = "multihash" -version = "0.17.0" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" +checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" +dependencies = [ + "core2", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "multihash-codetable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6d815ecb3c8238d00647f8630ede7060a642c9f704761cd6082cb4028af6935" dependencies = [ + "blake2b_simd", + "blake2s_simd", + "blake3", "core2", - "multihash-derive", - "unsigned-varint", + "digest 0.10.7", + "multihash-derive 0.9.1", + "ripemd", + "sha1", + "sha2 0.10.9", + "sha3", + "strobe-rs", ] [[package]] @@ -4240,7 +4213,31 @@ dependencies = [ "proc-macro2", "quote", "syn 1.0.109", - "synstructure", + "synstructure 0.12.6", +] + +[[package]] +name = "multihash-derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f1b7edab35d920890b88643a765fc9bd295cf0201f4154dda231bef9b8404eb" +dependencies = [ + "core2", + "multihash 0.19.3", + "multihash-derive-impl", +] + +[[package]] +name = "multihash-derive-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3dc7141bd06405929948754f0628d247f5ca1865be745099205e5086da957cb" +dependencies = [ + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure 0.13.2", ] [[package]] @@ -4251,27 +4248,26 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "multistream-select" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" +checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" dependencies = [ "bytes", "futures", "log", "pin-project", "smallvec", - "unsigned-varint", + "unsigned-varint 0.7.2", ] [[package]] name = "nalgebra" -version = "0.32.3" +version = "0.33.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa" +checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" dependencies = [ "approx", "matrixmultiply", - "nalgebra-macros", "num-complex", "num-rational", "num-traits", @@ -4279,17 +4275,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "nalgebra-macros" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "names" version = "0.13.0" @@ -4301,21 +4286,20 @@ dependencies = [ [[package]] name = "netlink-packet-core" -version = "0.4.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" dependencies = [ "anyhow", "byteorder", - "libc", "netlink-packet-utils", ] [[package]] name = "netlink-packet-route" -version = "0.12.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" +checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" dependencies = [ "anyhow", "bitflags 1.3.2", @@ -4334,29 +4318,28 @@ dependencies = [ "anyhow", "byteorder", "paste", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "netlink-proto" -version = "0.10.0" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" +checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" dependencies = [ "bytes", "futures", "log", "netlink-packet-core", "netlink-sys", - "thiserror", - "tokio", + "thiserror 2.0.12", ] [[package]] name = "netlink-sys" -version = "0.8.5" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" dependencies = [ "bytes", "futures", @@ -4367,14 +4350,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.24.3" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ "bitflags 1.3.2", - "cfg-if 1.0.0", + "cfg-if", "libc", - "memoffset 0.6.5", ] [[package]] @@ -4390,7 +4372,7 @@ dependencies = [ "pallet-pips", "pallet-portfolio", "pallet-transaction-payment", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "serde", "sp-api", @@ -4413,7 +4395,7 @@ dependencies = [ "pallet-pips", "pallet-portfolio", "pallet-transaction-payment", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "serde", "serde_json", @@ -4447,24 +4429,29 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-complex" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-format" version = "0.4.4" @@ -4477,21 +4464,19 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-rational" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "autocfg", "num-bigint", "num-integer", "num-traits", @@ -4499,67 +4484,64 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "hermit-abi 0.3.3", + "hermit-abi 0.5.1", "libc", ] [[package]] name = "object" -version = "0.29.0" +version = "0.30.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" dependencies = [ "crc32fast", - "hashbrown 0.12.3", + "hashbrown 0.13.2", "indexmap 1.9.3", "memchr", ] [[package]] name = "object" -version = "0.32.1" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] -[[package]] -name = "oid-registry" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" -dependencies = [ - "asn1-rs 0.3.1", -] - [[package]] name = "oid-registry" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "opaque-debug" @@ -4569,43 +4551,21 @@ checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "p256" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" -dependencies = [ - "ecdsa", - "elliptic-curve", - "sha2 0.10.8", -] - -[[package]] -name = "p384" -version = "0.11.2" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" -dependencies = [ - "ecdsa", - "elliptic-curve", - "sha2 0.10.8", -] +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "pallet-asset" version = "0.1.0" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "frame-benchmarking", "frame-support", "frame-system", @@ -4618,7 +4578,7 @@ dependencies = [ "pallet-portfolio", "pallet-statistics", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", "polymesh-primitives-derive", @@ -4640,12 +4600,12 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-support", "frame-system", "pallet-session", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-application-crypto", "sp-authority-discovery", @@ -4656,12 +4616,12 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-support", "frame-system", "impl-trait-for-tuples", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-runtime", "sp-std", @@ -4670,7 +4630,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-benchmarking", "frame-support", @@ -4679,11 +4639,11 @@ dependencies = [ "pallet-authorship", "pallet-session", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-application-crypto", "sp-consensus-babe", - "sp-consensus-vrf", + "sp-core", "sp-io", "sp-runtime", "sp-session", @@ -4694,13 +4654,13 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-runtime", "sp-std", @@ -4712,7 +4672,7 @@ version = "0.1.0" dependencies = [ "frame-support", "frame-system", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "serde", @@ -4735,7 +4695,7 @@ dependencies = [ "pallet-identity", "pallet-permissions", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "serde", @@ -4762,7 +4722,7 @@ dependencies = [ "pallet-identity", "pallet-permissions", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", "scale-info", @@ -4779,9 +4739,10 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "bitflags 1.3.2", + "environmental", "frame-benchmarking", "frame-support", "frame-system", @@ -4789,7 +4750,7 @@ dependencies = [ "log", "pallet-contracts-primitives", "pallet-contracts-proc-macro", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "rand 0.8.5", "rand_pcg", "scale-info", @@ -4801,17 +4762,16 @@ dependencies = [ "sp-runtime", "sp-std", "wasm-instrument 0.4.0", - "wasmi 0.20.0", - "wasmparser-nostd", + "wasmi", ] [[package]] name = "pallet-contracts-primitives" -version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "24.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "bitflags 1.3.2", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-runtime", "sp-std", @@ -4821,11 +4781,11 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] @@ -4843,7 +4803,7 @@ dependencies = [ "pallet-identity", "pallet-portfolio", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", "polymesh-primitives-derive", @@ -4862,7 +4822,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4870,7 +4830,7 @@ dependencies = [ "frame-system", "log", "pallet-election-provider-support-benchmarking", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "rand 0.8.5", "scale-info", "sp-arithmetic", @@ -4885,12 +4845,12 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", "frame-system", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sp-npos-elections", "sp-runtime", ] @@ -4906,7 +4866,7 @@ dependencies = [ "pallet-base", "pallet-identity", "pallet-permissions", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "polymesh-primitives-derive", "scale-info", @@ -4919,7 +4879,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-benchmarking", "frame-support", @@ -4927,7 +4887,7 @@ dependencies = [ "log", "pallet-authorship", "pallet-session", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-application-crypto", "sp-consensus-grandpa", @@ -4949,7 +4909,7 @@ dependencies = [ "pallet-identity", "pallet-permissions", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "serde", @@ -4971,7 +4931,7 @@ dependencies = [ "jsonrpsee", "node-rpc", "pallet-group-rpc-runtime-api", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "serde", "sp-api", @@ -4986,7 +4946,7 @@ dependencies = [ name = "pallet-group-rpc-runtime-api" version = "2.0.0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "serde", "sp-api", @@ -5007,7 +4967,7 @@ dependencies = [ "pallet-base", "pallet-permissions", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", "scale-info", @@ -5025,14 +4985,14 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "log", "pallet-authorship", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-application-crypto", "sp-core", @@ -5045,12 +5005,12 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-core", "sp-io", @@ -5062,11 +5022,11 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-support", "frame-system", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "safe-mix", "scale-info", "sp-runtime", @@ -5084,7 +5044,7 @@ dependencies = [ "pallet-identity", "pallet-permissions", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "serde", @@ -5107,7 +5067,7 @@ dependencies = [ "pallet-external-agents", "pallet-identity", "pallet-portfolio", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "sp-runtime", @@ -5117,13 +5077,13 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-support", "frame-system", "log", "pallet-balances", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "serde", "sp-runtime", @@ -5138,7 +5098,7 @@ dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "serde", @@ -5162,7 +5122,7 @@ dependencies = [ "pallet-permissions", "pallet-timestamp", "pallet-treasury", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", "polymesh-primitives-derive", @@ -5191,7 +5151,7 @@ dependencies = [ "pallet-base", "pallet-identity", "pallet-permissions", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "serde", @@ -5203,13 +5163,13 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-core", "sp-io", @@ -5225,7 +5185,7 @@ dependencies = [ "frame-support", "frame-system", "pallet-identity", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", "scale-info", @@ -5245,7 +5205,7 @@ dependencies = [ "jsonrpsee", "node-rpc", "pallet-protocol-fee-rpc-runtime-api", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", "serde", @@ -5261,7 +5221,7 @@ dependencies = [ name = "pallet-protocol-fee-rpc-runtime-api" version = "0.1.0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", "serde", @@ -5277,7 +5237,7 @@ dependencies = [ "frame-support", "frame-system", "pallet-identity", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "sp-runtime", @@ -5287,13 +5247,13 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-io", "sp-runtime", @@ -5304,14 +5264,14 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-support", "frame-system", "impl-trait-for-tuples", "log", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-core", "sp-io", @@ -5341,7 +5301,7 @@ dependencies = [ "pallet-permissions", "pallet-scheduler", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "polymesh-primitives-derive", "scale-info", @@ -5358,7 +5318,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5367,7 +5327,7 @@ dependencies = [ "log", "pallet-authorship", "pallet-session", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "rand_chacha 0.2.2", "scale-info", "serde", @@ -5381,20 +5341,20 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "pallet-staking-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sp-api", ] @@ -5410,7 +5370,7 @@ dependencies = [ "pallet-external-agents", "pallet-identity", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "serde", @@ -5441,7 +5401,7 @@ dependencies = [ "pallet-portfolio", "pallet-settlement", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "polymesh-primitives-derive", "scale-info", @@ -5461,7 +5421,7 @@ version = "2.0.0" dependencies = [ "frame-support", "frame-system", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-core", "sp-io", @@ -5472,13 +5432,13 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-inherents", "sp-io", @@ -5494,7 +5454,7 @@ dependencies = [ "frame-support", "frame-system", "pallet-timestamp", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "serde", @@ -5515,7 +5475,7 @@ dependencies = [ "pallet-balances", "pallet-identity", "pallet-permissions", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "serde", @@ -5538,7 +5498,7 @@ dependencies = [ "pallet-balances", "pallet-identity", "pallet-permissions", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", "scale-info", @@ -5563,7 +5523,7 @@ dependencies = [ "pallet-session", "pallet-staking", "pallet-staking-reward-curve", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "rand_chacha 0.2.2", "scale-info", @@ -5581,9 +5541,9 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e9ab494af9e6e813c72170f0d3c1de1500990d62c97cc05cc7576f91aa402f" +checksum = "592a28a24b09c9dc20ac8afaa6839abc417c720afe42c12e1e4a9d6aa2508d2e" dependencies = [ "blake2", "crc32fast", @@ -5593,70 +5553,40 @@ dependencies = [ "log", "lz4", "memmap2", - "parking_lot 0.12.1", + "parking_lot 0.12.4", "rand 0.8.5", - "siphasher", + "siphasher 0.3.11", "snap", + "winapi", ] [[package]] name = "parity-scale-codec" -version = "1.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b26b16c7687c3075982af47719e481815df30bc544f7a6690763a25ca16e9d" -dependencies = [ - "arrayvec 0.5.2", - "bitvec 0.17.4", - "byte-slice-cast 0.3.5", - "parity-scale-codec-derive 1.2.3", - "serde", -] - -[[package]] -name = "parity-scale-codec" -version = "3.6.9" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ - "arrayvec 0.7.4", - "bitvec 1.0.1", - "byte-slice-cast 1.2.2", + "arrayvec 0.7.6", + "bitvec", + "byte-slice-cast", "bytes", "impl-trait-for-tuples", - "parity-scale-codec-derive 3.6.9", + "parity-scale-codec-derive", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41512944b1faff334a5f1b9447611bf4ef40638ccb6328173dacefb338e878c" -dependencies = [ - "proc-macro-crate 0.1.5", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "parity-scale-codec-derive" -version = "3.6.9" +version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate 2.0.1", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", "syn 1.0.109", ] -[[package]] -name = "parity-send-wrapper" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" - [[package]] name = "parity-wasm" version = "0.45.0" @@ -5665,9 +5595,9 @@ checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -5682,12 +5612,12 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", - "parking_lot_core 0.9.9", + "parking_lot_core 0.9.11", ] [[package]] @@ -5696,7 +5626,7 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "instant", "libc", "redox_syscall 0.2.16", @@ -5706,22 +5636,28 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", - "redox_syscall 0.4.1", + "redox_syscall 0.5.12", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] +[[package]] +name = "partial_sort" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" + [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pbkdf2" @@ -5756,15 +5692,6 @@ dependencies = [ "base64 0.13.1", ] -[[package]] -name = "pem-rfc7468" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" version = "2.3.1" @@ -5773,20 +5700,20 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.5" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5" +checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" dependencies = [ "memchr", - "thiserror", + "thiserror 2.0.12", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.5" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2" +checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5" dependencies = [ "pest", "pest_generator", @@ -5794,69 +5721,63 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.5" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227" +checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", ] [[package]] name = "pest_meta" -version = "2.7.5" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6" +checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0" dependencies = [ "once_cell", "pest", - "sha2 0.10.8", + "sha2 0.10.9", ] [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.1.0", + "indexmap 2.9.0", ] [[package]] name = "pin-project" -version = "1.1.3" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.3" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", ] [[package]] name = "pin-project-lite" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" - -[[package]] -name = "pin-project-lite" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -5864,50 +5785,35 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkcs8" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" -dependencies = [ - "der 0.6.1", - "spki 0.6.0", -] - [[package]] name = "pkcs8" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.8", - "spki 0.7.3", + "der", + "spki", ] [[package]] name = "pkg-config" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" - -[[package]] -name = "platforms" -version = "2.0.0" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "polling" -version = "3.3.1" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf63fa624ab313c11656b4cda960bfc46c410187ad493c41f6ba2d8c1e991c9e" +checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "concurrent-queue", - "pin-project-lite 0.2.13", - "rustix 0.38.28", + "hermit-abi 0.5.1", + "pin-project-lite", + "rustix 1.0.7", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5917,8 +5823,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash 0.5.1", + "opaque-debug 0.3.1", + "universal-hash", ] [[package]] @@ -5960,7 +5866,7 @@ dependencies = [ "pallet-sudo", "pallet-transaction-payment", "pallet-validators", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-common-utilities", "polymesh-contracts", "polymesh-node-rpc", @@ -5983,11 +5889,14 @@ dependencies = [ "sc-executor", "sc-network", "sc-network-common", + "sc-network-sync", + "sc-offchain", "sc-rpc", "sc-service", "sc-sync-state-rpc", "sc-telemetry", "sc-transaction-pool", + "sc-transaction-pool-api", "serde", "serde_json", "sp-api", @@ -6022,7 +5931,7 @@ name = "polymesh-common-utilities" version = "0.1.0" dependencies = [ "frame-support", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "serde", @@ -6043,7 +5952,7 @@ dependencies = [ "pallet-contracts-primitives", "pallet-identity", "pallet-permissions", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives", "scale-info", "serde", @@ -6105,7 +6014,7 @@ dependencies = [ "hex", "libsecp256k1", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-primitives-derive", "rand 0.8.5", "rand_core 0.6.4", @@ -6150,7 +6059,7 @@ dependencies = [ "pallet-identity", "pallet-multisig", "pallet-relayer", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-common-utilities", "polymesh-primitives", "smallvec", @@ -6170,7 +6079,7 @@ dependencies = [ "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", - "getrandom 0.2.11", + "getrandom 0.2.16", "hex-literal 0.3.4", "log", "node-rpc-runtime-api", @@ -6218,7 +6127,7 @@ dependencies = [ "pallet-treasury", "pallet-utility", "pallet-validators", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-build-tool", "polymesh-common-utilities", "polymesh-contracts", @@ -6254,7 +6163,6 @@ dependencies = [ "frame-support", "frame-system", "frame-system-rpc-runtime-api", - "lazy_static", "log", "node-rpc-runtime-api", "pallet-asset", @@ -6301,7 +6209,7 @@ dependencies = [ "pallet-treasury", "pallet-utility", "pallet-validators", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-build-tool", "polymesh-common-utilities", "polymesh-contracts", @@ -6339,7 +6247,6 @@ dependencies = [ "frame-support", "frame-system", "frame-system-rpc-runtime-api", - "lazy_static", "log", "node-rpc-runtime-api", "pallet-asset", @@ -6386,7 +6293,7 @@ dependencies = [ "pallet-treasury", "pallet-utility", "pallet-validators", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "polymesh-build-tool", "polymesh-common-utilities", "polymesh-contracts", @@ -6430,7 +6337,6 @@ dependencies = [ "hex-literal 0.3.4", "ink_primitives", "lazy_static", - "libsecp256k1", "log", "node-rpc-runtime-api", "pallet-asset", @@ -6477,8 +6383,8 @@ dependencies = [ "pallet-treasury", "pallet-utility", "pallet-validators", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "polymesh-common-utilities", "polymesh-contracts", "polymesh-exec-macro", @@ -6557,26 +6463,23 @@ dependencies = [ [[package]] name = "polyval" -version = "0.5.3" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash 0.4.1", + "opaque-debug 0.3.1", + "universal-hash", ] [[package]] -name = "polyval" -version = "0.6.1" +name = "potential_utf" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash 0.5.1", + "zerovec", ] [[package]] @@ -6587,9 +6490,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] [[package]] name = "predicates" @@ -6607,15 +6513,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" dependencies = [ "predicates-core", "termtree", @@ -6631,6 +6537,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "prettyplease" +version = "0.2.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dee91521343f4c5c6a63edd65e54f31f5c92fe8978c40a4282f8372194c6a7d" +dependencies = [ + "proc-macro2", + "syn 2.0.101", +] + [[package]] name = "primitive-types" version = "0.12.2" @@ -6644,33 +6560,23 @@ dependencies = [ "uint", ] -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - [[package]] name = "proc-macro-crate" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ - "thiserror", - "toml", + "thiserror 1.0.69", + "toml 0.5.11", ] [[package]] name = "proc-macro-crate" -version = "2.0.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_datetime", - "toml_edit", + "toml_edit 0.22.26", ] [[package]] @@ -6703,34 +6609,45 @@ version = "0.5.20+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" +[[package]] +name = "proc-macro-warning" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "proc-macro2" -version = "1.0.70" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] [[package]] name = "prometheus" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "fnv", "lazy_static", "memchr", - "parking_lot 0.12.1", - "thiserror", + "parking_lot 0.12.4", + "thiserror 1.0.69", ] [[package]] name = "prometheus-client" -version = "0.18.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" +checksum = "3c99afa9a01501019ac3a14d71d9f94050346f55ca471ce90c799a15c58f61e2" dependencies = [ "dtoa", "itoa", @@ -6739,14 +6656,14 @@ dependencies = [ ] [[package]] -name = "prometheus-client-derive-text-encode" -version = "0.3.0" +name = "prometheus-client-derive-encode" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] @@ -6766,13 +6683,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" dependencies = [ "bytes", - "heck", + "heck 0.4.1", "itertools", "lazy_static", "log", "multimap", "petgraph", - "prettyplease", + "prettyplease 0.1.25", "prost", "prost-types", "regex", @@ -6781,19 +6698,6 @@ dependencies = [ "which", ] -[[package]] -name = "prost-codec" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0" -dependencies = [ - "asynchronous-codec", - "bytes", - "prost", - "thiserror", - "unsigned-varint", -] - [[package]] name = "prost-derive" version = "0.11.9" @@ -6818,9 +6722,9 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.21" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "6e944464ec8536cd1beb0bbfd96987eb5e3b72f2ecdafdc5c769a37f1fa2ae1f" dependencies = [ "cc", ] @@ -6841,39 +6745,71 @@ dependencies = [ ] [[package]] -name = "quicksink" -version = "0.1.2" +name = "quick-protobuf-codec" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858" +checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98" dependencies = [ - "futures-core", - "futures-sink", - "pin-project-lite 0.1.12", + "asynchronous-codec", + "bytes", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "quinn" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" +dependencies = [ + "bytes", + "futures-io", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "thiserror 1.0.69", + "tokio", + "tracing", ] [[package]] name = "quinn-proto" -version = "0.9.6" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b0b33c13a79f669c85defaf4c275dc86a0c0372807d0ca3d78e0bb87274863" +checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" dependencies = [ "bytes", "rand 0.8.5", "ring 0.16.20", "rustc-hash", - "rustls 0.20.9", + "rustls", "slab", - "thiserror", + "thiserror 1.0.69", "tinyvec", "tracing", - "webpki 0.22.4", +] + +[[package]] +name = "quinn-udp" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" +dependencies = [ + "bytes", + "libc", + "socket2 0.5.10", + "tracing", + "windows-sys 0.48.0", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] @@ -6884,12 +6820,6 @@ version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" -[[package]] -name = "radium" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" - [[package]] name = "radium" version = "0.7.0" @@ -6955,7 +6885,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.11", + "getrandom 0.2.16", ] [[package]] @@ -6984,9 +6914,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -6994,27 +6924,14 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] -[[package]] -name = "rcgen" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" -dependencies = [ - "pem", - "ring 0.16.20", - "time", - "x509-parser 0.13.2", - "yasna", -] - [[package]] name = "rcgen" version = "0.10.0" @@ -7038,49 +6955,49 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.1", ] [[package]] name = "redox_users" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.11", + "getrandom 0.2.16", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "ref-cast" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acde58d073e9c79da00f2b5b84eed919c8326832648a5b109b3fce1bb1175280" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.20" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", ] [[package]] name = "regalloc2" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" +checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" dependencies = [ "fxhash", "log", @@ -7090,14 +7007,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.2" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.3", - "regex-syntax 0.8.2", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -7111,13 +7028,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.2", + "regex-syntax 0.8.5", ] [[package]] @@ -7128,41 +7045,24 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" - -[[package]] -name = "region" -version = "3.0.0" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" -dependencies = [ - "bitflags 1.3.2", - "libc", - "mach", - "winapi", -] +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "resolv-conf" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" -dependencies = [ - "hostname", - "quick-error", -] +checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" [[package]] name = "rfc6979" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "crypto-bigint", "hmac 0.12.1", - "zeroize", + "subtle", ] [[package]] @@ -7187,89 +7087,76 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", - "cfg-if 1.0.0", - "getrandom 0.2.11", + "cfg-if", + "getrandom 0.2.16", "libc", "untrusted 0.9.0", "windows-sys 0.52.0", ] [[package]] -name = "rocksdb" -version = "0.19.0" +name = "ripemd" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" dependencies = [ - "libc", - "librocksdb-sys", + "digest 0.10.7", ] [[package]] -name = "rpassword" -version = "7.3.1" +name = "rocksdb" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" dependencies = [ "libc", - "rtoolbox", - "windows-sys 0.48.0", + "librocksdb-sys", ] [[package]] -name = "rtcp" -version = "0.7.2" +name = "rpassword" +version = "7.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691" +checksum = "66d4c8b64f049c6721ec8ccec37ddfc3d641c4a7fca57e8f2a89de509c73df39" dependencies = [ - "bytes", - "thiserror", - "webrtc-util", + "libc", + "rtoolbox", + "windows-sys 0.59.0", ] [[package]] name = "rtnetlink" -version = "0.10.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" +checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" dependencies = [ "futures", "log", + "netlink-packet-core", "netlink-packet-route", + "netlink-packet-utils", "netlink-proto", + "netlink-sys", "nix", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] name = "rtoolbox" -version = "0.0.2" +version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +checksum = "a7cc970b249fbe527d6e02e0a227762c9108b2f49d81094fe357ffc6d14d7f6f" dependencies = [ "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "rtp" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80" -dependencies = [ - "async-trait", - "bytes", - "rand 0.8.5", - "serde", - "thiserror", - "webrtc-util", + "windows-sys 0.52.0", ] [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -7294,11 +7181,11 @@ dependencies = [ [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.20", + "semver 1.0.26", ] [[package]] @@ -7326,40 +7213,40 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.28" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.9.1", "errno", "libc", - "linux-raw-sys 0.4.12", - "windows-sys 0.52.0", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] -name = "rustls" -version = "0.19.1" +name = "rustix" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "base64 0.13.1", - "log", - "ring 0.16.20", - "sct 0.6.1", - "webpki 0.21.4", + "bitflags 2.9.1", + "errno", + "libc", + "linux-raw-sys 0.9.4", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.20.9" +version = "0.21.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring 0.16.20", - "sct 0.7.1", - "webpki 0.22.4", + "ring 0.17.14", + "rustls-webpki", + "sct", ] [[package]] @@ -7380,20 +7267,30 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.14", + "untrusted 0.9.0", ] [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "rw-stream-sink" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04" +checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" dependencies = [ "futures", "pin-project", @@ -7402,9 +7299,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.16" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "safe-mix" @@ -7417,9 +7314,9 @@ dependencies = [ [[package]] name = "safe_arch" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" dependencies = [ "bytemuck", ] @@ -7436,18 +7333,18 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "log", "sp-core", "sp-wasm-interface", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", "futures", @@ -7455,12 +7352,13 @@ dependencies = [ "ip_network", "libp2p", "log", - "parity-scale-codec 3.6.9", + "multihash-codetable", + "parity-scale-codec", "prost", "prost-build", "rand 0.8.5", "sc-client-api", - "sc-network-common", + "sc-network", "sp-api", "sp-authority-discovery", "sp-blockchain", @@ -7468,18 +7366,18 @@ dependencies = [ "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "futures", "futures-timer", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sc-block-builder", "sc-client-api", "sc-proposer-metrics", @@ -7497,9 +7395,9 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sc-client-api", "sp-api", "sp-block-builder", @@ -7512,13 +7410,13 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "memmap2", "sc-chain-spec-derive", "sc-client-api", "sc-executor", - "sc-network-common", + "sc-network", "sc-telemetry", "serde", "serde_json", @@ -7531,28 +7429,28 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "array-bytes", "chrono", "clap", "fdlimit", "futures", - "libp2p", + "libp2p-identity", "log", "names", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "rand 0.8.5", "regex", "rpassword", @@ -7560,7 +7458,6 @@ dependencies = [ "sc-client-db", "sc-keystore", "sc-network", - "sc-network-common", "sc-service", "sc-telemetry", "sc-tracing", @@ -7574,7 +7471,7 @@ dependencies = [ "sp-panic-handler", "sp-runtime", "sp-version", - "thiserror", + "thiserror 1.0.69", "tiny-bip39", "tokio", ] @@ -7582,13 +7479,13 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "fnv", "futures", "log", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "sc-executor", "sc-transaction-pool-api", "sc-utils", @@ -7598,9 +7495,9 @@ dependencies = [ "sp-core", "sp-database", "sp-externalities", - "sp-keystore", "sp-runtime", "sp-state-machine", + "sp-statement-store", "sp-storage", "substrate-prometheus-endpoint", ] @@ -7608,7 +7505,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "hash-db", "kvdb", @@ -7617,8 +7514,8 @@ dependencies = [ "linked-hash-map", "log", "parity-db", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "sc-client-api", "sc-state-db", "schnellru", @@ -7634,15 +7531,15 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", "futures", "futures-timer", - "libp2p", + "libp2p-identity", "log", "mockall", - "parking_lot 0.12.1", + "parking_lot 0.12.4", "sc-client-api", "sc-utils", "serde", @@ -7653,32 +7550,30 @@ dependencies = [ "sp-runtime", "sp-state-machine", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", "fork-tree", "futures", "log", - "merlin 2.0.1", "num-bigint", "num-rational", "num-traits", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "sc-client-api", "sc-consensus", "sc-consensus-epochs", "sc-consensus-slots", - "sc-keystore", "sc-telemetry", + "sc-transaction-pool-api", "scale-info", - "schnorrkel 0.9.1", "sp-api", "sp-application-crypto", "sp-block-builder", @@ -7686,19 +7581,18 @@ dependencies = [ "sp-consensus", "sp-consensus-babe", "sp-consensus-slots", - "sp-consensus-vrf", "sp-core", "sp-inherents", "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "futures", "jsonrpsee", @@ -7714,16 +7608,16 @@ dependencies = [ "sp-core", "sp-keystore", "sp-runtime", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "fork-tree", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sc-client-api", "sc-consensus", "sp-blockchain", @@ -7733,9 +7627,9 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "ahash 0.8.11", + "ahash 0.8.12", "array-bytes", "async-trait", "dyn-clone", @@ -7744,8 +7638,8 @@ dependencies = [ "futures", "futures-timer", "log", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "rand 0.8.5", "sc-block-builder", "sc-chain-spec", @@ -7755,6 +7649,7 @@ dependencies = [ "sc-network-common", "sc-network-gossip", "sc-telemetry", + "sc-transaction-pool-api", "sc-utils", "serde_json", "sp-api", @@ -7767,19 +7662,19 @@ dependencies = [ "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-consensus-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "finality-grandpa", "futures", "jsonrpsee", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sc-client-api", "sc-consensus-grandpa", "sc-rpc", @@ -7787,19 +7682,19 @@ dependencies = [ "sp-blockchain", "sp-core", "sp-runtime", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", "futures", "futures-timer", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sc-client-api", "sc-consensus", "sc-telemetry", @@ -7816,14 +7711,13 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "lru", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "sc-executor-common", - "sc-executor-wasmi", "sc-executor-wasmtime", + "schnellru", "sp-api", "sp-core", "sp-externalities", @@ -7834,45 +7728,29 @@ dependencies = [ "sp-version", "sp-wasm-interface", "tracing", - "wasmi 0.13.2", ] [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "sc-allocator", "sp-maybe-compressed-blob", "sp-wasm-interface", - "thiserror", + "thiserror 1.0.69", "wasm-instrument 0.3.0", - "wasmi 0.13.2", -] - -[[package]] -name = "sc-executor-wasmi" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" -dependencies = [ - "log", - "sc-allocator", - "sc-executor-common", - "sp-runtime-interface", - "sp-wasm-interface", - "wasmi 0.13.2", ] [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "anyhow", - "cfg-if 1.0.0", + "cfg-if", "libc", "log", - "once_cell", "rustix 0.36.17", "sc-allocator", "sc-executor-common", @@ -7884,13 +7762,14 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "ansi_term", "futures", "futures-timer", "log", "sc-client-api", + "sc-network", "sc-network-common", "sp-blockchain", "sp-runtime", @@ -7899,27 +7778,26 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "array-bytes", - "async-trait", - "parking_lot 0.12.1", + "parking_lot 0.12.4", "serde_json", "sp-application-crypto", "sp-core", "sp-keystore", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "array-bytes", + "async-channel", "async-trait", "asynchronous-codec", - "backtrace", "bytes", "either", "fnv", @@ -7927,91 +7805,84 @@ dependencies = [ "futures-timer", "ip_network", "libp2p", + "libp2p-kad", + "linked_hash_set", "log", - "lru", "mockall", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", + "partial_sort", "pin-project", "rand 0.8.5", - "sc-block-builder", "sc-client-api", - "sc-consensus", "sc-network-common", - "sc-peerset", "sc-utils", "serde", "serde_json", "smallvec", "sp-arithmetic", "sp-blockchain", - "sp-consensus", "sp-core", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", - "unsigned-varint", + "thiserror 1.0.69", + "unsigned-varint 0.7.2", + "void", + "wasm-timer", "zeroize", ] [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ + "async-channel", "cid", "futures", - "libp2p", + "libp2p-identity", "log", "prost", "prost-build", "sc-client-api", - "sc-network-common", + "sc-network", "sp-blockchain", "sp-runtime", - "thiserror", - "unsigned-varint", + "thiserror 1.0.69", + "unsigned-varint 0.7.2", ] [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", "bitflags 1.3.2", - "bytes", "futures", - "futures-timer", - "libp2p", - "linked_hash_set", - "parity-scale-codec 3.6.9", + "libp2p-identity", + "parity-scale-codec", "prost-build", "sc-consensus", - "sc-peerset", - "serde", - "smallvec", - "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", ] [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "ahash 0.8.11", + "ahash 0.8.12", "futures", "futures-timer", - "libp2p", + "libp2p-identity", "log", - "lru", + "multiaddr", + "sc-network", "sc-network-common", - "sc-peerset", + "schnellru", "sp-runtime", "substrate-prometheus-endpoint", "tracing", @@ -8020,45 +7891,47 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "array-bytes", + "async-channel", "futures", - "libp2p", + "libp2p-identity", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "prost", "prost-build", "sc-client-api", - "sc-network-common", - "sc-peerset", + "sc-network", "sp-blockchain", "sp-core", "sp-runtime", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "array-bytes", + "async-channel", "async-trait", "fork-tree", "futures", + "futures-timer", "libp2p", "log", - "lru", "mockall", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "prost", "prost-build", "sc-client-api", "sc-consensus", + "sc-network", "sc-network-common", - "sc-peerset", "sc-utils", + "schnellru", "smallvec", "sp-arithmetic", "sp-blockchain", @@ -8067,22 +7940,21 @@ dependencies = [ "sp-core", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "array-bytes", "futures", "libp2p", "log", - "parity-scale-codec 3.6.9", - "pin-project", + "parity-scale-codec", + "sc-network", "sc-network-common", - "sc-peerset", "sc-utils", "sp-consensus", "sp-runtime", @@ -8092,7 +7964,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "array-bytes", "bytes", @@ -8102,40 +7974,31 @@ dependencies = [ "hyper", "hyper-rustls", "libp2p", + "log", "num_cpus", "once_cell", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "rand 0.8.5", "sc-client-api", + "sc-network", "sc-network-common", - "sc-peerset", + "sc-transaction-pool-api", "sc-utils", "sp-api", "sp-core", + "sp-externalities", + "sp-keystore", "sp-offchain", "sp-runtime", "threadpool", "tracing", ] -[[package]] -name = "sc-peerset" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" -dependencies = [ - "futures", - "libp2p", - "log", - "sc-utils", - "serde_json", - "wasm-timer", -] - [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8144,13 +8007,13 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "futures", "jsonrpsee", "log", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "sc-block-builder", "sc-chain-spec", "sc-client-api", @@ -8167,6 +8030,7 @@ dependencies = [ "sp-rpc", "sp-runtime", "sp-session", + "sp-statement-store", "sp-version", "tokio", ] @@ -8174,10 +8038,10 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "jsonrpsee", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sc-chain-spec", "sc-transaction-pool-api", "scale-info", @@ -8187,13 +8051,13 @@ dependencies = [ "sp-rpc", "sp-runtime", "sp-version", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "http", "jsonrpsee", @@ -8208,7 +8072,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "array-bytes", "futures", @@ -8216,8 +8080,8 @@ dependencies = [ "hex", "jsonrpsee", "log", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "sc-chain-spec", "sc-client-api", "sc-transaction-pool-api", @@ -8227,14 +8091,14 @@ dependencies = [ "sp-core", "sp-runtime", "sp-version", - "thiserror", + "thiserror 1.0.69", "tokio-stream", ] [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", "directories", @@ -8243,8 +8107,8 @@ dependencies = [ "futures-timer", "jsonrpsee", "log", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "pin-project", "rand 0.8.5", "sc-block-builder", @@ -8261,11 +8125,9 @@ dependencies = [ "sc-network-light", "sc-network-sync", "sc-network-transactions", - "sc-offchain", "sc-rpc", "sc-rpc-server", "sc-rpc-spec-v2", - "sc-storage-monitor", "sc-sysinfo", "sc-telemetry", "sc-tracing", @@ -8291,7 +8153,7 @@ dependencies = [ "static_init", "substrate-prometheus-endpoint", "tempfile", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "tracing-futures", @@ -8300,37 +8162,21 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" -dependencies = [ - "log", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", - "sp-core", -] - -[[package]] -name = "sc-storage-monitor" -version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "clap", - "fs4", - "futures", "log", - "sc-client-db", - "sc-utils", + "parity-scale-codec", + "parking_lot 0.12.4", "sp-core", - "thiserror", - "tokio", ] [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "jsonrpsee", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sc-chain-spec", "sc-client-api", "sc-consensus-babe", @@ -8340,13 +8186,13 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-runtime", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "futures", "libc", @@ -8365,26 +8211,26 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "chrono", "futures", "libp2p", "log", - "parking_lot 0.12.1", + "parking_lot 0.12.4", "pin-project", "rand 0.8.5", "sc-utils", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-timer", ] [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "ansi_term", "atty", @@ -8392,12 +8238,10 @@ dependencies = [ "lazy_static", "libc", "log", - "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.4", "regex", "rustc-hash", "sc-client-api", - "sc-rpc-server", "sc-tracing-proc-macro", "serde", "sp-api", @@ -8406,7 +8250,7 @@ dependencies = [ "sp-rpc", "sp-runtime", "sp-tracing", - "thiserror", + "thiserror 1.0.69", "tracing", "tracing-log", "tracing-subscriber", @@ -8415,27 +8259,26 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", "futures", "futures-timer", "linked-hash-map", "log", - "num-traits", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "sc-client-api", "sc-transaction-pool-api", "sc-utils", @@ -8447,80 +8290,146 @@ dependencies = [ "sp-tracing", "sp-transaction-pool", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", "futures", "log", + "parity-scale-codec", "serde", "sp-blockchain", + "sp-core", "sp-runtime", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "backtrace", + "async-channel", "futures", "futures-timer", "lazy_static", "log", - "parking_lot 0.12.1", + "parking_lot 0.12.4", "prometheus", + "sp-arithmetic", +] + +[[package]] +name = "scale-bits" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "036575c29af9b6e4866ffb7fa055dbf623fe7a9cc159b33786de6013a6969d89" +dependencies = [ + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "scale-decode" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7789f5728e4e954aaa20cadcc370b99096fb8645fca3c9333ace44bb18f30095" +dependencies = [ + "derive_more 0.99.20", + "parity-scale-codec", + "scale-bits", + "scale-decode-derive", + "scale-info", + "smallvec", +] + +[[package]] +name = "scale-decode-derive" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27873eb6005868f8cc72dcfe109fae664cf51223d35387bc2f28be4c28d94c47" +dependencies = [ + "darling", + "proc-macro-crate 1.1.3", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scale-encode" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d70cb4b29360105483fac1ed567ff95d65224a14dd275b6303ed0a654c78de5" +dependencies = [ + "derive_more 0.99.20", + "parity-scale-codec", + "scale-encode-derive", + "scale-info", + "smallvec", +] + +[[package]] +name = "scale-encode-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "995491f110efdc6bea96d6a746140e32bfceb4ea47510750a5467295a4707a25" +dependencies = [ + "darling", + "proc-macro-crate 1.1.3", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] name = "scale-info" -version = "2.10.0" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ - "bitvec 1.0.1", - "cfg-if 1.0.0", - "derive_more", - "parity-scale-codec 3.6.9", + "bitvec", + "cfg-if", + "derive_more 1.0.0", + "parity-scale-codec", "scale-info-derive", "serde", ] [[package]] name = "scale-info-derive" -version = "2.10.0" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "schannel" -version = "0.1.22" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] name = "schnellru" -version = "0.2.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" +checksum = "356285bbf17bea63d9e52e96bd18f039672ac92b55b8cb997d6162a2a37d1649" dependencies = [ - "ahash 0.8.11", - "cfg-if 1.0.0", + "ahash 0.8.12", + "cfg-if", "hashbrown 0.13.2", ] @@ -8548,15 +8457,15 @@ version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" dependencies = [ - "aead 0.5.2", + "aead", "arrayref", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "curve25519-dalek 4.1.3", "getrandom_or_panic", "merlin 3.0.0", "rand_core 0.6.4", "serde_bytes", - "sha2 0.10.8", + "sha2 0.10.9", "subtle", "zeroize", ] @@ -8569,19 +8478,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scratch" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" - -[[package]] -name = "sct" -version = "0.6.1" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring 0.16.20", - "untrusted 0.7.1", -] +checksum = "9f6280af86e5f559536da57a45ebc84948833b3bee313a7dd25232e09c878a52" [[package]] name = "sct" @@ -8593,28 +8492,16 @@ dependencies = [ "untrusted 0.9.0", ] -[[package]] -name = "sdp" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13" -dependencies = [ - "rand 0.8.5", - "substring", - "thiserror", - "url", -] - [[package]] name = "sec1" -version = "0.3.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", - "der 0.6.1", + "der", "generic-array 0.14.7", - "pkcs8 0.9.0", + "pkcs8", "subtle", "zeroize", ] @@ -8648,11 +8535,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.2" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.1", "core-foundation", "core-foundation-sys", "libc", @@ -8661,9 +8548,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -8689,9 +8576,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.20" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ "serde", ] @@ -8702,40 +8589,46 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "serde" -version = "1.0.193" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_bytes" -version = "0.11.14" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.193" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", ] [[package]] name = "serde_json" -version = "1.0.108" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "ryu", @@ -8749,10 +8642,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" dependencies = [ "block-buffer 0.9.0", - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.0", + "opaque-debug 0.3.1", ] [[package]] @@ -8761,7 +8654,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.10.7", ] @@ -8785,19 +8678,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.0", + "opaque-debug 0.3.1", ] [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.10.7", ] @@ -8829,9 +8722,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" dependencies = [ "libc", ] @@ -8841,10 +8734,6 @@ name = "signature" version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] [[package]] name = "signature" @@ -8852,14 +8741,15 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ + "digest 0.10.7", "rand_core 0.6.4", ] [[package]] name = "simba" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" dependencies = [ "approx", "num-complex", @@ -8874,6 +8764,12 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + [[package]] name = "slab" version = "0.4.9" @@ -8891,9 +8787,9 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "smallvec" -version = "1.11.2" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "snap" @@ -8907,14 +8803,14 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" dependencies = [ - "aes-gcm 0.10.3", + "aes-gcm", "blake2", "chacha20poly1305", "curve25519-dalek 4.1.3", "rand_core 0.6.4", "ring 0.17.14", - "rustc_version 0.4.0", - "sha2 0.10.8", + "rustc_version 0.4.1", + "sha2 0.10.9", "subtle", ] @@ -8930,12 +8826,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.5" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -8946,7 +8842,6 @@ checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" dependencies = [ "base64 0.13.1", "bytes", - "flate2", "futures", "http", "httparse", @@ -8955,42 +8850,62 @@ dependencies = [ "sha-1", ] +[[package]] +name = "soketto" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e859df029d160cb88608f5d7df7fb4753fd20fdfb4de5644f3d8b8440841721" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures", + "httparse", + "log", + "rand 0.8.5", + "sha1", +] + [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "hash-db", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", + "scale-info", "sp-api-proc-macro", "sp-core", + "sp-externalities", + "sp-metadata-ir", "sp-runtime", "sp-state-machine", "sp-std", "sp-trie", "sp-version", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ + "Inflector", "blake2", + "expander", "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "sp-application-crypto" -version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "23.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "serde", "sp-core", @@ -9000,12 +8915,12 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "16.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "integer-sqrt", "num-traits", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "serde", "sp-std", @@ -9015,9 +8930,9 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-api", "sp-application-crypto", @@ -9028,9 +8943,8 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", "sp-api", "sp-inherents", "sp-runtime", @@ -9040,57 +8954,50 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "futures", "log", - "lru", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", + "schnellru", "sp-api", "sp-consensus", "sp-database", "sp-runtime", "sp-state-machine", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", "futures", "log", - "parity-scale-codec 3.6.9", "sp-core", "sp-inherents", "sp-runtime", "sp-state-machine", - "sp-std", - "sp-version", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", - "merlin 2.0.1", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "serde", "sp-api", "sp-application-crypto", - "sp-consensus", "sp-consensus-slots", - "sp-consensus-vrf", "sp-core", "sp-inherents", - "sp-keystore", "sp-runtime", "sp-std", "sp-timestamp", @@ -9099,11 +9006,11 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "finality-grandpa", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "serde", "sp-api", @@ -9117,38 +9024,25 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "serde", "sp-std", "sp-timestamp", ] -[[package]] -name = "sp-consensus-vrf" -version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" -dependencies = [ - "parity-scale-codec 3.6.9", - "scale-info", - "schnorrkel 0.9.1", - "sp-core", - "sp-runtime", - "sp-std", -] - [[package]] name = "sp-core" -version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "21.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "array-bytes", - "base58", "bitflags 1.3.2", "blake2", "bounded-collections", + "bs58 0.4.0", "dyn-clonable", "ed25519-zebra", "futures", @@ -9159,8 +9053,9 @@ dependencies = [ "libsecp256k1", "log", "merlin 2.0.1", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", + "paste", "primitive-types", "rand 0.8.5", "regex", @@ -9177,93 +9072,102 @@ dependencies = [ "sp-storage", "ss58-registry", "substrate-bip39", - "thiserror", + "thiserror 1.0.69", "tiny-bip39", + "tracing", "zeroize", ] [[package]] name = "sp-core-hashing" -version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "9.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "blake2", + "blake2b_simd", "byteorder", "digest 0.10.7", - "sha2 0.10.8", + "sha2 0.10.9", "sha3", - "sp-std", "twox-hash", ] [[package]] name = "sp-core-hashing-proc-macro" -version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "9.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "proc-macro2", "quote", "sp-core-hashing", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "kvdb", - "parking_lot 0.12.1", + "parking_lot 0.12.4", ] [[package]] name = "sp-debug-derive" -version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "8.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "sp-externalities" -version = "0.13.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "0.19.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "environmental", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sp-std", "sp-storage", ] +[[package]] +name = "sp-genesis-builder" +version = "0.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +dependencies = [ + "serde_json", + "sp-api", + "sp-runtime", + "sp-std", +] + [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", "impl-trait-for-tuples", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", - "sp-core", "sp-runtime", "sp-std", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-io" -version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "23.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "bytes", "ed25519 1.5.3", "ed25519-dalek 1.0.1", - "futures", "libsecp256k1", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", + "rustversion", "secp256k1", "sp-core", "sp-externalities", @@ -9279,8 +9183,8 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "24.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "lazy_static", "sp-core", @@ -9290,36 +9194,42 @@ dependencies = [ [[package]] name = "sp-keystore" -version = "0.13.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "0.27.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "async-trait", - "futures", - "merlin 2.0.1", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", - "schnorrkel 0.9.1", - "serde", + "parity-scale-codec", + "parking_lot 0.12.4", "sp-core", "sp-externalities", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "thiserror", - "zstd", + "thiserror 1.0.69", + "zstd 0.12.4", +] + +[[package]] +name = "sp-metadata-ir" +version = "0.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +dependencies = [ + "frame-metadata", + "parity-scale-codec", + "scale-info", + "sp-std", ] [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "serde", "sp-arithmetic", @@ -9331,7 +9241,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "sp-api", "sp-core", @@ -9340,8 +9250,8 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "8.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "backtrace", "lazy_static", @@ -9351,7 +9261,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "rustc-hash", "serde", @@ -9360,14 +9270,14 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "24.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "either", "hash256-std-hasher", "impl-trait-for-tuples", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "paste", "rand 0.8.5", "scale-info", @@ -9382,12 +9292,12 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "17.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "bytes", "impl-trait-for-tuples", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "primitive-types", "sp-externalities", "sp-runtime-interface-proc-macro", @@ -9400,25 +9310,26 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "11.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "Inflector", "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-api", "sp-core", + "sp-keystore", "sp-runtime", "sp-staking", "sp-std", @@ -9427,10 +9338,12 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "impl-trait-for-tuples", + "parity-scale-codec", "scale-info", + "serde", "sp-core", "sp-runtime", "sp-std", @@ -9438,13 +9351,13 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.13.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "0.28.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "hash-db", "log", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "rand 0.8.5", "smallvec", "sp-core", @@ -9452,22 +9365,47 @@ dependencies = [ "sp-panic-handler", "sp-std", "sp-trie", - "thiserror", + "thiserror 1.0.69", "tracing", + "trie-db", +] + +[[package]] +name = "sp-statement-store" +version = "4.0.0-dev" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" +dependencies = [ + "aes-gcm", + "curve25519-dalek 3.2.0", + "ed25519-dalek 1.0.1", + "hkdf", + "parity-scale-codec", + "rand 0.8.5", + "scale-info", + "sha2 0.10.9", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-externalities", + "sp-runtime", + "sp-runtime-interface", + "sp-std", + "thiserror 1.0.69", + "x25519-dalek 2.0.0-pre.1", ] [[package]] name = "sp-std" -version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "8.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" [[package]] name = "sp-storage" -version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "13.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "impl-serde", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "ref-cast", "serde", "sp-debug-derive", @@ -9477,24 +9415,22 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", - "futures-timer", - "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sp-inherents", "sp-runtime", "sp-std", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-tracing" -version = "6.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "10.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sp-std", "tracing", "tracing-core", @@ -9504,7 +9440,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "sp-api", "sp-runtime", @@ -9513,11 +9449,10 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "async-trait", - "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "sp-core", "sp-inherents", @@ -9528,22 +9463,22 @@ dependencies = [ [[package]] name = "sp-trie" -version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "22.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "ahash 0.8.11", + "ahash 0.8.12", "hash-db", - "hashbrown 0.12.3", + "hashbrown 0.13.2", "lazy_static", "memory-db", "nohash-hasher", - "parity-scale-codec 3.6.9", - "parking_lot 0.12.1", + "parity-scale-codec", + "parking_lot 0.12.4", "scale-info", "schnellru", "sp-core", "sp-std", - "thiserror", + "thiserror 1.0.69", "tracing", "trie-db", "trie-root", @@ -9551,11 +9486,11 @@ dependencies = [ [[package]] name = "sp-version" -version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "22.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "impl-serde", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "parity-wasm", "scale-info", "serde", @@ -9563,40 +9498,39 @@ dependencies = [ "sp-runtime", "sp-std", "sp-version-proc-macro", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-version-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "8.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "sp-wasm-interface" -version = "7.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "14.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "anyhow", "impl-trait-for-tuples", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sp-std", - "wasmi 0.13.2", "wasmtime", ] [[package]] name = "sp-weights" -version = "4.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +version = "20.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ - "parity-scale-codec 3.6.9", + "parity-scale-codec", "scale-info", "serde", "smallvec", @@ -9620,29 +9554,19 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "spki" -version = "0.6.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der 0.6.1", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der 0.7.8", + "der", ] [[package]] name = "ss58-registry" -version = "1.44.0" +version = "1.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35935738370302d5e33963665b77541e4b990a3e919ec904c837a56cfc891de1" +checksum = "19409f13998e55816d1c728395af0b52ec066206341d939e22e7766df9b494b8" dependencies = [ "Inflector", "num-format", @@ -9667,26 +9591,26 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "static_init" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" +checksum = "8bae1df58c5fea7502e8e352ec26b5579f6178e1fdb311e088580c980dee25ed" dependencies = [ "bitflags 1.3.2", - "cfg_aliases", + "cfg_aliases 0.2.1", "libc", - "parking_lot 0.11.2", - "parking_lot_core 0.8.6", + "parking_lot 0.12.4", + "parking_lot_core 0.9.11", "static_init_macro", "winapi", ] [[package]] name = "static_init_macro" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf" +checksum = "1389c88ddd739ec6d3f8f83343764a0e944cd23cfbf126a9796a714b0b6edd6f" dependencies = [ - "cfg_aliases", + "cfg_aliases 0.1.1", "memchr", "proc-macro2", "quote", @@ -9699,6 +9623,12 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "strum" version = "0.24.1" @@ -9714,41 +9644,22 @@ version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro2", "quote", "rustversion", "syn 1.0.109", ] -[[package]] -name = "stun" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25" -dependencies = [ - "base64 0.13.1", - "crc", - "lazy_static", - "md-5", - "rand 0.8.5", - "ring 0.16.20", - "subtle", - "thiserror", - "tokio", - "url", - "webrtc-util", -] - [[package]] name = "substrate-bip39" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e620c7098893ba667438b47169c00aacdd9e7c10e042250ce2b60b087ec97328" +checksum = "6a7590dc041b9bc2825e52ce5af8416c73dbe9d0654402bfd4b4941938b94d8f" dependencies = [ "hmac 0.11.0", "pbkdf2 0.8.0", - "schnorrkel 0.9.1", + "schnorrkel 0.11.4", "sha2 0.9.9", "zeroize", ] @@ -9756,21 +9667,18 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" -dependencies = [ - "platforms", -] +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "frame-system-rpc-runtime-api", "futures", "jsonrpsee", "log", - "parity-scale-codec 3.6.9", + "parity-scale-codec", "sc-rpc-api", "sc-transaction-pool-api", "sp-api", @@ -9783,19 +9691,19 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "hyper", "log", "prometheus", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "futures", "substrate-test-utils-derive", @@ -9805,40 +9713,32 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-03#0cc5353f5313a12d6fb00462d9d12aafc7fed276" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-monthly-2023-08#fe8503959920bfc63a8bdacd90634adeb8158fd0" dependencies = [ "ansi_term", "build-helper", "cargo_metadata", "filetime", + "parity-wasm", "sp-maybe-compressed-blob", "strum", "tempfile", - "toml", + "toml 0.7.8", "walkdir", "wasm-opt", ] -[[package]] -name = "substring" -version = "1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" -dependencies = [ - "autocfg", -] - [[package]] name = "subtle" version = "2.4.1" @@ -9858,9 +9758,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.40" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13fa70a4ee923979ffb522cacce59d34421ebdea5625e1073c4326ef9d2dd42e" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", @@ -9879,22 +9779,33 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.1", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -9908,56 +9819,76 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.12" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.8.1" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ - "cfg-if 1.0.0", "fastrand", - "redox_syscall 0.4.1", - "rustix 0.38.28", - "windows-sys 0.48.0", + "getrandom 0.3.3", + "once_cell", + "rustix 1.0.7", + "windows-sys 0.59.0", ] [[package]] name = "termcolor" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] [[package]] name = "termtree" -version = "0.4.1" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" + +[[package]] +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] [[package]] name = "thiserror" -version = "1.0.50" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", ] [[package]] @@ -9968,11 +9899,11 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "once_cell", ] @@ -9997,9 +9928,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.30" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", @@ -10011,16 +9942,17 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.15" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ + "num-conv", "time-core", ] @@ -10036,8 +9968,8 @@ dependencies = [ "pbkdf2 0.11.0", "rand 0.8.5", "rustc-hash", - "sha2 0.10.8", - "thiserror", + "sha2 0.10.9", + "thiserror 1.0.69", "unicode-normalization", "wasm-bindgen", "zeroize", @@ -10053,20 +9985,20 @@ dependencies = [ ] [[package]] -name = "tinytemplate" -version = "1.2.1" +name = "tinystr" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ - "serde", - "serde_json", + "displaydoc", + "zerovec", ] [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] @@ -10079,18 +10011,18 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.2" +version = "1.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ "backtrace", "bytes", "libc", "mio", - "parking_lot 0.12.1", - "pin-project-lite 0.2.13", + "parking_lot 0.12.4", + "pin-project-lite", "signal-hook-registry", - "socket2 0.5.5", + "socket2 0.5.10", "tokio-macros", "windows-sys 0.52.0", ] @@ -10103,45 +10035,43 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", ] [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.20.9", + "rustls", "tokio", - "webpki 0.22.4", ] [[package]] name = "tokio-stream" -version = "0.1.14" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", - "pin-project-lite 0.2.13", + "pin-project-lite", "tokio", "tokio-util", ] [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", - "pin-project-lite 0.2.13", + "pin-project-lite", "tokio", - "tracing", ] [[package]] @@ -10153,21 +10083,49 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.9.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.5.40", +] [[package]] name = "toml_edit" -version = "0.20.2" +version = "0.22.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" dependencies = [ - "indexmap 2.1.0", + "indexmap 2.9.0", "toml_datetime", - "winnow", + "winnow 0.7.10", ] [[package]] @@ -10183,62 +10141,62 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.3.5" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.1", "bytes", "futures-core", "futures-util", "http", "http-body", "http-range-header", - "pin-project-lite 0.2.13", + "pin-project-lite", "tower-layer", "tower-service", ] [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", - "pin-project-lite 0.2.13", + "pin-project-lite", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -10327,9 +10285,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" dependencies = [ "async-trait", - "cfg-if 1.0.0", + "cfg-if", "data-encoding", - "enum-as-inner", + "enum-as-inner 0.5.1", "futures-channel", "futures-io", "futures-util", @@ -10339,7 +10297,32 @@ dependencies = [ "rand 0.8.5", "smallvec", "socket2 0.4.10", - "thiserror", + "thiserror 1.0.69", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "trust-dns-proto" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner 0.6.1", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.4.0", + "ipnet", + "once_cell", + "rand 0.8.5", + "smallvec", + "thiserror 1.0.69", "tinyvec", "tokio", "tracing", @@ -10348,22 +10331,23 @@ dependencies = [ [[package]] name = "trust-dns-resolver" -version = "0.22.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" +checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "futures-util", "ipconfig", - "lazy_static", "lru-cache", - "parking_lot 0.12.1", + "once_cell", + "parking_lot 0.12.4", + "rand 0.8.5", "resolv-conf", "smallvec", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", - "trust-dns-proto", + "trust-dns-proto 0.23.2", ] [[package]] @@ -10378,68 +10362,29 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" -[[package]] -name = "turn" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8" -dependencies = [ - "async-trait", - "base64 0.13.1", - "futures", - "log", - "md-5", - "rand 0.8.5", - "ring 0.16.20", - "stun", - "thiserror", - "tokio", - "webrtc-util", -] - [[package]] name = "twox-hash" version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cfg-if 0.1.10", + "cfg-if", "digest 0.10.7", "rand 0.8.5", "static_assertions", ] -[[package]] -name = "type-metadata" -version = "0.1.0" -source = "git+https://github.com/type-metadata/type-metadata.git?rev=02eae9f35c40c943b56af5b60616219f2b72b47d#02eae9f35c40c943b56af5b60616219f2b72b47d" -dependencies = [ - "derive_more", - "serde", - "type-metadata-derive", -] - -[[package]] -name = "type-metadata-derive" -version = "0.1.0" -source = "git+https://github.com/type-metadata/type-metadata.git?rev=02eae9f35c40c943b56af5b60616219f2b72b47d#02eae9f35c40c943b56af5b60616219f2b72b47d" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uint" @@ -10455,46 +10400,48 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.14" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] -name = "unicode-xid" -version = "0.2.4" +name = "unicode-width" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] -name = "universal-hash" -version = "0.4.1" +name = "unicode-xid" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array 0.14.7", - "subtle", -] +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" @@ -10518,6 +10465,12 @@ dependencies = [ "futures-util", ] +[[package]] +name = "unsigned-varint" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" + [[package]] name = "untrusted" version = "0.7.1" @@ -10532,12 +10485,12 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna 1.0.3", "percent-encoding", ] @@ -10545,22 +10498,19 @@ dependencies = [ name = "utf8parse" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] -name = "uuid" -version = "1.6.1" +name = "utf8parse" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" -dependencies = [ - "getrandom 0.2.11", -] +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "vcpkg" @@ -10570,9 +10520,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "void" @@ -10580,20 +10530,11 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -[[package]] -name = "waitgroup" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" -dependencies = [ - "atomic-waker", -] - [[package]] name = "walkdir" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", @@ -10631,46 +10572,48 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.89" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.89" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.39" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.89" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -10678,30 +10621,34 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.89" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.89" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-encoder" -version = "0.38.1" +version = "0.233.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad2b51884de9c7f4fe2fd1043fccb8dcad4b1e29558146ee57a144d15779f3f" +checksum = "9679ae3cf7cfa2ca3a327f7fab97f27f3294d402fd1a76ca8ab514e17973e4d3" dependencies = [ - "leb128", + "leb128fmt", + "wasmparser 0.233.0", ] [[package]] @@ -10724,25 +10671,25 @@ dependencies = [ [[package]] name = "wasm-opt" -version = "0.111.0" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41" +checksum = "87fef6d0d508f08334e0ab0e6877feb4c0ecb3956bcf2cb950699b22fedf3e9c" dependencies = [ "anyhow", "libc", "strum", "strum_macros", "tempfile", - "thiserror", + "thiserror 1.0.69", "wasm-opt-cxx-sys", "wasm-opt-sys", ] [[package]] name = "wasm-opt-cxx-sys" -version = "0.111.0" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4" +checksum = "bc816bbc1596c8f2e8127e137a760c798023ef3d378f2ae51f0f1840e2dfa445" dependencies = [ "anyhow", "cxx", @@ -10752,15 +10699,14 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.111.0" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7" +checksum = "40199e4f68ef1071b3c6d0bd8026a12b481865d4b9e49c156932ea9a6234dd14" dependencies = [ "anyhow", "cc", "cxx", "cxx-build", - "regex", ] [[package]] @@ -10780,148 +10726,128 @@ dependencies = [ [[package]] name = "wasmi" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" -dependencies = [ - "parity-wasm", - "wasmi-validation", - "wasmi_core 0.2.1", -] - -[[package]] -name = "wasmi" -version = "0.20.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01bf50edb2ea9d922aa75a7bf3c15e26a6c9e2d18c56e862b49737a582901729" +checksum = "e51fb5c61993e71158abf5bb863df2674ca3ec39ed6471c64f07aeaf751d67b4" dependencies = [ + "intx", + "smallvec", "spin 0.9.8", "wasmi_arena", - "wasmi_core 0.5.0", + "wasmi_core", "wasmparser-nostd", ] -[[package]] -name = "wasmi-validation" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b" -dependencies = [ - "parity-wasm", -] - [[package]] name = "wasmi_arena" -version = "0.1.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ea379cbb0b41f3a9f0bf7b47036d036aae7f43383d8cc487d4deccf40dee0a" +checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" [[package]] name = "wasmi_core" -version = "0.2.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" +checksum = "624e6333e861ef49095d2d678b76ebf30b06bf37effca845be7e5b87c90071b7" dependencies = [ "downcast-rs", "libm", - "memory_units", - "num-rational", "num-traits", - "region", + "paste", ] [[package]] -name = "wasmi_core" -version = "0.5.0" +name = "wasmparser" +version = "0.102.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5bf998ab792be85e20e771fe14182b4295571ad1d4f89d3da521c1bef5f597a" +checksum = "48134de3d7598219ab9eaf6b91b15d8e50d31da76b8519fe4ecfcec2cf35104b" dependencies = [ - "downcast-rs", - "libm", - "num-traits", + "indexmap 1.9.3", + "url", ] [[package]] name = "wasmparser" -version = "0.100.0" +version = "0.233.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" +checksum = "b51cb03afce7964bbfce46602d6cb358726f36430b6ba084ac6020d8ce5bc102" dependencies = [ - "indexmap 1.9.3", - "url", + "bitflags 2.9.1", + "indexmap 2.9.0", + "semver 1.0.26", ] [[package]] name = "wasmparser-nostd" -version = "0.91.0" +version = "0.100.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c37f310b5a62bfd5ae7c0f1d8e6f98af16a5d6d84ba764e9c36439ec14e318b" +checksum = "d5a015fe95f3504a94bb1462c717aae75253e39b9dd6c3fb1062c934535c64aa" dependencies = [ "indexmap-nostd", ] [[package]] name = "wasmtime" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a222f5fa1e14b2cefc286f1b68494d7a965f4bf57ec04c59bb62673d639af6" +checksum = "f907fdead3153cb9bfb7a93bbd5b62629472dc06dee83605358c64c52ed3dda9" dependencies = [ "anyhow", "bincode", - "cfg-if 1.0.0", + "cfg-if", "indexmap 1.9.3", "libc", "log", - "object 0.29.0", + "object 0.30.4", "once_cell", "paste", "psm", "rayon", "serde", "target-lexicon", - "wasmparser", + "wasmparser 0.102.0", "wasmtime-cache", "wasmtime-cranelift", "wasmtime-environ", "wasmtime-jit", "wasmtime-runtime", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-asm-macros" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4407a7246e7d2f3d8fb1cf0c72fda8dbafdb6dd34d555ae8bea0e5ae031089cc" +checksum = "d3b9daa7c14cd4fa3edbf69de994408d5f4b7b0959ac13fa69d465f6597f810d" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ceb3adf61d654be0be67fffdce42447b0880481348785be5fe40b5dd7663a4c" +checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213" dependencies = [ "anyhow", - "base64 0.13.1", + "base64 0.21.7", "bincode", "directories-next", "file-per-thread-logger", "log", "rustix 0.36.17", "serde", - "sha2 0.10.8", - "toml", - "windows-sys 0.42.0", - "zstd", + "sha2 0.10.9", + "toml 0.5.11", + "windows-sys 0.45.0", + "zstd 0.11.2+zstd.1.5.2", ] [[package]] name = "wasmtime-cranelift" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c366bb8647e01fd08cb5589976284b00abfded5529b33d7e7f3f086c68304a4" +checksum = "b1cefde0cce8cb700b1b21b6298a3837dba46521affd7b8c38a9ee2c869eee04" dependencies = [ "anyhow", "cranelift-codegen", @@ -10929,48 +10855,64 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli 0.26.2", + "gimli 0.27.3", "log", - "object 0.29.0", + "object 0.30.4", + "target-lexicon", + "thiserror 1.0.69", + "wasmparser 0.102.0", + "wasmtime-cranelift-shared", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-cranelift-shared" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd041e382ef5aea1b9fc78442394f1a4f6d676ce457e7076ca4cb3f397882f8b" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-native", + "gimli 0.27.3", + "object 0.30.4", "target-lexicon", - "thiserror", - "wasmparser", "wasmtime-environ", ] [[package]] name = "wasmtime-environ" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b8b50962eae38ee319f7b24900b7cf371f03eebdc17400c1dc8575fc10c9a7" +checksum = "a990198cee4197423045235bf89d3359e69bd2ea031005f4c2d901125955c949" dependencies = [ "anyhow", "cranelift-entity", - "gimli 0.26.2", + "gimli 0.27.3", "indexmap 1.9.3", "log", - "object 0.29.0", + "object 0.30.4", "serde", "target-lexicon", - "thiserror", - "wasmparser", + "thiserror 1.0.69", + "wasmparser 0.102.0", "wasmtime-types", ] [[package]] name = "wasmtime-jit" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffaed4f9a234ba5225d8e64eac7b4a5d13b994aeb37353cde2cbeb3febda9eaa" +checksum = "0de48df552cfca1c9b750002d3e07b45772dd033b0b206d5c0968496abf31244" dependencies = [ - "addr2line 0.17.0", + "addr2line 0.19.0", "anyhow", "bincode", - "cfg-if 1.0.0", + "cfg-if", "cpp_demangle", - "gimli 0.26.2", + "gimli 0.27.3", "log", - "object 0.29.0", + "object 0.30.4", "rustc-demangle", "serde", "target-lexicon", @@ -10978,426 +10920,250 @@ dependencies = [ "wasmtime-jit-debug", "wasmtime-jit-icache-coherence", "wasmtime-runtime", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-jit-debug" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed41cbcbf74ce3ff6f1d07d1b707888166dc408d1a880f651268f4f7c9194b2" +checksum = "6e0554b84c15a27d76281d06838aed94e13a77d7bf604bbbaf548aa20eb93846" dependencies = [ - "object 0.29.0", + "object 0.30.4", "once_cell", "rustix 0.36.17", ] [[package]] name = "wasmtime-jit-icache-coherence" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a28ae1e648461bfdbb79db3efdaee1bca5b940872e4175390f465593a2e54c" +checksum = "aecae978b13f7f67efb23bd827373ace4578f2137ec110bbf6a4a7cde4121bbd" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-runtime" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e704b126e4252788ccfc3526d4d4511d4b23c521bf123e447ac726c14545217b" +checksum = "658cf6f325232b6760e202e5255d823da5e348fdea827eff0a2a22319000b441" dependencies = [ "anyhow", "cc", - "cfg-if 1.0.0", + "cfg-if", "indexmap 1.9.3", "libc", "log", "mach", "memfd", - "memoffset 0.6.5", + "memoffset", "paste", "rand 0.8.5", "rustix 0.36.17", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-types" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e5572c5727c1ee7e8f28717aaa8400e4d22dcbd714ea5457d85b5005206568" +checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" dependencies = [ "cranelift-entity", "serde", - "thiserror", - "wasmparser", + "thiserror 1.0.69", + "wasmparser 0.102.0", ] [[package]] name = "wast" -version = "69.0.1" +version = "233.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ee37317321afde358e4d7593745942c48d6d17e0e6e943704de9bbee121e7a" +checksum = "2eaf4099d8d0c922b83bf3c90663f5666f0769db9e525184284ebbbdb1dd2180" dependencies = [ - "leb128", + "bumpalo", + "leb128fmt", "memchr", - "unicode-width", + "unicode-width 0.2.0", "wasm-encoder", ] [[package]] name = "wat" -version = "1.0.82" +version = "1.233.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeb338ee8dee4d4cd05e6426683f21c5087dc7cfc8903e839ccf48d43332da3c" +checksum = "3d9bc80f5e4b25ea086ef41b91ccd244adde45d931c384d94a8ff64ab8bd7d87" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.66" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" -dependencies = [ - "ring 0.16.20", - "untrusted 0.7.1", -] - -[[package]] -name = "webpki" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" -dependencies = [ - "ring 0.17.14", - "untrusted 0.9.0", -] - [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki 0.22.4", -] - -[[package]] -name = "webrtc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb" -dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "hex", - "interceptor", - "lazy_static", - "log", - "rand 0.8.5", - "rcgen 0.9.3", - "regex", - "ring 0.16.20", - "rtcp", - "rtp", - "rustls 0.19.1", - "sdp", - "serde", - "serde_json", - "sha2 0.10.8", - "stun", - "thiserror", - "time", - "tokio", - "turn", - "url", - "waitgroup", - "webrtc-data", - "webrtc-dtls", - "webrtc-ice", - "webrtc-mdns", - "webrtc-media", - "webrtc-sctp", - "webrtc-srtp", - "webrtc-util", -] +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] -name = "webrtc-data" -version = "0.6.0" +name = "which" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ - "bytes", - "derive_builder", - "log", - "thiserror", - "tokio", - "webrtc-sctp", - "webrtc-util", + "either", + "home", + "once_cell", + "rustix 0.38.44", ] [[package]] -name = "webrtc-dtls" -version = "0.7.2" +name = "wide" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a00f4242f2db33307347bd5be53263c52a0331c96c14292118c9a6bb48d267" +checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" dependencies = [ - "aes 0.6.0", - "aes-gcm 0.10.3", - "async-trait", - "bincode", - "block-modes", - "byteorder", - "ccm", - "curve25519-dalek 3.2.0", - "der-parser 8.2.0", - "elliptic-curve", - "hkdf", - "hmac 0.12.1", - "log", - "p256", - "p384", - "rand 0.8.5", - "rand_core 0.6.4", - "rcgen 0.10.0", - "ring 0.16.20", - "rustls 0.19.1", - "sec1", - "serde", - "sha1", - "sha2 0.10.8", - "signature 1.6.4", - "subtle", - "thiserror", - "tokio", - "webpki 0.21.4", - "webrtc-util", - "x25519-dalek 2.0.0", - "x509-parser 0.13.2", + "bytemuck", + "safe_arch", ] [[package]] -name = "webrtc-ice" -version = "0.9.1" +name = "widestring" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465a03cc11e9a7d7b4f9f99870558fe37a102b65b93f8045392fef7c67b39e80" -dependencies = [ - "arc-swap", - "async-trait", - "crc", - "log", - "rand 0.8.5", - "serde", - "serde_json", - "stun", - "thiserror", - "tokio", - "turn", - "url", - "uuid", - "waitgroup", - "webrtc-mdns", - "webrtc-util", -] +checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" [[package]] -name = "webrtc-mdns" -version = "0.5.2" +name = "winapi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "log", - "socket2 0.4.10", - "thiserror", - "tokio", - "webrtc-util", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] -name = "webrtc-media" -version = "0.5.1" +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f72e1650a8ae006017d1a5280efb49e2610c19ccc3c0905b03b648aee9554991" -dependencies = [ - "byteorder", - "bytes", - "rand 0.8.5", - "rtp", - "thiserror", -] +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] -name = "webrtc-sctp" -version = "0.7.0" +name = "winapi-util" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "crc", - "log", - "rand 0.8.5", - "thiserror", - "tokio", - "webrtc-util", + "windows-sys 0.59.0", ] [[package]] -name = "webrtc-srtp" -version = "0.9.1" +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5" -dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "aes-gcm 0.9.4", - "async-trait", - "byteorder", - "bytes", - "ctr 0.8.0", - "hmac 0.11.0", - "log", - "rtcp", - "rtp", - "sha-1", - "subtle", - "thiserror", - "tokio", - "webrtc-util", -] +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "webrtc-util" -version = "0.7.0" +name = "windows" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" +checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" dependencies = [ - "async-trait", - "bitflags 1.3.2", - "bytes", - "cc", - "ipnet", - "lazy_static", - "libc", - "log", - "nix", - "rand 0.8.5", - "thiserror", - "tokio", - "winapi", + "windows-core 0.53.0", + "windows-targets 0.52.6", ] [[package]] -name = "which" -version = "4.4.2" +name = "windows-core" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.28", + "windows-result 0.1.2", + "windows-targets 0.52.6", ] [[package]] -name = "wide" -version = "0.7.13" +name = "windows-core" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "bytemuck", - "safe_arch", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result 0.3.4", + "windows-strings", ] [[package]] -name = "widestring" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" - -[[package]] -name = "winapi" -version = "0.3.9" +name = "windows-implement" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.6" +name = "windows-interface" +version = "0.59.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ - "winapi", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "windows-link" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] -name = "windows" -version = "0.51.1" +name = "windows-result" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" dependencies = [ - "windows-core", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] -name = "windows-core" -version = "0.51.1" +name = "windows-result" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-targets 0.48.5", + "windows-link", ] [[package]] -name = "windows-sys" -version = "0.42.0" +name = "windows-strings" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-link", ] [[package]] @@ -11424,7 +11190,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -11459,17 +11234,34 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", ] [[package]] @@ -11486,9 +11278,15 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" [[package]] name = "windows_aarch64_msvc" @@ -11504,9 +11302,15 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" [[package]] name = "windows_i686_gnu" @@ -11522,9 +11326,27 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" [[package]] name = "windows_i686_msvc" @@ -11540,9 +11362,15 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" [[package]] name = "windows_x86_64_gnu" @@ -11558,9 +11386,15 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" [[package]] name = "windows_x86_64_gnullvm" @@ -11576,9 +11410,15 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" [[package]] name = "windows_x86_64_msvc" @@ -11594,15 +11434,30 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.5.27" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb877ca3232bec99a6472ed63f7241de2a250165260908b2d24c09d867907a85" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" dependencies = [ "memchr", ] @@ -11613,7 +11468,7 @@ version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "windows-sys 0.48.0", ] @@ -11623,9 +11478,15 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.9.1", ] +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + [[package]] name = "wyz" version = "0.5.1" @@ -11648,63 +11509,49 @@ dependencies = [ [[package]] name = "x25519-dalek" -version = "2.0.0" +version = "2.0.0-pre.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb66477291e7e8d2b0ff1bcb900bf29489a9692816d79874bea351e7a8b6de96" +checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" dependencies = [ - "curve25519-dalek 4.1.3", + "curve25519-dalek 3.2.0", "rand_core 0.6.4", - "serde", "zeroize", ] [[package]] name = "x509-parser" -version = "0.13.2" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" +checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da" dependencies = [ - "asn1-rs 0.3.1", - "base64 0.13.1", + "asn1-rs", "data-encoding", - "der-parser 7.0.0", + "der-parser", "lazy_static", "nom", - "oid-registry 0.4.0", - "ring 0.16.20", + "oid-registry", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] [[package]] -name = "x509-parser" -version = "0.14.0" +name = "xxhash-rust" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" -dependencies = [ - "asn1-rs 0.5.2", - "base64 0.13.1", - "data-encoding", - "der-parser 8.2.0", - "lazy_static", - "nom", - "oid-registry 0.6.1", - "rusticata-macros", - "thiserror", - "time", -] +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" [[package]] name = "yamux" -version = "0.10.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5" +checksum = "9ed0164ae619f2dc144909a9f082187ebb5893693d8c0196e8085283ccd4b776" dependencies = [ "futures", "log", "nohash-hasher", - "parking_lot 0.12.1", + "parking_lot 0.12.4", + "pin-project", "rand 0.8.5", "static_assertions", ] @@ -11718,31 +11565,76 @@ dependencies = [ "time", ] +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure 0.13.2", +] + [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure 0.13.2", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] @@ -11755,7 +11647,40 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.101", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] @@ -11764,7 +11689,16 @@ version = "0.11.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" dependencies = [ - "zstd-safe", + "zstd-safe 5.0.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +dependencies = [ + "zstd-safe 6.0.6", ] [[package]] @@ -11777,11 +11711,21 @@ dependencies = [ "zstd-sys", ] +[[package]] +name = "zstd-safe" +version = "6.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" +dependencies = [ + "libc", + "zstd-sys", +] + [[package]] name = "zstd-sys" -version = "2.0.9+zstd.1.5.5" +version = "2.0.15+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index d8e34865d2..35bc3dca36 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,99 +9,102 @@ edition = "2021" name = "polymesh" path = "src/main.rs" -# Path build to use our Substrate version from github, `branch = "polymesh-v8-monthly-2023-03"`. +# Path build to use our Substrate version from github, `branch = "polymesh-v8-monthly-2023-08"`. [patch.crates-io] -frame-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -frame-benchmarking-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -frame-executive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -frame-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -frame-election-provider-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -frame-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -frame-system-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -frame-system-rpc-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-balances = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-contracts = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-contracts-primitives = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-election-provider-multi-phase = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-im-online = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-indices = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-offences = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-preimage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-insecure-randomness-collective-flip = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-scheduler = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-staking-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-staking-reward-curve = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -pallet-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-basic-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-chain-spec = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-client-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-client-db = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-consensus-babe-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-consensus-epochs = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-executor = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-consensus-grandpa-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-network = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-network-common = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-rpc-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-rpc-spec-v2 = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-service = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-telemetry = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-transaction-pool-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sc-sync-state-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-application-crypto = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-arithmetic = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-blockchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-core = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-externalities = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-inherents = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-io = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-keyring = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-npos-elections = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-runtime = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-weights = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-runtime-interface = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-state-machine = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-std = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-storage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-tracing = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-transaction-storage-proof = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-trie = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -sp-version = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -substrate-frame-rpc-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -substrate-prometheus-endpoint = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -substrate-build-script-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -substrate-wasm-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } -substrate-test-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-03" } +frame-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +frame-benchmarking-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +frame-executive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +frame-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +frame-election-provider-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +frame-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +frame-system-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +frame-system-rpc-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-balances = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-contracts = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-contracts-primitives = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-election-provider-multi-phase = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-im-online = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-indices = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-offences = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-preimage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-insecure-randomness-collective-flip = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-scheduler = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-staking-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-staking-reward-curve = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +pallet-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-basic-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-chain-spec = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-client-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-client-db = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-consensus-babe-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-consensus-epochs = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-executor = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-consensus-grandpa-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-network = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-network-common = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-network-sync = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-rpc-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-rpc-spec-v2 = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-service = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-telemetry = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-transaction-pool-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-sync-state-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sc-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-application-crypto = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-arithmetic = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-blockchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-core = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-debug-derive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-externalities = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-inherents = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-io = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-keyring = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-npos-elections = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-runtime = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-weights = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-runtime-interface = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-state-machine = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-std = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-storage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-tracing = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-transaction-storage-proof = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-trie = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +sp-version = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +substrate-frame-rpc-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +substrate-prometheus-endpoint = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +substrate-build-script-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +substrate-wasm-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } +substrate-test-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-monthly-2023-08" } [workspace] members = [ @@ -218,7 +221,7 @@ pallet-authorship = { version = "4.0.0-dev", default-features = false } pallet-babe = { version = "4.0.0-dev", default-features = false } pallet-balances = { version = "4.0.0-dev", default-features = false } pallet-contracts = { version = "4.0.0-dev", default-features = false } -pallet-contracts-primitives = { version = "7.0.0", default-features = false} +pallet-contracts-primitives = { version = "24.0.0", default-features = false} pallet-election-provider-multi-phase = { version = "4.0.0-dev", default-features = false } pallet-grandpa = { version = "4.0.0-dev", default-features = false } pallet-im-online = { version = "4.0.0-dev", default-features = false } @@ -232,36 +235,37 @@ pallet-staking = { version = "4.0.0-dev", default-features = false } pallet-staking-runtime-api = { version = "4.0.0-dev", default-features = false } pallet-staking-reward-curve = { version = "4.0.0-dev", default-features = false } pallet-timestamp = { version = "4.0.0-dev", default-features = false } -scale-info = { version = "2.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.5.0", default-features = false, features = ["derive"] } sp-api = { version = "4.0.0-dev", default-features = false } -sp-application-crypto = { version = "7.0.0", default-features = false } -sp-arithmetic = { version = "6.0.0", default-features = false } +sp-application-crypto = { version = "23.0.0", default-features = false } +sp-arithmetic = { version = "16.0.0", default-features = false } sp-authority-discovery = { version = "4.0.0-dev", default-features = false } sp-block-builder = { version = "4.0.0-dev", default-features = false } sp-blockchain = { version = "4.0.0-dev", default-features = false } sp-consensus = { version = "0.10.0-dev", default-features = false } sp-consensus-babe = { version = "0.10.0-dev", default-features = false } -sp-consensus-slots = { version = "0.10.0-dev", default-features = false } sp-consensus-grandpa = { version = "4.0.0-dev", default-features = false } -sp-keyring = { version = "7.0.0", default-features = false } -sp-keystore = { version = "0.13.0", default-features = false } -sp-core = { version = "7.0.0", default-features = false } -sp-rpc = { version = "6.0.0" } +sp-consensus-slots = { version = "0.10.0-dev", default-features = false } +sp-core = { version = "21.0.0", default-features = false } +sp-debug-derive = { version = "8.0.0", default-features = false } sp-inherents = { version = "4.0.0-dev", default-features = false } -sp-transaction-storage-proof = { version = "4.0.0-dev", default-features = false } -sp-io = { version = "7.0.0", default-features = false } +sp-io = { version = "23.0.0", default-features = false } +sp-keyring = { version = "24.0.0", default-features = false } +sp-keystore = { version = "0.27.0", default-features = false } sp-npos-elections = { version = "4.0.0-dev", default-features = false } sp-offchain = { version = "4.0.0-dev", default-features = false } -sp-runtime = { version = "7.0.0", default-features = false } -sp-runtime-interface = { version = "7.0.0", default-features = false } -sp-timestamp = { version = "4.0.0-dev", default-features = false } +sp-rpc = { version = "6.0.0", default-features = false } +sp-runtime = { version = "24.0.0", default-features = false } +sp-runtime-interface = { version = "17.0.0", default-features = false } sp-session = { version = "4.0.0-dev", default-features = false } sp-staking = { version = "4.0.0-dev", default-features = false } -sp-std = { version = "5.0.0", default-features = false } +sp-std = { version = "8.0.0", default-features = false } +sp-timestamp = { version = "4.0.0-dev", default-features = false } +sp-tracing = { version = "10.0.0", default-features = false } +sp-transaction-storage-proof = { version = "4.0.0-dev", default-features = false } sp-transaction-pool = { version = "4.0.0-dev", default-features = false } -sp-weights = { version = "4.0.0", default-features = false } -sp-version = { version = "5.0.0", default-features = false } -sp-tracing = { version = "6.0.0", default-features = false, features = ["std"] } +sp-weights = { version = "20.0.0", default-features = false } +sp-version = { version = "22.0.0", default-features = false } substrate-test-utils = { version = "4.0.0-dev", default-features = false } substrate-wasm-builder = { version = "5.0.0-dev", default-features = false } substrate-frame-rpc-system = { version = "4.0.0-dev", default-features = false } @@ -283,6 +287,7 @@ sc-consensus-slots = "0.10.0-dev" sc-executor = { version = "0.10.0-dev" } sc-network = "0.10.0-dev" sc-network-common = { version = "0.10.0-dev" } +sc-network-sync = { version = "0.10.0-dev" } sc-rpc = "4.0.0-dev" sc-rpc-api = { version = "0.10.0-dev" } sc-rpc-spec-v2 = { version = "0.10.0-dev" } @@ -291,6 +296,7 @@ sc-telemetry = "4.0.0-dev" sc-transaction-pool = "4.0.0-dev" sc-transaction-pool-api = { version = "4.0.0-dev" } sc-sync-state-rpc = { version = "0.10.0-dev" } +sc-offchain = { version = "4.0.0-dev" } # Crypto rand = { version = "0.8", default-features = false } @@ -337,7 +343,7 @@ polymesh-runtime-testnet = { workspace = true } futures = "0.3.21" jsonrpsee = { version = "0.16.2", features = ["server"] } log = "0.4" -serde = { version = "1.0.136", default-features = false } +serde = { version = "1.0.136", default-features = false, features = ["alloc", "derive"] } serde_json = { version = "1.0", features = ["arbitrary_precision"] } clap = { version = "4.0.9", features = ["derive"] } rustc-hex = "2.1.0" @@ -355,11 +361,14 @@ sc-consensus-slots = { workspace = true } sc-executor = { workspace = true } sc-network = { workspace = true } sc-network-common = { workspace = true } +sc-network-sync = { workspace = true } sc-rpc = { workspace = true } sc-service = { workspace = true } sc-telemetry = { workspace = true } sc-transaction-pool = { workspace = true } +sc-transaction-pool-api = { workspace = true } sc-sync-state-rpc = { workspace = true } +sc-offchain = { workspace = true } grandpa = { package = "sc-consensus-grandpa", version = "0.10.0-dev" } # Substrate diff --git a/pallets/asset/Cargo.toml b/pallets/asset/Cargo.toml index 7d8f436b46..b7e0aea9c0 100644 --- a/pallets/asset/Cargo.toml +++ b/pallets/asset/Cargo.toml @@ -22,7 +22,7 @@ polymesh-runtime-common = { workspace = true, default-features = false } # Other serde = { version = "1.0.104", default-features = false } serde_derive = { version = "1.0.104", optional = true, default-features = false } -serde_json = "1.0.48" +serde_json = { version = "1.0.48", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } hex-literal = "0.2.1" arrayvec = { version = "0.7.1", default-features = false } diff --git a/pallets/group/rpc/Cargo.toml b/pallets/group/rpc/Cargo.toml index 162472de4d..cdf29dc3b3 100644 --- a/pallets/group/rpc/Cargo.toml +++ b/pallets/group/rpc/Cargo.toml @@ -27,7 +27,7 @@ polymesh-primitives = { workspace = true, default-features = false} pallet-group-rpc-runtime-api = { workspace = true, default-features = false } # Others -serde = { version = "1.0.104", features = ["derive"] } +serde = { version = "1.0.104", default-features = false, features = ["derive"] } [features] default = ["std"] diff --git a/pallets/group/rpc/runtime-api/Cargo.toml b/pallets/group/rpc/runtime-api/Cargo.toml index 86030dce5c..86451e45bf 100644 --- a/pallets/group/rpc/runtime-api/Cargo.toml +++ b/pallets/group/rpc/runtime-api/Cargo.toml @@ -9,10 +9,10 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] # Common -polymesh-primitives = { workspace = true, default-features = false} +polymesh-primitives = { workspace = true, default-features = false } # Others -serde = { version = "1.0.104", optional = true, features = ["derive"] } +serde = { version = "1.0.104", default-features = false, optional = true, features = ["derive"] } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } diff --git a/pallets/protocol-fee/rpc/Cargo.toml b/pallets/protocol-fee/rpc/Cargo.toml index 911a1311f4..d1314702b9 100644 --- a/pallets/protocol-fee/rpc/Cargo.toml +++ b/pallets/protocol-fee/rpc/Cargo.toml @@ -25,4 +25,4 @@ polymesh-primitives = { workspace = true, default-features = false } pallet-protocol-fee-rpc-runtime-api = { workspace = true } # General -serde = { version = "1.0.104", features = ["derive"] } +serde = { version = "1.0.104", default-features = false, features = ["derive"] } diff --git a/pallets/protocol-fee/rpc/runtime-api/Cargo.toml b/pallets/protocol-fee/rpc/runtime-api/Cargo.toml index 83e8876d90..1234e0ec0f 100644 --- a/pallets/protocol-fee/rpc/runtime-api/Cargo.toml +++ b/pallets/protocol-fee/rpc/runtime-api/Cargo.toml @@ -12,7 +12,7 @@ polymesh-common-utilities = { workspace = true, default-features = false } polymesh-primitives = { workspace = true, default-features = false } # General -serde = { version = "1.0.104", optional = true, features = ["derive"] } +serde = { version = "1.0.104", default-features = false, optional = true, features = ["derive"] } # Substrate codec = { workspace = true, default-features = false, features = ["derive"] } diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index 69dca205a2..fc9218f8e1 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -51,7 +51,7 @@ smallvec = "1.4.1" lazy_static = "1.4.0" parking_lot = "0.12.0" env_logger = "0.7" -serde_json = '1.0.48' +serde_json = { version = "1.0.48", default-features = false } log = "0.4.8" # Substrate @@ -62,7 +62,7 @@ frame-executive = { workspace = true, default-features = false } frame-system = { workspace = true, default-features = false } frame-system-rpc-runtime-api = { workspace = true, default-features = false } frame-election-provider-support = { workspace = true, default-features = false } -ink_primitives = { git = "https://github.com/paritytech/ink", tag = "v2.1.0", default-features = false } +ink_primitives = { version = "4.3.0", default-features = false } pallet-authority-discovery = { workspace = true, default-features = false } pallet-authorship = { workspace = true, default-features = false } pallet-babe = { workspace = true, default-features = false } diff --git a/pallets/validators/Cargo.toml b/pallets/validators/Cargo.toml index 6bf73470a6..b42c613902 100644 --- a/pallets/validators/Cargo.toml +++ b/pallets/validators/Cargo.toml @@ -13,7 +13,7 @@ pallet-staking = { workspace = true, default-features = false } # General static_assertions = "1.1.0" -serde = { version = "1.0.104", optional = true } +serde = { version = "1.0.104", default-features = false, optional = true } log = "0.4.8" # Substrate @@ -40,7 +40,7 @@ rand_chacha = { version = "0.2", default-features = false, optional = true } [dev-dependencies] pallet-staking-reward-curve = { workspace = true, default-features = false } -sp-tracing = "6.0.0" +sp-tracing = { workspace = true } [features] default = ["std"] diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index f4767fb9be..9ab5272b31 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -31,7 +31,7 @@ pallet-identity = { workspace = true, default-features = false } pallet-transaction-payment = { workspace = true, default-features = false } # Others -serde = { version = "1.0.104", optional = true, features = ["derive"] } +serde = { version = "1.0.104", default-features = false, optional = true, features = ["derive"] } [features] default = ["std"] diff --git a/rpc/runtime-api/Cargo.toml b/rpc/runtime-api/Cargo.toml index 1b045934f7..5d3cc2abe7 100644 --- a/rpc/runtime-api/Cargo.toml +++ b/rpc/runtime-api/Cargo.toml @@ -25,7 +25,7 @@ pallet-identity = { workspace = true, default-features = false } pallet-transaction-payment = { workspace = true, default-features = false } # Other -serde = { version = "1.0.104", optional = true, features = ["derive"] } +serde = { version = "1.0.104", default-features = false, optional = true, features = ["derive"] } [dev-dependencies] serde_json = "1.0.41" From 83b4c611cf862f4bc8d1c3259c36fafd14ebc148 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Mon, 30 Sep 2024 23:26:00 +0800 Subject: [PATCH 11/97] Update WeightMeter --- primitives/src/weight_meter.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/primitives/src/weight_meter.rs b/primitives/src/weight_meter.rs index 7c53a141a6..d230be90ad 100644 --- a/primitives/src/weight_meter.rs +++ b/primitives/src/weight_meter.rs @@ -56,15 +56,15 @@ impl WeightMeter { /// Returns the minimum charge if the consumed weight is less than the minimum, otherwise returns the consumed weight. pub fn consumed(&self) -> Weight { - if self.meter.consumed.ref_time() < self.minimum_charge.ref_time() { + if self.meter.consumed().ref_time() < self.minimum_charge.ref_time() { return self.minimum_charge; } - self.meter.consumed + self.meter.consumed() } /// Returns the maximum weight limit. pub fn limit(&self) -> Weight { - self.meter.limit + self.meter.limit() } /// Consumes the given weight after checking that it can be consumed. Returns an error otherwise. @@ -79,7 +79,7 @@ impl WeightMeter { /// If the new consumed weight is greater than the limit, consumed will be set to limit and an error will be returned. pub fn consume_weight_until_limit(&mut self, weight: Weight) -> Result<(), String> { if !self.meter.check_accrue(weight) { - self.meter.consumed = self.meter.limit; + self.meter.consume(self.meter.remaining()); return Err(String::from("Maximum weight limit exceeded")); } Ok(()) From ce3738eb40f4f6cb44138cf5e08307fd00f04e50 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Mon, 6 Jan 2025 20:48:25 +0800 Subject: [PATCH 12/97] Deprecated GenesisBuild, use BuildGenesisConfig --- pallets/asset/src/checkpoint/mod.rs | 8 ++- pallets/asset/src/lib.rs | 6 +- pallets/bridge/src/lib.rs | 9 ++- pallets/committee/src/lib.rs | 2 +- pallets/compliance-manager/src/lib.rs | 9 ++- pallets/contracts/src/lib.rs | 2 +- pallets/corporate-actions/src/ballot/mod.rs | 9 ++- .../corporate-actions/src/distribution/mod.rs | 9 ++- pallets/corporate-actions/src/lib.rs | 8 ++- pallets/external-agents/src/lib.rs | 9 ++- pallets/group/src/lib.rs | 2 +- pallets/identity/src/lib.rs | 2 +- pallets/multisig/src/lib.rs | 9 ++- pallets/nft/src/lib.rs | 9 ++- pallets/pips/src/lib.rs | 4 +- pallets/portfolio/src/lib.rs | 9 ++- pallets/protocol-fee/src/lib.rs | 8 ++- pallets/runtime/develop/src/runtime.rs | 28 ++++---- pallets/runtime/mainnet/src/runtime.rs | 28 ++++---- pallets/runtime/testnet/src/runtime.rs | 28 ++++---- pallets/runtime/tests/src/asset_test.rs | 2 +- pallets/runtime/tests/src/ext_builder.rs | 23 ++++--- pallets/runtime/tests/src/signed_extra.rs | 7 +- pallets/runtime/tests/src/staking/mock.rs | 29 ++++---- pallets/runtime/tests/src/storage.rs | 28 ++++---- pallets/settlement/src/lib.rs | 9 ++- pallets/statistics/src/lib.rs | 9 ++- pallets/sto/src/lib.rs | 9 ++- pallets/sudo/src/lib.rs | 14 ++-- pallets/sudo/src/mock.rs | 9 +-- pallets/transaction-payment/src/lib.rs | 9 ++- pallets/validators/src/lib.rs | 8 ++- src/chain_spec.rs | 66 +++++++++++-------- 33 files changed, 239 insertions(+), 181 deletions(-) diff --git a/pallets/asset/src/checkpoint/mod.rs b/pallets/asset/src/checkpoint/mod.rs index 1aa398a6cf..dbdebc2d82 100644 --- a/pallets/asset/src/checkpoint/mod.rs +++ b/pallets/asset/src/checkpoint/mod.rs @@ -259,13 +259,15 @@ pub mod pallet { pub(super) type StorageVersion = StorageValue<_, Version, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig { + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { pub schedules_max_complexity: u64, + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::::put(Version::new(2)); diff --git a/pallets/asset/src/lib.rs b/pallets/asset/src/lib.rs index 95657cb2ce..647e9458a1 100644 --- a/pallets/asset/src/lib.rs +++ b/pallets/asset/src/lib.rs @@ -571,15 +571,17 @@ pub mod pallet { #[pallet::genesis_config] #[derive(frame_support::DefaultNoBound)] - pub struct GenesisConfig { + pub struct GenesisConfig { // TODO: Why is serde required here? pub ticker_registration_config: TickerRegistrationConfig, pub reserved_country_currency_codes: Vec, pub asset_metadata: Vec<(AssetMetadataName, AssetMetadataSpec)>, + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig + impl BuildGenesisConfig for GenesisConfig where T: AssetConfig, { diff --git a/pallets/bridge/src/lib.rs b/pallets/bridge/src/lib.rs index 6251bcda40..b4c98c0866 100644 --- a/pallets/bridge/src/lib.rs +++ b/pallets/bridge/src/lib.rs @@ -152,11 +152,14 @@ pub mod pallet { pub(super) type StorageVersion = StorageValue<_, Version, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig {} + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, + } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::::put(Version::new(0)); } diff --git a/pallets/committee/src/lib.rs b/pallets/committee/src/lib.rs index fd56299bec..bf1e5d59d5 100644 --- a/pallets/committee/src/lib.rs +++ b/pallets/committee/src/lib.rs @@ -221,7 +221,7 @@ pub mod pallet { } #[pallet::genesis_build] - impl, I: 'static> GenesisBuild for GenesisConfig { + impl, I: 'static> BuildGenesisConfig for GenesisConfig { fn build(&self) { Members::::put(self.members.clone()); VoteThreshold::::put(self.vote_threshold); diff --git a/pallets/compliance-manager/src/lib.rs b/pallets/compliance-manager/src/lib.rs index fd8286b1db..71761f854b 100644 --- a/pallets/compliance-manager/src/lib.rs +++ b/pallets/compliance-manager/src/lib.rs @@ -233,11 +233,14 @@ pub mod pallet { pub(super) type StorageVersion = StorageValue<_, Version, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig; + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, + } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::::put(Version::new(1)); } diff --git a/pallets/contracts/src/lib.rs b/pallets/contracts/src/lib.rs index 84409b5d19..097a9a0670 100644 --- a/pallets/contracts/src/lib.rs +++ b/pallets/contracts/src/lib.rs @@ -409,7 +409,7 @@ pub mod pallet { } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::::put(Version::new(1)); diff --git a/pallets/corporate-actions/src/ballot/mod.rs b/pallets/corporate-actions/src/ballot/mod.rs index 0493375199..f58584a744 100644 --- a/pallets/corporate-actions/src/ballot/mod.rs +++ b/pallets/corporate-actions/src/ballot/mod.rs @@ -352,11 +352,14 @@ pub mod pallet { pub(super) type StorageVersion = StorageValue<_, Version, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig; + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, + } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::::put(Version::new(1)); } diff --git a/pallets/corporate-actions/src/distribution/mod.rs b/pallets/corporate-actions/src/distribution/mod.rs index 51d689ec3a..4a4100420f 100644 --- a/pallets/corporate-actions/src/distribution/mod.rs +++ b/pallets/corporate-actions/src/distribution/mod.rs @@ -185,11 +185,14 @@ pub mod pallet { pub(crate) type StorageVersion = StorageValue<_, Version, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig; + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, + } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::::put(Version::new(1)); } diff --git a/pallets/corporate-actions/src/lib.rs b/pallets/corporate-actions/src/lib.rs index 202fceb584..e9a3c789a5 100644 --- a/pallets/corporate-actions/src/lib.rs +++ b/pallets/corporate-actions/src/lib.rs @@ -517,13 +517,15 @@ pub mod pallet { pub(super) type StorageVersion = StorageValue<_, Version, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig { + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { pub max_details_length: u32, + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::::put(Version::new(1)); MaxDetailsLength::::put(self.max_details_length); diff --git a/pallets/external-agents/src/lib.rs b/pallets/external-agents/src/lib.rs index 59fa3d7783..885ce532c3 100644 --- a/pallets/external-agents/src/lib.rs +++ b/pallets/external-agents/src/lib.rs @@ -138,11 +138,14 @@ pub mod pallet { pub(super) type StorageVersion = StorageValue<_, Version, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig; + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, + } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::::put(Version::new(1)); } diff --git a/pallets/group/src/lib.rs b/pallets/group/src/lib.rs index 838343ddb1..79b30a7887 100644 --- a/pallets/group/src/lib.rs +++ b/pallets/group/src/lib.rs @@ -218,7 +218,7 @@ pub mod pallet { } #[pallet::genesis_build] - impl, I: 'static> GenesisBuild for GenesisConfig { + impl, I: 'static> BuildGenesisConfig for GenesisConfig { fn build(&self) { use frame_support::traits::InitializeMembers; diff --git a/pallets/identity/src/lib.rs b/pallets/identity/src/lib.rs index 005979449e..5ca69cb3a4 100644 --- a/pallets/identity/src/lib.rs +++ b/pallets/identity/src/lib.rs @@ -548,7 +548,7 @@ pub mod pallet { } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { MultiPurposeNonce::::put(1); StorageVersion::::put(Version::new(7)); diff --git a/pallets/multisig/src/lib.rs b/pallets/multisig/src/lib.rs index f5fc8716bd..68192a3490 100644 --- a/pallets/multisig/src/lib.rs +++ b/pallets/multisig/src/lib.rs @@ -827,11 +827,14 @@ pub mod pallet { pub(super) type StorageVersion = StorageValue<_, Version, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig {} + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, + } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { MultiSigNonce::::put(1); TransactionVersion::::put(0); diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index ab49d48256..6517349864 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -149,11 +149,14 @@ pub mod pallet { pub type CurrentCollectionId = StorageValue<_, NFTCollectionId, OptionQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig; + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, + } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) {} } diff --git a/pallets/pips/src/lib.rs b/pallets/pips/src/lib.rs index 53752ed65d..260f9e947e 100644 --- a/pallets/pips/src/lib.rs +++ b/pallets/pips/src/lib.rs @@ -513,8 +513,8 @@ pub mod pallet { #[pallet::storage] pub(super) type StorageVersion = StorageValue<_, Version, ValueQuery>; - #[derive(frame_support::DefaultNoBound)] #[pallet::genesis_config] + #[derive(frame_support::DefaultNoBound)] pub struct GenesisConfig { pub prune_historical_pips: bool, pub min_proposal_deposit: Balance, @@ -525,7 +525,7 @@ pub mod pallet { } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { PruneHistoricalPips::::put(self.prune_historical_pips); MinimumProposalDeposit::::put(self.min_proposal_deposit); diff --git a/pallets/portfolio/src/lib.rs b/pallets/portfolio/src/lib.rs index 9c7313f373..2e59de1b20 100644 --- a/pallets/portfolio/src/lib.rs +++ b/pallets/portfolio/src/lib.rs @@ -330,11 +330,14 @@ pub mod pallet { storage_migration_ver!(3); #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig; + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, + } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::::put(Version::new(3)); } diff --git a/pallets/protocol-fee/src/lib.rs b/pallets/protocol-fee/src/lib.rs index 81c0d18111..9949a3bea0 100644 --- a/pallets/protocol-fee/src/lib.rs +++ b/pallets/protocol-fee/src/lib.rs @@ -108,14 +108,16 @@ pub mod pallet { pub type Coefficient = StorageValue<_, PosRatio, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig { + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { pub base_fees: Vec<(ProtocolOp, Balance)>, pub coefficient: PosRatio, + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { // Set initial base fees for (op, fee) in &self.base_fees { diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index 3d8c7f0e60..fa869700f3 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -353,8 +353,8 @@ construct_runtime!( NodeBlock = polymesh_primitives::Block, UncheckedExtrinsic = UncheckedExtrinsic { - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, + System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, + Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, Indices: pallet_indices::{Pallet, Call, Storage, Config, Event} = 3, Authorship: pallet_authorship = 4, @@ -388,7 +388,7 @@ construct_runtime!( // UpgradeCommitteeMembership: Genesis config deps: UpgradeCommittee, Identity UpgradeCommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 14, - MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, + MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, Validators: pallet_validators = 16, Staking: pallet_staking = 17, @@ -397,8 +397,8 @@ construct_runtime!( // Session: Genesis config deps: System. Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 19, - AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, - Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, + AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, + Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, Historical: pallet_session_historical::{Pallet} = 22, ImOnline: pallet_im_online::{Pallet, Call, Storage, Event, ValidateUnsigned, Config} = 23, RandomnessCollectiveFlip: pallet_insecure_randomness_collective_flip::{Pallet, Storage} = 24, @@ -407,19 +407,19 @@ construct_runtime!( Sudo: pallet_sudo::{Pallet, Call, Config, Storage, Event} = 25, // Asset: Genesis config deps: Timestamp, - Asset: pallet_asset::{Pallet, Call, Storage, Config, Event} = 26, - CapitalDistribution: pallet_capital_distribution::{Pallet, Call, Storage, Event, Config} = 27, - Checkpoint: pallet_checkpoint::{Pallet, Call, Storage, Event, Config} = 28, + Asset: pallet_asset::{Pallet, Call, Storage, Config, Event} = 26, + CapitalDistribution: pallet_capital_distribution::{Pallet, Call, Storage, Event, Config} = 27, + Checkpoint: pallet_checkpoint::{Pallet, Call, Storage, Event, Config} = 28, ComplianceManager: pallet_compliance_manager::{Pallet, Call, Storage, Event} = 29, - CorporateAction: pallet_corporate_actions::{Pallet, Call, Storage, Event, Config} = 30, - CorporateBallot: pallet_corporate_ballot::{Pallet, Call, Storage, Event, Config} = 31, + CorporateAction: pallet_corporate_actions::{Pallet, Call, Storage, Event, Config} = 30, + CorporateBallot: pallet_corporate_ballot::{Pallet, Call, Storage, Event, Config} = 31, Permissions: pallet_permissions::{Pallet} = 32, Pips: pallet_pips::{Pallet, Call, Storage, Event, Config} = 33, - Portfolio: pallet_portfolio::{Pallet, Call, Storage, Event, Config} = 34, - ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config} = 35, + Portfolio: pallet_portfolio::{Pallet, Call, Storage, Event, Config} = 34, + ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config} = 35, Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event} = 36, - Settlement: pallet_settlement::{Pallet, Call, Storage, Event, Config} = 37, - Statistics: pallet_statistics::{Pallet, Call, Storage, Event, Config} = 38, + Settlement: pallet_settlement::{Pallet, Call, Storage, Event, Config} = 37, + Statistics: pallet_statistics::{Pallet, Call, Storage, Event, Config} = 38, Sto: pallet_sto::{Pallet, Call, Storage, Event} = 39, Treasury: pallet_treasury::{Pallet, Call, Event} = 40, Utility: pallet_utility::{Pallet, Call, Storage, Event} = 41, diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index 9d6f106f98..4cc91caf10 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -301,8 +301,8 @@ construct_runtime!( NodeBlock = polymesh_primitives::Block, UncheckedExtrinsic = UncheckedExtrinsic { - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, + System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, + Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, Indices: pallet_indices::{Pallet, Call, Storage, Config, Event} = 3, Authorship: pallet_authorship = 4, @@ -336,7 +336,7 @@ construct_runtime!( // UpgradeCommitteeMembership: Genesis config deps: UpgradeCommittee, Identity UpgradeCommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 14, - MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, + MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, Validators: pallet_validators = 16, Staking: pallet_staking = 17, @@ -345,8 +345,8 @@ construct_runtime!( // Session: Genesis config deps: System. Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 19, - AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, - Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, + AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, + Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, Historical: pallet_session_historical::{Pallet} = 22, ImOnline: pallet_im_online::{Pallet, Call, Storage, Event, ValidateUnsigned, Config} = 23, RandomnessCollectiveFlip: pallet_insecure_randomness_collective_flip::{Pallet, Storage} = 24, @@ -355,19 +355,19 @@ construct_runtime!( // Sudo: pallet_sudo::{Pallet, Call, Config, Storage, Event} = 25, // Asset: Genesis config deps: Timestamp, - Asset: pallet_asset::{Pallet, Call, Storage, Config, Event} = 26, - CapitalDistribution: pallet_capital_distribution::{Pallet, Call, Storage, Event, Config} = 27, - Checkpoint: pallet_checkpoint::{Pallet, Call, Storage, Event, Config} = 28, + Asset: pallet_asset::{Pallet, Call, Storage, Config, Event} = 26, + CapitalDistribution: pallet_capital_distribution::{Pallet, Call, Storage, Event, Config} = 27, + Checkpoint: pallet_checkpoint::{Pallet, Call, Storage, Event, Config} = 28, ComplianceManager: pallet_compliance_manager::{Pallet, Call, Storage, Event} = 29, - CorporateAction: pallet_corporate_actions::{Pallet, Call, Storage, Event, Config} = 30, - CorporateBallot: pallet_corporate_ballot::{Pallet, Call, Storage, Event, Config} = 31, + CorporateAction: pallet_corporate_actions::{Pallet, Call, Storage, Event, Config} = 30, + CorporateBallot: pallet_corporate_ballot::{Pallet, Call, Storage, Event, Config} = 31, Permissions: pallet_permissions::{Pallet} = 32, Pips: pallet_pips::{Pallet, Call, Storage, Event, Config} = 33, - Portfolio: pallet_portfolio::{Pallet, Call, Storage, Event, Config} = 34, - ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config} = 35, + Portfolio: pallet_portfolio::{Pallet, Call, Storage, Event, Config} = 34, + ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config} = 35, Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event} = 36, - Settlement: pallet_settlement::{Pallet, Call, Storage, Event, Config} = 37, - Statistics: pallet_statistics::{Pallet, Call, Storage, Event, Config} = 38, + Settlement: pallet_settlement::{Pallet, Call, Storage, Event, Config} = 37, + Statistics: pallet_statistics::{Pallet, Call, Storage, Event, Config} = 38, Sto: pallet_sto::{Pallet, Call, Storage, Event} = 39, Treasury: pallet_treasury::{Pallet, Call, Event} = 40, Utility: pallet_utility::{Pallet, Call, Storage, Event} = 41, diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index bc8a44305e..73b6469fb3 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -307,8 +307,8 @@ construct_runtime!( UncheckedExtrinsic = UncheckedExtrinsic { - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, + System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, + Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, Indices: pallet_indices::{Pallet, Call, Storage, Config, Event} = 3, Authorship: pallet_authorship = 4, @@ -342,7 +342,7 @@ construct_runtime!( // UpgradeCommitteeMembership: Genesis config deps: UpgradeCommittee, Identity UpgradeCommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 14, - MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, + MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, Validators: pallet_validators = 16, Staking: pallet_staking = 17, @@ -351,8 +351,8 @@ construct_runtime!( // Session: Genesis config deps: System. Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 19, - AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, - Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, + AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, + Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, Historical: pallet_session_historical::{Pallet} = 22, ImOnline: pallet_im_online::{Pallet, Call, Storage, Event, ValidateUnsigned, Config} = 23, RandomnessCollectiveFlip: pallet_insecure_randomness_collective_flip::{Pallet, Storage} = 24, @@ -361,19 +361,19 @@ construct_runtime!( // Sudo: pallet_sudo::{Pallet, Call, Config, Storage, Event} = 25, // Asset: Genesis config deps: Timestamp, - Asset: pallet_asset::{Pallet, Call, Storage, Config, Event} = 26, - CapitalDistribution: pallet_capital_distribution::{Pallet, Call, Storage, Event, Config} = 27, - Checkpoint: pallet_checkpoint::{Pallet, Call, Storage, Event, Config} = 28, + Asset: pallet_asset::{Pallet, Call, Storage, Config, Event} = 26, + CapitalDistribution: pallet_capital_distribution::{Pallet, Call, Storage, Event, Config} = 27, + Checkpoint: pallet_checkpoint::{Pallet, Call, Storage, Event, Config} = 28, ComplianceManager: pallet_compliance_manager::{Pallet, Call, Storage, Event} = 29, - CorporateAction: pallet_corporate_actions::{Pallet, Call, Storage, Event, Config} = 30, - CorporateBallot: pallet_corporate_ballot::{Pallet, Call, Storage, Event, Config} = 31, + CorporateAction: pallet_corporate_actions::{Pallet, Call, Storage, Event, Config} = 30, + CorporateBallot: pallet_corporate_ballot::{Pallet, Call, Storage, Event, Config} = 31, Permissions: pallet_permissions::{Pallet} = 32, Pips: pallet_pips::{Pallet, Call, Storage, Event, Config} = 33, - Portfolio: pallet_portfolio::{Pallet, Call, Storage, Event, Config} = 34, - ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config} = 35, + Portfolio: pallet_portfolio::{Pallet, Call, Storage, Event, Config} = 34, + ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config} = 35, Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event} = 36, - Settlement: pallet_settlement::{Pallet, Call, Storage, Event, Config} = 37, - Statistics: pallet_statistics::{Pallet, Call, Storage, Event, Config} = 38, + Settlement: pallet_settlement::{Pallet, Call, Storage, Event, Config} = 37, + Statistics: pallet_statistics::{Pallet, Call, Storage, Event, Config} = 38, Sto: pallet_sto::{Pallet, Call, Storage, Event} = 39, Treasury: pallet_treasury::{Pallet, Call, Event} = 40, Utility: pallet_utility::{Pallet, Call, Storage, Event} = 41, diff --git a/pallets/runtime/tests/src/asset_test.rs b/pallets/runtime/tests/src/asset_test.rs index 3c2cd9fc86..925a7fa65e 100644 --- a/pallets/runtime/tests/src/asset_test.rs +++ b/pallets/runtime/tests/src/asset_test.rs @@ -75,7 +75,7 @@ type OffChainSignature = AnySignature; type Origin = ::RuntimeOrigin; type DidRecords = pallet_identity::DidRecords; type Statistics = pallet_statistics::Pallet; -type AssetGenesis = pallet_asset::GenesisConfig; +type AssetGenesis = pallet_asset::GenesisConfig; type System = frame_system::Pallet; type ExternalAgents = pallet_external_agents::Pallet; type EAError = pallet_external_agents::Error; diff --git a/pallets/runtime/tests/src/ext_builder.rs b/pallets/runtime/tests/src/ext_builder.rs index f7183da544..2a9a9e7ac7 100644 --- a/pallets/runtime/tests/src/ext_builder.rs +++ b/pallets/runtime/tests/src/ext_builder.rs @@ -1,6 +1,5 @@ use crate::TestStorage; use frame_support::dispatch::Weight; -use frame_support::pallet_prelude::GenesisBuild; use pallet_asset::{self as asset, TickerRegistrationConfig}; use pallet_balances as balances; use pallet_committee as committee; @@ -14,7 +13,7 @@ use polymesh_primitives::{ }; use sp_io::TestExternalities; use sp_keyring::AccountKeyring; -use sp_runtime::Storage; +use sp_runtime::{BuildStorage, Storage}; use sp_std::prelude::Vec; use sp_std::{cell::RefCell, convert::From, iter}; @@ -326,12 +325,14 @@ impl ExtBuilder { max_ticker_length: 8, registration_length: Some(10000), }; - let genesis = asset::GenesisConfig { + asset::GenesisConfig:: { ticker_registration_config, reserved_country_currency_codes: vec![], asset_metadata: vec![], - }; - GenesisBuild::::assimilate_storage(&genesis, storage).unwrap(); + ..Default::default() + } + .assimilate_storage(storage) + .unwrap(); } /// For each `cdd_providers`: @@ -392,11 +393,13 @@ impl ExtBuilder { } fn build_protocol_fee_genesis(&self, storage: &mut Storage) { - let genesis = pallet_protocol_fee::GenesisConfig { + pallet_protocol_fee::GenesisConfig:: { base_fees: self.protocol_base_fees.0.clone(), coefficient: self.protocol_coefficient, - }; - GenesisBuild::::assimilate_storage(&genesis, storage).unwrap(); + ..Default::default() + } + .assimilate_storage(storage) + .unwrap(); } fn build_pips_genesis(&self, storage: &mut Storage) { @@ -476,8 +479,8 @@ impl ExtBuilder { .collect(); // Create storage and assimilate each genesis. - let mut storage = frame_system::GenesisConfig::default() - .build_storage::() + let mut storage = frame_system::GenesisConfig::::default() + .build_storage() .expect("TestStorage cannot build its own storage"); self.build_identity_genesis(&mut storage, identities); diff --git a/pallets/runtime/tests/src/signed_extra.rs b/pallets/runtime/tests/src/signed_extra.rs index 999941861c..5832e1df79 100644 --- a/pallets/runtime/tests/src/signed_extra.rs +++ b/pallets/runtime/tests/src/signed_extra.rs @@ -12,10 +12,9 @@ use frame_system::{ CheckEra, CheckGenesis, CheckNonce, CheckSpecVersion, CheckTxVersion, CheckWeight, }; use sp_io::TestExternalities; -use sp_runtime::{generic, traits::SignedExtension}; -use sp_std::convert::From; - use sp_keyring::AccountKeyring; +use sp_runtime::{generic, traits::SignedExtension, BuildStorage}; +use sp_std::convert::From; pub fn make_call() -> (::RuntimeCall, usize) { ( @@ -75,7 +74,7 @@ fn make_min_storage() -> Result { .map(|gen_id| gen_id.did) .collect::>(); - let mut storage = frame_system::GenesisConfig::default().build_storage::()?; + let mut storage = frame_system::GenesisConfig::::default().build_storage()?; // Balances pallet_balances::GenesisConfig:: { diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index a703f97775..88fbbdb83e 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -22,8 +22,8 @@ use std::collections::BTreeMap; use frame_election_provider_support::{onchain, SequentialPhragmen}; use frame_support::dispatch::{DispatchResult, Weight}; use frame_support::traits::{ - ConstU32, Currency, EitherOfDiverse, FindAuthor, GenesisBuild, Get, Hooks, Imbalance, - KeyOwnerProofSystem, OnUnbalanced, OneSessionHandler, + ConstU32, Currency, EitherOfDiverse, FindAuthor, Get, Hooks, Imbalance, KeyOwnerProofSystem, + OnUnbalanced, OneSessionHandler, }; use frame_support::weights::constants::RocksDbWeight; use frame_support::{assert_ok, ord_parameter_types, parameter_types}; @@ -33,6 +33,7 @@ use sp_runtime::curve::PiecewiseLinear; use sp_runtime::testing::{Header, TestXt, UintAuthorityId}; use sp_runtime::traits::{IdentityLookup, Zero}; use sp_runtime::transaction_validity::InvalidTransaction; +use sp_runtime::BuildStorage; use sp_runtime::{KeyTypeId, Perbill}; use sp_staking::offence::{DisableStrategy, OffenceDetails, OnOffenceHandler}; use sp_staking::{EraIndex, SessionIndex}; @@ -107,8 +108,8 @@ frame_support::construct_runtime!( NodeBlock = Block, UncheckedExtrinsic = UncheckedExtrinsic, { - System: frame_system::{Pallet, Call, Config, Storage, Event}, - Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned}, + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned}, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, Authorship: pallet_authorship, Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, @@ -118,7 +119,7 @@ frame_support::construct_runtime!( Historical: pallet_session::historical::{Pallet}, Identity: pallet_identity::{Pallet, Call, Storage, Event, Config}, CddServiceProviders: pallet_group::::{Pallet, Call, Storage, Event, Config}, - ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config}, + ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config}, Preimage: pallet_preimage::{Pallet, Call, Storage, Event}, Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event}, Treasury: pallet_treasury::{Pallet, Call, Event}, @@ -756,11 +757,11 @@ impl ExtBuilder { } fn build(self) -> sp_io::TestExternalities { sp_tracing::try_init_simple(); - let mut storage = frame_system::GenesisConfig::default() - .build_storage::() + let mut storage = frame_system::GenesisConfig::::default() + .build_storage() .unwrap(); - let _ = pallet_balances::GenesisConfig:: { + pallet_balances::GenesisConfig:: { balances: vec![ (1, 10 * self.balance_factor), (2, 20 * self.balance_factor), @@ -792,7 +793,7 @@ impl ExtBuilder { (999, 1_000_000_000_000), ], } - .assimilate_storage(&mut storage); + .assimilate_storage(&mut storage).unwrap(); pallet_group::GenesisConfig:: { active_members_limit: u32::MAX, @@ -943,7 +944,7 @@ impl ExtBuilder { stakers.extend(self.stakers) } - let genesis = pallet_validators::GenesisConfig { + pallet_validators::GenesisConfig:: { validators: stakers .iter() .filter_map(|(did, _stash, _controller, _balance, status)| { @@ -956,10 +957,10 @@ impl ExtBuilder { .collect::>(), slashing_allowed_for: self.slashing_allowed_for, ..Default::default() - }; - GenesisBuild::::assimilate_storage(&genesis, &mut storage).unwrap(); + } + .assimilate_storage(&mut storage).unwrap(); - let _ = pallet_staking::GenesisConfig:: { + pallet_staking::GenesisConfig:: { stakers: stakers .iter() .map(|(_, stash, controller, balance, status)| { @@ -979,7 +980,7 @@ impl ExtBuilder { min_validator_bond: self.min_validator_bond, ..Default::default() } - .assimilate_storage(&mut storage); + .assimilate_storage(&mut storage).unwrap(); let _ = pallet_session::GenesisConfig:: { keys: if self.has_stakers { diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index 570c252ace..ef02b32b2d 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -250,8 +250,8 @@ frame_support::construct_runtime!( NodeBlock = polymesh_primitives::Block, UncheckedExtrinsic = UncheckedExtrinsic, { - System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, - Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, + System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, + Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 1, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, Indices: pallet_indices::{Pallet, Call, Storage, Config, Event} = 3, // Authorship: pallet_authorship = 4, @@ -285,7 +285,7 @@ frame_support::construct_runtime!( // UpgradeCommitteeMembership: Genesis config deps: UpgradeCommittee UpgradeCommitteeMembership: pallet_group::::{Pallet, Call, Storage, Event, Config} = 14, - MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, + MultiSig: pallet_multisig::{Pallet, Call, Config, Storage, Event} = 15, Validators: pallet_validators = 16, Staking: pallet_staking = 17, @@ -294,8 +294,8 @@ frame_support::construct_runtime!( // Session: Genesis config deps: System. Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 19, - AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, - Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, + AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 20, + Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event} = 21, Historical: pallet_session_historical::{Pallet} = 22, ImOnline: pallet_im_online::{Pallet, Call, Storage, Event, ValidateUnsigned, Config} = 23, RandomnessCollectiveFlip: pallet_insecure_randomness_collective_flip::{Pallet, Storage} = 24, @@ -304,19 +304,19 @@ frame_support::construct_runtime!( Sudo: pallet_sudo::{Pallet, Call, Config, Storage, Event} = 25, // Asset: Genesis config deps: Timestamp, - Asset: pallet_asset::{Pallet, Call, Storage, Config, Event} = 26, - CapitalDistribution: pallet_capital_distribution::{Pallet, Call, Storage, Event, Config} = 27, - Checkpoint: pallet_checkpoint::{Pallet, Call, Storage, Event, Config} = 28, + Asset: pallet_asset::{Pallet, Call, Storage, Config, Event} = 26, + CapitalDistribution: pallet_capital_distribution::{Pallet, Call, Storage, Event, Config} = 27, + Checkpoint: pallet_checkpoint::{Pallet, Call, Storage, Event, Config} = 28, ComplianceManager: pallet_compliance_manager::{Pallet, Call, Storage, Event} = 29, - CorporateAction: pallet_corporate_actions::{Pallet, Call, Storage, Event, Config} = 30, - CorporateBallot: pallet_corporate_ballot::{Pallet, Call, Storage, Event, Config} = 31, + CorporateAction: pallet_corporate_actions::{Pallet, Call, Storage, Event, Config} = 30, + CorporateBallot: pallet_corporate_ballot::{Pallet, Call, Storage, Event, Config} = 31, Permissions: pallet_permissions::{Pallet, Storage} = 32, Pips: pallet_pips::{Pallet, Call, Storage, Event, Config} = 33, - Portfolio: pallet_portfolio::{Pallet, Call, Storage, Event, Config} = 34, - ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config} = 35, + Portfolio: pallet_portfolio::{Pallet, Call, Storage, Event, Config} = 34, + ProtocolFee: pallet_protocol_fee::{Pallet, Call, Storage, Event, Config} = 35, Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event} = 36, - Settlement: pallet_settlement::{Pallet, Call, Storage, Event, Config} = 37, - Statistics: pallet_statistics::{Pallet, Call, Storage, Event, Config} = 38, + Settlement: pallet_settlement::{Pallet, Call, Storage, Event, Config} = 37, + Statistics: pallet_statistics::{Pallet, Call, Storage, Event, Config} = 38, Sto: pallet_sto::{Pallet, Call, Storage, Event} = 39, Treasury: pallet_treasury::{Pallet, Call, Event} = 40, Utility: pallet_utility::{Pallet, Call, Storage, Event} = 41, diff --git a/pallets/settlement/src/lib.rs b/pallets/settlement/src/lib.rs index 30a2cd5434..f688efe506 100644 --- a/pallets/settlement/src/lib.rs +++ b/pallets/settlement/src/lib.rs @@ -737,11 +737,14 @@ pub mod pallet { pub(super) type StorageVersion = StorageValue<_, Version, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig; + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, + } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { VenueCounter::::put(VenueId(1)); InstructionCounter::::put(InstructionId(1)); diff --git a/pallets/statistics/src/lib.rs b/pallets/statistics/src/lib.rs index ed6097f6dc..d3293a516a 100644 --- a/pallets/statistics/src/lib.rs +++ b/pallets/statistics/src/lib.rs @@ -185,11 +185,14 @@ pub mod pallet { pub(super) type StorageVersion = StorageValue<_, Version, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig; + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, + } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::::put(Version::new(3)); } diff --git a/pallets/sto/src/lib.rs b/pallets/sto/src/lib.rs index 70e6566f81..1841cc5781 100644 --- a/pallets/sto/src/lib.rs +++ b/pallets/sto/src/lib.rs @@ -450,11 +450,14 @@ pub mod pallet { pub(super) type StorageVersion = StorageValue<_, Version, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig; + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, + } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::::put(Version::new(1)); } diff --git a/pallets/sudo/src/lib.rs b/pallets/sudo/src/lib.rs index 40952d5ff6..4a0a063db7 100644 --- a/pallets/sudo/src/lib.rs +++ b/pallets/sudo/src/lib.rs @@ -59,7 +59,7 @@ //! use frame_system::pallet_prelude::*; //! //! #[pallet::pallet] -//! pub struct Pallet(PhantomData); +//! pub struct Pallet(_); //! //! #[pallet::config] //! pub trait Config: frame_system::Config {} @@ -138,7 +138,7 @@ pub mod pallet { } #[pallet::pallet] - pub struct Pallet(PhantomData); + pub struct Pallet(_); #[pallet::call] impl Pallet { @@ -292,20 +292,14 @@ pub mod pallet { pub type Key = StorageValue<_, T::AccountId, OptionQuery>; #[pallet::genesis_config] + #[derive(frame_support::DefaultNoBound)] pub struct GenesisConfig { /// The `AccountId` of the sudo key. pub key: Option, } - #[cfg(feature = "std")] - impl Default for GenesisConfig { - fn default() -> Self { - Self { key: None } - } - } - #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { if let Some(ref key) = self.key { Key::::put(key); diff --git a/pallets/sudo/src/mock.rs b/pallets/sudo/src/mock.rs index bf43e49636..8ad842e0d5 100644 --- a/pallets/sudo/src/mock.rs +++ b/pallets/sudo/src/mock.rs @@ -19,12 +19,13 @@ use super::*; use crate as sudo; -use frame_support::traits::{ConstU32, ConstU64, Contains, GenesisBuild}; +use frame_support::traits::{ConstU32, ConstU64, Contains}; use sp_core::H256; use sp_io; use sp_runtime::{ testing::Header, traits::{BlakeTwo256, IdentityLookup}, + BuildStorage, }; // Logger module to track execution. @@ -108,7 +109,7 @@ frame_support::construct_runtime!( NodeBlock = Block, UncheckedExtrinsic = UncheckedExtrinsic, { - System: frame_system::{Pallet, Call, Config, Storage, Event}, + System: frame_system::{Pallet, Call, Config, Storage, Event}, Sudo: sudo::{Pallet, Call, Config, Storage, Event}, Logger: logger::{Pallet, Call, Storage, Event}, } @@ -165,8 +166,8 @@ pub type LoggerCall = logger::Call; // Build test environment by setting the root `key` for the Genesis. pub fn new_test_ext(root_key: u64) -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::default() - .build_storage::() + let mut t = frame_system::GenesisConfig::::default() + .build_storage() .unwrap(); sudo::GenesisConfig:: { key: Some(root_key), diff --git a/pallets/transaction-payment/src/lib.rs b/pallets/transaction-payment/src/lib.rs index a016b29416..dd85638cb8 100644 --- a/pallets/transaction-payment/src/lib.rs +++ b/pallets/transaction-payment/src/lib.rs @@ -386,25 +386,28 @@ pub mod pallet { pub(super) type StorageVersion = StorageValue<_, Releases, ValueQuery>; #[pallet::genesis_config] - pub struct GenesisConfig { + pub struct GenesisConfig { pub multiplier: Multiplier, #[cfg(feature = "disable_fees")] pub disable_fees: bool, + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, } #[cfg(feature = "std")] - impl Default for GenesisConfig { + impl Default for GenesisConfig { fn default() -> Self { Self { multiplier: MULTIPLIER_DEFAULT_VALUE, #[cfg(feature = "disable_fees")] disable_fees: false, + _config: Default::default(), } } } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { StorageVersion::::put(Releases::V2); NextFeeMultiplier::::put(self.multiplier); diff --git a/pallets/validators/src/lib.rs b/pallets/validators/src/lib.rs index cd61671cf2..3746e5ee76 100644 --- a/pallets/validators/src/lib.rs +++ b/pallets/validators/src/lib.rs @@ -185,15 +185,17 @@ pub mod pallet { pub type ValidatorCommissionCap = StorageValue<_, Perbill, ValueQuery>; #[pallet::genesis_config] - #[derive(Default)] - pub struct GenesisConfig { + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { pub validators: Vec, pub slashing_allowed_for: SlashingSwitch, pub validator_commission_cap: Perbill, + #[serde(skip)] + pub _config: sp_std::marker::PhantomData, } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { SlashingAllowedFor::::put(self.slashing_allowed_for); ValidatorCommissionCap::::put(self.validator_commission_cap); diff --git a/src/chain_spec.rs b/src/chain_spec.rs index f760d0c0b1..fdc0720878 100644 --- a/src/chain_spec.rs +++ b/src/chain_spec.rs @@ -133,6 +133,7 @@ macro_rules! asset { ticker_registration_config: ticker_registration_config(), reserved_country_currency_codes: currency_codes(), asset_metadata: asset_metadata(), + ..Default::default() } }; } @@ -176,6 +177,7 @@ macro_rules! checkpoint { }; pallet_asset::checkpoint::GenesisConfig { schedules_max_complexity: period.complexity(), + ..Default::default() } }}; } @@ -343,9 +345,10 @@ fn dev_genesis_processed_data( (vec![identity], stakers, balances) } -fn frame(wasm_binary: Option<&[u8]>) -> frame_system::GenesisConfig { +fn frame(wasm_binary: Option<&[u8]>) -> frame_system::GenesisConfig { frame_system::GenesisConfig { code: wasm_binary.expect("WASM binary was not generated").to_vec(), + ..Default::default() } } @@ -359,6 +362,7 @@ macro_rules! session { (x.0.clone(), x.0.clone(), sks) }) .collect::>(), + ..Default::default() } }; } @@ -409,6 +413,7 @@ macro_rules! pips { max_pip_skip_count: 2, active_pip_limit: $limit, pending_pip_expiry: $expiry, + ..Default::default() } }; } @@ -418,7 +423,7 @@ macro_rules! group_membership { pallet_group::GenesisConfig { active_members_limit: 20, active_members: vec![$(IdentityId::from($member)),*], - phantom: Default::default(), + ..Default::default() } }; } @@ -427,6 +432,7 @@ macro_rules! corporate_actions { () => { pallet_corporate_actions::GenesisConfig { max_details_length: 1024, + ..Default::default() } }; } @@ -441,7 +447,7 @@ macro_rules! committee { members: vec![], release_coordinator: IdentityId::from($rc), expires_after: <_>::default(), - phantom: Default::default(), + ..Default::default() } }; } @@ -458,6 +464,7 @@ macro_rules! protocol_fee { pallet_protocol_fee::GenesisConfig { base_fees: protocol_fees(), coefficient: PosRatio(1, 1), + ..Default::default() } }; } @@ -473,6 +480,7 @@ macro_rules! polymesh_contracts { .expect("Wrong Length - should be length 4"), upgradable_major: 7, upgradable_owner: $root_key, + ..Default::default() } }; } @@ -494,7 +502,7 @@ pub mod general { use super::*; use polymesh_runtime_develop::{self as rt, constants::time}; - pub type ChainSpec = GenericChainSpec; + pub type ChainSpec = GenericChainSpec; session_keys!(); @@ -504,7 +512,7 @@ pub mod general { other_funded_accounts: Vec, treasury_amount: u128, key_amount: u128, - ) -> rt::runtime::GenesisConfig { + ) -> rt::runtime::RuntimeGenesisConfig { let (identities, stakers, balances) = dev_genesis_processed_data( &initial_authorities, other_funded_accounts, @@ -512,7 +520,7 @@ pub mod general { key_amount, ); - rt::runtime::GenesisConfig { + rt::runtime::RuntimeGenesisConfig { system: frame(rt::WASM_BINARY), asset: asset!(), checkpoint: checkpoint!(), @@ -524,6 +532,7 @@ pub mod general { indices: pallet_indices::GenesisConfig { indices: vec![] }, sudo: pallet_sudo::GenesisConfig { key: Some(root_key.clone()), + ..Default::default() }, session: session!(initial_authorities, session_keys), validators: validators!(stakers, PerThing::from_rational(1u64, 4u64)), @@ -534,6 +543,7 @@ pub mod general { babe: pallet_babe::GenesisConfig { authorities: vec![], epoch_config: Some(rt::runtime::BABE_GENESIS_EPOCH_CONFIG), + ..Default::default() }, grandpa: Default::default(), /* @@ -567,7 +577,7 @@ pub mod general { } } - fn develop_genesis() -> rt::runtime::GenesisConfig { + fn develop_genesis() -> rt::runtime::RuntimeGenesisConfig { genesis( vec![get_authority_keys_from_seed("Alice", false)], seeded_acc_id("Alice"), @@ -586,7 +596,7 @@ pub mod general { name: &str, id: &str, ctype: ChainType, - genesis: impl 'static + Sync + Send + Fn() -> rt::runtime::GenesisConfig, + genesis: impl 'static + Sync + Send + Fn() -> rt::runtime::RuntimeGenesisConfig, ) -> ChainSpec { let props = Some(polymesh_props(42)); ChainSpec::from_genesis( @@ -612,7 +622,7 @@ pub mod general { ) } - fn local_genesis() -> rt::runtime::GenesisConfig { + fn local_genesis() -> rt::runtime::RuntimeGenesisConfig { genesis( vec![ get_authority_keys_from_seed("Alice", false), @@ -640,7 +650,7 @@ pub mod testnet { use super::*; use polymesh_runtime_testnet::{self as rt, constants::time}; - pub type ChainSpec = GenericChainSpec; + pub type ChainSpec = GenericChainSpec; session_keys!(); @@ -649,7 +659,7 @@ pub mod testnet { root_key: AccountId, treasury_amount: u128, key_amount: u128, - ) -> rt::runtime::GenesisConfig { + ) -> rt::runtime::RuntimeGenesisConfig { let (identities, stakers, balances) = genesis_processed_data( &initial_authorities, root_key.clone(), @@ -657,7 +667,7 @@ pub mod testnet { key_amount, ); - rt::runtime::GenesisConfig { + rt::runtime::RuntimeGenesisConfig { system: frame(rt::WASM_BINARY), asset: asset!(), checkpoint: checkpoint!(), @@ -676,6 +686,7 @@ pub mod testnet { babe: pallet_babe::GenesisConfig { authorities: vec![], epoch_config: Some(rt::runtime::BABE_GENESIS_EPOCH_CONFIG), + ..Default::default() }, grandpa: Default::default(), /* @@ -709,7 +720,7 @@ pub mod testnet { } } - fn bootstrap_genesis() -> rt::runtime::GenesisConfig { + fn bootstrap_genesis() -> rt::runtime::RuntimeGenesisConfig { genesis( vec![ get_authority_keys_from_seed("Alice", false), @@ -749,7 +760,7 @@ pub mod testnet { ) } - fn develop_genesis() -> rt::runtime::GenesisConfig { + fn develop_genesis() -> rt::runtime::RuntimeGenesisConfig { genesis( vec![get_authority_keys_from_seed("Alice", false)], seeded_acc_id("Eve"), @@ -775,7 +786,7 @@ pub mod testnet { ) } - fn local_genesis() -> rt::runtime::GenesisConfig { + fn local_genesis() -> rt::runtime::RuntimeGenesisConfig { genesis( vec![ get_authority_keys_from_seed("Alice", false), @@ -810,7 +821,7 @@ pub mod mainnet { use super::*; use polymesh_runtime_mainnet::{self as rt, constants::time}; - pub type ChainSpec = GenericChainSpec; + pub type ChainSpec = GenericChainSpec; session_keys!(); @@ -819,7 +830,7 @@ pub mod mainnet { root_key: AccountId, treasury_amount: u128, key_amount: u128, - ) -> rt::runtime::GenesisConfig { + ) -> rt::runtime::RuntimeGenesisConfig { let (identities, stakers, balances) = genesis_processed_data( &initial_authorities, root_key.clone(), @@ -827,7 +838,7 @@ pub mod mainnet { key_amount, ); - rt::runtime::GenesisConfig { + rt::runtime::RuntimeGenesisConfig { system: frame(rt::WASM_BINARY), asset: asset!(), checkpoint: checkpoint!(), @@ -846,6 +857,7 @@ pub mod mainnet { babe: pallet_babe::GenesisConfig { authorities: vec![], epoch_config: Some(rt::runtime::BABE_GENESIS_EPOCH_CONFIG), + ..Default::default() }, grandpa: Default::default(), /* @@ -879,7 +891,7 @@ pub mod mainnet { } } - fn bootstrap_genesis() -> rt::runtime::GenesisConfig { + fn bootstrap_genesis() -> rt::runtime::RuntimeGenesisConfig { genesis( vec![ get_authority_keys_from_seed("Alice", false), @@ -927,7 +939,7 @@ pub mod mainnet { ) } - fn develop_genesis() -> rt::runtime::GenesisConfig { + fn develop_genesis() -> rt::runtime::RuntimeGenesisConfig { genesis( vec![get_authority_keys_from_seed("Alice", false)], seeded_acc_id("Eve"), @@ -953,7 +965,7 @@ pub mod mainnet { ) } - fn local_genesis() -> rt::runtime::GenesisConfig { + fn local_genesis() -> rt::runtime::RuntimeGenesisConfig { genesis( vec![ get_authority_keys_from_seed("Alice", false), @@ -989,7 +1001,7 @@ pub mod general { use super::*; use polymesh_runtime_develop::{self as rt, constants::time}; - pub type ChainSpec = GenericChainSpec; + pub type ChainSpec = GenericChainSpec; session_keys!(); @@ -998,7 +1010,7 @@ pub mod general { root_key: AccountId, treasury_amount: u128, key_amount: u128, - ) -> rt::runtime::GenesisConfig { + ) -> rt::runtime::RuntimeGenesisConfig { let (identities, stakers, balances) = genesis_processed_data( &initial_authorities, root_key.clone(), @@ -1006,7 +1018,7 @@ pub mod general { key_amount, ); - rt::runtime::GenesisConfig { + rt::runtime::RuntimeGenesisConfig { system: frame(rt::WASM_BINARY), asset: asset!(), checkpoint: checkpoint!(), @@ -1018,6 +1030,7 @@ pub mod general { indices: pallet_indices::GenesisConfig { indices: vec![] }, sudo: pallet_sudo::GenesisConfig { key: Some(root_key.clone()), + ..Default::default() }, session: session!(initial_authorities, session_keys), validators: validators!(stakers, PerThing::zero()), @@ -1028,6 +1041,7 @@ pub mod general { babe: pallet_babe::GenesisConfig { authorities: vec![], epoch_config: Some(rt::runtime::BABE_GENESIS_EPOCH_CONFIG), + ..Default::default() }, grandpa: Default::default(), /* @@ -1061,7 +1075,7 @@ pub mod general { } } - fn develop_genesis() -> rt::runtime::GenesisConfig { + fn develop_genesis() -> rt::runtime::RuntimeGenesisConfig { genesis( vec![get_authority_keys_from_seed("Bob", false)], seeded_acc_id("Alice"), @@ -1087,7 +1101,7 @@ pub mod general { ) } - fn local_genesis() -> rt::runtime::GenesisConfig { + fn local_genesis() -> rt::runtime::RuntimeGenesisConfig { genesis( vec![ get_authority_keys_from_seed("Alice", false), From d1ca93e71698e86eaf9280b611ba437a79366b90 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Mon, 6 Jan 2025 20:35:06 +0800 Subject: [PATCH 13/97] Use Weight::from_parts instead of Weight::from_ref_time --- pallets/runtime/common/src/lib.rs | 6 +- pallets/runtime/develop/src/runtime.rs | 2 +- pallets/runtime/mainnet/src/runtime.rs | 2 +- pallets/runtime/testnet/src/runtime.rs | 2 +- pallets/runtime/tests/src/balances_test.rs | 2 +- pallets/runtime/tests/src/contracts_test.rs | 2 +- pallets/runtime/tests/src/ext_builder.rs | 2 +- pallets/runtime/tests/src/relayer_test.rs | 4 +- pallets/runtime/tests/src/signed_extra.rs | 4 +- pallets/runtime/tests/src/staking/mock.rs | 4 +- pallets/runtime/tests/src/storage.rs | 4 +- .../tests/src/transaction_payment_test.rs | 26 +- pallets/runtime/tests/src/utility_test.rs | 10 +- pallets/sudo/src/lib.rs | 2 +- pallets/sudo/src/tests.rs | 32 +- pallets/transaction-payment/src/lib.rs | 2 +- pallets/transaction-payment/src/types.rs | 4 +- pallets/utility/src/lib.rs | 2 +- pallets/weights/src/frame_system.rs | 22 +- pallets/weights/src/pallet_asset.rs | 90 ++-- pallets/weights/src/pallet_babe.rs | 11 +- pallets/weights/src/pallet_balances.rs | 14 +- .../src/pallet_capital_distribution.rs | 18 +- pallets/weights/src/pallet_checkpoint.rs | 8 +- pallets/weights/src/pallet_committee.rs | 14 +- .../weights/src/pallet_compliance_manager.rs | 48 +- pallets/weights/src/pallet_contracts.rs | 476 +++++++++--------- .../weights/src/pallet_corporate_actions.rs | 36 +- .../weights/src/pallet_corporate_ballot.rs | 20 +- pallets/weights/src/pallet_external_agents.rs | 26 +- pallets/weights/src/pallet_grandpa.rs | 13 +- pallets/weights/src/pallet_group.rs | 16 +- pallets/weights/src/pallet_identity.rs | 62 +-- pallets/weights/src/pallet_im_online.rs | 6 +- pallets/weights/src/pallet_indices.rs | 10 +- pallets/weights/src/pallet_multisig.rs | 50 +- pallets/weights/src/pallet_nft.rs | 20 +- pallets/weights/src/pallet_pips.rs | 48 +- pallets/weights/src/pallet_portfolio.rs | 30 +- pallets/weights/src/pallet_preimage.rs | 30 +- pallets/weights/src/pallet_protocol_fee.rs | 4 +- pallets/weights/src/pallet_relayer.rs | 12 +- pallets/weights/src/pallet_scheduler.rs | 36 +- pallets/weights/src/pallet_session.rs | 4 +- pallets/weights/src/pallet_settlement.rs | 156 +++--- pallets/weights/src/pallet_staking.rs | 90 ++-- pallets/weights/src/pallet_statistics.rs | 50 +- pallets/weights/src/pallet_sto.rs | 18 +- pallets/weights/src/pallet_timestamp.rs | 4 +- pallets/weights/src/pallet_treasury.rs | 6 +- pallets/weights/src/pallet_utility.rs | 20 +- pallets/weights/src/pallet_validators.rs | 20 +- pallets/weights/src/polymesh_contracts.rs | 78 +-- primitives/src/migrate.rs | 4 +- 54 files changed, 842 insertions(+), 840 deletions(-) diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index 09ab7828dc..5dd6af8f88 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -61,7 +61,7 @@ pub const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); /// We allow for 2 seconds of compute with a 6 second average block time. const MAXIMUM_BLOCK_WEIGHT: Weight = - Weight::from_ref_time(WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2)).set_proof_size(u64::MAX); + Weight::from_parts(WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2), u64::MAX); /// Maximum number of iterations for balancing that will be executed in the embedded OCW /// miner of election provider multi phase. @@ -81,9 +81,9 @@ parameter_types! { /// Blocks can be of upto 10 MB in size. pub const MaximumBlockLength: u32 = 10 * 1024 * 1024; /// 20 ms is needed to create a block. - pub const BlockExecutionWeight: Weight = Weight::from_ref_time(WEIGHT_REF_TIME_PER_MILLIS.saturating_mul(20)); + pub const BlockExecutionWeight: Weight = Weight::from_parts(WEIGHT_REF_TIME_PER_MILLIS.saturating_mul(20), 0); /// 0.65 ms is needed to process an empty extrinsic. - pub const ExtrinsicBaseWeight: Weight = Weight::from_ref_time(WEIGHT_REF_TIME_PER_MICROS.saturating_mul(650)); + pub const ExtrinsicBaseWeight: Weight = Weight::from_parts(WEIGHT_REF_TIME_PER_MICROS.saturating_mul(650), 0); /// This implies a 100 POLYX fee per MB of transaction length pub const TransactionByteFee: Balance = 10 * MILLICENTS; /// We want the noop transaction to cost 0.03 POLYX diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index fa869700f3..a67c049a72 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -140,7 +140,7 @@ parameter_types! { // Contracts: pub Schedule: pallet_contracts::Schedule = Default::default(); - pub DeletionWeightLimit: Weight = Weight::from_ref_time(500_000_000_000); + pub DeletionWeightLimit: Weight = Weight::from_parts(500_000_000_000, 0); pub DeletionQueueDepth: u32 = 1024; pub MaxInLen: u32 = 8 * 1024; pub MaxOutLen: u32 = 8 * 1024; diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index 4cc91caf10..13f6506305 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -136,7 +136,7 @@ parameter_types! { // Contracts: pub Schedule: pallet_contracts::Schedule = Default::default(); - pub DeletionWeightLimit: Weight = Weight::from_ref_time(500_000_000_000); + pub DeletionWeightLimit: Weight = Weight::from_parts(500_000_000_000, 0); pub DeletionQueueDepth: u32 = 1024; pub MaxInLen: u32 = 8 * 1024; pub MaxOutLen: u32 = 8 * 1024; diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index 73b6469fb3..c274e1ccba 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -139,7 +139,7 @@ parameter_types! { // Contracts: pub Schedule: pallet_contracts::Schedule = Default::default(); - pub DeletionWeightLimit: Weight = Weight::from_ref_time(500_000_000_000); + pub DeletionWeightLimit: Weight = Weight::from_parts(500_000_000_000, 0); pub DeletionQueueDepth: u32 = 1024; pub MaxInLen: u32 = 8 * 1024; pub MaxOutLen: u32 = 8 * 1024; diff --git a/pallets/runtime/tests/src/balances_test.rs b/pallets/runtime/tests/src/balances_test.rs index 658336b022..4c21878b07 100644 --- a/pallets/runtime/tests/src/balances_test.rs +++ b/pallets/runtime/tests/src/balances_test.rs @@ -22,7 +22,7 @@ type Error = balances::Error; /// create a transaction info struct from weight. Handy to avoid building the whole struct. pub fn info_from_weight(w: u64) -> DispatchInfo { DispatchInfo { - weight: Weight::from_ref_time(w), + weight: Weight::from_parts(w, 0), ..Default::default() } } diff --git a/pallets/runtime/tests/src/contracts_test.rs b/pallets/runtime/tests/src/contracts_test.rs index beec647114..c06ef71f85 100644 --- a/pallets/runtime/tests/src/contracts_test.rs +++ b/pallets/runtime/tests/src/contracts_test.rs @@ -23,7 +23,7 @@ use crate::storage::{root, TestStorage, User}; // and instead focus on the particulars of our contracts pallet. // This includes testing CDD, permissions, and what the chain extension does. -const GAS_LIMIT: Gas = Weight::from_ref_time(100_000_000_000).set_proof_size(3 * 1024 * 1024); +const GAS_LIMIT: Gas = Weight::from_parts(100_000_000_000, 3 * 1024 * 1024); type Asset = pallet_asset::Pallet; type FrameContracts = pallet_contracts::Pallet; diff --git a/pallets/runtime/tests/src/ext_builder.rs b/pallets/runtime/tests/src/ext_builder.rs index 2a9a9e7ac7..cf2be72bce 100644 --- a/pallets/runtime/tests/src/ext_builder.rs +++ b/pallets/runtime/tests/src/ext_builder.rs @@ -123,7 +123,7 @@ thread_local! { impl ExtBuilder { /// Sets the minimum weight for the extrinsic (see also `weight_fee`). pub fn base_weight(mut self, extrinsic_base_weight: u64) -> Self { - self.extrinsic_base_weight = Weight::from_ref_time(extrinsic_base_weight); + self.extrinsic_base_weight = Weight::from_parts(extrinsic_base_weight, 0); self } diff --git a/pallets/runtime/tests/src/relayer_test.rs b/pallets/runtime/tests/src/relayer_test.rs index 30783e6de8..5f1a745f4b 100644 --- a/pallets/runtime/tests/src/relayer_test.rs +++ b/pallets/runtime/tests/src/relayer_test.rs @@ -71,14 +71,14 @@ fn call_relayer_remove_paying_key(user_key: AccountId, paying_key: AccountId) -> /// create a transaction info struct from weight. Handy to avoid building the whole struct. pub fn info_from_weight(w: u64) -> DispatchInfo { DispatchInfo { - weight: Weight::from_ref_time(w), + weight: Weight::from_parts(w, 0), ..Default::default() } } fn post_info_from_weight(w: u64) -> PostDispatchInfo { PostDispatchInfo { - actual_weight: Some(Weight::from_ref_time(w)), + actual_weight: Some(Weight::from_parts(w, 0)), pays_fee: Pays::Yes, } } diff --git a/pallets/runtime/tests/src/signed_extra.rs b/pallets/runtime/tests/src/signed_extra.rs index 5832e1df79..806426afff 100644 --- a/pallets/runtime/tests/src/signed_extra.rs +++ b/pallets/runtime/tests/src/signed_extra.rs @@ -121,7 +121,7 @@ fn normal_tx() -> Result<(), String> { let user = AccountKeyring::Alice.to_account_id(); let (call, len) = make_call(); let info = DispatchInfo { - weight: Weight::from_ref_time(100), + weight: Weight::from_parts(100, 0), ..Default::default() }; @@ -151,7 +151,7 @@ fn operational_tx() -> Result<(), String> { let user: AccountId = AccountKeyring::Alice.public().into(); let (call, len) = make_call(); let info = DispatchInfo { - weight: Weight::from_ref_time(100), + weight: Weight::from_parts(100, 0), class: DispatchClass::Operational, ..Default::default() }; diff --git a/pallets/runtime/tests/src/staking/mock.rs b/pallets/runtime/tests/src/staking/mock.rs index 88fbbdb83e..c852cd4953 100644 --- a/pallets/runtime/tests/src/staking/mock.rs +++ b/pallets/runtime/tests/src/staking/mock.rs @@ -151,10 +151,10 @@ parameter_types! { pub const MaxLocks: u32 = 1024; pub const MaxReserves: u32 = 50; pub const BlockHashCount: u64 = 250; - pub const MaximumBlockWeight: Weight = Weight::from_ref_time(1024); + pub const MaximumBlockWeight: Weight = Weight::from_parts(1024, 0); pub BlockWeights: frame_system::limits::BlockWeights = frame_system::limits::BlockWeights::simple_max( - Weight::from_ref_time(frame_support::weights::constants::WEIGHT_REF_TIME_PER_SECOND * 2) + Weight::from_parts(frame_support::weights::constants::WEIGHT_REF_TIME_PER_SECOND * 2, 0) ); } diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index ef02b32b2d..25bba7f275 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -430,7 +430,7 @@ pub(crate) type Balance = u128; parameter_types! { pub MaximumExtrinsicWeight: Weight = AvailableBlockRatio::get() .saturating_sub(Perbill::from_percent(10)) * MaximumBlockWeight::get(); - pub const BlockExecutionWeight: Weight = Weight::from_ref_time(10); + pub const BlockExecutionWeight: Weight = Weight::from_parts(10, 0); pub TransactionByteFee: Balance = TRANSACTION_BYTE_FEE.with(|v| *v.borrow()); pub ExtrinsicBaseWeight: Weight = EXTRINSIC_BASE_WEIGHT.with(|v| *v.borrow()); pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { @@ -486,7 +486,7 @@ parameter_types! { pub const MaxValueSize: u32 = 16_384; pub Schedule: pallet_contracts::Schedule = Default::default(); - pub DeletionWeightLimit: Weight = Weight::from_ref_time(500_000_000_000); + pub DeletionWeightLimit: Weight = Weight::from_parts(500_000_000_000, 0); pub DeletionQueueDepth: u32 = 1024; pub MaxInLen: u32 = 8 * 1024; pub MaxOutLen: u32 = 8 * 1024; diff --git a/pallets/runtime/tests/src/transaction_payment_test.rs b/pallets/runtime/tests/src/transaction_payment_test.rs index 0f01e1ecb7..38c78fa23f 100644 --- a/pallets/runtime/tests/src/transaction_payment_test.rs +++ b/pallets/runtime/tests/src/transaction_payment_test.rs @@ -36,7 +36,7 @@ type TransactionPayment = pallet_transaction_payment::Pallet; pub fn info_from_weight(w: u64) -> DispatchInfo { // pays_fee: Pays::Yes -- class: DispatchClass::Normal DispatchInfo { - weight: Weight::from_ref_time(w), + weight: Weight::from_parts(w, 0), ..Default::default() } } @@ -47,7 +47,7 @@ fn weight_to_fee(weight: Weight) -> u128 { fn operational_info_from_weight(w: u64) -> DispatchInfo { DispatchInfo { - weight: Weight::from_ref_time(w), + weight: Weight::from_parts(w, 0), class: DispatchClass::Operational, ..Default::default() } @@ -55,7 +55,7 @@ fn operational_info_from_weight(w: u64) -> DispatchInfo { fn post_info_from_weight(w: u64) -> PostDispatchInfo { PostDispatchInfo { - actual_weight: Some(Weight::from_ref_time(w)), + actual_weight: Some(Weight::from_parts(w, 0)), pays_fee: Pays::Yes, } } @@ -186,7 +186,7 @@ fn signed_extension_allows_free_transactions() { // This is a completely free (and thus wholly insecure/DoS-ridden) transaction. let operational_transaction = DispatchInfo { - weight: Weight::from_ref_time(0), + weight: Weight::from_parts(0, 0), class: DispatchClass::Operational, pays_fee: Pays::No, }; @@ -196,7 +196,7 @@ fn signed_extension_allows_free_transactions() { // like a InsecureFreeNormal let free_transaction = DispatchInfo { - weight: Weight::from_ref_time(0), + weight: Weight::from_parts(0, 0), class: DispatchClass::Normal, pays_fee: Pays::Yes, }; @@ -264,14 +264,14 @@ fn compute_fee_works_without_multiplier() { // Tip only, no fees works let dispatch_info = DispatchInfo { - weight: Weight::from_ref_time(0), + weight: Weight::from_parts(0, 0), class: DispatchClass::Operational, pays_fee: Pays::No, }; assert_eq!(TransactionPayment::compute_fee(0, &dispatch_info, 10), 10); // No tip, only base fee works let dispatch_info = DispatchInfo { - weight: Weight::from_ref_time(0), + weight: Weight::from_parts(0, 0), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -288,7 +288,7 @@ fn compute_fee_works_without_multiplier() { ); // Weight fee + base fee works let dispatch_info = DispatchInfo { - weight: Weight::from_ref_time(1000), + weight: Weight::from_parts(1000, 0), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -307,7 +307,7 @@ fn compute_fee_works_with_multiplier() { TransactionPayment::put_next_fee_multiplier(Multiplier::saturating_from_rational(3, 2)); // Base fee is unaffected by multiplier let dispatch_info = DispatchInfo { - weight: Weight::from_ref_time(0), + weight: Weight::from_parts(0, 0), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -315,7 +315,7 @@ fn compute_fee_works_with_multiplier() { // Everything works together :) let dispatch_info = DispatchInfo { - weight: Weight::from_ref_time(123), + weight: Weight::from_parts(123, 0), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -339,7 +339,7 @@ fn compute_fee_works_with_negative_multiplier() { // Base fee is unaffected by multiplier. let dispatch_info = DispatchInfo { - weight: Weight::from_ref_time(0), + weight: Weight::from_parts(0, 0), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -347,7 +347,7 @@ fn compute_fee_works_with_negative_multiplier() { // Everything works together. let dispatch_info = DispatchInfo { - weight: Weight::from_ref_time(123), + weight: Weight::from_parts(123, 0), class: DispatchClass::Operational, pays_fee: Pays::Yes, }; @@ -420,7 +420,7 @@ fn zero_transfer_on_free_transaction() { System::set_block_number(10); let len = 10; let dispatch_info = DispatchInfo { - weight: Weight::from_ref_time(100), + weight: Weight::from_parts(100, 0), pays_fee: Pays::No, class: DispatchClass::Normal, }; diff --git a/pallets/runtime/tests/src/utility_test.rs b/pallets/runtime/tests/src/utility_test.rs index 8281a103d2..39ac99a078 100644 --- a/pallets/runtime/tests/src/utility_test.rs +++ b/pallets/runtime/tests/src/utility_test.rs @@ -486,8 +486,8 @@ fn sub_batch_with_signed_filters() { fn sub_batch_handles_weight_refund() { new_test_ext().execute_with(|| { let charlie = User::new(AccountKeyring::Charlie); - let start_weight = Weight::from_ref_time(100); - let end_weight = Weight::from_ref_time(75); + let start_weight = Weight::from_parts(100, 0); + let end_weight = Weight::from_parts(75, 0); let diff = start_weight - end_weight; let batch_len = 4; @@ -629,8 +629,8 @@ fn sub_batch_all_revert() { fn sub_batch_all_handles_weight_refund() { new_test_ext().execute_with(|| { let charlie = User::new(AccountKeyring::Charlie).balance(10); - let start_weight = Weight::from_ref_time(100); - let end_weight = Weight::from_ref_time(75); + let start_weight = Weight::from_parts(100, 0); + let end_weight = Weight::from_parts(75, 0); let diff = start_weight - end_weight; let batch_len = 4; @@ -776,7 +776,7 @@ fn sub_force_batch_works() { charlie.origin(), vec![ transfer(ferdie.acc(), 5), - call_foobar(true, Weight::from_ref_time(75), None), + call_foobar(true, Weight::from_parts(75, 0), None), transfer(ferdie.acc(), 10), transfer(ferdie.acc(), 5), ] diff --git a/pallets/sudo/src/lib.rs b/pallets/sudo/src/lib.rs index 4a0a063db7..d58f955aef 100644 --- a/pallets/sudo/src/lib.rs +++ b/pallets/sudo/src/lib.rs @@ -124,7 +124,7 @@ pub mod pallet { use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; - pub const MIN_WEIGHT: Weight = Weight::from_ref_time(1_000); + pub const MIN_WEIGHT: Weight = Weight::from_parts(1_000, 0); #[pallet::config] pub trait Config: frame_system::Config { diff --git a/pallets/sudo/src/tests.rs b/pallets/sudo/src/tests.rs index c11f692b38..eb7c986938 100644 --- a/pallets/sudo/src/tests.rs +++ b/pallets/sudo/src/tests.rs @@ -43,7 +43,7 @@ fn sudo_basics() { // A privileged function should work when `sudo` is passed the root `key` as `origin`. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { i: 42, - weight: Weight::from_ref_time(1_000), + weight: Weight::from_parts(1_000, 0), })); assert_ok!(Sudo::sudo(RuntimeOrigin::signed(1), call)); assert_eq!(I32Log::::get(), vec![42i32]); @@ -51,7 +51,7 @@ fn sudo_basics() { // A privileged function should not work when `sudo` is passed a non-root `key` as `origin`. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { i: 42, - weight: Weight::from_ref_time(1_000), + weight: Weight::from_parts(1_000, 0), })); assert_noop!( Sudo::sudo(RuntimeOrigin::signed(2), call), @@ -72,7 +72,7 @@ fn sudo_emits_events_correctly() { // Should emit event to indicate success when called with the root `key` and `call` is `Ok`. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { i: 42, - weight: Weight::from_ref_time(1), + weight: Weight::from_parts(1, 0), })); assert_ok!(Sudo::sudo(RuntimeOrigin::signed(1), call)); System::assert_has_event(TestEvent::Sudo(Event::Sudid { @@ -87,25 +87,25 @@ fn sudo_unchecked_weight_basics() { // A privileged function should work when `sudo` is passed the root `key` as origin. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { i: 42, - weight: Weight::from_ref_time(1_000), + weight: Weight::from_parts(1_000, 0), })); assert_ok!(Sudo::sudo_unchecked_weight( RuntimeOrigin::signed(1), call, - Weight::from_ref_time(1_000) + Weight::from_parts(1_000, 0) )); assert_eq!(I32Log::::get(), vec![42i32]); // A privileged function should not work when called with a non-root `key`. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { i: 42, - weight: Weight::from_ref_time(1_000), + weight: Weight::from_parts(1_000, 0), })); assert_noop!( Sudo::sudo_unchecked_weight( RuntimeOrigin::signed(2), call, - Weight::from_ref_time(1_000) + Weight::from_parts(1_000, 0) ), DispatchErrorWithPostInfo { post_info: Some(MIN_WEIGHT).into(), @@ -118,14 +118,14 @@ fn sudo_unchecked_weight_basics() { // Controls the dispatched weight. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { i: 42, - weight: Weight::from_ref_time(1), + weight: Weight::from_parts(1, 0), })); let sudo_unchecked_weight_call = SudoCall::sudo_unchecked_weight { call, - weight: Weight::from_ref_time(1_000), + weight: Weight::from_parts(1_000, 0), }; let info = sudo_unchecked_weight_call.get_dispatch_info(); - assert_eq!(info.weight, Weight::from_ref_time(1_000)); + assert_eq!(info.weight, Weight::from_parts(1_000, 0)); }); } @@ -138,12 +138,12 @@ fn sudo_unchecked_weight_emits_events_correctly() { // Should emit event to indicate success when called with the root `key` and `call` is `Ok`. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { i: 42, - weight: Weight::from_ref_time(1), + weight: Weight::from_parts(1, 0), })); assert_ok!(Sudo::sudo_unchecked_weight( RuntimeOrigin::signed(1), call, - Weight::from_ref_time(1_000) + Weight::from_parts(1_000, 0) )); System::assert_has_event(TestEvent::Sudo(Event::Sudid { sudo_result: Ok(()), @@ -197,7 +197,7 @@ fn sudo_as_basics() { // A privileged function will not work when passed to `sudo_as`. let call = Box::new(RuntimeCall::Logger(LoggerCall::privileged_i32_log { i: 42, - weight: Weight::from_ref_time(1_000), + weight: Weight::from_parts(1_000, 0), })); assert_ok!(Sudo::sudo_as(RuntimeOrigin::signed(1), 2, call)); assert!(I32Log::::get().is_empty()); @@ -206,7 +206,7 @@ fn sudo_as_basics() { // A non-privileged function should not work when called with a non-root `key`. let call = Box::new(RuntimeCall::Logger(LoggerCall::non_privileged_log { i: 42, - weight: Weight::from_ref_time(1), + weight: Weight::from_parts(1, 0), })); assert_noop!( Sudo::sudo_as(RuntimeOrigin::signed(3), 2, call), @@ -219,7 +219,7 @@ fn sudo_as_basics() { // A non-privileged function will work when passed to `sudo_as` with the root `key`. let call = Box::new(RuntimeCall::Logger(LoggerCall::non_privileged_log { i: 42, - weight: Weight::from_ref_time(1), + weight: Weight::from_parts(1, 0), })); assert_ok!(Sudo::sudo_as(RuntimeOrigin::signed(1), 2, call)); assert_eq!(I32Log::::get(), vec![42i32]); @@ -237,7 +237,7 @@ fn sudo_as_emits_events_correctly() { // A non-privileged function will work when passed to `sudo_as` with the root `key`. let call = Box::new(RuntimeCall::Logger(LoggerCall::non_privileged_log { i: 42, - weight: Weight::from_ref_time(1), + weight: Weight::from_parts(1, 0), })); assert_ok!(Sudo::sudo_as(RuntimeOrigin::signed(1), 2, call)); System::assert_has_event(TestEvent::Sudo(Event::SudoAsDone { diff --git a/pallets/transaction-payment/src/lib.rs b/pallets/transaction-payment/src/lib.rs index dd85638cb8..2c78afb4f6 100644 --- a/pallets/transaction-payment/src/lib.rs +++ b/pallets/transaction-payment/src/lib.rs @@ -475,7 +475,7 @@ pub mod pallet { #[pallet::call] impl Pallet { #[pallet::call_index(0)] - #[pallet::weight(Weight::from_ref_time(25_000_000))] + #[pallet::weight(Weight::from_parts(25_000_000, 0))] pub fn set_disable_fees(origin: OriginFor, _value: bool) -> DispatchResult { frame_system::ensure_root(origin)?; #[cfg(feature = "disable_fees")] diff --git a/pallets/transaction-payment/src/types.rs b/pallets/transaction-payment/src/types.rs index a9dab61535..2a8442d882 100644 --- a/pallets/transaction-payment/src/types.rs +++ b/pallets/transaction-payment/src/types.rs @@ -143,7 +143,7 @@ mod tests { #[test] fn should_serialize_and_deserialize_properly_with_string() { let info = RuntimeDispatchInfo { - weight: Weight::from_ref_time(5), + weight: Weight::from_parts(5, 0), class: DispatchClass::Normal, partial_fee: 1_000_000_u64, }; @@ -164,7 +164,7 @@ mod tests { #[test] fn should_serialize_and_deserialize_properly_large_value() { let info = RuntimeDispatchInfo { - weight: Weight::from_ref_time(5), + weight: Weight::from_parts(5, 0), class: DispatchClass::Normal, partial_fee: u128::max_value(), }; diff --git a/pallets/utility/src/lib.rs b/pallets/utility/src/lib.rs index 1cad7bde13..7f669c3604 100644 --- a/pallets/utility/src/lib.rs +++ b/pallets/utility/src/lib.rs @@ -105,7 +105,7 @@ pub trait WeightInfo { } // POLYMESH: -pub const MIN_WEIGHT: Weight = Weight::from_ref_time(1_000_000); +pub const MIN_WEIGHT: Weight = Weight::from_parts(1_000_000, 0); // POLYMESH: Used for permission checks. type CallPermissions = pallet_permissions::Pallet; diff --git a/pallets/weights/src/frame_system.rs b/pallets/weights/src/frame_system.rs index cfb1c412e9..45e5819588 100644 --- a/pallets/weights/src/frame_system.rs +++ b/pallets/weights/src/frame_system.rs @@ -56,16 +56,16 @@ impl frame_system::WeightInfo for SubstrateWeight { /// The range of component `b` is `[0, 7864320]`. fn remark(b: u32) -> Weight { // Minimum execution time: 2_213 nanoseconds. - Weight::from_ref_time(12_794_737) + Weight::from_parts(12_794_737) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(346).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(346).saturating_mul(b.into())) } /// The range of component `b` is `[0, 7864320]`. fn remark_with_event(b: u32) -> Weight { // Minimum execution time: 7_861 nanoseconds. - Weight::from_ref_time(7_881_000) + Weight::from_parts(7_881_000) // Standard Error: 0 - .saturating_add(Weight::from_ref_time(1_288).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_288).saturating_mul(b.into())) } // Storage: System Digest (r:1 w:1) // Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) @@ -73,7 +73,7 @@ impl frame_system::WeightInfo for SubstrateWeight { // Proof Skipped: unknown `0x3a686561707061676573` (r:0 w:1) fn set_heap_pages() -> Weight { // Minimum execution time: 4_276 nanoseconds. - Weight::from_ref_time(5_388_000) + Weight::from_parts(5_388_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -82,9 +82,9 @@ impl frame_system::WeightInfo for SubstrateWeight { /// The range of component `i` is `[0, 1000]`. fn set_storage(i: u32) -> Weight { // Minimum execution time: 2_403 nanoseconds. - Weight::from_ref_time(2_494_000) + Weight::from_parts(2_494_000) // Standard Error: 1_536 - .saturating_add(Weight::from_ref_time(919_406).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(919_406).saturating_mul(i.into())) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) @@ -92,9 +92,9 @@ impl frame_system::WeightInfo for SubstrateWeight { /// The range of component `i` is `[0, 1000]`. fn kill_storage(i: u32) -> Weight { // Minimum execution time: 2_384 nanoseconds. - Weight::from_ref_time(2_644_000) + Weight::from_parts(2_644_000) // Standard Error: 1_357 - .saturating_add(Weight::from_ref_time(664_809).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(664_809).saturating_mul(i.into())) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) @@ -102,9 +102,9 @@ impl frame_system::WeightInfo for SubstrateWeight { /// The range of component `p` is `[0, 1000]`. fn kill_prefix(p: u32) -> Weight { // Minimum execution time: 4_476 nanoseconds. - Weight::from_ref_time(4_787_000) + Weight::from_parts(4_787_000) // Standard Error: 1_811 - .saturating_add(Weight::from_ref_time(1_200_907).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(1_200_907).saturating_mul(p.into())) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(p.into()))) } diff --git a/pallets/weights/src/pallet_asset.rs b/pallets/weights/src/pallet_asset.rs index 055d766b62..8303292dca 100644 --- a/pallets/weights/src/pallet_asset.rs +++ b/pallets/weights/src/pallet_asset.rs @@ -77,7 +77,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Asset TickersOwnedByUser (max_values: None, max_size: Some(61), added: 2536, mode: MaxEncodedLen) fn register_unique_ticker() -> Weight { // Minimum execution time: 63_726 nanoseconds. - Weight::from_ref_time(67_341_000) + Weight::from_parts(67_341_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(2)) } @@ -105,7 +105,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Asset TickersOwnedByUser (max_values: None, max_size: Some(61), added: 2536, mode: MaxEncodedLen) fn accept_ticker_transfer() -> Weight { // Minimum execution time: 76_204 nanoseconds. - Weight::from_ref_time(87_151_000) + Weight::from_parts(87_151_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(6)) } @@ -143,7 +143,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Asset SecurityTokensOwnedByUser (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) fn accept_asset_ownership_transfer() -> Weight { // Minimum execution time: 98_809 nanoseconds. - Weight::from_ref_time(102_734_000) + Weight::from_parts(102_734_000) .saturating_add(DbWeight::get().reads(14)) .saturating_add(DbWeight::get().writes(9)) } @@ -186,13 +186,13 @@ impl pallet_asset::WeightInfo for SubstrateWeight { /// The range of component `f` is `[1, 128]`. fn create_asset(n: u32, i: u32, f: u32) -> Weight { // Minimum execution time: 90_306 nanoseconds. - Weight::from_ref_time(97_355_043) + Weight::from_parts(97_355_043) // Standard Error: 11_077 - .saturating_add(Weight::from_ref_time(1_694).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(1_694).saturating_mul(n.into())) // Standard Error: 2_763 - .saturating_add(Weight::from_ref_time(81_643).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(81_643).saturating_mul(i.into())) // Standard Error: 11_077 - .saturating_add(Weight::from_ref_time(4_720).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(4_720).saturating_mul(f.into())) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(9)) } @@ -216,7 +216,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) fn freeze() -> Weight { // Minimum execution time: 56_755 nanoseconds. - Weight::from_ref_time(60_942_000) + Weight::from_parts(60_942_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(1)) } @@ -240,7 +240,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Asset Frozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) fn unfreeze() -> Weight { // Minimum execution time: 55_072 nanoseconds. - Weight::from_ref_time(58_598_000) + Weight::from_parts(58_598_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(1)) } @@ -265,9 +265,9 @@ impl pallet_asset::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 128]`. fn rename_asset(n: u32) -> Weight { // Minimum execution time: 51_837 nanoseconds. - Weight::from_ref_time(59_367_944) + Weight::from_parts(59_367_944) // Standard Error: 5_348 - .saturating_add(Weight::from_ref_time(8_093).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(8_093).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -311,7 +311,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset IssuedInFundingRound (max_values: None, max_size: None, mode: Measured) fn issue() -> Weight { // Minimum execution time: 103_145 nanoseconds. - Weight::from_ref_time(108_733_000) + Weight::from_parts(108_733_000) .saturating_add(DbWeight::get().reads(20)) .saturating_add(DbWeight::get().writes(5)) } @@ -349,7 +349,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) fn redeem() -> Weight { // Minimum execution time: 92_739 nanoseconds. - Weight::from_ref_time(95_493_000) + Weight::from_parts(95_493_000) .saturating_add(DbWeight::get().reads(17)) .saturating_add(DbWeight::get().writes(3)) } @@ -371,7 +371,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset Assets (max_values: None, max_size: None, mode: Measured) fn make_divisible() -> Weight { // Minimum execution time: 51_687 nanoseconds. - Weight::from_ref_time(54_251_000) + Weight::from_parts(54_251_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -400,9 +400,9 @@ impl pallet_asset::WeightInfo for SubstrateWeight { /// The range of component `d` is `[1, 64]`. fn add_documents(d: u32) -> Weight { // Minimum execution time: 65_490 nanoseconds. - Weight::from_ref_time(66_672_016) + Weight::from_parts(66_672_016) // Standard Error: 40_736 - .saturating_add(Weight::from_ref_time(11_127_312).saturating_mul(d.into())) + .saturating_add(Weight::from_parts(11_127_312).saturating_mul(d.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(1)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(d.into()))) @@ -426,9 +426,9 @@ impl pallet_asset::WeightInfo for SubstrateWeight { /// The range of component `d` is `[1, 64]`. fn remove_documents(d: u32) -> Weight { // Minimum execution time: 38_247 nanoseconds. - Weight::from_ref_time(41_300_548) + Weight::from_parts(41_300_548) // Standard Error: 23_228 - .saturating_add(Weight::from_ref_time(6_206_348).saturating_mul(d.into())) + .saturating_add(Weight::from_parts(6_206_348).saturating_mul(d.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(d.into()))) } @@ -451,9 +451,9 @@ impl pallet_asset::WeightInfo for SubstrateWeight { /// The range of component `f` is `[1, 128]`. fn set_funding_round(f: u32) -> Weight { // Minimum execution time: 46_250 nanoseconds. - Weight::from_ref_time(53_301_698) + Weight::from_parts(53_301_698) // Standard Error: 3_823 - .saturating_add(Weight::from_ref_time(5_302).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(5_302).saturating_mul(f.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(1)) } @@ -476,9 +476,9 @@ impl pallet_asset::WeightInfo for SubstrateWeight { /// The range of component `i` is `[1, 512]`. fn update_identifiers(i: u32) -> Weight { // Minimum execution time: 48_783 nanoseconds. - Weight::from_ref_time(54_715_281) + Weight::from_parts(54_715_281) // Standard Error: 2_741 - .saturating_add(Weight::from_ref_time(59_353).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(59_353).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(1)) } @@ -514,7 +514,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) fn controller_transfer() -> Weight { // Minimum execution time: 130_507 nanoseconds. - Weight::from_ref_time(170_727_000) + Weight::from_parts(170_727_000) .saturating_add(DbWeight::get().reads(18)) .saturating_add(DbWeight::get().writes(5)) } @@ -535,9 +535,9 @@ impl pallet_asset::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 2048]`. fn register_custom_asset_type(n: u32) -> Weight { // Minimum execution time: 45_658 nanoseconds. - Weight::from_ref_time(51_602_738) + Weight::from_parts(51_602_738) // Standard Error: 702 - .saturating_add(Weight::from_ref_time(7_076).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(7_076).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(3)) } @@ -563,7 +563,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset AssetMetadataValues (max_values: None, max_size: None, mode: Measured) fn set_asset_metadata() -> Weight { // Minimum execution time: 70_646 nanoseconds. - Weight::from_ref_time(76_696_000) + Weight::from_parts(76_696_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(2)) } @@ -587,7 +587,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Asset AssetMetadataValueDetails (max_values: None, max_size: Some(67), added: 2542, mode: MaxEncodedLen) fn set_asset_metadata_details() -> Weight { // Minimum execution time: 62_383 nanoseconds. - Weight::from_ref_time(70_946_000) + Weight::from_parts(70_946_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(1)) } @@ -619,7 +619,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset AssetMetadataLocalSpecs (max_values: None, max_size: None, mode: Measured) fn register_and_set_local_asset_metadata() -> Weight { // Minimum execution time: 100_911 nanoseconds. - Weight::from_ref_time(108_373_000) + Weight::from_parts(108_373_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(6)) } @@ -647,7 +647,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset AssetMetadataLocalSpecs (max_values: None, max_size: None, mode: Measured) fn register_asset_metadata_local_type() -> Weight { // Minimum execution time: 75_253 nanoseconds. - Weight::from_ref_time(81_022_000) + Weight::from_parts(81_022_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(4)) } @@ -661,7 +661,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset AssetMetadataGlobalSpecs (max_values: None, max_size: None, mode: Measured) fn register_asset_metadata_global_type() -> Weight { // Minimum execution time: 34_301 nanoseconds. - Weight::from_ref_time(38_698_000) + Weight::from_parts(38_698_000) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(4)) } @@ -683,7 +683,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) fn update_asset_type() -> Weight { // Minimum execution time: 53_871 nanoseconds. - Weight::from_ref_time(58_538_000) + Weight::from_parts(58_538_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -717,7 +717,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset AssetMetadataLocalSpecs (max_values: None, max_size: None, mode: Measured) fn remove_local_metadata_key() -> Weight { // Minimum execution time: 78_718 nanoseconds. - Weight::from_ref_time(83_675_000) + Weight::from_parts(83_675_000) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(5)) } @@ -743,7 +743,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset AssetMetadataValues (max_values: None, max_size: None, mode: Measured) fn remove_metadata_value() -> Weight { // Minimum execution time: 59_940 nanoseconds. - Weight::from_ref_time(62_985_000) + Weight::from_parts(62_985_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(2)) } @@ -779,7 +779,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) fn base_transfer() -> Weight { // Minimum execution time: 161_463 nanoseconds. - Weight::from_ref_time(173_099_000) + Weight::from_parts(173_099_000) .saturating_add(DbWeight::get().reads(21)) .saturating_add(DbWeight::get().writes(5)) } @@ -787,13 +787,13 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Asset AssetsExemptFromAffirmation (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) fn exempt_asset_affirmation() -> Weight { // Minimum execution time: 11_076 nanoseconds. - Weight::from_ref_time(12_279_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(12_279_000).saturating_add(DbWeight::get().writes(1)) } // Storage: Asset AssetsExemptFromAffirmation (r:0 w:1) // Proof: Asset AssetsExemptFromAffirmation (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) fn remove_asset_affirmation_exemption() -> Weight { // Minimum execution time: 11_106 nanoseconds. - Weight::from_ref_time(11_667_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(11_667_000).saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) @@ -807,7 +807,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Asset PreApprovedAsset (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) fn pre_approve_asset() -> Weight { // Minimum execution time: 35_714 nanoseconds. - Weight::from_ref_time(37_156_000) + Weight::from_parts(37_156_000) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } @@ -823,7 +823,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Asset PreApprovedAsset (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) fn remove_asset_pre_approval() -> Weight { // Minimum execution time: 35_304 nanoseconds. - Weight::from_ref_time(39_419_000) + Weight::from_parts(39_419_000) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } @@ -846,9 +846,9 @@ impl pallet_asset::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 4]`. fn add_mandatory_mediators(n: u32) -> Weight { // Minimum execution time: 50_326 nanoseconds. - Weight::from_ref_time(56_082_500) + Weight::from_parts(56_082_500) // Standard Error: 232_681 - .saturating_add(Weight::from_ref_time(421_968).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(421_968).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -871,9 +871,9 @@ impl pallet_asset::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 4]`. fn remove_mandatory_mediators(n: u32) -> Weight { // Minimum execution time: 51_087 nanoseconds. - Weight::from_ref_time(56_207_675) + Weight::from_parts(56_207_675) // Standard Error: 227_232 - .saturating_add(Weight::from_ref_time(585_583).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(585_583).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -899,7 +899,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Asset AssetIdTicker (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) fn link_ticker_to_asset_id() -> Weight { // Minimum execution time: 64_497 nanoseconds. - Weight::from_ref_time(65_049_000) + Weight::from_parts(65_049_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(3)) } @@ -927,7 +927,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof: Asset AssetIdTicker (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen) fn unlink_ticker_from_asset_id() -> Weight { // Minimum execution time: 65_029 nanoseconds. - Weight::from_ref_time(75_212_000) + Weight::from_parts(75_212_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(4)) } @@ -937,7 +937,7 @@ impl pallet_asset::WeightInfo for SubstrateWeight { // Proof Skipped: Asset AssetMetadataGlobalSpecs (max_values: None, max_size: None, mode: Measured) fn update_global_metadata_spec() -> Weight { // Minimum execution time: 40_751 nanoseconds. - Weight::from_ref_time(44_277_000) + Weight::from_parts(44_277_000) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } diff --git a/pallets/weights/src/pallet_babe.rs b/pallets/weights/src/pallet_babe.rs index 172aa34218..c524b4d514 100644 --- a/pallets/weights/src/pallet_babe.rs +++ b/pallets/weights/src/pallet_babe.rs @@ -40,18 +40,19 @@ impl pallet_babe::WeightInfo for SubstrateWeight { const MAX_NOMINATORS: u64 = 200; // checking membership proof - Weight::from_ref_time(35u64 * WEIGHT_REF_TIME_PER_MICROS) + Weight::from_parts(35u64 * WEIGHT_REF_TIME_PER_MICROS, 0) .saturating_add( - Weight::from_ref_time(175u64 * WEIGHT_REF_TIME_PER_NANOS) + Weight::from_parts(175u64 * WEIGHT_REF_TIME_PER_NANOS, 0) .saturating_mul(validator_count), ) .saturating_add(DbWeight::get().reads(5)) // check equivocation proof - .saturating_add(Weight::from_ref_time(110u64 * WEIGHT_REF_TIME_PER_MICROS)) + .saturating_add(Weight::from_parts(110u64 * WEIGHT_REF_TIME_PER_MICROS, 0)) // report offence - .saturating_add(Weight::from_ref_time(110u64 * WEIGHT_REF_TIME_PER_MICROS)) - .saturating_add(Weight::from_ref_time( + .saturating_add(Weight::from_parts(110u64 * WEIGHT_REF_TIME_PER_MICROS, 0)) + .saturating_add(Weight::from_parts( 25u64 * WEIGHT_REF_TIME_PER_MICROS * MAX_NOMINATORS, + 0, )) .saturating_add(DbWeight::get().reads(14 + 3 * MAX_NOMINATORS)) .saturating_add(DbWeight::get().writes(10 + 3 * MAX_NOMINATORS)) diff --git a/pallets/weights/src/pallet_balances.rs b/pallets/weights/src/pallet_balances.rs index 7e785c17bd..dc3bcbb280 100644 --- a/pallets/weights/src/pallet_balances.rs +++ b/pallets/weights/src/pallet_balances.rs @@ -59,7 +59,7 @@ impl pallet_balances::WeightInfo for SubstrateWeight { // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn transfer() -> Weight { // Minimum execution time: 41_953 nanoseconds. - Weight::from_ref_time(45_729_000) + Weight::from_parts(45_729_000) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(2)) } @@ -69,7 +69,7 @@ impl pallet_balances::WeightInfo for SubstrateWeight { // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn force_transfer() -> Weight { // Minimum execution time: 33_280 nanoseconds. - Weight::from_ref_time(36_064_000) + Weight::from_parts(36_064_000) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(2)) } @@ -77,7 +77,7 @@ impl pallet_balances::WeightInfo for SubstrateWeight { /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer_keep_alive() -> Weight { // Minimum execution time: 28_184 nanoseconds. - Weight::from_ref_time(49_250_000) + Weight::from_parts(49_250_000) .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } @@ -85,7 +85,7 @@ impl pallet_balances::WeightInfo for SubstrateWeight { /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn set_balance_creating() -> Weight { // Minimum execution time: 17_474 nanoseconds. - Weight::from_ref_time(17_777_000) + Weight::from_parts(17_777_000) .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } @@ -93,7 +93,7 @@ impl pallet_balances::WeightInfo for SubstrateWeight { /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn set_balance_killing() -> Weight { // Minimum execution time: 20_962 nanoseconds. - Weight::from_ref_time(21_419_000) + Weight::from_parts(21_419_000) .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } @@ -101,7 +101,7 @@ impl pallet_balances::WeightInfo for SubstrateWeight { /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer_all() -> Weight { // Minimum execution time: 34_878 nanoseconds. - Weight::from_ref_time(35_121_000) + Weight::from_parts(35_121_000) .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } @@ -109,7 +109,7 @@ impl pallet_balances::WeightInfo for SubstrateWeight { /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_unreserve() -> Weight { // Minimum execution time: 16_790 nanoseconds. - Weight::from_ref_time(17_029_000) + Weight::from_parts(17_029_000) .saturating_add(DbWeight::get().reads(1_u64)) .saturating_add(DbWeight::get().writes(1_u64)) } diff --git a/pallets/weights/src/pallet_capital_distribution.rs b/pallets/weights/src/pallet_capital_distribution.rs index bfea6bff88..2b4e584f19 100644 --- a/pallets/weights/src/pallet_capital_distribution.rs +++ b/pallets/weights/src/pallet_capital_distribution.rs @@ -87,7 +87,7 @@ impl pallet_corporate_actions::distribution::WeightInfo for SubstrateWeight { // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) fn distribute() -> Weight { // Minimum execution time: 100_781 nanoseconds. - Weight::from_ref_time(110_085_000) + Weight::from_parts(110_085_000) .saturating_add(DbWeight::get().reads(17)) .saturating_add(DbWeight::get().writes(2)) } @@ -131,11 +131,11 @@ impl pallet_corporate_actions::distribution::WeightInfo for SubstrateWeight { /// The range of component `w` is `[0, 1000]`. fn claim(t: u32, w: u32) -> Weight { // Minimum execution time: 276_114 nanoseconds. - Weight::from_ref_time(279_222_776) + Weight::from_parts(279_222_776) // Standard Error: 1_869 - .saturating_add(Weight::from_ref_time(24_532).saturating_mul(t.into())) + .saturating_add(Weight::from_parts(24_532).saturating_mul(t.into())) // Standard Error: 1_869 - .saturating_add(Weight::from_ref_time(15_303).saturating_mul(w.into())) + .saturating_add(Weight::from_parts(15_303).saturating_mul(w.into())) .saturating_add(DbWeight::get().reads(24)) .saturating_add(DbWeight::get().writes(7)) } @@ -185,11 +185,11 @@ impl pallet_corporate_actions::distribution::WeightInfo for SubstrateWeight { /// The range of component `w` is `[0, 1000]`. fn push_benefit(t: u32, w: u32) -> Weight { // Minimum execution time: 285_929 nanoseconds. - Weight::from_ref_time(290_297_753) + Weight::from_parts(290_297_753) // Standard Error: 2_111 - .saturating_add(Weight::from_ref_time(27_742).saturating_mul(t.into())) + .saturating_add(Weight::from_parts(27_742).saturating_mul(t.into())) // Standard Error: 2_111 - .saturating_add(Weight::from_ref_time(19_877).saturating_mul(w.into())) + .saturating_add(Weight::from_parts(19_877).saturating_mul(w.into())) .saturating_add(DbWeight::get().reads(27)) .saturating_add(DbWeight::get().writes(7)) } @@ -215,7 +215,7 @@ impl pallet_corporate_actions::distribution::WeightInfo for SubstrateWeight { // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) fn reclaim() -> Weight { // Minimum execution time: 72_700 nanoseconds. - Weight::from_ref_time(74_972_000) + Weight::from_parts(74_972_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(2)) } @@ -239,7 +239,7 @@ impl pallet_corporate_actions::distribution::WeightInfo for SubstrateWeight { // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) fn remove_distribution() -> Weight { // Minimum execution time: 69_355 nanoseconds. - Weight::from_ref_time(70_566_000) + Weight::from_parts(70_566_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(2)) } diff --git a/pallets/weights/src/pallet_checkpoint.rs b/pallets/weights/src/pallet_checkpoint.rs index d52e21898e..f47f03a2d6 100644 --- a/pallets/weights/src/pallet_checkpoint.rs +++ b/pallets/weights/src/pallet_checkpoint.rs @@ -57,7 +57,7 @@ impl pallet_asset::checkpoint::WeightInfo for SubstrateWeight { // Proof: Checkpoint SchedulesMaxComplexity (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set_schedules_max_complexity() -> Weight { // Minimum execution time: 8_703 nanoseconds. - Weight::from_ref_time(9_895_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(9_895_000).saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) @@ -83,7 +83,7 @@ impl pallet_asset::checkpoint::WeightInfo for SubstrateWeight { // Proof: Checkpoint Timestamps (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) fn create_checkpoint() -> Weight { // Minimum execution time: 68_784 nanoseconds. - Weight::from_ref_time(70_386_000) + Weight::from_parts(70_386_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -117,7 +117,7 @@ impl pallet_asset::checkpoint::WeightInfo for SubstrateWeight { // Proof: Checkpoint ScheduleRefCount (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) fn create_schedule() -> Weight { // Minimum execution time: 88_713 nanoseconds. - Weight::from_ref_time(93_971_000) + Weight::from_parts(93_971_000) .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().writes(4)) } @@ -143,7 +143,7 @@ impl pallet_asset::checkpoint::WeightInfo for SubstrateWeight { // Proof Skipped: Checkpoint CachedNextCheckpoints (max_values: None, max_size: None, mode: Measured) fn remove_schedule() -> Weight { // Minimum execution time: 82_724 nanoseconds. - Weight::from_ref_time(85_929_000) + Weight::from_parts(85_929_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(3)) } diff --git a/pallets/weights/src/pallet_committee.rs b/pallets/weights/src/pallet_committee.rs index 251775981e..56ccbaf48f 100644 --- a/pallets/weights/src/pallet_committee.rs +++ b/pallets/weights/src/pallet_committee.rs @@ -57,7 +57,7 @@ impl pallet_committee::WeightInfo for SubstrateWeight { // Proof: PolymeshCommittee VoteThreshold (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set_vote_threshold() -> Weight { // Minimum execution time: 7_591 nanoseconds. - Weight::from_ref_time(9_164_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(9_164_000).saturating_add(DbWeight::get().writes(1)) } // Storage: PolymeshCommittee Members (r:1 w:0) // Proof Skipped: PolymeshCommittee Members (max_values: Some(1), max_size: None, mode: Measured) @@ -65,7 +65,7 @@ impl pallet_committee::WeightInfo for SubstrateWeight { // Proof: PolymeshCommittee ReleaseCoordinator (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) fn set_release_coordinator() -> Weight { // Minimum execution time: 39_479 nanoseconds. - Weight::from_ref_time(42_193_000) + Weight::from_parts(42_193_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -73,7 +73,7 @@ impl pallet_committee::WeightInfo for SubstrateWeight { // Proof: PolymeshCommittee ExpiresAfter (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) fn set_expires_after() -> Weight { // Minimum execution time: 7_782 nanoseconds. - Weight::from_ref_time(8_012_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(8_012_000).saturating_add(DbWeight::get().writes(1)) } // Storage: PolymeshCommittee Voting (r:1 w:1) // Proof Skipped: PolymeshCommittee Voting (max_values: None, max_size: None, mode: Measured) @@ -97,7 +97,7 @@ impl pallet_committee::WeightInfo for SubstrateWeight { // Proof: PolymeshCommittee ExpiresAfter (max_values: Some(1), max_size: Some(5), added: 500, mode: MaxEncodedLen) fn vote_or_propose_new_proposal() -> Weight { // Minimum execution time: 175_102 nanoseconds. - Weight::from_ref_time(187_271_000) + Weight::from_parts(187_271_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(4)) } @@ -117,7 +117,7 @@ impl pallet_committee::WeightInfo for SubstrateWeight { // Proof: PolymeshCommittee VoteThreshold (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn vote_or_propose_existing_proposal() -> Weight { // Minimum execution time: 148_123 nanoseconds. - Weight::from_ref_time(167_150_000) + Weight::from_parts(167_150_000) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(1)) } @@ -141,7 +141,7 @@ impl pallet_committee::WeightInfo for SubstrateWeight { // Proof Skipped: PolymeshCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured) fn vote_aye() -> Weight { // Minimum execution time: 277_426 nanoseconds. - Weight::from_ref_time(283_316_000) + Weight::from_parts(283_316_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -161,7 +161,7 @@ impl pallet_committee::WeightInfo for SubstrateWeight { // Proof: PolymeshCommittee VoteThreshold (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn vote_nay() -> Weight { // Minimum execution time: 128_122 nanoseconds. - Weight::from_ref_time(135_624_000) + Weight::from_parts(135_624_000) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(1)) } diff --git a/pallets/weights/src/pallet_compliance_manager.rs b/pallets/weights/src/pallet_compliance_manager.rs index d5a7c012f5..700e5ec40e 100644 --- a/pallets/weights/src/pallet_compliance_manager.rs +++ b/pallets/weights/src/pallet_compliance_manager.rs @@ -59,15 +59,15 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { /// The range of component `d` is `[1, 10]`. fn condition_costs(a: u32, b: u32, c: u32, d: u32) -> Weight { // Minimum execution time: 9_404 nanoseconds. - Weight::from_ref_time(10_015_000) + Weight::from_parts(10_015_000) // Standard Error: 64_392 - .saturating_add(Weight::from_ref_time(4_291_077).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(4_291_077).saturating_mul(a.into())) // Standard Error: 64_392 - .saturating_add(Weight::from_ref_time(312_778).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(312_778).saturating_mul(b.into())) // Standard Error: 64_392 - .saturating_add(Weight::from_ref_time(1_280_895).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_280_895).saturating_mul(c.into())) // Manually set for `d` - .saturating_add(Weight::from_ref_time(721_394).saturating_mul(d.into())) + .saturating_add(Weight::from_parts(721_394, 0).saturating_mul(d.into())) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) @@ -94,9 +94,9 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { /// The range of component `c` is `[1, 6]`. fn add_compliance_requirement(c: u32) -> Weight { // Minimum execution time: 71_377 nanoseconds. - Weight::from_ref_time(76_477_459) + Weight::from_parts(76_477_459) // Standard Error: 117_286 - .saturating_add(Weight::from_ref_time(1_396_847).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_396_847).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(1)) } @@ -118,7 +118,7 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) fn remove_compliance_requirement() -> Weight { // Minimum execution time: 59_800 nanoseconds. - Weight::from_ref_time(61_332_000) + Weight::from_parts(61_332_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -140,7 +140,7 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) fn pause_asset_compliance() -> Weight { // Minimum execution time: 61_663 nanoseconds. - Weight::from_ref_time(62_814_000) + Weight::from_parts(62_814_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -162,7 +162,7 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) fn resume_asset_compliance() -> Weight { // Minimum execution time: 57_146 nanoseconds. - Weight::from_ref_time(64_276_000) + Weight::from_parts(64_276_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -188,7 +188,7 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) fn add_default_trusted_claim_issuer() -> Weight { // Minimum execution time: 65_829 nanoseconds. - Weight::from_ref_time(68_463_000) + Weight::from_parts(68_463_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(1)) } @@ -210,7 +210,7 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Proof Skipped: ComplianceManager TrustedClaimIssuer (max_values: None, max_size: None, mode: Measured) fn remove_default_trusted_claim_issuer() -> Weight { // Minimum execution time: 58_889 nanoseconds. - Weight::from_ref_time(59_650_000) + Weight::from_parts(59_650_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -235,9 +235,9 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { /// The range of component `c` is `[1, 6]`. fn change_compliance_requirement(c: u32) -> Weight { // Minimum execution time: 65_488 nanoseconds. - Weight::from_ref_time(71_228_943) + Weight::from_parts(71_228_943) // Standard Error: 70_542 - .saturating_add(Weight::from_ref_time(1_162_894).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_162_894).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(1)) } @@ -262,9 +262,9 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 2]`. fn replace_asset_compliance(c: u32) -> Weight { // Minimum execution time: 61_573 nanoseconds. - Weight::from_ref_time(67_872_363) + Weight::from_parts(67_872_363) // Standard Error: 193_486 - .saturating_add(Weight::from_ref_time(10_857_275).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(10_857_275).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(1)) } @@ -286,7 +286,7 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { // Proof Skipped: ComplianceManager AssetCompliances (max_values: None, max_size: None, mode: Measured) fn reset_asset_compliance() -> Weight { // Minimum execution time: 51_877 nanoseconds. - Weight::from_ref_time(54_132_000) + Weight::from_parts(54_132_000) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(1)) } @@ -300,11 +300,11 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { /// The range of component `t` is `[0, 1]`. fn is_condition_satisfied(c: u32, t: u32) -> Weight { // Minimum execution time: 18_308 nanoseconds. - Weight::from_ref_time(18_378_000) + Weight::from_parts(18_378_000) // Standard Error: 1_968 - .saturating_add(Weight::from_ref_time(4_064_708).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(4_064_708).saturating_mul(c.into())) // Standard Error: 848_942 - .saturating_add(Weight::from_ref_time(12_185_068).saturating_mul(t.into())) + .saturating_add(Weight::from_parts(12_185_068).saturating_mul(t.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(c.into()))) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(t.into()))) @@ -314,16 +314,16 @@ impl pallet_compliance_manager::WeightInfo for SubstrateWeight { /// The range of component `e` is `[0, 1]`. fn is_identity_condition(e: u32) -> Weight { // Minimum execution time: 781 nanoseconds. - Weight::from_ref_time(1_025_807) + Weight::from_parts(1_025_807) // Standard Error: 54_026 - .saturating_add(Weight::from_ref_time(8_552_192).saturating_mul(e.into())) + .saturating_add(Weight::from_parts(8_552_192).saturating_mul(e.into())) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(e.into()))) } /// The range of component `i` is `[0, 10000]`. fn is_any_requirement_compliant(i: u32) -> Weight { // Minimum execution time: 541 nanoseconds. - Weight::from_ref_time(1_639_578) + Weight::from_parts(1_639_578) // Standard Error: 168 - .saturating_add(Weight::from_ref_time(106_858).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(106_858).saturating_mul(i.into())) } } diff --git a/pallets/weights/src/pallet_contracts.rs b/pallets/weights/src/pallet_contracts.rs index 14e79e8f6e..0157466938 100644 --- a/pallets/weights/src/pallet_contracts.rs +++ b/pallets/weights/src/pallet_contracts.rs @@ -57,16 +57,16 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { // Proof: Contracts DeletionQueue (max_values: Some(1), max_size: Some(133122), added: 133617, mode: Measured) fn on_process_deletion_queue_batch() -> Weight { // Minimum execution time: 3_976 nanoseconds. - Weight::from_ref_time(4_227_000).saturating_add(DbWeight::get().reads(1)) + Weight::from_parts(4_227_000).saturating_add(DbWeight::get().reads(1)) } // Storage: Skipped Metadata (r:0 w:0) // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) /// The range of component `k` is `[0, 1024]`. fn on_initialize_per_trie_key(k: u32) -> Weight { // Minimum execution time: 15_323 nanoseconds. - Weight::from_ref_time(15_714_000) + Weight::from_parts(15_714_000) // Standard Error: 1_653 - .saturating_add(Weight::from_ref_time(1_014_805).saturating_mul(k.into())) + .saturating_add(Weight::from_parts(1_014_805).saturating_mul(k.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(DbWeight::get().writes(1)) @@ -77,9 +77,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `q` is `[0, 1024]`. fn on_initialize_per_queue_item(q: u32) -> Weight { // Minimum execution time: 4_337 nanoseconds. - Weight::from_ref_time(2_663_978) + Weight::from_parts(2_663_978) // Standard Error: 9_706 - .saturating_add(Weight::from_ref_time(1_861_521).saturating_mul(q.into())) + .saturating_add(Weight::from_parts(1_861_521).saturating_mul(q.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -90,9 +90,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 61717]`. fn reinstrument(c: u32) -> Weight { // Minimum execution time: 53_400 nanoseconds. - Weight::from_ref_time(63_326_873) + Weight::from_parts(63_326_873) // Standard Error: 147 - .saturating_add(Weight::from_ref_time(54_195).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(54_195).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -117,9 +117,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 125952]`. fn call_with_code_per_byte(c: u32) -> Weight { // Minimum execution time: 540_821 nanoseconds. - Weight::from_ref_time(577_943_143) + Weight::from_parts(577_943_143) // Standard Error: 174 - .saturating_add(Weight::from_ref_time(32_416).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(32_416).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(4)) } @@ -160,13 +160,13 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 1048576]`. fn instantiate_with_code(c: u32, i: u32, s: u32) -> Weight { // Minimum execution time: 3_878_728 nanoseconds. - Weight::from_ref_time(693_972_051) + Weight::from_parts(693_972_051) // Standard Error: 187 - .saturating_add(Weight::from_ref_time(100_167).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(100_167).saturating_mul(c.into())) // Standard Error: 11 - .saturating_add(Weight::from_ref_time(1_550).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(1_550).saturating_mul(i.into())) // Standard Error: 11 - .saturating_add(Weight::from_ref_time(1_601).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_601).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(16)) .saturating_add(DbWeight::get().writes(15)) } @@ -204,11 +204,11 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 1048576]`. fn instantiate(i: u32, s: u32) -> Weight { // Minimum execution time: 1_998_126 nanoseconds. - Weight::from_ref_time(384_573_388) + Weight::from_parts(384_573_388) // Standard Error: 8 - .saturating_add(Weight::from_ref_time(1_563).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(1_563).saturating_mul(i.into())) // Standard Error: 8 - .saturating_add(Weight::from_ref_time(1_613).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_613).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(16)) .saturating_add(DbWeight::get().writes(12)) } @@ -232,7 +232,7 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) fn call() -> Weight { // Minimum execution time: 245_889 nanoseconds. - Weight::from_ref_time(276_054_000) + Weight::from_parts(276_054_000) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(4)) } @@ -255,9 +255,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 61717]`. fn upload_code(c: u32) -> Weight { // Minimum execution time: 564_797 nanoseconds. - Weight::from_ref_time(598_173_828) + Weight::from_parts(598_173_828) // Standard Error: 298 - .saturating_add(Weight::from_ref_time(98_207).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(98_207).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(4)) } @@ -279,7 +279,7 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { // Proof: Contracts PristineCode (max_values: None, max_size: Some(125988), added: 128463, mode: Measured) fn remove_code() -> Weight { // Minimum execution time: 63_966 nanoseconds. - Weight::from_ref_time(66_920_000) + Weight::from_parts(66_920_000) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(4)) } @@ -291,7 +291,7 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) fn set_code() -> Weight { // Minimum execution time: 37_527 nanoseconds. - Weight::from_ref_time(40_390_000) + Weight::from_parts(40_390_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(6)) } @@ -314,9 +314,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_caller(r: u32) -> Weight { // Minimum execution time: 523_846 nanoseconds. - Weight::from_ref_time(555_283_517) + Weight::from_parts(555_283_517) // Standard Error: 119_283 - .saturating_add(Weight::from_ref_time(34_403_204).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(34_403_204).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -339,9 +339,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_is_contract(r: u32) -> Weight { // Minimum execution time: 527_511 nanoseconds. - Weight::from_ref_time(397_513_912) + Weight::from_parts(397_513_912) // Standard Error: 775_745 - .saturating_add(Weight::from_ref_time(306_459_192).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(306_459_192).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -365,9 +365,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_code_hash(r: u32) -> Weight { // Minimum execution time: 528_202 nanoseconds. - Weight::from_ref_time(397_864_443) + Weight::from_parts(397_864_443) // Standard Error: 816_166 - .saturating_add(Weight::from_ref_time(392_206_177).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(392_206_177).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -391,9 +391,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_own_code_hash(r: u32) -> Weight { // Minimum execution time: 527_782 nanoseconds. - Weight::from_ref_time(556_350_298) + Weight::from_parts(556_350_298) // Standard Error: 285_990 - .saturating_add(Weight::from_ref_time(47_026_771).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(47_026_771).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -416,9 +416,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_caller_is_origin(r: u32) -> Weight { // Minimum execution time: 526_820 nanoseconds. - Weight::from_ref_time(556_093_160) + Weight::from_parts(556_093_160) // Standard Error: 119_283 - .saturating_add(Weight::from_ref_time(10_906_360).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(10_906_360).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -441,9 +441,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_address(r: u32) -> Weight { // Minimum execution time: 527_501 nanoseconds. - Weight::from_ref_time(559_700_423) + Weight::from_parts(559_700_423) // Standard Error: 132_729 - .saturating_add(Weight::from_ref_time(33_770_625).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(33_770_625).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -466,9 +466,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_gas_left(r: u32) -> Weight { // Minimum execution time: 528_742 nanoseconds. - Weight::from_ref_time(564_866_652) + Weight::from_parts(564_866_652) // Standard Error: 127_233 - .saturating_add(Weight::from_ref_time(33_166_665).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(33_166_665).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -491,9 +491,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_balance(r: u32) -> Weight { // Minimum execution time: 523_946 nanoseconds. - Weight::from_ref_time(573_437_181) + Weight::from_parts(573_437_181) // Standard Error: 234_629 - .saturating_add(Weight::from_ref_time(170_616_101).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(170_616_101).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(3)) } @@ -516,9 +516,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_value_transferred(r: u32) -> Weight { // Minimum execution time: 526_238 nanoseconds. - Weight::from_ref_time(559_048_166) + Weight::from_parts(559_048_166) // Standard Error: 172_069 - .saturating_add(Weight::from_ref_time(33_843_592).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(33_843_592).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -541,9 +541,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_minimum_balance(r: u32) -> Weight { // Minimum execution time: 525_448 nanoseconds. - Weight::from_ref_time(553_270_611) + Weight::from_parts(553_270_611) // Standard Error: 139_208 - .saturating_add(Weight::from_ref_time(34_189_121).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(34_189_121).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -566,9 +566,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_block_number(r: u32) -> Weight { // Minimum execution time: 526_119 nanoseconds. - Weight::from_ref_time(559_366_345) + Weight::from_parts(559_366_345) // Standard Error: 108_401 - .saturating_add(Weight::from_ref_time(33_650_874).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(33_650_874).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -591,9 +591,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_now(r: u32) -> Weight { // Minimum execution time: 526_480 nanoseconds. - Weight::from_ref_time(561_503_863) + Weight::from_parts(561_503_863) // Standard Error: 129_832 - .saturating_add(Weight::from_ref_time(33_644_096).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(33_644_096).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -618,9 +618,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_weight_to_fee(r: u32) -> Weight { // Minimum execution time: 522_352 nanoseconds. - Weight::from_ref_time(560_876_274) + Weight::from_parts(560_876_274) // Standard Error: 160_615 - .saturating_add(Weight::from_ref_time(119_618_219).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(119_618_219).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(3)) } @@ -643,9 +643,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_gas(r: u32) -> Weight { // Minimum execution time: 219_520 nanoseconds. - Weight::from_ref_time(242_833_568) + Weight::from_parts(242_833_568) // Standard Error: 99_077 - .saturating_add(Weight::from_ref_time(9_331_370).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(9_331_370).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -668,9 +668,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_input(r: u32) -> Weight { // Minimum execution time: 522_524 nanoseconds. - Weight::from_ref_time(556_526_408) + Weight::from_parts(556_526_408) // Standard Error: 100_774 - .saturating_add(Weight::from_ref_time(24_791_762).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(24_791_762).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -693,9 +693,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 1024]`. fn seal_input_per_kb(n: u32) -> Weight { // Minimum execution time: 554_061 nanoseconds. - Weight::from_ref_time(565_676_259) + Weight::from_parts(565_676_259) // Standard Error: 8_715 - .saturating_add(Weight::from_ref_time(11_865_975).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(11_865_975).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -718,9 +718,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 1]`. fn seal_return(r: u32) -> Weight { // Minimum execution time: 516_345 nanoseconds. - Weight::from_ref_time(545_428_144) + Weight::from_parts(545_428_144) // Standard Error: 5_011_570 - .saturating_add(Weight::from_ref_time(2_163_020).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(2_163_020).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -743,9 +743,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 1024]`. fn seal_return_per_kb(n: u32) -> Weight { // Minimum execution time: 530_936 nanoseconds. - Weight::from_ref_time(556_530_842) + Weight::from_parts(556_530_842) // Standard Error: 3_520 - .saturating_add(Weight::from_ref_time(284_791).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(284_791).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -774,9 +774,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 1]`. fn seal_terminate(r: u32) -> Weight { // Minimum execution time: 522_024 nanoseconds. - Weight::from_ref_time(554_541_096) + Weight::from_parts(554_541_096) // Standard Error: 5_739_935 - .saturating_add(Weight::from_ref_time(73_574_570).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(73_574_570).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((10_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -803,9 +803,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_random(r: u32) -> Weight { // Minimum execution time: 522_093 nanoseconds. - Weight::from_ref_time(564_361_561) + Weight::from_parts(564_361_561) // Standard Error: 199_260 - .saturating_add(Weight::from_ref_time(185_943_661).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(185_943_661).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(3)) } @@ -828,9 +828,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_deposit_event(r: u32) -> Weight { // Minimum execution time: 523_524 nanoseconds. - Weight::from_ref_time(580_562_913) + Weight::from_parts(580_562_913) // Standard Error: 294_841 - .saturating_add(Weight::from_ref_time(321_589_317).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(321_589_317).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -854,11 +854,11 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 16]`. fn seal_deposit_event_per_topic_and_kb(t: u32, n: u32) -> Weight { // Minimum execution time: 1_682_403 nanoseconds. - Weight::from_ref_time(842_877_771) + Weight::from_parts(842_877_771) // Standard Error: 829_052 - .saturating_add(Weight::from_ref_time(252_190_620).saturating_mul(t.into())) + .saturating_add(Weight::from_parts(252_190_620).saturating_mul(t.into())) // Standard Error: 225_983 - .saturating_add(Weight::from_ref_time(56_055_640).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(56_055_640).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(t.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -877,9 +877,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_debug_message(r: u32) -> Weight { // Minimum execution time: 215_783 nanoseconds. - Weight::from_ref_time(238_081_555) + Weight::from_parts(238_081_555) // Standard Error: 101_403 - .saturating_add(Weight::from_ref_time(17_553_904).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(17_553_904).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(3)) } @@ -896,9 +896,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `i` is `[0, 1024]`. fn seal_debug_message_per_kb(i: u32) -> Weight { // Minimum execution time: 629_093 nanoseconds. - Weight::from_ref_time(661_562_743) + Weight::from_parts(661_562_743) // Standard Error: 2_844 - .saturating_add(Weight::from_ref_time(852_358).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(852_358).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(3)) } @@ -907,9 +907,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 10]`. fn seal_set_storage(r: u32) -> Weight { // Minimum execution time: 524_947 nanoseconds. - Weight::from_ref_time(468_265_151) + Weight::from_parts(468_265_151) // Standard Error: 1_137_296 - .saturating_add(Weight::from_ref_time(503_173_868).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(503_173_868).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -920,9 +920,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 8]`. fn seal_set_storage_per_new_kb(n: u32) -> Weight { // Minimum execution time: 730_164 nanoseconds. - Weight::from_ref_time(918_834_147) + Weight::from_parts(918_834_147) // Standard Error: 2_107_295 - .saturating_add(Weight::from_ref_time(105_144_502).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(105_144_502).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(58)) .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(51)) @@ -933,9 +933,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 8]`. fn seal_set_storage_per_old_kb(n: u32) -> Weight { // Minimum execution time: 735_272 nanoseconds. - Weight::from_ref_time(883_668_183) + Weight::from_parts(883_668_183) // Standard Error: 1_549_905 - .saturating_add(Weight::from_ref_time(63_633_258).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(63_633_258).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(57)) .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(50)) @@ -946,9 +946,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 10]`. fn seal_clear_storage(r: u32) -> Weight { // Minimum execution time: 525_779 nanoseconds. - Weight::from_ref_time(470_012_174) + Weight::from_parts(470_012_174) // Standard Error: 1_040_597 - .saturating_add(Weight::from_ref_time(497_818_740).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(497_818_740).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -959,9 +959,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 8]`. fn seal_clear_storage_per_kb(n: u32) -> Weight { // Minimum execution time: 698_547 nanoseconds. - Weight::from_ref_time(845_589_720) + Weight::from_parts(845_589_720) // Standard Error: 1_746_906 - .saturating_add(Weight::from_ref_time(68_116_173).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(68_116_173).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(56)) .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(49)) @@ -972,9 +972,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 10]`. fn seal_get_storage(r: u32) -> Weight { // Minimum execution time: 524_937 nanoseconds. - Weight::from_ref_time(499_235_847) + Weight::from_parts(499_235_847) // Standard Error: 833_562 - .saturating_add(Weight::from_ref_time(419_411_717).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(419_411_717).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -984,9 +984,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 8]`. fn seal_get_storage_per_kb(n: u32) -> Weight { // Minimum execution time: 659_298 nanoseconds. - Weight::from_ref_time(806_624_172) + Weight::from_parts(806_624_172) // Standard Error: 1_558_888 - .saturating_add(Weight::from_ref_time(155_780_234).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(155_780_234).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(57)) .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -996,9 +996,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 10]`. fn seal_contains_storage(r: u32) -> Weight { // Minimum execution time: 524_697 nanoseconds. - Weight::from_ref_time(486_839_180) + Weight::from_parts(486_839_180) // Standard Error: 921_666 - .saturating_add(Weight::from_ref_time(396_312_810).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(396_312_810).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -1008,9 +1008,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 8]`. fn seal_contains_storage_per_kb(n: u32) -> Weight { // Minimum execution time: 658_558 nanoseconds. - Weight::from_ref_time(790_340_713) + Weight::from_parts(790_340_713) // Standard Error: 1_363_405 - .saturating_add(Weight::from_ref_time(60_074_828).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(60_074_828).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(56)) .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -1020,9 +1020,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 10]`. fn seal_take_storage(r: u32) -> Weight { // Minimum execution time: 523_115 nanoseconds. - Weight::from_ref_time(467_995_064) + Weight::from_parts(467_995_064) // Standard Error: 1_162_377 - .saturating_add(Weight::from_ref_time(511_579_790).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(511_579_790).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((80_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -1033,9 +1033,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 8]`. fn seal_take_storage_per_kb(n: u32) -> Weight { // Minimum execution time: 701_593 nanoseconds. - Weight::from_ref_time(861_901_495) + Weight::from_parts(861_901_495) // Standard Error: 1_816_711 - .saturating_add(Weight::from_ref_time(158_033_438).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(158_033_438).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(57)) .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(50)) @@ -1062,9 +1062,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_transfer(r: u32) -> Weight { // Minimum execution time: 528_082 nanoseconds. - Weight::from_ref_time(540_641_000) + Weight::from_parts(540_641_000) // Standard Error: 2_268_145 - .saturating_add(Weight::from_ref_time(2_818_079_627).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(2_818_079_627).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().reads((160_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(4)) @@ -1089,9 +1089,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_call(r: u32) -> Weight { // Minimum execution time: 527_550 nanoseconds. - Weight::from_ref_time(537_526_000) + Weight::from_parts(537_526_000) // Standard Error: 9_328_669 - .saturating_add(Weight::from_ref_time(38_277_163_473).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(38_277_163_473).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().reads((160_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -1116,9 +1116,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_delegate_call(r: u32) -> Weight { // Minimum execution time: 529_014 nanoseconds. - Weight::from_ref_time(543_015_000) + Weight::from_parts(543_015_000) // Standard Error: 10_034_631 - .saturating_add(Weight::from_ref_time(38_085_820_243).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(38_085_820_243).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((150_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -1146,9 +1146,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 1024]`. fn seal_call_per_transfer_clone_kb(t: u32, c: u32) -> Weight { // Minimum execution time: 2_383_715 nanoseconds. - Weight::from_ref_time(13_838_973_067) + Weight::from_parts(13_838_973_067) // Standard Error: 22_196 - .saturating_add(Weight::from_ref_time(12_185_812).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(12_185_812).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(171)) .saturating_add(DbWeight::get().reads((9_u64).saturating_mul(t.into()))) .saturating_add(DbWeight::get().writes(163)) @@ -1186,9 +1186,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_instantiate(r: u32) -> Weight { // Minimum execution time: 532_698 nanoseconds. - Weight::from_ref_time(547_732_000) + Weight::from_parts(547_732_000) // Standard Error: 61_834_234 - .saturating_add(Weight::from_ref_time(53_166_481_809).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(53_166_481_809).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().reads((640_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(5)) @@ -1229,13 +1229,13 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 960]`. fn seal_instantiate_per_transfer_input_salt_kb(t: u32, i: u32, s: u32) -> Weight { // Minimum execution time: 143_039_451 nanoseconds. - Weight::from_ref_time(24_149_373_642) + Weight::from_parts(24_149_373_642) // Standard Error: 107_503_088 - .saturating_add(Weight::from_ref_time(1_573_055_094).saturating_mul(t.into())) + .saturating_add(Weight::from_parts(1_573_055_094).saturating_mul(t.into())) // Standard Error: 170_588 - .saturating_add(Weight::from_ref_time(123_562_194).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(123_562_194).saturating_mul(i.into())) // Standard Error: 170_588 - .saturating_add(Weight::from_ref_time(123_174_665).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(123_174_665).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(495)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(t.into()))) .saturating_add(DbWeight::get().writes(726)) @@ -1260,9 +1260,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 1]`. fn seal_hash_sha2_256(r: u32) -> Weight { // Minimum execution time: 521_092 nanoseconds. - Weight::from_ref_time(549_756_253) + Weight::from_parts(549_756_253) // Standard Error: 4_912_912 - .saturating_add(Weight::from_ref_time(42_145_080).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(42_145_080).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -1285,9 +1285,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 1024]`. fn seal_hash_sha2_256_per_kb(n: u32) -> Weight { // Minimum execution time: 565_038 nanoseconds. - Weight::from_ref_time(570_743_640) + Weight::from_parts(570_743_640) // Standard Error: 75_789 - .saturating_add(Weight::from_ref_time(71_877_485).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(71_877_485).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -1310,9 +1310,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 1]`. fn seal_hash_keccak_256(r: u32) -> Weight { // Minimum execution time: 520_631 nanoseconds. - Weight::from_ref_time(548_856_345) + Weight::from_parts(548_856_345) // Standard Error: 4_774_220 - .saturating_add(Weight::from_ref_time(72_776_321).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(72_776_321).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -1335,9 +1335,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 1024]`. fn seal_hash_keccak_256_per_kb(n: u32) -> Weight { // Minimum execution time: 603_646 nanoseconds. - Weight::from_ref_time(589_857_099) + Weight::from_parts(589_857_099) // Standard Error: 92_340 - .saturating_add(Weight::from_ref_time(233_271_241).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(233_271_241).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -1360,9 +1360,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 1]`. fn seal_hash_blake2_256(r: u32) -> Weight { // Minimum execution time: 521_293 nanoseconds. - Weight::from_ref_time(548_086_915) + Weight::from_parts(548_086_915) // Standard Error: 4_227_483 - .saturating_add(Weight::from_ref_time(44_695_417).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(44_695_417).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -1385,9 +1385,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 1024]`. fn seal_hash_blake2_256_per_kb(n: u32) -> Weight { // Minimum execution time: 584_126 nanoseconds. - Weight::from_ref_time(455_420_818) + Weight::from_parts(455_420_818) // Standard Error: 55_489 - .saturating_add(Weight::from_ref_time(99_687_551).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(99_687_551).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -1410,9 +1410,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 1]`. fn seal_hash_blake2_128(r: u32) -> Weight { // Minimum execution time: 522_604 nanoseconds. - Weight::from_ref_time(553_499_457) + Weight::from_parts(553_499_457) // Standard Error: 4_520_787 - .saturating_add(Weight::from_ref_time(54_118_542).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(54_118_542).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -1435,9 +1435,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 1024]`. fn seal_hash_blake2_128_per_kb(n: u32) -> Weight { // Minimum execution time: 590_276 nanoseconds. - Weight::from_ref_time(446_645_617) + Weight::from_parts(446_645_617) // Standard Error: 32_141 - .saturating_add(Weight::from_ref_time(99_746_726).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(99_746_726).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -1460,9 +1460,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 1]`. fn seal_ecdsa_recover(r: u32) -> Weight { // Minimum execution time: 525_218 nanoseconds. - Weight::from_ref_time(554_737_112) + Weight::from_parts(554_737_112) // Standard Error: 5_073_773 - .saturating_add(Weight::from_ref_time(3_710_895_554).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(3_710_895_554).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -1485,9 +1485,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 1]`. fn seal_ecdsa_to_eth_address(r: u32) -> Weight { // Minimum execution time: 524_447 nanoseconds. - Weight::from_ref_time(553_526_771) + Weight::from_parts(553_526_771) // Standard Error: 4_965_388 - .saturating_add(Weight::from_ref_time(883_719_895).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(883_719_895).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -1512,9 +1512,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_set_code_hash(r: u32) -> Weight { // Minimum execution time: 529_995 nanoseconds. - Weight::from_ref_time(545_868_000) + Weight::from_parts(545_868_000) // Standard Error: 5_045_496 - .saturating_add(Weight::from_ref_time(2_026_142_732).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(2_026_142_732).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((225_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -1539,9 +1539,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_reentrance_count(r: u32) -> Weight { // Minimum execution time: 524_397 nanoseconds. - Weight::from_ref_time(557_472_545) + Weight::from_parts(557_472_545) // Standard Error: 116_920 - .saturating_add(Weight::from_ref_time(11_388_938).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(11_388_938).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -1564,9 +1564,9 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_account_reentrance_count(r: u32) -> Weight { // Minimum execution time: 528_141 nanoseconds. - Weight::from_ref_time(625_286_159) + Weight::from_parts(625_286_159) // Standard Error: 314_371 - .saturating_add(Weight::from_ref_time(25_329_831).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(25_329_831).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -1591,374 +1591,374 @@ impl pallet_contracts::weights::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn seal_instantiation_nonce(r: u32) -> Weight { // Minimum execution time: 535_894 nanoseconds. - Weight::from_ref_time(561_829_766) + Weight::from_parts(561_829_766) // Standard Error: 105_459 - .saturating_add(Weight::from_ref_time(9_173_564).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(9_173_564).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(4)) } /// The range of component `r` is `[0, 50]`. fn instr_i64const(r: u32) -> Weight { // Minimum execution time: 1_352 nanoseconds. - Weight::from_ref_time(2_783_730) + Weight::from_parts(2_783_730) // Standard Error: 7_339 - .saturating_add(Weight::from_ref_time(444_972).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(444_972).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64load(r: u32) -> Weight { // Minimum execution time: 1_903 nanoseconds. - Weight::from_ref_time(3_697_937) + Weight::from_parts(3_697_937) // Standard Error: 11_979 - .saturating_add(Weight::from_ref_time(966_137).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(966_137).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64store(r: u32) -> Weight { // Minimum execution time: 1_973 nanoseconds. - Weight::from_ref_time(2_757_471) + Weight::from_parts(2_757_471) // Standard Error: 13_718 - .saturating_add(Weight::from_ref_time(1_104_431).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(1_104_431).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_select(r: u32) -> Weight { // Minimum execution time: 1_412 nanoseconds. - Weight::from_ref_time(3_181_079) + Weight::from_parts(3_181_079) // Standard Error: 10_936 - .saturating_add(Weight::from_ref_time(955_369).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(955_369).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_if(r: u32) -> Weight { // Minimum execution time: 1_412 nanoseconds. - Weight::from_ref_time(2_324_194) + Weight::from_parts(2_324_194) // Standard Error: 25_130 - .saturating_add(Weight::from_ref_time(1_440_799).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(1_440_799).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_br(r: u32) -> Weight { // Minimum execution time: 1_372 nanoseconds. - Weight::from_ref_time(3_283_270) + Weight::from_parts(3_283_270) // Standard Error: 8_465 - .saturating_add(Weight::from_ref_time(544_421).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(544_421).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_br_if(r: u32) -> Weight { // Minimum execution time: 1_382 nanoseconds. - Weight::from_ref_time(3_338_465) + Weight::from_parts(3_338_465) // Standard Error: 9_756 - .saturating_add(Weight::from_ref_time(816_473).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(816_473).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_br_table(r: u32) -> Weight { // Minimum execution time: 1_382 nanoseconds. - Weight::from_ref_time(3_177_028) + Weight::from_parts(3_177_028) // Standard Error: 10_463 - .saturating_add(Weight::from_ref_time(1_035_963).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(1_035_963).saturating_mul(r.into())) } /// The range of component `e` is `[1, 256]`. fn instr_br_table_per_entry(e: u32) -> Weight { // Minimum execution time: 3_225 nanoseconds. - Weight::from_ref_time(4_194_754) + Weight::from_parts(4_194_754) // Standard Error: 558 - .saturating_add(Weight::from_ref_time(4_369).saturating_mul(e.into())) + .saturating_add(Weight::from_parts(4_369).saturating_mul(e.into())) } /// The range of component `r` is `[0, 50]`. fn instr_call(r: u32) -> Weight { // Minimum execution time: 1_352 nanoseconds. - Weight::from_ref_time(1_834_243) + Weight::from_parts(1_834_243) // Standard Error: 14_134 - .saturating_add(Weight::from_ref_time(3_373_361).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(3_373_361).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_call_indirect(r: u32) -> Weight { // Minimum execution time: 1_823 nanoseconds. - Weight::from_ref_time(3_998_489) + Weight::from_parts(3_998_489) // Standard Error: 19_496 - .saturating_add(Weight::from_ref_time(5_744_104).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(5_744_104).saturating_mul(r.into())) } /// The range of component `p` is `[0, 128]`. fn instr_call_indirect_per_param(p: u32) -> Weight { // Minimum execution time: 7_912 nanoseconds. - Weight::from_ref_time(10_851_572) + Weight::from_parts(10_851_572) // Standard Error: 3_777 - .saturating_add(Weight::from_ref_time(181_526).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(181_526).saturating_mul(p.into())) } /// The range of component `l` is `[0, 1024]`. fn instr_call_per_local(l: u32) -> Weight { // Minimum execution time: 4_396 nanoseconds. - Weight::from_ref_time(4_797_570) + Weight::from_parts(4_797_570) // Standard Error: 921 - .saturating_add(Weight::from_ref_time(115_290).saturating_mul(l.into())) + .saturating_add(Weight::from_parts(115_290).saturating_mul(l.into())) } /// The range of component `r` is `[0, 50]`. fn instr_local_get(r: u32) -> Weight { // Minimum execution time: 3_966 nanoseconds. - Weight::from_ref_time(5_462_134) + Weight::from_parts(5_462_134) // Standard Error: 7_223 - .saturating_add(Weight::from_ref_time(309_078).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(309_078).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_local_set(r: u32) -> Weight { // Minimum execution time: 3_946 nanoseconds. - Weight::from_ref_time(4_964_072) + Weight::from_parts(4_964_072) // Standard Error: 7_086 - .saturating_add(Weight::from_ref_time(334_457).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(334_457).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_local_tee(r: u32) -> Weight { // Minimum execution time: 3_936 nanoseconds. - Weight::from_ref_time(6_557_158) + Weight::from_parts(6_557_158) // Standard Error: 9_590 - .saturating_add(Weight::from_ref_time(465_847).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(465_847).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_global_get(r: u32) -> Weight { // Minimum execution time: 1_622 nanoseconds. - Weight::from_ref_time(3_553_697) + Weight::from_parts(3_553_697) // Standard Error: 9_162 - .saturating_add(Weight::from_ref_time(872_644).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(872_644).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_global_set(r: u32) -> Weight { // Minimum execution time: 1_603 nanoseconds. - Weight::from_ref_time(3_406_118) + Weight::from_parts(3_406_118) // Standard Error: 8_451 - .saturating_add(Weight::from_ref_time(896_599).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(896_599).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_memory_current(r: u32) -> Weight { // Minimum execution time: 1_993 nanoseconds. - Weight::from_ref_time(3_550_590) + Weight::from_parts(3_550_590) // Standard Error: 8_487 - .saturating_add(Weight::from_ref_time(677_960).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(677_960).saturating_mul(r.into())) } /// The range of component `r` is `[0, 1]`. fn instr_memory_grow(r: u32) -> Weight { // Minimum execution time: 1_382 nanoseconds. - Weight::from_ref_time(1_782_096) + Weight::from_parts(1_782_096) // Standard Error: 936_282 - .saturating_add(Weight::from_ref_time(296_916_570).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(296_916_570).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64clz(r: u32) -> Weight { // Minimum execution time: 1_422 nanoseconds. - Weight::from_ref_time(3_246_580) + Weight::from_parts(3_246_580) // Standard Error: 8_507 - .saturating_add(Weight::from_ref_time(750_957).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(750_957).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64ctz(r: u32) -> Weight { // Minimum execution time: 1_412 nanoseconds. - Weight::from_ref_time(3_370_936) + Weight::from_parts(3_370_936) // Standard Error: 7_962 - .saturating_add(Weight::from_ref_time(743_303).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(743_303).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64popcnt(r: u32) -> Weight { // Minimum execution time: 1_362 nanoseconds. - Weight::from_ref_time(3_312_128) + Weight::from_parts(3_312_128) // Standard Error: 8_706 - .saturating_add(Weight::from_ref_time(731_242).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(731_242).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64eqz(r: u32) -> Weight { // Minimum execution time: 1_392 nanoseconds. - Weight::from_ref_time(3_198_835) + Weight::from_parts(3_198_835) // Standard Error: 7_976 - .saturating_add(Weight::from_ref_time(745_980).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(745_980).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64extendsi32(r: u32) -> Weight { // Minimum execution time: 1_392 nanoseconds. - Weight::from_ref_time(3_585_237) + Weight::from_parts(3_585_237) // Standard Error: 8_560 - .saturating_add(Weight::from_ref_time(736_239).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(736_239).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64extendui32(r: u32) -> Weight { // Minimum execution time: 1_392 nanoseconds. - Weight::from_ref_time(3_206_681) + Weight::from_parts(3_206_681) // Standard Error: 8_505 - .saturating_add(Weight::from_ref_time(763_525).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(763_525).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i32wrapi64(r: u32) -> Weight { // Minimum execution time: 1_372 nanoseconds. - Weight::from_ref_time(2_983_110) + Weight::from_parts(2_983_110) // Standard Error: 13_750 - .saturating_add(Weight::from_ref_time(2_218_164).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(2_218_164).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64eq(r: u32) -> Weight { // Minimum execution time: 1_352 nanoseconds. - Weight::from_ref_time(3_205_218) + Weight::from_parts(3_205_218) // Standard Error: 10_221 - .saturating_add(Weight::from_ref_time(805_266).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(805_266).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64ne(r: u32) -> Weight { // Minimum execution time: 1_422 nanoseconds. - Weight::from_ref_time(3_239_502) + Weight::from_parts(3_239_502) // Standard Error: 10_206 - .saturating_add(Weight::from_ref_time(786_528).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(786_528).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64lts(r: u32) -> Weight { // Minimum execution time: 1_392 nanoseconds. - Weight::from_ref_time(3_325_658) + Weight::from_parts(3_325_658) // Standard Error: 9_625 - .saturating_add(Weight::from_ref_time(802_863).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(802_863).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64ltu(r: u32) -> Weight { // Minimum execution time: 1_442 nanoseconds. - Weight::from_ref_time(3_201_207) + Weight::from_parts(3_201_207) // Standard Error: 8_220 - .saturating_add(Weight::from_ref_time(778_538).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(778_538).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64gts(r: u32) -> Weight { // Minimum execution time: 1_392 nanoseconds. - Weight::from_ref_time(3_259_518) + Weight::from_parts(3_259_518) // Standard Error: 9_793 - .saturating_add(Weight::from_ref_time(799_152).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(799_152).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64gtu(r: u32) -> Weight { // Minimum execution time: 1_312 nanoseconds. - Weight::from_ref_time(3_294_521) + Weight::from_parts(3_294_521) // Standard Error: 8_990 - .saturating_add(Weight::from_ref_time(780_969).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(780_969).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64les(r: u32) -> Weight { // Minimum execution time: 1_472 nanoseconds. - Weight::from_ref_time(3_594_211) + Weight::from_parts(3_594_211) // Standard Error: 9_450 - .saturating_add(Weight::from_ref_time(771_796).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(771_796).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64leu(r: u32) -> Weight { // Minimum execution time: 1_472 nanoseconds. - Weight::from_ref_time(3_424_447) + Weight::from_parts(3_424_447) // Standard Error: 9_162 - .saturating_add(Weight::from_ref_time(771_317).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(771_317).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64ges(r: u32) -> Weight { // Minimum execution time: 1_412 nanoseconds. - Weight::from_ref_time(3_190_916) + Weight::from_parts(3_190_916) // Standard Error: 9_309 - .saturating_add(Weight::from_ref_time(786_726).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(786_726).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64geu(r: u32) -> Weight { // Minimum execution time: 1_382 nanoseconds. - Weight::from_ref_time(3_500_169) + Weight::from_parts(3_500_169) // Standard Error: 9_913 - .saturating_add(Weight::from_ref_time(794_546).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(794_546).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64add(r: u32) -> Weight { // Minimum execution time: 1_372 nanoseconds. - Weight::from_ref_time(3_731_711) + Weight::from_parts(3_731_711) // Standard Error: 9_528 - .saturating_add(Weight::from_ref_time(749_925).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(749_925).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64sub(r: u32) -> Weight { // Minimum execution time: 1_342 nanoseconds. - Weight::from_ref_time(3_159_584) + Weight::from_parts(3_159_584) // Standard Error: 9_229 - .saturating_add(Weight::from_ref_time(769_079).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(769_079).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64mul(r: u32) -> Weight { // Minimum execution time: 1_292 nanoseconds. - Weight::from_ref_time(3_687_415) + Weight::from_parts(3_687_415) // Standard Error: 9_473 - .saturating_add(Weight::from_ref_time(756_447).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(756_447).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64divs(r: u32) -> Weight { // Minimum execution time: 1_372 nanoseconds. - Weight::from_ref_time(3_205_775) + Weight::from_parts(3_205_775) // Standard Error: 10_518 - .saturating_add(Weight::from_ref_time(946_927).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(946_927).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64divu(r: u32) -> Weight { // Minimum execution time: 1_402 nanoseconds. - Weight::from_ref_time(3_434_550) + Weight::from_parts(3_434_550) // Standard Error: 11_131 - .saturating_add(Weight::from_ref_time(1_021_101).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(1_021_101).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64rems(r: u32) -> Weight { // Minimum execution time: 1_412 nanoseconds. - Weight::from_ref_time(3_546_024) + Weight::from_parts(3_546_024) // Standard Error: 9_706 - .saturating_add(Weight::from_ref_time(972_567).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(972_567).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64remu(r: u32) -> Weight { // Minimum execution time: 1_402 nanoseconds. - Weight::from_ref_time(3_021_270) + Weight::from_parts(3_021_270) // Standard Error: 10_847 - .saturating_add(Weight::from_ref_time(945_604).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(945_604).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64and(r: u32) -> Weight { // Minimum execution time: 1_302 nanoseconds. - Weight::from_ref_time(3_505_463) + Weight::from_parts(3_505_463) // Standard Error: 10_203 - .saturating_add(Weight::from_ref_time(796_210).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(796_210).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64or(r: u32) -> Weight { // Minimum execution time: 1_372 nanoseconds. - Weight::from_ref_time(3_516_154) + Weight::from_parts(3_516_154) // Standard Error: 10_127 - .saturating_add(Weight::from_ref_time(773_188).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(773_188).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64xor(r: u32) -> Weight { // Minimum execution time: 1_372 nanoseconds. - Weight::from_ref_time(3_567_010) + Weight::from_parts(3_567_010) // Standard Error: 9_691 - .saturating_add(Weight::from_ref_time(774_602).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(774_602).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64shl(r: u32) -> Weight { // Minimum execution time: 1_402 nanoseconds. - Weight::from_ref_time(3_452_123) + Weight::from_parts(3_452_123) // Standard Error: 9_970 - .saturating_add(Weight::from_ref_time(797_048).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(797_048).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64shrs(r: u32) -> Weight { // Minimum execution time: 1_342 nanoseconds. - Weight::from_ref_time(3_440_660) + Weight::from_parts(3_440_660) // Standard Error: 9_536 - .saturating_add(Weight::from_ref_time(764_439).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(764_439).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64shru(r: u32) -> Weight { // Minimum execution time: 1_373 nanoseconds. - Weight::from_ref_time(3_004_001) + Weight::from_parts(3_004_001) // Standard Error: 9_392 - .saturating_add(Weight::from_ref_time(773_645).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(773_645).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64rotl(r: u32) -> Weight { // Minimum execution time: 1_362 nanoseconds. - Weight::from_ref_time(3_273_952) + Weight::from_parts(3_273_952) // Standard Error: 10_637 - .saturating_add(Weight::from_ref_time(809_037).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(809_037).saturating_mul(r.into())) } /// The range of component `r` is `[0, 50]`. fn instr_i64rotr(r: u32) -> Weight { // Minimum execution time: 1_322 nanoseconds. - Weight::from_ref_time(3_288_736) + Weight::from_parts(3_288_736) // Standard Error: 9_241 - .saturating_add(Weight::from_ref_time(769_025).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(769_025).saturating_mul(r.into())) } } diff --git a/pallets/weights/src/pallet_corporate_actions.rs b/pallets/weights/src/pallet_corporate_actions.rs index ae345e6982..31bfac19ba 100644 --- a/pallets/weights/src/pallet_corporate_actions.rs +++ b/pallets/weights/src/pallet_corporate_actions.rs @@ -57,7 +57,7 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Proof: CorporateAction MaxDetailsLength (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_max_details_length() -> Weight { // Minimum execution time: 7_852 nanoseconds. - Weight::from_ref_time(8_353_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(8_353_000).saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) @@ -78,9 +78,9 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { /// The range of component `t` is `[0, 500]`. fn set_default_targets(t: u32) -> Weight { // Minimum execution time: 53_280 nanoseconds. - Weight::from_ref_time(64_817_391) + Weight::from_parts(64_817_391) // Standard Error: 2_790 - .saturating_add(Weight::from_ref_time(310_282).saturating_mul(t.into())) + .saturating_add(Weight::from_parts(310_282).saturating_mul(t.into())) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -102,7 +102,7 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Proof: CorporateAction DefaultWithholdingTax (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) fn set_default_withholding_tax() -> Weight { // Minimum execution time: 53_320 nanoseconds. - Weight::from_ref_time(57_887_000) + Weight::from_parts(57_887_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -125,9 +125,9 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { /// The range of component `w` is `[0, 999]`. fn set_did_withholding_tax(w: u32) -> Weight { // Minimum execution time: 57_666 nanoseconds. - Weight::from_ref_time(74_073_885) + Weight::from_parts(74_073_885) // Standard Error: 1_775 - .saturating_add(Weight::from_ref_time(91_435).saturating_mul(w.into())) + .saturating_add(Weight::from_parts(91_435).saturating_mul(w.into())) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -177,11 +177,11 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { /// The range of component `t` is `[0, 500]`. fn initiate_corporate_action_use_defaults(w: u32, t: u32) -> Weight { // Minimum execution time: 178_668 nanoseconds. - Weight::from_ref_time(181_321_577) + Weight::from_parts(181_321_577) // Standard Error: 1_851 - .saturating_add(Weight::from_ref_time(52_142).saturating_mul(w.into())) + .saturating_add(Weight::from_parts(52_142).saturating_mul(w.into())) // Standard Error: 3_702 - .saturating_add(Weight::from_ref_time(35_107).saturating_mul(t.into())) + .saturating_add(Weight::from_parts(35_107).saturating_mul(t.into())) .saturating_add(DbWeight::get().reads(18)) .saturating_add(DbWeight::get().writes(7)) } @@ -225,11 +225,11 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { /// The range of component `t` is `[0, 500]`. fn initiate_corporate_action_provided(w: u32, t: u32) -> Weight { // Minimum execution time: 262_914 nanoseconds. - Weight::from_ref_time(161_394_546) + Weight::from_parts(161_394_546) // Standard Error: 2_122 - .saturating_add(Weight::from_ref_time(132_270).saturating_mul(w.into())) + .saturating_add(Weight::from_parts(132_270).saturating_mul(w.into())) // Standard Error: 4_243 - .saturating_add(Weight::from_ref_time(236_032).saturating_mul(t.into())) + .saturating_add(Weight::from_parts(236_032).saturating_mul(t.into())) .saturating_add(DbWeight::get().reads(15)) .saturating_add(DbWeight::get().writes(7)) } @@ -256,9 +256,9 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { /// The range of component `d` is `[0, 1000]`. fn link_ca_doc(d: u32) -> Weight { // Minimum execution time: 57_256 nanoseconds. - Weight::from_ref_time(61_102_000) + Weight::from_parts(61_102_000) // Standard Error: 7_645 - .saturating_add(Weight::from_ref_time(3_833_168).saturating_mul(d.into())) + .saturating_add(Weight::from_parts(3_833_168).saturating_mul(d.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(d.into()))) .saturating_add(DbWeight::get().writes(1)) @@ -295,7 +295,7 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Proof: CorporateBallot RCV (max_values: None, max_size: Some(37), added: 2512, mode: MaxEncodedLen) fn remove_ca_with_ballot() -> Weight { // Minimum execution time: 86_390 nanoseconds. - Weight::from_ref_time(89_073_000) + Weight::from_parts(89_073_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(8)) } @@ -327,7 +327,7 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Proof Skipped: CorporateAction CADocLink (max_values: None, max_size: None, mode: Measured) fn remove_ca_with_dist() -> Weight { // Minimum execution time: 91_487 nanoseconds. - Weight::from_ref_time(97_416_000) + Weight::from_parts(97_416_000) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(6)) } @@ -365,7 +365,7 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Proof Skipped: Checkpoint ScheduledCheckpoints (max_values: None, max_size: None, mode: Measured) fn change_record_date_with_ballot() -> Weight { // Minimum execution time: 104_287 nanoseconds. - Weight::from_ref_time(105_128_000) + Weight::from_parts(105_128_000) .saturating_add(DbWeight::get().reads(16)) .saturating_add(DbWeight::get().writes(6)) } @@ -403,7 +403,7 @@ impl pallet_corporate_actions::WeightInfo for SubstrateWeight { // Proof Skipped: Checkpoint ScheduledCheckpoints (max_values: None, max_size: None, mode: Measured) fn change_record_date_with_dist() -> Weight { // Minimum execution time: 107_101 nanoseconds. - Weight::from_ref_time(114_512_000) + Weight::from_parts(114_512_000) .saturating_add(DbWeight::get().reads(16)) .saturating_add(DbWeight::get().writes(6)) } diff --git a/pallets/weights/src/pallet_corporate_ballot.rs b/pallets/weights/src/pallet_corporate_ballot.rs index 7a9fbcbb21..c653469c74 100644 --- a/pallets/weights/src/pallet_corporate_ballot.rs +++ b/pallets/weights/src/pallet_corporate_ballot.rs @@ -84,9 +84,9 @@ impl pallet_corporate_actions::ballot::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 1000]`. fn attach_ballot(c: u32) -> Weight { // Minimum execution time: 78_287 nanoseconds. - Weight::from_ref_time(87_972_593) + Weight::from_parts(87_972_593) // Standard Error: 1_544 - .saturating_add(Weight::from_ref_time(36_165).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(36_165).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(4)) } @@ -118,11 +118,11 @@ impl pallet_corporate_actions::ballot::WeightInfo for SubstrateWeight { /// The range of component `t` is `[0, 1000]`. fn vote(c: u32, t: u32) -> Weight { // Minimum execution time: 134_542 nanoseconds. - Weight::from_ref_time(95_233_256) + Weight::from_parts(95_233_256) // Standard Error: 2_013 - .saturating_add(Weight::from_ref_time(60_260).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(60_260).saturating_mul(c.into())) // Standard Error: 2_013 - .saturating_add(Weight::from_ref_time(81_807).saturating_mul(t.into())) + .saturating_add(Weight::from_parts(81_807).saturating_mul(t.into())) .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().writes(2)) } @@ -144,7 +144,7 @@ impl pallet_corporate_actions::ballot::WeightInfo for SubstrateWeight { // Proof: CorporateBallot TimeRanges (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) fn change_end() -> Weight { // Minimum execution time: 57_697 nanoseconds. - Weight::from_ref_time(59_990_000) + Weight::from_parts(59_990_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -171,9 +171,9 @@ impl pallet_corporate_actions::ballot::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 1000]`. fn change_meta(c: u32) -> Weight { // Minimum execution time: 63_245 nanoseconds. - Weight::from_ref_time(70_199_311) + Weight::from_parts(70_199_311) // Standard Error: 1_741 - .saturating_add(Weight::from_ref_time(39_413).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(39_413).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(2)) } @@ -197,7 +197,7 @@ impl pallet_corporate_actions::ballot::WeightInfo for SubstrateWeight { // Proof: CorporateBallot RCV (max_values: None, max_size: Some(37), added: 2512, mode: MaxEncodedLen) fn change_rcv() -> Weight { // Minimum execution time: 58_017 nanoseconds. - Weight::from_ref_time(61_943_000) + Weight::from_parts(61_943_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -225,7 +225,7 @@ impl pallet_corporate_actions::ballot::WeightInfo for SubstrateWeight { // Proof: CorporateBallot RCV (max_values: None, max_size: Some(37), added: 2512, mode: MaxEncodedLen) fn remove_ballot() -> Weight { // Minimum execution time: 62_794 nanoseconds. - Weight::from_ref_time(64_177_000) + Weight::from_parts(64_177_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(4)) } diff --git a/pallets/weights/src/pallet_external_agents.rs b/pallets/weights/src/pallet_external_agents.rs index 1d38f40fdf..f02ca462a4 100644 --- a/pallets/weights/src/pallet_external_agents.rs +++ b/pallets/weights/src/pallet_external_agents.rs @@ -74,9 +74,9 @@ impl pallet_external_agents::WeightInfo for SubstrateWeight { /// The range of component `p` is `[0, 19]`. fn create_group(p: u32) -> Weight { // Minimum execution time: 51_438 nanoseconds. - Weight::from_ref_time(55_558_001) + Weight::from_parts(55_558_001) // Standard Error: 42_354 - .saturating_add(Weight::from_ref_time(683_925).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(683_925).saturating_mul(p.into())) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(2)) } @@ -101,9 +101,9 @@ impl pallet_external_agents::WeightInfo for SubstrateWeight { /// The range of component `p` is `[0, 19]`. fn set_group_permissions(p: u32) -> Weight { // Minimum execution time: 52_149 nanoseconds. - Weight::from_ref_time(57_330_424) + Weight::from_parts(57_330_424) // Standard Error: 26_026 - .saturating_add(Weight::from_ref_time(694_412).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(694_412).saturating_mul(p.into())) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -127,7 +127,7 @@ impl pallet_external_agents::WeightInfo for SubstrateWeight { // Proof: ExternalAgents AgentOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) fn remove_agent() -> Weight { // Minimum execution time: 59_811 nanoseconds. - Weight::from_ref_time(61_432_000) + Weight::from_parts(61_432_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -147,7 +147,7 @@ impl pallet_external_agents::WeightInfo for SubstrateWeight { // Proof: ExternalAgents AgentOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) fn abdicate() -> Weight { // Minimum execution time: 53_360 nanoseconds. - Weight::from_ref_time(58_438_000) + Weight::from_parts(58_438_000) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(3)) } @@ -171,7 +171,7 @@ impl pallet_external_agents::WeightInfo for SubstrateWeight { // Proof: ExternalAgents NumFullAgents (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) fn change_group_custom() -> Weight { // Minimum execution time: 60_671 nanoseconds. - Weight::from_ref_time(64_366_000) + Weight::from_parts(64_366_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(2)) } @@ -193,7 +193,7 @@ impl pallet_external_agents::WeightInfo for SubstrateWeight { // Proof: ExternalAgents NumFullAgents (max_values: None, max_size: Some(36), added: 2511, mode: MaxEncodedLen) fn change_group_builtin() -> Weight { // Minimum execution time: 58_098 nanoseconds. - Weight::from_ref_time(60_962_000) + Weight::from_parts(60_962_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(2)) } @@ -225,7 +225,7 @@ impl pallet_external_agents::WeightInfo for SubstrateWeight { // Proof: ExternalAgents AgentOf (max_values: None, max_size: Some(80), added: 2555, mode: MaxEncodedLen) fn accept_become_agent() -> Weight { // Minimum execution time: 80_001 nanoseconds. - Weight::from_ref_time(86_710_000) + Weight::from_parts(86_710_000) .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().writes(6)) } @@ -258,9 +258,9 @@ impl pallet_external_agents::WeightInfo for SubstrateWeight { /// The range of component `p` is `[0, 19]`. fn create_group_and_add_auth(p: u32) -> Weight { // Minimum execution time: 65_478 nanoseconds. - Weight::from_ref_time(72_292_155) + Weight::from_parts(72_292_155) // Standard Error: 36_641 - .saturating_add(Weight::from_ref_time(601_196).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(601_196).saturating_mul(p.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(6)) } @@ -287,9 +287,9 @@ impl pallet_external_agents::WeightInfo for SubstrateWeight { /// The range of component `p` is `[0, 19]`. fn create_and_change_custom_group(p: u32) -> Weight { // Minimum execution time: 69_945 nanoseconds. - Weight::from_ref_time(76_145_423) + Weight::from_parts(76_145_423) // Standard Error: 30_749 - .saturating_add(Weight::from_ref_time(510_945).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(510_945).saturating_mul(p.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(4)) } diff --git a/pallets/weights/src/pallet_grandpa.rs b/pallets/weights/src/pallet_grandpa.rs index 1dfd670134..8c45c7f1d2 100644 --- a/pallets/weights/src/pallet_grandpa.rs +++ b/pallets/weights/src/pallet_grandpa.rs @@ -64,18 +64,19 @@ impl pallet_grandpa::WeightInfo for SubstrateWeight { const MAX_NOMINATORS: u64 = 200; // checking membership proof - Weight::from_ref_time(35u64 * WEIGHT_REF_TIME_PER_MICROS) + Weight::from_parts(35u64 * WEIGHT_REF_TIME_PER_MICROS, 0) .saturating_add( - Weight::from_ref_time(175u64 * WEIGHT_REF_TIME_PER_NANOS) + Weight::from_parts(175u64 * WEIGHT_REF_TIME_PER_NANOS, 0) .saturating_mul(validator_count), ) .saturating_add(DbWeight::get().reads(5)) // check equivocation proof - .saturating_add(Weight::from_ref_time(95u64 * WEIGHT_REF_TIME_PER_MICROS)) + .saturating_add(Weight::from_parts(95u64 * WEIGHT_REF_TIME_PER_MICROS, 0)) // report offence - .saturating_add(Weight::from_ref_time(110u64 * WEIGHT_REF_TIME_PER_MICROS)) - .saturating_add(Weight::from_ref_time( + .saturating_add(Weight::from_parts(110u64 * WEIGHT_REF_TIME_PER_MICROS, 0)) + .saturating_add(Weight::from_parts( 25u64 * WEIGHT_REF_TIME_PER_MICROS * MAX_NOMINATORS, + 0, )) .saturating_add(DbWeight::get().reads(14 + 3 * MAX_NOMINATORS)) .saturating_add(DbWeight::get().writes(10 + 3 * MAX_NOMINATORS)) @@ -84,6 +85,6 @@ impl pallet_grandpa::WeightInfo for SubstrateWeight { } // Storage: Grandpa Stalled (r:0 w:1) fn note_stalled() -> Weight { - Weight::from_ref_time(2_979_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(2_979_000, 0).saturating_add(DbWeight::get().writes(1)) } } diff --git a/pallets/weights/src/pallet_group.rs b/pallets/weights/src/pallet_group.rs index 1b37262f2d..920af5074e 100644 --- a/pallets/weights/src/pallet_group.rs +++ b/pallets/weights/src/pallet_group.rs @@ -57,7 +57,7 @@ impl pallet_group::WeightInfo for SubstrateWeight { // Proof: CddServiceProviders ActiveMembersLimit (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_active_members_limit() -> Weight { // Minimum execution time: 11_367 nanoseconds. - Weight::from_ref_time(12_679_000) + Weight::from_parts(12_679_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -71,7 +71,7 @@ impl pallet_group::WeightInfo for SubstrateWeight { // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) fn add_member() -> Weight { // Minimum execution time: 90_075 nanoseconds. - Weight::from_ref_time(93_540_000) + Weight::from_parts(93_540_000) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(2)) } @@ -81,7 +81,7 @@ impl pallet_group::WeightInfo for SubstrateWeight { // Proof Skipped: CddServiceProviders InactiveMembers (max_values: Some(1), max_size: None, mode: Measured) fn remove_member() -> Weight { // Minimum execution time: 73_841 nanoseconds. - Weight::from_ref_time(87_891_000) + Weight::from_parts(87_891_000) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } @@ -95,7 +95,7 @@ impl pallet_group::WeightInfo for SubstrateWeight { // Proof Skipped: CddServiceProviders InactiveMembers (max_values: Some(1), max_size: None, mode: Measured) fn disable_member() -> Weight { // Minimum execution time: 96_736 nanoseconds. - Weight::from_ref_time(104_937_000) + Weight::from_parts(104_937_000) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } @@ -107,7 +107,7 @@ impl pallet_group::WeightInfo for SubstrateWeight { // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) fn swap_member() -> Weight { // Minimum execution time: 116_275 nanoseconds. - Weight::from_ref_time(123_114_000) + Weight::from_parts(123_114_000) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } @@ -122,9 +122,9 @@ impl pallet_group::WeightInfo for SubstrateWeight { /// The range of component `m` is `[1, 1000]`. fn reset_members(m: u32) -> Weight { // Minimum execution time: 43_455 nanoseconds. - Weight::from_ref_time(46_159_000) + Weight::from_parts(46_159_000) // Standard Error: 18_045 - .saturating_add(Weight::from_ref_time(13_558_073).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(13_558_073).saturating_mul(m.into())) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(m.into()))) .saturating_add(DbWeight::get().writes(2)) @@ -142,7 +142,7 @@ impl pallet_group::WeightInfo for SubstrateWeight { // Proof: Identity DidRecords (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) fn abdicate_membership() -> Weight { // Minimum execution time: 139_349 nanoseconds. - Weight::from_ref_time(143_084_000) + Weight::from_parts(143_084_000) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(2)) } diff --git a/pallets/weights/src/pallet_identity.rs b/pallets/weights/src/pallet_identity.rs index 66db839e62..cfadd32939 100644 --- a/pallets/weights/src/pallet_identity.rs +++ b/pallets/weights/src/pallet_identity.rs @@ -87,7 +87,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof: Identity ChildDid (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) fn create_child_identity() -> Weight { // Minimum execution time: 90_245 nanoseconds. - Weight::from_ref_time(93_110_000) + Weight::from_parts(93_110_000) .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().writes(10)) } @@ -120,9 +120,9 @@ impl pallet_identity::WeightInfo for SubstrateWeight { /// The range of component `i` is `[0, 100]`. fn create_child_identities(i: u32) -> Weight { // Minimum execution time: 42_053 nanoseconds. - Weight::from_ref_time(89_970_948) + Weight::from_parts(89_970_948) // Standard Error: 110_748 - .saturating_add(Weight::from_ref_time(144_106_906).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(144_106_906).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(i.into()))) .saturating_add(DbWeight::get().writes(2)) @@ -142,7 +142,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof: Identity ChildDid (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) fn unlink_child_identity() -> Weight { // Minimum execution time: 42_594 nanoseconds. - Weight::from_ref_time(46_139_000) + Weight::from_parts(46_139_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(2)) } @@ -177,9 +177,9 @@ impl pallet_identity::WeightInfo for SubstrateWeight { /// The range of component `i` is `[0, 200]`. fn cdd_register_did(i: u32) -> Weight { // Minimum execution time: 61_382 nanoseconds. - Weight::from_ref_time(90_535_438) + Weight::from_parts(90_535_438) // Standard Error: 24_037 - .saturating_add(Weight::from_ref_time(12_786_370).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(12_786_370).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().writes(6)) .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(i.into()))) @@ -194,7 +194,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) fn invalidate_cdd_claims() -> Weight { // Minimum execution time: 44_958 nanoseconds. - Weight::from_ref_time(45_719_000) + Weight::from_parts(45_719_000) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } @@ -223,9 +223,9 @@ impl pallet_identity::WeightInfo for SubstrateWeight { /// The range of component `i` is `[0, 200]`. fn remove_secondary_keys(i: u32) -> Weight { // Minimum execution time: 34_331 nanoseconds. - Weight::from_ref_time(47_714_873) + Weight::from_parts(47_714_873) // Standard Error: 42_063 - .saturating_add(Weight::from_ref_time(17_971_373).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(17_971_373).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(i.into()))) .saturating_add(DbWeight::get().writes((6_u64).saturating_mul(i.into()))) @@ -252,7 +252,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof: Identity DidKeys (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn accept_primary_key() -> Weight { // Minimum execution time: 89_375 nanoseconds. - Weight::from_ref_time(102_884_000) + Weight::from_parts(102_884_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(11)) } @@ -282,7 +282,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) fn rotate_primary_key_to_secondary() -> Weight { // Minimum execution time: 88_903 nanoseconds. - Weight::from_ref_time(90_485_000) + Weight::from_parts(90_485_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(13)) } @@ -290,7 +290,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof: Identity CddAuthForPrimaryKeyRotation (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn change_cdd_requirement_for_mk_rotation() -> Weight { // Minimum execution time: 7_832 nanoseconds. - Weight::from_ref_time(9_915_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(9_915_000).saturating_add(DbWeight::get().writes(1)) } // Storage: Identity Authorizations (r:1 w:1) // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) @@ -324,7 +324,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) fn join_identity_as_key() -> Weight { // Minimum execution time: 81_021 nanoseconds. - Weight::from_ref_time(98_688_000) + Weight::from_parts(98_688_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(8)) } @@ -350,7 +350,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) fn leave_identity_as_key() -> Weight { // Minimum execution time: 53_390 nanoseconds. - Weight::from_ref_time(55_673_000) + Weight::from_parts(55_673_000) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(5)) } @@ -370,7 +370,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) fn add_claim() -> Weight { // Minimum execution time: 55_724 nanoseconds. - Weight::from_ref_time(58_708_000) + Weight::from_parts(58_708_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -384,7 +384,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) fn revoke_claim() -> Weight { // Minimum execution time: 37_626 nanoseconds. - Weight::from_ref_time(39_549_000) + Weight::from_parts(39_549_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } @@ -398,7 +398,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof Skipped: Identity Claims (max_values: None, max_size: None, mode: Measured) fn revoke_claim_by_index() -> Weight { // Minimum execution time: 38_788 nanoseconds. - Weight::from_ref_time(41_122_000) + Weight::from_parts(41_122_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } @@ -418,7 +418,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof Skipped: Identity KeyPortfolioPermissions (max_values: None, max_size: None, mode: Measured) fn set_secondary_key_permissions() -> Weight { // Minimum execution time: 61_172 nanoseconds. - Weight::from_ref_time(68_212_000) + Weight::from_parts(68_212_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(3)) } @@ -428,15 +428,15 @@ impl pallet_identity::WeightInfo for SubstrateWeight { /// The range of component `e` is `[0, 80]`. fn permissions_cost(a: u32, p: u32, l: u32, e: u32) -> Weight { // Minimum execution time: 227_893 nanoseconds. - Weight::from_ref_time(228_884_000) + Weight::from_parts(228_884_000) // Manually set for `a` - .saturating_add(Weight::from_ref_time(100_000).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(100_000, 0).saturating_mul(a.into())) // Manually set for `p` - .saturating_add(Weight::from_ref_time(100_000).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(100_000).saturating_mul(p.into())) // Standard Error: 179_834 - .saturating_add(Weight::from_ref_time(15_417_476).saturating_mul(l.into())) + .saturating_add(Weight::from_parts(15_417_476).saturating_mul(l.into())) // Standard Error: 179_834 - .saturating_add(Weight::from_ref_time(14_255_820).saturating_mul(e.into())) + .saturating_add(Weight::from_parts(14_255_820).saturating_mul(e.into())) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) @@ -450,7 +450,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) fn freeze_secondary_keys() -> Weight { // Minimum execution time: 33_650 nanoseconds. - Weight::from_ref_time(36_594_000) + Weight::from_parts(36_594_000) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } @@ -466,7 +466,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) fn unfreeze_secondary_keys() -> Weight { // Minimum execution time: 32_278 nanoseconds. - Weight::from_ref_time(33_901_000) + Weight::from_parts(33_901_000) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } @@ -488,7 +488,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) fn add_authorization() -> Weight { // Minimum execution time: 44_296 nanoseconds. - Weight::from_ref_time(46_550_000) + Weight::from_parts(46_550_000) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(4)) } @@ -510,7 +510,7 @@ impl pallet_identity::WeightInfo for SubstrateWeight { // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) fn remove_authorization() -> Weight { // Minimum execution time: 51_007 nanoseconds. - Weight::from_ref_time(53_551_000) + Weight::from_parts(53_551_000) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(3)) } @@ -539,9 +539,9 @@ impl pallet_identity::WeightInfo for SubstrateWeight { /// The range of component `i` is `[0, 200]`. fn add_secondary_keys_with_authorization(i: u32) -> Weight { // Minimum execution time: 47_481 nanoseconds. - Weight::from_ref_time(57_963_316) + Weight::from_parts(57_963_316) // Standard Error: 40_840 - .saturating_add(Weight::from_ref_time(132_436_689).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(132_436_689).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(i.into()))) .saturating_add(DbWeight::get().writes(1)) @@ -564,9 +564,9 @@ impl pallet_identity::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 2048]`. fn register_custom_claim_type(n: u32) -> Weight { // Minimum execution time: 41_543 nanoseconds. - Weight::from_ref_time(47_530_945) + Weight::from_parts(47_530_945) // Standard Error: 631 - .saturating_add(Weight::from_ref_time(6_764).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(6_764).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(3)) } diff --git a/pallets/weights/src/pallet_im_online.rs b/pallets/weights/src/pallet_im_online.rs index f99f66063c..569604930c 100644 --- a/pallets/weights/src/pallet_im_online.rs +++ b/pallets/weights/src/pallet_im_online.rs @@ -67,11 +67,11 @@ impl pallet_im_online::WeightInfo for SubstrateWeight { /// The range of component `e` is `[1, 100]`. fn validate_unsigned_and_then_heartbeat(k: u32, e: u32) -> Weight { // Minimum execution time: 145_028 nanoseconds. - Weight::from_ref_time(124_121_935) + Weight::from_parts(124_121_935) // Standard Error: 1_342 - .saturating_add(Weight::from_ref_time(29_304).saturating_mul(k.into())) + .saturating_add(Weight::from_parts(29_304).saturating_mul(k.into())) // Standard Error: 13_550 - .saturating_add(Weight::from_ref_time(569_717).saturating_mul(e.into())) + .saturating_add(Weight::from_parts(569_717).saturating_mul(e.into())) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(1)) } diff --git a/pallets/weights/src/pallet_indices.rs b/pallets/weights/src/pallet_indices.rs index 49aaebfa98..a10b95d05c 100644 --- a/pallets/weights/src/pallet_indices.rs +++ b/pallets/weights/src/pallet_indices.rs @@ -57,7 +57,7 @@ impl pallet_indices::WeightInfo for SubstrateWeight { // Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn claim() -> Weight { // Minimum execution time: 21_533 nanoseconds. - Weight::from_ref_time(23_345_000) + Weight::from_parts(23_345_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -67,7 +67,7 @@ impl pallet_indices::WeightInfo for SubstrateWeight { // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer() -> Weight { // Minimum execution time: 27_992 nanoseconds. - Weight::from_ref_time(28_453_000) + Weight::from_parts(28_453_000) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } @@ -75,7 +75,7 @@ impl pallet_indices::WeightInfo for SubstrateWeight { // Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn free() -> Weight { // Minimum execution time: 22_544 nanoseconds. - Weight::from_ref_time(23_596_000) + Weight::from_parts(23_596_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -85,7 +85,7 @@ impl pallet_indices::WeightInfo for SubstrateWeight { // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_transfer() -> Weight { // Minimum execution time: 25_859 nanoseconds. - Weight::from_ref_time(27_191_000) + Weight::from_parts(27_191_000) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } @@ -93,7 +93,7 @@ impl pallet_indices::WeightInfo for SubstrateWeight { // Proof: Indices Accounts (max_values: None, max_size: Some(69), added: 2544, mode: MaxEncodedLen) fn freeze() -> Weight { // Minimum execution time: 21_382 nanoseconds. - Weight::from_ref_time(22_584_000) + Weight::from_parts(22_584_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } diff --git a/pallets/weights/src/pallet_multisig.rs b/pallets/weights/src/pallet_multisig.rs index 06eb41fe1a..f789b85389 100644 --- a/pallets/weights/src/pallet_multisig.rs +++ b/pallets/weights/src/pallet_multisig.rs @@ -80,9 +80,9 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { /// The range of component `i` is `[1, 50]`. fn create_multisig(i: u32) -> Weight { // Minimum execution time: 67_080 nanoseconds. - Weight::from_ref_time(59_790_135) + Weight::from_parts(59_790_135) // Standard Error: 33_166 - .saturating_add(Weight::from_ref_time(12_485_379).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(12_485_379).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(10)) .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(i.into()))) @@ -111,7 +111,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig ProposalStates (max_values: None, max_size: None, mode: Measured) fn create_proposal() -> Weight { // Minimum execution time: 76_304 nanoseconds. - Weight::from_ref_time(77_606_000) + Weight::from_parts(77_606_000) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(5)) } @@ -135,7 +135,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig ProposalVoteCounts (max_values: None, max_size: None, mode: Measured) fn approve() -> Weight { // Minimum execution time: 63_044 nanoseconds. - Weight::from_ref_time(73_911_000) + Weight::from_parts(73_911_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(2)) } @@ -151,7 +151,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig ProposalStates (max_values: None, max_size: None, mode: Measured) fn execute_proposal() -> Weight { // Minimum execution time: 40_591 nanoseconds. - Weight::from_ref_time(41_422_000) + Weight::from_parts(41_422_000) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(5)) } @@ -177,7 +177,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig Proposals (max_values: None, max_size: None, mode: Measured) fn reject() -> Weight { // Minimum execution time: 68_843 nanoseconds. - Weight::from_ref_time(78_089_000) + Weight::from_parts(78_089_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(4)) } @@ -205,7 +205,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) fn accept_multisig_signer() -> Weight { // Minimum execution time: 77_706 nanoseconds. - Weight::from_ref_time(81_572_000) + Weight::from_parts(81_572_000) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(6)) } @@ -228,9 +228,9 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { /// The range of component `i` is `[1, 49]`. fn add_multisig_signers(i: u32) -> Weight { // Minimum execution time: 52_038 nanoseconds. - Weight::from_ref_time(43_503_720) + Weight::from_parts(43_503_720) // Standard Error: 35_256 - .saturating_add(Weight::from_ref_time(12_462_676).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(12_462_676).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(2)) .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(i.into()))) @@ -252,9 +252,9 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { /// The range of component `i` is `[2, 50]`. fn remove_multisig_signers(i: u32) -> Weight { // Minimum execution time: 54_512 nanoseconds. - Weight::from_ref_time(34_575_871) + Weight::from_parts(34_575_871) // Standard Error: 44_875 - .saturating_add(Weight::from_ref_time(11_108_190).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(11_108_190).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(i.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -287,9 +287,9 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { /// The range of component `i` is `[1, 49]`. fn add_multisig_signers_via_admin(i: u32) -> Weight { // Minimum execution time: 77_166 nanoseconds. - Weight::from_ref_time(72_214_755) + Weight::from_parts(72_214_755) // Standard Error: 40_115 - .saturating_add(Weight::from_ref_time(12_569_732).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(12_569_732).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(2)) .saturating_add(DbWeight::get().writes((2_u64).saturating_mul(i.into()))) @@ -319,9 +319,9 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { /// The range of component `i` is `[2, 50]`. fn remove_multisig_signers_via_admin(i: u32) -> Weight { // Minimum execution time: 80_220 nanoseconds. - Weight::from_ref_time(64_554_566) + Weight::from_parts(64_554_566) // Standard Error: 39_706 - .saturating_add(Weight::from_ref_time(10_922_191).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(10_922_191).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(i.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -341,7 +341,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig NextProposalId (max_values: None, max_size: None, mode: Measured) fn change_sigs_required() -> Weight { // Minimum execution time: 39_129 nanoseconds. - Weight::from_ref_time(40_912_000) + Weight::from_parts(40_912_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } @@ -367,7 +367,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig NextProposalId (max_values: None, max_size: None, mode: Measured) fn change_sigs_required_via_admin() -> Weight { // Minimum execution time: 67_421 nanoseconds. - Weight::from_ref_time(71_037_000) + Weight::from_parts(71_037_000) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(1)) } @@ -381,7 +381,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig AdminDid (max_values: None, max_size: None, mode: Measured) fn add_admin() -> Weight { // Minimum execution time: 29_464 nanoseconds. - Weight::from_ref_time(30_346_000) + Weight::from_parts(30_346_000) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(1)) } @@ -397,7 +397,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig AdminDid (max_values: None, max_size: None, mode: Measured) fn remove_admin_via_admin() -> Weight { // Minimum execution time: 49_955 nanoseconds. - Weight::from_ref_time(51_347_000) + Weight::from_parts(51_347_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } @@ -411,7 +411,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig PayingDid (max_values: None, max_size: None, mode: Measured) fn remove_payer() -> Weight { // Minimum execution time: 30_626 nanoseconds. - Weight::from_ref_time(32_809_000) + Weight::from_parts(32_809_000) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(1)) } @@ -427,7 +427,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig PayingDid (max_values: None, max_size: None, mode: Measured) fn remove_payer_via_payer() -> Weight { // Minimum execution time: 47_130 nanoseconds. - Weight::from_ref_time(52_589_000) + Weight::from_parts(52_589_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } @@ -467,7 +467,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig AuthToProposalId (max_values: None, max_size: None, mode: Measured) fn join_identity() -> Weight { // Minimum execution time: 95_955 nanoseconds. - Weight::from_ref_time(97_166_000) + Weight::from_parts(97_166_000) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(9)) } @@ -493,7 +493,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig ProposalStates (max_values: None, max_size: None, mode: Measured) fn create_join_identity() -> Weight { // Minimum execution time: 73_149 nanoseconds. - Weight::from_ref_time(76_575_000) + Weight::from_parts(76_575_000) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(6)) } @@ -517,7 +517,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig ProposalVoteCounts (max_values: None, max_size: None, mode: Measured) fn approve_join_identity() -> Weight { // Minimum execution time: 65_428 nanoseconds. - Weight::from_ref_time(66_780_000) + Weight::from_parts(66_780_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(2)) } @@ -531,7 +531,7 @@ impl pallet_multisig::WeightInfo for SubstrateWeight { // Proof Skipped: MultiSig AdminDid (max_values: None, max_size: None, mode: Measured) fn remove_admin() -> Weight { // Minimum execution time: 29_254 nanoseconds. - Weight::from_ref_time(31_998_000) + Weight::from_parts(31_998_000) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(1)) } diff --git a/pallets/weights/src/pallet_nft.rs b/pallets/weights/src/pallet_nft.rs index 16df65a1d4..a56ddbd6ec 100644 --- a/pallets/weights/src/pallet_nft.rs +++ b/pallets/weights/src/pallet_nft.rs @@ -98,9 +98,9 @@ impl pallet_nft::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 255]`. fn create_nft_collection(n: u32) -> Weight { // Minimum execution time: 129_685 nanoseconds. - Weight::from_ref_time(137_525_691) + Weight::from_parts(137_525_691) // Standard Error: 10_618 - .saturating_add(Weight::from_ref_time(2_504_965).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(2_504_965).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(14)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(12)) @@ -138,9 +138,9 @@ impl pallet_nft::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 255]`. fn issue_nft(n: u32) -> Weight { // Minimum execution time: 78_757 nanoseconds. - Weight::from_ref_time(82_036_303) + Weight::from_parts(82_036_303) // Standard Error: 10_808 - .saturating_add(Weight::from_ref_time(3_094_813).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(3_094_813).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().writes(5)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(n.into()))) @@ -178,9 +178,9 @@ impl pallet_nft::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 255]`. fn redeem_nft(n: u32) -> Weight { // Minimum execution time: 94_061 nanoseconds. - Weight::from_ref_time(87_454_675) + Weight::from_parts(87_454_675) // Standard Error: 8_486 - .saturating_add(Weight::from_ref_time(4_722_602).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(4_722_602).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(15)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(4)) @@ -209,9 +209,9 @@ impl pallet_nft::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 10]`. fn base_nft_transfer(n: u32) -> Weight { // Minimum execution time: 125_458 nanoseconds. - Weight::from_ref_time(119_702_844) + Weight::from_parts(119_702_844) // Standard Error: 99_329 - .saturating_add(Weight::from_ref_time(13_378_308).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(13_378_308).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(2)) @@ -248,9 +248,9 @@ impl pallet_nft::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 10]`. fn controller_transfer(n: u32) -> Weight { // Minimum execution time: 93_139 nanoseconds. - Weight::from_ref_time(85_640_069) + Weight::from_parts(85_640_069) // Standard Error: 91_703 - .saturating_add(Weight::from_ref_time(13_802_261).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(13_802_261).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(2)) diff --git a/pallets/weights/src/pallet_pips.rs b/pallets/weights/src/pallet_pips.rs index 9cb4ca266b..fe9064d671 100644 --- a/pallets/weights/src/pallet_pips.rs +++ b/pallets/weights/src/pallet_pips.rs @@ -57,7 +57,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips PruneHistoricalPips (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn set_prune_historical_pips() -> Weight { // Minimum execution time: 11_087 nanoseconds. - Weight::from_ref_time(11_717_000) + Weight::from_parts(11_717_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -65,7 +65,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips MinimumProposalDeposit (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_min_proposal_deposit() -> Weight { // Minimum execution time: 14_181 nanoseconds. - Weight::from_ref_time(16_195_000) + Weight::from_parts(16_195_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -73,7 +73,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips DefaultEnactmentPeriod (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_default_enactment_period() -> Weight { // Minimum execution time: 14_462 nanoseconds. - Weight::from_ref_time(16_305_000) + Weight::from_parts(16_305_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -81,7 +81,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof Skipped: Pips PendingPipExpiry (max_values: Some(1), max_size: None, mode: Measured) fn set_pending_pip_expiry() -> Weight { // Minimum execution time: 13_811 nanoseconds. - Weight::from_ref_time(14_993_000) + Weight::from_parts(14_993_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -89,7 +89,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips MaxPipSkipCount (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn set_max_pip_skip_count() -> Weight { // Minimum execution time: 10_996 nanoseconds. - Weight::from_ref_time(11_467_000) + Weight::from_parts(11_467_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -97,7 +97,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips ActivePipLimit (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_active_pip_limit() -> Weight { // Minimum execution time: 12_869 nanoseconds. - Weight::from_ref_time(15_353_000) + Weight::from_parts(15_353_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -143,7 +143,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips ProposalStates (max_values: None, max_size: Some(13), added: 2488, mode: MaxEncodedLen) fn propose_from_community() -> Weight { // Minimum execution time: 124_157 nanoseconds. - Weight::from_ref_time(134_491_000) + Weight::from_parts(134_491_000) .saturating_add(DbWeight::get().reads(17)) .saturating_add(DbWeight::get().writes(11)) } @@ -167,7 +167,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips ProposalStates (max_values: None, max_size: Some(13), added: 2488, mode: MaxEncodedLen) fn propose_from_committee() -> Weight { // Minimum execution time: 50_636 nanoseconds. - Weight::from_ref_time(53_931_000) + Weight::from_parts(53_931_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(6)) } @@ -193,7 +193,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof Skipped: Pips LiveQueue (max_values: Some(1), max_size: None, mode: Measured) fn vote() -> Weight { // Minimum execution time: 118_989 nanoseconds. - Weight::from_ref_time(134_702_000) + Weight::from_parts(134_702_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(4)) } @@ -211,7 +211,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips PipToSchedule (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) fn approve_committee_proposal() -> Weight { // Minimum execution time: 46_921 nanoseconds. - Weight::from_ref_time(49_374_000) + Weight::from_parts(49_374_000) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(4)) } @@ -239,7 +239,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips ProposalResult (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) fn reject_proposal() -> Weight { // Minimum execution time: 69_755 nanoseconds. - Weight::from_ref_time(74_191_000) + Weight::from_parts(74_191_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(9)) } @@ -259,7 +259,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips ProposalResult (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) fn prune_proposal() -> Weight { // Minimum execution time: 44_968 nanoseconds. - Weight::from_ref_time(46_269_000) + Weight::from_parts(46_269_000) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(7)) } @@ -283,7 +283,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips PipToSchedule (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) fn reschedule_execution() -> Weight { // Minimum execution time: 85_239 nanoseconds. - Weight::from_ref_time(93_881_000) + Weight::from_parts(93_881_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(4)) } @@ -303,7 +303,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof Skipped: Pips SnapshotQueue (max_values: Some(1), max_size: None, mode: Measured) fn clear_snapshot() -> Weight { // Minimum execution time: 50_476 nanoseconds. - Weight::from_ref_time(54_622_000) + Weight::from_parts(54_622_000) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(2)) } @@ -327,7 +327,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips SnapshotMeta (max_values: Some(1), max_size: Some(40), added: 535, mode: MaxEncodedLen) fn snapshot() -> Weight { // Minimum execution time: 70_968 nanoseconds. - Weight::from_ref_time(72_548_000) + Weight::from_parts(72_548_000) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(3)) } @@ -362,13 +362,13 @@ impl pallet_pips::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 33]`. fn enact_snapshot_results(a: u32, r: u32, s: u32) -> Weight { // Minimum execution time: 876_216 nanoseconds. - Weight::from_ref_time(150_324_091) + Weight::from_parts(150_324_091) // Standard Error: 103_895 - .saturating_add(Weight::from_ref_time(34_756_262).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(34_756_262).saturating_mul(a.into())) // Standard Error: 103_895 - .saturating_add(Weight::from_ref_time(15_591_440).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(15_591_440).saturating_mul(r.into())) // Standard Error: 103_895 - .saturating_add(Weight::from_ref_time(6_671_231).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(6_671_231).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(a.into()))) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(r.into()))) @@ -400,7 +400,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips ProposalResult (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) fn execute_scheduled_pip() -> Weight { // Minimum execution time: 120_390 nanoseconds. - Weight::from_ref_time(122_634_000) + Weight::from_parts(122_634_000) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(9)) } @@ -430,7 +430,7 @@ impl pallet_pips::WeightInfo for SubstrateWeight { // Proof: Pips ProposalResult (max_values: None, max_size: Some(52), added: 2527, mode: MaxEncodedLen) fn expire_scheduled_pip() -> Weight { // Minimum execution time: 143_155 nanoseconds. - Weight::from_ref_time(148_643_000) + Weight::from_parts(148_643_000) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(10)) } @@ -450,11 +450,11 @@ impl pallet_pips::WeightInfo for SubstrateWeight { /// The range of component `v` is `[0, 128]`. fn remove_pending_storage(r: u32, v: u32) -> Weight { // Minimum execution time: 655_515 nanoseconds. - Weight::from_ref_time(81_639_463) + Weight::from_parts(81_639_463) // Standard Error: 39_969 - .saturating_add(Weight::from_ref_time(21_271_082).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(21_271_082).saturating_mul(r.into())) // Standard Error: 39_969 - .saturating_add(Weight::from_ref_time(4_999_901).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(4_999_901).saturating_mul(v.into())) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(v.into()))) diff --git a/pallets/weights/src/pallet_portfolio.rs b/pallets/weights/src/pallet_portfolio.rs index 29f3bd4ec6..ba9aa05bac 100644 --- a/pallets/weights/src/pallet_portfolio.rs +++ b/pallets/weights/src/pallet_portfolio.rs @@ -70,9 +70,9 @@ impl pallet_portfolio::WeightInfo for SubstrateWeight { /// The range of component `l` is `[1, 500]`. fn create_portfolio(l: u32) -> Weight { // Minimum execution time: 44_907 nanoseconds. - Weight::from_ref_time(53_645_608) + Weight::from_parts(53_645_608) // Standard Error: 3_075 - .saturating_add(Weight::from_ref_time(9_707).saturating_mul(l.into())) + .saturating_add(Weight::from_parts(9_707).saturating_mul(l.into())) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(3)) } @@ -100,7 +100,7 @@ impl pallet_portfolio::WeightInfo for SubstrateWeight { // Proof Skipped: Portfolio NameToNumber (max_values: None, max_size: None, mode: Measured) fn delete_portfolio() -> Weight { // Minimum execution time: 72_729 nanoseconds. - Weight::from_ref_time(77_356_000) + Weight::from_parts(77_356_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(5)) } @@ -119,9 +119,9 @@ impl pallet_portfolio::WeightInfo for SubstrateWeight { /// The range of component `i` is `[1, 500]`. fn rename_portfolio(i: u32) -> Weight { // Minimum execution time: 51_658 nanoseconds. - Weight::from_ref_time(59_738_619) + Weight::from_parts(59_738_619) // Standard Error: 3_135 - .saturating_add(Weight::from_ref_time(13_609).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(13_609).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(3)) } @@ -139,7 +139,7 @@ impl pallet_portfolio::WeightInfo for SubstrateWeight { // Proof: Portfolio PortfoliosInCustody (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn quit_portfolio_custody() -> Weight { // Minimum execution time: 51_737 nanoseconds. - Weight::from_ref_time(52_108_000) + Weight::from_parts(52_108_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(2)) } @@ -165,7 +165,7 @@ impl pallet_portfolio::WeightInfo for SubstrateWeight { // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) fn accept_portfolio_custody() -> Weight { // Minimum execution time: 73_401 nanoseconds. - Weight::from_ref_time(76_475_000) + Weight::from_parts(76_475_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(6)) } @@ -199,11 +199,11 @@ impl pallet_portfolio::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 100]`. fn move_portfolio_funds(f: u32, n: u32) -> Weight { // Minimum execution time: 379_240 nanoseconds. - Weight::from_ref_time(64_725_812) + Weight::from_parts(64_725_812) // Standard Error: 296_727 - .saturating_add(Weight::from_ref_time(31_588_542).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(31_588_542).saturating_mul(f.into())) // Standard Error: 27_882 - .saturating_add(Weight::from_ref_time(13_745_446).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(13_745_446).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().reads((4_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((2_u64).saturating_mul(n.into()))) @@ -227,7 +227,7 @@ impl pallet_portfolio::WeightInfo for SubstrateWeight { // Proof: Portfolio PreApprovedPortfolios (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn pre_approve_portfolio() -> Weight { // Minimum execution time: 45_107 nanoseconds. - Weight::from_ref_time(60_301_000) + Weight::from_parts(60_301_000) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(1)) } @@ -247,7 +247,7 @@ impl pallet_portfolio::WeightInfo for SubstrateWeight { // Proof: Portfolio PreApprovedPortfolios (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn remove_portfolio_pre_approval() -> Weight { // Minimum execution time: 45_328 nanoseconds. - Weight::from_ref_time(48_192_000) + Weight::from_parts(48_192_000) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(1)) } @@ -263,7 +263,7 @@ impl pallet_portfolio::WeightInfo for SubstrateWeight { // Proof: Portfolio AllowedCustodians (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) fn allow_identity_to_create_portfolios() -> Weight { // Minimum execution time: 35_834 nanoseconds. - Weight::from_ref_time(40_391_000) + Weight::from_parts(40_391_000) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } @@ -279,7 +279,7 @@ impl pallet_portfolio::WeightInfo for SubstrateWeight { // Proof: Portfolio AllowedCustodians (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) fn revoke_create_portfolios_permission() -> Weight { // Minimum execution time: 35_373 nanoseconds. - Weight::from_ref_time(38_498_000) + Weight::from_parts(38_498_000) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(1)) } @@ -305,7 +305,7 @@ impl pallet_portfolio::WeightInfo for SubstrateWeight { // Proof Skipped: Portfolio Portfolios (max_values: None, max_size: None, mode: Measured) fn create_custody_portfolio() -> Weight { // Minimum execution time: 63_256 nanoseconds. - Weight::from_ref_time(66_940_000) + Weight::from_parts(66_940_000) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(5)) } diff --git a/pallets/weights/src/pallet_preimage.rs b/pallets/weights/src/pallet_preimage.rs index 153f5210e4..332f63cfdf 100644 --- a/pallets/weights/src/pallet_preimage.rs +++ b/pallets/weights/src/pallet_preimage.rs @@ -60,9 +60,9 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 4194304]`. fn note_preimage(s: u32) -> Weight { // Minimum execution time: 28_203 nanoseconds. - Weight::from_ref_time(28_254_999) + Weight::from_parts(28_254_999) // Standard Error: 2 - .saturating_add(Weight::from_ref_time(1_501).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_501).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -73,9 +73,9 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 4194304]`. fn note_requested_preimage(s: u32) -> Weight { // Minimum execution time: 17_937 nanoseconds. - Weight::from_ref_time(1_683_598) + Weight::from_parts(1_683_598) // Standard Error: 4 - .saturating_add(Weight::from_ref_time(1_510).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_510).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -86,9 +86,9 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 4194304]`. fn note_no_deposit_preimage(s: u32) -> Weight { // Minimum execution time: 17_246 nanoseconds. - Weight::from_ref_time(9_678_129) + Weight::from_parts(9_678_129) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(1_499).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_499).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -98,7 +98,7 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unnote_preimage() -> Weight { // Minimum execution time: 45_098 nanoseconds. - Weight::from_ref_time(46_080_000) + Weight::from_parts(46_080_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -108,7 +108,7 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unnote_no_deposit_preimage() -> Weight { // Minimum execution time: 33_671 nanoseconds. - Weight::from_ref_time(37_296_000) + Weight::from_parts(37_296_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -116,7 +116,7 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_preimage() -> Weight { // Minimum execution time: 34_522 nanoseconds. - Weight::from_ref_time(37_426_000) + Weight::from_parts(37_426_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -124,7 +124,7 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_no_deposit_preimage() -> Weight { // Minimum execution time: 25_468 nanoseconds. - Weight::from_ref_time(27_331_000) + Weight::from_parts(27_331_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -132,7 +132,7 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_unnoted_preimage() -> Weight { // Minimum execution time: 18_768 nanoseconds. - Weight::from_ref_time(22_253_000) + Weight::from_parts(22_253_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -140,7 +140,7 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn request_requested_preimage() -> Weight { // Minimum execution time: 12_048 nanoseconds. - Weight::from_ref_time(13_801_000) + Weight::from_parts(13_801_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -150,7 +150,7 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) fn unrequest_preimage() -> Weight { // Minimum execution time: 42_694 nanoseconds. - Weight::from_ref_time(43_585_000) + Weight::from_parts(43_585_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -158,7 +158,7 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn unrequest_unnoted_preimage() -> Weight { // Minimum execution time: 10_756 nanoseconds. - Weight::from_ref_time(12_919_000) + Weight::from_parts(12_919_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -166,7 +166,7 @@ impl pallet_preimage::WeightInfo for SubstrateWeight { // Proof: Preimage StatusFor (max_values: None, max_size: Some(91), added: 2566, mode: MaxEncodedLen) fn unrequest_multi_referenced_preimage() -> Weight { // Minimum execution time: 9_925 nanoseconds. - Weight::from_ref_time(11_037_000) + Weight::from_parts(11_037_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } diff --git a/pallets/weights/src/pallet_protocol_fee.rs b/pallets/weights/src/pallet_protocol_fee.rs index 56ad0ad588..058da84617 100644 --- a/pallets/weights/src/pallet_protocol_fee.rs +++ b/pallets/weights/src/pallet_protocol_fee.rs @@ -57,12 +57,12 @@ impl pallet_protocol_fee::WeightInfo for SubstrateWeight { // Proof: ProtocolFee Coefficient (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn change_coefficient() -> Weight { // Minimum execution time: 7_911 nanoseconds. - Weight::from_ref_time(8_202_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(8_202_000).saturating_add(DbWeight::get().writes(1)) } // Storage: ProtocolFee BaseFees (r:0 w:1) // Proof: ProtocolFee BaseFees (max_values: None, max_size: Some(25), added: 2500, mode: MaxEncodedLen) fn change_base_fee() -> Weight { // Minimum execution time: 8_643 nanoseconds. - Weight::from_ref_time(10_145_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(10_145_000).saturating_add(DbWeight::get().writes(1)) } } diff --git a/pallets/weights/src/pallet_relayer.rs b/pallets/weights/src/pallet_relayer.rs index d875d559de..e152026d3f 100644 --- a/pallets/weights/src/pallet_relayer.rs +++ b/pallets/weights/src/pallet_relayer.rs @@ -65,7 +65,7 @@ impl pallet_relayer::WeightInfo for SubstrateWeight { // Proof Skipped: Identity Authorizations (max_values: None, max_size: None, mode: Measured) fn set_paying_key() -> Weight { // Minimum execution time: 31_176 nanoseconds. - Weight::from_ref_time(34_031_000) + Weight::from_parts(34_031_000) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(4)) } @@ -91,7 +91,7 @@ impl pallet_relayer::WeightInfo for SubstrateWeight { // Proof: Identity AuthorizationsGiven (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) fn accept_paying_key() -> Weight { // Minimum execution time: 84_136 nanoseconds. - Weight::from_ref_time(90_736_000) + Weight::from_parts(90_736_000) .saturating_add(DbWeight::get().reads(14)) .saturating_add(DbWeight::get().writes(6)) } @@ -109,7 +109,7 @@ impl pallet_relayer::WeightInfo for SubstrateWeight { // Proof: Identity AccountKeyRefCount (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) fn remove_paying_key() -> Weight { // Minimum execution time: 50_606 nanoseconds. - Weight::from_ref_time(52_769_000) + Weight::from_parts(52_769_000) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(3)) } @@ -125,7 +125,7 @@ impl pallet_relayer::WeightInfo for SubstrateWeight { // Proof: Relayer Subsidies (max_values: None, max_size: Some(96), added: 2571, mode: MaxEncodedLen) fn update_polyx_limit() -> Weight { // Minimum execution time: 42_553 nanoseconds. - Weight::from_ref_time(44_527_000) + Weight::from_parts(44_527_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } @@ -141,7 +141,7 @@ impl pallet_relayer::WeightInfo for SubstrateWeight { // Proof: Relayer Subsidies (max_values: None, max_size: Some(96), added: 2571, mode: MaxEncodedLen) fn increase_polyx_limit() -> Weight { // Minimum execution time: 42_513 nanoseconds. - Weight::from_ref_time(47_992_000) + Weight::from_parts(47_992_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } @@ -157,7 +157,7 @@ impl pallet_relayer::WeightInfo for SubstrateWeight { // Proof: Relayer Subsidies (max_values: None, max_size: Some(96), added: 2571, mode: MaxEncodedLen) fn decrease_polyx_limit() -> Weight { // Minimum execution time: 42_264 nanoseconds. - Weight::from_ref_time(47_942_000) + Weight::from_parts(47_942_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } diff --git a/pallets/weights/src/pallet_scheduler.rs b/pallets/weights/src/pallet_scheduler.rs index ee7569e95c..05725a5b8d 100644 --- a/pallets/weights/src/pallet_scheduler.rs +++ b/pallets/weights/src/pallet_scheduler.rs @@ -57,7 +57,7 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { // Proof: Scheduler IncompleteSince (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn service_agendas_base() -> Weight { // Minimum execution time: 3_956 nanoseconds. - Weight::from_ref_time(4_306_000) + Weight::from_parts(4_306_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -66,15 +66,15 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 50]`. fn service_agenda_base(s: u32) -> Weight { // Minimum execution time: 3_926 nanoseconds. - Weight::from_ref_time(8_734_086) + Weight::from_parts(8_734_086) // Standard Error: 13_013 - .saturating_add(Weight::from_ref_time(446_332).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(446_332).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } fn service_task_base() -> Weight { // Minimum execution time: 5_499 nanoseconds. - Weight::from_ref_time(5_678_000) + Weight::from_parts(5_678_000) } // Storage: Preimage PreimageFor (r:1 w:1) // Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen) @@ -83,9 +83,9 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { /// The range of component `s` is `[128, 4194304]`. fn service_task_fetched(s: u32) -> Weight { // Minimum execution time: 23_065 nanoseconds. - Weight::from_ref_time(23_075_000) + Weight::from_parts(23_075_000) // Standard Error: 1 - .saturating_add(Weight::from_ref_time(862).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(862).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } @@ -93,28 +93,28 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { // Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) fn service_task_named() -> Weight { // Minimum execution time: 6_971 nanoseconds. - Weight::from_ref_time(8_844_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(8_844_000).saturating_add(DbWeight::get().writes(1)) } fn service_task_periodic() -> Weight { // Minimum execution time: 4_987 nanoseconds. - Weight::from_ref_time(5_399_000) + Weight::from_parts(5_399_000) } fn execute_dispatch_signed() -> Weight { // Minimum execution time: 2_434 nanoseconds. - Weight::from_ref_time(2_754_000) + Weight::from_parts(2_754_000) } fn execute_dispatch_unsigned() -> Weight { // Minimum execution time: 2_464 nanoseconds. - Weight::from_ref_time(2_604_000) + Weight::from_parts(2_604_000) } // Storage: Scheduler Agenda (r:1 w:1) // Proof: Scheduler Agenda (max_values: None, max_size: Some(10463), added: 12938, mode: MaxEncodedLen) /// The range of component `s` is `[0, 49]`. fn schedule(s: u32) -> Weight { // Minimum execution time: 12_970 nanoseconds. - Weight::from_ref_time(19_761_302) + Weight::from_parts(19_761_302) // Standard Error: 18_907 - .saturating_add(Weight::from_ref_time(485_529).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(485_529).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -125,9 +125,9 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { /// The range of component `s` is `[1, 50]`. fn cancel(s: u32) -> Weight { // Minimum execution time: 17_356 nanoseconds. - Weight::from_ref_time(20_145_881) + Weight::from_parts(20_145_881) // Standard Error: 18_316 - .saturating_add(Weight::from_ref_time(728_665).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(728_665).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(2)) } @@ -138,9 +138,9 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 49]`. fn schedule_named(s: u32) -> Weight { // Minimum execution time: 16_064 nanoseconds. - Weight::from_ref_time(24_948_406) + Weight::from_parts(24_948_406) // Standard Error: 19_234 - .saturating_add(Weight::from_ref_time(508_630).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(508_630).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } @@ -151,9 +151,9 @@ impl pallet_scheduler::WeightInfo for SubstrateWeight { /// The range of component `s` is `[1, 50]`. fn cancel_named(s: u32) -> Weight { // Minimum execution time: 19_559 nanoseconds. - Weight::from_ref_time(23_742_763) + Weight::from_parts(23_742_763) // Standard Error: 19_014 - .saturating_add(Weight::from_ref_time(741_496).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(741_496).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } diff --git a/pallets/weights/src/pallet_session.rs b/pallets/weights/src/pallet_session.rs index 9f9d1ef7c5..80015dc14c 100644 --- a/pallets/weights/src/pallet_session.rs +++ b/pallets/weights/src/pallet_session.rs @@ -61,7 +61,7 @@ impl pallet_session::WeightInfo for SubstrateWeight { // Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured) fn set_keys() -> Weight { // Minimum execution time: 58_137 nanoseconds. - Weight::from_ref_time(58_958_000) + Weight::from_parts(58_958_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(5)) } @@ -73,7 +73,7 @@ impl pallet_session::WeightInfo for SubstrateWeight { // Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured) fn purge_keys() -> Weight { // Minimum execution time: 41_422 nanoseconds. - Weight::from_ref_time(42_874_000) + Weight::from_parts(42_874_000) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(5)) } diff --git a/pallets/weights/src/pallet_settlement.rs b/pallets/weights/src/pallet_settlement.rs index 8251e597d9..3990682953 100644 --- a/pallets/weights/src/pallet_settlement.rs +++ b/pallets/weights/src/pallet_settlement.rs @@ -77,11 +77,11 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 50]`. fn create_venue(d: u32, s: u32) -> Weight { // Minimum execution time: 48_974 nanoseconds. - Weight::from_ref_time(57_830_988) + Weight::from_parts(57_830_988) // Standard Error: 628 - .saturating_add(Weight::from_ref_time(2_082).saturating_mul(d.into())) + .saturating_add(Weight::from_parts(2_082).saturating_mul(d.into())) // Standard Error: 25_526 - .saturating_add(Weight::from_ref_time(2_134_048).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(2_134_048).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(5)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -101,9 +101,9 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `d` is `[1, 2048]`. fn update_venue_details(d: u32) -> Weight { // Minimum execution time: 44_337 nanoseconds. - Weight::from_ref_time(51_844_276) + Weight::from_parts(51_844_276) // Standard Error: 618 - .saturating_add(Weight::from_ref_time(1_286).saturating_mul(d.into())) + .saturating_add(Weight::from_parts(1_286).saturating_mul(d.into())) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } @@ -119,7 +119,7 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Settlement VenueInfo (max_values: None, max_size: Some(49), added: 2524, mode: MaxEncodedLen) fn update_venue_type() -> Weight { // Minimum execution time: 43_295 nanoseconds. - Weight::from_ref_time(46_730_000) + Weight::from_parts(46_730_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } @@ -140,9 +140,9 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 50]`. fn update_venue_signers(s: u32) -> Weight { // Minimum execution time: 46_891 nanoseconds. - Weight::from_ref_time(59_156_481) + Weight::from_parts(59_156_481) // Standard Error: 30_755 - .saturating_add(Weight::from_ref_time(4_205_735).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(4_205_735).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(s.into()))) .saturating_add(DbWeight::get().writes(1)) @@ -166,7 +166,7 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Settlement VenueFiltering (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) fn set_venue_filtering() -> Weight { // Minimum execution time: 50_646 nanoseconds. - Weight::from_ref_time(58_017_000) + Weight::from_parts(58_017_000) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(1)) } @@ -189,9 +189,9 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `v` is `[0, 100]`. fn allow_venues(v: u32) -> Weight { // Minimum execution time: 51_297 nanoseconds. - Weight::from_ref_time(52_344_917) + Weight::from_parts(52_344_917) // Standard Error: 20_629 - .saturating_add(Weight::from_ref_time(2_228_588).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(2_228_588).saturating_mul(v.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(v.into()))) } @@ -214,9 +214,9 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `v` is `[0, 100]`. fn disallow_venues(v: u32) -> Weight { // Minimum execution time: 49_534 nanoseconds. - Weight::from_ref_time(51_584_159) + Weight::from_parts(51_584_159) // Standard Error: 18_159 - .saturating_add(Weight::from_ref_time(2_206_981).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(2_206_981).saturating_mul(v.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(v.into()))) } @@ -265,13 +265,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn affirm_with_receipts(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 1_859_762 nanoseconds. - Weight::from_ref_time(77_278_928) + Weight::from_parts(77_278_928) // Standard Error: 489_520 - .saturating_add(Weight::from_ref_time(39_661_165).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(39_661_165).saturating_mul(f.into())) // Standard Error: 45_281 - .saturating_add(Weight::from_ref_time(32_229_661).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(32_229_661).saturating_mul(n.into())) // Standard Error: 443_430 - .saturating_add(Weight::from_ref_time(141_115_891).saturating_mul(o.into())) + .saturating_add(Weight::from_parts(141_115_891).saturating_mul(o.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((5_u64).saturating_mul(n.into()))) @@ -356,11 +356,11 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn execute_manual_instruction(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 4_052_202 nanoseconds. - Weight::from_ref_time(4_061_556_000) + Weight::from_parts(4_061_556_000) // Standard Error: 4_422_165 - .saturating_add(Weight::from_ref_time(243_990_566).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(243_990_566).saturating_mul(f.into())) // Standard Error: 443_980 - .saturating_add(Weight::from_ref_time(165_926_396).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(165_926_396).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(21)) .saturating_add(DbWeight::get().reads((60_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((18_u64).saturating_mul(n.into()))) @@ -427,13 +427,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn add_instruction(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 597_207 nanoseconds. - Weight::from_ref_time(174_188_376) + Weight::from_parts(174_188_376) // Standard Error: 687_005 - .saturating_add(Weight::from_ref_time(42_537_717).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(42_537_717).saturating_mul(f.into())) // Standard Error: 63_549 - .saturating_add(Weight::from_ref_time(45_247_302).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(45_247_302).saturating_mul(n.into())) // Standard Error: 622_320 - .saturating_add(Weight::from_ref_time(1_330_592).saturating_mul(o.into())) + .saturating_add(Weight::from_parts(1_330_592).saturating_mul(o.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().reads((9_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((9_u64).saturating_mul(n.into()))) @@ -511,13 +511,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn add_and_affirm_instruction(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 984_434 nanoseconds. - Weight::from_ref_time(227_269_495) + Weight::from_parts(227_269_495) // Standard Error: 910_292 - .saturating_add(Weight::from_ref_time(67_029_389).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(67_029_389).saturating_mul(f.into())) // Standard Error: 84_204 - .saturating_add(Weight::from_ref_time(73_771_559).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(73_771_559).saturating_mul(n.into())) // Standard Error: 824_584 - .saturating_add(Weight::from_ref_time(6_324_027).saturating_mul(o.into())) + .saturating_add(Weight::from_parts(6_324_027).saturating_mul(o.into())) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().reads((13_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((13_u64).saturating_mul(n.into()))) @@ -565,11 +565,11 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 100]`. fn affirm_instruction(f: u32, n: u32) -> Weight { // Minimum execution time: 526_480 nanoseconds. - Weight::from_ref_time(151_967_401) + Weight::from_parts(151_967_401) // Standard Error: 453_636 - .saturating_add(Weight::from_ref_time(33_811_412).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(33_811_412).saturating_mul(f.into())) // Standard Error: 42_627 - .saturating_add(Weight::from_ref_time(31_910_436).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(31_910_436).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(19)) .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((5_u64).saturating_mul(n.into()))) @@ -610,13 +610,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn withdraw_affirmation(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 448_342 nanoseconds. - Weight::from_ref_time(88_480_002) + Weight::from_parts(88_480_002) // Standard Error: 415_073 - .saturating_add(Weight::from_ref_time(30_175_775).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(30_175_775).saturating_mul(f.into())) // Standard Error: 38_395 - .saturating_add(Weight::from_ref_time(32_651_548).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(32_651_548).saturating_mul(n.into())) // Standard Error: 375_992 - .saturating_add(Weight::from_ref_time(5_106_412).saturating_mul(o.into())) + .saturating_add(Weight::from_parts(5_106_412).saturating_mul(o.into())) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().reads((5_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((5_u64).saturating_mul(n.into()))) @@ -694,11 +694,11 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn execute_instruction_paused(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 2_282_727 nanoseconds. - Weight::from_ref_time(2_290_609_000) + Weight::from_parts(2_290_609_000) // Standard Error: 3_059_483 - .saturating_add(Weight::from_ref_time(121_354_879).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(121_354_879).saturating_mul(f.into())) // Standard Error: 295_414 - .saturating_add(Weight::from_ref_time(165_005_345).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(165_005_345).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(16)) .saturating_add(DbWeight::get().reads((26_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((18_u64).saturating_mul(n.into()))) @@ -779,11 +779,11 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn execute_scheduled_instruction(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 4_022_317 nanoseconds. - Weight::from_ref_time(4_023_859_000) + Weight::from_parts(4_023_859_000) // Standard Error: 4_531_167 - .saturating_add(Weight::from_ref_time(225_266_267).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(225_266_267).saturating_mul(f.into())) // Standard Error: 437_515 - .saturating_add(Weight::from_ref_time(163_641_362).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(163_641_362).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(17)) .saturating_add(DbWeight::get().reads((60_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((18_u64).saturating_mul(n.into()))) @@ -795,7 +795,7 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { } fn ensure_root_origin() -> Weight { // Minimum execution time: 591 nanoseconds. - Weight::from_ref_time(641_000) + Weight::from_parts(641_000) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) @@ -832,13 +832,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn affirm_with_receipts_rcv(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 1_689_174 nanoseconds. - Weight::from_ref_time(125_184_104) + Weight::from_parts(125_184_104) // Standard Error: 349_599 - .saturating_add(Weight::from_ref_time(20_098_108).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(20_098_108).saturating_mul(f.into())) // Standard Error: 32_338 - .saturating_add(Weight::from_ref_time(19_767_832).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(19_767_832).saturating_mul(n.into())) // Standard Error: 316_682 - .saturating_add(Weight::from_ref_time(140_312_288).saturating_mul(o.into())) + .saturating_add(Weight::from_parts(140_312_288).saturating_mul(o.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(n.into()))) @@ -874,11 +874,11 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 100]`. fn affirm_instruction_rcv(f: u32, n: u32) -> Weight { // Minimum execution time: 351_617 nanoseconds. - Weight::from_ref_time(152_725_030) + Weight::from_parts(152_725_030) // Standard Error: 405_442 - .saturating_add(Weight::from_ref_time(19_430_316).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(19_430_316).saturating_mul(f.into())) // Standard Error: 38_098 - .saturating_add(Weight::from_ref_time(19_529_520).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(19_529_520).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(19)) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(n.into()))) @@ -913,13 +913,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn withdraw_affirmation_rcv(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 322_773 nanoseconds. - Weight::from_ref_time(90_513_094) + Weight::from_parts(90_513_094) // Standard Error: 293_344 - .saturating_add(Weight::from_ref_time(20_333_788).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(20_333_788).saturating_mul(f.into())) // Standard Error: 27_135 - .saturating_add(Weight::from_ref_time(19_564_050).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(19_564_050).saturating_mul(n.into())) // Standard Error: 265_725 - .saturating_add(Weight::from_ref_time(4_641_820).saturating_mul(o.into())) + .saturating_add(Weight::from_parts(4_641_820).saturating_mul(o.into())) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(n.into()))) @@ -986,15 +986,15 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `m` is `[0, 4]`. fn add_instruction_with_mediators(f: u32, n: u32, o: u32, m: u32) -> Weight { // Minimum execution time: 593_100 nanoseconds. - Weight::from_ref_time(85_814_205) + Weight::from_parts(85_814_205) // Standard Error: 608_044 - .saturating_add(Weight::from_ref_time(44_550_478).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(44_550_478).saturating_mul(f.into())) // Standard Error: 56_109 - .saturating_add(Weight::from_ref_time(45_044_729).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(45_044_729).saturating_mul(n.into())) // Standard Error: 550_973 - .saturating_add(Weight::from_ref_time(4_861_695).saturating_mul(o.into())) + .saturating_add(Weight::from_parts(4_861_695).saturating_mul(o.into())) // Standard Error: 1_275_849 - .saturating_add(Weight::from_ref_time(4_451_723).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(4_451_723).saturating_mul(m.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().reads((9_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((9_u64).saturating_mul(n.into()))) @@ -1074,15 +1074,15 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `m` is `[0, 4]`. fn add_and_affirm_with_mediators(f: u32, n: u32, o: u32, m: u32) -> Weight { // Minimum execution time: 991_648 nanoseconds. - Weight::from_ref_time(120_646_133) + Weight::from_parts(120_646_133) // Standard Error: 1_065_648 - .saturating_add(Weight::from_ref_time(80_464_049).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(80_464_049).saturating_mul(f.into())) // Standard Error: 98_337 - .saturating_add(Weight::from_ref_time(74_208_129).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(74_208_129).saturating_mul(n.into())) // Standard Error: 965_627 - .saturating_add(Weight::from_ref_time(3_657_355).saturating_mul(o.into())) + .saturating_add(Weight::from_parts(3_657_355).saturating_mul(o.into())) // Standard Error: 2_236_032 - .saturating_add(Weight::from_ref_time(3_432_237).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(3_432_237).saturating_mul(m.into())) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().reads((13_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((13_u64).saturating_mul(n.into()))) @@ -1111,7 +1111,7 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Settlement InstructionAffirmsPending (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) fn affirm_instruction_as_mediator() -> Weight { // Minimum execution time: 109_785 nanoseconds. - Weight::from_ref_time(121_202_000) + Weight::from_parts(121_202_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(2)) } @@ -1133,7 +1133,7 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { // Proof: Settlement InstructionAffirmsPending (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen) fn withdraw_affirmation_as_mediator() -> Weight { // Minimum execution time: 107_733 nanoseconds. - Weight::from_ref_time(119_860_000) + Weight::from_parts(119_860_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(2)) } @@ -1178,13 +1178,13 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn base_reject_instruction(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 512_760 nanoseconds. - Weight::from_ref_time(130_587_142) + Weight::from_parts(130_587_142) // Standard Error: 375_315 - .saturating_add(Weight::from_ref_time(29_222_837).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(29_222_837).saturating_mul(f.into())) // Standard Error: 38_330 - .saturating_add(Weight::from_ref_time(28_681_658).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(28_681_658).saturating_mul(n.into())) // Standard Error: 375_315 - .saturating_add(Weight::from_ref_time(11_897_129).saturating_mul(o.into())) + .saturating_add(Weight::from_parts(11_897_129).saturating_mul(o.into())) .saturating_add(DbWeight::get().reads(14)) .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(n.into()))) @@ -1263,11 +1263,11 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn lock_instruction_extrinsic(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 2_079_000 nanoseconds. - Weight::from_ref_time(2_089_416_000) + Weight::from_parts(2_089_416_000) // Standard Error: 2_597_622 - .saturating_add(Weight::from_ref_time(114_580_394).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(114_580_394).saturating_mul(f.into())) // Standard Error: 260_798 - .saturating_add(Weight::from_ref_time(145_115_677).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(145_115_677).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(19)) .saturating_add(DbWeight::get().reads((26_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((18_u64).saturating_mul(n.into()))) @@ -1339,11 +1339,11 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn execute_locked_instruction(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 2_338_088 nanoseconds. - Weight::from_ref_time(2_345_368_000) + Weight::from_parts(2_345_368_000) // Standard Error: 2_575_462 - .saturating_add(Weight::from_ref_time(138_468_439).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(138_468_439).saturating_mul(f.into())) // Standard Error: 258_573 - .saturating_add(Weight::from_ref_time(54_883_779).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(54_883_779).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(14)) .saturating_add(DbWeight::get().reads((47_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((11_u64).saturating_mul(n.into()))) @@ -1426,11 +1426,11 @@ impl pallet_settlement::WeightInfo for SubstrateWeight { /// The range of component `o` is `[0, 10]`. fn execute_manual_instruction_paused(f: u32, n: u32, o: u32) -> Weight { // Minimum execution time: 2_407_883 nanoseconds. - Weight::from_ref_time(2_424_538_000) + Weight::from_parts(2_424_538_000) // Standard Error: 2_747_969 - .saturating_add(Weight::from_ref_time(126_016_154).saturating_mul(f.into())) + .saturating_add(Weight::from_parts(126_016_154).saturating_mul(f.into())) // Standard Error: 275_893 - .saturating_add(Weight::from_ref_time(167_212_024).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(167_212_024).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(20)) .saturating_add(DbWeight::get().reads((26_u64).saturating_mul(f.into()))) .saturating_add(DbWeight::get().reads((18_u64).saturating_mul(n.into()))) diff --git a/pallets/weights/src/pallet_staking.rs b/pallets/weights/src/pallet_staking.rs index 5c6869adfc..c4a0273056 100644 --- a/pallets/weights/src/pallet_staking.rs +++ b/pallets/weights/src/pallet_staking.rs @@ -67,7 +67,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn bond() -> Weight { // Minimum execution time: 59_860 nanoseconds. - Weight::from_ref_time(64_396_000) + Weight::from_parts(64_396_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(4)) } @@ -85,7 +85,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn bond_extra() -> Weight { // Minimum execution time: 60_591 nanoseconds. - Weight::from_ref_time(61_042_000) + Weight::from_parts(61_042_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(2)) } @@ -107,7 +107,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Identity IsDidFrozen (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) fn unbond() -> Weight { // Minimum execution time: 62_253 nanoseconds. - Weight::from_ref_time(62_904_000) + Weight::from_parts(62_904_000) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(3)) } @@ -122,9 +122,9 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32) -> Weight { // Minimum execution time: 39_810 nanoseconds. - Weight::from_ref_time(43_042_160) + Weight::from_parts(43_042_160) // Standard Error: 5_821 - .saturating_add(Weight::from_ref_time(26_306).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(26_306).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } @@ -151,9 +151,9 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_kill(s: u32) -> Weight { // Minimum execution time: 64_186 nanoseconds. - Weight::from_ref_time(70_313_581) + Weight::from_parts(70_313_581) // Standard Error: 13_114 - .saturating_add(Weight::from_ref_time(1_596_521).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_596_521).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(6)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -184,7 +184,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn validate() -> Weight { // Minimum execution time: 68_553 nanoseconds. - Weight::from_ref_time(70_997_000) + Weight::from_parts(70_997_000) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(4)) } @@ -195,9 +195,9 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `k` is `[1, 128]`. fn kick(k: u32) -> Weight { // Minimum execution time: 35_423 nanoseconds. - Weight::from_ref_time(33_436_546) + Weight::from_parts(33_436_546) // Standard Error: 30_431 - .saturating_add(Weight::from_ref_time(8_873_265).saturating_mul(k.into())) + .saturating_add(Weight::from_parts(8_873_265).saturating_mul(k.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(k.into()))) @@ -223,9 +223,9 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 16]`. fn nominate(n: u32) -> Weight { // Minimum execution time: 66_289 nanoseconds. - Weight::from_ref_time(68_503_326) + Weight::from_parts(68_503_326) // Standard Error: 60_462 - .saturating_add(Weight::from_ref_time(4_268_999).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(4_268_999).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(2)) @@ -246,7 +246,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) fn chill() -> Weight { // Minimum execution time: 58_167 nanoseconds. - Weight::from_ref_time(61_642_000) + Weight::from_parts(61_642_000) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(4)) } @@ -256,7 +256,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn set_payee() -> Weight { // Minimum execution time: 17_957 nanoseconds. - Weight::from_ref_time(20_240_000) + Weight::from_parts(20_240_000) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -266,7 +266,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) fn set_controller() -> Weight { // Minimum execution time: 29_935 nanoseconds. - Weight::from_ref_time(31_848_000) + Weight::from_parts(31_848_000) .saturating_add(DbWeight::get().reads(4)) .saturating_add(DbWeight::get().writes(3)) } @@ -274,34 +274,34 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_validator_count() -> Weight { // Minimum execution time: 3_366 nanoseconds. - Weight::from_ref_time(4_146_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(4_146_000).saturating_add(DbWeight::get().writes(1)) } // Storage: Staking ForceEra (r:0 w:1) // Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_no_eras() -> Weight { // Minimum execution time: 11_317 nanoseconds. - Weight::from_ref_time(14_843_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(14_843_000).saturating_add(DbWeight::get().writes(1)) } // Storage: Staking ForceEra (r:0 w:1) // Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_new_era() -> Weight { // Minimum execution time: 11_768 nanoseconds. - Weight::from_ref_time(16_796_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(16_796_000).saturating_add(DbWeight::get().writes(1)) } // Storage: Staking ForceEra (r:0 w:1) // Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_new_era_always() -> Weight { // Minimum execution time: 11_858 nanoseconds. - Weight::from_ref_time(16_284_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(16_284_000).saturating_add(DbWeight::get().writes(1)) } // Storage: Staking Invulnerables (r:0 w:1) // Proof Skipped: Staking Invulnerables (max_values: Some(1), max_size: None, mode: Measured) /// The range of component `v` is `[0, 100]`. fn set_invulnerables(v: u32) -> Weight { // Minimum execution time: 3_304 nanoseconds. - Weight::from_ref_time(4_493_658) + Weight::from_parts(4_493_658) // Standard Error: 4_058 - .saturating_add(Weight::from_ref_time(17_700).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(17_700).saturating_mul(v.into())) .saturating_add(DbWeight::get().writes(1)) } // Storage: Staking Bonded (r:1 w:1) @@ -327,9 +327,9 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `s` is `[0, 100]`. fn force_unstake(s: u32) -> Weight { // Minimum execution time: 54_412 nanoseconds. - Weight::from_ref_time(62_917_979) + Weight::from_parts(62_917_979) // Standard Error: 13_753 - .saturating_add(Weight::from_ref_time(1_588_061).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_588_061).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(8)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -339,9 +339,9 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `s` is `[1, 1000]`. fn cancel_deferred_slash(s: u32) -> Weight { // Minimum execution time: 116_665 nanoseconds. - Weight::from_ref_time(807_594_238) + Weight::from_parts(807_594_238) // Standard Error: 61_663 - .saturating_add(Weight::from_ref_time(4_030_193).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(4_030_193).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -370,9 +370,9 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 1024]`. fn payout_stakers_dead_controller(n: u32) -> Weight { // Minimum execution time: 193_310 nanoseconds. - Weight::from_ref_time(368_075_766) + Weight::from_parts(368_075_766) // Standard Error: 60_365 - .saturating_add(Weight::from_ref_time(41_699_846).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(41_699_846).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -403,9 +403,9 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 1024]`. fn payout_stakers_alive_staked(n: u32) -> Weight { // Minimum execution time: 222_113 nanoseconds. - Weight::from_ref_time(269_725_573) + Weight::from_parts(269_725_573) // Standard Error: 75_987 - .saturating_add(Weight::from_ref_time(49_684_473).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(49_684_473).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(13)) .saturating_add(DbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(4)) @@ -424,9 +424,9 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `l` is `[1, 32]`. fn rebond(l: u32) -> Weight { // Minimum execution time: 44_557 nanoseconds. - Weight::from_ref_time(49_453_802) + Weight::from_parts(49_453_802) // Standard Error: 21_032 - .saturating_add(Weight::from_ref_time(54_407).saturating_mul(l.into())) + .saturating_add(Weight::from_parts(54_407).saturating_mul(l.into())) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().writes(3)) } @@ -455,9 +455,9 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `s` is `[1, 100]`. fn reap_stash(s: u32) -> Weight { // Minimum execution time: 79_430 nanoseconds. - Weight::from_ref_time(83_274_719) + Weight::from_parts(83_274_719) // Standard Error: 15_369 - .saturating_add(Weight::from_ref_time(1_545_269).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_545_269).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(8)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(s.into()))) @@ -528,11 +528,11 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 100]`. fn new_era(v: u32, n: u32) -> Weight { // Minimum execution time: 852_690 nanoseconds. - Weight::from_ref_time(862_584_000) + Weight::from_parts(862_584_000) // Standard Error: 3_049_255 - .saturating_add(Weight::from_ref_time(72_802_433).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(72_802_433).saturating_mul(v.into())) // Standard Error: 314_509 - .saturating_add(Weight::from_ref_time(16_351_842).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(16_351_842).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(18)) .saturating_add(DbWeight::get().reads((8_u64).saturating_mul(v.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(n.into()))) @@ -571,9 +571,9 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `n` is `[50, 100]`. fn get_npos_voters(v: u32, n: u32) -> Weight { // Minimum execution time: 3_798_638 nanoseconds. - Weight::from_ref_time(3_849_676_000) + Weight::from_parts(3_849_676_000) // Standard Error: 475_063 - .saturating_add(Weight::from_ref_time(23_030_380).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(23_030_380).saturating_mul(v.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().reads((8_u64).saturating_mul(v.into()))) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(n.into()))) @@ -604,9 +604,9 @@ impl pallet_staking::WeightInfo for SubstrateWeight { /// The range of component `v` is `[50, 100]`. fn get_npos_targets(v: u32) -> Weight { // Minimum execution time: 2_014_703 nanoseconds. - Weight::from_ref_time(108_451_555) + Weight::from_parts(108_451_555) // Standard Error: 152_719 - .saturating_add(Weight::from_ref_time(38_793_995).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(38_793_995).saturating_mul(v.into())) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().reads((7_u64).saturating_mul(v.into()))) .saturating_add(DbWeight::get().writes(1)) @@ -625,7 +625,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_staking_configs_all_set() -> Weight { // Minimum execution time: 7_361 nanoseconds. - Weight::from_ref_time(7_872_000).saturating_add(DbWeight::get().writes(6)) + Weight::from_parts(7_872_000).saturating_add(DbWeight::get().writes(6)) } // Storage: Staking MinCommission (r:0 w:1) // Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) @@ -641,7 +641,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_staking_configs_all_remove() -> Weight { // Minimum execution time: 7_111 nanoseconds. - Weight::from_ref_time(7_902_000).saturating_add(DbWeight::get().writes(6)) + Weight::from_parts(7_902_000).saturating_add(DbWeight::get().writes(6)) } // Storage: Staking Ledger (r:1 w:0) // Proof: Staking Ledger (max_values: None, max_size: Some(1091), added: 3566, mode: MaxEncodedLen) @@ -665,7 +665,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Identity AccountKeyRefCount (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) fn chill_other() -> Weight { // Minimum execution time: 71_247 nanoseconds. - Weight::from_ref_time(73_691_000) + Weight::from_parts(73_691_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(4)) } @@ -675,7 +675,7 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) fn force_apply_min_commission() -> Weight { // Minimum execution time: 17_426 nanoseconds. - Weight::from_ref_time(17_746_000) + Weight::from_parts(17_746_000) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } @@ -683,6 +683,6 @@ impl pallet_staking::WeightInfo for SubstrateWeight { // Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_min_commission() -> Weight { // Minimum execution time: 3_406 nanoseconds. - Weight::from_ref_time(4_727_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(4_727_000).saturating_add(DbWeight::get().writes(1)) } } diff --git a/pallets/weights/src/pallet_statistics.rs b/pallets/weights/src/pallet_statistics.rs index 4c0d6d8324..7ae9b68749 100644 --- a/pallets/weights/src/pallet_statistics.rs +++ b/pallets/weights/src/pallet_statistics.rs @@ -74,9 +74,9 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { /// The range of component `i` is `[1, 9]`. fn set_active_asset_stats(i: u32) -> Weight { // Minimum execution time: 54_773 nanoseconds. - Weight::from_ref_time(60_412_581) + Weight::from_parts(60_412_581) // Standard Error: 93_344 - .saturating_add(Weight::from_ref_time(297_243).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(297_243).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(1)) } @@ -101,9 +101,9 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { /// The range of component `i` is `[1, 250]`. fn batch_update_asset_stats(i: u32) -> Weight { // Minimum execution time: 56_975 nanoseconds. - Weight::from_ref_time(63_445_374) + Weight::from_parts(63_445_374) // Standard Error: 10_644 - .saturating_add(Weight::from_ref_time(2_887_056).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(2_887_056).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } @@ -128,9 +128,9 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { /// The range of component `i` is `[1, 3]`. fn set_asset_transfer_compliance(i: u32) -> Weight { // Minimum execution time: 56_575 nanoseconds. - Weight::from_ref_time(60_699_067) + Weight::from_parts(60_699_067) // Standard Error: 475_866 - .saturating_add(Weight::from_ref_time(3_176_895).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(3_176_895).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(1)) } @@ -153,9 +153,9 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { /// The range of component `i` is `[0, 1000]`. fn set_entities_exempt(i: u32) -> Weight { // Minimum execution time: 46_289 nanoseconds. - Weight::from_ref_time(53_881_786) + Weight::from_parts(53_881_786) // Standard Error: 4_804 - .saturating_add(Weight::from_ref_time(2_797_955).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(2_797_955).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } @@ -164,14 +164,14 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { /// The range of component `a` is `[0, 1]`. fn max_investor_count_restriction(a: u32) -> Weight { // Minimum execution time: 421 nanoseconds. - Weight::from_ref_time(752_702) + Weight::from_parts(752_702) // Standard Error: 50_612 - .saturating_add(Weight::from_ref_time(5_369_963).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(5_369_963).saturating_mul(a.into())) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(a.into()))) } fn max_investor_ownership_restriction() -> Weight { // Minimum execution time: 671 nanoseconds. - Weight::from_ref_time(931_000) + Weight::from_parts(931_000) } // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) @@ -180,9 +180,9 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 1]`. fn claim_count_restriction_no_stats(c: u32) -> Weight { // Minimum execution time: 510 nanoseconds. - Weight::from_ref_time(924_277) + Weight::from_parts(924_277) // Standard Error: 66_047 - .saturating_add(Weight::from_ref_time(15_527_056).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(15_527_056).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(c.into()))) } // Storage: Timestamp Now (r:1 w:0) @@ -193,7 +193,7 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { // Proof: Statistics AssetStats (max_values: None, max_size: Some(107), added: 2582, mode: MaxEncodedLen) fn claim_count_restriction_with_stats() -> Weight { // Minimum execution time: 19_779 nanoseconds. - Weight::from_ref_time(20_110_000).saturating_add(DbWeight::get().reads(4)) + Weight::from_parts(20_110_000).saturating_add(DbWeight::get().reads(4)) } // Storage: Timestamp Now (r:1 w:0) // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) @@ -204,9 +204,9 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { /// The range of component `a` is `[0, 1]`. fn claim_ownership_restriction(a: u32) -> Weight { // Minimum execution time: 14_401 nanoseconds. - Weight::from_ref_time(16_077_361) + Weight::from_parts(16_077_361) // Standard Error: 358_477 - .saturating_add(Weight::from_ref_time(8_556_638).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(8_556_638).saturating_mul(a.into())) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(a.into()))) } @@ -219,9 +219,9 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { /// The range of component `a` is `[0, 2]`. fn update_asset_count_stats(a: u32) -> Weight { // Minimum execution time: 14_221 nanoseconds. - Weight::from_ref_time(15_655_190) + Weight::from_parts(15_655_190) // Standard Error: 124_036 - .saturating_add(Weight::from_ref_time(6_442_240).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(6_442_240).saturating_mul(a.into())) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(a.into()))) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(a.into()))) @@ -235,9 +235,9 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { /// The range of component `a` is `[0, 2]`. fn update_asset_balance_stats(a: u32) -> Weight { // Minimum execution time: 14_571 nanoseconds. - Weight::from_ref_time(16_317_347) + Weight::from_parts(16_317_347) // Standard Error: 182_341 - .saturating_add(Weight::from_ref_time(7_302_297).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(7_302_297).saturating_mul(a.into())) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(a.into()))) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(a.into()))) @@ -245,24 +245,24 @@ impl pallet_statistics::WeightInfo for SubstrateWeight { /// The range of component `i` is `[0, 4]`. fn verify_requirements(i: u32) -> Weight { // Minimum execution time: 311 nanoseconds. - Weight::from_ref_time(623_352) + Weight::from_parts(623_352) // Standard Error: 9_519 - .saturating_add(Weight::from_ref_time(130_016).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(130_016).saturating_mul(i.into())) } // Storage: Statistics ActiveAssetStats (r:1 w:0) // Proof: Statistics ActiveAssetStats (max_values: None, max_size: Some(423), added: 2898, mode: MaxEncodedLen) /// The range of component `a` is `[1, 10]`. fn active_asset_statistics_load(a: u32) -> Weight { // Minimum execution time: 6_510 nanoseconds. - Weight::from_ref_time(7_441_567) + Weight::from_parts(7_441_567) // Standard Error: 21_090 - .saturating_add(Weight::from_ref_time(33_402).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(33_402).saturating_mul(a.into())) .saturating_add(DbWeight::get().reads(1)) } // Storage: Statistics TransferConditionExemptEntities (r:1 w:0) // Proof: Statistics TransferConditionExemptEntities (max_values: None, max_size: Some(88), added: 2563, mode: MaxEncodedLen) fn is_exempt() -> Weight { // Minimum execution time: 7_501 nanoseconds. - Weight::from_ref_time(8_302_000).saturating_add(DbWeight::get().reads(1)) + Weight::from_parts(8_302_000).saturating_add(DbWeight::get().reads(1)) } } diff --git a/pallets/weights/src/pallet_sto.rs b/pallets/weights/src/pallet_sto.rs index 864dea8b8e..648c94aea9 100644 --- a/pallets/weights/src/pallet_sto.rs +++ b/pallets/weights/src/pallet_sto.rs @@ -86,9 +86,9 @@ impl pallet_sto::WeightInfo for SubstrateWeight { /// The range of component `i` is `[1, 10]`. fn create_fundraiser(i: u32) -> Weight { // Minimum execution time: 100_200 nanoseconds. - Weight::from_ref_time(104_033_945) + Weight::from_parts(104_033_945) // Standard Error: 60_435 - .saturating_add(Weight::from_ref_time(189_009).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(189_009).saturating_mul(i.into())) .saturating_add(DbWeight::get().reads(15)) .saturating_add(DbWeight::get().writes(4)) } @@ -168,7 +168,7 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Proof: Settlement InstructionLegStatus (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn invest_onchain() -> Weight { // Minimum execution time: 1_025_889 nanoseconds. - Weight::from_ref_time(1_045_578_000) + Weight::from_parts(1_045_578_000) .saturating_add(DbWeight::get().reads(131)) .saturating_add(DbWeight::get().writes(50)) } @@ -254,7 +254,7 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Proof: Settlement InstructionLegStatus (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn invest_offchain() -> Weight { // Minimum execution time: 698_206 nanoseconds. - Weight::from_ref_time(702_534_000) + Weight::from_parts(702_534_000) .saturating_add(DbWeight::get().reads(76)) .saturating_add(DbWeight::get().writes(29)) } @@ -276,7 +276,7 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Proof Skipped: Sto Fundraisers (max_values: None, max_size: None, mode: Measured) fn freeze_fundraiser() -> Weight { // Minimum execution time: 65_638 nanoseconds. - Weight::from_ref_time(66_220_000) + Weight::from_parts(66_220_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -298,7 +298,7 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Proof Skipped: Sto Fundraisers (max_values: None, max_size: None, mode: Measured) fn unfreeze_fundraiser() -> Weight { // Minimum execution time: 64_406 nanoseconds. - Weight::from_ref_time(65_198_000) + Weight::from_parts(65_198_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -320,7 +320,7 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Proof Skipped: Sto Fundraisers (max_values: None, max_size: None, mode: Measured) fn modify_fundraiser_window() -> Weight { // Minimum execution time: 65_438 nanoseconds. - Weight::from_ref_time(66_710_000) + Weight::from_parts(66_710_000) .saturating_add(DbWeight::get().reads(9)) .saturating_add(DbWeight::get().writes(1)) } @@ -338,7 +338,7 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Proof: Portfolio PortfolioLockedAssets (max_values: None, max_size: Some(97), added: 2572, mode: MaxEncodedLen) fn stop() -> Weight { // Minimum execution time: 65_128 nanoseconds. - Weight::from_ref_time(66_179_000) + Weight::from_parts(66_179_000) .saturating_add(DbWeight::get().reads(7)) .saturating_add(DbWeight::get().writes(2)) } @@ -356,7 +356,7 @@ impl pallet_sto::WeightInfo for SubstrateWeight { // Proof: Sto FundraiserOffchainAsset (max_values: None, max_size: Some(60), added: 2535, mode: MaxEncodedLen) fn enable_offchain_funding() -> Weight { // Minimum execution time: 52_299 nanoseconds. - Weight::from_ref_time(54_763_000) + Weight::from_parts(54_763_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } diff --git a/pallets/weights/src/pallet_timestamp.rs b/pallets/weights/src/pallet_timestamp.rs index bf5bee8909..d42cdbc067 100644 --- a/pallets/weights/src/pallet_timestamp.rs +++ b/pallets/weights/src/pallet_timestamp.rs @@ -59,12 +59,12 @@ impl pallet_timestamp::WeightInfo for SubstrateWeight { // Proof: Babe CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set() -> Weight { // Minimum execution time: 10_857 nanoseconds. - Weight::from_ref_time(11_727_000) + Weight::from_parts(11_727_000) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } fn on_finalize() -> Weight { // Minimum execution time: 6_660 nanoseconds. - Weight::from_ref_time(7_100_000) + Weight::from_parts(7_100_000) } } diff --git a/pallets/weights/src/pallet_treasury.rs b/pallets/weights/src/pallet_treasury.rs index 9090f54af2..e4c2a3261f 100644 --- a/pallets/weights/src/pallet_treasury.rs +++ b/pallets/weights/src/pallet_treasury.rs @@ -62,9 +62,9 @@ impl pallet_treasury::WeightInfo for SubstrateWeight { /// The range of component `b` is `[1, 128]`. fn disbursement(b: u32) -> Weight { // Minimum execution time: 48_413 nanoseconds. - Weight::from_ref_time(1_635_177) + Weight::from_parts(1_635_177) // Standard Error: 40_618 - .saturating_add(Weight::from_ref_time(29_261_008).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(29_261_008).saturating_mul(b.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().reads((3_u64).saturating_mul(b.into()))) .saturating_add(DbWeight::get().writes(1)) @@ -82,7 +82,7 @@ impl pallet_treasury::WeightInfo for SubstrateWeight { // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn reimbursement() -> Weight { // Minimum execution time: 60_631 nanoseconds. - Weight::from_ref_time(64_196_000) + Weight::from_parts(64_196_000) .saturating_add(DbWeight::get().reads(8)) .saturating_add(DbWeight::get().writes(2)) } diff --git a/pallets/weights/src/pallet_utility.rs b/pallets/weights/src/pallet_utility.rs index 5e042db683..f6ee08dfa4 100644 --- a/pallets/weights/src/pallet_utility.rs +++ b/pallets/weights/src/pallet_utility.rs @@ -60,9 +60,9 @@ impl pallet_utility::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 1000]`. fn batch(c: u32) -> Weight { // Minimum execution time: 7_120 nanoseconds. - Weight::from_ref_time(40_789_048) + Weight::from_parts(40_789_048) // Standard Error: 6_442 - .saturating_add(Weight::from_ref_time(11_967_780).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(11_967_780).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } @@ -73,9 +73,9 @@ impl pallet_utility::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32) -> Weight { // Minimum execution time: 7_411 nanoseconds. - Weight::from_ref_time(30_708_916) + Weight::from_parts(30_708_916) // Standard Error: 7_425 - .saturating_add(Weight::from_ref_time(12_017_560).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(12_017_560).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } @@ -87,7 +87,7 @@ impl pallet_utility::WeightInfo for SubstrateWeight { // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) fn dispatch_as() -> Weight { // Minimum execution time: 22_684 nanoseconds. - Weight::from_ref_time(23_825_000) + Weight::from_parts(23_825_000) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(3)) } @@ -98,9 +98,9 @@ impl pallet_utility::WeightInfo for SubstrateWeight { /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32) -> Weight { // Minimum execution time: 7_602 nanoseconds. - Weight::from_ref_time(37_888_291) + Weight::from_parts(37_888_291) // Standard Error: 7_863 - .saturating_add(Weight::from_ref_time(12_095_202).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(12_095_202).saturating_mul(c.into())) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(2)) } @@ -120,13 +120,13 @@ impl pallet_utility::WeightInfo for SubstrateWeight { // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) fn relay_tx() -> Weight { // Minimum execution time: 189_003 nanoseconds. - Weight::from_ref_time(196_184_000) + Weight::from_parts(196_184_000) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(3)) } fn ensure_root() -> Weight { // Minimum execution time: 671 nanoseconds. - Weight::from_ref_time(841_000) + Weight::from_parts(841_000) } // Storage: Identity CurrentPayer (r:1 w:1) // Proof: Identity CurrentPayer (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) @@ -136,7 +136,7 @@ impl pallet_utility::WeightInfo for SubstrateWeight { // Proof Skipped: Permissions CurrentDispatchableName (max_values: Some(1), max_size: None, mode: Measured) fn as_derivative() -> Weight { // Minimum execution time: 19_970 nanoseconds. - Weight::from_ref_time(23_145_000) + Weight::from_parts(23_145_000) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().writes(3)) } diff --git a/pallets/weights/src/pallet_validators.rs b/pallets/weights/src/pallet_validators.rs index 2c1501e662..c5a39d5546 100644 --- a/pallets/weights/src/pallet_validators.rs +++ b/pallets/weights/src/pallet_validators.rs @@ -65,7 +65,7 @@ impl pallet_validators::WeightInfo for SubstrateWeight { // Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn add_permissioned_validator() -> Weight { // Minimum execution time: 41_553 nanoseconds. - Weight::from_ref_time(46_099_000) + Weight::from_parts(46_099_000, 0) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(1)) } @@ -73,7 +73,7 @@ impl pallet_validators::WeightInfo for SubstrateWeight { // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) fn remove_permissioned_validator() -> Weight { // Minimum execution time: 21_923 nanoseconds. - Weight::from_ref_time(23_775_000) + Weight::from_parts(23_775_000, 0) .saturating_add(DbWeight::get().reads(1)) .saturating_add(DbWeight::get().writes(1)) } @@ -81,7 +81,7 @@ impl pallet_validators::WeightInfo for SubstrateWeight { // Proof: Staking SlashingAllowedFor (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn change_slashing_allowed_for() -> Weight { // Minimum execution time: 8_042 nanoseconds. - Weight::from_ref_time(8_202_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(8_202_000, 0).saturating_add(DbWeight::get().writes(1)) } // Storage: Staking ValidatorCount (r:1 w:0) // Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) @@ -89,7 +89,7 @@ impl pallet_validators::WeightInfo for SubstrateWeight { // Proof Skipped: Staking PermissionedIdentity (max_values: None, max_size: None, mode: Measured) fn update_permissioned_validator_intended_count() -> Weight { // Minimum execution time: 15_513 nanoseconds. - Weight::from_ref_time(16_815_000) + Weight::from_parts(16_815_000, 0) .saturating_add(DbWeight::get().reads(2)) .saturating_add(DbWeight::get().writes(1)) } @@ -110,9 +110,9 @@ impl pallet_validators::WeightInfo for SubstrateWeight { /// The range of component `s` is `[1, 100]`. fn chill_from_governance(s: u32) -> Weight { // Minimum execution time: 63_263 nanoseconds. - Weight::from_ref_time(39_954_272) + Weight::from_parts(39_954_272, 0) // Standard Error: 31_787 - .saturating_add(Weight::from_ref_time(29_199_031).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(29_199_031, 0).saturating_mul(s.into())) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().reads((4_u64).saturating_mul(s.into()))) .saturating_add(DbWeight::get().writes(2)) @@ -125,9 +125,9 @@ impl pallet_validators::WeightInfo for SubstrateWeight { /// The range of component `m` is `[0, 150]`. fn set_commission_cap(m: u32) -> Weight { // Minimum execution time: 26_039 nanoseconds. - Weight::from_ref_time(36_161_210) + Weight::from_parts(36_161_210, 0) // Standard Error: 11_245 - .saturating_add(Weight::from_ref_time(4_450_891).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(4_450_891, 0).saturating_mul(m.into())) .saturating_add(DbWeight::get().reads(3)) .saturating_add(DbWeight::get().reads((1_u64).saturating_mul(m.into()))) .saturating_add(DbWeight::get().writes(2)) @@ -164,9 +164,9 @@ impl pallet_validators::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 16]`. fn validate_cdd_expiry_nominators(n: u32) -> Weight { // Minimum execution time: 211_797 nanoseconds. - Weight::from_ref_time(153_423_017) + Weight::from_parts(153_423_017, 0) // Standard Error: 176_413 - .saturating_add(Weight::from_ref_time(82_196_945).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(82_196_945, 0).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(5)) .saturating_add(DbWeight::get().reads((10_u64).saturating_mul(n.into()))) .saturating_add(DbWeight::get().writes(1)) diff --git a/pallets/weights/src/polymesh_contracts.rs b/pallets/weights/src/polymesh_contracts.rs index 94c1ade9a2..fbe5d448d5 100644 --- a/pallets/weights/src/polymesh_contracts.rs +++ b/pallets/weights/src/polymesh_contracts.rs @@ -77,11 +77,11 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `v` is `[1, 8192]`. fn chain_extension_read_storage(k: u32, v: u32) -> Weight { // Minimum execution time: 560_641 nanoseconds. - Weight::from_ref_time(568_884_097) + Weight::from_parts(568_884_097) // Standard Error: 295 - .saturating_add(Weight::from_ref_time(5_537).saturating_mul(k.into())) + .saturating_add(Weight::from_parts(5_537).saturating_mul(k.into())) // Standard Error: 295 - .saturating_add(Weight::from_ref_time(1_239).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(1_239).saturating_mul(v.into())) .saturating_add(DbWeight::get().reads(11)) .saturating_add(DbWeight::get().writes(3)) } @@ -104,9 +104,9 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn chain_extension_get_version(r: u32) -> Weight { // Minimum execution time: 547_351 nanoseconds. - Weight::from_ref_time(570_291_478) + Weight::from_parts(570_291_478) // Standard Error: 143_016 - .saturating_add(Weight::from_ref_time(57_355_066).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(57_355_066).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -131,9 +131,9 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `r` is `[1, 20]`. fn chain_extension_get_key_did(r: u32) -> Weight { // Minimum execution time: 1_305_758 nanoseconds. - Weight::from_ref_time(193_392_872) + Weight::from_parts(193_392_872) // Standard Error: 2_272_956 - .saturating_add(Weight::from_ref_time(823_214_072).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(823_214_072).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().reads((200_u64).saturating_mul(r.into()))) .saturating_add(DbWeight::get().writes(3)) @@ -157,9 +157,9 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn chain_extension_hash_twox_64(r: u32) -> Weight { // Minimum execution time: 531_227 nanoseconds. - Weight::from_ref_time(574_503_627) + Weight::from_parts(574_503_627) // Standard Error: 130_828 - .saturating_add(Weight::from_ref_time(74_434_324).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(74_434_324).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -182,9 +182,9 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 64]`. fn chain_extension_hash_twox_64_per_kb(n: u32) -> Weight { // Minimum execution time: 626_971 nanoseconds. - Weight::from_ref_time(669_184_963) + Weight::from_parts(669_184_963) // Standard Error: 79_245 - .saturating_add(Weight::from_ref_time(40_113_729).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(40_113_729).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -207,9 +207,9 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn chain_extension_hash_twox_128(r: u32) -> Weight { // Minimum execution time: 537_786 nanoseconds. - Weight::from_ref_time(569_946_926) + Weight::from_parts(569_946_926) // Standard Error: 134_509 - .saturating_add(Weight::from_ref_time(76_678_500).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(76_678_500).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -232,9 +232,9 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 64]`. fn chain_extension_hash_twox_128_per_kb(n: u32) -> Weight { // Minimum execution time: 625_068 nanoseconds. - Weight::from_ref_time(665_884_874) + Weight::from_parts(665_884_874) // Standard Error: 63_098 - .saturating_add(Weight::from_ref_time(47_295_181).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(47_295_181).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -257,9 +257,9 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn chain_extension_hash_twox_256(r: u32) -> Weight { // Minimum execution time: 532_639 nanoseconds. - Weight::from_ref_time(572_339_483) + Weight::from_parts(572_339_483) // Standard Error: 152_653 - .saturating_add(Weight::from_ref_time(81_070_860).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(81_070_860).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -282,9 +282,9 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `n` is `[0, 64]`. fn chain_extension_hash_twox_256_per_kb(n: u32) -> Weight { // Minimum execution time: 630_515 nanoseconds. - Weight::from_ref_time(675_775_349) + Weight::from_parts(675_775_349) // Standard Error: 63_761 - .saturating_add(Weight::from_ref_time(61_308_678).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(61_308_678).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } @@ -315,9 +315,9 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `n` is `[1, 8188]`. fn chain_extension_call_runtime(n: u32) -> Weight { // Minimum execution time: 569_483 nanoseconds. - Weight::from_ref_time(596_615_721) + Weight::from_parts(596_615_721) // Standard Error: 372 - .saturating_add(Weight::from_ref_time(2_316).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(2_316).saturating_mul(n.into())) .saturating_add(DbWeight::get().reads(14)) .saturating_add(DbWeight::get().writes(6)) } @@ -339,46 +339,46 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { // Proof Skipped: System EventTopics (max_values: None, max_size: None, mode: Measured) fn dummy_contract() -> Weight { // Minimum execution time: 229_474 nanoseconds. - Weight::from_ref_time(250_526_000) + Weight::from_parts(250_526_000) .saturating_add(DbWeight::get().reads(10)) .saturating_add(DbWeight::get().writes(3)) } /// The range of component `n` is `[1, 8188]`. fn basic_runtime_call(_n: u32) -> Weight { // Minimum execution time: 2_003 nanoseconds. - Weight::from_ref_time(3_338_377) + Weight::from_parts(3_338_377) } /// The range of component `i` is `[0, 1048576]`. /// The range of component `s` is `[0, 1048576]`. fn base_weight_with_hash(i: u32, s: u32) -> Weight { // Minimum execution time: 1_259_419 nanoseconds. - Weight::from_ref_time(49_636_467) + Weight::from_parts(49_636_467) // Standard Error: 4 - .saturating_add(Weight::from_ref_time(1_166).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(1_166).saturating_mul(i.into())) // Standard Error: 4 - .saturating_add(Weight::from_ref_time(1_246).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_246).saturating_mul(s.into())) } /// The range of component `c` is `[0, 61717]`. /// The range of component `i` is `[0, 1048576]`. /// The range of component `s` is `[0, 1048576]`. fn base_weight_with_code(c: u32, i: u32, s: u32) -> Weight { // Minimum execution time: 1_332_498 nanoseconds. - Weight::from_ref_time(22_375_295) + Weight::from_parts(22_375_295) // Standard Error: 70 - .saturating_add(Weight::from_ref_time(1_421).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(1_421).saturating_mul(c.into())) // Standard Error: 4 - .saturating_add(Weight::from_ref_time(1_163).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(1_163).saturating_mul(i.into())) // Standard Error: 4 - .saturating_add(Weight::from_ref_time(1_244).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(1_244).saturating_mul(s.into())) } // Storage: PolymeshContracts CallRuntimeWhitelist (r:0 w:2000) // Proof: PolymeshContracts CallRuntimeWhitelist (max_values: None, max_size: Some(3), added: 2478, mode: MaxEncodedLen) /// The range of component `u` is `[0, 2000]`. fn update_call_runtime_whitelist(u: u32) -> Weight { // Minimum execution time: 2_583 nanoseconds. - Weight::from_ref_time(2_614_000) + Weight::from_parts(2_614_000) // Standard Error: 1_438 - .saturating_add(Weight::from_ref_time(1_376_360).saturating_mul(u.into())) + .saturating_add(Weight::from_parts(1_376_360).saturating_mul(u.into())) .saturating_add(DbWeight::get().writes((1_u64).saturating_mul(u.into()))) } // Storage: Identity KeyRecords (r:2 w:1) @@ -399,7 +399,7 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { // Proof Skipped: Identity KeyAssetPermissions (max_values: None, max_size: None, mode: Measured) fn link_contract_as_secondary_key() -> Weight { // Minimum execution time: 43_004 nanoseconds. - Weight::from_ref_time(45_399_000) + Weight::from_parts(45_399_000) .saturating_add(DbWeight::get().reads(6)) .saturating_add(DbWeight::get().writes(5)) } @@ -429,7 +429,7 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { // Proof: Identity ChildDid (max_values: None, max_size: Some(65), added: 2540, mode: MaxEncodedLen) fn link_contract_as_primary_key() -> Weight { // Minimum execution time: 64_366 nanoseconds. - Weight::from_ref_time(68_192_000) + Weight::from_parts(68_192_000) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(6)) } @@ -437,7 +437,7 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { // Proof: PolymeshContracts ApiNextUpgrade (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) fn upgrade_api() -> Weight { // Minimum execution time: 9_955 nanoseconds. - Weight::from_ref_time(11_416_000).saturating_add(DbWeight::get().writes(1)) + Weight::from_parts(11_416_000).saturating_add(DbWeight::get().writes(1)) } // Storage: Identity KeyRecords (r:1 w:0) // Proof: Identity KeyRecords (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) @@ -462,9 +462,9 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn chain_extension_get_latest_api_upgrade(r: u32) -> Weight { // Minimum execution time: 528_352 nanoseconds. - Weight::from_ref_time(571_012_568) + Weight::from_parts(571_012_568) // Standard Error: 283_679 - .saturating_add(Weight::from_ref_time(342_166_548).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(342_166_548).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(5)) } @@ -491,9 +491,9 @@ impl polymesh_contracts::WeightInfo for SubstrateWeight { /// The range of component `r` is `[0, 20]`. fn chain_extension_get_next_asset_id(r: u32) -> Weight { // Minimum execution time: 536_154 nanoseconds. - Weight::from_ref_time(599_143_461) + Weight::from_parts(599_143_461) // Standard Error: 567_627 - .saturating_add(Weight::from_ref_time(401_571_182).saturating_mul(r.into())) + .saturating_add(Weight::from_parts(401_571_182).saturating_mul(r.into())) .saturating_add(DbWeight::get().reads(12)) .saturating_add(DbWeight::get().writes(3)) } diff --git a/primitives/src/migrate.rs b/primitives/src/migrate.rs index 0065590a6a..5dfc63687e 100644 --- a/primitives/src/migrate.rs +++ b/primitives/src/migrate.rs @@ -59,7 +59,7 @@ pub fn frame_v2_migrate( current_version, target_version ); - weight += Weight::from_ref_time(1_000); + weight += Weight::from_parts(1_000, 0); // Update the storage version target_version.put::