3. アカウント
アカウントは、ブロックチェーン上で資産や権利を管理するための単位です。 Symbol では、アカウントは「秘密鍵」と「公開鍵」のペアでできています。
- 秘密鍵:アカウントの所有を証明する大切な情報です。絶対に他人に知られないようにしましょう。
- 公開鍵:秘密鍵から作られ、ネットワーク上でアカウントを識別するのに使います。
- アドレス:公開鍵から作られる短い文字列で、送金や受け取りのときに使います。
アカウントがあれば、Symbol ネットワークでトランザクションを送ったり、モザイクを受け取ったりできます。
3.1 アカウント作成
3.1.1 秘密鍵から生成
アカウントを作る基本的な方法は、ランダムに秘密鍵を作ることです。 秘密鍵はアカウントの所有を証明する大事な情報で、ここから公開鍵とアドレスが作られます。 次のコード例は、SDK を使って秘密鍵を作り、新しいアカウントを作る方法です。
- TypeScript
- Python
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());
from symbolchain.CryptoTypes import PrivateKey
from symbolchain.facade.SymbolFacade import SymbolFacade
# ランダムな秘密鍵生成
privateKey = PrivateKey.random()
# 秘密鍵からアカウント生成
facade = SymbolFacade('testnet')
account = facade.create_account(privateKey)
print(f'privateKey: {account.key_pair.private_key}')
print(f'publicKey : {account.public_key}')
print(f'address : {account.address}')
実行例
privateKey: A882DF391CAA90BED9070DBF9AB53C2276973E31F06B85F9****************
publicKey : 372B5E1C47C10A8035367D5BF7804176790FBF5BC58F53F159FDA9EDA464965A
address : TDTXOJZ56VWY4777JF3NQX3BJSYPCVXBUPPVP6Q
3.1.2 既存の秘密鍵から生成
既存の秘密鍵を使ってアカウントを生成することもできます。 次のコード例は、秘密鍵からアカウントを作る方法です。
- TypeScript
- Python
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());
from symbolchain.CryptoTypes import PrivateKey
from symbolchain.facade.SymbolFacade import SymbolFacade
# 既存の秘密鍵
privateKey = PrivateKey(
"A882DF391CAA90BED9070DBF9AB53C2276973E31F06B85F9****************"
)
# 秘密鍵からアカウント生成
facade = SymbolFacade('testnet')
account = facade.create_account(privateKey)
print(f'privateKey: {account.key_pair.private_key}')
print(f'publicKey : {account.public_key}')
print(f'address : {account.address}')
実行例
privateKey: A882DF391CAA90BED9070DBF9AB53C2276973E31F06B85F9****************
publicKey : 372B5E1C47C10A8035367D5BF7804176790FBF5BC58F53F159FDA9EDA464965A
address : TDTXOJZ56VWY4777JF3NQX3BJSYPCVXBUPPVP6Q
3.1.3 ニーモニックから生成
もう一つの方法は、ニーモニック(単語の並び)からアカウントを作ることです。 ニーモニックがあれば、アカウントを失っても復元できます。 次のコード例は、ニーモニックから秘密鍵・公開鍵・アドレスを作ってアカウントを作る方法です。
- TypeScript
- Python
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('===');
}
from symbolchain.Bip32 import Bip32
from symbolchain.facade.SymbolFacade import SymbolFacade
# ニーモニック生成
bip32 = Bip32()
mnemonic = bip32.random()
print(f"mnemonic: {mnemonic}")
# ニーモニックからアカウント生成
facade = SymbolFacade("testnet")
password = ""
bip32Node = bip32.from_mnemonic(mnemonic, password)
max_accounts = 3
for i in range(max_accounts):
bip32_path = facade.bip32_path(i)
child_bip32_node = bip32Node.derive_path(bip32_path)
key_pair = SymbolFacade.bip32_node_to_key_pair(child_bip32_node)
account = facade.create_account(key_pair.private_key)
print(f"privateKey: {account.key_pair.private_key}")
print(f"publicKey : {account.public_key}")
print(f"address : {account.address}")
print('===')
実行例
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 公開アカウント
公開鍵だけが分かっている場合でも、公開鍵からアカウントを作ることができます。 この方法は、相手のアカウントを扱いたいときや、受信専用のアカウント情報を作りたいときに便利です。 次のコード例は、公開鍵からアカウントを作り、アドレスを確認する方法です。
- TypeScript
- Python
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());
from symbolchain.CryptoTypes import PublicKey
from symbolchain.facade.SymbolFacade import SymbolFacade
# 公開鍵
publicKey = PublicKey(
"43F7D852263AB7808C9234EEF496E944B5CF19FB91BE6F6881E1CEFDB0D664E9"
)
# 公開鍵からアカウント生成
facade = SymbolFacade('testnet')
account = facade.create_public_account(publicKey)
print(f'publicKey : {account.public_key}')
print(f'address : {account.address}')
実行例
publicKey : 43F7D852263AB7808C9234EEF496E944B5CF19FB91BE6F6881E1CEFDB0D664E9
address : TCU2H6EQTY6IR5JZAY6PYKFIWIGGY5SZZMUBEGQ
3.3 アドレス
公開鍵や秘密鍵がなくても、アドレスだけ分かっていればアカウント情報を扱えます。 この方法は、相手のアドレスだけ知っている場合などに便利です。 次のコード例は、アドレス文字列からアドレスオブジェクトを作り、トランザクション送信時に使う方法です。
- TypeScript
- Python
import { SymbolFacade } from 'symbol-sdk/symbol';
const address = new SymbolFacade.Address(
'TCU2H6EQTY6IR5JZAY6PYKFIWIGGY5SZZMUBEGQ'
);
console.log('address :', address.toString());
from symbolchain.facade.SymbolFacade import SymbolFacade
address = SymbolFacade.Address('TCU2H6EQTY6IR5JZAY6PYKFIWIGGY5SZZMUBEGQ')
print(f'address : {address}')
実行例
address : TCU2H6EQTY6IR5JZAY6PYKFIWIGGY5SZZMUBEGQ