[졸과][NEAR] near-cli로 createAccount

2024. 2. 14. 01:24·프로젝트/졸업과제

배경

Near Github에서 제공하는 Cookbook을 따라 계정 생성을 시도해보았다. Wallet dapp을 구현하기 위해서는 localstorage에 키를 저장해야 했기에 BrowserLocalStorageKeyStore를 사용해야 했는데 도저히 안 됐다. 니어코리아 공식 디스코드 채널의 도움으로 CLI에서 새 계정을 생성하는 데 성공해서 그 과정을 적어보고자 한다.

 

개발 환경

WSL: near core는 windows를 지원하지 않는다고 한다. mac/linux면 문제 없다.

Node 16+

Creator Account: 새 계정을 생성하기 위해서는 일정 near를 보유한 기존 계정(Named Account, kimcookieya.testnet)이 있어야 한다. testnet에서는 계정 생성 시 기본적으로 near를 보유하기 때문에 문제 없다.

 

로컬에서 기존 계정의 Full Access 키 발급

$ npm install -g near-cli

$ near login

위 명령어 입력 시, 지갑 웹으로 이동하여 로그인 후 Full Access 키를 로컬에 발급하는 것에 서면(Sign)하면, 로컬에 키를 발급받을 수 있다. wsl 기준, `root/home/<username>/.near-credentials/testnet` 내에 생성된다.

Access Keys
All keys are stored locally at the root of your HOME directory:
~/.near-credentials (MAC / Linux)
C:\Users\YOUR_ACCOUNT\.near-credentials (Windows)

 

cookbook/create-testnet-account.js 실행

$ npm install near-api-js

$ node <Creator Account ID> <New Account ID> <near amount>

예) node kimcookieya.testnet kimcookieya2.testnet 1

 

 

cookbook/create-testnet-account.js

const HELP = `Please run this script in the following format:

    node create-testnet-account.js CREATOR_ACCOUNT.testnet NEW_ACCOUNT.testnet AMOUNT
`;

const { connect, KeyPair, keyStores, utils } = require("near-api-js");
const path = require("path");
const homedir = require("os").homedir();

const CREDENTIALS_DIR = ".near-credentials";
const credentialsPath = path.join(homedir, CREDENTIALS_DIR);
const keyStore = new keyStores.UnencryptedFileSystemKeyStore(credentialsPath);

const config = {
  keyStore,
  networkId: "testnet",
  nodeUrl: "https://rpc.testnet.near.org",
};

if (process.argv.length !== 5) {
  console.info(HELP);
  process.exit(1);
}

createAccount(process.argv[2], process.argv[3], process.argv[4]);

async function createAccount(creatorAccountId, newAccountId, amount) {
  const near = await connect({ ...config, keyStore });
  const creatorAccount = await near.account(creatorAccountId);
  const keyPair = KeyPair.fromRandom("ed25519");
  const publicKey = keyPair.publicKey.toString();
  await keyStore.setKey(config.networkId, newAccountId, keyPair);

  return await creatorAccount.functionCall({
    contractId: "testnet",
    methodName: "create_account",
    args: {
      new_account_id: newAccountId,
      new_public_key: publicKey,
    },
    gas: "300000000000000",
    attachedDeposit: utils.format.parseNearAmount(amount),
  });
}

 

본제

CLI에서 실행하기 위해서는 UnencryptedFileSystemKeyStore를 사용하여 기존 계정의 Full Access 키를 주어야만 한다.  CLI에서 계정 생성은 성공했으나, 우리가 궁극적으로 해야하는 것은 Wallet dapp 내에서 자유롭게 계정을 생성할 수 있도록 하는 것이다. 이 말은 곧, 크롬 익스텐션 앱인 React 클라이언트 내에서 BrowserLocalStorageKeyStore를 사용하여 계정을 생성해야 한다는 것이다. 그러나 이것에 관한 에제나 사용 방법은 적혀있지 않았다.. 일단 니어코리아 디코 채널과 지속적으로 이야기하며 공부해봐야 할 부분인 것 같다.

 

졸과를 본격적으로 구현하기 위해서는 Wallet dapp의 구현이 필수적인데 벌써부터 큰 벽을 만난 것 같다.

'프로젝트 > 졸업과제' 카테고리의 다른 글

[졸과][NEAR] 계정 생성 어떻게 할까?  (0) 2024.02.16
[졸과][NEAR] 계정 생성을 어떻게 처리할지 고민 중  (0) 2024.02.15
[졸과][NEAR] Account, State, Smart Contract  (1) 2024.02.08
[졸과][NEAR] 왜 NEAR인가  (0) 2024.02.08
[졸과][블록체인] DID의 개념과 생성  (1) 2024.02.06
'프로젝트/졸업과제' 카테고리의 다른 글
  • [졸과][NEAR] 계정 생성 어떻게 할까?
  • [졸과][NEAR] 계정 생성을 어떻게 처리할지 고민 중
  • [졸과][NEAR] Account, State, Smart Contract
  • [졸과][NEAR] 왜 NEAR인가
KimCookieYa
KimCookieYa
무엇이 나를 살아있게 만드는가
  • KimCookieYa
    쿠키의 주저리
    KimCookieYa
  • 전체
    오늘
    어제
    • 분류 전체보기 (572)
      • 혼잣말 (87)
      • TIL (2)
      • 커리어 (24)
        • Sendy (21)
        • 외부활동 기록 (2)
      • 프로젝트 (186)
        • 티스토리 API (5)
        • 코드프레소 체험단 (89)
        • Web3 (3)
        • Pint OS (16)
        • 나만무 (14)
        • 대회 (6)
        • 정글 FE 스터디 (16)
        • MailBadara (12)
        • github.io (1)
        • 인공지능 동아리, AID (5)
        • 졸업과제 (18)
        • OSSCA 2024 (1)
      • 크래프톤 정글 2기 (80)
      • IT (167)
        • 코딩 (4)
        • CS (18)
        • 에러 (5)
        • 블록체인 (23)
        • Front-End (38)
        • 알고리즘&자료구조 정리 (3)
        • 코딩테스트 (3)
        • BOJ 문제정리 (41)
        • WILT (12)
        • ML-Agents (4)
        • 강화학습 (1)
        • Android (0)
        • LLM (2)
      • 전공 (1)
        • 머신러닝 (1)
      • 자기계발 (20)
        • 빡공단X베어유 (2)
        • 독서 (15)
  • 블로그 메뉴

    • 홈
    • 방명록
    • Github
    • Velog
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Flutter
    딥러닝
    RNN
    머신러닝
    졸업과제
    파이썬
    리액트
    블록체인
    JavaScript
    자바스크립트
    NEAR Protocol
    react
    프로그래머스
    docker
    코드프레소
    Pint OS
    사이드프로젝트
    numpy
    부산대
    해커톤
    OS
    크래프톤정글
    위상정렬
    MailBadara
    나만무
    알고리즘
    pintos
    글리치해커톤
    니어프로토콜
    핀토스
  • hELLO· Designed By정상우.v4.10.3
KimCookieYa
[졸과][NEAR] near-cli로 createAccount
상단으로

티스토리툴바