首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建子账号,不暴露主账号私钥

创建子账号,不暴露主账号私钥
EN

Stack Overflow用户
提问于 2021-01-07 22:44:12
回答 1查看 79关注 0票数 3

在近程协议中创建主账号需要押金。这可能会给应用程序用户带来很大的困难。创建子账号是免费的,但最好的方法是不暴露主账号私钥。我是否应该将主账号的私钥存储在服务器中,并允许用户创建该账号?

Near api js允许创建帐户,是否可以使用python,或者从python调用json rpc?

EN

回答 1

Stack Overflow用户

发布于 2021-01-08 02:49:09

另一个不需要您的FullAccessKey的选项是通过部署到您的帐户的合同创建子帐户。

如果你使用rust和near-sdk-rs,你应该调用create_account函数。以下是文档中有关如何使用它的示例:

代码语言:javascript
复制
Promise::new("bob_near".to_string())
  .create_account()
  .transfer(1000)
  .add_full_access_key(env::signer_account_pk());

下面是创建子账号的合同代码:

代码语言:javascript
复制
use borsh::{BorshDeserialize, BorshSerialize};
use near_sdk::{env, near_bindgen, AccountId, Balance, Promise};

#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;

#[near_bindgen]
#[derive(Default, BorshDeserialize, BorshSerialize)]
pub struct Registry {}

#[near_bindgen]
impl Registry {
    #[init]
    pub fn init() -> Self {}

    #[payable]
    pub fn create_account(&mut self, name: AccountId, balance: Balance) -> Promise {
        let target = format!("{}.{}", name, env::current_account_id());

        // Here add some rules in case you don't want everyone
        // to claim any unclaimed sub-account.

        Promise::new(target)
            .create_account()
            .transfer(balance)
            .add_full_access_key(env::signer_account_pk())
    }
}

要创建任何子账号,任何用户都可以在合约中调用函数create_account函数,传入子账号的名称(只有点前的前缀)和用于初始化帐户的余额。

即使主帐户不再有任何FullAccessKey,这也会起作用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65614492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档