From bbb1db22e814c062f82c0d883a9f0ffd5f222026 Mon Sep 17 00:00:00 2001 From: nhussein11 Date: Mon, 1 Dec 2025 09:08:26 -0300 Subject: [PATCH 1/2] fix: create account --- .../accounts/create-account.md | 182 +++++++++++++++++- .../create-account/create-account-py.html | 5 + .../create-account/create-account-rs.html | 5 + .../create-account/create-account-ts.html | 6 + .../accounts/create-account/create-account.rs | 9 + .../accounts/create-account/create-account.ts | 15 ++ .../accounts/create-account/create_account.py | 7 + 7 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 .snippets/code/chain-interactions/accounts/create-account/create-account-py.html create mode 100644 .snippets/code/chain-interactions/accounts/create-account/create-account-rs.html create mode 100644 .snippets/code/chain-interactions/accounts/create-account/create-account-ts.html create mode 100644 .snippets/code/chain-interactions/accounts/create-account/create-account.rs create mode 100644 .snippets/code/chain-interactions/accounts/create-account/create-account.ts create mode 100644 .snippets/code/chain-interactions/accounts/create-account/create_account.py diff --git a/.chain-interactions/accounts/create-account.md b/.chain-interactions/accounts/create-account.md index 30404ce4c..6dbe7b664 100644 --- a/.chain-interactions/accounts/create-account.md +++ b/.chain-interactions/accounts/create-account.md @@ -1 +1,181 @@ -TODO \ No newline at end of file +--- +title: Create an Account +description: Step-by-step guide to creating Polkadot accounts using different programming languages and libraries, including JavaScript, Python, and Rust examples. +categories: Basics, Accounts, Developer Tools +--- + +# Create an Account + +## Introduction + +Creating accounts is a fundamental operation when building applications on Polkadot and its parachains. Accounts serve as the basis for identity, asset ownership, and transaction signing. Understanding how to generate and manage accounts programmatically enables you to build wallets, automate operations, and create seamless user experiences. + +This tutorial will guide you through creating accounts using different programming languages and libraries. + +## Prerequisites + +Before starting, make sure you have: + +- Basic understanding of public-key cryptography concepts +- Development environment set up for your chosen language +- Familiarity with the programming language you'll be using + +!!! note + Polkadot accounts are based on the SR25519 signature scheme by default, though ED25519 and ECDSA are also supported. Each account consists of a public key (address) and a private key (seed/mnemonic). Keep your private keys secure and never share them. + +## JavaScript/TypeScript + +Create a new project directory and initialize it: + +```bash +mkdir account-creator +cd account-creator +npm init -y +``` + +Install the required packages: + +```bash +npm install @polkadot/util-crypto @polkadot/keyring +npm install --save-dev typescript tsx +``` + +Create a file named `create-account.ts`: + +```typescript title="create-account.ts" +--8<-- 'code/chain-interactions/accounts/create-account/create-account.ts' +``` + +Key aspects of the code: + +- **Mnemonic generation**: Uses `mnemonicGenerate()` to create a 12-word BIP39 mnemonic phrase for human-readable key backup +- **Keyring**: The `Keyring` class manages accounts with specified signature scheme and address format +- **SS58 format**: Setting `ss58Format: 0` configures addresses for the Polkadot relay chain + +Execute the script using `tsx`: + +```bash +npx tsx create-account.ts +``` + +You should see output similar to: + +--8<-- 'code/chain-interactions/accounts/create-account/create-account-ts.html' + +## Python + +Python developers can use the `substrate-interface` library to create and manage Polkadot accounts. + +Create a new project directory and set up a virtual environment: + +```bash +mkdir account-creator-python +cd account-creator-python +python3 -m venv venv +source venv/bin/activate # On Windows: venv\Scripts\activate +``` + +Install the required package: + +```bash +pip install substrate-interface +``` + +Create a file named `create_account.py`: + +```python title="create_account.py" +--8<-- 'code/chain-interactions/accounts/create-account/create_account.py' +``` + +Key aspects of the code: + +- **Mnemonic generation**: The `generate_mnemonic()` function creates a BIP39-compatible phrase +- **Keypair creation**: `Keypair.create_from_mnemonic()` derives keys from the mnemonic + +Execute the script: + +```bash +python create_account.py +``` + +You should see output similar to: + +--8<-- 'code/chain-interactions/accounts/create-account/create-account-py.html' + +## Rust + +Rust provides low-level access to Substrate primitives for account creation through the `sp-core` and `sp-keyring` crates. + +Create a new Rust project: + +```bash +cargo new account-creator-rust +cd account-creator-rust +``` + +Add dependencies to your `Cargo.toml`: + +```toml title="Cargo.toml" +[package] +name = "account-creator-rust" +version = "0.1.0" +edition = "2021" + +[dependencies] +sp-core = "28.0" +sp-runtime = "31.0" +``` + +Create your account generation code in `src/main.rs`: + +```rust title="src/main.rs" +--8<-- 'code/chain-interactions/accounts/create-account/create-account.rs' +``` + +Key aspects of the code: + +- **Keypair generation**: [`sr25519::Pair::generate_with_phrase()`](https://docs.rs/sp-core/latest/sp_core/crypto/trait.Pair.html#method.generate_with_phrase){target=\_blank} creates a new key pair with mnemonic +- **Public key extraction**: The [`public()`](https://docs.rs/sp-core/latest/sp_core/crypto/trait.Pair.html#tymethod.public){target=\_blank} method retrieves the public key from the pair +- **SS58 encoding**: Uses Polkadot's address format for the human-readable address + +Build and run the project: + +```bash +cargo run +``` + +You should see output similar to: + +--8<-- 'code/chain-interactions/accounts/create-account/create-account-rs.html' + +## Where to Go Next + +Now that you can create accounts programmatically, explore related guides to fund accounts and send transactions. + +
+ +- Guide __Send Transactions with SDKs__ + + --- + + Learn how to send signed transactions using your newly created accounts with Polkadot-API and Polkadot.js API libraries. + + [:octicons-arrow-right-24: Get Started](/chain-interactions/send-transactions/with-sdks/) + +- Guide __Calculate Transaction Fees__ + + --- + + Learn how to estimate transaction fees before sending transactions from your accounts. + + [:octicons-arrow-right-24: Get Started](/chain-interactions/send-transactions/calculate-transaction-fees/) + +- Guide __Query Chain Data__ + + --- + + Explore different methods for querying blockchain data including account balances and other chain state. + + [:octicons-arrow-right-24: Get Started](/chain-interactions/query-data/query-sdks/) + +
\ No newline at end of file diff --git a/.snippets/code/chain-interactions/accounts/create-account/create-account-py.html b/.snippets/code/chain-interactions/accounts/create-account/create-account-py.html new file mode 100644 index 000000000..5b3956b7d --- /dev/null +++ b/.snippets/code/chain-interactions/accounts/create-account/create-account-py.html @@ -0,0 +1,5 @@ +
+ python create_account.py + Address: 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5 + Mnemonic: cushion dog echo people vendor curve truck begin latin romance rebuild ... +
\ No newline at end of file diff --git a/.snippets/code/chain-interactions/accounts/create-account/create-account-rs.html b/.snippets/code/chain-interactions/accounts/create-account/create-account-rs.html new file mode 100644 index 000000000..a6dd6dfe7 --- /dev/null +++ b/.snippets/code/chain-interactions/accounts/create-account/create-account-rs.html @@ -0,0 +1,5 @@ +
+ cargo run + Address: 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5 + Mnemonic: cushion dog echo people vendor curve truck begin latin romance rebuild ... +
\ No newline at end of file diff --git a/.snippets/code/chain-interactions/accounts/create-account/create-account-ts.html b/.snippets/code/chain-interactions/accounts/create-account/create-account-ts.html new file mode 100644 index 000000000..e63f44102 --- /dev/null +++ b/.snippets/code/chain-interactions/accounts/create-account/create-account-ts.html @@ -0,0 +1,6 @@ +
+ npx tsx create-account.ts + + Address: 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5 + Mnemonic: cushion dog echo people vendor curve truck begin latin romance rebuild ... +
\ No newline at end of file diff --git a/.snippets/code/chain-interactions/accounts/create-account/create-account.rs b/.snippets/code/chain-interactions/accounts/create-account/create-account.rs new file mode 100644 index 000000000..a71343ce0 --- /dev/null +++ b/.snippets/code/chain-interactions/accounts/create-account/create-account.rs @@ -0,0 +1,9 @@ +use sp_core::{crypto::Ss58Codec, Pair}; + +fn main() { + let (pair, phrase, _) = sp_core::sr25519::Pair::generate_with_phrase(None); + let address = pair.public().to_ss58check(); + + println!("Address: {}", address); + println!("Mnemonic: {}", phrase); +} \ No newline at end of file diff --git a/.snippets/code/chain-interactions/accounts/create-account/create-account.ts b/.snippets/code/chain-interactions/accounts/create-account/create-account.ts new file mode 100644 index 000000000..324057e82 --- /dev/null +++ b/.snippets/code/chain-interactions/accounts/create-account/create-account.ts @@ -0,0 +1,15 @@ +import { cryptoWaitReady, mnemonicGenerate } from "@polkadot/util-crypto"; +import { Keyring } from "@polkadot/keyring"; + +async function main() { + await cryptoWaitReady(); + + const mnemonic = mnemonicGenerate(12); + const keyring = new Keyring({ type: "sr25519", ss58Format: 0 }); + const pair = keyring.addFromMnemonic(mnemonic); + + console.log(`Address: ${pair.address}`); + console.log(`Mnemonic: ${mnemonic}`); +} + +main().catch(console.error); \ No newline at end of file diff --git a/.snippets/code/chain-interactions/accounts/create-account/create_account.py b/.snippets/code/chain-interactions/accounts/create-account/create_account.py new file mode 100644 index 000000000..e003b2845 --- /dev/null +++ b/.snippets/code/chain-interactions/accounts/create-account/create_account.py @@ -0,0 +1,7 @@ +from substrateinterface import Keypair + +mnemonic = Keypair.generate_mnemonic() +keypair = Keypair.create_from_mnemonic(mnemonic) + +print(f"Address: {keypair.ss58_address}") +print(f"Mnemonic: {mnemonic}") \ No newline at end of file From f68f7b8f376fc9aeeb74129249c035af3e116362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Hussein?= <80422357+nhussein11@users.noreply.github.com> Date: Tue, 2 Dec 2025 08:21:14 -0300 Subject: [PATCH 2/2] Update .chain-interactions/accounts/create-account.md Co-authored-by: Bruno Galvao --- .chain-interactions/accounts/create-account.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.chain-interactions/accounts/create-account.md b/.chain-interactions/accounts/create-account.md index 6dbe7b664..eb9f61baf 100644 --- a/.chain-interactions/accounts/create-account.md +++ b/.chain-interactions/accounts/create-account.md @@ -30,7 +30,7 @@ Create a new project directory and initialize it: ```bash mkdir account-creator cd account-creator -npm init -y +npm init -y && npm pkg set type=module ``` Install the required packages: