メインコンテンツまでスキップ

3. アカウント

アカウントは、ブロックチェーン上で資産や権利を管理するための単位です。 Symbol では、アカウントは「秘密鍵」と「公開鍵」のペアでできています。

  • 秘密鍵:アカウントの所有を証明する大切な情報です。絶対に他人に知られないようにしましょう。
  • 公開鍵:秘密鍵から作られ、ネットワーク上でアカウントを識別するのに使います。
  • アドレス:公開鍵から作られる短い文字列で、送金や受け取りのときに使います。

アカウントがあれば、Symbol ネットワークでトランザクションを送ったり、モザイクを受け取ったりできます。

3.1 アカウント作成

3.1.1 秘密鍵から生成

アカウントを作る基本的な方法は、ランダムに秘密鍵を作ることです。 秘密鍵はアカウントの所有を証明する大事な情報で、ここから公開鍵とアドレスが作られます。 次のコード例は、SDK を使って秘密鍵を作り、新しいアカウントを作る方法です。

import { PrivateKey } from 'symbol-sdk';
import { SymbolFacade } from 'symbol-sdk/symbol';

// ランダムな秘密鍵生成
const privateKey = PrivateKey.random();

// 秘密鍵からアカウント生成
const facade = new SymbolFacade('testnet');
const account = facade.createAccount(privateKey);

console.log('privateKey:', account.keyPair.privateKey.toString());
console.log('publicKey :', account.publicKey.toString());
console.log('address :', account.address.toString());

実行例

privateKey: A882DF391CAA90BED9070DBF9AB53C2276973E31F06B85F9****************
publicKey : 372B5E1C47C10A8035367D5BF7804176790FBF5BC58F53F159FDA9EDA464965A
address : TDTXOJZ56VWY4777JF3NQX3BJSYPCVXBUPPVP6Q

3.1.2 既存の秘密鍵から生成

既存の秘密鍵を使ってアカウントを生成することもできます。 次のコード例は、秘密鍵からアカウントを作る方法です。

import { PrivateKey } from "symbol-sdk";
import { SymbolFacade } from "symbol-sdk/symbol";

// 既存の秘密鍵
const privateKey = new PrivateKey(
"A882DF391CAA90BED9070DBF9AB53C2276973E31F06B85F9****************"
);

// 秘密鍵からアカウント生成
const facade = new SymbolFacade("testnet");
const account = facade.createAccount(privateKey);

console.log("privateKey:", account.keyPair.privateKey.toString());
console.log("publicKey :", account.publicKey.toString());
console.log("address :", account.address.toString());

実行例

privateKey: A882DF391CAA90BED9070DBF9AB53C2276973E31F06B85F9****************
publicKey : 372B5E1C47C10A8035367D5BF7804176790FBF5BC58F53F159FDA9EDA464965A
address : TDTXOJZ56VWY4777JF3NQX3BJSYPCVXBUPPVP6Q

3.1.3 ニーモニックから生成

もう一つの方法は、ニーモニック(単語の並び)からアカウントを作ることです。 ニーモニックがあれば、アカウントを失っても復元できます。 次のコード例は、ニーモニックから秘密鍵・公開鍵・アドレスを作ってアカウントを作る方法です。

import { Bip32 } from 'symbol-sdk';
import { SymbolFacade } from 'symbol-sdk/symbol';

// ニーモニック生成
const bip32 = new Bip32();
const mnemonic = bip32.random();
console.log('mnemonic:', mnemonic);

// ニーモニックからアカウント生成
const facade = new SymbolFacade('testnet');
const password = '';
const bip32Node = bip32.fromMnemonic(mnemonic, password);

const maxAccounts = 3;
for (let i = 0; i < maxAccounts; i++) {
const bip32Path = facade.bip32Path(i);
const childBip32Node = bip32Node.derivePath(bip32Path);
const keypair = SymbolFacade.bip32NodeToKeyPair(childBip32Node);
const account = facade.createAccount(keypair.privateKey);
console.log(`privateKey: ${account.keyPair.privateKey}`);
console.log(`publicKey : ${account.publicKey}`);
console.log(`address : ${account.address}`);
console.log('===');
}

実行例

mnemonic: hobby skin abstract comfort mouse bullet banana sunset mass liberty collect stem aisle accuse cloud enough ***** ***** ***** ***** ***** ***** ***** *****
===
privateKey: 5E4CA5A9AE9258AD4C498D50A8D492CA25BCF2A0FD25880E****************
publicKey : 43F7D852263AB7808C9234EEF496E944B5CF19FB91BE6F6881E1CEFDB0D664E9
address : TCU2H6EQTY6IR5JZAY6PYKFIWIGGY5SZZMUBEGQ
===
privateKey: E6150D2B47B5B1CA7AE80FD093BC351B858C0764498A0590****************
publicKey : 1F3D9AC4169C9E8B6132AF09A344965CEE0EDEC58CEF96B1D407B0F169655379
address : TAGXSJZEGEOFRR7ZI6Q2IERQEQLPAM25F4OLHOQ
===
privateKey: 93B34EBA41CFBF692D4FCE7B5C89522C1849C6AEB140BF3D****************
publicKey : CCCA6B17906BD0EB3E30C0D046102350EAF689AF443F019380F53576923CAC74
address : TDWVMPSZNTC76GUBA3CTMUPFIWA5BCBJN6FS3WQ

3.2 公開アカウント

公開鍵だけが分かっている場合でも、公開鍵からアカウントを作ることができます。 この方法は、相手のアカウントを扱いたいときや、受信専用のアカウント情報を作りたいときに便利です。 次のコード例は、公開鍵からアカウントを作り、アドレスを確認する方法です。

import { PublicKey } from 'symbol-sdk';
import { SymbolFacade } from 'symbol-sdk/symbol';

// 公開鍵
const publicKey = new PublicKey(
'43F7D852263AB7808C9234EEF496E944B5CF19FB91BE6F6881E1CEFDB0D664E9'
);

// 公開鍵から公開アカウント生成
const facade = new SymbolFacade('testnet');
const account = facade.createPublicAccount(publicKey);

console.log('publicKey :', account.publicKey.toString());
console.log('address :', account.address.toString());

実行例

publicKey : 43F7D852263AB7808C9234EEF496E944B5CF19FB91BE6F6881E1CEFDB0D664E9
address : TCU2H6EQTY6IR5JZAY6PYKFIWIGGY5SZZMUBEGQ

3.3 アドレス

公開鍵や秘密鍵がなくても、アドレスだけ分かっていればアカウント情報を扱えます。 この方法は、相手のアドレスだけ知っている場合などに便利です。 次のコード例は、アドレス文字列からアドレスオブジェクトを作り、トランザクション送信時に使う方法です。

import { SymbolFacade } from 'symbol-sdk/symbol';

const address = new SymbolFacade.Address(
'TCU2H6EQTY6IR5JZAY6PYKFIWIGGY5SZZMUBEGQ'
);

console.log('address :', address.toString());

実行例

address   : TCU2H6EQTY6IR5JZAY6PYKFIWIGGY5SZZMUBEGQ