【问题标题】:creating sub-accounts accounts without exposing the master account private key在不暴露主账户私钥的情况下创建子账户账户
【发布时间】:2021-04-13 07:18:37
【问题描述】:

在近协议中创建主账户需要存款。这可能会使应用程序用户难以入职。创建子帐户是免费的,但是在不暴露主帐户私钥的情况下最好的方法是什么。我应该将主账户的私钥存储在服务器中并允许用户创建账户吗?

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

【问题讨论】:

    标签: nearprotocol


    【解决方案1】:

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

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

    Promise::new("bob_near".to_string())
      .create_account()
      .transfer(1000)
      .add_full_access_key(env::signer_account_pk());
    

    这是处理子账户创建的合约代码:

    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,这也会起作用。

    【讨论】:

      猜你喜欢
      • 2020-11-08
      • 2021-05-19
      • 2012-10-30
      • 2018-05-26
      • 2017-11-08
      • 1970-01-01
      • 2020-07-01
      • 2018-08-23
      • 1970-01-01
      相关资源
      最近更新 更多