【发布时间】:2021-04-13 07:18:37
【问题描述】:
在近协议中创建主账户需要存款。这可能会使应用程序用户难以入职。创建子帐户是免费的,但是在不暴露主帐户私钥的情况下最好的方法是什么。我应该将主账户的私钥存储在服务器中并允许用户创建账户吗?
Near api js 允许创建帐户,是否可以使用 python 或从 python 调用 json rpc?
【问题讨论】:
标签: nearprotocol
在近协议中创建主账户需要存款。这可能会使应用程序用户难以入职。创建子帐户是免费的,但是在不暴露主帐户私钥的情况下最好的方法是什么。我应该将主账户的私钥存储在服务器中并允许用户创建账户吗?
Near api js 允许创建帐户,是否可以使用 python 或从 python 调用 json rpc?
【问题讨论】:
标签: nearprotocol
另一个不需要您的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,这也会起作用。
【讨论】: