배경
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 |