Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Runtime State Test + Integration with try-runtime #10174

Merged
merged 48 commits into from
Sep 1, 2022

Conversation

kianenigma
Copy link
Contributor

@kianenigma kianenigma commented Nov 4, 2021

This PR adds a new hook to the try-runtime follow-chain subcommand to execute a custom hook called sanity_check per block. This allows us to avoid dumping too much testing code into debug_assertion, and instead test them in real life. To see more about what follow-chain itself is doing, see #9788.

Polkadot companion: paritytech/polkadot#5907

(Updated) Context:

I have pulled this PR out of the grave again, since I need it for my nomination pools. Reviews can be easy going, since this is all offchain code, but, please be aware:

  1. I genuinely dislike the name sanity_check now. I think we should rename it to on_block_check, and rename integrity_testto on_construct_runtime_check. If all agree, I will do it in this PR.
  2. I had to add a new type AllPalletWithSystemFlat, which is basically the same thing as before but tuples are not nested. This is needed because PalletInfoAccess is implemented on each individual pallet, but not on tuples. In reviews, please double check for me that this has no side-effect, other than us needing to increase some of the limits on impl_trait_for_tuples from 30 to 100.

Currently, the follow-chain command is an okay-ish way to continuously run these sanity checks, but honestly it is kinda slow and sluggish. As a follow-up, I will work on integrating this into the main client, so you can import blocks but use the try-runtime api instead of Core for block import.

TODO:

  1. think of a wrapper trait to hide the second parameter.
  2. feature gate functions again.
  3. fix all tests.
  4. double check that AllPalletsWithSystemFlat has not side-effect.
  5. Clean up the return type of sanity checks
  6. (optional) Rename integrity_check -> on_construct_runtime_check
  7. (optional) Rename sanity_check -> state_consistency_check

@github-actions github-actions bot added the A3-in_progress Pull request is in progress. No review needed at this stage. label Nov 4, 2021
@kianenigma kianenigma changed the title Kiz sanity check trait Execute runtime sanity-checks in follow-chain command Nov 4, 2021
@stale
Copy link

stale bot commented Dec 4, 2021

Hey, is anyone still working on this? Due to the inactivity this issue has been automatically marked as stale. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the A5-stale Pull request did not receive any updates in a long time. No review needed at this stage. Close it. label Dec 4, 2021
@kianenigma
Copy link
Contributor Author

yes there is.

@stale stale bot removed the A5-stale Pull request did not receive any updates in a long time. No review needed at this stage. Close it. label Dec 5, 2021
@kianenigma
Copy link
Contributor Author

stale but I will get to it soon.

@stale
Copy link

stale bot commented Jan 15, 2022

Hey, is anyone still working on this? Due to the inactivity this issue has been automatically marked as stale. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the A5-stale Pull request did not receive any updates in a long time. No review needed at this stage. Close it. label Jan 15, 2022
@stale stale bot closed this Jan 29, 2022
@kianenigma
Copy link
Contributor Author

want this.

@kianenigma kianenigma reopened this Feb 3, 2022
@stale stale bot removed the A5-stale Pull request did not receive any updates in a long time. No review needed at this stage. Close it. label Feb 3, 2022
@stale
Copy link

stale bot commented Mar 5, 2022

Hey, is anyone still working on this? Due to the inactivity this issue has been automatically marked as stale. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the A5-stale Pull request did not receive any updates in a long time. No review needed at this stage. Close it. label Mar 5, 2022
@kianenigma kianenigma removed the A5-stale Pull request did not receive any updates in a long time. No review needed at this stage. Close it. label Mar 5, 2022
@stale
Copy link

stale bot commented Apr 22, 2022

Hey, is anyone still working on this? Due to the inactivity this issue has been automatically marked as stale. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the A5-stale Pull request did not receive any updates in a long time. No review needed at this stage. Close it. label Apr 22, 2022
@stale stale bot closed this May 6, 2022
@kianenigma kianenigma reopened this May 6, 2022
@stale stale bot removed the A5-stale Pull request did not receive any updates in a long time. No review needed at this stage. Close it. label May 6, 2022
@stale
Copy link

stale bot commented Jun 5, 2022

Hey, is anyone still working on this? Due to the inactivity this issue has been automatically marked as stale. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the A5-stale Pull request did not receive any updates in a long time. No review needed at this stage. Close it. label Jun 5, 2022
@ggwpez
Copy link
Member

ggwpez commented Aug 30, 2022

bot rebase

@paritytech-processbot
Copy link

Rebased

@kianenigma
Copy link
Contributor Author

/cmd queue -c fmt $ 1

@command-bot
Copy link

command-bot bot commented Sep 1, 2022

@kianenigma https://gitlab.parity.io/parity/mirrors/substrate/-/jobs/1797449 was started for your command "$PIPELINE_SCRIPTS_DIR/fmt.sh" 1. Check out https://gitlab.parity.io/parity/mirrors/substrate/-/pipelines?page=1&scope=all&username=group_605_bot to know what else is being executed currently.

Comment /cmd cancel 44-2cc79314-8b64-4c29-8eaa-5f8258928587 to cancel this command or /cmd cancel to cancel all commands in this pull request.

@command-bot
Copy link

command-bot bot commented Sep 1, 2022

@kianenigma Command "$PIPELINE_SCRIPTS_DIR/fmt.sh" 1 has finished. Result: https://gitlab.parity.io/parity/mirrors/substrate/-/jobs/1797449 has finished. If any artifacts were generated, you can download them from https://gitlab.parity.io/parity/mirrors/substrate/-/jobs/1797449/artifacts/download.

@kianenigma
Copy link
Contributor Author

bot merge

@paritytech-processbot paritytech-processbot bot merged commit 324a18e into master Sep 1, 2022
@paritytech-processbot paritytech-processbot bot deleted the kiz-sanity-check-trait branch September 1, 2022 10:33
@shawntabrizi
Copy link
Member

NOTE FOR DEVELOPERS:

This PR triggers a lot of errors of the try-runtime feature flag is not correctly set up on your runtime.

Make sure each custom pallet has at least a try-runtime feature flag:

try-runtime = [ "frame-support/try-runtime" ]

and that all of these features are enabled across the pallets used in your runtime:

See: paritytech/cumulus@480b977

Otherwise you will get errors like:

error: failed to run custom build command for `statemint-runtime v1.0.0 (/Users/shawntabrizi/Documents/GitHub/cumulus/parachains/runtimes/assets/statemint)`

Caused by:
  process didn't exit successfully: `/Users/shawntabrizi/Documents/GitHub/cumulus/target/debug/build/statemint-runtime-7ab48e0f89a28cba/build-script-build` (exit status: 1)
  --- stdout
  Information that should be included in a bug report.
  Executing build command: "/Users/shawntabrizi/.rustup/toolchains/nightly-aarch64-apple-darwin/bin/cargo" "rustc" "--target=wasm32-unknown-unknown" "--manifest-path=/Users/shawntabrizi/Documents/GitHub/cumulus/target/debug/wbuild/statemint-runtime/Cargo.toml" "--color=always" "--profile" "release"
  Using rustc version: rustc 1.65.0-nightly (34a6cae28 2022-08-09)


  --- stderr
     Compiling pallet-utility v4.0.0-dev (https://github.com/paritytech/substrate?branch=master#5b0f999d)
     Compiling statemint-runtime v1.0.0 (/Users/shawntabrizi/Documents/GitHub/cumulus/parachains/runtimes/assets/statemint)
  error[E0599]: the function or associated item `try_runtime_upgrade` exists for struct `frame_executive::Executive<Runtime, sp_runtime::generic::Block<sp_runtime::generic::Header<u32, BlakeTwo256>, sp_runtime::generic::UncheckedExtrinsic<MultiAddress<sp_runtime::AccountId32, ()>, Call, MultiSignature, (CheckNonZeroSender<Runtime>, CheckSpecVersion<Runtime>, CheckTxVersion<Runtime>, CheckGenesis<Runtime>, CheckEra<Runtime>, CheckNonce<Runtime>, CheckWeight<Runtime>, ChargeAssetTxPayment<Runtime>)>>, ChainContext<Runtime>, Runtime, (frame_system::Pallet<Runtime>, cumulus_pallet_parachain_system::Pallet<Runtime>, pallet_timestamp::Pallet<Runtime>, parachain_info::Pallet<Runtime>, pallet_balances::Pallet<Runtime>, pallet_transaction_payment::Pallet<Runtime>, pallet_asset_tx_payment::Pallet<Runtime>, pallet_authorship::Pallet<Runtime>, pallet_collator_selection::Pallet<Runtime>, pallet_session::Pallet<Runtime>, pallet_aura::Pallet<Runtime>, cumulus_pallet_aura_ext::Pallet<Runtime>, cumulus_pallet_xcmp_queue::Pallet<Runtime>, pallet_xcm::Pallet<Runtime>, cumulus_pallet_xcm::Pallet<Runtime>, cumulus_pallet_dmp_queue::Pallet<Runtime>, pallet_utility::Pallet<Runtime>, pallet_multisig::Pallet<Runtime>, pallet_proxy::Pallet<Runtime>, pallet_assets::Pallet<Runtime>, pallet_uniques::Pallet<Runtime>)>`, but its trait bounds were not satisfied
     --> /Users/shawntabrizi/Documents/GitHub/cumulus/parachains/runtimes/assets/statemint/src/lib.rs:805:28
      |
  805 |             let weight = Executive::try_runtime_upgrade().unwrap();
      |                                     ^^^^^^^^^^^^^^^^^^^ function or associated item cannot be called on `frame_executive::Executive<Runtime, sp_runtime::generic::Block<sp_runtime::generic::Header<u32, BlakeTwo256>, sp_runtime::generic::UncheckedExtrinsic<MultiAddress<sp_runtime::AccountId32, ()>, Call, MultiSignature, (CheckNonZeroSender<Runtime>, CheckSpecVersion<Runtime>, CheckTxVersion<Runtime>, CheckGenesis<Runtime>, CheckEra<Runtime>, CheckNonce<Runtime>, CheckWeight<Runtime>, ChargeAssetTxPayment<Runtime>)>>, ChainContext<Runtime>, Runtime, (frame_system::Pallet<Runtime>, cumulus_pallet_parachain_system::Pallet<Runtime>, pallet_timestamp::Pallet<Runtime>, parachain_info::Pallet<Runtime>, pallet_balances::Pallet<Runtime>, pallet_transaction_payment::Pallet<Runtime>, pallet_asset_tx_payment::Pallet<Runtime>, pallet_authorship::Pallet<Runtime>, pallet_collator_selection::Pallet<Runtime>, pallet_session::Pallet<Runtime>, pallet_aura::Pallet<Runtime>, cumulus_pallet_aura_ext::Pallet<Runtime>, cumulus_pallet_xcmp_queue::Pallet<Runtime>, pallet_xcm::Pallet<Runtime>, cumulus_pallet_xcm::Pallet<Runtime>, cumulus_pallet_dmp_queue::Pallet<Runtime>, pallet_utility::Pallet<Runtime>, pallet_multisig::Pallet<Runtime>, pallet_proxy::Pallet<Runtime>, pallet_assets::Pallet<Runtime>, pallet_uniques::Pallet<Runtime>)>` due to unsatisfied trait bounds
      |
      = note: the following trait bounds were not satisfied:
              `(frame_system::Pallet<Runtime>, cumulus_pallet_parachain_system::Pallet<Runtime>, pallet_timestamp::Pallet<Runtime>, parachain_info::Pallet<Runtime>, pallet_balances::Pallet<Runtime>, pallet_transaction_payment::Pallet<Runtime>, pallet_asset_tx_payment::Pallet<Runtime>, pallet_authorship::Pallet<Runtime>, pallet_collator_selection::Pallet<Runtime>, pallet_session::Pallet<Runtime>, pallet_aura::Pallet<Runtime>, cumulus_pallet_aura_ext::Pallet<Runtime>, cumulus_pallet_xcmp_queue::Pallet<Runtime>, pallet_xcm::Pallet<Runtime>, cumulus_pallet_xcm::Pallet<Runtime>, cumulus_pallet_dmp_queue::Pallet<Runtime>, pallet_utility::Pallet<Runtime>, pallet_multisig::Pallet<Runtime>, pallet_proxy::Pallet<Runtime>, pallet_assets::Pallet<Runtime>, pallet_uniques::Pallet<Runtime>): TryState<u32>`

  error[E0599]: the function or associated item `try_execute_block` exists for struct `frame_executive::Executive<Runtime, sp_runtime::generic::Block<sp_runtime::generic::Header<u32, BlakeTwo256>, sp_runtime::generic::UncheckedExtrinsic<MultiAddress<sp_runtime::AccountId32, ()>, Call, MultiSignature, (CheckNonZeroSender<Runtime>, CheckSpecVersion<Runtime>, CheckTxVersion<Runtime>, CheckGenesis<Runtime>, CheckEra<Runtime>, CheckNonce<Runtime>, CheckWeight<Runtime>, ChargeAssetTxPayment<Runtime>)>>, ChainContext<Runtime>, Runtime, (frame_system::Pallet<Runtime>, cumulus_pallet_parachain_system::Pallet<Runtime>, pallet_timestamp::Pallet<Runtime>, parachain_info::Pallet<Runtime>, pallet_balances::Pallet<Runtime>, pallet_transaction_payment::Pallet<Runtime>, pallet_asset_tx_payment::Pallet<Runtime>, pallet_authorship::Pallet<Runtime>, pallet_collator_selection::Pallet<Runtime>, pallet_session::Pallet<Runtime>, pallet_aura::Pallet<Runtime>, cumulus_pallet_aura_ext::Pallet<Runtime>, cumulus_pallet_xcmp_queue::Pallet<Runtime>, pallet_xcm::Pallet<Runtime>, cumulus_pallet_xcm::Pallet<Runtime>, cumulus_pallet_dmp_queue::Pallet<Runtime>, pallet_utility::Pallet<Runtime>, pallet_multisig::Pallet<Runtime>, pallet_proxy::Pallet<Runtime>, pallet_assets::Pallet<Runtime>, pallet_uniques::Pallet<Runtime>)>`, but its trait bounds were not satisfied
     --> /Users/shawntabrizi/Documents/GitHub/cumulus/parachains/runtimes/assets/statemint/src/lib.rs:817:15
      |
  817 |             Executive::try_execute_block(block, state_root_check, select).expect("try_execute_block failed")
      |                        ^^^^^^^^^^^^^^^^^ function or associated item cannot be called on `frame_executive::Executive<Runtime, sp_runtime::generic::Block<sp_runtime::generic::Header<u32, BlakeTwo256>, sp_runtime::generic::UncheckedExtrinsic<MultiAddress<sp_runtime::AccountId32, ()>, Call, MultiSignature, (CheckNonZeroSender<Runtime>, CheckSpecVersion<Runtime>, CheckTxVersion<Runtime>, CheckGenesis<Runtime>, CheckEra<Runtime>, CheckNonce<Runtime>, CheckWeight<Runtime>, ChargeAssetTxPayment<Runtime>)>>, ChainContext<Runtime>, Runtime, (frame_system::Pallet<Runtime>, cumulus_pallet_parachain_system::Pallet<Runtime>, pallet_timestamp::Pallet<Runtime>, parachain_info::Pallet<Runtime>, pallet_balances::Pallet<Runtime>, pallet_transaction_payment::Pallet<Runtime>, pallet_asset_tx_payment::Pallet<Runtime>, pallet_authorship::Pallet<Runtime>, pallet_collator_selection::Pallet<Runtime>, pallet_session::Pallet<Runtime>, pallet_aura::Pallet<Runtime>, cumulus_pallet_aura_ext::Pallet<Runtime>, cumulus_pallet_xcmp_queue::Pallet<Runtime>, pallet_xcm::Pallet<Runtime>, cumulus_pallet_xcm::Pallet<Runtime>, cumulus_pallet_dmp_queue::Pallet<Runtime>, pallet_utility::Pallet<Runtime>, pallet_multisig::Pallet<Runtime>, pallet_proxy::Pallet<Runtime>, pallet_assets::Pallet<Runtime>, pallet_uniques::Pallet<Runtime>)>` due to unsatisfied trait bounds
      |
      = note: the following trait bounds were not satisfied:
              `(frame_system::Pallet<Runtime>, cumulus_pallet_parachain_system::Pallet<Runtime>, pallet_timestamp::Pallet<Runtime>, parachain_info::Pallet<Runtime>, pallet_balances::Pallet<Runtime>, pallet_transaction_payment::Pallet<Runtime>, pallet_asset_tx_payment::Pallet<Runtime>, pallet_authorship::Pallet<Runtime>, pallet_collator_selection::Pallet<Runtime>, pallet_session::Pallet<Runtime>, pallet_aura::Pallet<Runtime>, cumulus_pallet_aura_ext::Pallet<Runtime>, cumulus_pallet_xcmp_queue::Pallet<Runtime>, pallet_xcm::Pallet<Runtime>, cumulus_pallet_xcm::Pallet<Runtime>, cumulus_pallet_dmp_queue::Pallet<Runtime>, pallet_utility::Pallet<Runtime>, pallet_multisig::Pallet<Runtime>, pallet_proxy::Pallet<Runtime>, pallet_assets::Pallet<Runtime>, pallet_uniques::Pallet<Runtime>): TryState<u32>`

  For more information about this error, try `rustc --explain E0599`.
  error: could not compile `statemint-runtime` due to 2 previous errors
warning: build failed, waiting for other jobs to finish...

@Polkadot-Forum
Copy link

This pull request has been mentioned on Polkadot Forum. There might be relevant details there:

https://forum.polkadot.network/t/testing-complext-frame-pallets-discussion-tools/356/1

kianenigma added a commit to kianenigma/seeding that referenced this pull request Sep 27, 2022
# Membership Request 

Hi, I am Kian Paimani, known as @kianenigma. I have been working on Polkadot/Kusama through Parity since February 2019 and I can categorize my main contributions to Polkadot's ecosystem as follows: 

1. Maintaining and developing the staking sub-system.
2. General FRAME development, especially testing and quality assurance. 
3. Polkadot-native side-projects. 
4. Education 

> My first contribution to Polkadot is also indeed related to staking: paritytech/substrate#1915

### Staking system

I joke as the Polkadot staking to be both my blessing and my curse over the years. I started working on it since the first days that I joined this ecosystem and the work [is ongoing ever since](https://github.com/orgs/paritytech/projects/33/views/9). In the past, I focused on making sure that the staking system is secure and to some extent scalable. More recently, I coordinated the (imminent) launch of Nomination Pools. Nowadays I also put an extra effort on making sure that this sub-system of Polkadot is *sustainable*, through code refactor and educating other core developers. 

Lastly, I have been the main author of the [Polkadot staking newsletter](https://gist.github.com/kianenigma/aa835946455b9a3f167821b9d05ba376), which is my main attempt at making the entire complexity and development of this part of the protocol transparent to the end-users.

I expect myself to contribute *directly* to the staking system for at least another ~12, if not more, and afterwards having the role of an advisor. 

Some notable contributions: 

- paritytech/substrate#4517
- paritytech/substrate#7910
- paritytech/substrate#6242
- paritytech/substrate#9415
- paritytech/polkadot#3141
- paritytech/substrate#11212
- paritytech/substrate#12129

### FRAME 

Historically, I have contributed a variety of domains in FRAME, namely: 

- Early version of the weight system paritytech/substrate#3816 paritytech/substrate#3157
- Early version of the transaction fee system
- Primitive arithmetic types paritytech/substrate#3456
- Council election pallet paritytech/substrate#3364

Many of which were, admittedly, a PoC at most, if not considered "poor". I am happy that nowadays many of the above have been refactored and are being maintained by new domain experts. 

These days, I put most of my FRAME focus on testing and quality assurance. Through my work in the staking system, I have had to deal with the high sensitivity and liveness requirement of protocol development first hand (I believe I had to do among the [very first storage migrations](paritytech/substrate#3948) in Kusama) and consequently I felt the need to make better testing facilities, all of which have been formulated in https://forum.polkadot.network/t/testing-complex-frame-pallets-discussion-tools/356. Some relevant PRs:

- paritytech/substrate#8038
- paritytech/substrate#9788
- paritytech/substrate#10174

Regardless of wearing the staking hat, I plan to remain a direct contributor to FRAME, namely because I consider it to be an important requirements of successfully delivering more features to Polkadot's ecosystem. 

### Polkadot-Native Side Projects

I have started multiple small, mostly non-RUST projects in the polkadot ecosystem that I am very happy about, and I plan to continue doing so. I have not yet found the time to make a "polished product" out of any of these, but I hope that I can help foster our community such that someday a team will do so. I consider my role, for the time being, to *put ideas out there* through these side projects. 

- https://github.com/substrate-portfolio/polkadot-portfolio/
- https://github.com/kianenigma/polkadot-basic-notification/
- https://github.com/paritytech/polkadot-scripts/
- https://github.com/paritytech/substrate-debug-kit/

### Education 

Lastly, aside from having had a number of educational talks over the years (all of which [are listed](https://hello.kianenigma.nl/talks/) in my personal website), I am a big enthusiast of the newly formed Polkadot Blockchain Academy. I have [been an instructor](https://singular.app/collectibles/statemine/16/2) in the first cohort, and continue to contribute for as long and as much as I can, whilst still attending to the former 3 duties. 

---

With all of that being said and done, I consider myself at the beginning of the path to Dan 4, but happy to start at a lower one as well.
bkchr added a commit to polkadot-fellows/seeding that referenced this pull request Sep 27, 2022
# Membership Request 

Hi, I am Kian Paimani, known as @kianenigma. I have been working on Polkadot/Kusama through Parity since February 2019 and I can categorize my main contributions to Polkadot's ecosystem as follows: 

1. Maintaining and developing the staking sub-system.
2. General FRAME development, especially testing and quality assurance. 
3. Polkadot-native side-projects. 
4. Education 

> My first contribution to Polkadot is also indeed related to staking: paritytech/substrate#1915

### Staking system

I joke as the Polkadot staking to be both my blessing and my curse over the years. I started working on it since the first days that I joined this ecosystem and the work [is ongoing ever since](https://github.com/orgs/paritytech/projects/33/views/9). In the past, I focused on making sure that the staking system is secure and to some extent scalable. More recently, I coordinated the (imminent) launch of Nomination Pools. Nowadays I also put an extra effort on making sure that this sub-system of Polkadot is *sustainable*, through code refactor and educating other core developers. 

Lastly, I have been the main author of the [Polkadot staking newsletter](https://gist.github.com/kianenigma/aa835946455b9a3f167821b9d05ba376), which is my main attempt at making the entire complexity and development of this part of the protocol transparent to the end-users.

I expect myself to contribute *directly* to the staking system for at least another ~12, if not more, and afterwards having the role of an advisor. 

Some notable contributions: 

- paritytech/substrate#4517
- paritytech/substrate#7910
- paritytech/substrate#6242
- paritytech/substrate#9415
- paritytech/polkadot#3141
- paritytech/substrate#11212
- paritytech/substrate#12129

### FRAME 

Historically, I have contributed a variety of domains in FRAME, namely: 

- Early version of the weight system paritytech/substrate#3816 paritytech/substrate#3157
- Early version of the transaction fee system
- Primitive arithmetic types paritytech/substrate#3456
- Council election pallet paritytech/substrate#3364

Many of which were, admittedly, a PoC at most, if not considered "poor". I am happy that nowadays many of the above have been refactored and are being maintained by new domain experts. 

These days, I put most of my FRAME focus on testing and quality assurance. Through my work in the staking system, I have had to deal with the high sensitivity and liveness requirement of protocol development first hand (I believe I had to do among the [very first storage migrations](paritytech/substrate#3948) in Kusama) and consequently I felt the need to make better testing facilities, all of which have been formulated in https://forum.polkadot.network/t/testing-complex-frame-pallets-discussion-tools/356. Some relevant PRs:

- paritytech/substrate#8038
- paritytech/substrate#9788
- paritytech/substrate#10174

Regardless of wearing the staking hat, I plan to remain a direct contributor to FRAME, namely because I consider it to be an important requirements of successfully delivering more features to Polkadot's ecosystem. 

### Polkadot-Native Side Projects

I have started multiple small, mostly non-RUST projects in the polkadot ecosystem that I am very happy about, and I plan to continue doing so. I have not yet found the time to make a "polished product" out of any of these, but I hope that I can help foster our community such that someday a team will do so. I consider my role, for the time being, to *put ideas out there* through these side projects. 

- https://github.com/substrate-portfolio/polkadot-portfolio/
- https://github.com/kianenigma/polkadot-basic-notification/
- https://github.com/paritytech/polkadot-scripts/
- https://github.com/paritytech/substrate-debug-kit/

### Education 

Lastly, aside from having had a number of educational talks over the years (all of which [are listed](https://hello.kianenigma.nl/talks/) in my personal website), I am a big enthusiast of the newly formed Polkadot Blockchain Academy. I have [been an instructor](https://singular.app/collectibles/statemine/16/2) in the first cohort, and continue to contribute for as long and as much as I can, whilst still attending to the former 3 duties. 

---

With all of that being said and done, I consider myself at the beginning of the path to Dan 4, but happy to start at a lower one as well.

Co-authored-by: Bastian Köcher <git@kchr.de>
atodorov added a commit to gluwa/creditcoin that referenced this pull request Jan 10, 2023
trying to resolve unsatisfied trait bounds error, see
paritytech/substrate#10174 (comment)
ark0f pushed a commit to gear-tech/substrate that referenced this pull request Feb 27, 2023
* add missing version to dependencies

* Huh

* add features more

* more fixing

* last touches

* it all finally works

* remove some feature gates

* remove unused

* fix old macro

* make it work again

* fmt

* remove unused import

* ".git/.scripts/fmt.sh" 1

* Cleanup more

* fix and rename everything

* a few clippy fixes

* Add try-runtime feature

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* small fixes

* fmt

* Update bin/node-template/runtime/src/lib.rs

* fix build

* Update utils/frame/try-runtime/cli/src/lib.rs

Co-authored-by: David <dvdplm@gmail.com>

* Update utils/frame/try-runtime/cli/src/commands/execute_block.rs

Co-authored-by: David <dvdplm@gmail.com>

* address all review comments

* fix typos

* revert spec change

* last touches

* update docs

* fmt

* remove some debug_assertions

* fmt

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: command-bot <>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: David <dvdplm@gmail.com>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
A0-please_review Pull request needs code review. C1-low PR touches the given topic and has a low impact on builders. D2-notlive 💤 PR contains changes in a runtime directory that is not deployed to a chain that requires an audit.
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

9 participants