Skip to content

Commit fd5e111

Browse files
committed
remove unused pages and images
1 parent e4de6be commit fd5e111

File tree

62 files changed

+5857
-61448
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+5857
-61448
lines changed

.ai/categories/basics.md

Lines changed: 190 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ First, you'll update the runtime's `Cargo.toml` file to include the Utility pall
256256
1. Open the `runtime/Cargo.toml` file and locate the `[dependencies]` section. Add pallet-utility as one of the features for the `polkadot-sdk` dependency with the following line:
257257

258258
```toml hl_lines="4" title="runtime/Cargo.toml"
259-
259+
[dependencies]
260260
...
261261
polkadot-sdk = { workspace = true, features = [
262262
"pallet-utility",
@@ -267,17 +267,19 @@ First, you'll update the runtime's `Cargo.toml` file to include the Utility pall
267267
2. In the same `[dependencies]` section, add the custom pallet that you built from scratch with the following line:
268268

269269
```toml hl_lines="3" title="Cargo.toml"
270-
270+
[dependencies]
271271
...
272-
272+
custom-pallet = { path = "../pallets/custom-pallet", default-features = false }
273273
```
274274

275275
3. In the `[features]` section, add the custom pallet to the `std` feature list:
276276

277277
```toml hl_lines="5" title="Cargo.toml"
278-
278+
[features]
279+
default = ["std"]
280+
std = [
279281
...
280-
282+
"custom-pallet/std",
281283
...
282284
]
283285
```
@@ -2699,13 +2701,53 @@ To build the smart contract, follow the steps below:
26992701
6. Add the getter and setter functions:
27002702

27012703
```solidity
2702-
2704+
// SPDX-License-Identifier: MIT
2705+
pragma solidity ^0.8.28;
2706+
2707+
contract Storage {
2708+
// State variable to store our number
2709+
uint256 private number;
2710+
2711+
// Event to notify when the number changes
2712+
event NumberChanged(uint256 newNumber);
2713+
2714+
// Function to store a new number
2715+
function store(uint256 newNumber) public {
2716+
number = newNumber;
2717+
emit NumberChanged(newNumber);
2718+
}
2719+
2720+
// Function to retrieve the stored number
2721+
function retrieve() public view returns (uint256) {
2722+
return number;
2723+
}
2724+
}
27032725
```
27042726

27052727
??? code "Complete Storage.sol contract"
27062728

27072729
```solidity title="Storage.sol"
2708-
2730+
// SPDX-License-Identifier: MIT
2731+
pragma solidity ^0.8.28;
2732+
2733+
contract Storage {
2734+
// State variable to store our number
2735+
uint256 private number;
2736+
2737+
// Event to notify when the number changes
2738+
event NumberChanged(uint256 newNumber);
2739+
2740+
// Function to store a new number
2741+
function store(uint256 newNumber) public {
2742+
number = newNumber;
2743+
emit NumberChanged(newNumber);
2744+
}
2745+
2746+
// Function to retrieve the stored number
2747+
function retrieve() public view returns (uint256) {
2748+
return number;
2749+
}
2750+
}
27092751
```
27102752

27112753
## Understanding the Code
@@ -3343,7 +3385,23 @@ To create the ERC-20 contract, you can follow the steps below:
33433385
3. Now, paste the following ERC-20 contract code into the editor:
33443386

33453387
```solidity title="MyToken.sol"
3346-
3388+
// SPDX-License-Identifier: MIT
3389+
// Compatible with OpenZeppelin Contracts ^5.0.0
3390+
pragma solidity ^0.8.22;
3391+
3392+
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
3393+
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
3394+
3395+
contract MyToken is ERC20, Ownable {
3396+
constructor(address initialOwner)
3397+
ERC20("MyToken", "MTK")
3398+
Ownable(initialOwner)
3399+
{}
3400+
3401+
function mint(address to, uint256 amount) public onlyOwner {
3402+
_mint(to, amount);
3403+
}
3404+
}
33473405
```
33483406

33493407
The key components of the code above are:
@@ -3661,7 +3719,26 @@ To create the NFT contract, you can follow the steps below:
36613719
3. Now, paste the following NFT contract code into the editor.
36623720

36633721
```solidity title="MyNFT.sol"
3664-
3722+
// SPDX-License-Identifier: MIT
3723+
// Compatible with OpenZeppelin Contracts ^5.0.0
3724+
pragma solidity ^0.8.22;
3725+
3726+
import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";
3727+
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
3728+
3729+
contract MyToken is ERC721, Ownable {
3730+
uint256 private _nextTokenId;
3731+
3732+
constructor(address initialOwner)
3733+
ERC721("MyToken", "MTK")
3734+
Ownable(initialOwner)
3735+
{}
3736+
3737+
function safeMint(address to) public onlyOwner {
3738+
uint256 tokenId = _nextTokenId++;
3739+
_safeMint(to, tokenId);
3740+
}
3741+
}
36653742
```
36663743

36673744
The key components of the code above are:
@@ -8224,7 +8301,16 @@ The [`Account` data type](https://paritytech.github.io/polkadot-sdk/master/frame
82248301
The code snippet below shows how accounts are defined:
82258302

82268303
```rs
8227-
8304+
/// The full account information for a particular account ID.
8305+
#[pallet::storage]
8306+
#[pallet::getter(fn account)]
8307+
pub type Account<T: Config> = StorageMap<
8308+
_,
8309+
Blake2_128Concat,
8310+
T::AccountId,
8311+
AccountInfo<T::Nonce, T::AccountData>,
8312+
ValueQuery,
8313+
>;
82288314
```
82298315

82308316
The preceding code block defines a storage map named `Account`. The `StorageMap` is a type of on-chain storage that maps keys to values. In the `Account` map, the key is an account ID, and the value is the account's information. Here, `T` represents the generic parameter for the runtime configuration, which is defined by the pallet's configuration trait (`Config`).
@@ -8248,7 +8334,24 @@ For a detailed explanation of storage maps, see the [`StorageMap`](https://parit
82488334
The `AccountInfo` structure is another key element within the [System pallet](https://paritytech.github.io/polkadot-sdk/master/src/frame_system/lib.rs.html){target=\_blank}, providing more granular details about each account's state. This structure tracks vital data, such as the number of transactions and the account’s relationships with other modules.
82498335

82508336
```rs
8251-
8337+
/// Information of an account.
8338+
#[derive(Clone, Eq, PartialEq, Default, RuntimeDebug, Encode, Decode, TypeInfo, MaxEncodedLen)]
8339+
pub struct AccountInfo<Nonce, AccountData> {
8340+
/// The number of transactions this account has sent.
8341+
pub nonce: Nonce,
8342+
/// The number of other modules that currently depend on this account's existence. The account
8343+
/// cannot be reaped until this is zero.
8344+
pub consumers: RefCount,
8345+
/// The number of other modules that allow this account to exist. The account may not be reaped
8346+
/// until this and `sufficients` are both zero.
8347+
pub providers: RefCount,
8348+
/// The number of modules that allow this account to exist for their own purposes only. The
8349+
/// account may not be reaped until this and `providers` are both zero.
8350+
pub sufficients: RefCount,
8351+
/// The additional data that belongs to this account. Used to store the balance(s) in a lot of
8352+
/// chains.
8353+
pub data: AccountData,
8354+
}
82528355
```
82538356

82548357
The `AccountInfo` structure includes the following components:
@@ -9262,7 +9365,8 @@ The [`XcmRouter`](https://paritytech.github.io/polkadot-sdk/master/pallet_xcm/pa
92629365
For instance, the Kusama network employs the [`ChildParachainRouter`](https://paritytech.github.io/polkadot-sdk/master/polkadot_runtime_common/xcm_sender/struct.ChildParachainRouter.html){target=\_blank}, which restricts routing to [Downward Message Passing (DMP)](https://wiki.polkadot.com/learn/learn-xcm-transport/#dmp-downward-message-passing){target=\_blank} from the relay chain to parachains, ensuring secure and controlled communication.
92639366

92649367
```rust
9265-
9368+
pub type PriceForChildParachainDelivery =
9369+
ExponentialPrice<FeeAssetId, BaseDeliveryFee, TransactionByteFee, Dmp>;
92669370
```
92679371

92689372
For more details about XCM transport protocols, see the [XCM Channels](/develop/interoperability/xcm-channels/){target=\_blank} page.
@@ -10388,25 +10492,95 @@ The `xcm-emulator` provides macros for defining a mocked testing environment. Ch
1038810492
- **[`decl_test_relay_chains`](https://github.com/paritytech/polkadot-sdk/blob/polkadot-stable2506-2/cumulus/xcm/xcm-emulator/src/lib.rs#L361){target=\_blank}**: Defines runtime and configuration for the relay chains. Example:
1038910493

1039010494
```rust
10391-
10495+
decl_test_relay_chains! {
10496+
#[api_version(13)]
10497+
pub struct Westend {
10498+
genesis = genesis::genesis(),
10499+
on_init = (),
10500+
runtime = westend_runtime,
10501+
core = {
10502+
SovereignAccountOf: westend_runtime::xcm_config::LocationConverter,
10503+
},
10504+
pallets = {
10505+
XcmPallet: westend_runtime::XcmPallet,
10506+
Sudo: westend_runtime::Sudo,
10507+
Balances: westend_runtime::Balances,
10508+
Treasury: westend_runtime::Treasury,
10509+
AssetRate: westend_runtime::AssetRate,
10510+
Hrmp: westend_runtime::Hrmp,
10511+
Identity: westend_runtime::Identity,
10512+
IdentityMigrator: westend_runtime::IdentityMigrator,
10513+
}
10514+
},
10515+
}
1039210516
```
1039310517

1039410518
- **[`decl_test_parachains`](https://github.com/paritytech/polkadot-sdk/blob/polkadot-stable2506-2/cumulus/xcm/xcm-emulator/src/lib.rs#L596){target=\_blank}**: Defines runtime and configuration for parachains. Example:
1039510519

1039610520
```rust
10397-
10521+
decl_test_parachains! {
10522+
pub struct AssetHubWestend {
10523+
genesis = genesis::genesis(),
10524+
on_init = {
10525+
asset_hub_westend_runtime::AuraExt::on_initialize(1);
10526+
},
10527+
runtime = asset_hub_westend_runtime,
10528+
core = {
10529+
XcmpMessageHandler: asset_hub_westend_runtime::XcmpQueue,
10530+
LocationToAccountId: asset_hub_westend_runtime::xcm_config::LocationToAccountId,
10531+
ParachainInfo: asset_hub_westend_runtime::ParachainInfo,
10532+
MessageOrigin: cumulus_primitives_core::AggregateMessageOrigin,
10533+
DigestProvider: (),
10534+
},
10535+
pallets = {
10536+
PolkadotXcm: asset_hub_westend_runtime::PolkadotXcm,
10537+
Balances: asset_hub_westend_runtime::Balances,
10538+
Assets: asset_hub_westend_runtime::Assets,
10539+
ForeignAssets: asset_hub_westend_runtime::ForeignAssets,
10540+
PoolAssets: asset_hub_westend_runtime::PoolAssets,
10541+
AssetConversion: asset_hub_westend_runtime::AssetConversion,
10542+
SnowbridgeSystemFrontend: asset_hub_westend_runtime::SnowbridgeSystemFrontend,
10543+
Revive: asset_hub_westend_runtime::Revive,
10544+
}
10545+
},
10546+
}
1039810547
```
1039910548

1040010549
- **[`decl_test_bridges`](https://github.com/paritytech/polkadot-sdk/blob/polkadot-stable2506-2/cumulus/xcm/xcm-emulator/src/lib.rs#L1221){target=\_blank}**: Creates bridges between chains, specifying the source, target, and message handler. Example:
1040110550

1040210551
```rust
10403-
10552+
decl_test_bridges! {
10553+
pub struct RococoWestendMockBridge {
10554+
source = BridgeHubRococoPara,
10555+
target = BridgeHubWestendPara,
10556+
handler = RococoWestendMessageHandler
10557+
},
10558+
pub struct WestendRococoMockBridge {
10559+
source = BridgeHubWestendPara,
10560+
target = BridgeHubRococoPara,
10561+
handler = WestendRococoMessageHandler
10562+
}
10563+
}
1040410564
```
1040510565

1040610566
- **[`decl_test_networks`](https://github.com/paritytech/polkadot-sdk/blob/polkadot-stable2506-2/cumulus/xcm/xcm-emulator/src/lib.rs#L958){target=\_blank}**: Defines a testing network with relay chains, parachains, and bridges, implementing message transport and processing logic. Example:
1040710567

1040810568
```rust
10409-
10569+
decl_test_networks! {
10570+
pub struct WestendMockNet {
10571+
relay_chain = Westend,
10572+
parachains = vec![
10573+
AssetHubWestend,
10574+
BridgeHubWestend,
10575+
CollectivesWestend,
10576+
CoretimeWestend,
10577+
PeopleWestend,
10578+
PenpalA,
10579+
PenpalB,
10580+
],
10581+
bridge = ()
10582+
},
10583+
}
1041010584
```
1041110585

1041210586
By leveraging these macros, developers can customize their testing networks by defining relay chains and parachains tailored to their needs. For guidance on implementing a mock runtime for a Polkadot SDK-based chain, refer to the [Pallet Testing](/parachains/customize-runtime/pallet-development/pallet-testing/){target=\_blank} article.

0 commit comments

Comments
 (0)