계정 생성
여러 가지 이유로 컨트랙트에서 계정을 생성할 수 있습니다. 한 가지 예시로, 사용자를 점진적으로 온보딩하기 위해, 처음에는 NEAR의 전체 개념을 숨기고 자동으로 계정을 생성하려고 합니다(예: user123.some-cool-game.near
와 같은 메인 컨트랙트의 하위 계정일 수 있음).
잔액이 없는 계정은 거의 사용할 수 없기 때문에, 이를 이전 페이지의 토큰 전송과 결합하고 싶을 것입니다. 또한 계정에 액세스 키를 제공해야 합니다. 그렇게 할 수 있는 방법은 다음과 같습니다.
Promise::new("subaccount.example.near".parse().unwrap())
.create_account()
.add_full_access_key(env::signer_account_pk())
.transfer(250_000_000_000_000_000_000_000); // 2.5e23yN, 0.25N
전체 컨트랙트의 맥락에서
use near_sdk::{env, near_bindgen, AccountId, Balance, Promise};
const INITIAL_BALANCE: Balance = 250_000_000_000_000_000_000_000; // 2.5e23yN, 0.25N
#[near_bindgen]
pub struct Contract {}
#[near_bindgen]
impl Contract {
#[private]
pub fn create_subaccount(prefix: AccountId) -> Promise {
let subaccount_id = AccountId::new_unchecked(
format!("{}.{}", prefix, env::current_account_id())
);
Promise::new(subaccount_id)
.create_account()
.add_full_access_key(env::signer_account_pk())
.transfer(INITIAL_BALANCE)
}
}