-
Notifications
You must be signed in to change notification settings - Fork 739
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add development chain-spec file for minimal/parachain templates for Omni Node compatibility #6529
base: master
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @EleisonC ! Left a few comments for now.
Looking forward to the README updates & btw, have you clarified how to make a rust test for the chain specs?
Hey @iulianbarbu that is what I am looking into today. Do you have any pointers you'd like me to know as I move forward? |
From the top of my head I thought about adding an integration test. You could build a |
Hey @iulianbarbu one last question it's okay if I placed the test folder/file under the nodes folder/file. if not is there a better place |
Hmm, thought about placing it under |
Hey @iulianbarbu regarding comparing the two I am a bit stuck on what to compare. From my research I would think it's other the code or value of top |
I figured out my problem was around decoding a Hex String to bytes. I can now properly traverse the values of the Top section and find the code for that spec file |
d load its content as a
Happy to hear you've sorted it out! I've noticed that in some tests we don't compare the code portions of the generated chain specs, and that's mainly because they are not super relevant for the test case. For this test though I think that it is relevant, to ensure generated chain specs correspond to the runtimes in the CI. Some other good news is that once we'll have these chain specs we'll be able to easily run in the CI the As usual, LMK in case of blockers, happy to take a look. |
Signed-off-by: EleisonC <[email protected]>
Hey @iulianbarbu, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you please regenerate the dev_chain_spec.json
for minimal (for now) after building the minimal/runtime
with cargo build
? I wonder if you built the runtime with --release
and then generated the dev_chain_spec.json
. It makes sense according to the README, but we run the tests with the testnet
profile, which enables the debug symbols, and I think the chain spec code
section differs based on the profile. I would be curious to run the test again after you regenerate the dev_chain_spec.json
, and also see if regenerating on my machine results in a different code section, or chain spec altogheter.
Co-authored-by: Alexander Samusev <[email protected]>
@iulianbarbu Update: I am trying to run the workflow steps locally using Podman and Srtool, as I hope to compare the wasm binary (spec chain.json file) that I build locally. Do you think the Rust version used in the workflow could have any impact? I'm just curious. I realize that’s what Srtool is designed to address, along with the differences between Podman and Docker that I'm attempting to replicate. However, I want to be confident about this process. |
Hi @EleisonC ! I am expecting the chain specs to be the same if generated with any 'chain-spec-builder' version (no matter how it got built). Can you compare the wasm blob generated on the CI with the one generated on your machine? Alternatively, if they differ, I would compare wasm runtimes generated by two runs of the GH action you introduced (by downloading manually the wasms from action storage, if you have access to the action output). I am assuming they will be the same at least when built on the CI for multiple times from the same git commit. @skunert any idea why the chain specs differ even if both were built based on the same runtime, built with srtool? |
This is not related to the rust version or the chainspec itself. The runtime wasm is the only changing factor here. The rust version is handled by the docker image pulled by SRTool. What happened here is different. When building this branch locally I arrived at this summary from SRTool (parachain template runtime):
We see that the Blake2 hash of the runtime is The reason is that CI merges the current branch with master for the job. Master had some recent changes to the parachain template runtime which resulted in a different WASM blob. After merging master I arrive at the same hash as CI:
|
Hey @iulianbarbu I uploaded a new dev_chain_spec for Parachain. I checked it against the out come of the previous run, and it looks hopeful. Getting around the minimal one |
@iulianbarbu also I still get different hashes for my minimal. Clearing my cache and all to give it another try |
Hey @skunert tried the same with the minimal but I keep on getting a BLAKE2_256
I cleared my cache and ran the command with the latest master, but I'm still building that WASM blob. Any pointers on what I might be missing out? |
I am getting the same as your posted snippet from CI:
Did you maybe mix up your build command? I am using |
sorry should have added the commands |
Hmm at this point its not really possible for me to say why you are ending up with a different hash. Have you merged master here in the PR but not pulled to your local machine, so that you are on a different commit? Or your have local changes? These issues aside, after thinking about it more I am against introducing this CI job. Everytime there is a minor change in any of the runtime related code of polkadot-sdk, the generated WASM blob will change, forcing developers to update this chain-spec constantly (because the job will fail). A better way to handle this IMO is to just have the chainspec committed and update it manually. For sure this is annoying and the spec could potentially go out of sync. But having an extra CI job for it seems like overkill. I am sorry for the work you have already put into the CI job. Can you please remove it? |
Hey @skunert cc: @iulianbarbu . I appreciate the help and the time you were able to allocate to this. I want to first address this issue ☝️, After thorough testing, I can confirm that this issue has been resolved and the workflows run okay Workflow Run Personal Fork. The CI job and local development environments now consistently produce the same Blake2_256 hash for the runtime WASM blob, ensuring alignment with the Polkadot SDK master's Runtime determined using the Srtool.
I completely understand your concern regarding the added maintenance burden of a CI job that enforces frequent updates to the chain spec due to minor runtime changes. Your suggestion to commit the chain spec manually and update it as needed is reasonable; however, I'd like to propose an enhancement that maintains the benefits of automation while keeping the workflow lightweight and developer-friendly.
|
Hey, the problem with (1) is that this will not break now and then when there is a change to the parachain template runtime, that would be okay. But polkadot-sdk is merging lots of commits per week. Imagine someone is creating a pull request to modify some log line here for example. In their pull request the CI job would fail because that code is a dependency of parachain-template-runtime and they would need to regenerate the chain-spec. Whe question is also what the benefit of keeping the chain-spec up to date in polkadot-sdk really is. Once per release these two template repositories are synchronized with the current state of polkadot-sdk:
This is where I expect new users to go to try out these templates. Ideally, the job that synchronizes the templates with the polkadot-sdk would generate the chain-specs from the current runtime. This way, the chain-specs in the template repositories would be correct on every release. I like your proposal of (2), having a script in the repo to generate these chainspecs. The flow could look like this:
This way the chain-spec in the template repositories is always up-to-date and we don't have the burden of this constantly failing CI job. |
Description
This PR adds development chain specs for the minimal and parachain templates. #6334
Integration
This PR adds development chain specs for the minimal and para chain template runtimes, ensuring synchronization with runtime code. It updates zombienet-omni-node.toml, zombinet.toml files to include valid chain spec paths, simplifying configuration for zombienet in the parachain and minimal template.
Review Notes
NB: Follow the templates' READMEs from the polkadot-SDK master branch. Please build the binaries and runtimes based on the polkadot-SDK master branch.
parachain-template-runtime
andminimal-template-runtime
parachain-template-node
andminimal-template-node
cargo install --path polkadot
remember from the polkadot-SDK master branch.Zombienet with Omni Node
,Zombienet with minimal-template-node
orZombienet with parachain-template-node
Include your leftover TODOs, if any, here.