如何在 Substrate 区块链中初始化用户的余额?

Sha*_*izi 0 blockchain substrate

当我启动我的 Substrate 区块链时,我想用一些自由余额来初始化用户。

我怎样才能做到这一点?

如果我的链已经在运行并且我不想重新启动它怎么办?

Sha*_*izi 6

创世纪配置

设置具有一些初始自由余额的 Substrate 用户的最佳方法是更新您的chain_spec.rs文件,以便用户在区块链的创世块中获得单位。

这个创世配置通过 Balances 模块发生:

fn testnet_genesis(initial_authorities: Vec<AuthorityId>, endowed_accounts: Vec<AccountId>, root_key: AccountId) -> GenesisConfig {
    GenesisConfig {
        balances: Some(BalancesConfig {
            transaction_base_fee: 1,
            transaction_byte_fee: 0,
            existential_deposit: 500,
            transfer_fee: 0,
            creation_fee: 0,
            balances: endowed_accounts.iter().cloned().map(|k|(k, 1 << 60)).collect(),
            vesting: vec![],
        }),
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意balances此处的配置,其中每个endowed_accounts都被迭代,并且它们的余额设置为1 << 60(读取 1 左移 60,这是1152921504606846976十进制)。

对于--dev链,endowed_accounts它只是 Alice,但您可以添加任何您想要的帐户,如下所示:

vec![
    account_key("Alice"),
    account_key("Bob"),
    // From public key
    sr25519::Public::from_ss58check("5GukQt4gJW2XqzFwmm3RHa7x6sYuVcGhuhz72CN7oiBsgffx").unwrap(),

]
Run Code Online (Sandbox Code Playgroud)

account_key函数使用输入的字符串生成 sr25519 种子。

fn account_key(s: &str) -> AccountId {
    sr25519::Pair::from_string(&format!("//{}", s), None)
        .expect("static values are valid; qed")
        .public()
}
Run Code Online (Sandbox Code Playgroud)

须藤模块

如果您已经启动了区块链并且启用了 Sudo 模块,那么 use 还可以调用set_balanceBalances 模块中的特权函数。

此功能将允许您将任何帐户的可用和预留余额设置为任何值。

在此处输入图片说明