-
Notifications
You must be signed in to change notification settings - Fork 695
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
Balances: Arbitrary number of genesis accounts #6040
Comments
why JSON genesis for such use case? wouldn't it be faster to just operate on the raw storage? |
relevant other links would be helpful to look closely on this :) |
@xlc our omni tooling works with genesis presets. Relying on specific storage addresses would probably work in practice, but it is a bit hacky IMHO. What downside do you see in having this?
I added the link to the exact line of code in the issue. Not sure what else i can explain about it, but you can check the
|
Would be nice if the accounts were compatible with polkadot-stps and ttxt tools. They use this derivation pattern: Or even better, we could pass the derivation string (actually address uri string) that has a placeholder for the index: That would allow some flexibility. |
it is just there is big overhead of creating such big json and parse it in the node and convert to raw compare to just supply the raw format. I am worried there is possibility of some steps may not work well with such big file. but maybe it will just works. |
With this proposal chain spec JSON file will be simple and small. Here is example (1000000 accounts each with 500 balance):
It would be:
if my proposal with address uri sounds ok. |
oh I see. I misunderstood the issue. |
would like to work on this Assign if possible |
One of the only downsides of adding a new field to |
That would be the case only for hardcoded |
Also most of the code probably already used Generally I like the proposed solution here! Also means that not every tooling needs to replicate a way to generate these accounts and can instead just set this field. |
@gpestana you might want to add a similar mechanism for staking: just receive two numbers, and generate that many stakers. At least it removes one issue with creating testnets with large number of stakers. |
# Benchmark Overhead Command for Parachains This implements the `benchmark overhead` command for parachains. Full context is available at: #5303. Previous attempt was this #5283, but here we have integration into frame-omni-bencher and improved tooling. ## Changes Overview Users are now able to use `frame-omni-bencher` to generate `extrinsic_weight.rs` and `block_weight.rs` files for their runtime. The core logic for generating these remains untouched; this PR provides mostly machinery to make it work for parachains at all. Similar to the pallet benchmarks, we gain the option to benchmark based on just a runtime: ``` frame-omni-bencher v1 benchmark overhead --runtime {{runtime}} ``` or with a spec: ``` frame-omni-bencher v1 benchmark overhead --chain {{spec}} --genesis-builder spec ``` In this case, the genesis state is generated from the runtime presets. However, it is also possible to use `--chain` and genesis builder `spec` to generate the genesis state from the chain spec. Additionally, we use metadata to perform some checks based on the pallets the runtime exposes: - If we see the `ParaInherent` pallet, we assume that we are dealing with a relay chain. This means that we don't need proof recording during import (since there is no storage weight). - If we detect the `ParachainSystem` pallet, we assume that we are dealing with a parachain and take corresponding actions like patching a para id into the genesis state. On the inherent side, I am currently supplying the standard inherents every parachain needs. In the current state, `frame-omni-bencher` supports all system chains. In follow-up PRs, we could add additional inherents to increase compatibility. Since we are building a block during the benchmark, we also need to build an extrinsic. By default, I am leveraging subxt to build the xt dynamically. If a chain is not compatible with the `SubstrateConfig` that comes with `subxt`, it can provide a custom extrinsic builder to benchmarking-cli. This requires either a custom bencher implementation or an integration into the parachains node. Also cumulus-test-runtime has been migrated to provide genesis configs. ## Chain Compatibility The current version here is compatible with the system chains and common substrate chains. The way to go for others would be to customize the frame-omni-bencher by providing a custom extrinsicbuilder. I did an example implementation that works for mythical: https://github.com/skunert/mythical-bencher ## Follow-Ups - After #6040 is finished, we should integrate this here to make the tooling truly useful. In the current form, the state is fairly small and not representative. ## How to Review I recommend starting from [here](https://github.com/paritytech/polkadot-sdk/pull/5891/files#diff-50830ff756b3ac3403b7739d66c9e3a5185dbea550669ca71b28d19c7a2a54ecR264), this method is the main entry point for omni-bencher and `polkadot` binary. TBD: - [x] PRDoc --------- Co-authored-by: Michal Kucharczyk <[email protected]>
We have the issue for benchmarking that we need at least 1M accounts in the genesis state, which does not work well with JSON files and can cause some parts to allocate high memory.
Additionally to having a
Vec
here, we should add adev_accounts: (u32, T::Balance)
field that makes the runtime generate an arbitrary number of derived dev accounts when building the genesis state:polkadot-sdk/substrate/frame/balances/src/lib.rs
Line 507 in c0ddfba
Should probably be feature-flagged for benchmarks.
The text was updated successfully, but these errors were encountered: