diff --git a/404.html b/404.html index 5ab7340..d14cb71 100644 --- a/404.html +++ b/404.html @@ -91,7 +91,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0001-agile-coretime.html b/approved/0001-agile-coretime.html index 57f2a1b..03b34f8 100644 --- a/approved/0001-agile-coretime.html +++ b/approved/0001-agile-coretime.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0005-coretime-interface.html b/approved/0005-coretime-interface.html index 1f82e19..af2935a 100644 --- a/approved/0005-coretime-interface.html +++ b/approved/0005-coretime-interface.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0007-system-collator-selection.html b/approved/0007-system-collator-selection.html index 36aea51..9f705b6 100644 --- a/approved/0007-system-collator-selection.html +++ b/approved/0007-system-collator-selection.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0008-parachain-bootnodes-dht.html b/approved/0008-parachain-bootnodes-dht.html index 20dc24b..2df6c1c 100644 --- a/approved/0008-parachain-bootnodes-dht.html +++ b/approved/0008-parachain-bootnodes-dht.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0010-burn-coretime-revenue.html b/approved/0010-burn-coretime-revenue.html index f1488d4..9a21062 100644 --- a/approved/0010-burn-coretime-revenue.html +++ b/approved/0010-burn-coretime-revenue.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0012-process-for-adding-new-collectives.html b/approved/0012-process-for-adding-new-collectives.html index da7669a..064fe50 100644 --- a/approved/0012-process-for-adding-new-collectives.html +++ b/approved/0012-process-for-adding-new-collectives.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0013-prepare-blockbuilder-and-core-runtime-apis-for-mbms.html b/approved/0013-prepare-blockbuilder-and-core-runtime-apis-for-mbms.html index f83ccc4..d318b76 100644 --- a/approved/0013-prepare-blockbuilder-and-core-runtime-apis-for-mbms.html +++ b/approved/0013-prepare-blockbuilder-and-core-runtime-apis-for-mbms.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0014-improve-locking-mechanism-for-parachains.html b/approved/0014-improve-locking-mechanism-for-parachains.html index 03402f3..843e1d4 100644 --- a/approved/0014-improve-locking-mechanism-for-parachains.html +++ b/approved/0014-improve-locking-mechanism-for-parachains.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0022-adopt-encointer-runtime.html b/approved/0022-adopt-encointer-runtime.html index e518691..da39dd5 100644 --- a/approved/0022-adopt-encointer-runtime.html +++ b/approved/0022-adopt-encointer-runtime.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0026-sassafras-consensus.html b/approved/0026-sassafras-consensus.html index daef892..1d9ca49 100644 --- a/approved/0026-sassafras-consensus.html +++ b/approved/0026-sassafras-consensus.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0032-minimal-relay.html b/approved/0032-minimal-relay.html index 64d2552..2d28df5 100644 --- a/approved/0032-minimal-relay.html +++ b/approved/0032-minimal-relay.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0042-extrinsics-state-version.html b/approved/0042-extrinsics-state-version.html index 609e936..984a426 100644 --- a/approved/0042-extrinsics-state-version.html +++ b/approved/0042-extrinsics-state-version.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0043-storage-proof-size-hostfunction.html b/approved/0043-storage-proof-size-hostfunction.html index e6c4926..e28625d 100644 --- a/approved/0043-storage-proof-size-hostfunction.html +++ b/approved/0043-storage-proof-size-hostfunction.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0045-nft-deposits-asset-hub.html b/approved/0045-nft-deposits-asset-hub.html index 5a9952c..0d39c65 100644 --- a/approved/0045-nft-deposits-asset-hub.html +++ b/approved/0045-nft-deposits-asset-hub.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0047-assignment-of-availability-chunks.html b/approved/0047-assignment-of-availability-chunks.html index 37bc78f..1c0321d 100644 --- a/approved/0047-assignment-of-availability-chunks.html +++ b/approved/0047-assignment-of-availability-chunks.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0048-session-keys-runtime-api.html b/approved/0048-session-keys-runtime-api.html index b11f543..5ea82fb 100644 --- a/approved/0048-session-keys-runtime-api.html +++ b/approved/0048-session-keys-runtime-api.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0050-fellowship-salaries.html b/approved/0050-fellowship-salaries.html index c0c14e8..6574feb 100644 --- a/approved/0050-fellowship-salaries.html +++ b/approved/0050-fellowship-salaries.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0056-one-transaction-per-notification.html b/approved/0056-one-transaction-per-notification.html index 3767df9..2fa4ace 100644 --- a/approved/0056-one-transaction-per-notification.html +++ b/approved/0056-one-transaction-per-notification.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0059-nodes-capabilities-discovery.html b/approved/0059-nodes-capabilities-discovery.html index bdf9607..a2c2e90 100644 --- a/approved/0059-nodes-capabilities-discovery.html +++ b/approved/0059-nodes-capabilities-discovery.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0078-merkleized-metadata.html b/approved/0078-merkleized-metadata.html index 46f8fe3..ff0ac1e 100644 --- a/approved/0078-merkleized-metadata.html +++ b/approved/0078-merkleized-metadata.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0084-general-transaction-extrinsic-format.html b/approved/0084-general-transaction-extrinsic-format.html index 44382a7..b660719 100644 --- a/approved/0084-general-transaction-extrinsic-format.html +++ b/approved/0084-general-transaction-extrinsic-format.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0091-dht-record-creation-time.html b/approved/0091-dht-record-creation-time.html index b2cec1d..b115f45 100644 --- a/approved/0091-dht-record-creation-time.html +++ b/approved/0091-dht-record-creation-time.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0097-unbonding_queue.html b/approved/0097-unbonding_queue.html index 9e9b4cc..8f9724b 100644 --- a/approved/0097-unbonding_queue.html +++ b/approved/0097-unbonding_queue.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0099-transaction-extension-version.html b/approved/0099-transaction-extension-version.html index 0929be5..d783095 100644 --- a/approved/0099-transaction-extension-version.html +++ b/approved/0099-transaction-extension-version.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0100-xcm-multi-type-asset-transfer.html b/approved/0100-xcm-multi-type-asset-transfer.html index e0c52d9..4171abe 100644 --- a/approved/0100-xcm-multi-type-asset-transfer.html +++ b/approved/0100-xcm-multi-type-asset-transfer.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve diff --git a/approved/0101-xcm-transact-remove-max-weight-param.html b/approved/0101-xcm-transact-remove-max-weight-param.html index f4a74e7..0f5e6dc 100644 --- a/approved/0101-xcm-transact-remove-max-weight-param.html +++ b/approved/0101-xcm-transact-remove-max-weight-param.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve @@ -265,7 +265,7 @@ both this new version and the old. In both cases, an "attacker" can do - + @@ -279,7 +279,7 @@ both this new version and the old. In both cases, an "attacker" can do - + diff --git a/proposed/0103-introduce-core-index-commitment.html b/approved/0103-introduce-core-index-commitment.html similarity index 85% rename from proposed/0103-introduce-core-index-commitment.html rename to approved/0103-introduce-core-index-commitment.html index 9228a89..b6c2f8a 100644 --- a/proposed/0103-introduce-core-index-commitment.html +++ b/approved/0103-introduce-core-index-commitment.html @@ -90,7 +90,7 @@ - IntroductionNewly ProposedProposedRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve + IntroductionNewly ProposedProposedRFC-0111: Pure Proxy ReplicationRFC-0112: Compress the State Response Message in State SyncRFC-0114: Introduce secp256r1_ecdsa_verify_prehashed Host Function to verify NIST-P256 elliptic curve signaturesRFC-0117: The Unbrick CollectiveRFC-114: Adjust Tipper Track Confirmation PeriodsApprovedRFC-1: Agile CoretimeRFC-5: Coretime InterfaceRFC-0007: System Collator SelectionRFC-0008: Store parachain bootnodes in relay chain DHTRFC-0010: Burn Coretime RevenueRFC-0012: Process for Adding New System CollectivesRFC-0013: Prepare Core runtime API for MBMsRFC-0014: Improve locking mechanism for parachainsRFC-0022: Adopt Encointer RuntimeRFC-0026: Sassafras Consensus ProtocolRFC-0032: Minimal RelayRFC-0042: Add System version that replaces StateVersion on RuntimeVersionRFC-0043: Introduce storage_proof_size Host Function for Improved Parachain Block UtilizationRFC-0045: Lowering NFT Deposits on Asset HubRFC-0047: Assignment of availability chunks to validatorsRFC-0048: Generate ownership proof for SessionKeysRFC-0050: Fellowship SalariesRFC-0056: Enforce only one transaction per notificationRFC-0059: Add a discovery mechanism for nodes based on their capabilitiesRFC-0078: Merkleized MetadataRFC-0084: General transactions in extrinsic formatRFC-0091: DHT Authority discovery record creation timeRFC-0097: Unbonding QueueRFC-0099: Introduce a transaction extension versionRFC-0100: New XCM instruction: InitiateAssetsTransferRFC-0101: XCM Transact remove require_weight_at_most parameterRFC-0103: Introduce a CoreIndex commitment and a SessionIndex field in candidate receiptsRFC-0105: XCM improved fee mechanismRFC-0107: XCM Execution hintsRFC-0108: Remove XCM testnet NetworkIdsStaleRFC-0004: Remove the host-side runtime memory allocatorRFC-0006: Dynamic Pricing for Bulk Coretime SalesRFC-0009: Improved light client requests networking protocolRFC-0015: Market Design RevisitRFC-34: XCM Absolute Location Account Derivation RFC-0035: Conviction Voting Delegation ModificationsRFC-0044: Rent based registration modelRFC-0054: Remove the concept of "heap pages" from the clientRFC-0070: X Track for @kusamanetworkRFC-0073: Decision Deposit Referendum TrackRFC-0074: Stateful Multisig PalletRFC-0077: Increase maximum length of identity PGP fingerprint values from 20 bytesRFC-0088: Add slashable locked deposit, purchaser reputation, and reserved cores for on-chain identities to broker palletRFC-0089: Flexible InflationRFC-0001: Secondary Market for RegionsRFC-0002: Smart Contracts on the Coretime ChainRFC-0000: Feature Name HereRFC-0106: Remove XCM fees modeRFC-0109: Descend XCM origin instead of clearing it where possibleRFC-TODO: Stale Nomination Reward Curve @@ -174,7 +174,7 @@
(source)
Table of Contents
CoreIndex
SessionIndex
version
BuyExecution
This book contains the Polkadot Fellowship Requests for Comments (RFCs) detailing proposed changes to the technical implementation of the Polkadot network.
polkadot-fellows/RFCs
Elastic scaling is not resilient against griefing attacks without a way for a PoV (Proof of Validity) -to commit to the particular core index it was intended for. This RFC proposes a way to include -core index information in the candidate commitments and the CandidateDescriptor data structure -in a backward compatible way. Additionally, it proposes the addition of a SessionIndex field in -the CandidateDescriptor to make dispute resolution more secure and robust.
CandidateDescriptor
This RFC proposes a way to solve two different problems:
Sessionindex
This approach and alternatives have been considered and discussed in this issue.
The approach proposed below was chosen primarily because it minimizes the number of breaking -changes, the complexity and takes less implementation and testing time. The proposal is to change -the existing primitives while keeping binary compatibility with the older versions. We repurpose -unused fields to introduce core index and a session index information in the CandidateDescriptor -and extend the UMP to transport non-XCM messages.
The CandidateDescriptor includes collator and signature fields. The collator -includes a signature on the following descriptor fields: parachain id, relay parent, validation -data hash, validation code hash, and the PoV hash.
collator
signature
However, in practice, having a collator signature in the receipt on the relay chain does not -provide any benefits as there is no mechanism to punish or reward collators that have provided -bad parachain blocks.
This proposal aims to remove the collator signature and all the logic that checks the collator -signatures of candidate receipts. We use the first 7 reclaimed bytes to represent the version, -the core, session index, and fill the rest with zeroes. So, there is no change in the layout -and length of the receipt. The new primitive is binary-compatible with the old one.
CandidateCommitments -remains unchanged as we will store scale encoded UMPSignal messages directly in the parachain -UMP queue by outputting them in upward_messages.
UMPSignal
The UMP queue layout is changed to allow the relay chain to receive both the XCM messages and -UMPSignal messages. An empty message (empty Vec<u8>) is used to mark the end of XCM messages and -the start of UMPSignal messages. The UMPSignal is optional and can be omitted by parachains -not using elastic scaling.
Vec<u8>
This way of representing the new messages has been chosen over introducing an enum wrapper to -minimize breaking changes of XCM message decoding in tools like Subscan for example.
Example:
#![allow(unused)] -fn main() { -[ XCM message1, XCM message2, ..., EMPTY message, UMPSignal::SelectCore ] -}
#![allow(unused)] -fn main() { -/// The selector that determines the core index. -pub struct CoreSelector(pub u8); - -/// The offset in the relay chain claim queue. -/// -/// The state of the claim queue is given by the relay chain block -/// that is used as context for the `PoV`. -pub struct ClaimQueueOffset(pub u8); - -/// Signals sent by a parachain to the relay chain. -pub enum UMPSignal { - /// A message sent by a parachain to select the core the candidate is committed to. - /// Relay chain validators, in particular backers, use the `CoreSelector` and `ClaimQueueOffset` - /// to compute the index of the core the candidate has committed to. - SelectCore(CoreSelector, ClaimQueueOffset), -} -}
The CoreSelector together with the ClaimQueueOffset are used to index the claim queue. This way -the validators can compute the CoreIndex and ensure that the collator put the correct CoreIndex -into the CandidateDescriptor.
CoreSelector
ClaimQueueOffset
cq_offset = 1 and core_selector = 3
cq_offset = 1
core_selector = 3
The table below represents a snapshot of the claim queue:
The purpose of ClaimQueueOffset is to select the column from the above table. -For cq_offset = 1 we get [Para A, Para B, Para A] and use as input to create -a sorted vec with the cores A is assigned to: [Core 1, Core 3] and call it para_assigned_cores. -We use core_selector and determine the committed core index is Core 3 like this:
[Para A, Para B, Para A]
[Core 1, Core 3]
para_assigned_cores
core_selector
Core 3
#![allow(unused)] -fn main() { -let committed_core_index = para_assigned_cores[core_selector % para_assigned_cores.len()]; -}
collator: CollatorId
signature: CollatorSignature
reserved1
reserved2
version: u8
core_index: u16
session_index: u32
The new primitive will look like this:
#![allow(unused)] -fn main() { -pub struct CandidateDescriptorV2<H = Hash> { - /// The ID of the para this is a candidate for. - para_id: ParaId, - /// The hash of the relay-chain block this is executed in the context of. - relay_parent: H, - /// Version field. The raw value here is not exposed, instead, it is used - /// to determine the `CandidateDescriptorVersion` - version: InternalVersion, - /// The core index where the candidate is backed. - core_index: u16, - /// The session in which the candidate is backed. - session_index: SessionIndex, - /// Reserved bytes. - reserved1: [u8; 25], - /// The blake2-256 hash of the persisted validation data. This is extra data derived from - /// relay-chain state which may vary based on bitfields included before the candidate. - /// Thus it cannot be derived entirely from the relay parent. - persisted_validation_data_hash: Hash, - /// The blake2-256 hash of the PoV. - pov_hash: Hash, - /// The root of a block's erasure encoding Merkle tree. - erasure_root: Hash, - /// Reserved bytes. - reserved2: [u8; 64], - /// Hash of the para header that is being generated by this candidate. - para_head: Hash, - /// The blake2-256 hash of the validation code bytes. - validation_code_hash: ValidationCodeHash, -} -}
In future format versions, parts of the reserved1 and reserved2 bytes can be used to include -additional information in the descriptor.
Two flavors of candidate receipts are used in network protocols, runtime and node -implementation:
CommittedCandidateReceipt
CandidateCommitments
CandidateReceipt
We want to support both the old and new versions in the runtime and node, so the implementation must -be able to detect the version of a given candidate receipt.
The version of the descriptor is detected by checking the reserved fields. -If they are not zeroed, it means it is a version 1 descriptor. Otherwise the version field -is used further to determine the version. It should be 0 for version 2 descriptors. If it is not -the descriptor has an unknown version and should be considered invalid.
0
If the candidate descriptor is version 1, there are no changes.
Backers must check the validity of core_index and session_index fields. -A candidate must not be backed if any of the following are true:
core_index
session_index
UMPSignal::SelectCore
For version 2 descriptors the runtime will determine the core_index using the same inputs -as backers did off-chain. It currently stores the claim queue at the newest allowed -relay parent corresponding to the claim queue offset 0. The runtime needs to be changed to store -a claim queue snapshot at all allowed relay parents.
The only drawback is that further additions to the descriptor are limited to the amount of -remaining unused space.
Standard testing (unit tests, CI zombienet tests) for functionality and mandatory security audit -to ensure the implementation does not introduce any new security issues.
Backward compatibility of the implementation will be tested on testnets (Versi and Westend).
There is no impact on privacy.
Overall performance will be improved by not checking the collator signatures in runtime and nodes. -The impact on the UMP queue and candidate receipt processing is negligible.
The ClaimQueueOffset along with the relay parent choice allows parachains to optimize their -block production for either throughput or lower XCM message processing latency. A value of 0 -with the newest relay parent provides the best latency while picking older relay parents avoids -re-orgs.
It is mandatory for elastic parachains to switch to the new receipt format and commit to a -core by sending the UMPSignal::SelectCore message. It is optional but desired that all -parachains switch to the new receipts for providing the session index for disputes.
The implementation of this RFC itself must not introduce any breaking changes for the parachain -runtime or collator nodes.
The proposed changes are not fully backward compatible, because older validators verify the -collator signature of candidate descriptors.
Additional care must be taken before enabling the new descriptors by waiting for at least -2/3 + 1 validators to upgrade. Validators that have not upgraded will not back candidates -using the new descriptor format and will also initiate disputes against these candidates.
2/3 + 1
The first step is to remove collator signature checking logic in the runtime but keep the node -side collator signature checks.
The runtime must be upgraded to support the new primitives before any collator or node is allowed -to use the new candidate receipts format.
To ensure a smooth launch, a new node feature is required. -The feature acts as a signal for supporting the new candidate receipts on the node side and can -only be safely enabled if at least 2/3 + 1 of the validators are upgraded. Node implementations -need to decode the new candidate descriptor once the feature is enabled otherwise they might -raise disputes and get slashed.
Once the feature is enabled, the validators will skip checking the collator signature when -processing the candidate receipts and verify the CoreIndex and SessionIndex fields if -present in the receipt.
No new implementation of networking protocol versions for collation and validation is required.
Any tooling that decodes UMP XCM messages needs an update to support or ignore the new UMP -messages, but they should be fine to decode the regular XCM messages that come before the -separator.
Forum discussion about a new CandidateReceipt format: -https://forum.polkadot.network/t/pre-rfc-discussion-candidate-receipt-format-v2/3738
N/A
The implementation is extensible and future-proof to some extent. With minimal or no breaking -changes, additional fields can be added in the candidate descriptor until the reserved space is -exhausted
At this point, there is a simple way to determine the version of the receipt, by testing for zeroed -reserved bytes in the descriptor. Future versions of the receipt can be implemented and identified -by using the version field of the descriptor introduced in this RFC.
This RFC proposes a solution to replicate an existing pure proxy from one chain to others. The aim is to address the current limitations where pure proxy accounts, which are keyless, cannot have their proxy relationships recreated on different chains. This leads to issues where funds or permissions transferred to the same keyless account address on chains other than its origin chain become inaccessible.
A pure proxy is a new account created by a primary account. The primary account is set as a proxy for the pure proxy account, managing it. Pure proxies are keyless and non-reproducible, meaning they lack a private key and have an address derived from a preimage determined by on-chain logic. More on pure proxies can be found here.
For the purpose of this document, we define a keyless account as a "pure account", the controlling account as a "proxy account", and the entire relationship as a "pure proxy".
The relationship between a pure account (e.g., account ID: pure1) and its proxy (e.g., account ID: alice) is stored on-chain (e.g., parachain A) and currently cannot be replicated to another chain (e.g., parachain B). Because the account pure1 is keyless and its proxy relationship with alice is not replicable from the parachain A to the parachain B, alice does not control the pure1 account on the parachain B.
pure1
alice
A
B
Given that these mistakes are likely, it is necessary to provide a solution to either prevent them or enable access to a pure account on a target chain.
Runtime Users, Runtime Devs, wallets, cross-chain dApps.
One possible solution is to allow a proxy to create or replicate a pure proxy relationship for the same pure account on a target chain. For example, Alice, as the proxy of the pure1 pure account on parachain A, should be able to set a proxy for the same pure1 account on parachain B.
To minimise security risks, the parachain B should grant the parachain A the least amount of permission necessary for the replication. First, Parachain A claims to Parachain B that the operation is commanded by the pure account, and thus by its proxy, and second, provides proof that the account is keyless.
The replication process will be facilitated by XCM, with the first claim made using the DescendOrigin instruction. The replication call on parachain A would require a signed origin by the pure account and construct an XCM program for parachain B, where it first descends the origin, resulting in the ParachainA/AccountId32(pure1) origin location on the receiving side.
DescendOrigin
ParachainA/AccountId32(pure1)
There are two disadvantages to this approach:
We could eliminate the first disadvantage by allowing only the spawner of the pure proxy to recreate the pure proxies, if they sign the transaction on a remote chain and supply the witness/preimage. Since the preimage of a pure account includes the account ID of the spawner, we can verify that the account signing the transaction is indeed the spawner of the given pure account. However, this approach would grant exclusive rights to the spawner over the pure account, which is not a property of pure proxies at present. This is why it's not an option for us.
As an alternative to requiring clients to provide a witness data, we could label pure accounts on the source chain and trust it on the receiving chain. However, this would require the receiving chain to place greater trust in the source chain. If the source chain is compromised, any type of account on the trusting chain could also be compromised.
A conceptually different solution would be to not implement replication of pure proxies and instead inform users that ownership of a pure proxy on one chain does not imply ownership of the same account on another chain. This solution seems complex, as it would require UIs and clients to adapt to this understanding. Moreover, mistakes would likely remain unavoidable.
Each chain expressly authorizes another chain to replicate its pure proxies, accepting the inherent risk of that chain potentially being compromised. This authorization allows a malicious actor from the compromised chain to take control of any pure proxy account on the chain that granted the authorization. However, this is limited to pure proxies that originated from the compromised chain if they have a chain-specific seed within the preimage.
There is a security issue, not introduced by the proposed solution but worth mentioning. The same spawner can create the pure accounts on different chains controlled by the different accounts. This is possible because the current preimage version of the proxy pallet does not include any non-reproducible, chain-specific data, and elements like block numbers and extrinsic indexes can be reproduced with some effort. This issue could be addressed by adding a chain-specific seed into the preimages of pure accounts.
The replication is facilitated by XCM, which adds some additional load to the communication channel. However, since the number of replications is not expected to be large, the impact is minimal.
The proposed solution does not alter any existing interfaces. It does require clients to obtain the witness data which should not be an issue with support of an indexer.
None.
This RFC proposes compressing the state response message during the state syncing process to reduce the amount of data transferred.
State syncing can require downloading several gigabytes of data, particularly for blockchains with large state sizes, such as Astar, which has a state size exceeding 5 GiB (https://github.com/AstarNetwork/Astar/issues/1110). This presents a significant challenge for nodes with slower network connections. Additionally, the current state sync implementation lacks a persistence feature (https://github.com/paritytech/polkadot-sdk/issues/4), meaning any network disruption forces the node to re-download the entire state, making the process even more difficult.
This RFC benefits all projects utilizing the Substrate framework, specifically in improving the efficiency of state syncing.
The largest portion of the state response message consists of either CompactProof or Vec<KeyValueStateEntry>, depending on whether a proof is requested (source):
CompactProof
Vec<KeyValueStateEntry>
None identified.
The code changes required for this RFC are straightforward: compress the state response on the sender side and decompress it on the receiver side. Existing sync tests should ensure functionality remains intact.
This RFC optimizes network bandwidth usage during state syncing, particularly for blockchains with gigabyte-sized states, while introducing negligible CPU overhead for compression and decompression. For example, compressing the state response during a recent Polkadot warp sync (around height #22076653) reduces the data transferred from 530,310,121 bytes to 352,583,455 bytes — a 33% reduction, saving approximately 169 MiB of data.
Performance data is based on this patch, with logs available here.
No compatibility issues identified.
This RFC proposes a new host function, secp256r1_ecdsa_verify_prehashed, for verifying NIST-P256 signatures. The function takes as input the message hash, r and s components of the signature, and the x and y coordinates of the public key. By providing this function, runtime authors can leverage a more efficient verification mechanism for "secp256r1" elliptic curve signatures, reducing computational costs and improving overall performance.
secp256r1_ecdsa_verify_prehashed
NIST-P256
r
s
x
y
“secp256r1” elliptic curve is a standardized curve by NIST which has the same calculations by different input parameters with “secp256k1” elliptic curve. The cost of combined attacks and the security conditions are almost the same for both curves. Adding a host function can provide signature verifications using the “secp256r1” elliptic curve in the runtime and multi-faceted benefits can occur. One important factor is that this curve is widely used and supported in many modern devices such as Apple’s Secure Enclave, Webauthn, Android Keychain which proves the user adoption. Additionally, the introduction of this host function could enable valuable features in the account abstraction which allows more efficient and flexible management of accounts by transaction signs in mobile devices. Most of the modern devices and applications rely on the “secp256r1” elliptic curve. The addition of this host function enables a more efficient verification of device native transaction signing mechanisms. For example:
This RFC proposes a new host function for runtime authors to leverage a more efficient verification mechanism for "secp256r1" elliptic curve signatures.
Proposed host function signature:
#![allow(unused)] @@ -711,19 +437,19 @@ Most of the modern devices and applications rely on the “secp256r1” elliptic ) -> bool; }
The host function MUST return true if the signature is valid or false otherwise.
true
false
The changes are not directly affecting the protocol security, parachains are not enforced to use the host function.
The host function proposed in this RFC allows parachain runtime developers to use a more efficient verification mechanism for "secp256r1" elliptic curve signatures.
Parachain teams will need to include this host function to upgrade.
A followup of the RFC-0014. This RFC proposes adding a new collective to the Polkadot Collectives Chain: The Unbrick Collective, as well as improvements in the mechanisms that will allow teams operating paras that had stopped producing blocks to be assisted, in order to restore the production of blocks of these paras.
Since the initial launch of Polkadot parachains, there has been many incidients causing parachains to stop producing new blocks (therefore, being bricked) and many occurrences that requires Polkadot governance to update the parachain head state/wasm. This can be due to many reasons range @@ -783,14 +509,14 @@ damage to the parachain and users.
In consequence, the idea of a Unbrick Collective that can provide assistance to para teams when they brick and further protection against future halts is reasonable enough.
The Unbrick Collective is defined as an unranked collective of members, not paid by the Polkadot Treasury. Its main goal is to serve as a point of contact and assistance for enacting the actions @@ -852,31 +578,31 @@ of the new PVF being set). Therefore, they must have the technical capacity to p
The ability to modify the Head State and/or the PVF of a para means a possibility to perform arbitrary modifications of it (i.e. take control the native parachain token or any bridged assets in the para).
This could introduce a new attack vectorm, and therefore, such great power needs to be handled carefully.
The implementation of this RFC will be tested on testnets (Rococo and Westend) first.
An audit will be required to ensure the implementation doesn't introduce unwanted side effects.
There are no privacy related concerns.
This RFC should not introduce any performance impact.
This RFC should improve the experience for new and existing parachain teams, lowering the barrier to unbrick a stalled para.
This RFC is fully compatible with existing interfaces.
WhitelistedUnbrickCaller
Unbrick
This RFC proposes to change the duration of the Confirmation Period for the Big Tipper and Small Tipper tracks in Polkadot OpenGov:
Big Tipper: 1 Hour -> 1 Day
Currently, these are the durations of treasury tracks in Polkadot OpenGov. Confirmation periods for the Spender tracks were adjusted based on RFC20 and its related conversation.
You can see that there is a general trend on the Spender track that when the privilege level (the amount the track can spend) the confirmation period approximately doubles.
I believe that the Big Tipper and Small Tipper track's confirmation periods should be adjusted to match this trend.
In the current state it is possible to somewhat positively snipe these tracks, and whilst the power/privilege level of these tracks is very low (they cannot spend a large amount of funds), I believe we should increase the confirmation periods to something higher. This is backed up by the recent sentiment in the greater community regarding referendums submitted on these tracks. The parameters of Polkadot OpenGov can be adjusted based on the general sentiment of token holders when necessary.
The primary stakeholders of this RFC are: – DOT token holders – as this affects the protocol's treasury – Entities wishing to submit a referendum on these tracks – as this affects the referendum's timeline – Projects with governance app integrations – see Performance, Ergonomics and Compatibility section below
This RFC proposes to change the duration of the confirmation period for both the Big Tipper and Small Tipper tracks. To achieve this the confirm_period parameter for those tracks should be changed.
confirm_period
You can see the lines of code that need to be adjusted here:
This RFC proposes to change the confirm_period for the Big Tipper track to DAYS (i.e. 1 Day) and the confirm_period for the Small Tipper track to 12 * HOURS (i.e. 12 Hours).
DAYS
12 * HOURS
The drawback of changing these confirmation periods is that the lifecycle of referenda submitted on those tracks would be ultimately longer, and it would add a greater potential to negatively "snipe" referenda on those tracks by knocking the referendum out of its confirmation period once the decision period has ended. This can be a good or a bad thing depending on your outlook of positive vs negative sniping.
This referendum will enhance the security of the protocol as it relates to its treasury. The confirmation period is one of the last lines of defense for the Polkadot token holder DAO to react to a potentially bad referendum and vote NAY in order for its confirmation period to be aborted.
This is a simple change (code wise) that should not affect the performance of the Polkadot protocol, outside of increasing the duration of the confirmation periods for these 2 tracks.
As per the implementation of changes described in RFC-20, it was identified that governance UIs automatically update to meet the new parameters:
Some token holders may want these confirmation periods to remain as they are currently and for them not to increase. If this is something that the Polkadot Technical Fellowship considers to be an issue to implement into a runtime upgrade then I can create a Wish For Change to obtain token holder approval.
The parameters of Polkadot OpenGov will likely continue to change over time, there are additional discussions in the community regarding adjusting the min_support for some tracks so that it does not trend towards 0%, similar to the current state of the Whitelisted Caller track. This is outside of the scope of this RFC and requires a lot more discussion.
min_support
This proposes a periodic, sale-based method for assigning Polkadot Coretime, the analogue of "block space" within the Polkadot Network. The method takes into account the need for long-term capital expenditure planning for teams building on Polkadot, yet also provides a means to allow Polkadot to capture long-term value in the resource which it sells. It supports the possibility of building rich and dynamic secondary markets to optimize resource allocation and largely avoids the need for parameterization.
The Polkadot Ubiquitous Computer, or just Polkadot UC, represents the public service provided by the Polkadot Network. It is a trust-free, WebAssembly-based, multicore, internet-native omnipresent virtual machine which is highly resilient to interference and corruption.
The present system of allocating the limited resources of the Polkadot Ubiquitous Computer is through a process known as parachain slot auctions. This is a parachain-centric paradigm whereby a single core is long-term allocated to a single parachain which itself implies a Substrate/Cumulus-based chain secured and connected via the Relay-chain. Slot auctions are on-chain candle auctions which proceed for several days and result in the core being assigned to the parachain for six months at a time up to 24 months in advance. Practically speaking, we only see two year periods being bid upon and leased.
Furthermore, the design SHOULD be implementable and deployable in a timely fashion; three months from the acceptance of this RFC should not be unreasonable.
Primary stakeholder sets are:
Socialization:
The essensials of this proposal were presented at Polkadot Decoded 2023 Copenhagen on the Main Stage. A small amount of socialization at the Parachain Summit preceeded it and some substantial discussion followed it. Parity Ecosystem team is currently soliciting views from ecosystem teams who would be key stakeholders.
Upon implementation of this proposal, the parachain-centric slot auctions and associated crowdloans cease. Instead, Coretime on the Polkadot UC is sold by the Polkadot System in two separate formats: Bulk Coretime and Instantaneous Coretime.
When a Polkadot Core is utilized, we say it is dedicated to a Task rather than a "parachain". The Task to which a Core is dedicated may change at every Relay-chain block and while one predominant type of Task is to secure a Cumulus-based blockchain (i.e. a parachain), other types of Tasks are envisioned.
No specific considerations.
Parachains already deployed into the Polkadot UC must have a clear plan of action to migrate to an agile Coretime market.
While this proposal does not introduce documentable features per se, adequate documentation must be provided to potential purchasers of Polkadot Coretime. This SHOULD include any alterations to the Polkadot-SDK software collection.
Regular testing through unit tests, integration tests, manual testnet tests, zombie-net tests and fuzzing SHOULD be conducted.
A regular security review SHOULD be conducted prior to deployment through a review by the Web3 Foundation economic research group.
Any final implementation MUST pass a professional external security audit.
The proposal introduces no new privacy concerns.
RFC-3 proposes a means of implementing the high-level allocations within the Relay-chain.
RFC-5 proposes the API for interacting with Relay-chain.
Additional work should specify the interface for the instantaneous market revenue so that the Coretime-chain can ensure Bulk Coretime placed in the instantaneous market is properly compensated.
Robert Habermeier initially wrote on the subject of Polkadot blockspace-centric in the article Polkadot Blockspace over Blockchains. While not going into details, the article served as an early reframing piece for moving beyond one-slot-per-chain models and building out secondary market infrastructure for resource allocation.
In the Agile Coretime model of the Polkadot Ubiquitous Computer, as proposed in RFC-1 and RFC-3, it is necessary for the allocating parachain (envisioned to be one or more pallets on a specialised Brokerage System Chain) to communicate the core assignments to the Relay-chain, which is responsible for ensuring those assignments are properly enacted.
This is a proposal for the interface which will exist around the Relay-chain in order to communicate this information and instructions.
The background motivation for this interface is splitting out coretime allocation functions and secondary markets from the Relay-chain onto System parachains. A well-understood and general interface is necessary for ensuring the Relay-chain receives coretime allocation instructions from one or more System chains without introducing dependencies on the implementation details of either side.
This content of this RFC was discussed in the Polkdot Fellows channel.
The interface has two sections: The messages which the Relay-chain is able to receive from the allocating parachain (the UMP message types), and messages which the Relay-chain is able to send to the allocating parachain (the DMP message types). These messages are expected to be able to be implemented in a well-known pallet and called with the XCM Transact instruction.
Transact
Future work may include these messages being introduced into the XCM standard.
For assign_core, a successful request should be possible if begin is no less than the Relay-chain block number on arrival of the message plus 10 and workload contains no more than 100 items.
assign_core
begin
workload
Standard Polkadot testing and security auditing applies.
RFC-1 proposes a means of determining allocation of Coretime using this interface.
None at present.
As core functionality moves from the Relay Chain into system chains, so increases the reliance on the liveness of these chains for the use of the network. It is not economically scalable, nor necessary from a game-theoretic perspective, to pay collators large rewards. This RFC proposes a mechanism -- part technical and part social -- for ensuring reliable collator sets that are resilient to attemps to stop any subsytem of the Polkadot protocol.
In order to guarantee access to Polkadot's system, the collators on its system chains must propose blocks (provide liveness) and allow all transactions to eventually be included. That is, some collators may censor transactions, but there must exist one collator in the set who will include a @@ -1742,12 +1468,12 @@ to censor any subset of transactions.
This protocol builds on the existing Collator Selection pallet and its notion of Invulnerables. Invulnerables are collators (identified by their AccountIds) who @@ -1783,27 +1509,27 @@ approximately:
AccountId
The primary drawback is a reliance on governance for continued treasury funding of infrastructure costs for Invulnerable collators.
The vast majority of cases can be covered by unit testing. Integration test should ensure that the Collator Selection UpdateOrigin, which has permission to modify the Invulnerables and desired number of Candidates, can handle updates over XCM from the system's governance location.
UpdateOrigin
This proposal has very little impact on most users of Polkadot, and should improve the performance of system chains by reducing the number of missed blocks.
As chains have strict PoV size limits, care must be taken in the PoV impact of the session manager. Appropriate benchmarking and tests should ensure that conservative limits are placed on the number of Invulnerables and Candidates.
The primary group affected is Candidate collators, who, after implementation of this RFC, will need to compete in a bond-based election rather than a race to claim a Candidate spot.
This RFC is compatible with the existing implementation and can be handled via upgrades and migration.
None at this time.
There may exist in the future system chains for which this model of collator selection is not appropriate. These chains should be evaluated on a case-by-case basis.
The full nodes of the Polkadot peer-to-peer network maintain a distributed hash table (DHT), which is currently used for full nodes discovery and validators discovery purposes.
This RFC proposes to extend this DHT to be used to discover full nodes of the parachains of Polkadot.
The maintenance of bootnodes has long been an annoyance for everyone.
When a bootnode is newly-deployed or removed, every chain specification must be updated in order to take the update into account. This has lead to various non-optimal solutions, such as pulling chain specifications from GitHub repositories. When it comes to RPC nodes, UX developers often have trouble finding up-to-date addresses of parachain RPC nodes. With the ongoing migration from RPC nodes to light clients, similar problems would happen with chain specifications as well.
Because the list of bootnodes in chain specifications is so annoying to modify, the consequence is that the number of bootnodes is rather low (typically between 2 and 15). In order to better resist downtimes and DoS attacks, a better solution would be to use every node of a certain chain as potential bootnode, rather than special-casing some specific nodes.
While this RFC doesn't solve these problems for relay chains, it aims at solving it for parachains by storing the list of all the full nodes of a parachain on the relay chain DHT.
Assuming that this RFC is implemented, and that light clients are used, deploying a parachain wouldn't require more work than registering it onto the relay chain and starting the collators. There wouldn't be any need for special infrastructure nodes anymore.
This RFC has been opened on my own initiative because I think that this is a good technical solution to a usability problem that many people are encountering and that they don't realize can be solved.
The content of this RFC only applies for parachains and parachain nodes that are "Substrate-compatible". It is in no way mandatory for parachains to comply to this RFC.
Note that "Substrate-compatible" is very loosely defined as "implements the same mechanisms and networking protocols as Substrate". The author of this RFC believes that "Substrate-compatible" should be very precisely specified, but there is controversy on this topic.
While a lot of this RFC concerns the implementation of parachain nodes, it makes use of the resources of the Polkadot chain, and as such it is important to describe them in the Polkadot specification.
The maximum size of a response is set to an arbitrary 16kiB. The responding side should make sure to conform to this limit. Given that fork_id is typically very small and that the only variable-length field is addrs, this is easily achieved by limiting the number of addresses.
fork_id
addrs
Implementers should be aware that addrs might be very large, and are encouraged to limit the number of addrs to an implementation-defined value.
The peer_id and addrs fields are in theory not strictly needed, as the PeerId and addresses could be always equal to the PeerId and addresses of the node being registered as the provider and serving the response. However, the Cumulus implementation currently uses two different networking stacks, one of the parachain and one for the relay chain, using two separate PeerIds and addresses, and as such the PeerId and addresses of the other networking stack must be indicated. Asking them to use only one networking stack wouldn't feasible in a realistic time frame.
peer_id
The values of the genesis_hash and fork_id fields cannot be verified by the requester and are expected to be unused at the moment. Instead, a client that desires connecting to a parachain is expected to obtain the genesis hash and fork ID of the parachain from the parachain chain specification. These fields are included in the networking protocol nonetheless in case an acceptable solution is found in the future, and in order to allow use cases such as discovering parachains in a not-strictly-trusted way.
genesis_hash
Because not all nodes want to be used as bootnodes, implementers are encouraged to provide a way to disable this mechanism. However, it is very much encouraged to leave this mechanism on by default for all parachain nodes.
This mechanism doesn't add or remove any security by itself, as it relies on existing mechanisms. However, if the principle of chain specification bootnodes is entirely replaced with the mechanism described in this RFC (which is the objective), then it becomes important whether the mechanism in this RFC can be abused in order to make a parachain unreachable.
Furthermore, parachain clients are expected to cache a list of known good nodes on their disk. If the mechanism described in this RFC went down, it would only prevent new nodes from accessing the parachain, while clients that have connected before would not be affected.
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 parachain full nodes, the 20 Polkadot full nodes corresponding to a specific parachain 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 parachain full node registers itself to be the provider of the key corresponding to BabeApi_next_epoch.
key
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 bootnodes of a parachain. Light clients are generally encouraged to cache the peers that they use between restarts, so they should only query these 20 Polkadot full nodes at their first initialization. If this every becomes a problem, this value of 20 is an arbitrary constant that can be increased for more redundancy.
Irrelevant.
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?
BabeApi_currentEpoch
BabeApi_nextEpoch
It is possible that in the future a client could connect to a parachain without having to rely on a trusted parachain specification.
The Polkadot UC will generate revenue from the sale of available Coretime. The question then arises: how should we handle these revenues? Broadly, there are two reasonable paths – burning the revenue and thereby removing it from total issuance or divert it to the Treasury. This Request for Comment (RFC) presents arguments favoring burning as the preferred mechanism for handling revenues from Coretime sales.
How to handle the revenue accrued from Coretime sales is an important economic question that influences the value of DOT and should be properly discussed before deciding for either of the options. Now is the best time to start this discussion.
Polkadot DOT token holders.
This RFC discusses potential benefits of burning the revenue accrued from Coretime sales instead of diverting them to Treasury. Here are the following arguments for it.
It's in the interest of the Polkadot community to have a consistent and predictable Treasury income, because volatility in the inflow can be damaging, especially in situations when it is insufficient. As such, this RFC operates under the presumption of a steady and sustainable Treasury income flow, which is crucial for the Polkadot community's stability. The assurance of a predictable Treasury income, as outlined in a prior discussion here, or through other equally effective measures, serves as a baseline assumption for this argument.
Consequently, we need not concern ourselves with this particular issue here. This naturally begs the question - why should we introduce additional volatility to the Treasury by aligning it with the variable Coretime sales? It's worth noting that Coretime revenues often exhibit an inverse relationship with periods when Treasury spending should ideally be ramped up. During periods of low Coretime utilization (indicated by lower revenue), Treasury should spend more on projects and endeavours to increase the demand for Coretime. This pattern underscores that Coretime sales, by their very nature, are an inconsistent and unpredictable source of funding for the Treasury. Given the importance of maintaining a steady and predictable inflow, it's unnecessary to rely on another volatile mechanism. Some might argue that we could have both: a steady inflow (from inflation) and some added bonus from Coretime sales, but burning the revenue would offer further benefits as described below.
Since the introduction of the Collectives parachain, many groups have expressed interest in forming new -- or migrating existing groups into -- on-chain collectives. While adding a new collective is relatively simple from a technical standpoint, the Fellowship will need to merge new pallets into the Collectives parachain for each new collective. This RFC proposes a means for the network to ratify a new collective, thus instructing the Fellowship to instate it in the runtime.
Many groups have expressed interest in representing collectives on-chain. Some of these include:
The group that wishes to operate an on-chain collective should publish the following information:
Collective removal may also come with other governance calls, for example voiding any scheduled Treasury spends that would fund the given collective.
Passing a Root origin referendum is slow. However, given the network's investment (in terms of code maintenance and salaries) in a new collective, this is an appropriate step.
No impacts.
Generally all new collectives will be in the Collectives parachain. Thus, performance impacts @@ -2080,10 +1806,10 @@ collectives is generalized and reusable, we expect most collectives to be instan subsets of modules. That is, new collectives should generally be compatible with UIs and other services that provide collective-related functionality, with little modifications to support new ones.
The launch of the Technical Fellowship, see the initial forum post.
Introduces breaking changes to the Core runtime API by letting Core::initialize_block return an enum. The versions of Core is bumped from 4 to 5.
Core
Core::initialize_block
The main feature that motivates this RFC are Multi-Block-Migrations (MBM); these make it possible to split a migration over multiple blocks. Further it would be nice to not hinder the possibility of implementing a new hook poll, that runs at the beginning of the block when there are no MBMs and has access to AllPalletsWithSystem. This hook can then be used to replace the use of on_initialize and on_finalize for non-deadline critical logic. In a similar fashion, it should not hinder the future addition of a System::PostInherents callback that always runs after all inherents were applied.
poll
AllPalletsWithSystem
on_initialize
on_finalize
System::PostInherents
This runtime API function is changed from returning () to ExtrinsicInclusionMode:
()
ExtrinsicInclusionMode
fn initialize_block(header: &<Block as BlockT>::Header) @@ -2155,23 +1881,23 @@ multi-block migrations available. 1. Multi-Block-Migrations: The runtime is being put into lock-down mode for the duration of the migration process by returning OnlyInherents from initialize_block. This ensures that no user provided transaction can interfere with the migration process. It is absolutely necessary to ensure this, otherwise a transaction could call into un-migrated storage and violate storage invariants. 2. poll is possible by using apply_extrinsic as entry-point and not hindered by this approach. It would not be possible to use a pallet inherent like System::last_inherent to achieve this for two reasons: First is that pallets do not have access to AllPalletsWithSystem which is required to invoke the poll hook on all pallets. Second is that the runtime does currently not enforce an order of inherents. 3. System::PostInherents can be done in the same manner as poll. -Drawbacks +Drawbacks The previous drawback of cementing the order of inherents has been addressed and removed by redesigning the approach. No further drawbacks have been identified thus far. -Testing, Security, and Privacy +Testing, Security, and Privacy The new logic of initialize_block can be tested by checking that the block-builder will skip transactions when OnlyInherents is returned. Security: n/a Privacy: n/a Performance, Ergonomics, and Compatibility -Performance +Performance The performance overhead is minimal in the sense that no clutter was added after fulfilling the requirements. The only performance difference is that initialize_block also returns an enum that needs to be passed through the WASM boundary. This should be negligible. -Ergonomics +Ergonomics The new interface allows for more extensible runtime logic. In the future, this will be utilized for multi-block-migrations which should be a huge ergonomic advantage for parachain developers. -Compatibility +Compatibility The advice here is OPTIONAL and outside of the RFC. To not degrade user experience, it is recommended to ensure that an updated node can still import historic blocks. -Prior Art and References +Prior Art and References The RFC is currently being implemented in polkadot-sdk#1781 (formerly substrate#14275). Related issues and merge requests: @@ -2181,14 +1907,14 @@ transactions There is no module hook after inherents and before transactions -Unresolved Questions +Unresolved Questions Please suggest a better name for BlockExecutiveMode. We already tried: RuntimeExecutiveMode, ExtrinsicInclusionMode. The names of the modes Normal and Minimal were also called AllExtrinsics and OnlyInherents, so if you have naming preferences; please post them. => renamed to ExtrinsicInclusionMode Is post_inherents more consistent instead of last_inherent? Then we should change it. => renamed to last_inherent -Future Directions and Related Material +Future Directions and Related Material The long-term future here is to move the block building logic into the runtime. Currently there is a tight dance between the block author and the runtime; the author has to call into different runtime functions in quick succession and exact order. Any misstep causes the block to be invalid. This can be unified and simplified by moving both parts into the runtime. (source) @@ -2225,14 +1951,14 @@ This can be unified and simplified by moving both parts into the runtime. AuthorsBryan Chen -Summary +Summary This RFC proposes a set of changes to the parachain lock mechanism. The goal is to allow a parachain manager to self-service the parachain without root track governance action. This is achieved by remove existing lock conditions and only lock a parachain when: A parachain manager explicitly lock the parachain OR a parachain block is produced successfully -Motivation +Motivation The manager of a parachain has permission to manage the parachain when the parachain is unlocked. Parachains are by default locked when onboarded to a slot. This requires the parachain wasm/genesis must be valid, otherwise a root track governance action on relaychain is required to update the parachain. The current reliance on root track governance actions for managing parachains can be time-consuming and burdensome. This RFC aims to address this technical difficulty by allowing parachain managers to take self-service actions, rather than relying on general public voting. The key scenarios this RFC seeks to improve are: @@ -2251,12 +1977,12 @@ This can be unified and simplified by moving both parts into the runtime. A parachain SHOULD be locked when it successfully produced the first block. A parachain manager MUST be able to perform lease swap without having a running parachain. -Stakeholders +Stakeholders Parachain teams Parachain users -Explanation +Explanation Status quo A parachain can either be locked or unlocked3. With parachain locked, the parachain manager does not have any privileges. With parachain unlocked, the parachain manager can perform following actions with the paras_registrar pallet: @@ -2296,31 +2022,31 @@ This can be unified and simplified by moving both parts into the runtime. Parachain never produced a block. Including from expired leases. Parachain manager never explicitly lock the parachain. -Drawbacks +Drawbacks Parachain locks are designed in such way to ensure the decentralization of parachains. If parachains are not locked when it should be, it could introduce centralization risk for new parachains. For example, one possible scenario is that a collective may decide to launch a parachain fully decentralized. However, if the parachain is unable to produce block, the parachain manager will be able to replace the wasm and genesis without the consent of the collective. It is considered this risk is tolerable as it requires the wasm/genesis to be invalid at first place. It is not yet practically possible to develop a parachain without any centralized risk currently. Another case is that a parachain team may decide to use crowdloan to help secure a slot lease. Previously, creating a crowdloan will lock a parachain. This means crowdloan participants will know exactly the genesis of the parachain for the crowdloan they are participating. However, this actually providers little assurance to crowdloan participants. For example, if the genesis block is determined before a crowdloan is started, it is not possible to have onchain mechanism to enforce reward distributions for crowdloan participants. They always have to rely on the parachain team to fulfill the promise after the parachain is alive. Existing operational parachains will not be impacted. -Testing, Security, and Privacy +Testing, Security, and Privacy The implementation of this RFC will be tested on testnets (Rococo and Westend) first. An audit maybe required to ensure the implementation does not introduce unwanted side effects. There is no privacy related concerns. -Performance +Performance This RFC should not introduce any performance impact. -Ergonomics +Ergonomics This RFC should improve the developer experiences for new and existing parachain teams -Compatibility +Compatibility This RFC is fully compatibility with existing interfaces. -Prior Art and References +Prior Art and References Parachain Slot Extension Story: https://github.com/paritytech/polkadot/issues/4758 Allow parachain to renew lease without actually run another parachain: https://github.com/paritytech/polkadot/issues/6685 Always treat parachain that never produced block for a significant amount of time as unlocked: https://github.com/paritytech/polkadot/issues/7539 -Unresolved Questions +Unresolved Questions None at this stage. -Future Directions and Related Material +Future Directions and Related Material This RFC is only intended to be a short term solution. Slots will be removed in future and lock mechanism is likely going to be replaced with a more generalized parachain manage & recovery system in future. Therefore long term impacts of this RFC are not considered. 1 https://github.com/paritytech/cumulus/issues/377 @@ -2354,19 +2080,19 @@ This can be unified and simplified by moving both parts into the runtime. Authors@brenzi for Encointer Association, 8000 Zurich, Switzerland -Summary +Summary Encointer is a system chain on Kusama since Jan 2022 and has been developed and maintained by the Encointer association. This RFC proposes to treat Encointer like any other system chain and include it in the fellowship repo with this PR. -Motivation +Motivation Encointer does not seek to be in control of its runtime repository. As a decentralized system, the fellowship has a more suitable structure to maintain a system chain runtime repo than the Encointer association does. Also, Encointer aims to update its runtime in batches with other system chains in order to have consistency for interoperability across system chains. -Stakeholders +Stakeholders Fellowship: Will continue to take upon them the review and auditing work for the Encointer runtime, but the process is streamlined with other system chains and therefore less time-consuming compared to the separate repo and CI process we currently have. Kusama Network: Tokenholders can easily see the changes of all system chains in one place. Encointer Association: Further decentralization of the Encointer Network necessities like devops. Encointer devs: Being able to work directly in the Fellowship runtimes repo to streamline and synergize with other developers. -Explanation +Explanation Our PR has all details about our runtime and how we would move it into the fellowship repo. Noteworthy: All Encointer-specific pallets will still be located in encointer's repo for the time being: https://github.com/encointer/pallets It will still be the duty of the Encointer team to keep its runtime up to date and provide adequate test fixtures. Frequent dependency bumps with Polkadot releases would be beneficial for interoperability and could be streamlined with other system chains but that will not be a duty of fellowship. Whenever possible, all system chains could be upgraded jointly (including Encointer) with a batch referendum. @@ -2375,17 +2101,17 @@ This can be unified and simplified by moving both parts into the runtime. Encointer will publish all its crates crates.io Encointer does not carry out external auditing of its runtime nor pallets. It would be beneficial but not a requirement from our side if Encointer could join the auditing process of other system chains. -Drawbacks +Drawbacks Other than all other system chains, development and maintenance of the Encointer Network is mainly financed by the KSM Treasury and possibly the DOT Treasury in the future. Encointer is dedicated to maintaining its network and runtime code for as long as possible, but there is a dependency on funding which is not in the hands of the fellowship. The only risk in the context of funding, however, is that the Encointer runtime will see less frequent updates if there's less funding. -Testing, Security, and Privacy +Testing, Security, and Privacy No changes to the existing system are proposed. Only changes to how maintenance is organized. Performance, Ergonomics, and Compatibility No changes -Prior Art and References +Prior Art and References Existing Encointer runtime repo -Unresolved Questions +Unresolved Questions None identified -Future Directions and Related Material +Future Directions and Related Material More info on Encointer: encointer.org (source) Table of Contents @@ -3305,11 +3031,11 @@ other privacy-enhancing mechanisms to address this concern. AuthorsJoe Petrowski, Gavin Wood -Summary +Summary The Relay Chain contains most of the core logic for the Polkadot network. While this was necessary prior to the launch of parachains and development of XCM, most of this logic can exist in parachains. This is a proposal to migrate several subsystems into system parachains. -Motivation +Motivation Polkadot's scaling approach allows many distinct state machines (known generally as parachains) to operate with common guarantees about the validity and security of their state transitions. Polkadot provides these common guarantees by executing the state transitions on a strict subset (a backing @@ -3321,13 +3047,13 @@ blockspace) to the network. By minimising state transition logic on the Relay Chain by migrating it into "system chains" -- a set of parachains that, with the Relay Chain, make up the Polkadot protocol -- the Polkadot Ubiquitous Computer can maximise its primary offering: secure blockspace. -Stakeholders +Stakeholders Parachains that interact with affected logic on the Relay Chain; Core protocol and XCM format developers; Tooling, block explorer, and UI developers. -Explanation +Explanation The following pallets and subsystems are good candidates to migrate from the Relay Chain: Identity @@ -3473,36 +3199,36 @@ sensible to rehearse a migration. Staking is the subsystem most constrained by PoV limits. Ensuring that elections, payouts, session changes, offences/slashes, etc. work in a parachain on Kusama -- with its larger validator set -- will give confidence to the chain's robustness on Polkadot. -Drawbacks +Drawbacks These subsystems will have reduced resources in cores than on the Relay Chain. Staking in particular may require some optimizations to deal with constraints. -Testing, Security, and Privacy +Testing, Security, and Privacy Standard audit/review requirements apply. More powerful multi-chain integration test tools would be useful in developement. Performance, Ergonomics, and Compatibility Describe the impact of the proposal on the exposed functionality of Polkadot. -Performance +Performance This is an optimization. The removal of public/user transactions on the Relay Chain ensures that its primary resources are allocated to system performance. -Ergonomics +Ergonomics This proposal alters very little for coretime users (e.g. parachain developers). Application developers will need to interact with multiple chains, making ergonomic light client tools particularly important for application development. For existing parachains that interact with these subsystems, they will need to configure their runtimes to recognize the new locations in the network. -Compatibility +Compatibility Implementing this proposal will require some changes to pallet APIs and/or a pub-sub protocol. Application developers will need to interact with multiple chains in the network. -Prior Art and References +Prior Art and References Transactionless Relay-chain Moving Staking off the Relay Chain -Unresolved Questions +Unresolved Questions There remain some implementation questions, like how to use balances for both Staking and Governance. See, for example, Moving Staking off the Relay Chain. -Future Directions and Related Material +Future Directions and Related Material Ideally the Relay Chain becomes transactionless, such that not even balances are represented there. With Staking and Governance off the Relay Chain, this is not an unreasonable next step. With Identity on Polkadot, Kusama may opt to drop its People Chain. @@ -3537,13 +3263,13 @@ With Staking and Governance off the Relay Chain, this is not an unreasonable nex AuthorsVedhavyas Singareddi -Summary +Summary 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. -Motivation +Motivation 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 @@ -3555,11 +3281,11 @@ One of the main challenge here is some extrinsics could be big enough that this 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. -Stakeholders +Stakeholders Technical Fellowship, in its role of maintaining system runtimes. -Explanation +Explanation 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. @@ -3585,26 +3311,26 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { system_version: 1, }; }
1. Multi-Block-Migrations: The runtime is being put into lock-down mode for the duration of the migration process by returning OnlyInherents from initialize_block. This ensures that no user provided transaction can interfere with the migration process. It is absolutely necessary to ensure this, otherwise a transaction could call into un-migrated storage and violate storage invariants.
OnlyInherents
initialize_block
2. poll is possible by using apply_extrinsic as entry-point and not hindered by this approach. It would not be possible to use a pallet inherent like System::last_inherent to achieve this for two reasons: First is that pallets do not have access to AllPalletsWithSystem which is required to invoke the poll hook on all pallets. Second is that the runtime does currently not enforce an order of inherents.
apply_extrinsic
System::last_inherent
3. System::PostInherents can be done in the same manner as poll.
The previous drawback of cementing the order of inherents has been addressed and removed by redesigning the approach. No further drawbacks have been identified thus far.
The new logic of initialize_block can be tested by checking that the block-builder will skip transactions when OnlyInherents is returned.
Security: n/a
Privacy: n/a
The performance overhead is minimal in the sense that no clutter was added after fulfilling the requirements. The only performance difference is that initialize_block also returns an enum that needs to be passed through the WASM boundary. This should be negligible.
The new interface allows for more extensible runtime logic. In the future, this will be utilized for multi-block-migrations which should be a huge ergonomic advantage for parachain developers.
The advice here is OPTIONAL and outside of the RFC. To not degrade user experience, it is recommended to ensure that an updated node can still import historic blocks.
The RFC is currently being implemented in polkadot-sdk#1781 (formerly substrate#14275). Related issues and merge requests:
Please suggest a better name for BlockExecutiveMode. We already tried: RuntimeExecutiveMode, ExtrinsicInclusionMode. The names of the modes Normal and Minimal were also called AllExtrinsics and OnlyInherents, so if you have naming preferences; please post them. => renamed to ExtrinsicInclusionMode
BlockExecutiveMode
RuntimeExecutiveMode
Normal
Minimal
AllExtrinsics
Is post_inherents more consistent instead of last_inherent? Then we should change it. => renamed to last_inherent
post_inherents
last_inherent
The long-term future here is to move the block building logic into the runtime. Currently there is a tight dance between the block author and the runtime; the author has to call into different runtime functions in quick succession and exact order. Any misstep causes the block to be invalid. This can be unified and simplified by moving both parts into the runtime.
This RFC proposes a set of changes to the parachain lock mechanism. The goal is to allow a parachain manager to self-service the parachain without root track governance action.
This is achieved by remove existing lock conditions and only lock a parachain when:
The manager of a parachain has permission to manage the parachain when the parachain is unlocked. Parachains are by default locked when onboarded to a slot. This requires the parachain wasm/genesis must be valid, otherwise a root track governance action on relaychain is required to update the parachain.
The current reliance on root track governance actions for managing parachains can be time-consuming and burdensome. This RFC aims to address this technical difficulty by allowing parachain managers to take self-service actions, rather than relying on general public voting.
The key scenarios this RFC seeks to improve are:
A parachain can either be locked or unlocked3. With parachain locked, the parachain manager does not have any privileges. With parachain unlocked, the parachain manager can perform following actions with the paras_registrar pallet:
paras_registrar
Parachain locks are designed in such way to ensure the decentralization of parachains. If parachains are not locked when it should be, it could introduce centralization risk for new parachains.
For example, one possible scenario is that a collective may decide to launch a parachain fully decentralized. However, if the parachain is unable to produce block, the parachain manager will be able to replace the wasm and genesis without the consent of the collective.
It is considered this risk is tolerable as it requires the wasm/genesis to be invalid at first place. It is not yet practically possible to develop a parachain without any centralized risk currently.
Another case is that a parachain team may decide to use crowdloan to help secure a slot lease. Previously, creating a crowdloan will lock a parachain. This means crowdloan participants will know exactly the genesis of the parachain for the crowdloan they are participating. However, this actually providers little assurance to crowdloan participants. For example, if the genesis block is determined before a crowdloan is started, it is not possible to have onchain mechanism to enforce reward distributions for crowdloan participants. They always have to rely on the parachain team to fulfill the promise after the parachain is alive.
Existing operational parachains will not be impacted.
An audit maybe required to ensure the implementation does not introduce unwanted side effects.
There is no privacy related concerns.
This RFC should improve the developer experiences for new and existing parachain teams
This RFC is fully compatibility with existing interfaces.
None at this stage.
This RFC is only intended to be a short term solution. Slots will be removed in future and lock mechanism is likely going to be replaced with a more generalized parachain manage & recovery system in future. Therefore long term impacts of this RFC are not considered.
https://github.com/paritytech/cumulus/issues/377 @@ -2354,19 +2080,19 @@ This can be unified and simplified by moving both parts into the runtime.
Encointer is a system chain on Kusama since Jan 2022 and has been developed and maintained by the Encointer association. This RFC proposes to treat Encointer like any other system chain and include it in the fellowship repo with this PR.
Encointer does not seek to be in control of its runtime repository. As a decentralized system, the fellowship has a more suitable structure to maintain a system chain runtime repo than the Encointer association does.
Also, Encointer aims to update its runtime in batches with other system chains in order to have consistency for interoperability across system chains.
Our PR has all details about our runtime and how we would move it into the fellowship repo.
Noteworthy: All Encointer-specific pallets will still be located in encointer's repo for the time being: https://github.com/encointer/pallets
It will still be the duty of the Encointer team to keep its runtime up to date and provide adequate test fixtures. Frequent dependency bumps with Polkadot releases would be beneficial for interoperability and could be streamlined with other system chains but that will not be a duty of fellowship. Whenever possible, all system chains could be upgraded jointly (including Encointer) with a batch referendum.
Other than all other system chains, development and maintenance of the Encointer Network is mainly financed by the KSM Treasury and possibly the DOT Treasury in the future. Encointer is dedicated to maintaining its network and runtime code for as long as possible, but there is a dependency on funding which is not in the hands of the fellowship. The only risk in the context of funding, however, is that the Encointer runtime will see less frequent updates if there's less funding.
No changes to the existing system are proposed. Only changes to how maintenance is organized.
No changes
Existing Encointer runtime repo
None identified
More info on Encointer: encointer.org
The Relay Chain contains most of the core logic for the Polkadot network. While this was necessary prior to the launch of parachains and development of XCM, most of this logic can exist in parachains. This is a proposal to migrate several subsystems into system parachains.
Polkadot's scaling approach allows many distinct state machines (known generally as parachains) to operate with common guarantees about the validity and security of their state transitions. Polkadot provides these common guarantees by executing the state transitions on a strict subset (a backing @@ -3321,13 +3047,13 @@ blockspace) to the network.
By minimising state transition logic on the Relay Chain by migrating it into "system chains" -- a set of parachains that, with the Relay Chain, make up the Polkadot protocol -- the Polkadot Ubiquitous Computer can maximise its primary offering: secure blockspace.
The following pallets and subsystems are good candidates to migrate from the Relay Chain:
These subsystems will have reduced resources in cores than on the Relay Chain. Staking in particular may require some optimizations to deal with constraints.
Standard audit/review requirements apply. More powerful multi-chain integration test tools would be useful in developement.
Describe the impact of the proposal on the exposed functionality of Polkadot.
This is an optimization. The removal of public/user transactions on the Relay Chain ensures that its primary resources are allocated to system performance.
This proposal alters very little for coretime users (e.g. parachain developers). Application developers will need to interact with multiple chains, making ergonomic light client tools particularly important for application development.
For existing parachains that interact with these subsystems, they will need to configure their runtimes to recognize the new locations in the network.
Implementing this proposal will require some changes to pallet APIs and/or a pub-sub protocol. Application developers will need to interact with multiple chains in the network.
There remain some implementation questions, like how to use balances for both Staking and Governance. See, for example, Moving Staking off the Relay Chain.
Ideally the Relay Chain becomes transactionless, such that not even balances are represented there. With Staking and Governance off the Relay Chain, this is not an unreasonable next step.
With Identity on Polkadot, Kusama may opt to drop its People Chain.
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.
system_version
RuntimeVersion
StateVersion::V1
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
StateVersion::V0
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. @@ -3585,26 +3311,26 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { system_version: 1, }; }
frame_system::Config
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.
state_version
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.
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.
This RFC proposes a new host function for parachains, storage_proof_size. It shall provide the size of the currently recorded storage proof to the runtime. Runtime authors can use the proof size to improve block utilization by retroactively reclaiming unused storage weight.
storage_proof_size
The number of extrinsics that are included in a parachain block is limited by two constraints: execution time and proof size. FRAME weights cover both concepts, and block-builders use them to decide how many extrinsics to include in a block. However, these weights are calculated ahead of time by benchmarking on a machine with reference hardware. The execution-time properties of the state-trie and its storage items are unknown at benchmarking time. Therefore, we make some assumptions about the state-trie:
These pessimistic assumptions lead to an overestimation of storage weight, negatively impacting block utilization on parachains.
In addition, the current model does not account for multiple accesses to the same storage items. While these repetitive accesses will not increase storage-proof size, the runtime-side weight monitoring will account for them multiple times. Since the proof size is completely opaque to the runtime, we can not implement retroactive storage weight correction.
A solution must provide a way for the runtime to track the exact storage-proof size consumed on a per-extrinsic basis.
This RFC proposes a new host function that exposes the storage-proof size to the runtime. As a result, runtimes can implement storage weight reclaiming mechanisms that improve block utilization.
This RFC proposes the following host function signature:
#![allow(unused)] @@ -3658,13 +3384,13 @@ is the correct way of introducing this change. }
The host function MUST return an unsigned 64-bit integer value representing the current proof size. In block-execution and block-import contexts, this function MUST return the current size of the proof. To achieve this, parachain node implementors need to enable proof recording for block imports. In other contexts, this function MUST return 18446744073709551615 (u64::MAX), which represents disabled proof recording.
Parachain nodes need to enable proof recording during block import to correctly implement the proposed host function. Benchmarking conducted with balance transfers has shown a performance reduction of around 0.6% when proof recording is enabled.
The host function proposed in this RFC allows parachain runtime developers to keep track of the proof size. Typical usage patterns would be to keep track of the overall proof size or the difference between subsequent calls to the host function.
This RFC proposes changing the current deposit requirements on the Polkadot and Kusama Asset Hub for creating an NFT collection, minting an individual NFT, and lowering its corresponding metadata and attribute deposits. The objective is to lower the barrier to entry for NFT creators, fostering a more inclusive and vibrant ecosystem while maintaining network integrity and preventing spam.
The current deposit of 10 DOT for collection creation (along with 0.01 DOT for item deposit and 0.2 DOT for metadata and attribute deposits) on the Polkadot Asset Hub and 0.1 KSM on Kusama Asset Hub presents a significant financial barrier for many NFT creators. By lowering the deposit @@ -3740,7 +3466,7 @@ low.
deposit
Previous discussions have been held within the Polkadot Forum, with artists expressing their concerns about the deposit amounts.
This RFC proposes a revision of the deposit constants in the configuration of the NFTs pallet on the Polkadot Asset Hub. The new deposit amounts would be determined by a standard deposit formula.
As of v1.1.1, the Collection Deposit is 10 DOT and the Item Deposit is 0.01 DOT (see @@ -3825,7 +3551,7 @@ application to avoid sudden rate changes, as in:
where the constant a moves the inflection to lower or higher x values, the constant b adjusts the rate of the deposit increase, and the independent variable x is the number of collections or items, depending on application.
a
b
Modifying deposit requirements necessitates a balanced assessment of the potential drawbacks. Highlighted below are cogent points extracted from the discourse on the Polkadot Forum conversation, @@ -3854,22 +3580,22 @@ stakeholders wouldn't be much affected. As of date 9th January 2024 there are 42 Polkadot Asset Hub and 191 on Kusama Asset Hub with a relatively low volume.
As noted above, state bloat is a security concern. In the case of abuse, governance could adapt by increasing deposit rates and/or using forceDestroy on collections agreed to be spam.
forceDestroy
The primary performance consideration stems from the potential for state bloat due to increased activity from lower deposit requirements. It's vital to monitor and manage this to avoid any negative impact on the chain's performance. Strategies for mitigating state bloat, including efficient data management and periodic reviews of storage requirements, will be essential.
The proposed change aims to enhance the user experience for artists, traders, and utilizers of Kusama and Polkadot Asset Hubs, making Polkadot and Kusama more accessible and user-friendly.
The change does not impact compatibility as a redeposit function is already implemented.
redeposit
If this RFC is accepted, there should not be any unresolved questions regarding how to adapt the implementation of deposits for NFT collections.
Propose a way of permuting the availability chunk indices assigned to validators, in the context of recovering available data from systematic chunks, with the purpose of fairly distributing network bandwidth usage.
Currently, the ValidatorIndex is always identical to the ChunkIndex. Since the validator array is only shuffled once per session, naively using the ValidatorIndex as the ChunkIndex would pose an unreasonable stress on the first N/3 validators during an entire session, when favouring availability recovery from systematic chunks.
Relay chain node core developers.
An erasure coding algorithm is considered systematic if it preserves the original unencoded data as part of the resulting code. @@ -4125,7 +3851,7 @@ struct (added in https://github.com/paritytech/polkadot-sdk/pull/2177Configuration::set_node_feature extrinsic. Once the feature is enabled and new configuration is live, the validator->chunk mapping ceases to be a 1:1 mapping and systematic recovery may begin.
https://github.com/paritytech/polkadot-sdk/pull/2177Configuration::set_node_feature
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
This enables future optimisations for the performance of availability recovery, such as retrieving batched systematic chunks from backers/approval-checkers.
This RFC proposes to changes the SessionKeys::generate_session_keys runtime api interface. This runtime api is used by validator operators to generate new session keys on a node. The public session keys are then registered manually on chain by the validator operator. Before this RFC it was not possible by the on chain logic to ensure that the account setting the public session keys is also in @@ -4239,7 +3965,7 @@ possession of the private session keys. To solve this the RFC proposes to pass t registration on chain to generate_session_keys. Further this RFC proposes to change the return value of the generate_session_keys function also to not only return the public session keys, but also the proof of ownership for the private session keys. The validator operator will then need to send the public session keys and the proof together when registering new session keys on chain.
SessionKeys::generate_session_keys
generate_session_keys
When submitting the new public session keys to the on chain logic there doesn't exist any verification of possession of the private session keys. This means that users can basically register any kind of public session keys on chain. While the on chain logic ensures that there are no duplicate keys, someone could try to prevent others from registering new session keys by setting them first. While this wouldn't bring @@ -4247,13 +3973,13 @@ the "attacker" any kind of advantage, more like disadvantages (potenti e.g. changing its session key in the event of a private session key leak.
After this RFC this kind of attack would not be possible anymore, because the on chain logic can verify that the sending account is in ownership of the private session keys.
We are first going to explain the proof format being used:
proof
#![allow(unused)] fn main() { @@ -4287,31 +4013,31 @@ actual exported function signature looks like: already gets the proof passed as Vec<u8>. This proof needs to be decoded to the actual Proof type as explained above. The proof and the SCALE encoded account_id of the sender are used to verify the ownership of the SessionKeys. -Drawbacks +Drawbacks Validator operators need to pass the their account id when rotating their session keys in a node. This will require updating some high level docs and making users familiar with the slightly changed ergonomics. -Testing, Security, and Privacy +Testing, Security, and Privacy Testing of the new changes only requires passing an appropriate owner for the current testing context. The changes to the proof generation and verification got audited to ensure they are correct. Performance, Ergonomics, and Compatibility -Performance +Performance The session key generation is an offchain process and thus, doesn't influence the performance of the chain. Verifying the proof is done on chain as part of the transaction logic for setting the session keys. The verification of the proof is a signature verification number of individual session keys times. As setting the session keys is happening quite rarely, it should not influence the overall system performance. -Ergonomics +Ergonomics The interfaces have been optimized to make it as easy as possible to generate the ownership proof. -Compatibility +Compatibility Introduces a new version of the SessionKeys runtime api. Thus, nodes should be updated before a runtime is enacted that contains these changes otherwise they will fail to generate session keys. The RPC that exists around this runtime api needs to be updated to support passing the account id and for returning the ownership proof alongside the public session keys. UIs would need to be updated to support the new RPC and the changed on chain logic. -Prior Art and References +Prior Art and References None. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material Substrate implementation of the RFC. (source) Table of Contents @@ -4349,10 +4075,10 @@ and for returning the ownership proof alongside the public session keys. AuthorsJoe Petrowski, Gavin Wood -Summary +Summary The Fellowship Manifesto states that members should receive a monthly allowance on par with gross income in OECD countries. This RFC proposes concrete amounts. -Motivation +Motivation One motivation for the Technical Fellowship is to provide an incentive mechanism that can induct and retain technical talent for the continued progress of the network. In order for members to uphold their commitment to the network, they should receive support to @@ -4362,12 +4088,12 @@ on par with a full-time job. Providing a livable wage to those making such contr pragmatic to work full-time on Polkadot. Note: Goals of the Fellowship, expectations for each Dan, and conditions for promotion and demotion are all explained in the Manifesto. This RFC is only to propose concrete values for allowances. -Stakeholders +Stakeholders Fellowship members Polkadot Treasury -Explanation +Explanation This RFC proposes agreeing on salaries relative to a single level, the III Dan. As such, changes to the amount or asset used would only be on a single value, and all others would adjust relatively. A III Dan is someone whose contributions match the expectations of a full-time individual contributor. @@ -4427,19 +4153,19 @@ other hand, more people will likely join the Fellowship in the coming years. Updates Updates to these levels, whether relative ratios, the asset used, or the amount, shall be done via RFC. -Drawbacks +Drawbacks By not using DOT for payment, the protocol relies on the stability of other assets and the ability to acquire them. However, the asset of choice can be changed in the future. -Testing, Security, and Privacy +Testing, Security, and Privacy N/A. Performance, Ergonomics, and Compatibility -Performance +Performance N/A -Ergonomics +Ergonomics N/A -Compatibility +Compatibility N/A -Prior Art and References +Prior Art and References The Polkadot Fellowship Manifesto @@ -4447,7 +4173,7 @@ Manifesto Indeed: Average Salary for Engineers, United States -Unresolved Questions +Unresolved Questions None at present. (source) Table of Contents @@ -4480,11 +4206,11 @@ States AuthorsPierre Krieger -Summary +Summary When two peers connect to each other, they open (amongst other things) a so-called "notifications protocol" substream dedicated to gossiping transactions to each other. Each notification on this substream currently consists in a SCALE-encoded Vec<Transaction> where Transaction is defined in the runtime. This RFC proposes to modify the format of the notification to become (Compact(1), Transaction). This maintains backwards compatibility, as this new format decodes as a Vec of length equal to 1. -Motivation +Motivation There exists three motivations behind this change: @@ -4497,9 +4223,9 @@ States It makes the implementation way more straight-forward by not having to repeat code related to back-pressure. See explanations below. -Stakeholders +Stakeholders Low-level developers. -Explanation +Explanation To give an example, if you send one notification with three transactions, the bytes that are sent on the wire are: concat( leb128(total-size-in-bytes-of-the-rest), @@ -4519,23 +4245,23 @@ A SCALE-compact encoded 1 is one byte of value 4. In o This is equivalent to forcing the Vec<Transaction> to always have a length of 1, and I expect the Substrate implementation to simply modify the sending side to add a for loop that sends one notification per item in the Vec. As explained in the motivation section, this allows extracting scale(transaction) items without having to know how to decode them. By "flattening" the two-steps hierarchy, an implementation only needs to back-pressure individual notifications rather than back-pressure notifications and transactions within notifications. -Drawbacks +Drawbacks This RFC chooses to maintain backwards compatibility at the cost of introducing a very small wart (the Compact(1)). An alternative could be to introduce a new version of the transactions notifications protocol that sends one Transaction per notification, but this is significantly more complicated to implement and can always be done later in case the Compact(1) is bothersome. -Testing, Security, and Privacy +Testing, Security, and Privacy Irrelevant. Performance, Ergonomics, and Compatibility -Performance +Performance Irrelevant. -Ergonomics +Ergonomics Irrelevant. -Compatibility +Compatibility The change is backwards compatible if done in two steps: modify the sender to always send one transaction per notification, then, after a while, modify the receiver to enforce the new format. -Prior Art and References +Prior Art and References Irrelevant. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material None. This is a simple isolated change. (source) Table of Contents @@ -4575,20 +4301,20 @@ This is equivalent to forcing the Vec<Transaction> to always AuthorsPierre Krieger -Summary +Summary 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. -Motivation +Motivation The Polkadot peer-to-peer network is made of nodes. Not all these nodes are equal. Some nodes store only the headers of recent 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. -Stakeholders +Stakeholders Low-level client developers. People interested in accessing the archive of the chain. -Explanation +Explanation 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. Capabilities @@ -4624,9 +4350,9 @@ If blocks pruning is enabled and the chain is a relay chain, then Substrate unfo Implementations that have the head of the chain provider capability do not register themselves as providers, but instead are the nodes that participate in the main DHT. In other words, they are the nodes that serve requests of the /<genesis_hash>/kad protocol. Any implementation that isn't a head of the chain provider (read: light clients) must not participate in the main DHT. This is already presently the case. Implementations must not participate in the main DHT if they don't fulfill the capability yet. For example, a node that is still in the process of warp syncing must not participate in the main DHT. However, assuming that warp syncing doesn't last more than a few seconds, it is acceptable to ignore this requirement in order to avoid complicating implementations too much. -Drawbacks +Drawbacks None that I can see. -Testing, Security, and Privacy +Testing, Security, and Privacy 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. @@ -4634,20 +4360,20 @@ Furthermore, when a large number of providers are registered, only the providers 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. Performance, Ergonomics, and Compatibility -Performance +Performance 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. -Ergonomics +Ergonomics Irrelevant. -Compatibility +Compatibility Irrelevant. -Prior Art and References +Prior Art and References Unknown. -Unresolved Questions +Unresolved Questions 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? -Future Directions and Related Material +Future Directions and Related Material 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. @@ -4696,12 +4422,12 @@ We could even add to the peer-to-peer network nodes that are only capable of ser AuthorsZondax AG, Parity Technologies -Summary +Summary To interact with chains in the Polkadot ecosystem it is required to know how transactions are encoded and how to read state. For doing this, Polkadot-SDK, the framework used by most of the chains in the Polkadot ecosystem, exposes metadata about the runtime to the outside. UIs, wallets, and others can use this metadata to interact with these chains. This makes the metadata a crucial piece of the transaction encoding as users are relying on the interacting software to encode the transactions in the correct format. It gets even more important when the user signs the transaction in an offline wallet, as the device by its nature cannot get access to the metadata without relying on the online wallet to provide it. This makes it so that the offline wallet needs to trust an online party, deeming the security assumptions of the offline devices, mute. This RFC proposes a way for offline wallets to leverage metadata, within the constraints of these. The design idea is that the metadata is chunked and these chunks are put into a merkle tree. The root hash of this merkle tree represents the metadata. The offline wallets can use the root hash to decode transactions by getting proofs for the individual chunks of the metadata. This root hash is also included in the signed data of the transaction (but not sent as part of the transaction). The runtime is then including its known metadata root hash when verifying the transaction. If the metadata root hash known by the runtime differs from the one that the offline wallet used, it very likely means that the online wallet provided some fake data and the verification of the transaction fails. Users depend on offline wallets to correctly display decoded transactions before signing. With merkleized metadata, they can be assured of the transaction's legitimacy, as incorrect transactions will be rejected by the runtime. -Motivation +Motivation Polkadot's innovative design (both relay chain and parachains) present the ability to developers to upgrade their network as frequently as they need. These systems manage to have integrations working after the upgrades with the help of FRAME Metadata. This Metadata, which is in the order of half a MiB for most Polkadot-SDK chains, completely describes chain interfaces and properties. Securing this metadata is key for users to be able to interact with the Polkadot-SDK chain in the expected way. On the other hand, offline wallets provide a secure way for Blockchain users to hold their own keys (some do a better job than others). These devices seldomly get upgraded, usually account for one particular network and hold very small internal memories. Currently in the Polkadot ecosystem there is no secure way of having these offline devices know the latest Metadata of the Polkadot-SDK chain they are interacting with. This results in a plethora of similar yet slightly different offline wallets for all different Polkadot-SDK chains, as well as the impediment of keeping these regularly updated, thus not fully leveraging Polkadot-SDK’s unique forkless upgrade feature. The two main reasons why this is not possible today are: @@ -4728,14 +4454,14 @@ We could even add to the peer-to-peer network nodes that are only capable of ser Chunks handling mechanism SHOULD support chunks being sent in any order without memory utilization overhead; Unused enum variants MUST be stripped (this has great impact on transmitted metadata size; examples: era enum, enum with all calls for call batching). -Stakeholders +Stakeholders Runtime implementors UI/wallet implementors Offline wallet implementors The idea for this RFC was brought up by runtime implementors and was extensively discussed with offline wallet implementors. It was designed in such a way that it can work easily with the existing offline wallet solutions in the Polkadot ecosystem. -Explanation +Explanation The FRAME metadata provides a wide range of information about a FRAME based runtime. It contains information about the pallets, the calls per pallet, the storage entries per pallet, runtime APIs, and type information about most of the types that are used in the runtime. For decoding extrinsics on an offline wallet, what is mainly required is type information. Most of the other information in the FRAME metadata is actually not required for decoding extrinsics and thus it can be removed. Therefore, the following is a proposal on a custom representation of the metadata and how this custom metadata is chunked, ensuring that only the needed chunks required for decoding a particular extrinsic are sent to the offline wallet. The necessary information to transform the FRAME metadata type information into the type information presented in this RFC will be provided. However, not every single detail on how to convert from FRAME metadata into the RFC type information is described. First, the MetadataDigest is introduced. After that, ExtrinsicMetadata is covered and finally the actual format of the type information. Then pruning of unrelated type information is covered and how to generate the TypeRefs. In the latest step, merkle tree calculation is explained. Metadata digest @@ -5006,23 +4732,23 @@ nodes: [[[2, 3], [4, 5]], [0, 1]] Included in the extrinsic is u8, the "mode". The mode is either 0 which means to not include the metadata hash in the signed data or the mode is 1 to include the metadata hash in V1. Included in the signed data is an Option<[u8; 32]>. Depending on the mode the value is either None or Some(metadata_hash). -Drawbacks +Drawbacks The chunking may not be the optimal case for every kind of offline wallet. -Testing, Security, and Privacy +Testing, Security, and Privacy All implementations are required to strictly follow the RFC to generate the metadata hash. This includes which hash function to use and how to construct the metadata types tree. So, all implementations are following the same security criteria. As the chains will calculate the metadata hash at compile time, the build process needs to be trusted. However, this is already a solved problem in the Polkadot ecosystem by using reproducible builds. So, anyone can rebuild a chain runtime to ensure that a proposal is actually containing the changes as advertised. Implementations can also be tested easily against each other by taking some metadata and ensuring that they all come to the same metadata hash. Privacy of users should also not be impacted. This assumes that wallets will generate the metadata hash locally and don't leak any information to third party services about which chunks a user will send to their offline wallet. Besides that, there is no leak of private information as getting the raw metadata from the chain is an operation that is done by almost everyone. Performance, Ergonomics, and Compatibility -Performance +Performance There should be no measurable impact on performance to Polkadot or any other chain using this feature. The metadata root hash is calculated at compile time and at runtime it is optionally used when checking the signature of a transaction. This means that at runtime no performance heavy operations are done. Ergonomics & Compatibility The proposal alters the way a transaction is built, signed, and verified. So, this imposes some required changes to any kind of developer who wants to construct transactions for Polkadot or any chain using this feature. As the developer can pass 0 for disabling the verification of the metadata root hash, it can be easily ignored. -Prior Art and References +Prior Art and References RFC 46 produced by the Alzymologist team is a previous work reference that goes in this direction as well. On other ecosystems, there are other solutions to the problem of trusted signing. Cosmos for example has a standardized way of transforming a transaction into some textual representation and this textual representation is included in the signed data. Basically achieving the same as what the RFC proposes, but it requires that for every transaction applied in a block, every node in the network always has to generate this textual representation to ensure the transaction signature is valid. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material Does it work with all kind of offline wallets? Generic types currently appear multiple times in the metadata with each instantiation. It could be may be useful to have generic type only once in the metadata and declare the generic parameters at their instantiation. @@ -5060,20 +4786,20 @@ nodes: [[[2, 3], [4, 5]], [0, 1]] AuthorsGeorge Pisaltu -Summary +Summary This RFC proposes a change to the extrinsic format to incorporate a new transaction type, the "general" transaction. -Motivation +Motivation "General" transactions, a new type of transaction that this RFC aims to support, are transactions which obey the runtime's extensions and have according extension data yet do not have hard-coded signatures. They are first described in Extrinsic Horizon and supported in 3685. They enable users to authorize origins in new, more flexible ways (e.g. ZK proofs, mutations over pre-authenticated origins). As of now, all transactions are limited to the account signing model for origin authorization and any additional origin changes happen in extrinsic logic, which cannot leverage the validation process of extensions. An example of a use case for such an extension would be sponsoring the transaction fee for some other user. A new extension would be put in place to verify that a part of the initial payload was signed by the author under who the extrinsic should run and change the origin, but the payment for the whole transaction should be handled under a sponsor's account. A POC for this can be found in 3712. The new "general" transaction type would coexist with both current transaction types for a while and, therefore, the current number of supported transaction types, capped at 2, is insufficient. A new extrinsic type must be introduced alongside the current signed and unsigned types. Currently, an encoded extrinsic's first byte indicate the type of extrinsic using the most significant bit - 0 for unsigned, 1 for signed - and the 7 following bits indicate the extrinsic format version, which has been equal to 4 for a long time. By taking one bit from the extrinsic format version encoding, we can support 2 additional extrinsic types while also having a minimal impact on our capability to extend and change the extrinsic format in the future. -Stakeholders +Stakeholders Runtime users Runtime devs Wallet devs -Explanation +Explanation An extrinsic is currently encoded as one byte to identify the extrinsic type and version. This RFC aims to change the interpretation of this byte regarding the reserved bits for the extrinsic type and version. In the following explanation, bits represented using T make up the extrinsic type and bits represented using V make up the extrinsic version. Currently, the bit allocation within the leading encoded byte is 0bTVVV_VVVV. In practice in the Polkadot ecosystem, the leading byte would be 0bT000_0100 as the version has been equal to 4 for a long time. This RFC proposes for the bit allocation to change to 0bTTVV_VVVV. As a result, the extrinsic format version will be bumped to 5 and the extrinsic type bit representation would change as follows: @@ -5084,23 +4810,23 @@ nodes: [[[2, 3], [4, 5]], [0, 1]] 11reserved -Drawbacks +Drawbacks This change would reduce the maximum possible transaction version from the current 127 to 63. In order to bypass the new, lower limit, the extrinsic format would have to change again. -Testing, Security, and Privacy +Testing, Security, and Privacy There is no impact on testing, security or privacy. Performance, Ergonomics, and Compatibility This change would allow Polkadot to support new types of transactions, with the specific "general" transaction type in mind at the time of writing this proposal. -Performance +Performance There is no performance impact. -Ergonomics +Ergonomics The impact to developers and end-users is minimal as it would just be a bitmask update on their part for parsing the extrinsic type along with the version. -Compatibility +Compatibility This change breaks backwards compatiblity because any transaction that is neither signed nor unsigned, but a new transaction type, would be interpreted as having a future extrinsic format version. -Prior Art and References +Prior Art and References The original design was originally proposed in the TransactionExtension PR, which is also the motivation behind this effort. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material Following this change, the "general" transaction type will be introduced as part of the Extrinsic Horizon effort, which will shape future work. (source) Table of Contents @@ -5133,16 +4859,16 @@ nodes: [[[2, 3], [4, 5]], [0, 1]] AuthorsAlex Gheorghe (alexggh) -Summary +Summary Extend the DHT authority discovery records with a signed creation time, so that nodes can determine which record is newer and always decide to prefer the newer records to the old ones. -Motivation +Motivation Currently, we use the Kademlia DHT for storing records regarding the p2p address of an authority discovery key, the problem is that if the nodes decide to change its PeerId/Network key it will publish a new record, however because of the distributed and replicated nature of the DHT there is no way to tell which record is newer so both old PeerId and the new PeerId will live in the network until the old one expires(36h), that creates all sort of problem and leads to the node changing its address not being properly connected for up to 36h. After this RFC, nodes are extended to decide to keep the new record and propagate the new record to nodes that have the old record stored, so in the end all the nodes will converge faster to the new record(in the order of minutes, not 36h) Implementation of the rfc: https://github.com/paritytech/polkadot-sdk/pull/3786. Current issue without this enhacement: https://github.com/paritytech/polkadot-sdk/issues/3673 -Stakeholders +Stakeholders Polkadot node developers. -Explanation +Explanation This RFC heavily relies on the functionalities of the Kademlia DHT already in use by Polkadot. You can find a link to the specification here. In a nutshell, on a specific node the current authority-discovery protocol publishes Kademila DHT records at startup and periodically. The records contain the full address of the node for each authorithy key it owns. The node tries also to find the full address of all authorities in the network by querying the DHT and picking up the first record it finds for each of the authority id it found on chain. @@ -5175,24 +4901,24 @@ You can find a link to the specification Drawbacks +Drawbacks In theory the new protocol creates a bit more traffic on the DHT network, because it waits for DHT records to be received from more than one node, while in the current implementation we just take the first record that we receive and cancel all in-flight requests to other peers. However, because the redundancy factor will be relatively small and this operation happens rarerly, every 10min, this cost is negligible. -Testing, Security, and Privacy +Testing, Security, and Privacy This RFC's implementation https://github.com/paritytech/polkadot-sdk/pull/3786 had been tested on various local test networks and versi. With regard to security the creation time is wrapped inside SignedAuthorityRecord wo it will be signed with the authority id key, so there is no way for other malicious nodes to manipulate this field without the received node observing. Performance, Ergonomics, and Compatibility Irrelevant. -Performance +Performance Irrelevant. -Ergonomics +Ergonomics Irrelevant. -Compatibility +Compatibility The changes are backwards compatible with the existing protocol, so nodes with both the old protocol and newer protocol can exist in the network, this is achieved by the fact that we use protobuf for serializing and deserializing the records, so new fields will be ignore when deserializing with the older protocol and vice-versa when deserializing an old record with the new protocol the new field will be None and the new code accepts this record as being valid. -Prior Art and References +Prior Art and References The enhancements have been inspired by the algorithm specified in here -Unresolved Questions +Unresolved Questions N/A -Future Directions and Related Material +Future Directions and Related Material N/A (source) Table of Contents @@ -5238,23 +4964,23 @@ in order to speed up the time until all nodes have the newest record, nodes can AuthorsJonas Gehrlein & Alistair Stewart -Summary +Summary This RFC proposes a flexible unbonding mechanism for tokens that are locked from staking on the Relay Chain (DOT/KSM), aiming to enhance user convenience without compromising system security. Locking tokens for staking ensures that Polkadot is able to slash tokens backing misbehaving validators. With changing the locking period, we still need to make sure that Polkadot can slash enough tokens to deter misbehaviour. This means that not all tokens can be unbonded immediately, however we can still allow some tokens to be unbonded quickly. The new mechanism leads to a signficantly reduced unbonding time on average, by queuing up new unbonding requests and scaling their unbonding duration relative to the size of the queue. New requests are executed with a minimum of 2 days, when the queue is comparatively empty, to the conventional 28 days, if the sum of requests (in terms of stake) exceed some threshold. In scenarios between these two bounds, the unbonding duration scales proportionately. The new mechanism will never be worse than the current fixed 28 days. In this document we also present an empirical analysis by retrospectively fitting the proposed mechanism to the historic unbonding timeline and show that the average unbonding duration would drastically reduce, while still being sensitive to large unbonding events. Additionally, we discuss implications for UI, UX, and conviction voting. Note: Our proposition solely focuses on the locks imposed from staking. Other locks, such as governance, remain unchanged. Also, this mechanism should not be confused with the already existing feature of FastUnstake, which lets users unstake tokens immediately that have not received rewards for 28 days or longer. As an initial step to gauge its effectiveness and stability, it is recommended to implement and test this model on Kusama before considering its integration into Polkadot, with appropriate adjustments to the parameters. In the following, however, we limit our discussion to Polkadot. -Motivation +Motivation Polkadot has one of the longest unbonding periods among all Proof-of-Stake protocols, because security is the most important goal. Staking on Polkadot is still attractive compared to other protocols because of its above-average staking APY. However the long unbonding period harms usability and deters potential participants that want to contribute to the security of the network. The current length of the unbonding period imposes significant costs for any entity that even wants to perform basic tasks such as a reorganization / consolidation of their stashes, or updating their private key infrastructure. It also limits participation of users that have a large preference for liquidity. The combination of long unbonding periods and high returns has lead to the proliferation of liquid staking, where parachains or centralised exchanges offer users their staked tokens before the 28 days unbonding period is over either in original DOT/KSM form or derivative tokens. Liquid staking is harmless if few tokens are involved but it could result in many validators being selected by a few entities if a large fraction of DOTs were involved. This may lead to centralization (see here for more discussion on threats of liquid staking) and an opportunity for attacks. The new mechanism greatly increases the competitiveness of Polkadot, while maintaining sufficient security. -Stakeholders +Stakeholders Every DOT/KSM token holder -Explanation +Explanation Before diving into the details of how to implement the unbonding queue, we give readers context about why Polkadot has a 28-day unbonding period in the first place. The reason for it is to prevent long-range attacks (LRA) that becomes theoretically possible if more than 1/3 of validators collude. In essence, a LRA describes the inability of users, who disconnect from the consensus at time t0 and reconnects later, to realize that validators which were legitimate at a certain time, say t0 but dropped out in the meantime, are not to be trusted anymore. That means, for example, a user syncing the state could be fooled by trusting validators that fell outside the active set of validators after t0, and are building a competitive and malicious chain (fork). LRAs of longer than 28 days are mitigated by the use of trusted checkpoints, which are assumed to be no more than 28 days old. A new node that syncs Polkadot will start at the checkpoint and look for proofs of finality of later blocks, signed by 2/3 of the validators. In an LRA fork, some of the validator sets may be different but only if 2/3 of some validator set in the last 28 days signed something incorrect. If we detect an LRA of no more than 28 days with the current unbonding period, then we should be able to detect misbehaviour from over 1/3 of validators whose nominators are still bonded. The stake backing these validators is considerable fraction of the total stake (empirically it is 0.287 or so). If we allowed more than this stake to unbond, without checking who it was backing, then the LRA attack might be free of cost for an attacker. The proposed mechansim allows up to half this stake to unbond within 28 days. This halves the amount of tokens that can be slashed, but this is still very high in absolute terms. For example, at the time of writing (19.06.2024) this would translate to around 120 millions DOTs. @@ -5312,23 +5038,23 @@ The analysis can be reproduced or changed to other parameters using Potential Extension In addition to a simple queue, we could add a market component that lets users always unbond from staking at the minimum possible waiting time)(== LOWER_BOUND, e.g., 2 days), by paying a variable fee. To achieve this, it is reasonable to split the total unbonding capacity into two chunks, with the first capacity for the simple queue and the remaining capacity for the fee-based unbonding. By doing so, we allow users to choose whether they want the quickest unbond and paying a dynamic fee or join the simple queue. Setting a capacity restriction for both queues enables us to guarantee a predictable unbonding time in the simple queue, while allowing users with the respective willingness to pay to get out even earlier. The fees are dynamically adjusted and are proportional to the unbonding stake (and thereby expressed in a percentage of the requested unbonding stake). In contrast to a unified queue, this prevents the issue that users paying a fee jump in front of other users not paying a fee, pushing their unbonding time back (which would be bad for UX). The revenue generated could be burned. This extension and further specifications are left out of this RFC, because it adds further complexity and the empirical analysis above suggests that average unbonding times will already be close the LOWER_BOUND, making a more complex design unnecessary. We advise to first implement the discussed mechanism and assess after some experience whether an extension is desirable. -Drawbacks +Drawbacks Lower security for LRAs: Without a doubt, the theoretical security against LRAs decreases. But, as we argue, the attack is still costly enough to deter attacks and the attack is sufficiently theoretical. Here, the benefits outweigh the costs. Griefing attacks: A large holder could pretend to unbond a large amount of their tokens to prevent other users to exit the network earlier. This would, however be costly due to the fact that the holder loses out on staking rewards. The larger the impact on the queue, the higher the costs. In any case it must be noted that the UPPER_BOUND is still 28 days, which means that nominators are never left with a longer unbonding period than currently. There is not enough gain for the attacker to endure this cost. Challenge for Custodians and Liquid Staking Providers: Changing the unbonding time, especially making it flexible, requires entities that offer staking derivatives to rethink and rework their products. -Testing, Security, and Privacy +Testing, Security, and Privacy NA Performance, Ergonomics, and Compatibility NA -Performance +Performance The authors cannot see any potential impact on performance. -Ergonomics +Ergonomics The authors cannot see any potential impact on ergonomics for developers. We discussed potential impact on UX/UI for users above. -Compatibility +Compatibility The authors cannot see any potential impact on compatibility. This should be assessed by the technical fellows. -Prior Art and References +Prior Art and References Ethereum proposed a similar solution Alistair did some initial write-up @@ -5365,20 +5091,20 @@ The analysis can be reproduced or changed to other parameters using Summary +Summary This RFC proposes a change to the extrinsic format to include a transaction extension version. -Motivation +Motivation The extrinsic format supports to be extended with transaction extensions. These transaction extensions are runtime specific and can be different per chain. Each transaction extension can add data to the extrinsic itself or extend the signed payload. This means that adding a transaction extension is breaking the chain specific extrinsic format. A recent example was the introduction of the CheckMetadatHash to Polkadot and all its system chains. As the extension was adding one byte to the extrinsic, it broke a lot of tooling. By introducing an extra version for the transaction extensions it will be possible to introduce changes to these transaction extensions while still being backwards compatible. Based on the version of the transaction extensions, each chain runtime could decode the extrinsic correctly and also create the correct signed payload. -Stakeholders +Stakeholders Runtime users Runtime devs Wallet devs -Explanation +Explanation RFC84 introduced the extrinsic format 5. The idea is to piggyback onto this change of the extrinsic format to add the extra version for the transaction extensions. If required, this could also come as extrinsic format 6, but 5 is not yet deployed anywhere. The extrinsic format supports the following types of transactions: @@ -5394,25 +5120,25 @@ as extrinsic format 6, but 5 is not yet deployed anywh The Version being a SCALE encoded u8 representing the version of the transaction extensions. In the chain runtime the version can be used to determine which set of transaction extensions should be used to decode and to validate the transaction. -Drawbacks +Drawbacks This adds one byte more to each signed transaction. -Testing, Security, and Privacy +Testing, Security, and Privacy There is no impact on testing, security or privacy. Performance, Ergonomics, and Compatibility This will ensure that changes to the transactions extensions can be done in a backwards compatible way. -Performance +Performance There is no performance impact. -Ergonomics +Ergonomics Runtime developers need to take care of the versioning and ensure to bump as required, so that there are no compatibility breaking changes without a bump of the version. It will also add a little bit more code in the runtime to decode these old versions, but this should be neglectable. -Compatibility +Compatibility When introduced together with extrinsic format version 5 from RFC84, it can be implemented in a backwards compatible way. So, transactions can still be send using the old extrinsic format and decoded by the runtime. -Prior Art and References +Prior Art and References None. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material None. (source) Table of Contents @@ -5449,14 +5175,14 @@ old extrinsic format and decoded by the runtime. AuthorsAdrian Catangiu -Summary +Summary This RFC proposes a new instruction that provides a way to initiate on remote chains, asset transfers which transfer multiple types (teleports, local-reserve, destination-reserve) of assets, using XCM alone. The currently existing instructions are too opinionated and force each XCM asset transfer to a single transfer type (teleport, local-reserve, destination-reserve). This results in inability to combine different types of transfers in single transfer which results in overall poor UX when trying to move assets across chains. -Motivation +Motivation XCM is the de-facto cross-chain messaging protocol within the Polkadot ecosystem, and cross-chain assets transfers is one of its main use-cases. Unfortunately, in its current spec, it does not support initiating on a remote chain, one or more transfers that combine assets with different transfer types. @@ -5478,14 +5204,14 @@ For example, allows single XCM program execution to transfer multiple assets fro Kusama Asset Hub, over the bridge through Polkadot Asset Hub with final destination ParaP on Polkadot. With current XCM, we are limited to doing multiple independent transfers for each individual hop in order to move both "interesting" assets, but also "supporting" assets (used to pay fees). -Stakeholders +Stakeholders Runtime users Runtime devs Wallet devs dApps devs -Explanation +Explanation A new instruction InitiateAssetsTransfer is introduced that initiates an assets transfer from the chain it is executed on, to another chain. The executed transfer is point-to-point (chain-to-chain) with all of the transfer properties specified in the instruction parameters. The instruction also @@ -5673,9 +5399,9 @@ by executing a single XCM message, even though we'll be mixing multiple ).unwrap(); }) } -Drawbacks +Drawbacks No drawbacks identified. -Testing, Security, and Privacy +Testing, Security, and Privacy There should be no security risks related to the new instruction from the XCVM perspective. It follows the same pattern as with single-type asset transfers, only now it allows combining multiple types at once. Improves security by enabling @@ -5688,12 +5414,12 @@ immediately followed by a BuyExecution using said asset. This brings no impact to the rest of the XCM spec. It is a new, independent instruction, no changes to existing instructions. Enhances the exposed functionality of Polkadot. Will allow multi-chain transfers that are currently forced to happen in multiple programs per asset per "hop", to be possible in a single XCM program. -Performance +Performance No performance changes/implications. -Ergonomics +Ergonomics The proposal enhances developers' and users' cross-chain asset transfer capabilities. This enhancement is optimized for XCM programs transferring multiple assets, needing to run their logic across multiple chains. -Compatibility +Compatibility Does this proposal break compatibility with existing interfaces, older versions of implementations? Summarize necessary migrations or upgrade strategies, if any. This enhancement is compatible with all existing XCM programs and versions. @@ -5702,11 +5428,11 @@ success. A program where the new instruction is used to initiate multiple types of asset transfers, cannot be downgraded to older XCM versions, because there is no equivalent capability there. Such conversion attempts will explicitly fail. -Prior Art and References +Prior Art and References None. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material None. (source) Table of Contents @@ -5739,10 +5465,10 @@ Such conversion attempts will explicitly fail. AuthorsAdrian Catangiu -Summary +Summary The Transact XCM instruction currently forces the user to set a specific maximum weight allowed to the inner call and then also pay for that much weight regardless of how much the call actually needs in practice. This RFC proposes improving the usability of Transact by removing that parameter and instead get and charge the actual weight of the inner call from its dispatch info on the remote chain. -Motivation +Motivation The UX of using Transact is poor because of having to guess/estimate the require_weight_at_most weight used by the inner call on the target. We've seen multiple Transact on-chain failures caused by guessing wrong values for this require_weight_at_most even though the rest of the XCM program would have worked. In practice, this parameter only adds UX overhead with no real practical value. Use cases fall in one of two categories: @@ -5755,22 +5481,22 @@ weight limit parameter. We've had multiple OpenGov root/whitelisted_caller proposals initiated by core-devs completely or partially fail because of incorrect configuration of require_weight_at_most parameter. This is a strong indication that the instruction is hard to use. -Stakeholders +Stakeholders
#![allow(unused)] fn main() { @@ -4287,31 +4013,31 @@ actual exported function signature looks like: already gets the proof passed as Vec<u8>. This proof needs to be decoded to the actual Proof type as explained above. The proof and the SCALE encoded account_id of the sender are used to verify the ownership of the SessionKeys. -Drawbacks +Drawbacks Validator operators need to pass the their account id when rotating their session keys in a node. This will require updating some high level docs and making users familiar with the slightly changed ergonomics. -Testing, Security, and Privacy +Testing, Security, and Privacy Testing of the new changes only requires passing an appropriate owner for the current testing context. The changes to the proof generation and verification got audited to ensure they are correct. Performance, Ergonomics, and Compatibility -Performance +Performance The session key generation is an offchain process and thus, doesn't influence the performance of the chain. Verifying the proof is done on chain as part of the transaction logic for setting the session keys. The verification of the proof is a signature verification number of individual session keys times. As setting the session keys is happening quite rarely, it should not influence the overall system performance. -Ergonomics +Ergonomics The interfaces have been optimized to make it as easy as possible to generate the ownership proof. -Compatibility +Compatibility Introduces a new version of the SessionKeys runtime api. Thus, nodes should be updated before a runtime is enacted that contains these changes otherwise they will fail to generate session keys. The RPC that exists around this runtime api needs to be updated to support passing the account id and for returning the ownership proof alongside the public session keys. UIs would need to be updated to support the new RPC and the changed on chain logic. -Prior Art and References +Prior Art and References None. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material Substrate implementation of the RFC. (source) Table of Contents @@ -4349,10 +4075,10 @@ and for returning the ownership proof alongside the public session keys. AuthorsJoe Petrowski, Gavin Wood -Summary +Summary The Fellowship Manifesto states that members should receive a monthly allowance on par with gross income in OECD countries. This RFC proposes concrete amounts. -Motivation +Motivation One motivation for the Technical Fellowship is to provide an incentive mechanism that can induct and retain technical talent for the continued progress of the network. In order for members to uphold their commitment to the network, they should receive support to @@ -4362,12 +4088,12 @@ on par with a full-time job. Providing a livable wage to those making such contr pragmatic to work full-time on Polkadot. Note: Goals of the Fellowship, expectations for each Dan, and conditions for promotion and demotion are all explained in the Manifesto. This RFC is only to propose concrete values for allowances. -Stakeholders +Stakeholders Fellowship members Polkadot Treasury -Explanation +Explanation This RFC proposes agreeing on salaries relative to a single level, the III Dan. As such, changes to the amount or asset used would only be on a single value, and all others would adjust relatively. A III Dan is someone whose contributions match the expectations of a full-time individual contributor. @@ -4427,19 +4153,19 @@ other hand, more people will likely join the Fellowship in the coming years. Updates Updates to these levels, whether relative ratios, the asset used, or the amount, shall be done via RFC. -Drawbacks +Drawbacks By not using DOT for payment, the protocol relies on the stability of other assets and the ability to acquire them. However, the asset of choice can be changed in the future. -Testing, Security, and Privacy +Testing, Security, and Privacy N/A. Performance, Ergonomics, and Compatibility -Performance +Performance N/A -Ergonomics +Ergonomics N/A -Compatibility +Compatibility N/A -Prior Art and References +Prior Art and References The Polkadot Fellowship Manifesto @@ -4447,7 +4173,7 @@ Manifesto Indeed: Average Salary for Engineers, United States -Unresolved Questions +Unresolved Questions None at present. (source) Table of Contents @@ -4480,11 +4206,11 @@ States AuthorsPierre Krieger -Summary +Summary When two peers connect to each other, they open (amongst other things) a so-called "notifications protocol" substream dedicated to gossiping transactions to each other. Each notification on this substream currently consists in a SCALE-encoded Vec<Transaction> where Transaction is defined in the runtime. This RFC proposes to modify the format of the notification to become (Compact(1), Transaction). This maintains backwards compatibility, as this new format decodes as a Vec of length equal to 1. -Motivation +Motivation There exists three motivations behind this change: @@ -4497,9 +4223,9 @@ States It makes the implementation way more straight-forward by not having to repeat code related to back-pressure. See explanations below. -Stakeholders +Stakeholders Low-level developers. -Explanation +Explanation To give an example, if you send one notification with three transactions, the bytes that are sent on the wire are: concat( leb128(total-size-in-bytes-of-the-rest), @@ -4519,23 +4245,23 @@ A SCALE-compact encoded 1 is one byte of value 4. In o This is equivalent to forcing the Vec<Transaction> to always have a length of 1, and I expect the Substrate implementation to simply modify the sending side to add a for loop that sends one notification per item in the Vec. As explained in the motivation section, this allows extracting scale(transaction) items without having to know how to decode them. By "flattening" the two-steps hierarchy, an implementation only needs to back-pressure individual notifications rather than back-pressure notifications and transactions within notifications. -Drawbacks +Drawbacks This RFC chooses to maintain backwards compatibility at the cost of introducing a very small wart (the Compact(1)). An alternative could be to introduce a new version of the transactions notifications protocol that sends one Transaction per notification, but this is significantly more complicated to implement and can always be done later in case the Compact(1) is bothersome. -Testing, Security, and Privacy +Testing, Security, and Privacy Irrelevant. Performance, Ergonomics, and Compatibility -Performance +Performance Irrelevant. -Ergonomics +Ergonomics Irrelevant. -Compatibility +Compatibility The change is backwards compatible if done in two steps: modify the sender to always send one transaction per notification, then, after a while, modify the receiver to enforce the new format. -Prior Art and References +Prior Art and References Irrelevant. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material None. This is a simple isolated change. (source) Table of Contents @@ -4575,20 +4301,20 @@ This is equivalent to forcing the Vec<Transaction> to always AuthorsPierre Krieger -Summary +Summary 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. -Motivation +Motivation The Polkadot peer-to-peer network is made of nodes. Not all these nodes are equal. Some nodes store only the headers of recent 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. -Stakeholders +Stakeholders Low-level client developers. People interested in accessing the archive of the chain. -Explanation +Explanation 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. Capabilities @@ -4624,9 +4350,9 @@ If blocks pruning is enabled and the chain is a relay chain, then Substrate unfo Implementations that have the head of the chain provider capability do not register themselves as providers, but instead are the nodes that participate in the main DHT. In other words, they are the nodes that serve requests of the /<genesis_hash>/kad protocol. Any implementation that isn't a head of the chain provider (read: light clients) must not participate in the main DHT. This is already presently the case. Implementations must not participate in the main DHT if they don't fulfill the capability yet. For example, a node that is still in the process of warp syncing must not participate in the main DHT. However, assuming that warp syncing doesn't last more than a few seconds, it is acceptable to ignore this requirement in order to avoid complicating implementations too much. -Drawbacks +Drawbacks None that I can see. -Testing, Security, and Privacy +Testing, Security, and Privacy 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. @@ -4634,20 +4360,20 @@ Furthermore, when a large number of providers are registered, only the providers 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. Performance, Ergonomics, and Compatibility -Performance +Performance 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. -Ergonomics +Ergonomics Irrelevant. -Compatibility +Compatibility Irrelevant. -Prior Art and References +Prior Art and References Unknown. -Unresolved Questions +Unresolved Questions 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? -Future Directions and Related Material +Future Directions and Related Material 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. @@ -4696,12 +4422,12 @@ We could even add to the peer-to-peer network nodes that are only capable of ser AuthorsZondax AG, Parity Technologies -Summary +Summary To interact with chains in the Polkadot ecosystem it is required to know how transactions are encoded and how to read state. For doing this, Polkadot-SDK, the framework used by most of the chains in the Polkadot ecosystem, exposes metadata about the runtime to the outside. UIs, wallets, and others can use this metadata to interact with these chains. This makes the metadata a crucial piece of the transaction encoding as users are relying on the interacting software to encode the transactions in the correct format. It gets even more important when the user signs the transaction in an offline wallet, as the device by its nature cannot get access to the metadata without relying on the online wallet to provide it. This makes it so that the offline wallet needs to trust an online party, deeming the security assumptions of the offline devices, mute. This RFC proposes a way for offline wallets to leverage metadata, within the constraints of these. The design idea is that the metadata is chunked and these chunks are put into a merkle tree. The root hash of this merkle tree represents the metadata. The offline wallets can use the root hash to decode transactions by getting proofs for the individual chunks of the metadata. This root hash is also included in the signed data of the transaction (but not sent as part of the transaction). The runtime is then including its known metadata root hash when verifying the transaction. If the metadata root hash known by the runtime differs from the one that the offline wallet used, it very likely means that the online wallet provided some fake data and the verification of the transaction fails. Users depend on offline wallets to correctly display decoded transactions before signing. With merkleized metadata, they can be assured of the transaction's legitimacy, as incorrect transactions will be rejected by the runtime. -Motivation +Motivation Polkadot's innovative design (both relay chain and parachains) present the ability to developers to upgrade their network as frequently as they need. These systems manage to have integrations working after the upgrades with the help of FRAME Metadata. This Metadata, which is in the order of half a MiB for most Polkadot-SDK chains, completely describes chain interfaces and properties. Securing this metadata is key for users to be able to interact with the Polkadot-SDK chain in the expected way. On the other hand, offline wallets provide a secure way for Blockchain users to hold their own keys (some do a better job than others). These devices seldomly get upgraded, usually account for one particular network and hold very small internal memories. Currently in the Polkadot ecosystem there is no secure way of having these offline devices know the latest Metadata of the Polkadot-SDK chain they are interacting with. This results in a plethora of similar yet slightly different offline wallets for all different Polkadot-SDK chains, as well as the impediment of keeping these regularly updated, thus not fully leveraging Polkadot-SDK’s unique forkless upgrade feature. The two main reasons why this is not possible today are: @@ -4728,14 +4454,14 @@ We could even add to the peer-to-peer network nodes that are only capable of ser Chunks handling mechanism SHOULD support chunks being sent in any order without memory utilization overhead; Unused enum variants MUST be stripped (this has great impact on transmitted metadata size; examples: era enum, enum with all calls for call batching). -Stakeholders +Stakeholders Runtime implementors UI/wallet implementors Offline wallet implementors The idea for this RFC was brought up by runtime implementors and was extensively discussed with offline wallet implementors. It was designed in such a way that it can work easily with the existing offline wallet solutions in the Polkadot ecosystem. -Explanation +Explanation The FRAME metadata provides a wide range of information about a FRAME based runtime. It contains information about the pallets, the calls per pallet, the storage entries per pallet, runtime APIs, and type information about most of the types that are used in the runtime. For decoding extrinsics on an offline wallet, what is mainly required is type information. Most of the other information in the FRAME metadata is actually not required for decoding extrinsics and thus it can be removed. Therefore, the following is a proposal on a custom representation of the metadata and how this custom metadata is chunked, ensuring that only the needed chunks required for decoding a particular extrinsic are sent to the offline wallet. The necessary information to transform the FRAME metadata type information into the type information presented in this RFC will be provided. However, not every single detail on how to convert from FRAME metadata into the RFC type information is described. First, the MetadataDigest is introduced. After that, ExtrinsicMetadata is covered and finally the actual format of the type information. Then pruning of unrelated type information is covered and how to generate the TypeRefs. In the latest step, merkle tree calculation is explained. Metadata digest @@ -5006,23 +4732,23 @@ nodes: [[[2, 3], [4, 5]], [0, 1]] Included in the extrinsic is u8, the "mode". The mode is either 0 which means to not include the metadata hash in the signed data or the mode is 1 to include the metadata hash in V1. Included in the signed data is an Option<[u8; 32]>. Depending on the mode the value is either None or Some(metadata_hash). -Drawbacks +Drawbacks The chunking may not be the optimal case for every kind of offline wallet. -Testing, Security, and Privacy +Testing, Security, and Privacy All implementations are required to strictly follow the RFC to generate the metadata hash. This includes which hash function to use and how to construct the metadata types tree. So, all implementations are following the same security criteria. As the chains will calculate the metadata hash at compile time, the build process needs to be trusted. However, this is already a solved problem in the Polkadot ecosystem by using reproducible builds. So, anyone can rebuild a chain runtime to ensure that a proposal is actually containing the changes as advertised. Implementations can also be tested easily against each other by taking some metadata and ensuring that they all come to the same metadata hash. Privacy of users should also not be impacted. This assumes that wallets will generate the metadata hash locally and don't leak any information to third party services about which chunks a user will send to their offline wallet. Besides that, there is no leak of private information as getting the raw metadata from the chain is an operation that is done by almost everyone. Performance, Ergonomics, and Compatibility -Performance +Performance There should be no measurable impact on performance to Polkadot or any other chain using this feature. The metadata root hash is calculated at compile time and at runtime it is optionally used when checking the signature of a transaction. This means that at runtime no performance heavy operations are done. Ergonomics & Compatibility The proposal alters the way a transaction is built, signed, and verified. So, this imposes some required changes to any kind of developer who wants to construct transactions for Polkadot or any chain using this feature. As the developer can pass 0 for disabling the verification of the metadata root hash, it can be easily ignored. -Prior Art and References +Prior Art and References RFC 46 produced by the Alzymologist team is a previous work reference that goes in this direction as well. On other ecosystems, there are other solutions to the problem of trusted signing. Cosmos for example has a standardized way of transforming a transaction into some textual representation and this textual representation is included in the signed data. Basically achieving the same as what the RFC proposes, but it requires that for every transaction applied in a block, every node in the network always has to generate this textual representation to ensure the transaction signature is valid. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material Does it work with all kind of offline wallets? Generic types currently appear multiple times in the metadata with each instantiation. It could be may be useful to have generic type only once in the metadata and declare the generic parameters at their instantiation. @@ -5060,20 +4786,20 @@ nodes: [[[2, 3], [4, 5]], [0, 1]] AuthorsGeorge Pisaltu -Summary +Summary This RFC proposes a change to the extrinsic format to incorporate a new transaction type, the "general" transaction. -Motivation +Motivation "General" transactions, a new type of transaction that this RFC aims to support, are transactions which obey the runtime's extensions and have according extension data yet do not have hard-coded signatures. They are first described in Extrinsic Horizon and supported in 3685. They enable users to authorize origins in new, more flexible ways (e.g. ZK proofs, mutations over pre-authenticated origins). As of now, all transactions are limited to the account signing model for origin authorization and any additional origin changes happen in extrinsic logic, which cannot leverage the validation process of extensions. An example of a use case for such an extension would be sponsoring the transaction fee for some other user. A new extension would be put in place to verify that a part of the initial payload was signed by the author under who the extrinsic should run and change the origin, but the payment for the whole transaction should be handled under a sponsor's account. A POC for this can be found in 3712. The new "general" transaction type would coexist with both current transaction types for a while and, therefore, the current number of supported transaction types, capped at 2, is insufficient. A new extrinsic type must be introduced alongside the current signed and unsigned types. Currently, an encoded extrinsic's first byte indicate the type of extrinsic using the most significant bit - 0 for unsigned, 1 for signed - and the 7 following bits indicate the extrinsic format version, which has been equal to 4 for a long time. By taking one bit from the extrinsic format version encoding, we can support 2 additional extrinsic types while also having a minimal impact on our capability to extend and change the extrinsic format in the future. -Stakeholders +Stakeholders Runtime users Runtime devs Wallet devs -Explanation +Explanation An extrinsic is currently encoded as one byte to identify the extrinsic type and version. This RFC aims to change the interpretation of this byte regarding the reserved bits for the extrinsic type and version. In the following explanation, bits represented using T make up the extrinsic type and bits represented using V make up the extrinsic version. Currently, the bit allocation within the leading encoded byte is 0bTVVV_VVVV. In practice in the Polkadot ecosystem, the leading byte would be 0bT000_0100 as the version has been equal to 4 for a long time. This RFC proposes for the bit allocation to change to 0bTTVV_VVVV. As a result, the extrinsic format version will be bumped to 5 and the extrinsic type bit representation would change as follows: @@ -5084,23 +4810,23 @@ nodes: [[[2, 3], [4, 5]], [0, 1]] 11reserved -Drawbacks +Drawbacks This change would reduce the maximum possible transaction version from the current 127 to 63. In order to bypass the new, lower limit, the extrinsic format would have to change again. -Testing, Security, and Privacy +Testing, Security, and Privacy There is no impact on testing, security or privacy. Performance, Ergonomics, and Compatibility This change would allow Polkadot to support new types of transactions, with the specific "general" transaction type in mind at the time of writing this proposal. -Performance +Performance There is no performance impact. -Ergonomics +Ergonomics The impact to developers and end-users is minimal as it would just be a bitmask update on their part for parsing the extrinsic type along with the version. -Compatibility +Compatibility This change breaks backwards compatiblity because any transaction that is neither signed nor unsigned, but a new transaction type, would be interpreted as having a future extrinsic format version. -Prior Art and References +Prior Art and References The original design was originally proposed in the TransactionExtension PR, which is also the motivation behind this effort. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material Following this change, the "general" transaction type will be introduced as part of the Extrinsic Horizon effort, which will shape future work. (source) Table of Contents @@ -5133,16 +4859,16 @@ nodes: [[[2, 3], [4, 5]], [0, 1]] AuthorsAlex Gheorghe (alexggh) -Summary +Summary Extend the DHT authority discovery records with a signed creation time, so that nodes can determine which record is newer and always decide to prefer the newer records to the old ones. -Motivation +Motivation Currently, we use the Kademlia DHT for storing records regarding the p2p address of an authority discovery key, the problem is that if the nodes decide to change its PeerId/Network key it will publish a new record, however because of the distributed and replicated nature of the DHT there is no way to tell which record is newer so both old PeerId and the new PeerId will live in the network until the old one expires(36h), that creates all sort of problem and leads to the node changing its address not being properly connected for up to 36h. After this RFC, nodes are extended to decide to keep the new record and propagate the new record to nodes that have the old record stored, so in the end all the nodes will converge faster to the new record(in the order of minutes, not 36h) Implementation of the rfc: https://github.com/paritytech/polkadot-sdk/pull/3786. Current issue without this enhacement: https://github.com/paritytech/polkadot-sdk/issues/3673 -Stakeholders +Stakeholders Polkadot node developers. -Explanation +Explanation This RFC heavily relies on the functionalities of the Kademlia DHT already in use by Polkadot. You can find a link to the specification here. In a nutshell, on a specific node the current authority-discovery protocol publishes Kademila DHT records at startup and periodically. The records contain the full address of the node for each authorithy key it owns. The node tries also to find the full address of all authorities in the network by querying the DHT and picking up the first record it finds for each of the authority id it found on chain. @@ -5175,24 +4901,24 @@ You can find a link to the specification Drawbacks +Drawbacks In theory the new protocol creates a bit more traffic on the DHT network, because it waits for DHT records to be received from more than one node, while in the current implementation we just take the first record that we receive and cancel all in-flight requests to other peers. However, because the redundancy factor will be relatively small and this operation happens rarerly, every 10min, this cost is negligible. -Testing, Security, and Privacy +Testing, Security, and Privacy This RFC's implementation https://github.com/paritytech/polkadot-sdk/pull/3786 had been tested on various local test networks and versi. With regard to security the creation time is wrapped inside SignedAuthorityRecord wo it will be signed with the authority id key, so there is no way for other malicious nodes to manipulate this field without the received node observing. Performance, Ergonomics, and Compatibility Irrelevant. -Performance +Performance Irrelevant. -Ergonomics +Ergonomics Irrelevant. -Compatibility +Compatibility The changes are backwards compatible with the existing protocol, so nodes with both the old protocol and newer protocol can exist in the network, this is achieved by the fact that we use protobuf for serializing and deserializing the records, so new fields will be ignore when deserializing with the older protocol and vice-versa when deserializing an old record with the new protocol the new field will be None and the new code accepts this record as being valid. -Prior Art and References +Prior Art and References The enhancements have been inspired by the algorithm specified in here -Unresolved Questions +Unresolved Questions N/A -Future Directions and Related Material +Future Directions and Related Material N/A (source) Table of Contents @@ -5238,23 +4964,23 @@ in order to speed up the time until all nodes have the newest record, nodes can AuthorsJonas Gehrlein & Alistair Stewart -Summary +Summary This RFC proposes a flexible unbonding mechanism for tokens that are locked from staking on the Relay Chain (DOT/KSM), aiming to enhance user convenience without compromising system security. Locking tokens for staking ensures that Polkadot is able to slash tokens backing misbehaving validators. With changing the locking period, we still need to make sure that Polkadot can slash enough tokens to deter misbehaviour. This means that not all tokens can be unbonded immediately, however we can still allow some tokens to be unbonded quickly. The new mechanism leads to a signficantly reduced unbonding time on average, by queuing up new unbonding requests and scaling their unbonding duration relative to the size of the queue. New requests are executed with a minimum of 2 days, when the queue is comparatively empty, to the conventional 28 days, if the sum of requests (in terms of stake) exceed some threshold. In scenarios between these two bounds, the unbonding duration scales proportionately. The new mechanism will never be worse than the current fixed 28 days. In this document we also present an empirical analysis by retrospectively fitting the proposed mechanism to the historic unbonding timeline and show that the average unbonding duration would drastically reduce, while still being sensitive to large unbonding events. Additionally, we discuss implications for UI, UX, and conviction voting. Note: Our proposition solely focuses on the locks imposed from staking. Other locks, such as governance, remain unchanged. Also, this mechanism should not be confused with the already existing feature of FastUnstake, which lets users unstake tokens immediately that have not received rewards for 28 days or longer. As an initial step to gauge its effectiveness and stability, it is recommended to implement and test this model on Kusama before considering its integration into Polkadot, with appropriate adjustments to the parameters. In the following, however, we limit our discussion to Polkadot. -Motivation +Motivation Polkadot has one of the longest unbonding periods among all Proof-of-Stake protocols, because security is the most important goal. Staking on Polkadot is still attractive compared to other protocols because of its above-average staking APY. However the long unbonding period harms usability and deters potential participants that want to contribute to the security of the network. The current length of the unbonding period imposes significant costs for any entity that even wants to perform basic tasks such as a reorganization / consolidation of their stashes, or updating their private key infrastructure. It also limits participation of users that have a large preference for liquidity. The combination of long unbonding periods and high returns has lead to the proliferation of liquid staking, where parachains or centralised exchanges offer users their staked tokens before the 28 days unbonding period is over either in original DOT/KSM form or derivative tokens. Liquid staking is harmless if few tokens are involved but it could result in many validators being selected by a few entities if a large fraction of DOTs were involved. This may lead to centralization (see here for more discussion on threats of liquid staking) and an opportunity for attacks. The new mechanism greatly increases the competitiveness of Polkadot, while maintaining sufficient security. -Stakeholders +Stakeholders Every DOT/KSM token holder -Explanation +Explanation Before diving into the details of how to implement the unbonding queue, we give readers context about why Polkadot has a 28-day unbonding period in the first place. The reason for it is to prevent long-range attacks (LRA) that becomes theoretically possible if more than 1/3 of validators collude. In essence, a LRA describes the inability of users, who disconnect from the consensus at time t0 and reconnects later, to realize that validators which were legitimate at a certain time, say t0 but dropped out in the meantime, are not to be trusted anymore. That means, for example, a user syncing the state could be fooled by trusting validators that fell outside the active set of validators after t0, and are building a competitive and malicious chain (fork). LRAs of longer than 28 days are mitigated by the use of trusted checkpoints, which are assumed to be no more than 28 days old. A new node that syncs Polkadot will start at the checkpoint and look for proofs of finality of later blocks, signed by 2/3 of the validators. In an LRA fork, some of the validator sets may be different but only if 2/3 of some validator set in the last 28 days signed something incorrect. If we detect an LRA of no more than 28 days with the current unbonding period, then we should be able to detect misbehaviour from over 1/3 of validators whose nominators are still bonded. The stake backing these validators is considerable fraction of the total stake (empirically it is 0.287 or so). If we allowed more than this stake to unbond, without checking who it was backing, then the LRA attack might be free of cost for an attacker. The proposed mechansim allows up to half this stake to unbond within 28 days. This halves the amount of tokens that can be slashed, but this is still very high in absolute terms. For example, at the time of writing (19.06.2024) this would translate to around 120 millions DOTs. @@ -5312,23 +5038,23 @@ The analysis can be reproduced or changed to other parameters using Potential Extension In addition to a simple queue, we could add a market component that lets users always unbond from staking at the minimum possible waiting time)(== LOWER_BOUND, e.g., 2 days), by paying a variable fee. To achieve this, it is reasonable to split the total unbonding capacity into two chunks, with the first capacity for the simple queue and the remaining capacity for the fee-based unbonding. By doing so, we allow users to choose whether they want the quickest unbond and paying a dynamic fee or join the simple queue. Setting a capacity restriction for both queues enables us to guarantee a predictable unbonding time in the simple queue, while allowing users with the respective willingness to pay to get out even earlier. The fees are dynamically adjusted and are proportional to the unbonding stake (and thereby expressed in a percentage of the requested unbonding stake). In contrast to a unified queue, this prevents the issue that users paying a fee jump in front of other users not paying a fee, pushing their unbonding time back (which would be bad for UX). The revenue generated could be burned. This extension and further specifications are left out of this RFC, because it adds further complexity and the empirical analysis above suggests that average unbonding times will already be close the LOWER_BOUND, making a more complex design unnecessary. We advise to first implement the discussed mechanism and assess after some experience whether an extension is desirable. -Drawbacks +Drawbacks Lower security for LRAs: Without a doubt, the theoretical security against LRAs decreases. But, as we argue, the attack is still costly enough to deter attacks and the attack is sufficiently theoretical. Here, the benefits outweigh the costs. Griefing attacks: A large holder could pretend to unbond a large amount of their tokens to prevent other users to exit the network earlier. This would, however be costly due to the fact that the holder loses out on staking rewards. The larger the impact on the queue, the higher the costs. In any case it must be noted that the UPPER_BOUND is still 28 days, which means that nominators are never left with a longer unbonding period than currently. There is not enough gain for the attacker to endure this cost. Challenge for Custodians and Liquid Staking Providers: Changing the unbonding time, especially making it flexible, requires entities that offer staking derivatives to rethink and rework their products. -Testing, Security, and Privacy +Testing, Security, and Privacy NA Performance, Ergonomics, and Compatibility NA -Performance +Performance The authors cannot see any potential impact on performance. -Ergonomics +Ergonomics The authors cannot see any potential impact on ergonomics for developers. We discussed potential impact on UX/UI for users above. -Compatibility +Compatibility The authors cannot see any potential impact on compatibility. This should be assessed by the technical fellows. -Prior Art and References +Prior Art and References Ethereum proposed a similar solution Alistair did some initial write-up @@ -5365,20 +5091,20 @@ The analysis can be reproduced or changed to other parameters using Summary +Summary This RFC proposes a change to the extrinsic format to include a transaction extension version. -Motivation +Motivation The extrinsic format supports to be extended with transaction extensions. These transaction extensions are runtime specific and can be different per chain. Each transaction extension can add data to the extrinsic itself or extend the signed payload. This means that adding a transaction extension is breaking the chain specific extrinsic format. A recent example was the introduction of the CheckMetadatHash to Polkadot and all its system chains. As the extension was adding one byte to the extrinsic, it broke a lot of tooling. By introducing an extra version for the transaction extensions it will be possible to introduce changes to these transaction extensions while still being backwards compatible. Based on the version of the transaction extensions, each chain runtime could decode the extrinsic correctly and also create the correct signed payload. -Stakeholders +Stakeholders Runtime users Runtime devs Wallet devs -Explanation +Explanation RFC84 introduced the extrinsic format 5. The idea is to piggyback onto this change of the extrinsic format to add the extra version for the transaction extensions. If required, this could also come as extrinsic format 6, but 5 is not yet deployed anywhere. The extrinsic format supports the following types of transactions: @@ -5394,25 +5120,25 @@ as extrinsic format 6, but 5 is not yet deployed anywh The Version being a SCALE encoded u8 representing the version of the transaction extensions. In the chain runtime the version can be used to determine which set of transaction extensions should be used to decode and to validate the transaction. -Drawbacks +Drawbacks This adds one byte more to each signed transaction. -Testing, Security, and Privacy +Testing, Security, and Privacy There is no impact on testing, security or privacy. Performance, Ergonomics, and Compatibility This will ensure that changes to the transactions extensions can be done in a backwards compatible way. -Performance +Performance There is no performance impact. -Ergonomics +Ergonomics Runtime developers need to take care of the versioning and ensure to bump as required, so that there are no compatibility breaking changes without a bump of the version. It will also add a little bit more code in the runtime to decode these old versions, but this should be neglectable. -Compatibility +Compatibility When introduced together with extrinsic format version 5 from RFC84, it can be implemented in a backwards compatible way. So, transactions can still be send using the old extrinsic format and decoded by the runtime. -Prior Art and References +Prior Art and References None. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material None. (source) Table of Contents @@ -5449,14 +5175,14 @@ old extrinsic format and decoded by the runtime. AuthorsAdrian Catangiu -Summary +Summary This RFC proposes a new instruction that provides a way to initiate on remote chains, asset transfers which transfer multiple types (teleports, local-reserve, destination-reserve) of assets, using XCM alone. The currently existing instructions are too opinionated and force each XCM asset transfer to a single transfer type (teleport, local-reserve, destination-reserve). This results in inability to combine different types of transfers in single transfer which results in overall poor UX when trying to move assets across chains. -Motivation +Motivation XCM is the de-facto cross-chain messaging protocol within the Polkadot ecosystem, and cross-chain assets transfers is one of its main use-cases. Unfortunately, in its current spec, it does not support initiating on a remote chain, one or more transfers that combine assets with different transfer types. @@ -5478,14 +5204,14 @@ For example, allows single XCM program execution to transfer multiple assets fro Kusama Asset Hub, over the bridge through Polkadot Asset Hub with final destination ParaP on Polkadot. With current XCM, we are limited to doing multiple independent transfers for each individual hop in order to move both "interesting" assets, but also "supporting" assets (used to pay fees). -Stakeholders +Stakeholders Runtime users Runtime devs Wallet devs dApps devs -Explanation +Explanation A new instruction InitiateAssetsTransfer is introduced that initiates an assets transfer from the chain it is executed on, to another chain. The executed transfer is point-to-point (chain-to-chain) with all of the transfer properties specified in the instruction parameters. The instruction also @@ -5673,9 +5399,9 @@ by executing a single XCM message, even though we'll be mixing multiple ).unwrap(); }) }
Proof
account_id
SessionKeys
Validator operators need to pass the their account id when rotating their session keys in a node. This will require updating some high level docs and making users familiar with the slightly changed ergonomics.
Testing of the new changes only requires passing an appropriate owner for the current testing context. The changes to the proof generation and verification got audited to ensure they are correct.
owner
The session key generation is an offchain process and thus, doesn't influence the performance of the chain. Verifying the proof is done on chain as part of the transaction logic for setting the session keys. The verification of the proof is a signature verification number of individual session keys times. As setting the session keys is happening quite rarely, it should not influence the overall system performance.
The interfaces have been optimized to make it as easy as possible to generate the ownership proof.
Introduces a new version of the SessionKeys runtime api. Thus, nodes should be updated before a runtime is enacted that contains these changes otherwise they will fail to generate session keys. The RPC that exists around this runtime api needs to be updated to support passing the account id and for returning the ownership proof alongside the public session keys.
UIs would need to be updated to support the new RPC and the changed on chain logic.
Substrate implementation of the RFC.
The Fellowship Manifesto states that members should receive a monthly allowance on par with gross income in OECD countries. This RFC proposes concrete amounts.
One motivation for the Technical Fellowship is to provide an incentive mechanism that can induct and retain technical talent for the continued progress of the network.
In order for members to uphold their commitment to the network, they should receive support to @@ -4362,12 +4088,12 @@ on par with a full-time job. Providing a livable wage to those making such contr pragmatic to work full-time on Polkadot.
Note: Goals of the Fellowship, expectations for each Dan, and conditions for promotion and demotion are all explained in the Manifesto. This RFC is only to propose concrete values for allowances.
This RFC proposes agreeing on salaries relative to a single level, the III Dan. As such, changes to the amount or asset used would only be on a single value, and all others would adjust relatively. A III Dan is someone whose contributions match the expectations of a full-time individual contributor. @@ -4427,19 +4153,19 @@ other hand, more people will likely join the Fellowship in the coming years.
Updates to these levels, whether relative ratios, the asset used, or the amount, shall be done via RFC.
By not using DOT for payment, the protocol relies on the stability of other assets and the ability to acquire them. However, the asset of choice can be changed in the future.
N/A.
When two peers connect to each other, they open (amongst other things) a so-called "notifications protocol" substream dedicated to gossiping transactions to each other.
Each notification on this substream currently consists in a SCALE-encoded Vec<Transaction> where Transaction is defined in the runtime.
Vec<Transaction>
Transaction
This RFC proposes to modify the format of the notification to become (Compact(1), Transaction). This maintains backwards compatibility, as this new format decodes as a Vec of length equal to 1.
(Compact(1), Transaction)
Vec
There exists three motivations behind this change:
It makes the implementation way more straight-forward by not having to repeat code related to back-pressure. See explanations below.
Low-level developers.
To give an example, if you send one notification with three transactions, the bytes that are sent on the wire are:
concat( leb128(total-size-in-bytes-of-the-rest), @@ -4519,23 +4245,23 @@ A SCALE-compact encoded 1 is one byte of value 4. In o This is equivalent to forcing the Vec<Transaction> to always have a length of 1, and I expect the Substrate implementation to simply modify the sending side to add a for loop that sends one notification per item in the Vec. As explained in the motivation section, this allows extracting scale(transaction) items without having to know how to decode them. By "flattening" the two-steps hierarchy, an implementation only needs to back-pressure individual notifications rather than back-pressure notifications and transactions within notifications. -Drawbacks +Drawbacks This RFC chooses to maintain backwards compatibility at the cost of introducing a very small wart (the Compact(1)). An alternative could be to introduce a new version of the transactions notifications protocol that sends one Transaction per notification, but this is significantly more complicated to implement and can always be done later in case the Compact(1) is bothersome. -Testing, Security, and Privacy +Testing, Security, and Privacy Irrelevant. Performance, Ergonomics, and Compatibility -Performance +Performance Irrelevant. -Ergonomics +Ergonomics Irrelevant. -Compatibility +Compatibility The change is backwards compatible if done in two steps: modify the sender to always send one transaction per notification, then, after a while, modify the receiver to enforce the new format. -Prior Art and References +Prior Art and References Irrelevant. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material None. This is a simple isolated change. (source) Table of Contents @@ -4575,20 +4301,20 @@ This is equivalent to forcing the Vec<Transaction> to always AuthorsPierre Krieger -Summary +Summary 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. -Motivation +Motivation The Polkadot peer-to-peer network is made of nodes. Not all these nodes are equal. Some nodes store only the headers of recent 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. -Stakeholders +Stakeholders Low-level client developers. People interested in accessing the archive of the chain. -Explanation +Explanation 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. Capabilities @@ -4624,9 +4350,9 @@ If blocks pruning is enabled and the chain is a relay chain, then Substrate unfo Implementations that have the head of the chain provider capability do not register themselves as providers, but instead are the nodes that participate in the main DHT. In other words, they are the nodes that serve requests of the /<genesis_hash>/kad protocol. Any implementation that isn't a head of the chain provider (read: light clients) must not participate in the main DHT. This is already presently the case. Implementations must not participate in the main DHT if they don't fulfill the capability yet. For example, a node that is still in the process of warp syncing must not participate in the main DHT. However, assuming that warp syncing doesn't last more than a few seconds, it is acceptable to ignore this requirement in order to avoid complicating implementations too much. -Drawbacks +Drawbacks None that I can see. -Testing, Security, and Privacy +Testing, Security, and Privacy 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. @@ -4634,20 +4360,20 @@ Furthermore, when a large number of providers are registered, only the providers 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. Performance, Ergonomics, and Compatibility -Performance +Performance 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. -Ergonomics +Ergonomics Irrelevant. -Compatibility +Compatibility Irrelevant. -Prior Art and References +Prior Art and References Unknown. -Unresolved Questions +Unresolved Questions 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? -Future Directions and Related Material +Future Directions and Related Material 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. @@ -4696,12 +4422,12 @@ We could even add to the peer-to-peer network nodes that are only capable of ser AuthorsZondax AG, Parity Technologies -Summary +Summary To interact with chains in the Polkadot ecosystem it is required to know how transactions are encoded and how to read state. For doing this, Polkadot-SDK, the framework used by most of the chains in the Polkadot ecosystem, exposes metadata about the runtime to the outside. UIs, wallets, and others can use this metadata to interact with these chains. This makes the metadata a crucial piece of the transaction encoding as users are relying on the interacting software to encode the transactions in the correct format. It gets even more important when the user signs the transaction in an offline wallet, as the device by its nature cannot get access to the metadata without relying on the online wallet to provide it. This makes it so that the offline wallet needs to trust an online party, deeming the security assumptions of the offline devices, mute. This RFC proposes a way for offline wallets to leverage metadata, within the constraints of these. The design idea is that the metadata is chunked and these chunks are put into a merkle tree. The root hash of this merkle tree represents the metadata. The offline wallets can use the root hash to decode transactions by getting proofs for the individual chunks of the metadata. This root hash is also included in the signed data of the transaction (but not sent as part of the transaction). The runtime is then including its known metadata root hash when verifying the transaction. If the metadata root hash known by the runtime differs from the one that the offline wallet used, it very likely means that the online wallet provided some fake data and the verification of the transaction fails. Users depend on offline wallets to correctly display decoded transactions before signing. With merkleized metadata, they can be assured of the transaction's legitimacy, as incorrect transactions will be rejected by the runtime. -Motivation +Motivation Polkadot's innovative design (both relay chain and parachains) present the ability to developers to upgrade their network as frequently as they need. These systems manage to have integrations working after the upgrades with the help of FRAME Metadata. This Metadata, which is in the order of half a MiB for most Polkadot-SDK chains, completely describes chain interfaces and properties. Securing this metadata is key for users to be able to interact with the Polkadot-SDK chain in the expected way. On the other hand, offline wallets provide a secure way for Blockchain users to hold their own keys (some do a better job than others). These devices seldomly get upgraded, usually account for one particular network and hold very small internal memories. Currently in the Polkadot ecosystem there is no secure way of having these offline devices know the latest Metadata of the Polkadot-SDK chain they are interacting with. This results in a plethora of similar yet slightly different offline wallets for all different Polkadot-SDK chains, as well as the impediment of keeping these regularly updated, thus not fully leveraging Polkadot-SDK’s unique forkless upgrade feature. The two main reasons why this is not possible today are: @@ -4728,14 +4454,14 @@ We could even add to the peer-to-peer network nodes that are only capable of ser Chunks handling mechanism SHOULD support chunks being sent in any order without memory utilization overhead; Unused enum variants MUST be stripped (this has great impact on transmitted metadata size; examples: era enum, enum with all calls for call batching). -Stakeholders +Stakeholders Runtime implementors UI/wallet implementors Offline wallet implementors The idea for this RFC was brought up by runtime implementors and was extensively discussed with offline wallet implementors. It was designed in such a way that it can work easily with the existing offline wallet solutions in the Polkadot ecosystem. -Explanation +Explanation The FRAME metadata provides a wide range of information about a FRAME based runtime. It contains information about the pallets, the calls per pallet, the storage entries per pallet, runtime APIs, and type information about most of the types that are used in the runtime. For decoding extrinsics on an offline wallet, what is mainly required is type information. Most of the other information in the FRAME metadata is actually not required for decoding extrinsics and thus it can be removed. Therefore, the following is a proposal on a custom representation of the metadata and how this custom metadata is chunked, ensuring that only the needed chunks required for decoding a particular extrinsic are sent to the offline wallet. The necessary information to transform the FRAME metadata type information into the type information presented in this RFC will be provided. However, not every single detail on how to convert from FRAME metadata into the RFC type information is described. First, the MetadataDigest is introduced. After that, ExtrinsicMetadata is covered and finally the actual format of the type information. Then pruning of unrelated type information is covered and how to generate the TypeRefs. In the latest step, merkle tree calculation is explained. Metadata digest @@ -5006,23 +4732,23 @@ nodes: [[[2, 3], [4, 5]], [0, 1]] Included in the extrinsic is u8, the "mode". The mode is either 0 which means to not include the metadata hash in the signed data or the mode is 1 to include the metadata hash in V1. Included in the signed data is an Option<[u8; 32]>. Depending on the mode the value is either None or Some(metadata_hash). -Drawbacks +Drawbacks The chunking may not be the optimal case for every kind of offline wallet. -Testing, Security, and Privacy +Testing, Security, and Privacy All implementations are required to strictly follow the RFC to generate the metadata hash. This includes which hash function to use and how to construct the metadata types tree. So, all implementations are following the same security criteria. As the chains will calculate the metadata hash at compile time, the build process needs to be trusted. However, this is already a solved problem in the Polkadot ecosystem by using reproducible builds. So, anyone can rebuild a chain runtime to ensure that a proposal is actually containing the changes as advertised. Implementations can also be tested easily against each other by taking some metadata and ensuring that they all come to the same metadata hash. Privacy of users should also not be impacted. This assumes that wallets will generate the metadata hash locally and don't leak any information to third party services about which chunks a user will send to their offline wallet. Besides that, there is no leak of private information as getting the raw metadata from the chain is an operation that is done by almost everyone. Performance, Ergonomics, and Compatibility -Performance +Performance There should be no measurable impact on performance to Polkadot or any other chain using this feature. The metadata root hash is calculated at compile time and at runtime it is optionally used when checking the signature of a transaction. This means that at runtime no performance heavy operations are done. Ergonomics & Compatibility The proposal alters the way a transaction is built, signed, and verified. So, this imposes some required changes to any kind of developer who wants to construct transactions for Polkadot or any chain using this feature. As the developer can pass 0 for disabling the verification of the metadata root hash, it can be easily ignored. -Prior Art and References +Prior Art and References RFC 46 produced by the Alzymologist team is a previous work reference that goes in this direction as well. On other ecosystems, there are other solutions to the problem of trusted signing. Cosmos for example has a standardized way of transforming a transaction into some textual representation and this textual representation is included in the signed data. Basically achieving the same as what the RFC proposes, but it requires that for every transaction applied in a block, every node in the network always has to generate this textual representation to ensure the transaction signature is valid. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material Does it work with all kind of offline wallets? Generic types currently appear multiple times in the metadata with each instantiation. It could be may be useful to have generic type only once in the metadata and declare the generic parameters at their instantiation. @@ -5060,20 +4786,20 @@ nodes: [[[2, 3], [4, 5]], [0, 1]] AuthorsGeorge Pisaltu -Summary +Summary This RFC proposes a change to the extrinsic format to incorporate a new transaction type, the "general" transaction. -Motivation +Motivation "General" transactions, a new type of transaction that this RFC aims to support, are transactions which obey the runtime's extensions and have according extension data yet do not have hard-coded signatures. They are first described in Extrinsic Horizon and supported in 3685. They enable users to authorize origins in new, more flexible ways (e.g. ZK proofs, mutations over pre-authenticated origins). As of now, all transactions are limited to the account signing model for origin authorization and any additional origin changes happen in extrinsic logic, which cannot leverage the validation process of extensions. An example of a use case for such an extension would be sponsoring the transaction fee for some other user. A new extension would be put in place to verify that a part of the initial payload was signed by the author under who the extrinsic should run and change the origin, but the payment for the whole transaction should be handled under a sponsor's account. A POC for this can be found in 3712. The new "general" transaction type would coexist with both current transaction types for a while and, therefore, the current number of supported transaction types, capped at 2, is insufficient. A new extrinsic type must be introduced alongside the current signed and unsigned types. Currently, an encoded extrinsic's first byte indicate the type of extrinsic using the most significant bit - 0 for unsigned, 1 for signed - and the 7 following bits indicate the extrinsic format version, which has been equal to 4 for a long time. By taking one bit from the extrinsic format version encoding, we can support 2 additional extrinsic types while also having a minimal impact on our capability to extend and change the extrinsic format in the future. -Stakeholders +Stakeholders Runtime users Runtime devs Wallet devs -Explanation +Explanation An extrinsic is currently encoded as one byte to identify the extrinsic type and version. This RFC aims to change the interpretation of this byte regarding the reserved bits for the extrinsic type and version. In the following explanation, bits represented using T make up the extrinsic type and bits represented using V make up the extrinsic version. Currently, the bit allocation within the leading encoded byte is 0bTVVV_VVVV. In practice in the Polkadot ecosystem, the leading byte would be 0bT000_0100 as the version has been equal to 4 for a long time. This RFC proposes for the bit allocation to change to 0bTTVV_VVVV. As a result, the extrinsic format version will be bumped to 5 and the extrinsic type bit representation would change as follows: @@ -5084,23 +4810,23 @@ nodes: [[[2, 3], [4, 5]], [0, 1]] 11reserved -Drawbacks +Drawbacks This change would reduce the maximum possible transaction version from the current 127 to 63. In order to bypass the new, lower limit, the extrinsic format would have to change again. -Testing, Security, and Privacy +Testing, Security, and Privacy There is no impact on testing, security or privacy. Performance, Ergonomics, and Compatibility This change would allow Polkadot to support new types of transactions, with the specific "general" transaction type in mind at the time of writing this proposal. -Performance +Performance There is no performance impact. -Ergonomics +Ergonomics The impact to developers and end-users is minimal as it would just be a bitmask update on their part for parsing the extrinsic type along with the version. -Compatibility +Compatibility This change breaks backwards compatiblity because any transaction that is neither signed nor unsigned, but a new transaction type, would be interpreted as having a future extrinsic format version. -Prior Art and References +Prior Art and References The original design was originally proposed in the TransactionExtension PR, which is also the motivation behind this effort. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material Following this change, the "general" transaction type will be introduced as part of the Extrinsic Horizon effort, which will shape future work. (source) Table of Contents @@ -5133,16 +4859,16 @@ nodes: [[[2, 3], [4, 5]], [0, 1]] AuthorsAlex Gheorghe (alexggh) -Summary +Summary Extend the DHT authority discovery records with a signed creation time, so that nodes can determine which record is newer and always decide to prefer the newer records to the old ones. -Motivation +Motivation Currently, we use the Kademlia DHT for storing records regarding the p2p address of an authority discovery key, the problem is that if the nodes decide to change its PeerId/Network key it will publish a new record, however because of the distributed and replicated nature of the DHT there is no way to tell which record is newer so both old PeerId and the new PeerId will live in the network until the old one expires(36h), that creates all sort of problem and leads to the node changing its address not being properly connected for up to 36h. After this RFC, nodes are extended to decide to keep the new record and propagate the new record to nodes that have the old record stored, so in the end all the nodes will converge faster to the new record(in the order of minutes, not 36h) Implementation of the rfc: https://github.com/paritytech/polkadot-sdk/pull/3786. Current issue without this enhacement: https://github.com/paritytech/polkadot-sdk/issues/3673 -Stakeholders +Stakeholders Polkadot node developers. -Explanation +Explanation This RFC heavily relies on the functionalities of the Kademlia DHT already in use by Polkadot. You can find a link to the specification here. In a nutshell, on a specific node the current authority-discovery protocol publishes Kademila DHT records at startup and periodically. The records contain the full address of the node for each authorithy key it owns. The node tries also to find the full address of all authorities in the network by querying the DHT and picking up the first record it finds for each of the authority id it found on chain. @@ -5175,24 +4901,24 @@ You can find a link to the specification Drawbacks +Drawbacks In theory the new protocol creates a bit more traffic on the DHT network, because it waits for DHT records to be received from more than one node, while in the current implementation we just take the first record that we receive and cancel all in-flight requests to other peers. However, because the redundancy factor will be relatively small and this operation happens rarerly, every 10min, this cost is negligible. -Testing, Security, and Privacy +Testing, Security, and Privacy This RFC's implementation https://github.com/paritytech/polkadot-sdk/pull/3786 had been tested on various local test networks and versi. With regard to security the creation time is wrapped inside SignedAuthorityRecord wo it will be signed with the authority id key, so there is no way for other malicious nodes to manipulate this field without the received node observing. Performance, Ergonomics, and Compatibility Irrelevant. -Performance +Performance Irrelevant. -Ergonomics +Ergonomics Irrelevant. -Compatibility +Compatibility The changes are backwards compatible with the existing protocol, so nodes with both the old protocol and newer protocol can exist in the network, this is achieved by the fact that we use protobuf for serializing and deserializing the records, so new fields will be ignore when deserializing with the older protocol and vice-versa when deserializing an old record with the new protocol the new field will be None and the new code accepts this record as being valid. -Prior Art and References +Prior Art and References The enhancements have been inspired by the algorithm specified in here -Unresolved Questions +Unresolved Questions N/A -Future Directions and Related Material +Future Directions and Related Material N/A (source) Table of Contents @@ -5238,23 +4964,23 @@ in order to speed up the time until all nodes have the newest record, nodes can AuthorsJonas Gehrlein & Alistair Stewart -Summary +Summary This RFC proposes a flexible unbonding mechanism for tokens that are locked from staking on the Relay Chain (DOT/KSM), aiming to enhance user convenience without compromising system security. Locking tokens for staking ensures that Polkadot is able to slash tokens backing misbehaving validators. With changing the locking period, we still need to make sure that Polkadot can slash enough tokens to deter misbehaviour. This means that not all tokens can be unbonded immediately, however we can still allow some tokens to be unbonded quickly. The new mechanism leads to a signficantly reduced unbonding time on average, by queuing up new unbonding requests and scaling their unbonding duration relative to the size of the queue. New requests are executed with a minimum of 2 days, when the queue is comparatively empty, to the conventional 28 days, if the sum of requests (in terms of stake) exceed some threshold. In scenarios between these two bounds, the unbonding duration scales proportionately. The new mechanism will never be worse than the current fixed 28 days. In this document we also present an empirical analysis by retrospectively fitting the proposed mechanism to the historic unbonding timeline and show that the average unbonding duration would drastically reduce, while still being sensitive to large unbonding events. Additionally, we discuss implications for UI, UX, and conviction voting. Note: Our proposition solely focuses on the locks imposed from staking. Other locks, such as governance, remain unchanged. Also, this mechanism should not be confused with the already existing feature of FastUnstake, which lets users unstake tokens immediately that have not received rewards for 28 days or longer. As an initial step to gauge its effectiveness and stability, it is recommended to implement and test this model on Kusama before considering its integration into Polkadot, with appropriate adjustments to the parameters. In the following, however, we limit our discussion to Polkadot. -Motivation +Motivation Polkadot has one of the longest unbonding periods among all Proof-of-Stake protocols, because security is the most important goal. Staking on Polkadot is still attractive compared to other protocols because of its above-average staking APY. However the long unbonding period harms usability and deters potential participants that want to contribute to the security of the network. The current length of the unbonding period imposes significant costs for any entity that even wants to perform basic tasks such as a reorganization / consolidation of their stashes, or updating their private key infrastructure. It also limits participation of users that have a large preference for liquidity. The combination of long unbonding periods and high returns has lead to the proliferation of liquid staking, where parachains or centralised exchanges offer users their staked tokens before the 28 days unbonding period is over either in original DOT/KSM form or derivative tokens. Liquid staking is harmless if few tokens are involved but it could result in many validators being selected by a few entities if a large fraction of DOTs were involved. This may lead to centralization (see here for more discussion on threats of liquid staking) and an opportunity for attacks. The new mechanism greatly increases the competitiveness of Polkadot, while maintaining sufficient security. -Stakeholders +Stakeholders Every DOT/KSM token holder -Explanation +Explanation Before diving into the details of how to implement the unbonding queue, we give readers context about why Polkadot has a 28-day unbonding period in the first place. The reason for it is to prevent long-range attacks (LRA) that becomes theoretically possible if more than 1/3 of validators collude. In essence, a LRA describes the inability of users, who disconnect from the consensus at time t0 and reconnects later, to realize that validators which were legitimate at a certain time, say t0 but dropped out in the meantime, are not to be trusted anymore. That means, for example, a user syncing the state could be fooled by trusting validators that fell outside the active set of validators after t0, and are building a competitive and malicious chain (fork). LRAs of longer than 28 days are mitigated by the use of trusted checkpoints, which are assumed to be no more than 28 days old. A new node that syncs Polkadot will start at the checkpoint and look for proofs of finality of later blocks, signed by 2/3 of the validators. In an LRA fork, some of the validator sets may be different but only if 2/3 of some validator set in the last 28 days signed something incorrect. If we detect an LRA of no more than 28 days with the current unbonding period, then we should be able to detect misbehaviour from over 1/3 of validators whose nominators are still bonded. The stake backing these validators is considerable fraction of the total stake (empirically it is 0.287 or so). If we allowed more than this stake to unbond, without checking who it was backing, then the LRA attack might be free of cost for an attacker. The proposed mechansim allows up to half this stake to unbond within 28 days. This halves the amount of tokens that can be slashed, but this is still very high in absolute terms. For example, at the time of writing (19.06.2024) this would translate to around 120 millions DOTs. @@ -5312,23 +5038,23 @@ The analysis can be reproduced or changed to other parameters using Potential Extension In addition to a simple queue, we could add a market component that lets users always unbond from staking at the minimum possible waiting time)(== LOWER_BOUND, e.g., 2 days), by paying a variable fee. To achieve this, it is reasonable to split the total unbonding capacity into two chunks, with the first capacity for the simple queue and the remaining capacity for the fee-based unbonding. By doing so, we allow users to choose whether they want the quickest unbond and paying a dynamic fee or join the simple queue. Setting a capacity restriction for both queues enables us to guarantee a predictable unbonding time in the simple queue, while allowing users with the respective willingness to pay to get out even earlier. The fees are dynamically adjusted and are proportional to the unbonding stake (and thereby expressed in a percentage of the requested unbonding stake). In contrast to a unified queue, this prevents the issue that users paying a fee jump in front of other users not paying a fee, pushing their unbonding time back (which would be bad for UX). The revenue generated could be burned. This extension and further specifications are left out of this RFC, because it adds further complexity and the empirical analysis above suggests that average unbonding times will already be close the LOWER_BOUND, making a more complex design unnecessary. We advise to first implement the discussed mechanism and assess after some experience whether an extension is desirable. -Drawbacks +Drawbacks Lower security for LRAs: Without a doubt, the theoretical security against LRAs decreases. But, as we argue, the attack is still costly enough to deter attacks and the attack is sufficiently theoretical. Here, the benefits outweigh the costs. Griefing attacks: A large holder could pretend to unbond a large amount of their tokens to prevent other users to exit the network earlier. This would, however be costly due to the fact that the holder loses out on staking rewards. The larger the impact on the queue, the higher the costs. In any case it must be noted that the UPPER_BOUND is still 28 days, which means that nominators are never left with a longer unbonding period than currently. There is not enough gain for the attacker to endure this cost. Challenge for Custodians and Liquid Staking Providers: Changing the unbonding time, especially making it flexible, requires entities that offer staking derivatives to rethink and rework their products. -Testing, Security, and Privacy +Testing, Security, and Privacy NA Performance, Ergonomics, and Compatibility NA -Performance +Performance The authors cannot see any potential impact on performance. -Ergonomics +Ergonomics The authors cannot see any potential impact on ergonomics for developers. We discussed potential impact on UX/UI for users above. -Compatibility +Compatibility The authors cannot see any potential impact on compatibility. This should be assessed by the technical fellows. -Prior Art and References +Prior Art and References Ethereum proposed a similar solution Alistair did some initial write-up @@ -5365,20 +5091,20 @@ The analysis can be reproduced or changed to other parameters using Summary +Summary This RFC proposes a change to the extrinsic format to include a transaction extension version. -Motivation +Motivation The extrinsic format supports to be extended with transaction extensions. These transaction extensions are runtime specific and can be different per chain. Each transaction extension can add data to the extrinsic itself or extend the signed payload. This means that adding a transaction extension is breaking the chain specific extrinsic format. A recent example was the introduction of the CheckMetadatHash to Polkadot and all its system chains. As the extension was adding one byte to the extrinsic, it broke a lot of tooling. By introducing an extra version for the transaction extensions it will be possible to introduce changes to these transaction extensions while still being backwards compatible. Based on the version of the transaction extensions, each chain runtime could decode the extrinsic correctly and also create the correct signed payload. -Stakeholders +Stakeholders Runtime users Runtime devs Wallet devs -Explanation +Explanation RFC84 introduced the extrinsic format 5. The idea is to piggyback onto this change of the extrinsic format to add the extra version for the transaction extensions. If required, this could also come as extrinsic format 6, but 5 is not yet deployed anywhere. The extrinsic format supports the following types of transactions: @@ -5394,25 +5120,25 @@ as extrinsic format 6, but 5 is not yet deployed anywh The Version being a SCALE encoded u8 representing the version of the transaction extensions. In the chain runtime the version can be used to determine which set of transaction extensions should be used to decode and to validate the transaction. -Drawbacks +Drawbacks This adds one byte more to each signed transaction. -Testing, Security, and Privacy +Testing, Security, and Privacy There is no impact on testing, security or privacy. Performance, Ergonomics, and Compatibility This will ensure that changes to the transactions extensions can be done in a backwards compatible way. -Performance +Performance There is no performance impact. -Ergonomics +Ergonomics Runtime developers need to take care of the versioning and ensure to bump as required, so that there are no compatibility breaking changes without a bump of the version. It will also add a little bit more code in the runtime to decode these old versions, but this should be neglectable. -Compatibility +Compatibility When introduced together with extrinsic format version 5 from RFC84, it can be implemented in a backwards compatible way. So, transactions can still be send using the old extrinsic format and decoded by the runtime. -Prior Art and References +Prior Art and References None. -Unresolved Questions +Unresolved Questions None. -Future Directions and Related Material +Future Directions and Related Material None. (source) Table of Contents @@ -5449,14 +5175,14 @@ old extrinsic format and decoded by the runtime. AuthorsAdrian Catangiu -Summary +Summary This RFC proposes a new instruction that provides a way to initiate on remote chains, asset transfers which transfer multiple types (teleports, local-reserve, destination-reserve) of assets, using XCM alone. The currently existing instructions are too opinionated and force each XCM asset transfer to a single transfer type (teleport, local-reserve, destination-reserve). This results in inability to combine different types of transfers in single transfer which results in overall poor UX when trying to move assets across chains. -Motivation +Motivation XCM is the de-facto cross-chain messaging protocol within the Polkadot ecosystem, and cross-chain assets transfers is one of its main use-cases. Unfortunately, in its current spec, it does not support initiating on a remote chain, one or more transfers that combine assets with different transfer types. @@ -5478,14 +5204,14 @@ For example, allows single XCM program execution to transfer multiple assets fro Kusama Asset Hub, over the bridge through Polkadot Asset Hub with final destination ParaP on Polkadot. With current XCM, we are limited to doing multiple independent transfers for each individual hop in order to move both "interesting" assets, but also "supporting" assets (used to pay fees). -Stakeholders +Stakeholders Runtime users Runtime devs Wallet devs dApps devs -Explanation +Explanation A new instruction InitiateAssetsTransfer is introduced that initiates an assets transfer from the chain it is executed on, to another chain. The executed transfer is point-to-point (chain-to-chain) with all of the transfer properties specified in the instruction parameters. The instruction also @@ -5673,9 +5399,9 @@ by executing a single XCM message, even though we'll be mixing multiple ).unwrap(); }) }
1
4
for
As explained in the motivation section, this allows extracting scale(transaction) items without having to know how to decode them.
scale(transaction)
By "flattening" the two-steps hierarchy, an implementation only needs to back-pressure individual notifications rather than back-pressure notifications and transactions within notifications.
This RFC chooses to maintain backwards compatibility at the cost of introducing a very small wart (the Compact(1)).
Compact(1)
An alternative could be to introduce a new version of the transactions notifications protocol that sends one Transaction per notification, but this is significantly more complicated to implement and can always be done later in case the Compact(1) is bothersome.
The change is backwards compatible if done in two steps: modify the sender to always send one transaction per notification, then, after a while, modify the receiver to enforce the new format.
None. This is a simple isolated change.
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 recent 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.
Implementations that have the head of the chain provider capability do not register themselves as providers, but instead are the nodes that participate in the main DHT. In other words, they are the nodes that serve requests of the /<genesis_hash>/kad protocol.
/<genesis_hash>/kad
Any implementation that isn't a head of the chain provider (read: light clients) must not participate in the main DHT. This is already presently the case.
Implementations must not participate in the main DHT if they don't fulfill the capability yet. For example, a node that is still in the process of warp syncing must not participate in the main DHT. However, assuming that warp syncing doesn't last more than a few seconds, it is acceptable to ignore this requirement in order to avoid complicating implementations too much.
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. @@ -4634,20 +4360,20 @@ Furthermore, when a large number of providers are registered, only the providers
sha256(peer_id)
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.
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.
Unknown.
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.
To interact with chains in the Polkadot ecosystem it is required to know how transactions are encoded and how to read state. For doing this, Polkadot-SDK, the framework used by most of the chains in the Polkadot ecosystem, exposes metadata about the runtime to the outside. UIs, wallets, and others can use this metadata to interact with these chains. This makes the metadata a crucial piece of the transaction encoding as users are relying on the interacting software to encode the transactions in the correct format.
It gets even more important when the user signs the transaction in an offline wallet, as the device by its nature cannot get access to the metadata without relying on the online wallet to provide it. This makes it so that the offline wallet needs to trust an online party, deeming the security assumptions of the offline devices, mute.
This RFC proposes a way for offline wallets to leverage metadata, within the constraints of these. The design idea is that the metadata is chunked and these chunks are put into a merkle tree. The root hash of this merkle tree represents the metadata. The offline wallets can use the root hash to decode transactions by getting proofs for the individual chunks of the metadata. This root hash is also included in the signed data of the transaction (but not sent as part of the transaction). The runtime is then including its known metadata root hash when verifying the transaction. If the metadata root hash known by the runtime differs from the one that the offline wallet used, it very likely means that the online wallet provided some fake data and the verification of the transaction fails.
Users depend on offline wallets to correctly display decoded transactions before signing. With merkleized metadata, they can be assured of the transaction's legitimacy, as incorrect transactions will be rejected by the runtime.
Polkadot's innovative design (both relay chain and parachains) present the ability to developers to upgrade their network as frequently as they need. These systems manage to have integrations working after the upgrades with the help of FRAME Metadata. This Metadata, which is in the order of half a MiB for most Polkadot-SDK chains, completely describes chain interfaces and properties. Securing this metadata is key for users to be able to interact with the Polkadot-SDK chain in the expected way.
On the other hand, offline wallets provide a secure way for Blockchain users to hold their own keys (some do a better job than others). These devices seldomly get upgraded, usually account for one particular network and hold very small internal memories. Currently in the Polkadot ecosystem there is no secure way of having these offline devices know the latest Metadata of the Polkadot-SDK chain they are interacting with. This results in a plethora of similar yet slightly different offline wallets for all different Polkadot-SDK chains, as well as the impediment of keeping these regularly updated, thus not fully leveraging Polkadot-SDK’s unique forkless upgrade feature.
The two main reasons why this is not possible today are:
The idea for this RFC was brought up by runtime implementors and was extensively discussed with offline wallet implementors. It was designed in such a way that it can work easily with the existing offline wallet solutions in the Polkadot ecosystem.
The FRAME metadata provides a wide range of information about a FRAME based runtime. It contains information about the pallets, the calls per pallet, the storage entries per pallet, runtime APIs, and type information about most of the types that are used in the runtime. For decoding extrinsics on an offline wallet, what is mainly required is type information. Most of the other information in the FRAME metadata is actually not required for decoding extrinsics and thus it can be removed. Therefore, the following is a proposal on a custom representation of the metadata and how this custom metadata is chunked, ensuring that only the needed chunks required for decoding a particular extrinsic are sent to the offline wallet. The necessary information to transform the FRAME metadata type information into the type information presented in this RFC will be provided. However, not every single detail on how to convert from FRAME metadata into the RFC type information is described.
First, the MetadataDigest is introduced. After that, ExtrinsicMetadata is covered and finally the actual format of the type information. Then pruning of unrelated type information is covered and how to generate the TypeRefs. In the latest step, merkle tree calculation is explained.
MetadataDigest
ExtrinsicMetadata
TypeRef
u8
V1
Option<[u8; 32]>
None
Some(metadata_hash)
The chunking may not be the optimal case for every kind of offline wallet.
All implementations are required to strictly follow the RFC to generate the metadata hash. This includes which hash function to use and how to construct the metadata types tree. So, all implementations are following the same security criteria. As the chains will calculate the metadata hash at compile time, the build process needs to be trusted. However, this is already a solved problem in the Polkadot ecosystem by using reproducible builds. So, anyone can rebuild a chain runtime to ensure that a proposal is actually containing the changes as advertised.
Implementations can also be tested easily against each other by taking some metadata and ensuring that they all come to the same metadata hash.
Privacy of users should also not be impacted. This assumes that wallets will generate the metadata hash locally and don't leak any information to third party services about which chunks a user will send to their offline wallet. Besides that, there is no leak of private information as getting the raw metadata from the chain is an operation that is done by almost everyone.
There should be no measurable impact on performance to Polkadot or any other chain using this feature. The metadata root hash is calculated at compile time and at runtime it is optionally used when checking the signature of a transaction. This means that at runtime no performance heavy operations are done.
The proposal alters the way a transaction is built, signed, and verified. So, this imposes some required changes to any kind of developer who wants to construct transactions for Polkadot or any chain using this feature. As the developer can pass 0 for disabling the verification of the metadata root hash, it can be easily ignored.
RFC 46 produced by the Alzymologist team is a previous work reference that goes in this direction as well.
On other ecosystems, there are other solutions to the problem of trusted signing. Cosmos for example has a standardized way of transforming a transaction into some textual representation and this textual representation is included in the signed data. Basically achieving the same as what the RFC proposes, but it requires that for every transaction applied in a block, every node in the network always has to generate this textual representation to ensure the transaction signature is valid.
This RFC proposes a change to the extrinsic format to incorporate a new transaction type, the "general" transaction.
"General" transactions, a new type of transaction that this RFC aims to support, are transactions which obey the runtime's extensions and have according extension data yet do not have hard-coded signatures. They are first described in Extrinsic Horizon and supported in 3685. They enable users to authorize origins in new, more flexible ways (e.g. ZK proofs, mutations over pre-authenticated origins). As of now, all transactions are limited to the account signing model for origin authorization and any additional origin changes happen in extrinsic logic, which cannot leverage the validation process of extensions.
An example of a use case for such an extension would be sponsoring the transaction fee for some other user. A new extension would be put in place to verify that a part of the initial payload was signed by the author under who the extrinsic should run and change the origin, but the payment for the whole transaction should be handled under a sponsor's account. A POC for this can be found in 3712.
The new "general" transaction type would coexist with both current transaction types for a while and, therefore, the current number of supported transaction types, capped at 2, is insufficient. A new extrinsic type must be introduced alongside the current signed and unsigned types. Currently, an encoded extrinsic's first byte indicate the type of extrinsic using the most significant bit - 0 for unsigned, 1 for signed - and the 7 following bits indicate the extrinsic format version, which has been equal to 4 for a long time.
By taking one bit from the extrinsic format version encoding, we can support 2 additional extrinsic types while also having a minimal impact on our capability to extend and change the extrinsic format in the future.
An extrinsic is currently encoded as one byte to identify the extrinsic type and version. This RFC aims to change the interpretation of this byte regarding the reserved bits for the extrinsic type and version. In the following explanation, bits represented using T make up the extrinsic type and bits represented using V make up the extrinsic version.
T
V
Currently, the bit allocation within the leading encoded byte is 0bTVVV_VVVV. In practice in the Polkadot ecosystem, the leading byte would be 0bT000_0100 as the version has been equal to 4 for a long time.
0bTVVV_VVVV
0bT000_0100
This RFC proposes for the bit allocation to change to 0bTTVV_VVVV. As a result, the extrinsic format version will be bumped to 5 and the extrinsic type bit representation would change as follows:
0bTTVV_VVVV
5
This change would reduce the maximum possible transaction version from the current 127 to 63. In order to bypass the new, lower limit, the extrinsic format would have to change again.
127
63
There is no impact on testing, security or privacy.
This change would allow Polkadot to support new types of transactions, with the specific "general" transaction type in mind at the time of writing this proposal.
There is no performance impact.
The impact to developers and end-users is minimal as it would just be a bitmask update on their part for parsing the extrinsic type along with the version.
This change breaks backwards compatiblity because any transaction that is neither signed nor unsigned, but a new transaction type, would be interpreted as having a future extrinsic format version.
The original design was originally proposed in the TransactionExtension PR, which is also the motivation behind this effort.
TransactionExtension
Following this change, the "general" transaction type will be introduced as part of the Extrinsic Horizon effort, which will shape future work.
Extend the DHT authority discovery records with a signed creation time, so that nodes can determine which record is newer and always decide to prefer the newer records to the old ones.
Currently, we use the Kademlia DHT for storing records regarding the p2p address of an authority discovery key, the problem is that if the nodes decide to change its PeerId/Network key it will publish a new record, however because of the distributed and replicated nature of the DHT there is no way to tell which record is newer so both old PeerId and the new PeerId will live in the network until the old one expires(36h), that creates all sort of problem and leads to the node changing its address not being properly connected for up to 36h.
After this RFC, nodes are extended to decide to keep the new record and propagate the new record to nodes that have the old record stored, so in the end all the nodes will converge faster to the new record(in the order of minutes, not 36h)
Implementation of the rfc: https://github.com/paritytech/polkadot-sdk/pull/3786.
Current issue without this enhacement: https://github.com/paritytech/polkadot-sdk/issues/3673
Polkadot node developers.
This RFC heavily relies on the functionalities of the Kademlia DHT already in use by Polkadot. You can find a link to the specification here.
In a nutshell, on a specific node the current authority-discovery protocol publishes Kademila DHT records at startup and periodically. The records contain the full address of the node for each authorithy key it owns. The node tries also to find the full address of all authorities in the network by querying the DHT and picking up the first record it finds for each of the authority id it found on chain.
In theory the new protocol creates a bit more traffic on the DHT network, because it waits for DHT records to be received from more than one node, while in the current implementation we just take the first record that we receive and cancel all in-flight requests to other peers. However, because the redundancy factor will be relatively small and this operation happens rarerly, every 10min, this cost is negligible.
This RFC's implementation https://github.com/paritytech/polkadot-sdk/pull/3786 had been tested on various local test networks and versi.
With regard to security the creation time is wrapped inside SignedAuthorityRecord wo it will be signed with the authority id key, so there is no way for other malicious nodes to manipulate this field without the received node observing.
The changes are backwards compatible with the existing protocol, so nodes with both the old protocol and newer protocol can exist in the network, this is achieved by the fact that we use protobuf for serializing and deserializing the records, so new fields will be ignore when deserializing with the older protocol and vice-versa when deserializing an old record with the new protocol the new field will be None and the new code accepts this record as being valid.
The enhancements have been inspired by the algorithm specified in here
This RFC proposes a flexible unbonding mechanism for tokens that are locked from staking on the Relay Chain (DOT/KSM), aiming to enhance user convenience without compromising system security.
Locking tokens for staking ensures that Polkadot is able to slash tokens backing misbehaving validators. With changing the locking period, we still need to make sure that Polkadot can slash enough tokens to deter misbehaviour. This means that not all tokens can be unbonded immediately, however we can still allow some tokens to be unbonded quickly.
The new mechanism leads to a signficantly reduced unbonding time on average, by queuing up new unbonding requests and scaling their unbonding duration relative to the size of the queue. New requests are executed with a minimum of 2 days, when the queue is comparatively empty, to the conventional 28 days, if the sum of requests (in terms of stake) exceed some threshold. In scenarios between these two bounds, the unbonding duration scales proportionately. The new mechanism will never be worse than the current fixed 28 days.
In this document we also present an empirical analysis by retrospectively fitting the proposed mechanism to the historic unbonding timeline and show that the average unbonding duration would drastically reduce, while still being sensitive to large unbonding events. Additionally, we discuss implications for UI, UX, and conviction voting.
Note: Our proposition solely focuses on the locks imposed from staking. Other locks, such as governance, remain unchanged. Also, this mechanism should not be confused with the already existing feature of FastUnstake, which lets users unstake tokens immediately that have not received rewards for 28 days or longer.
As an initial step to gauge its effectiveness and stability, it is recommended to implement and test this model on Kusama before considering its integration into Polkadot, with appropriate adjustments to the parameters. In the following, however, we limit our discussion to Polkadot.
Polkadot has one of the longest unbonding periods among all Proof-of-Stake protocols, because security is the most important goal. Staking on Polkadot is still attractive compared to other protocols because of its above-average staking APY. However the long unbonding period harms usability and deters potential participants that want to contribute to the security of the network.
The current length of the unbonding period imposes significant costs for any entity that even wants to perform basic tasks such as a reorganization / consolidation of their stashes, or updating their private key infrastructure. It also limits participation of users that have a large preference for liquidity.
The combination of long unbonding periods and high returns has lead to the proliferation of liquid staking, where parachains or centralised exchanges offer users their staked tokens before the 28 days unbonding period is over either in original DOT/KSM form or derivative tokens. Liquid staking is harmless if few tokens are involved but it could result in many validators being selected by a few entities if a large fraction of DOTs were involved. This may lead to centralization (see here for more discussion on threats of liquid staking) and an opportunity for attacks.
The new mechanism greatly increases the competitiveness of Polkadot, while maintaining sufficient security.
Before diving into the details of how to implement the unbonding queue, we give readers context about why Polkadot has a 28-day unbonding period in the first place. The reason for it is to prevent long-range attacks (LRA) that becomes theoretically possible if more than 1/3 of validators collude. In essence, a LRA describes the inability of users, who disconnect from the consensus at time t0 and reconnects later, to realize that validators which were legitimate at a certain time, say t0 but dropped out in the meantime, are not to be trusted anymore. That means, for example, a user syncing the state could be fooled by trusting validators that fell outside the active set of validators after t0, and are building a competitive and malicious chain (fork).
LRAs of longer than 28 days are mitigated by the use of trusted checkpoints, which are assumed to be no more than 28 days old. A new node that syncs Polkadot will start at the checkpoint and look for proofs of finality of later blocks, signed by 2/3 of the validators. In an LRA fork, some of the validator sets may be different but only if 2/3 of some validator set in the last 28 days signed something incorrect.
If we detect an LRA of no more than 28 days with the current unbonding period, then we should be able to detect misbehaviour from over 1/3 of validators whose nominators are still bonded. The stake backing these validators is considerable fraction of the total stake (empirically it is 0.287 or so). If we allowed more than this stake to unbond, without checking who it was backing, then the LRA attack might be free of cost for an attacker. The proposed mechansim allows up to half this stake to unbond within 28 days. This halves the amount of tokens that can be slashed, but this is still very high in absolute terms. For example, at the time of writing (19.06.2024) this would translate to around 120 millions DOTs.
In addition to a simple queue, we could add a market component that lets users always unbond from staking at the minimum possible waiting time)(== LOWER_BOUND, e.g., 2 days), by paying a variable fee. To achieve this, it is reasonable to split the total unbonding capacity into two chunks, with the first capacity for the simple queue and the remaining capacity for the fee-based unbonding. By doing so, we allow users to choose whether they want the quickest unbond and paying a dynamic fee or join the simple queue. Setting a capacity restriction for both queues enables us to guarantee a predictable unbonding time in the simple queue, while allowing users with the respective willingness to pay to get out even earlier. The fees are dynamically adjusted and are proportional to the unbonding stake (and thereby expressed in a percentage of the requested unbonding stake). In contrast to a unified queue, this prevents the issue that users paying a fee jump in front of other users not paying a fee, pushing their unbonding time back (which would be bad for UX). The revenue generated could be burned.
LOWER_BOUND
This extension and further specifications are left out of this RFC, because it adds further complexity and the empirical analysis above suggests that average unbonding times will already be close the LOWER_BOUND, making a more complex design unnecessary. We advise to first implement the discussed mechanism and assess after some experience whether an extension is desirable.
UPPER_BOUND
NA
The authors cannot see any potential impact on performance.
The authors cannot see any potential impact on ergonomics for developers. We discussed potential impact on UX/UI for users above.
The authors cannot see any potential impact on compatibility. This should be assessed by the technical fellows.
This RFC proposes a change to the extrinsic format to include a transaction extension version.
The extrinsic format supports to be extended with transaction extensions. These transaction extensions are runtime specific and can be different per chain. Each transaction extension can add data to the extrinsic itself or extend the signed payload. This means that adding a transaction extension is breaking the chain specific extrinsic format. A recent example was the introduction of the CheckMetadatHash to Polkadot and all its system chains. As the extension was adding one byte to the extrinsic, it broke a lot of tooling. By introducing an extra version for the transaction extensions it will be possible to introduce changes to these transaction extensions while still being backwards compatible. Based on the version of the transaction extensions, each chain runtime could decode the extrinsic correctly and also create the correct signed payload.
CheckMetadatHash
RFC84 introduced the extrinsic format 5. The idea is to piggyback onto this change of the extrinsic format to add the extra version for the transaction extensions. If required, this could also come as extrinsic format 6, but 5 is not yet deployed anywhere.
6
The extrinsic format supports the following types of transactions:
The Version being a SCALE encoded u8 representing the version of the transaction extensions.
Version
In the chain runtime the version can be used to determine which set of transaction extensions should be used to decode and to validate the transaction.
This adds one byte more to each signed transaction.
This will ensure that changes to the transactions extensions can be done in a backwards compatible way.
Runtime developers need to take care of the versioning and ensure to bump as required, so that there are no compatibility breaking changes without a bump of the version. It will also add a little bit more code in the runtime to decode these old versions, but this should be neglectable.
When introduced together with extrinsic format version 5 from RFC84, it can be implemented in a backwards compatible way. So, transactions can still be send using the old extrinsic format and decoded by the runtime.
This RFC proposes a new instruction that provides a way to initiate on remote chains, asset transfers which transfer multiple types (teleports, local-reserve, destination-reserve) of assets, using XCM alone.
The currently existing instructions are too opinionated and force each XCM asset transfer to a single transfer type (teleport, local-reserve, destination-reserve). This results in inability to combine different types of transfers in single transfer which results in overall poor UX when trying to move assets across chains.
XCM is the de-facto cross-chain messaging protocol within the Polkadot ecosystem, and cross-chain assets transfers is one of its main use-cases. Unfortunately, in its current spec, it does not support initiating on a remote chain, one or more transfers that combine assets with different transfer types. @@ -5478,14 +5204,14 @@ For example, allows single XCM program execution to transfer multiple assets fro Kusama Asset Hub, over the bridge through Polkadot Asset Hub with final destination ParaP on Polkadot.
ParaP
With current XCM, we are limited to doing multiple independent transfers for each individual hop in order to move both "interesting" assets, but also "supporting" assets (used to pay fees).
A new instruction InitiateAssetsTransfer is introduced that initiates an assets transfer from the chain it is executed on, to another chain. The executed transfer is point-to-point (chain-to-chain) with all of the transfer properties specified in the instruction parameters. The instruction also @@ -5673,9 +5399,9 @@ by executing a single XCM message, even though we'll be mixing multiple ).unwrap(); }) }
InitiateAssetsTransfer
No drawbacks identified.
There should be no security risks related to the new instruction from the XCVM perspective. It follows the same pattern as with single-type asset transfers, only now it allows combining multiple types at once.
Improves security by enabling @@ -5688,12 +5414,12 @@ immediately followed by a BuyExecution using said asset.
This brings no impact to the rest of the XCM spec. It is a new, independent instruction, no changes to existing instructions.
Enhances the exposed functionality of Polkadot. Will allow multi-chain transfers that are currently forced to happen in multiple programs per asset per "hop", to be possible in a single XCM program.
No performance changes/implications.
The proposal enhances developers' and users' cross-chain asset transfer capabilities. This enhancement is optimized for XCM programs transferring multiple assets, needing to run their logic across multiple chains.
Does this proposal break compatibility with existing interfaces, older versions of implementations? Summarize necessary migrations or upgrade strategies, if any.
This enhancement is compatible with all existing XCM programs and versions.
The Transact XCM instruction currently forces the user to set a specific maximum weight allowed to the inner call and then also pay for that much weight regardless of how much the call actually needs in practice.
This RFC proposes improving the usability of Transact by removing that parameter and instead get and charge the actual weight of the inner call from its dispatch info on the remote chain.
The UX of using Transact is poor because of having to guess/estimate the require_weight_at_most weight used by the inner call on the target.
require_weight_at_most
We've seen multiple Transact on-chain failures caused by guessing wrong values for this require_weight_at_most even though the rest of the XCM program would have worked.
In practice, this parameter only adds UX overhead with no real practical value. Use cases fall in one of two categories:
We've had multiple OpenGov root/whitelisted_caller proposals initiated by core-devs completely or partially fail because of incorrect configuration of require_weight_at_most parameter. This is a strong indication that the instruction is hard to use.
root/whitelisted_caller
The proposed enhancement is simple: remove require_weight_at_most parameter from the instruction:
- Transact { origin_kind: OriginKind, require_weight_at_most: Weight, call: DoubleEncoded<Call> }, + Transact { origin_kind: OriginKind, call: DoubleEncoded<Call> },
The XCVM implementation shall no longer use require_weight_at_most for weighing. Instead, it shall weigh the Transact instruction by decoding and weighing the inner call.
call
No drawbacks, existing scenarios work as before, while this also allows new/easier flows.
Currently, an XCVM implementation can weigh a message just by looking at the decoded instructions without decoding the Transact's call, but assuming require_weight_at_most weight for it. With the new version it has to decode the inner call to know its actual weight.
But this does not actually change the security considerations, as can be seen below.
With the new Transact the weighing happens after decoding the inner call. The entirety of the XCM program containing this Transact needs to be either covered by enough bought weight using a BuyExecution, or the origin has to be allowed to do free execution.
In both cases, decoding is done for free, but in both cases execution fails early on BuyExecution.
No performance change.
Ergonomics are slightly improved by simplifying Transact API.
Compatible with previous XCM programs.
Elastic scaling is not resilient against griefing attacks without a way for a PoV (Proof of Validity) +to commit to the particular core index it was intended for. This RFC proposes a way to include +core index information in the candidate commitments and the CandidateDescriptor data structure +in a backward compatible way. Additionally, it proposes the addition of a SessionIndex field in +the CandidateDescriptor to make dispute resolution more secure and robust.
The approach proposed below was chosen primarily because it minimizes the number of breaking +changes, the complexity and takes less implementation and testing time. The proposal is to change +the existing primitives while keeping binary compatibility with the older versions. We repurpose +unused fields to introduce core index and a session index information in the CandidateDescriptor +and extend the UMP to transport non-XCM messages.
The CandidateDescriptor includes collator and signature fields. The collator +includes a signature on the following descriptor fields: parachain id, relay parent, validation +data hash, validation code hash, and the PoV hash.
However, in practice, having a collator signature in the receipt on the relay chain does not +provide any benefits as there is no mechanism to punish or reward collators that have provided +bad parachain blocks.
This proposal aims to remove the collator signature and all the logic that checks the collator +signatures of candidate receipts. We use the first 7 reclaimed bytes to represent the version, +the core, session index, and fill the rest with zeroes. So, there is no change in the layout +and length of the receipt. The new primitive is binary-compatible with the old one.
CandidateCommitments +remains unchanged as we will store scale encoded UMPSignal messages directly in the parachain +UMP queue by outputting them in upward_messages.
The UMP queue layout is changed to allow the relay chain to receive both the XCM messages and +UMPSignal messages. An empty message (empty Vec<u8>) is used to mark the end of XCM messages and +the start of UMPSignal messages. The UMPSignal is optional and can be omitted by parachains +not using elastic scaling.
This way of representing the new messages has been chosen over introducing an enum wrapper to +minimize breaking changes of XCM message decoding in tools like Subscan for example.
#![allow(unused)] +fn main() { +[ XCM message1, XCM message2, ..., EMPTY message, UMPSignal::SelectCore ] +}
#![allow(unused)] +fn main() { +/// The selector that determines the core index. +pub struct CoreSelector(pub u8); + +/// The offset in the relay chain claim queue. +/// +/// The state of the claim queue is given by the relay chain block +/// that is used as context for the `PoV`. +pub struct ClaimQueueOffset(pub u8); + +/// Signals sent by a parachain to the relay chain. +pub enum UMPSignal { + /// A message sent by a parachain to select the core the candidate is committed to. + /// Relay chain validators, in particular backers, use the `CoreSelector` and `ClaimQueueOffset` + /// to compute the index of the core the candidate has committed to. + SelectCore(CoreSelector, ClaimQueueOffset), +} +}
The CoreSelector together with the ClaimQueueOffset are used to index the claim queue. This way +the validators can compute the CoreIndex and ensure that the collator put the correct CoreIndex +into the CandidateDescriptor.
The purpose of ClaimQueueOffset is to select the column from the above table. +For cq_offset = 1 we get [Para A, Para B, Para A] and use as input to create +a sorted vec with the cores A is assigned to: [Core 1, Core 3] and call it para_assigned_cores. +We use core_selector and determine the committed core index is Core 3 like this:
#![allow(unused)] +fn main() { +let committed_core_index = para_assigned_cores[core_selector % para_assigned_cores.len()]; +}
#![allow(unused)] +fn main() { +pub struct CandidateDescriptorV2<H = Hash> { + /// The ID of the para this is a candidate for. + para_id: ParaId, + /// The hash of the relay-chain block this is executed in the context of. + relay_parent: H, + /// Version field. The raw value here is not exposed, instead, it is used + /// to determine the `CandidateDescriptorVersion` + version: InternalVersion, + /// The core index where the candidate is backed. + core_index: u16, + /// The session in which the candidate is backed. + session_index: SessionIndex, + /// Reserved bytes. + reserved1: [u8; 25], + /// The blake2-256 hash of the persisted validation data. This is extra data derived from + /// relay-chain state which may vary based on bitfields included before the candidate. + /// Thus it cannot be derived entirely from the relay parent. + persisted_validation_data_hash: Hash, + /// The blake2-256 hash of the PoV. + pov_hash: Hash, + /// The root of a block's erasure encoding Merkle tree. + erasure_root: Hash, + /// Reserved bytes. + reserved2: [u8; 64], + /// Hash of the para header that is being generated by this candidate. + para_head: Hash, + /// The blake2-256 hash of the validation code bytes. + validation_code_hash: ValidationCodeHash, +} +}
In future format versions, parts of the reserved1 and reserved2 bytes can be used to include +additional information in the descriptor.
Two flavors of candidate receipts are used in network protocols, runtime and node +implementation:
We want to support both the old and new versions in the runtime and node, so the implementation must +be able to detect the version of a given candidate receipt.
The version of the descriptor is detected by checking the reserved fields. +If they are not zeroed, it means it is a version 1 descriptor. Otherwise the version field +is used further to determine the version. It should be 0 for version 2 descriptors. If it is not +the descriptor has an unknown version and should be considered invalid.
Backers must check the validity of core_index and session_index fields. +A candidate must not be backed if any of the following are true:
For version 2 descriptors the runtime will determine the core_index using the same inputs +as backers did off-chain. It currently stores the claim queue at the newest allowed +relay parent corresponding to the claim queue offset 0. The runtime needs to be changed to store +a claim queue snapshot at all allowed relay parents.
The only drawback is that further additions to the descriptor are limited to the amount of +remaining unused space.
Standard testing (unit tests, CI zombienet tests) for functionality and mandatory security audit +to ensure the implementation does not introduce any new security issues.
Overall performance will be improved by not checking the collator signatures in runtime and nodes. +The impact on the UMP queue and candidate receipt processing is negligible.
The ClaimQueueOffset along with the relay parent choice allows parachains to optimize their +block production for either throughput or lower XCM message processing latency. A value of 0 +with the newest relay parent provides the best latency while picking older relay parents avoids +re-orgs.
It is mandatory for elastic parachains to switch to the new receipt format and commit to a +core by sending the UMPSignal::SelectCore message. It is optional but desired that all +parachains switch to the new receipts for providing the session index for disputes.
The implementation of this RFC itself must not introduce any breaking changes for the parachain +runtime or collator nodes.
The proposed changes are not fully backward compatible, because older validators verify the +collator signature of candidate descriptors.
Additional care must be taken before enabling the new descriptors by waiting for at least +2/3 + 1 validators to upgrade. Validators that have not upgraded will not back candidates +using the new descriptor format and will also initiate disputes against these candidates.
The first step is to remove collator signature checking logic in the runtime but keep the node +side collator signature checks.
The runtime must be upgraded to support the new primitives before any collator or node is allowed +to use the new candidate receipts format.
To ensure a smooth launch, a new node feature is required. +The feature acts as a signal for supporting the new candidate receipts on the node side and can +only be safely enabled if at least 2/3 + 1 of the validators are upgraded. Node implementations +need to decode the new candidate descriptor once the feature is enabled otherwise they might +raise disputes and get slashed.
Once the feature is enabled, the validators will skip checking the collator signature when +processing the candidate receipts and verify the CoreIndex and SessionIndex fields if +present in the receipt.
Any tooling that decodes UMP XCM messages needs an update to support or ignore the new UMP +messages, but they should be fine to decode the regular XCM messages that come before the +separator.
Forum discussion about a new CandidateReceipt format: +https://forum.polkadot.network/t/pre-rfc-discussion-candidate-receipt-format-v2/3738
The implementation is extensible and future-proof to some extent. With minimal or no breaking +changes, additional fields can be added in the candidate descriptor until the reserved space is +exhausted
At this point, there is a simple way to determine the version of the receipt, by testing for zeroed +reserved bytes in the descriptor. Future versions of the receipt can be implemented and identified +by using the version field of the descriptor introduced in this RFC.