diff --git a/README.md b/README.md
index e8bcd06e2..d55cbc7b1 100644
--- a/README.md
+++ b/README.md
@@ -86,8 +86,6 @@ Default localhost port configuration:
```env
GATSBY_WEBSITE_URL=http://localhost:8100
GATSBY_DOCS_URL=http://localhost:8200
-GATSBY_MARKETPLACE_URL=http://localhost:8300
-GATSBY_CAREERS_URL=https://careers.substrate.io
```
**Start development server**
diff --git a/config/menus.js b/config/menus.js
index fe1e02870..9bde95b39 100644
--- a/config/menus.js
+++ b/config/menus.js
@@ -1,4 +1,4 @@
-const { MARKETPLACE_URL, WEBSITE_URL, CAREERS_URL } = require('./webConsts.js');
+const { WEBSITE_URL } = require('./webConsts.js');
/* the main menu, ids of items must match
the submenu's key of this js object */
@@ -58,14 +58,6 @@ const developers = [
url: 'https://paritytech.github.io/substrate/master/sc_service/',
id: 'developers.rustdocs',
},
- {
- url: MARKETPLACE_URL,
- id: 'developers.marketplace',
- },
- {
- url: WEBSITE_URL + '/developers/playground/',
- id: 'developers.playground',
- },
{
url: WEBSITE_URL + '/developers/smart-contracts/',
id: 'developers.smart-contracts',
@@ -132,10 +124,6 @@ const opportunities = [
url: WEBSITE_URL + '/ecosystem/opportunities/grants',
id: 'ecosystem.opportunities.grants',
},
- {
- url: CAREERS_URL,
- id: 'ecosystem.opportunities.careers',
- },
];
const resources = [
diff --git a/config/siteMetadata.js b/config/siteMetadata.js
index 6b2ca8a85..9e090d5b3 100644
--- a/config/siteMetadata.js
+++ b/config/siteMetadata.js
@@ -1,5 +1,5 @@
const menus = require('./menus.js');
-const { WEBSITE_URL, DOCS_URL, MARKETPLACE_URL, CAREERS_URL } = require('./webConsts.js');
+const { WEBSITE_URL, DOCS_URL } = require('./webConsts.js');
module.exports = {
menus,
@@ -10,8 +10,6 @@ module.exports = {
siteUrl: DOCS_URL,
websiteUrl: WEBSITE_URL,
docsUrl: DOCS_URL,
- marketplaceUrl: MARKETPLACE_URL,
- careersUrl: CAREERS_URL,
author: 'Parity WebDev/W3F WebOps',
pressEmail: 'press@parity.io',
email: 'info@parity.io',
diff --git a/config/webConsts.js b/config/webConsts.js
index 577ba7830..014af96c5 100644
--- a/config/webConsts.js
+++ b/config/webConsts.js
@@ -1,11 +1,7 @@
const WEBSITE_URL = process.env.GATSBY_WEBSITE_URL;
const DOCS_URL = process.env.GATSBY_DOCS_URL;
-const MARKETPLACE_URL = process.env.GATSBY_MARKETPLACE_URL;
-const CAREERS_URL = process.env.GATSBY_CAREERS_URL;
module.exports = {
WEBSITE_URL,
DOCS_URL,
- MARKETPLACE_URL,
- CAREERS_URL,
};
diff --git a/content/locales/en/menus.json b/content/locales/en/menus.json
index 88ffc7f3b..2e668276f 100644
--- a/content/locales/en/menus.json
+++ b/content/locales/en/menus.json
@@ -14,8 +14,6 @@
"developers.home": "Home",
"developers.docs": "Docs",
"developers.rustdocs": "Rust Docs",
- "developers.marketplace": "Marketplace",
- "developers.playground": "Playground",
"developers.smart-contracts": "Smart Contracts",
"developers.substrate-connect": "Substrate Connect",
"developers.rococo-network": "Rococo Network",
@@ -32,7 +30,6 @@
"ecosystem.opportunities.hackathons": "Hackathons",
"ecosystem.opportunities.grants": "Grants",
- "ecosystem.opportunities.careers": "Careers",
"ecosystem.resources.seminar": "Substrate Seminar",
"ecosystem.resources.past-seminars": "Past Seminars",
diff --git a/content/md/en/docs/build/build-process.md b/content/md/en/docs/build/build-process.md
index d69bd7cbe..7929a0727 100644
--- a/content/md/en/docs/build/build-process.md
+++ b/content/md/en/docs/build/build-process.md
@@ -138,6 +138,6 @@ This option is primarily used for faster compile time when you don't need to upd
## Where to go next
-- [Wasm-builder README](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/utils/wasm-builder/README.md)
+- [Wasm-builder source](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/utils/wasm-builder/src/lib.rs)
- [Rust compilation options](https://doc.rust-lang.org/cargo/commands/cargo-build.html#compilation-options)
- [Discussion: Removing the native runtime](https://github.com/paritytech/substrate/issues/10579)
diff --git a/content/md/en/docs/build/genesis-configuration.md b/content/md/en/docs/build/genesis-configuration.md
index 26c236dcb..f398bcb92 100644
--- a/content/md/en/docs/build/genesis-configuration.md
+++ b/content/md/en/docs/build/genesis-configuration.md
@@ -4,6 +4,11 @@ description:
keywords:
---
+
+
⚠️ WARNING: This page contains outdated information. Please refer to the
Rust docs for the most up-to-date documentation on this topic.
+
+
+
The first block produced by any blockchain is referred to as the genesis block.
The hash associated with this block is the top-level parent of all blocks produced after that first block.
diff --git a/content/md/en/docs/build/origins.md b/content/md/en/docs/build/origins.md
index c0b9874c4..66d4da804 100644
--- a/content/md/en/docs/build/origins.md
+++ b/content/md/en/docs/build/origins.md
@@ -5,6 +5,10 @@ keywords:
- origins
---
+
+
⚠️ WARNING: This page contains outdated information. Please refer to the
Rust docs for the most up-to-date documentation on this topic.
+
+
The runtime origin is used by dispatchable functions to check where a call has come from.
## Raw origins
diff --git a/content/md/en/docs/build/pallet-coupling.md b/content/md/en/docs/build/pallet-coupling.md
index 4a1db10c1..9e900a4bc 100644
--- a/content/md/en/docs/build/pallet-coupling.md
+++ b/content/md/en/docs/build/pallet-coupling.md
@@ -6,6 +6,15 @@ keywords:
- pallet design
---
+
+
+ ⚠️ WARNING: This page contains potentially outdated information. Reading it might still be useful, yet we suggest taking it with a grain of salt.
+
+
+ Please refer to the `polkadot-sdk-docs` crate for the most up-to-date documentation on this topic.
+
+
+
The term **coupling** is often used to describe the degree to which two software modules depend on each other.
For example, in object-oriented programming tight coupling and loose coupling are used to describe the relationship between objects classes:
diff --git a/content/md/en/docs/build/remote-procedure-calls.md b/content/md/en/docs/build/remote-procedure-calls.md
index 32027e13e..ec2e49c23 100644
--- a/content/md/en/docs/build/remote-procedure-calls.md
+++ b/content/md/en/docs/build/remote-procedure-calls.md
@@ -6,6 +6,10 @@ keywords:
- frontend
---
+
+
⚠️ WARNING: This page may contain outdated information. Please refer to the
Rust docs for the most up-to-date documentation on this topic.
+
+
Remote procedure calls, or RPC methods, are a way for an external program—for example, a browser or front-end application—to communicate with a Substrate node.
In general, these methods enable an RPC client to connect to an RPC server endpoint to request some type of service.
For example, you might use an RPC method to read a stored value, submit a transaction, or request information about the chain a node is connected to.
diff --git a/content/md/en/docs/build/tx-weights-fees.md b/content/md/en/docs/build/tx-weights-fees.md
index 7baf13cd2..1a41272e7 100644
--- a/content/md/en/docs/build/tx-weights-fees.md
+++ b/content/md/en/docs/build/tx-weights-fees.md
@@ -237,12 +237,12 @@ use frame_support:: {
Pays::Yes,
},
weights::Weight,
+};
#[pallet::weight(FunctionOf(
|args: (&Vec,)| args.0.len().saturating_mul(10_000),
)
]
-
fn handle_users(origin, calls: Vec) {
// Do something per user
}
diff --git a/content/md/en/docs/deploy/keys-and-network-operations.md b/content/md/en/docs/deploy/keys-and-network-operations.md
index 900b333ed..db7fe5b9b 100644
--- a/content/md/en/docs/deploy/keys-and-network-operations.md
+++ b/content/md/en/docs/deploy/keys-and-network-operations.md
@@ -36,12 +36,12 @@ Session keys are private online keys that are used by validators to sign consens
Session keys must be available online to enable the validator to perform certain network operations.
These keys aren't used to control funds and they should only be used for their intended purpose.
-They can be changed regularly
+They can be changed regularly.
To create session keys, a validator node operator must use a controller account too generate a certificate signed with the session's public key.
The certificate attests that the key acts on behalf of the validator's staking account and nominators.
After creating the session key, the validator node operator informs the chain that this key represents the controller key by
publishing the session certificate in a transaction on the chain.
-In most cases, node operators use the [Session](https://paritytech.github.io/substrate/master/pallet_session/index.html)) pallet to manage their session keys.
+In most cases, node operators use the [Session](https://paritytech.github.io/substrate/master/pallet_session/index.html) pallet to manage their session keys.
The [`SessionKeys`](https://paritytech.github.io/substrate/master/sp_session/index.html)
trait is a generic, indexable type and you can declare any number of session keys in the runtime.
diff --git a/content/md/en/docs/learn/accounts-addresses-keys.md b/content/md/en/docs/learn/accounts-addresses-keys.md
index 6e32550b1..a7c538598 100644
--- a/content/md/en/docs/learn/accounts-addresses-keys.md
+++ b/content/md/en/docs/learn/accounts-addresses-keys.md
@@ -20,7 +20,7 @@ The secret seed phrase is important because it can be used to recover access to
For most networks, the **public key** associated with an account is how that account is identified on the network and some form of it is used as the destination address for transactions.
However, Substrate-based chains use the underlying public key to derive one or more **public addresses**.
-Instead of using the public key directly, Substrate allows you generate multiple addresses and address formats for an account.
+Instead of using the public key directly, Substrate allows you to generate multiple addresses and address formats for an account.
## Address encoding and chain-specific addresses
@@ -74,7 +74,7 @@ For more information about working with generic types, see [Rust for Substrate](
## Specialized accounts
-As a flexible and module framework for blockchain development, Substrate itself doesn't require you define or use any specific type of accounts.
+As a flexible and module framework for blockchain development, Substrate itself doesn't require you to define or use any specific type of accounts.
However, different chains can implement different rules for how accounts and the keys that control them are used.
For example, you might implement specialized accounts if your application requires:
diff --git a/content/md/en/docs/learn/blockchain-basics.md b/content/md/en/docs/learn/blockchain-basics.md
index d7b095479..b97d991b7 100644
--- a/content/md/en/docs/learn/blockchain-basics.md
+++ b/content/md/en/docs/learn/blockchain-basics.md
@@ -108,5 +108,3 @@ You can explore the following resources to learn more.
- [Build a local blockchain](/tutorials/build-a-blockchain/build-local-blockchain/)
- [Simulate a network](/tutorials/build-a-blockchain/simulate-network/)
- [Add trusted nodes](/tutorials/build-a-blockchain/add-trusted-nodes/)
-
-If you prefer to explore code directly, you can start building in the [Substrate Playground](/playground/) or consult the API reference to get details about the Rust crates you use.
diff --git a/content/md/en/docs/learn/light-clients-in-substrate-connect.md b/content/md/en/docs/learn/light-clients-in-substrate-connect.md
index db4a718ec..45b6cff20 100644
--- a/content/md/en/docs/learn/light-clients-in-substrate-connect.md
+++ b/content/md/en/docs/learn/light-clients-in-substrate-connect.md
@@ -43,7 +43,7 @@ A few of the key benefits include:
You can use Substrate Connect to connect to any Substrate-based blockchain.
However, you must specify the correct name of the chain that you want to connect to.
-There are a few well-known chain names that are defined for the [`WellKnownChain`](https://paritytech.github.io/substrate-connect/api/enums/connect_src.WellKnownChain.html) enumeration type.
+There are a few well-known chain names that are defined for the [`WellKnownChain`](https://paritytech.github.io/substrate-connect/api/enums/_substrate_connect.WellKnownChain.html) enumeration type.
You can connect to the following public blockchain networks using the name listed:
diff --git a/content/md/en/docs/learn/offchain-operations.md b/content/md/en/docs/learn/offchain-operations.md
index 9fa41956f..2161626d1 100644
--- a/content/md/en/docs/learn/offchain-operations.md
+++ b/content/md/en/docs/learn/offchain-operations.md
@@ -4,6 +4,15 @@ description: Highlights how you can integrate data from offchain sources into th
keywords:
---
+
+
+ ⚠️ WARNING: This page contains potentially outdated information. Reading it might still be useful, yet we suggest taking it with a grain of salt.
+
+
+ Please refer to the `polkadot-sdk-docs` crate for the most up-to-date documentation on this topic.
+
+
+
There are many use cases where you might want to query data from an offchain source or process data without using on-chain resources before updating the on-chain state.
The conventional way of incorporating offchain data involves connecting to [oracles](/reference/glossary#oracle) to supply the data from some traditional source.
Although using oracles is one approach to working with offchain data sources, there are limitations to the security, scalability, and infrastructure efficiency that oracles can provide.
diff --git a/content/md/en/docs/learn/runtime-development.md b/content/md/en/docs/learn/runtime-development.md
index 67b66c68a..a86ad8b89 100644
--- a/content/md/en/docs/learn/runtime-development.md
+++ b/content/md/en/docs/learn/runtime-development.md
@@ -139,7 +139,6 @@ pub mod pallet {
// Declare the pallet type
// This is a placeholder to implement traits and methods.
#[pallet::pallet]
- #[pallet::generate_store(pub(super) trait Store)]
pub struct Pallet(_);
// Add the runtime configuration trait
diff --git a/content/md/en/docs/learn/rust-basics.md b/content/md/en/docs/learn/rust-basics.md
index fae3279fa..5ac29bc48 100644
--- a/content/md/en/docs/learn/rust-basics.md
+++ b/content/md/en/docs/learn/rust-basics.md
@@ -17,7 +17,7 @@ Being the language of choice for Substrate, Rust is a highly performant programm
## Rust in Substrate
-In the [Architecture]() section, you will learn that Substrate is made of two distinct architectural components: the outer node and the runtime.
+In the [Architecture](/learn/architecture/) section, you will learn that Substrate is made of two distinct architectural components: the outer node and the runtime.
While more complex features in Rust such as multithreading and asynchronous Rust are used in the outer node code, they aren't directly exposed to runtime engineers, making it easier for runtime engineers to focus on the business logic of their node.
Generally, depending on their focus, developers should expect to know:
@@ -40,7 +40,7 @@ These macros allow you to focus on writing idiomatic Rust and application-specif
Rust macros are a powerful tool to help ensure certain requirements are met (without re-writing code) such as the logic to be formatted in a specific way, specific checks are made, or some logic consists of specific data structures.
This is especially useful to help developers write code that can integrate with the complexity of a Substrate runtime.
-For example, the `#[frame_system::pallet]` macro is required in all FRAME pallets to help you correctly implement certain required attributes-such as storage items or externally callable functions-and make it compatible with the build process in `construct_runtime`.
+For example, the `#[frame_support::pallet]` macro is required in all FRAME pallets to help you correctly implement certain required attributes-such as storage items or externally callable functions-and make it compatible with the build process in `construct_runtime`.
Developing Substrate runtimes involves heavy use of Rust's attribute macros, which come in two flavors: derive attributes and custom attributes.
When you're getting started with Substrate, it isn't so important to know exactly how they work, but rather to know that they exist that they empower you to write correct runtime code.
diff --git a/content/md/en/docs/learn/transaction-lifecycle.md b/content/md/en/docs/learn/transaction-lifecycle.md
index 9f85e1c1b..fdb419855 100644
--- a/content/md/en/docs/learn/transaction-lifecycle.md
+++ b/content/md/en/docs/learn/transaction-lifecycle.md
@@ -81,8 +81,8 @@ If a transaction is invalid—for example, because it is too large or doesn't co
A transaction might be rejected for any of the following reasons:
- The transaction has already been included in a block so it is dropped from the verifying queue.
-- The transaction's signature is invalid, so it is immediately be rejected.
-- The transaction is too large to fit in the current block, so it is be put back in a queue for a new verification round.
+- The transaction's signature is invalid, so it is immediately rejected.
+- The transaction is too large to fit in the current block, so it is put back in a queue for a new verification round.
## Transactions ordered by priority
@@ -136,7 +136,7 @@ Before committing any state changes to storage, the runtime logic should perform
Note that [events](/build/events-and-errors/) are also written to storage.
Therefore, the runtime logic should not emit an event before performing the complementary actions.
-If a transaction fails after an event is emitted, the event is not be reverted.
+If a transaction fails after an event is emitted, the event is not reverted.
### Finalizing a block
diff --git a/content/md/en/docs/learn/what-can-you-build.md b/content/md/en/docs/learn/what-can-you-build.md
index 490a6bbef..31245c79c 100644
--- a/content/md/en/docs/learn/what-can-you-build.md
+++ b/content/md/en/docs/learn/what-can-you-build.md
@@ -92,7 +92,7 @@ Individual pallets are typically easy to develop by using FRAME and easy for Sub
### Writing correct code
-It's worth noting that pallets don't inherently provide any of type of protection or safeguards that smart contracts provide.
+It's worth noting that pallets don't inherently provide any type of protection or safeguards that smart contracts provide.
With pallets, you control the logic available for runtime developers to implement.
You provide the methods, storage items, events, and errors that your module requires.
Pallets don't inherently introduce a fee or metering system.
@@ -101,7 +101,7 @@ This lack of built-in safeguards implies that you have a great deal of responsib
### Pallets outside of runtime development
-Often, writing a pallet is the gateway to runtime development, giving you the opportunity to experiment with existing pallets and coding patterns without building a compete blockchain application.
+Often, writing a pallet is the gateway to runtime development, giving you the opportunity to experiment with existing pallets and coding patterns without building a complete blockchain application.
Individual pallets also provide an alternative way you can contribute to a project without writing your own application.
Although writing and testing pallets is typically a stepping stone to building larger scale application, there are many examples of the value individual pallets can have to the ecosystem as a whole.
@@ -170,7 +170,7 @@ The only requirement is that your parachain or parathread must be compatible wit
### Planning parachain resource requirements
-As a parachain, your project can offer functionality to a broader community in a more secure way that a private chain or a solo chain.
+As a parachain, your project can offer functionality to a broader community in a more secure way than a private chain or a solo chain.
However, if you want to build a production-ready parachain, you should keep the following additional requirements in mind:
- You'll need a development team with sufficient skills and experience, whether that means programming in Rust or a background in UX design.
@@ -196,7 +196,7 @@ For example, building a parachain might be the best option for the following use
- Digital wallets
- Internet of things (IOT) applications
- Gaming applications
-- Web 3.0 infrastructureM
+- Web 3.0 infrastructure
### Explore building a parachain
diff --git a/content/md/en/docs/learn/xcm-communication.md b/content/md/en/docs/learn/xcm-communication.md
index 3a16dff2b..31f9798c8 100644
--- a/content/md/en/docs/learn/xcm-communication.md
+++ b/content/md/en/docs/learn/xcm-communication.md
@@ -83,7 +83,7 @@ There are several other registers in the XCVM to handle specific tasks.
For example, there's a surplus weight register to store any overestimation of fees and a refunded weight register to store the portion of surplus weight that has been refunded.
In general, you can't modify the values stored in the registers directly.
Instead, values are set when the XCM executor program starts and are manipulated by specific instructions, under certain circumstances, or according to certain rules.
-FOr more information about what's contained in each register, see [XCM reference](/reference/xcm-reference/).
+For more information about what's contained in each register, see [XCM reference](/reference/xcm-reference/).
### Configuration
diff --git a/content/md/en/docs/maintain/runtime-upgrades.md b/content/md/en/docs/maintain/runtime-upgrades.md
index c66a34d00..d43bff246 100644
--- a/content/md/en/docs/maintain/runtime-upgrades.md
+++ b/content/md/en/docs/maintain/runtime-upgrades.md
@@ -19,7 +19,7 @@ If a runtime upgrade requires changes to the existing state, it is likely to req
In [Build process](/main-docs/build/build-process/), you learned that compiling a node generated both a platform-native binary and a WebAssembly binary and that selecting which binary to use at different points in the block production process can be controlled by execution strategy command-line options.
The component that selects the runtime execution environment to communicate with is called the **executor**.
-Although you can override the default execution strategies for custom scenarios, in most cases, or the executor select the appropriate binary to use by evaluating the following information for both the native and WebAssembly runtime binaries:
+Although you can override the default execution strategies for custom scenarios, in most cases the executor select the appropriate binary to use by evaluating the following information for both the native and WebAssembly runtime binaries:
- `spec_name`
- `spec_version`
diff --git a/content/md/en/docs/reference/frame-macros.md b/content/md/en/docs/reference/frame-macros.md
index 9caea5157..800ebd726 100644
--- a/content/md/en/docs/reference/frame-macros.md
+++ b/content/md/en/docs/reference/frame-macros.md
@@ -3,6 +3,9 @@ title: FRAME macros
description:
keywords:
---
+
+
⚠️ WARNING: This section contains outdated information. Please refer to the
Rust docs for the most up-to-date documentation on this topic.
+
Substrate uses customized [Rust macros](https://doc.rust-lang.org/book/ch19-06-macros.html) to generate code and aggregate the logic from the pallets you implement for a runtime.
These runtime macros allow you to focus on your runtime logic rather than spending time on encoding and decoding on-chain variables or duplicating the code required for [basic blockchain development](/learn/runtime-development#core-primitives).
@@ -253,15 +256,6 @@ For example:
pub struct Pallet(_);
```
-This macro can generate the `Store` trait to contain an associated type for each storage item if you provide the `#[pallet::generate_store($vis trait Store)]` attribute macro.
-
-For example:
-
-```rust
-#[pallet::pallet]
-pub struct Pallet(_);
-```
-
For more information about working with storage and this macro, see the [macro expansion](https://paritytech.github.io/substrate/master/frame_support/attr.pallet.html#macro-expansion-1) added to the `struct Pallet` definition.
### #[pallet::without\_storage\_info]
@@ -276,7 +270,6 @@ To use it, add the `#[pallet::without_storage_info]` attribute to the pallet str
```rust
#[pallet::pallet]
-#[pallet::generate_store(pub(super) trait Store)]
#[pallet::without_storage_info]
pub struct Pallet(_);
```
@@ -391,9 +384,9 @@ $vis type $StorageName<$some_generic> $optional_where_clause
For more information, see the Rust documentation for [pallet::storage](https://paritytech.github.io/substrate/master/frame_support/attr.pallet.html#storage-palletstorage-optional) and the following storage data structures:
-- [StorageDoubleMap](https://paritytech.github.io/substrate/master/frame_support/pallet_prelude/struct.StorageDoubleMap.html)
-- [StorageMap](https://paritytech.github.io/substrate/master/frame_support/pallet_prelude/struct.StorageMap.html#implementations)
-- [StorageValue](https://paritytech.github.io/substrate/master/frame_support/pallet_prelude/struct.StorageValue.html)
+- [StorageDoubleMap](https://paritytech.github.io/polkadot-sdk/master/frame_support/storage/types/struct.StorageDoubleMap.html)
+- [StorageMap](https://paritytech.github.io/polkadot-sdk/master/frame_support/storage/types/struct.StorageMap.html)
+- [StorageValue](https://paritytech.github.io/polkadot-sdk/master/frame_support/storage/types/struct.StorageValue.html)
### #[pallet::type_value]
diff --git a/content/md/en/docs/reference/how-to-guides/consensus-models/create-a-hybrid-node.md b/content/md/en/docs/reference/how-to-guides/consensus-models/create-a-hybrid-node.md
index 0fedff806..2873c0fb8 100644
--- a/content/md/en/docs/reference/how-to-guides/consensus-models/create-a-hybrid-node.md
+++ b/content/md/en/docs/reference/how-to-guides/consensus-models/create-a-hybrid-node.md
@@ -29,7 +29,7 @@ Customize the consensus mechanisms of a Substrate chain.
We begin by creating the block import for Grandpa.
In addition to the block import itself, we get back a `grandpa_link`.
This link is a channel over which the block import can communicate with the background task that actually casts Grandpa votes.
-The [details of the Grandpa protocol](https://research.web3.foundation/en/latest/polkadot/finality.html) are beyond the scope of this guide.
+The [details of the Grandpa protocol](https://research.web3.foundation/Polkadot/protocols/finality) are beyond the scope of this guide.
In `node/src/service.rs`, create the Grandpa block import:
diff --git a/content/md/en/docs/reference/how-to-guides/index.md b/content/md/en/docs/reference/how-to-guides/index.md
index faf607fd9..2c29d206a 100644
--- a/content/md/en/docs/reference/how-to-guides/index.md
+++ b/content/md/en/docs/reference/how-to-guides/index.md
@@ -34,8 +34,6 @@ See the following guides for help with benchmarking and weight configurations.
- [Calculate fees](/reference/how-to-guides/weights/calculate-fees/)
- [Add benchmarks](/reference/how-to-guides/weights/add-benchmarks/)
-- [Use custom weights](/reference/how-to-guides/weights/use-custom-weights/)
-- [Use conditional weights](/reference/how-to-guides/weights/use-conditional-weights/)
## Testing
diff --git a/content/md/en/docs/reference/how-to-guides/offchain-workers/index.md b/content/md/en/docs/reference/how-to-guides/offchain-workers/index.md
index 82725688a..5b93d9815 100644
--- a/content/md/en/docs/reference/how-to-guides/offchain-workers/index.md
+++ b/content/md/en/docs/reference/how-to-guides/offchain-workers/index.md
@@ -4,13 +4,22 @@ description: Quick reference guides that illustrate how to use offchain workers.
keywords:
---
+
+
+ ⚠️ WARNING: This page contains potentially outdated information. Reading it might still be useful, yet we suggest taking it with a grain of salt.
+
+
+ Please refer to the `polkadot-sdk-docs` crate for the most up-to-date documentation on this topic.
+
+
+
The _How-to_ guides in the _Offchain workers_ category illustrate common use cases for offchain operations.
- [Make offchain HTTP requests](/reference/how-to-guides/offchain-workers/offchain-http-requests/)
- [Offchain local storage](/reference/how-to-guides/offchain-workers/offchain-local-storage/)
- [Offchain indexing](/reference/how-to-guides/offchain-workers/offchain-indexing/)
-It is important to note that offchain storage is separate from on-chain storage.
+It is important to note that offchain storage is separate from on-chain storage.
You can't send data collected or processed by an offchain worker directly to on-chain storage.
To store any data collected or processed by an offchain worker—that is, to modify the state of the chain—you must enable the offchain worker to send transactions that modify the on-chain storage system.
-For examples of how to prepare an offchain worker to send transactions, see [Add offchain workers](/tutorials/build-application-logic/add-offchain-workers/).
\ No newline at end of file
+For examples of how to prepare an offchain worker to send transactions, see [Add offchain workers](/tutorials/build-application-logic/add-offchain-workers/).
diff --git a/content/md/en/docs/reference/how-to-guides/offchain-workers/offchain-http-requests.md b/content/md/en/docs/reference/how-to-guides/offchain-workers/offchain-http-requests.md
index a35de4b48..d49818e6e 100644
--- a/content/md/en/docs/reference/how-to-guides/offchain-workers/offchain-http-requests.md
+++ b/content/md/en/docs/reference/how-to-guides/offchain-workers/offchain-http-requests.md
@@ -9,6 +9,15 @@ keywords:
- requests
---
+
+
+ ⚠️ WARNING: This page contains potentially outdated information. Reading it might still be useful, yet we suggest taking it with a grain of salt.
+
+
+ Please refer to the `polkadot-sdk-docs` crate for the most up-to-date documentation on this topic.
+
+
+
Because most blockchains can't access data that's hosted on servers outside of their own network, they typically use external third-party services—**oracles**—to pull information in from or push information out to locations that are outside of the network.
For Substrate-based blockchains, **offchain workers** (OCW) provide similar capabilities, but with the advantage of being able to access on-chain state.
diff --git a/content/md/en/docs/reference/how-to-guides/offchain-workers/offchain-indexing.md b/content/md/en/docs/reference/how-to-guides/offchain-workers/offchain-indexing.md
index 4b5ff5cf8..acfb76126 100644
--- a/content/md/en/docs/reference/how-to-guides/offchain-workers/offchain-indexing.md
+++ b/content/md/en/docs/reference/how-to-guides/offchain-workers/offchain-indexing.md
@@ -7,6 +7,15 @@ keywords:
- indexing
---
+
+
+ ⚠️ WARNING: This page contains potentially outdated information. Reading it might still be useful, yet we suggest taking it with a grain of salt.
+
+
+ Please refer to the `polkadot-sdk-docs` crate for the most up-to-date documentation on this topic.
+
+
+
This guide will step you through how to pass data from an extrinsic to an offchain worker without writing to storage.
Occasionally on-chain extrinsics need to pass data to offchain workers with predictable write behavior.
diff --git a/content/md/en/docs/reference/how-to-guides/offchain-workers/offchain-local-storage.md b/content/md/en/docs/reference/how-to-guides/offchain-workers/offchain-local-storage.md
index 3a5373178..b5d0ebf9f 100644
--- a/content/md/en/docs/reference/how-to-guides/offchain-workers/offchain-local-storage.md
+++ b/content/md/en/docs/reference/how-to-guides/offchain-workers/offchain-local-storage.md
@@ -8,6 +8,15 @@ keywords:
- storage
---
+
+
+ ⚠️ WARNING: This page contains potentially outdated information. Reading it might still be useful, yet we suggest taking it with a grain of salt.
+
+
+ Please refer to the `polkadot-sdk-docs` crate for the most up-to-date documentation on this topic.
+
+
+
This guide will teach you how to use an offchain worker to save retrieved data in local storage for future access.
In the last section, we mentioned that offchain workers (**OCW** for short) cannot modify the blockchain state directly, so they have to submit transactions to save their computed results back on-chain.
diff --git a/content/md/en/docs/reference/how-to-guides/pallet-design/implement-lockable-currency.md b/content/md/en/docs/reference/how-to-guides/pallet-design/implement-lockable-currency.md
index d6ffd24d6..5a552830d 100644
--- a/content/md/en/docs/reference/how-to-guides/pallet-design/implement-lockable-currency.md
+++ b/content/md/en/docs/reference/how-to-guides/pallet-design/implement-lockable-currency.md
@@ -9,7 +9,7 @@ keywords:
---
This guide shows you how to write a pallet that allows users to lock funds for staking and voting.
-The [`LockableCurrency`](https://paritytech.github.io/substrate/master/frame_support/traits/trait.LockableCurrency.html) trait is useful in the context of economic systems that enforce accountability by collateralizing fungible resources.
+The [`LockableCurrency`](https://paritytech.github.io/polkadot-sdk/master/frame_support/traits/tokens/currency/trait.LockableCurrency.html) trait is useful in the context of economic systems that enforce accountability by collateralizing fungible resources.
You can use the Substrate [staking pallet](https://paritytech.github.io/substrate/master/pallet_staking/index.html) to manage locked funds in time-based increments.
In this guide, we will implement the `set_lock`, `extend_lock` and `remove_lock` methods in our own custom pallet.
@@ -22,7 +22,7 @@ You can use the template pallet in the [node template](https://github.com/substr
## Declare the necessary dependencies
-The methods from [`LockableCurrency`](https://paritytech.github.io/substrate/master/frame_support/traits/trait.LockableCurrency.html) require us to import a few traits from `frame_support`.
+The methods from [`LockableCurrency`](https://paritytech.github.io/polkadot-sdk/master/frame_support/traits/tokens/currency/trait.LockableCurrency.html) require us to import a few traits from `frame_support`.
1. Ensure you have the following traits imported in the top section of your pallet:
@@ -162,5 +162,5 @@ The required methods are:
## Related material
- [Currency trait](https://paritytech.github.io/substrate/master/frame_support/traits/tokens/currency/trait.Currency.html)
-- [LockableCurrency](https://paritytech.github.io/substrate/master/frame_support/traits/trait.LockableCurrency.html)
-- [LockIdentifier](https://paritytech.github.io/substrate/master/frame_support/traits/type.LockIdentifier.html)
+- [LockableCurrency](https://paritytech.github.io/polkadot-sdk/master/frame_support/traits/tokens/currency/trait.LockableCurrency.html)
+- [LockIdentifier](https://paritytech.github.io/polkadot-sdk/master/frame_support/traits/tokens/currency/type.LockIdentifier.html)
diff --git a/content/md/en/docs/reference/how-to-guides/pallet-design/incorporate-randomness.md b/content/md/en/docs/reference/how-to-guides/pallet-design/incorporate-randomness.md
index c3d476cf1..d63ead82b 100644
--- a/content/md/en/docs/reference/how-to-guides/pallet-design/incorporate-randomness.md
+++ b/content/md/en/docs/reference/how-to-guides/pallet-design/incorporate-randomness.md
@@ -30,7 +30,7 @@ The guide also illustrates how to add entropy to the randomness value by assigni
```rust
#[pallet::config]
pub trait frame_system::Config {
- type MyRandomness: Randomness;
+ type MyRandomness: Randomness>;
}
```
diff --git a/content/md/en/docs/reference/how-to-guides/pallet-design/use-loose-coupling.md b/content/md/en/docs/reference/how-to-guides/pallet-design/use-loose-coupling.md
index acfbd81fd..0c9ae3286 100644
--- a/content/md/en/docs/reference/how-to-guides/pallet-design/use-loose-coupling.md
+++ b/content/md/en/docs/reference/how-to-guides/pallet-design/use-loose-coupling.md
@@ -4,6 +4,15 @@ description:
keywords:
---
+
+
+ ⚠️ WARNING: This page contains potentially outdated information. Reading it might still be useful, yet we suggest taking it with a grain of salt.
+
+
+ Please refer to the `polkadot-sdk-docs` crate for the most up-to-date documentation on this topic.
+
+
+
This guide demonstrates how to reuse a function or type from one pallet in another pallet using a technique called **loose coupling**.
Loose coupling enables you to reuse part of the logic defined in an external pallet inside your current pallet.
@@ -27,28 +36,28 @@ In this example, you are reusing `Currency` trait information from the `frame-su
To configure your workspace manifest:
1. Open a terminal shell on your computer and navigate to the root directory for your project.
-
+
2. Open the manifest `Cargo.toml` file in a text editor.
-
+
3. Add the you are loosely coupling with to the dependencies.
-
+
For example:
-
+
```text
[dependencies]
frame-support = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0"}
```
-
+
Note that you should use the same branch and version information for all of the pallets to ensure that the imported pallets are compatible with each other.
Using pallets from different branches can result in compiler errors.
This example illustrates adding the `frame-support` pallet to the `Cargo.toml` file if the other pallets use `branch = "polkadot-v1.0.0"`.
-
+
Because the build process compiles both a standard binary and the WebAssembly target, you must also include `frame-support/std` in the features for your pallet.
1. Add `frame-support/std` to the `std` features for your pallet.
-
+
For example:
-
+
```text
[features]
default = ["std"]
@@ -66,11 +75,11 @@ In this example, you want to use the [`Currency`](https://paritytech.github.io/s
To import a trait from another pallet:
1. Open a terminal shell on your computer and navigate to the root directory for your project.
-
+
2. Open the `src/lib.rs` file for your current pallet in a text editor.
-
+
3. Import the `Currency` trait by adding the following line:
-
+
```rust
use frame_support::traits::Currency;
```
@@ -84,13 +93,13 @@ The next step is to create a type that is bound by the type you want to expose i
To update the configuration trait for your pallet:
1. Open a terminal shell on your computer and navigate to the root directory for your project.
-
+
2. Open the `src/lib.rs` file for your current pallet in a text editor.
-
+
3. Create a type to use in your pallet that is bound by the type you want to access in the external pallet:
For example:
-
+
```rust
pub trait Config: frame_system::Config {
// --snip--
@@ -101,14 +110,14 @@ To update the configuration trait for your pallet:
```
5. Use a method that the trait of your loosely-coupled pallet provides with the type you've created to access the method.
-
+
For example:
```rust
// Use the getter from `my-pallet`
let total_balance = T::LocalCurrency::total_issuance();
```
-
+
In this example, [`total_issuance`](https://paritytech.github.io/substrate/master/frame_support/traits/tokens/currency/trait.Currency.html#tymethod.total_issuance) is a method that the `Currency` trait exposes from the `frame_support` pallet.
1. Save your changes and close the `src/lib.rs` file for your project.
@@ -120,11 +129,11 @@ After you have completed the updates in your project, you are ready to implement
To update the runtime configuration for your pallet:
1. Open a terminal shell on your computer and navigate to the root directory for the node template.
-
+
2. Open the `runtime/src/lib.rs` file in a text editor.
1. Add the runtime configuration for your pallet to specify the `LocalCurrency` type to use the implementation defined for the `Balances` pallet.
-
+
```rust
impl my_pallet::Config for Runtime {
type LocalCurrency = Balances;
@@ -132,7 +141,7 @@ To update the runtime configuration for your pallet:
```
1. Check the `Balances` definition inside `construct_runtime!` macro.
-
+
```rust
construct_runtime! (
pub enum Runtime where
@@ -146,13 +155,13 @@ To update the runtime configuration for your pallet:
```
In this example, your pallet can inherit the implementation of the `Currency` trait from the [`pallet_balances`](https://paritytech.github.io/substrate/master/pallet_balances/index.html#implementations-1) pallet and access methods from the loosely-coupled `frame-support` pallet.
-
- By default, the `construct_runtime!` macro includes all pallet attributes for all pallets listed in the macro definition.
+
+ By default, the `construct_runtime!` macro includes all pallet attributes for all pallets listed in the macro definition.
## Examples
- [`EnsureOrigin`](https://paritytech.github.io/substrate/master/frame_support/traits/trait.EnsureOrigin.html) trait in the [Democracy pallet](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/democracy/src/lib.rs#L298-L335)
-- [Weighting methods](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/identity/src/weights.rs#L46-L64) in the [Identity pallet](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/identity/src/lib.rs#L149-L151).
+- [Weighting methods](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/identity/src/weights.rs#L46-L64) in the [Identity pallet](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/identity/src/lib.rs#L149-L151).
-[`KeyOwnerProofSystem`](https://paritytech.github.io/substrate/master/frame_support/traits/trait.KeyOwnerProofSystem.html) in [Grandpa pallet](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/grandpa/src/lib.rs#L106).
## Resources
diff --git a/content/md/en/docs/reference/how-to-guides/pallet-design/use-tight-coupling.md b/content/md/en/docs/reference/how-to-guides/pallet-design/use-tight-coupling.md
index 73c55f0cc..c2031b9ac 100644
--- a/content/md/en/docs/reference/how-to-guides/pallet-design/use-tight-coupling.md
+++ b/content/md/en/docs/reference/how-to-guides/pallet-design/use-tight-coupling.md
@@ -4,6 +4,15 @@ description:
keywords:
---
+
+
+ ⚠️ WARNING: This page contains potentially outdated information. Reading it might still be useful, yet we suggest taking it with a grain of salt.
+
+
+ Please refer to the `polkadot-sdk-docs` crate for the most up-to-date documentation on this topic.
+
+
+
Tight coupling two pallets is a technique to write pallets that re-use types and methods from an existing pallet.
It is useful for breaking up some runtime logic into separate pallets that need access to common type and methods.
diff --git a/content/md/en/docs/reference/how-to-guides/parachains/connect-to-a-relay-chain.md b/content/md/en/docs/reference/how-to-guides/parachains/connect-to-a-relay-chain.md
index e0fc92b73..dc8402838 100644
--- a/content/md/en/docs/reference/how-to-guides/parachains/connect-to-a-relay-chain.md
+++ b/content/md/en/docs/reference/how-to-guides/parachains/connect-to-a-relay-chain.md
@@ -180,8 +180,8 @@ pub const fn deposit(items: u32, bytes: u32) -> Balance {}
You can find this function for each relay chain in the Polkadot repository.
For example:
-- [Kusama](https://github.com/paritytech/polkadot-sdk/blob/master/polkadot/runtime/kusama/constants/src/lib.rs)
-- [Polkadot](https://github.com/paritytech/polkadot-sdk/blob/master/polkadot/runtime/polkadot/constants/src/lib.rs)
+- [Kusama](https://github.com/polkadot-fellows/runtimes/blob/main/relay/kusama/constants/src/lib.rs)
+- [Polkadot](https://github.com/polkadot-fellows/runtimes/blob/main/relay/polkadot/constants/src/lib.rs)
- [Rococo](https://github.com/paritytech/polkadot-sdk/blob/master/polkadot/runtime/rococo/constants/src/lib.rs)
- [Westend](https://github.com/paritytech/polkadot-sdk/blob/master/polkadot/runtime/westend/constants/src/lib.rs)
diff --git a/content/md/en/docs/reference/how-to-guides/weights/index.md b/content/md/en/docs/reference/how-to-guides/weights/index.md
index 8285f4d88..54f710963 100644
--- a/content/md/en/docs/reference/how-to-guides/weights/index.md
+++ b/content/md/en/docs/reference/how-to-guides/weights/index.md
@@ -8,5 +8,3 @@ The _How-to_ guides in the _Weights_ category illustrate use benchmarks and weig
- [Calculate fees](/reference/how-to-guides/weights/calculate-fees/)
- [Add benchmarks](/reference/how-to-guides/weights/add-benchmarks/)
-- [Use custom weights](/reference/how-to-guides/weights/use-custom-weights/)
-- [Use conditional weights](/reference/how-to-guides/weights/use-conditional-weights/)
diff --git a/content/md/en/docs/reference/how-to-guides/weights/use-conditional-weights.md b/content/md/en/docs/reference/how-to-guides/weights/use-conditional-weights.md
deleted file mode 100644
index 58020cb07..000000000
--- a/content/md/en/docs/reference/how-to-guides/weights/use-conditional-weights.md
+++ /dev/null
@@ -1,124 +0,0 @@
----
-title: Use conditional weights
-description:
-keywords:
- - weights
- - benchmarking
- - runtime
----
-
-Substrate provides a mechanism known as [transaction weighting](/build/tx-weights-fees) to quantify the resources consumed while executing a transaction.
-Typically, we use the weight functions returned from our benchmarking for this.
-But Substrate also allow us to apply a totally different weight function based on certain condition.
-We will walk through an example in this guide.
-Once defined, it can be used directly in your pallet, written as such:
-
-`#[pallet::weight(Conditional(\)`
-
-## Objectives
-
-- Create and use custom weighting in your pallet.
-
-- Apply different weight functions based on certain condition on computing extrinsic's weight value.
-
-Here are the different traits we'll be implementing:
-
-- [\`WeighData\`](https://paritytech.github.io/substrate/master/frame_support/weights/trait.WeighData.html#): Weigh the data in a function.
- \`pallet::weight\` expects whatever implements \`WeighData\` to replace \`T\` with a tuple of the dispatch arguments.
-- [\`PaysFee\`](https://paritytech.github.io/substrate/master/frame_support/weights/trait.PaysFee.html): Designate whether the dispatch pays a fee or not.
-- [\`ClassifyDispatch\`](https://paritytech.github.io/substrate/master/frame_support/weights/trait.ClassifyDispatch.html): A way to tell the runtime about the type of dispatch being made.
-
-## Write the Weight struct
-
-1. Open `lib.rs` file for your pallet in a text editor.
-
-1. Import `DispatchClass` and `Pays` by declaring `use frame_support::dispatch::{DispatchClass, Pays}`.
-
-1. Import `weights` primitives into the pallet.
-
- ```rust
- use frame_support:: {
- dispatch::{DispatchClass, Pays},
- },
- weights::Weight,
-
-1. Declare a struct called `Conditional` and write an implementation of `WeighData` for `Conditional` where the first parameter is the condition that evaluates to a boolean value.
-
- In the following example, if the condition is true, the weight will be linear to the input.
- Otherwise the weight will be a constant.
-
- ```rust
- pub struct Conditional(u32);
- impl WeighData<(&bool, &u32)> for Conditional {
- fn weigh_data(&self, (switch, val): (&bool, &u32)) -> Weight {
-
- // If the first parameter is true, then the weight is linear in the second parameter.
- if *switch {
- val.saturating_mul(self.0)
- }
- // Otherwise the weight is constant.
- else {
- self.0
- }
- }
- }
- ```
-
-## Classify dispatch calls
-
-Add `dispatch::{ClassifyDispatch, DispatchClass, Pays}` to your pallet's `frame_support` imports.
-Since this implementation requires a [`DispatchClass`](https://paritytech.github.io/substrate/master/frame_support/dispatch/enum.DispatchClass.html), use `default` to classify all calls as normal:
-
-1. Open `lib.rs` file for your pallet in a text editor.
-
-1. Import `DispatchClass` and `Pays` by declaring `use frame_support::dispatch::{DispatchClass, Pays}`.
-
- ```rust
- use frame_support::dispatch::{ClassifyDispatch, DispatchClass, Pays};
- // -- snip --
-
- // Implement ClassifyDispatch
- impl ClassifyDispatch for Conditional {
- fn classify_dispatch(&self, _: T) -> DispatchClass {
- Default::default()
- }
- }
- ```
-
-## Implement Pays
-
-Specify how `Pays` is used for the custom `WeighData` struct.
-Setting this to `true` require the caller of this dispatch to pay a fee:
-
-1. Open `lib.rs` file for your pallet in a text editor.
-
-1. Implement `Pays` for the Conditional structure.
-
- ```rust
- impl Pays for Conditional {
- fn pays_fee(&self) -> bool {
- true
- }
- }
- ```
-
-## Use the weighting struct for an extrinsic
-
-Use the conditional weighting struct on your pallet's extrinsics like this:
-
-```rust
-#[pallet::weight(Conditional(200))]
- fn example(origin: OriginFor, add_flag: bool, val: u32>) -> DispatchResult {
- //...
- }
-```
-
-## Examples
-
-- [Custom `WeightForSetDummy` struct in the Example pallet](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/examples/basic/src/lib.rs#L305-L350)
-
-## Related material
-
-- [Benchmarking](/test/benchmark)
-- [Calculate fees](/reference/how-to-guides/weights/calculate-fees)
-- [Use custom weights](/reference/how-to-guides/weights/use-custom-weights)
diff --git a/content/md/en/docs/reference/how-to-guides/weights/use-custom-weights.md b/content/md/en/docs/reference/how-to-guides/weights/use-custom-weights.md
deleted file mode 100644
index 7f2f87cc1..000000000
--- a/content/md/en/docs/reference/how-to-guides/weights/use-custom-weights.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-title: Use custom weights
-description:
-keywords:
- - weights
- - benchmarking
- - runtime
----
-
-Here, you'll learn how to use the weights in your pallet from the output of benchmarking your pallet's extrinsics.
-It assumes that you have a file in your pallet's directory called `weights.rs`, containing the auto generated weights from running FRAME's benchmarking tool.
-
-## Goal
-
-Use weights generated by [FRAME's benchmarking tool](https://paritytech.github.io/substrate/master/frame_benchmarking/macro.benchmarks.html) in the extrinsics of your pallet.
-
-## Use Cases
-
-Using accurate weights generated from benchmarking for a pallet's extrinsics.
-
-## Steps
-
-### 1. Define the `WeightInfo` trait in your pallet's `weight.rs` file
-
-In order to use the `weights.rs` file generated by the benchmarking tool in your pallet (an example of Substrate [`pallet-example` weights here](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/examples/basic/src/weights.rs)),
-define a trait that will make it easy to access its functions.
-For example:
-
-`pallets/example/src/weights.rs`
-
-```rust
-pub trait WeightInfo {
- fn example(len: usize,) -> Weight;
-}
-```
-
-### 2. Include `WeightInfo` in your pallet
-
-In your pallet's `lib.rs`, declare `pub mod weights;` at the top and introduce
-`pub use crate::weights::WeightInfo;` to expose the `WeightInfo` trait to your pallet. Then,
-introduce a `WeightInfo` type into the `Config` trait of your pallet:
-
-`pallets/example/src/lib.rs`
-
-```rust
-pub mod weights;
-pub use weights::*;
-
-// -- snip --
-
-pub trait Config: frame_system::Config {
- // -- snip --
-
- /// Information on runtime weights.
- type WeightInfo: WeightInfo;
-}
-```
-
-### 3. Write the custom weight declaration
-
-For each of your dispatchables, introduce an appropriate weights line to determine the weight using the
-configured `WeightInfo` type. For example, `T::WeightInfo::example` would be the weight function
-returned from `weights.rs` for the `example` extrinsic:
-
-`pallets/example/src/lib.rs`
-
-```rust
-#[pallet::weight(T::WeightInfo::example(x.len()))]
-fn example(origin: OriginFor, arg: Vec) -> DispatchResult {
- // -- snip --
-}
-```
-
-### 4. Define the `WeightInfo` type in `Config` trait impls
-
-You'll need to define the `WeightInfo` trait in both your pallet's tests mockup `mock.rs`
-and your Substrate `node`'s runtime.
-
-In your pallet's `Config` trait impl in `mock.rs`, introduce the following line to exclude weights
-in our testing.
-
-In `pallets/example/src/mock.rs` or `pallets/example/src/test.rs`:
-
-```rust
-impl Config for TestRuntime {
- // -- snip --
- type WeightInfo = ();
-}
-```
-
-In your pallet's `Config` trait impl in `runtime/src/lib.rs`, introduce the following line to
-include weights in our runtime.
-
-```rust
-impl pallet_example::Config for Runtime {
- // -- snip --
- type WeightInfo = pallet_example::weights::SubstrateWeight;
-}
-```
-
-Once you recompile your node, your extrinsic will now be using the custom weights defined in
-`pallets/example/src/weights.rs`.
-
-## Examples
-
-- [Benchmarking in the Example pallet](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/examples/basic/src/benchmarking.rs)
-- [Weights in the Example pallet](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/examples/basic/src/weights.rs)
-
-## Related material
-
-- [Benchmarking](/test/benchmark)
-- [Calculate fees](/reference/how-to-guides/weights/calculate-fees)
-- [Add benchmarks](/reference/how-to-guides/weights/add-benchmarks/)
diff --git a/content/md/en/docs/reference/scale-codec.md b/content/md/en/docs/reference/scale-codec.md
index 09efa5527..f7975e97e 100644
--- a/content/md/en/docs/reference/scale-codec.md
+++ b/content/md/en/docs/reference/scale-codec.md
@@ -69,13 +69,21 @@ The following table shows how the Rust implementation of the Parity SCALE codec
SCALE Codec has been implemented in other languages, including:
-- Python: [`polkascan/py-scale-codec`](https://github.com/polkascan/py-scale-codec)
-- Golang: [`itering/scale.go`](https://github.com/itering/scale.go)
+- AssemblyScript: [`LimeChain/as-scale-codec`](https://github.com/LimeChain/as-scale-codec)
+
+
- C: [`MatthewDarnell/cScale`](https://github.com/MatthewDarnell/cScale)
- C++: [`soramitsu/scale-codec-cpp`](https://github.com/soramitsu/scale-codec-cpp)
- JavaScript: [`polkadot-js/api`](https://github.com/polkadot-js/api)
-- TypeScript: [`parity-scale-codec-ts`](https://github.com/paritytech/parity-scale-codec-ts), [`scale-ts`](https://github.com/unstoppablejs/unstoppablejs/tree/main/packages/scale-ts#scale-ts), [`soramitsu/scale-codec-js-library`](https://github.com/soramitsu/scale-codec-js-library)
-- AssemblyScript: [`LimeChain/as-scale-codec`](https://github.com/LimeChain/as-scale-codec)
+- Dart: [`leonardocustodio/polkadart`](https://github.com/leonardocustodio/polkadart)
- Haskell: [`airalab/hs-web3`](https://github.com/airalab/hs-web3/tree/master/packages/scale)
+- Golang: [`itering/scale.go`](https://github.com/itering/scale.go)
- Java: [`emeraldpay/polkaj`](https://github.com/emeraldpay/polkaj)
+- JavaScript: [`polkadot-js/api`](https://github.com/polkadot-js/api)
+- Python: [`polkascan/py-scale-codec`](https://github.com/polkascan/py-scale-codec)
- Ruby: [`wuminzhe/scale_rb`](https://github.com/wuminzhe/scale_rb)
+- TypeScript: [`parity-scale-codec-ts`](https://github.com/paritytech/parity-scale-codec-ts), [`scale-ts`](https://github.com/unstoppablejs/unstoppablejs/tree/main/packages/scale-ts#scale-ts), [`soramitsu/scale-codec-js-library`](https://github.com/soramitsu/scale-codec-js-library), [`subsquid/scale-codec`](https://github.com/subsquid/squid-sdk/tree/master/substrate/scale-codec)
+
+
+
+
diff --git a/content/md/en/docs/reference/xcm-reference.md b/content/md/en/docs/reference/xcm-reference.md
index 504dd6f01..74ba23bc0 100644
--- a/content/md/en/docs/reference/xcm-reference.md
+++ b/content/md/en/docs/reference/xcm-reference.md
@@ -8,6 +8,15 @@ keywords:
- errors
---
+
+
+ ⚠️ WARNING: This page contains potentially outdated information. Reading it might still be useful, yet we suggest taking it with a grain of salt.
+
+
+ Please refer to the `polkadot-sdk-docs` crate for the most up-to-date documentation on this topic.
+
+
+
This section provides reference information for the cross-consensus message (XCM) format.
## Instructions
diff --git a/content/md/en/docs/test/set-up-a-test-network.md b/content/md/en/docs/test/set-up-a-test-network.md
index a120c4ac4..7f6c2013c 100644
--- a/content/md/en/docs/test/set-up-a-test-network.md
+++ b/content/md/en/docs/test/set-up-a-test-network.md
@@ -53,7 +53,7 @@ To prepare a working folder with the binaries for the test network:
Release branches use the naming convention `release-v`.
For example, the release branch used in this tutorial is `release-v1.0.0`.
You can check out a more recent release branch instead of using `release-v1.0.0`.
- You can find information about recent releases and what's included in each release on the [Releases](https://github.com/paritytech/polkadot/releases) tab.
+ You can find information about recent releases and what's included in each release on the [Releases](https://github.com/paritytech/polkadot-sdk/releases) tab.
1. Change to the root of the `polkadot` directory by running the following command:
@@ -69,10 +69,11 @@ To prepare a working folder with the binaries for the test network:
Compiling the node can take 15 to 60 minuets to complete.
-1. Copy the Polkadot binary into your working `bin` folder by running a command similar to the following:
+1. Copy the Polkadot binary and workers into your working `bin` folder by running a command similar to the following:
```bash
cp ./target/release/polkadot ../bin/polkadot-v1.0.0
+ cp ./target/release/polkadot-*-worker ../bin/
```
As this example illustrates, it's generally a good practice to append the version of `polkadot` to the binary name to keep the files in the `bin` folder organized.
@@ -312,14 +313,14 @@ To set up communication between the parachains in the test network:
[[hrmpChannels]]
sender = 1000
recipient = 1001
- maxCapacity = 8
- maxMessageSize = 8000
+ max_capacity = 8
+ max_message_size = 8000
[[hrmpChannels]]
sender = 1001
recipient = 1000
- maxCapacity = 8
- maxMessageSize = 8000
+ max_capacity = 8
+ max_message_size = 8000
```
Note that the values you set for **maxCapacity** and **maxMessageSize** shouldn't exceed the values defined for the `hrmpChannelMaxCapacity` and `hrmpChannelMaxMessageSize` parameters for the relay chain.
diff --git a/content/md/en/docs/test/simulate-parachains.md b/content/md/en/docs/test/simulate-parachains.md
index 47a6762f8..b8c571821 100644
--- a/content/md/en/docs/test/simulate-parachains.md
+++ b/content/md/en/docs/test/simulate-parachains.md
@@ -60,16 +60,10 @@ To prepare a working folder with the binaries for the test network:
1. Checkout the latest release of Polkadot.
Release branches use the naming convention `release-v`.
- For example, the release branch used in this tutorial is `release-v1.0.0`.
- You can check out a more recent release branch instead of using `release-v1.0.0`.
+ For example, the release branch used in this tutorial is `release-v1.0.0` which is in master branch.
+ You can check out a more recent release branch instead of using `git checkout release-v1.1.0`.
You can find information about recent releases and what's included in each release on the [Releases](https://github.com/paritytech/polkadot/releases) tab.
- For example:
-
- ```bash
- git checkout release-v1.0.0
- ```
-
1. Compile the relay chain node by running the following command:
```bash
diff --git a/content/md/en/docs/tutorials/build-a-blockchain/authorize-specific-nodes.md b/content/md/en/docs/tutorials/build-a-blockchain/authorize-specific-nodes.md
index 6e15808a8..415c63ec8 100644
--- a/content/md/en/docs/tutorials/build-a-blockchain/authorize-specific-nodes.md
+++ b/content/md/en/docs/tutorials/build-a-blockchain/authorize-specific-nodes.md
@@ -131,7 +131,7 @@ To add the `node-authorization` pallet to the Substrate runtime:
```toml
[dependencies]
- pallet-node-authorization = { default-features = false, version = "4.0.0-dev", git = "https://github.com/paritytech/polkadot-sdk.git", branch = "polkadot-v1.0.0" }
+ pallet-node-authorization = { default-features = false, version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" }
```
This line imports the `pallet-node-authorization` crate as a dependency and specifies the following configuration details for the crate:
diff --git a/content/md/en/docs/tutorials/build-a-parachain/acquire-a-testnet-slot.md b/content/md/en/docs/tutorials/build-a-parachain/acquire-a-testnet-slot.md
index 24a07707e..b4148bdc9 100644
--- a/content/md/en/docs/tutorials/build-a-parachain/acquire-a-testnet-slot.md
+++ b/content/md/en/docs/tutorials/build-a-parachain/acquire-a-testnet-slot.md
@@ -45,13 +45,10 @@ To prepare an account:
1. Click **Save**.
-2. Join the [Rococo Element channel](https://matrix.to/#/#rococo-faucet:matrix.org) and send a message with`!drip` and the public address for your Rococo to get 100 ROC in your wallet.
+2. Go to https://faucet.polkadot.io, provide your public address in the form input and submit to get 100 ROC tokens in your wallet.
- For example, send a message similar to the following:
-
- ```text
- !drip 5CVYesFxbDBU5rkZXYTAA6BnADbCoSpQkvexBQZvbtvyGTP1
- ```
+ > Alternatively you can join the [Rococo Element channel](https://matrix.to/#/#rococo-faucet:matrix.org) and send a message with`!drip` and the public address for your Rococo to get 100 ROC in your wallet.
+ > For example, send a message similar to the following: `!drip 5CVYesFxbDBU5rkZXYTAA6BnADbCoSpQkvexBQZvbtvyGTP1`
## Reserve a parachain identifier
diff --git a/content/md/en/docs/tutorials/build-application-logic/add-offchain-workers.md b/content/md/en/docs/tutorials/build-application-logic/add-offchain-workers.md
index a253a3f0b..a7b1ced2c 100644
--- a/content/md/en/docs/tutorials/build-application-logic/add-offchain-workers.md
+++ b/content/md/en/docs/tutorials/build-application-logic/add-offchain-workers.md
@@ -11,6 +11,15 @@ keywords:
- signed payload
---
+
+
+ ⚠️ WARNING: This page contains potentially outdated information. Reading it might still be useful, yet we suggest taking it with a grain of salt.
+
+
+ Please refer to the `polkadot-sdk-docs` crate for the most up-to-date documentation on this topic.
+
+
+
This tutorial illustrates how to modify a pallet to include an offchain worker and configure the pallet and runtime to enable the offchain worker to submit transactions that update the on-chain state.
## Using offchain workers
@@ -39,7 +48,7 @@ It is also important to consider that even an unsigned transaction with a signed
In most cases, checking whether a transaction was submitted by an offchain worker before writing to storage isn't sufficient to protect the network.
Instead of assuming that the offchain worker can be trusted without safeguards, you should intentionally set restrictive permissions that limit access to the process and what it can do.
-Remember that unsigned transactions are essentially an **open door** into your runtime.
+Remember that unsigned transactions are essentially an **open door** into your runtime.
You should only use them after careful consideration of the conditions under which they should be allowed to execute.
Without safeguards, malicious actors could impersonate offchain workers and access runtime storage.
@@ -80,7 +89,7 @@ To enable offchain workers to send signed transactions:
1. Open the `src/lib.rs` file for your pallet in a text editor.
2. Add the `#[pallet::hooks]` macro and the entry point for offchain workers to the code.
-
+
For example:
```rust
@@ -170,7 +179,7 @@ To enable offchain workers to send signed transactions:
}
```
- This code enables you to retrieve all signers that this pallet owns.
+ This code enables you to retrieve all signers that this pallet owns.
8. Use `send_signed_transaction()` to create a signed transaction call:
@@ -214,7 +223,7 @@ To enable offchain workers to send signed transactions:
1. Open the `runtime/src/lib.rs` file for the node template in a text editor.
1. Add the `AuthorityId` to the configuration for your pallet and make sure it uses the `TestAuthId` from the `crypto` module:
-
+
```rust
impl pallet_your_ocw_pallet::Config for Runtime {
// ...
@@ -232,7 +241,7 @@ To enable offchain workers to send signed transactions:
```rust
use codec::Encode;
use sp_runtime::{generic::Era, SaturatedConversion};
-
+
// ...
impl frame_system::offchain::CreateSignedTransaction for Runtime
@@ -321,7 +330,7 @@ Updating the runtime involved the following steps:
- Adding the `AuthorityId` to the runtime configuration for your pallet.
- Implementing the `CreateSignedTransaction` trait and `create_transaction()` function.
- Implementing `SigningTypes` and `SendTransactionTypes` for offchain workers from the `frame_system` pallet.
-
+
However, before your pallet offchain workers can submit signed transactions, you must specify at least one account for the offchain worker to use.
To enable the offchain worker to sign transactions, you must generate the account key for the pallet to own and add that key to the node keystore.
@@ -352,7 +361,7 @@ pub fn new_partial(config: &Configuration) -> Result {
This example manually adds the key for the `Alice` account to the keystore identified by the `KEY_TYPE` defined in your pallet.
For a working example, see this sample [service.rs](https://github.com/jimmychu0807/substrate-offchain-worker-demo/blob/v2.0.0/node/src/service.rs#L87-L105) file.
-### Using other accounts
+### Using other accounts
In a production environment, you can use other tools—such as `subkey`—to generate keys that are specifically for offchain workers to use.
After you generate one or more keys for offchain workers to own, you can add them to the node keystore by:
@@ -361,9 +370,9 @@ After you generate one or more keys for offchain workers to own, you can add the
- Passing parameters using the `author_insertKey` RPC method.
For example, you can use the [Polkadot/Substrate Portal](https://polkadot.js.org/apps/#/rpc), Polkadot-JS API, or a `curl` command to select the `author_insertKey` method and specify the key type, secret phrase, and public key parameters for the account to use:
-
+
![Use the `author_insertKey` method to insert an account](/media/images/docs/author_insertKey.png)
-
+
Note that the keyType parameter `demo` in this example matches the `KEY_TYPE` declared in the offchain worker pallet.
Now, your pallet is ready to send signed transactions on-chain from offchain workers.
@@ -373,11 +382,11 @@ Now, your pallet is ready to send signed transactions on-chain from offchain wor
By default, all unsigned transactions are rejected in Substrate.
To enable Substrate to accept certain unsigned transactions, you must implement the `ValidateUnsigned` trait for the pallet.
-Although you must implement the `ValidateUnsigned` trait to send unsigned transactions, this check doesn't guarantee that **only** offchain workers are able to send the transaction.
+Although you must implement the `ValidateUnsigned` trait to send unsigned transactions, this check doesn't guarantee that **only** offchain workers are able to send the transaction.
You should always consider the consequences of malicious actors sending these transactions as an attempt to tamper with the state of your chain.
Unsigned transactions always represent a potential attack vector that a malicious user could exploit and offchain workers can't be assumed to be a reliable source without additional safeguards.
-You should never assume that unsigned transactions can only be submitted by an offchain worker.
+You should never assume that unsigned transactions can only be submitted by an offchain worker.
By definition, **anyone** can submit them.
### Configure the pallet
@@ -386,7 +395,7 @@ To enable offchain workers to send unsigned transactions:
1. Open the `src/lib.rs` file for your pallet in a text editor.
2. Add the [`validate_unsigned`](https://paritytech.github.io/substrate/master/frame_support/attr.pallet.html#validate-unsigned-palletvalidate_unsigned-optional) macro.
-
+
For example:
```rust
@@ -420,7 +429,7 @@ To enable offchain workers to send unsigned transactions:
```
2. Check the calling extrinsics to determine if the call is allowed and return `ValidTransaction` if the call is allowed or `TransactionValidityError` if the call is not allowed.
-
+
For example:
```rust
@@ -598,10 +607,10 @@ To make your data structure signable:
```
This example uses [`SignedPayload`](https://paritytech.github.io/substrate/master/frame_system/offchain/trait.SignedPayload.html) to verify that the public key in the payload has the same signature as the one provided.
- However, you should note that the code in the example only checks whether the provided `signature` is valid for the `public` key contained inside `payload`.
+ However, you should note that the code in the example only checks whether the provided `signature` is valid for the `public` key contained inside `payload`.
This check doesn't validate whether the signer is an offchain worker or authorized to call the specified function.
This simple check wouldn't prevent an unauthorized actor from using the signed payload to modify state.
-
+
For working examples of this code, see the [offchain function call](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/examples/offchain-worker/src/lib.rs#L508-L536) and the implementation of [`ValidateUnsigned`](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/examples/offchain-worker/src/lib.rs#L305-L329).
## Where to go next
diff --git a/content/md/en/docs/tutorials/build-application-logic/use-macros-in-a-custom-pallet.md b/content/md/en/docs/tutorials/build-application-logic/use-macros-in-a-custom-pallet.md
index 7ace105f4..197db12f0 100644
--- a/content/md/en/docs/tutorials/build-application-logic/use-macros-in-a-custom-pallet.md
+++ b/content/md/en/docs/tutorials/build-application-logic/use-macros-in-a-custom-pallet.md
@@ -32,15 +32,11 @@ This tutorial requires compiling Rust code and takes approximately one to two ho
## Before you begin
-For this tutorial, you download and use working code. Before you begin, verify the following:
+Before you begin, verify the following:
- You have configured your environment for Substrate development by installing [Rust and the Rust toolchain](/install/).
-- You have completed [Build a local blockchain](/tutorials/build-a-blockchain/build-local-blockchain/) and have the Substrate node template installed locally.
-
-- You have used predefined accounts as described in [Simulate a network](/tutorials/build-a-blockchain/simulate-network/) to start nodes on a single computer.
-
-- You are generally familiar with software development and use command-line interfaces.
+- You have cloned the [Substrate node template](https://github.com/substrate-developer-hub/substrate-node-template), which will be used as the starting point for this tutorial.
## Tutorial objectives
@@ -52,11 +48,11 @@ By completing this tutorial, you will accomplish the following objectives:
- Start a blockchain node that contains a custom pallet.
-- Add front-end code that exposes the proof-of-existence pallet.
+- Interact with a front-end that exposes the proof-of-existence pallet.
-## Design the application
+## Application design
-The proof-of-existence application exposes the following callable functions:
+The proof-of-existence application exposes two callable functions:
- `create_claim()` allows a user to claim the existence of a file by uploading a hash.
@@ -100,19 +96,12 @@ Therefore, the first step is to remove some files and content from the files in
You won't be using the template code in this tutorial.
However, you can review the template code to see what it provides before you delete it.
-1. Delete all of the lines in the `lib.rs` file.
-
-1. Add the macro required to build both the native Rust binary (`std`) and the WebAssembly (`no_std`) binary.
+1. Delete all of the lines in the `lib.rs` file, and replace it with the skeleton of a custom pallet:
```rust
+ // All pallets must be configured for `no_std`.
#![cfg_attr(not(feature = "std"), no_std)]
- ```
- All of the pallets used in a runtime must be set to compile with the `no_std` features.
-
-1. Add a skeleton set of pallet dependencies and [macros](/reference/frame-macros) that the custom pallet requires by copying the following code:
-
- ```rust
// Re-export pallet items so that they can be accessed from the crate namespace.
pub use pallet::*;
@@ -122,7 +111,6 @@ Therefore, the first step is to remove some files and content from the files in
use frame_system::pallet_prelude::*;
#[pallet::pallet]
- #[pallet::generate_store(pub(super) trait Store)]
pub struct Pallet(_);
#[pallet::config] // <-- Step 2. code block will replace this.
@@ -131,17 +119,25 @@ Therefore, the first step is to remove some files and content from the files in
#[pallet::storage] // <-- Step 5. code block will replace this.
#[pallet::call] // <-- Step 6. code block will replace this.
}
+
+ pub mod weights {
+ // Placeholder struct for the pallet weights
+ pub struct SubstrateWeight(core::marker::PhantomData);
+ }
```
You now have a framework that includes placeholders for _events_, _errors_, _storage_, and _callable functions_.
+ > NOTE: Pallet weights are outside the scope of this tutorial. If you want to learn more about weights, you can read our documentation [here](/reference/how-to-guides/weights/).
+
+
1. Save your changes.
## Configure the pallet to emit events
Every pallet has a [Rust "trait"](https://doc.rust-lang.org/book/ch10-02-traits.html) called `Config`.
-You use this trait to configure the settings that your specific pallet requires.
-For this tutorial, the configuration setting enables the pallet to emit events.
+You use this trait to expose configurable options and connect your pallet to other parts of the runtime.
+For this tutorial, we need to configure out pallet to emit events.
To define the `Config` trait for the proof-of-existence pallet:
@@ -155,6 +151,9 @@ To define the `Config` trait for the proof-of-existence pallet:
pub trait Config: frame_system::Config {
/// Because this pallet emits events, it depends on the runtime's definition of an event.
type RuntimeEvent: From> + IsType<::RuntimeEvent>;
+ /// Pallets use weights to measure the complexity of the callable functions.
+ /// Configuring weights is outside the scope of this tutorial, so we will leave it empty for now.
+ type WeightInfo;
}
```
@@ -163,13 +162,12 @@ To define the `Config` trait for the proof-of-existence pallet:
## Implement pallet events
Now that you've configured the pallet to emit events, you are ready to define those events.
-As described in [Design the application](#design-the-application), the proof-of-existence pallet emits an event under the following conditions:
+Based on the [application design](#application-design), we want the proof-of-existence pallet to emit an event under the following conditions:
- When a new claim is added to the blockchain.
- When a claim is revoked.
-Each event also displays an `AccountId` to identify who triggered the
-event and the proof-of-existence claim (as `Hash`) that is being stored or removed.
+Each event can include an `AccountId` to identify who triggered the event and a `Hash`, representing the proof-of-existence claim that is being stored or removed.
To implement the pallet events:
@@ -228,7 +226,7 @@ To implement the errors for the proof-of-existence pallet:
To add a new claim to the blockchain, the proof-of-existence pallet requires a storage mechanism.
To address this requirement, you can create a key-value map, where each claim points to the owner and the block number when the claim was made.
-To create this key-value map, you can use the FRAME [`StorageMap`](https://paritytech.github.io/substrate/master/frame_support/pallet_prelude/struct.StorageMap.html).
+To create this key-value map, you can use the FRAME [`StorageMap`](https://paritytech.github.io/polkadot-sdk/master/frame_support/storage/types/struct.StorageMap.html).
To implement storage for the proof-of-existence pallet:
@@ -238,7 +236,7 @@ To implement storage for the proof-of-existence pallet:
```rust
#[pallet::storage]
- pub(super) type Claims = StorageMap<_, Blake2_128Concat, T::Hash, (T::AccountId, T::BlockNumber)>;
+ pub(super) type Claims = StorageMap<_, Blake2_128Concat, T::Hash, (T::AccountId, BlockNumberFor)>;
```
1. Save your changes.
@@ -268,8 +266,8 @@ To implement this logic in the proof-of-existence pallet:
// Dispatchable functions must be annotated with a weight and must return a DispatchResult.
#[pallet::call]
impl Pallet {
- #[pallet::weight(0)]
- #[pallet::call_index(1)]
+ #[pallet::weight(Weight::default())]
+ #[pallet::call_index(0)]
pub fn create_claim(origin: OriginFor, claim: T::Hash) -> DispatchResult {
// Check that the extrinsic was signed and get the signer.
// This function will return an error if the extrinsic is not signed.
@@ -290,8 +288,8 @@ To implement this logic in the proof-of-existence pallet:
Ok(())
}
- #[pallet::weight(0)]
- #[pallet::call_index(2)]
+ #[pallet::weight(Weight::default())]
+ #[pallet::call_index(1)]
pub fn revoke_claim(origin: OriginFor, claim: T::Hash) -> DispatchResult {
// Check that the extrinsic was signed and get the signer.
// This function will return an error if the extrinsic is not signed.
@@ -315,13 +313,13 @@ To implement this logic in the proof-of-existence pallet:
1. Save your changes and close the file.
-1. Check that your code compiles by running the following command:
+1. Check that your pallet compiles by running the following command:
```bash
- cargo check -p node-template-runtime --release
+ cargo check -p pallet-template
```
- The `[-p](https://doc.rust-lang.org/cargo/commands/cargo-check.html#options) node-template-runtime` directive tells cargo to only check the `node_template_runtime` package.
+ The `-p` flag tells cargo to only check the `pallet-template` that you have been modifying and saving you some compile time.
You can refer to the node template [solution](https://github.com/substrate-developer-hub/substrate-node-template/blob/tutorials/solutions/proof-of-existence/pallets/template/src/lib.rs) if you get stuck.
diff --git a/content/md/en/docs/tutorials/collectibles-workshop/01-prepare.md b/content/md/en/docs/tutorials/collectibles-workshop/01-prepare.md
index 3f9b7b990..0624b3055 100644
--- a/content/md/en/docs/tutorials/collectibles-workshop/01-prepare.md
+++ b/content/md/en/docs/tutorials/collectibles-workshop/01-prepare.md
@@ -8,10 +8,6 @@ To get the most out of this workshop, you'll want to have a working development
To make sure you have everything you need, review this preflight checklist.
If you discover something's missing, click the corresponding link.
-You can complete this workshop without setting up a local working environment if you use the [Substrate Playground](https://substrate.io/developers/playground/).
-However, if you use the Substrate Playground, the changes you make aren't saved when you end a session.
-If you use Substrate Playground, you can skip this checklist and go directly to [Get oriented](/tutorials/collectibles-workshop/02-orientation/), but be sure to save copies of the files you edit!
-
The instructions in the workshop assume you are working in a local environment.
## Supported operating system
@@ -27,13 +23,13 @@ To set up a local development environment, you must have one of the following su
Substrate is built using Rust, a modern type sound programming language.
The Rust compiler minimizes the chances of errors getting into your code and produces binaries that run on most operating systems and WebAssembly targets.
-- [ ] Rust is installed locally or available in the browser using the Substrate playground.
+- [ ] Rust is installed locally.
If you aren't sure, open a terminal and run `rustup show`.
If Rust isn't installed on your computer, follow the instructions in [Install](/install) for your operating system.
The last step in the installation instructions is to verify that the default node template compiles.
-- [ ] Substrate node compiles locally or is available in the browser using the Substrate playground.
+- [ ] Substrate node compiles locally.
If you're new to Rust, keep in mind that this workshop isn’t about _learning_ Rust.
However, for a brief introduction to a few important concepts, see [Detour: Learn Rust for Substrate](/tutorials/collectibles-workshop/detours/learn-rust/).
@@ -58,7 +54,7 @@ If you don't have a preferred IDE, Visual Studio Code is a good choice.
To interact with the blockchain and test your work as you build the Substrate collectibles application, you'll need a browser-based application that can connect to the Substrate node.
For the workshop, you can connect to the node from the [Polkadot/Substrate Portal](https://polkadot.js.org/apps/) if you have Chrome or a Chromium-based browser.
-- [ ] [Google Chrome](https://www.google.com/chrome/) or a Chromium-based browser, such as [Brave](https://brave.com/download/), [Microsoft Edge](https://www.microsoft.com/en-us/edge?form=MA13FJ&exp=e00), [Opera](https://www.opera.com/download), or [Vivaldi](https://vivaldi.com/download/).
+- [ ] [Google Chrome](https://www.google.com/chrome/) or a Chromium-based browser, such as [Brave](https://brave.com/download/), [Microsoft Edge](https://www.microsoft.com/en-us/edge?ep=79&form=MA13KE&es=23), [Opera](https://www.opera.com/download), or [Vivaldi](https://vivaldi.com/download/).
If you use a more restrictive browser—such as Firefox—you might find that connections between the Polkadot/Substrate Portal and the node are blocked for security or privacy reasons.
diff --git a/content/md/en/docs/tutorials/collectibles-workshop/03-create-pallet.md b/content/md/en/docs/tutorials/collectibles-workshop/03-create-pallet.md
index 2a706cfd2..7b03d9271 100644
--- a/content/md/en/docs/tutorials/collectibles-workshop/03-create-pallet.md
+++ b/content/md/en/docs/tutorials/collectibles-workshop/03-create-pallet.md
@@ -3,6 +3,8 @@ title: Create a new pallet
tutorial: 1
---
+> ⚠️ This tutorial is out-of-date any may not work as intended. Please refer to [`Polkadot SDK Docs`](https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/guides/your_first_pallet/index.html) for up-to-date information.
+
In this workshop, you'll learn how to create a custom Substrate module-called a pallet-that's going to contain the code for your application-specific blockchain.
Pallets are built using FRAME libraries and the Rust programming language.
FRAME includes a lot of specialized macros that make it easy to compose the application logic in a reusable container.
@@ -104,14 +106,14 @@ To update the manifest for the collectibles project:
```toml
[dependencies]
- frame-support = { default-features = false, version = "4.0.0-dev", git = "https://github.com/paritytech/polkadot-sdk.git", branch = "polkadot-v1.0.0"}
- frame-system = { default-features = false, version = "4.0.0-dev", git = "https://github.com/paritytech/polkadot-sdk.git", branch = "polkadot-v1.0.0" }
+ frame-support = { default-features = false, version = "36.0.0" }
+ frame-system = { default-features = false, version = "36.0.0" }
```
3. Add `codec` and `scale-info` to the dependencies.
```toml
- codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive",] }
+ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] }
scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
```
@@ -152,7 +154,6 @@ The next step is to prepare a set of common macros to serve as scaffolding for y
use frame_system::pallet_prelude::*;
#[pallet::pallet]
- #[pallet::generate_store(pub(super) trait Store)]
pub struct Pallet(_);
#[pallet::config]
diff --git a/content/md/en/docs/tutorials/index.md b/content/md/en/docs/tutorials/index.md
index 8c37828f6..348f25ea4 100644
--- a/content/md/en/docs/tutorials/index.md
+++ b/content/md/en/docs/tutorials/index.md
@@ -8,7 +8,6 @@ If you are someone who likes to learn by doing, the Substrate tutorials are a gr
Tutorials don't provide much background about _why_ you are performing certain steps or explain the coding details.
Instead, the tutorials give you hands-on experience performing the tasks essential to building your own blockchain and focus on ensuring a successful result.
-If you prefer to experiment on your own with less guidance, you might want to explore the [Substrate Playground](/playground/).
If you prefer to dig into the details of the code directly, you might want to start with the [Rust API](https://paritytech.github.io/substrate/master/sc_service/index.html) documentation.
But if you want to start your journey with a guided tour, try out the following tutorials.
diff --git a/content/md/en/docs/tutorials/integrate-with-tools/explore-sidecar-endpoints.md b/content/md/en/docs/tutorials/integrate-with-tools/explore-sidecar-endpoints.md
index 2b8305804..83aa665f9 100644
--- a/content/md/en/docs/tutorials/integrate-with-tools/explore-sidecar-endpoints.md
+++ b/content/md/en/docs/tutorials/integrate-with-tools/explore-sidecar-endpoints.md
@@ -4,6 +4,15 @@ description: Demonstrates how you can explore the Substrate REST service (sideca
keywords:
---
+
+
+ ⚠️ WARNING: This page contains potentially outdated information. Reading it might still be useful, yet we suggest taking it with a grain of salt.
+
+
+ Please refer to the Sidecar docs, the README and the guides folder for the most up-to-date documentation on this topic.
+
+
+
The Substrate [sidecar](https://github.com/paritytech/substrate-api-sidecar) service provides a REST API for interacting with Substrate blockchain nodes built using FRAME.
The sidecar REST service exposes an extensive set of endpoints that enable you to interact with nodes, accounts, transactions, parachains, and many other components of a Substrate-based blockchain.
@@ -94,7 +103,7 @@ To download and install `sidecar`:
To use the predefined API collection for `sidecar`:
-1. Open the predefined [Substrate API Sidecar](https://documenter.getpostman.com/view/24602305/2s8YsqWaj8#intro) API collection in a browser.
+1. Open the predefined [Substrate API Sidecar](https://documenter.getpostman.com/view/21393319/2sA3Qs9C9M#intro) API collection in a browser.
2. Click **Run in Postman** in the top-right corner of the page.
3. Select to run the collection either using Postman for Web or in the Postman for Mac desktop client.
diff --git a/content/md/en/docs/tutorials/integrate-with-tools/integrate-a-light-client-node.md b/content/md/en/docs/tutorials/integrate-with-tools/integrate-a-light-client-node.md
index 163d8e5b4..7e2c10de0 100644
--- a/content/md/en/docs/tutorials/integrate-with-tools/integrate-a-light-client-node.md
+++ b/content/md/en/docs/tutorials/integrate-with-tools/integrate-a-light-client-node.md
@@ -30,7 +30,7 @@ By completing this tutorial, you will accomplish the following objectives:
Before the light client can connect to a network, you must have a web application that specifies the network the light client should connect to, the nodes for it to communicate with, and the consensus-critical state it must have at genesis.
This information is available in the [chain specification](/build/chain-spec/) file for the network.
-Substrate Connect is preconfigured to recognize several chains that are defined in the [WellKnownChain](https://paritytech.github.io/substrate-connect/api/enums/connect_src.WellKnownChain.html) enumeration list.
+Substrate Connect is preconfigured to recognize several chains that are defined in the [WellKnownChain](https://paritytech.github.io/substrate-connect/api/enums/_substrate_connect.WellKnownChain.html) enumeration list.
These well-known chains are:
- Polkadot identified as `polkadot`
diff --git a/example.env.development b/example.env.development
index 92b603266..ee31fa503 100644
--- a/example.env.development
+++ b/example.env.development
@@ -1,4 +1,2 @@
# GATSBY_WEBSITE_URL=http://localhost:8100
# GATSBY_DOCS_URL=http://localhost:8200
-# GATSBY_MARKETPLACE_URL=http://localhost:8300
-# GATSBY_CAREERS_URL=https://careers.substrate.io
diff --git a/example.env.production b/example.env.production
index 92b603266..ee31fa503 100644
--- a/example.env.production
+++ b/example.env.production
@@ -1,4 +1,2 @@
# GATSBY_WEBSITE_URL=http://localhost:8100
# GATSBY_DOCS_URL=http://localhost:8200
-# GATSBY_MARKETPLACE_URL=http://localhost:8300
-# GATSBY_CAREERS_URL=https://careers.substrate.io
diff --git a/src/styles/tailwind-custom.css b/src/styles/tailwind-custom.css
index ee1c38e58..99edd546b 100644
--- a/src/styles/tailwind-custom.css
+++ b/src/styles/tailwind-custom.css
@@ -220,3 +220,7 @@ div[aria-label='animation'] {
nav ul li span svg {
@apply dark:text-substrateDarkThemeBlue;
}
+
+.warning {
+ @apply bg-yellow-100 border-l-4 border-yellow-500 text-yellow-700 p-4 my-4;
+}
\ No newline at end of file