From 423a60cde33a6d277ce5c36430b2050eb9e59c99 Mon Sep 17 00:00:00 2001
From: bkchr
Date: Sun, 14 Jan 2024 00:57:24 +0000
Subject: [PATCH] deploy: ade390b5ef06f3d897a56acea653504e706fe30e
---
404.html | 2 +-
approved/0001-agile-coretime.html | 2 +-
approved/0005-coretime-interface.html | 2 +-
approved/0007-system-collator-selection.html | 2 +-
approved/0008-parachain-bootnodes-dht.html | 2 +-
...12-process-for-adding-new-collectives.html | 2 +-
...rove-locking-mechanism-for-parachains.html | 2 +-
approved/0022-adopt-encointer-runtime.html | 2 +-
approved/0032-minimal-relay.html | 2 +-
approved/0050-fellowship-salaries.html | 2 +-
...0056-one-transaction-per-notification.html | 2 +-
index.html | 2 +-
introduction.html | 2 +-
print.html | 659 ++++++++----------
proposed/000x-lowering-deposits-assethub.html | 2 +-
proposed/0026-sassafras-consensus.html | 2 +-
...-absolute-location-account-derivation.html | 6 +-
proposed/0044-rent-based-registration.html | 6 +-
.../0046-metadata-for-offline-signers.html | 2 +-
...047-assignment-of-availability-chunks.html | 2 +-
.../0059-nodes-capabilities-discovery.html | 2 +-
.../0061-allocator-inside-of-runtime.html | 6 +-
...ering-existential-deposit-on-assethub.html | 323 ---------
searchindex.js | 2 +-
searchindex.json | 2 +-
...04-remove-unnecessary-allocator-usage.html | 6 +-
...namic-pricing-for-bulk-coretime-sales.html | 2 +-
...09-improved-net-light-client-requests.html | 2 +-
stale/0010-burn-coretime-revenue.html | 2 +-
...ath-to-account-creation-on-asset-hubs.html | 2 +-
...uilder-and-core-runtime-apis-for-mbms.html | 2 +-
stale/0015-market-design-revisit.html | 2 +-
...irmation-period-duration-modification.html | 2 +-
...ction-voting-delegation-modifications.html | 6 +-
.../0042-extrinsics-state-version.html | 10 +-
.../0043-storage-proof-size-hostfunction.html | 6 +-
stale/0048-session-keys-runtime-api.html | 2 +-
stale/0054-remove-heap-pages.html | 2 +-
38 files changed, 334 insertions(+), 752 deletions(-)
delete mode 100644 proposed/0062-lowering-existential-deposit-on-assethub.html
rename {proposed => stale}/0042-extrinsics-state-version.html (82%)
diff --git a/404.html b/404.html
index 4e17be0dc..0de390004 100644
--- a/404.html
+++ b/404.html
@@ -91,7 +91,7 @@
diff --git a/approved/0001-agile-coretime.html b/approved/0001-agile-coretime.html
index bf682103e..5b362ee41 100644
--- a/approved/0001-agile-coretime.html
+++ b/approved/0001-agile-coretime.html
@@ -90,7 +90,7 @@
diff --git a/approved/0005-coretime-interface.html b/approved/0005-coretime-interface.html
index 05879f861..d84a80ae0 100644
--- a/approved/0005-coretime-interface.html
+++ b/approved/0005-coretime-interface.html
@@ -90,7 +90,7 @@
diff --git a/approved/0007-system-collator-selection.html b/approved/0007-system-collator-selection.html
index 864079b28..725ca1863 100644
--- a/approved/0007-system-collator-selection.html
+++ b/approved/0007-system-collator-selection.html
@@ -90,7 +90,7 @@
diff --git a/approved/0008-parachain-bootnodes-dht.html b/approved/0008-parachain-bootnodes-dht.html
index f139d9123..32f116047 100644
--- a/approved/0008-parachain-bootnodes-dht.html
+++ b/approved/0008-parachain-bootnodes-dht.html
@@ -90,7 +90,7 @@
diff --git a/approved/0012-process-for-adding-new-collectives.html b/approved/0012-process-for-adding-new-collectives.html
index e850e930f..096ea659f 100644
--- a/approved/0012-process-for-adding-new-collectives.html
+++ b/approved/0012-process-for-adding-new-collectives.html
@@ -90,7 +90,7 @@
diff --git a/approved/0014-improve-locking-mechanism-for-parachains.html b/approved/0014-improve-locking-mechanism-for-parachains.html
index 39f90d782..ab3eaa831 100644
--- a/approved/0014-improve-locking-mechanism-for-parachains.html
+++ b/approved/0014-improve-locking-mechanism-for-parachains.html
@@ -90,7 +90,7 @@
diff --git a/approved/0022-adopt-encointer-runtime.html b/approved/0022-adopt-encointer-runtime.html
index 61ade4191..6e0feb831 100644
--- a/approved/0022-adopt-encointer-runtime.html
+++ b/approved/0022-adopt-encointer-runtime.html
@@ -90,7 +90,7 @@
diff --git a/approved/0032-minimal-relay.html b/approved/0032-minimal-relay.html
index 5d070f21b..0c1e8b57c 100644
--- a/approved/0032-minimal-relay.html
+++ b/approved/0032-minimal-relay.html
@@ -90,7 +90,7 @@
diff --git a/approved/0050-fellowship-salaries.html b/approved/0050-fellowship-salaries.html
index d6ea1f197..67ec6965a 100644
--- a/approved/0050-fellowship-salaries.html
+++ b/approved/0050-fellowship-salaries.html
@@ -90,7 +90,7 @@
diff --git a/approved/0056-one-transaction-per-notification.html b/approved/0056-one-transaction-per-notification.html
index e8488578e..0fdb03b2f 100644
--- a/approved/0056-one-transaction-per-notification.html
+++ b/approved/0056-one-transaction-per-notification.html
@@ -90,7 +90,7 @@
diff --git a/index.html b/index.html
index a62133f3c..b61b196bd 100644
--- a/index.html
+++ b/index.html
@@ -90,7 +90,7 @@
diff --git a/introduction.html b/introduction.html
index a62133f3c..b61b196bd 100644
--- a/introduction.html
+++ b/introduction.html
@@ -90,7 +90,7 @@
diff --git a/print.html b/print.html
index f41e8efe6..2b1169d2b 100644
--- a/print.html
+++ b/print.html
@@ -91,7 +91,7 @@
@@ -3201,106 +3201,6 @@
Implementation details and overall code is still up to discussion.
-(source)
-Table of Contents
-
-
- | |
-Start Date | 25th October 2023 |
-Description | Add System Version and remove State Version |
-Authors | Vedhavyas Singareddi |
-
-
-
-At the moment, we have system_version
field on RuntimeVersion
that derives which state version is used for the
-Storage.
-We have a use case where we want extrinsics root is derived using StateVersion::V1
. Without defining a new field
-under RuntimeVersion
,
-we would like to propose adding system_version
that can be used to derive both storage and extrinsic state version.
-
-Since the extrinsic state version is always StateVersion::V0
, deriving extrinsic root requires full extrinsic data.
-This would be problematic when we need to verify the extrinsics root if the extrinsic sizes are bigger. This problem is
-further explored in https://github.com/polkadot-fellows/RFCs/issues/19
-For Subspace
project, we have an enshrined rollups called Domain
with optimistic verification and Fraud proofs are
-used to detect malicious behavior.
-One of the Fraud proof
variant is to derive Domain
block extrinsic root on Subspace
's consensus chain.
-Since StateVersion::V0
requires full extrinsic data, we are forced to pass all the extrinsics through the Fraud proof.
-One of the main challenge here is some extrinsics could be big enough that this variant of Fraud proof may not be
-included in the Consensus block due to Block's weight restriction.
-If the extrinsic root is derived using StateVersion::V1
, then we do not need to pass the full extrinsic data but
-rather at maximum, 32 byte of extrinsic data.
-
-
-- Technical Fellowship, in its role of maintaining system runtimes.
-
-
-In order to use project specific StateVersion for extrinsic roots, we proposed
-an implementation that introduced
-parameter to frame_system::Config
but that unfortunately did not feel correct.
-So we would like to propose adding this change to
-the RuntimeVersion
-object. The system version, if introduced, will be used to derive both storage and extrinsic state version.
-If system version is 0
, then both Storage and Extrinsic State version would use V0.
-If system version is 1
, then Storage State version would use V1 and Extrinsic State version would use V0.
-If system version is 2
, then both Storage and Extrinsic State version would use V1.
-If implemented, the new RuntimeVersion
definition would look something similar to
-#![allow(unused)]
-fn main() {
-/// Runtime version (Rococo).
-#[sp_version::runtime_version]
-pub const VERSION: RuntimeVersion = RuntimeVersion {
- spec_name: create_runtime_str!("rococo"),
- impl_name: create_runtime_str!("parity-rococo-v2.0"),
- authoring_version: 0,
- spec_version: 10020,
- impl_version: 0,
- apis: RUNTIME_API_VERSIONS,
- transaction_version: 22,
- system_version: 1,
- };
-}
-
-There should be no drawbacks as it would replace state_version
with same behavior but documentation should be updated
-so that chains know which system_version
to use.
-
-AFAIK, should not have any impact on the security or privacy.
-
-These changes should be compatible for existing chains if they use state_version
value for system_verision
.
-
-I do not believe there is any performance hit with this change.
-
-This does not break any exposed Apis.
-
-This change should not break any compatibility.
-
-We proposed introducing a similar change by introducing a
-parameter to frame_system::Config
but did not feel that
-is the correct way of introducing this change.
-
-I do not have any specific questions about this change at the moment.
-
-IMO, this change is pretty self-contained and there won't be any future work necessary.
(source)
Table of Contents
@@ -3340,9 +3240,9 @@
+
This RFC proposes a new model for a sustainable on-demand parachain registration, involving a smaller initial deposit and periodic rent payments. The new model considers that on-demand chains may be unregistered and later re-registered. The proposed solution also ensures a quick startup for on-demand chains on Polkadot in such cases.
-
+
With the support of on-demand parachains on Polkadot, there is a need to explore a new, more cost-effective model for registering validation code. In the current model, the parachain manager is responsible for reserving a unique ParaId
and covering the cost of storing the validation code of the parachain. These costs can escalate, particularly if the validation code is large. We need a better, sustainable model for registering on-demand parachains on Polkadot to help smaller teams deploy more easily.
This RFC suggests a new payment model to create a more financially viable approach to on-demand parachain registration. In this model, a lower initial deposit is required, followed by recurring payments upon parachain registration.
This new model will coexist with the existing one-time deposit payment model, offering teams seeking to deploy on-demand parachains on Polkadot a more cost-effective alternative.
@@ -3356,11 +3256,11 @@ The solution MUST allow anyone to pay the rent.
- The solution MUST prevent the removal of validation code if it could still be required for disputes or approval checking.
-
+
- Future Polkadot on-demand Parachains
-
+
This RFC proposes a set of changes that will enable the new rent based approach to registering and storing validation code on-chain.
The new model, compared to the current one, will require periodic rent payments. The parachain won't be pruned automatically if the rent is not paid, but by permitting anyone to prune the parachain and rewarding the caller, there will be an incentive for the removal of the validation code.
On-demand parachains should still be able to utilize the current one-time payment model. However, given the size of the deposit required, it's highly likely that most on-demand parachains will opt for the new rent-based model.
@@ -3467,27 +3367,27 @@
-
+
All chain teams are stakeholders, as implementing this feature would require timely effort on their side and would impact compatibility with older tools.
This feature is essential for all offline signer tools; many regular signing tools might make use of it. In general, this RFC greatly improves security of any network implementing it, as many governing keys are used with offline signers.
Implementing this RFC would remove requirement to maintain metadata portals manually, as task of metadata verification would be effectively moved to consensus mechanism of the chain.
-
+
Detailed description of metadata shortening and digest process is provided in metadata-shortener crate (see cargo doc --open
and examples). Below are presented algorithms of the process.
@@ -3717,29 +3617,29 @@
-
+
- Getting access to the
core_index
that used to be occupied by a candidate in some parts of the dispute protocol is
very complicated (See appendix A). This RFC assumes that availability-recovery processes initiated during
@@ -3960,28 +3860,28 @@
Related discussion about updating CandidateReceipt
- It's a breaking change that requires all validators and collators to upgrade their node version at least once.
-
+
Extensive testing will be conducted - both automated and manual.
This proposal doesn't affect security or privacy.
-
-
+
+
This is a necessary data availability optimisation, as reed-solomon erasure coding has proven to be a top consumer of
CPU time in polkadot as we scale up the parachain block size and number of availability cores.
With this optimisation, preliminary performance results show that CPU time used for reed-solomon coding/decoding can be
halved and total POV recovery time decrease by 80% for large POVs. See more
here.
-
+
Not applicable.
-
+
This is a breaking change. See upgrade path section above.
All validators and collators need to have upgraded their node versions before the feature will be enabled via a
governance call.
-
+
See comments on the tracking issue and the
in-progress PR
-
+
Not applicable.
-
+
This enables future optimisations for the performance of availability recovery, such as retrieving batched systematic
chunks from backers/approval-checkers.
@@ -4063,20 +3963,20 @@
+
This RFC proposes to make the mechanism of RFC #8 more generic by introducing the concept of "capabilities".
Implementations can implement certain "capabilities", such as serving old block headers or being a parachain bootnode.
The discovery mechanism of RFC #8 is extended to be able to discover nodes of specific capabilities.
-
+
The Polkadot peer-to-peer network is made of nodes. Not all these nodes are equal. Some nodes store only the headers of recently blocks, some nodes store all the block headers and bodies since the genesis, some nodes store the storage of all blocks since the genesis, and so on.
It is currently not possible to know ahead of time (without connecting to it and asking) which nodes have which data available, and it is not easily possible to build a list of nodes that have a specific piece of data available.
If you want to download for example the header of block 500, you have to connect to a randomly-chosen node, ask it for block 500, and if it says that it doesn't have the block, disconnect and try another randomly-chosen node.
In certain situations such as downloading the storage of old blocks, nodes that have the information are relatively rare, and finding through trial and error a node that has the data can take a long time.
This RFC attempts to solve this problem by giving the possibility to build a list of nodes that are capable of serving specific data.
-
+
Low-level client developers.
People interested in accessing the archive of the chain.
-
+
Reading RFC #8 first might help with comprehension, as this RFC is very similar.
Please keep in mind while reading that everything below applies for both relay chains and parachains, except mentioned otherwise.
@@ -4111,30 +4011,30 @@
+
None that I can see.
-
+
The content of this section is basically the same as the one in RFC 8.
This mechanism doesn't add or remove any security by itself, as it relies on existing mechanisms.
Due to the way Kademlia works, it would become the responsibility of the 20 Polkadot nodes whose sha256(peer_id)
is closest to the key
(described in the explanations section) to store the list of nodes that have specific capabilities.
Furthermore, when a large number of providers are registered, only the providers closest to the key
are kept, up to a certain implementation-defined limit.
For this reason, an attacker can abuse this mechanism by randomly generating libp2p PeerIds until they find the 20 entries closest to the key
representing the target capability. They are then in control of the list of nodes with that capability. While doing this can in no way be actually harmful, it could lead to eclipse attacks.
Because the key changes periodically and isn't predictable, and assuming that the Polkadot DHT is sufficiently large, it is not realistic for an attack like this to be maintained in the long term.
-
-
+
+
The DHT mechanism generally has a low overhead, especially given that publishing providers is done only every 24 hours.
Doing a Kademlia iterative query then sending a provider record shouldn't take more than around 50 kiB in total of bandwidth for the parachain bootnode.
Assuming 1000 nodes with a specific capability, the 20 Polkadot full nodes corresponding to that capability will each receive a sudden spike of a few megabytes of networking traffic when the key
rotates. Again, this is relatively negligible. If this becomes a problem, one can add a random delay before a node registers itself to be the provider of the key
corresponding to BabeApi_next_epoch
.
Maybe the biggest uncertainty is the traffic that the 20 Polkadot full nodes will receive from light clients that desire knowing the nodes with a capability. If this every becomes a problem, this value of 20 is an arbitrary constant that can be increased for more redundancy.
-
+
Irrelevant.
-
+
Irrelevant.
-
+
Unknown.
-
+
While it fundamentally doesn't change much to this RFC, using BabeApi_currentEpoch
and BabeApi_nextEpoch
might be inappropriate. I'm not familiar enough with good practices within the runtime to have an opinion here. Should it be an entirely new pallet?
-
+
This RFC would make it possible to reliably discover archive nodes, which would make it possible to reliably send archive node requests, something that isn't currently possible. This could solve the problem of finding archive RPC node providers by migrating archive-related request to using the native peer-to-peer protocol rather than JSON-RPC.
If we ever decide to break backwards compatibility, we could divide the "history" and "archive" capabilities in two, between nodes capable of serving older blocks and nodes capable of serving newer blocks.
We could even add to the peer-to-peer network nodes that are only capable of serving older blocks (by reading from a database) but do not participate in the head of the chain, and that just exist for historical purposes.
@@ -4174,19 +4074,19 @@
+
Currently, substrate runtime use an simple allocator defined by host side. Every runtime MUST
import these allocator functions for normal execution. This situation make runtime code not versatile enough.
So this RFC proposes to define a new spec for allocator part to make substrate runtime more generic.
-
+
Since this RFC define a new way for allocator, we now regard the old one as legacy
allocator.
As we all know, since the allocator implementation details are defined by the substrate client, parachain/parathread cannot customize memory allocator algorithm, so the new specification allows the runtime to customize memory allocation, and then export the allocator function according to the specification for the client side to use.
Another benefit is that some new host functions can be designed without allocating memory on the client, which may have potential performance improvements. Also it will help provide a unified and clean specification if substrate runtime support multi-targets(e.g. RISC-V).
There is also a potential benefit. Many programming languages that support compilation to wasm may not be friendly to supporting external allocator. This is beneficial for other programming languages to enter the substrate runtime ecosystem.
The last and most important benefit is that for offchain context execution, the runtime can fully support pure wasm. What this means here is that all imported host functions could not actually be called (as stub functions), then the various verification logic of the runtime can be converted into pure wasm, which provides the possibility for the substrate runtime to run block verification in other environments (such as in browsers and other non-substrate environments).
-
+
No attempt was made at convincing stakeholders.
-
+
This section contains a list of functions should be exported by substrate runtime.
We define the spec as version 1, so the following dummy
function v1
MUST be exported to hint
@@ -4225,129 +4125,34 @@