You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* fix: add eth precompiles
* Enhance precompiles documentation by adding user interaction details and removing outdated standard precompiles table.
* Add link to sample contracts for precompiles in documentation
* fix: llms
* fixes
* resolve conflicts
* applied feedback
---------
Co-authored-by: Taylor Lucero <[email protected]>
Co-authored-by: Taylor Lucero <[email protected]>
@@ -256,7 +256,7 @@ First, you'll update the runtime's `Cargo.toml` file to include the Utility pall
256
256
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:
257
257
258
258
```toml hl_lines="4" title="runtime/Cargo.toml"
259
-
[dependencies]
259
+
260
260
...
261
261
polkadot-sdk = { workspace = true, features = [
262
262
"pallet-utility",
@@ -267,19 +267,17 @@ First, you'll update the runtime's `Cargo.toml` file to include the Utility pall
267
267
2. In the same `[dependencies]` section, add the custom pallet that you built from scratch with the following line:
3. In the `[features]` section, add the custom pallet to the `std` feature list:
276
276
277
277
```toml hl_lines="5" title="Cargo.toml"
278
-
[features]
279
-
default = ["std"]
280
-
std = [
278
+
281
279
...
282
-
"custom-pallet/std",
280
+
283
281
...
284
282
]
285
283
```
@@ -2701,53 +2699,13 @@ To build the smart contract, follow the steps below:
2701
2699
6. Add the getter and setter functions:
2702
2700
2703
2701
```solidity
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
-
}
2702
+
2725
2703
```
2726
2704
2727
2705
??? code "Complete Storage.sol contract"
2728
2706
2729
2707
```solidity title="Storage.sol"
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
-
}
2708
+
2751
2709
```
2752
2710
2753
2711
## Understanding the Code
@@ -3385,23 +3343,7 @@ To create the ERC-20 contract, you can follow the steps below:
3385
3343
3. Now, paste the following ERC-20 contract code into the editor:
3386
3344
3387
3345
```solidity title="MyToken.sol"
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
-
}
3346
+
3405
3347
```
3406
3348
3407
3349
The key components of the code above are:
@@ -3719,26 +3661,7 @@ To create the NFT contract, you can follow the steps below:
3719
3661
3. Now, paste the following NFT contract code into the editor.
3720
3662
3721
3663
```solidity title="MyNFT.sol"
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
-
}
3664
+
3742
3665
```
3743
3666
3744
3667
The key components of the code above are:
@@ -8301,16 +8224,7 @@ The [`Account` data type](https://paritytech.github.io/polkadot-sdk/master/frame
8301
8224
The code snippet below shows how accounts are defined:
8302
8225
8303
8226
```rs
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
-
>;
8227
+
8314
8228
```
8315
8229
8316
8230
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`).
@@ -8334,24 +8248,7 @@ For a detailed explanation of storage maps, see the [`StorageMap`](https://parit
8334
8248
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.
/// 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
-
}
8251
+
8355
8252
```
8356
8253
8357
8254
The `AccountInfo` structure includes the following components:
@@ -9365,8 +9262,7 @@ The [`XcmRouter`](https://paritytech.github.io/polkadot-sdk/master/pallet_xcm/pa
9365
9262
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.
For more details about XCM transport protocols, see the [XCM Channels](/develop/interoperability/xcm-channels/){target=\_blank} page.
@@ -10492,95 +10388,25 @@ The `xcm-emulator` provides macros for defining a mocked testing environment. Ch
10492
10388
- **[`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:
- **[`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:
- **[`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:
10550
10401
10551
10402
```rust
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
-
}
10403
+
10564
10404
```
10565
10405
10566
10406
- **[`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:
10567
10407
10568
10408
```rust
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
-
}
10409
+
10584
10410
```
10585
10411
10586
10412
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