【Xpring SDK】①ウォレット作成
※補足 記事内のXpringはrippleXに改称されました。
Ripple社の投資部門であるXpringが提供しているXpring SDKの使い方について調べました。
以前、本Blogで解説したRippleAPIでは、XRP Ledger上で送金等のトランザクションを行う際に、シークレットと呼ばれる文字列を用いて署名を行うインタフェースが提供されています。
シークレットは、HDウォレット(Hierarchical Deterministic Wallet; 階層的決定性ウォレット)のように『Mnemonic』からと呼ばれる12~24個の英単語から秘密鍵を生成する仕組みと互換性がないため、HDウォレットで管理することができず、扱いづらいという課題がありました。
Xpring SDKでは、HDウォレットの仕組みに対応しており、『BIP39』という規約で決められているMnemonicからのウォレット生成や、様々な種類の暗号資産、複数のアドレスを管理するための『BIP44』という規約に基づいた複数のXRPアドレスの扱いが容易になっています。
(a) 新規作成
まずはXpring SDKを用いて新規にウォレットを作成してみましょう。ここでは、Xpring SDKのJavaScriptライブラリーを使用することにします。
下例のように、Wallet.generateRandomWallet()関数を呼び出すことによって、ランダムなMnemonicが生成されます。
const { Wallet } = require('xpring-js'); const result = Wallet.generateRandomWallet(); console.log(result);
実行結果例
{ wallet: Wallet { publicKey: '0266B9129836900CE27A17B08F0C11E86D0B979D6E659FC12693DA291111EFC2FF', privateKey: '0073B・・・・・' }, mnemonic: 'cousin sentence ・・・・・', derivationPath: "m/44'/144'/0'/0/0" }
生成されたWalletオブジェクトのXRPアドレスを取得するには、getAddress()関数を呼び出します。
上の例では、以下のようにアドレスを取得できます。
const wallet = result.wallet;
wallet.getAddress();
rGJpRuLhSXMf7E2NWst7BLZF98tyUd8HSG
(b) Mnemonicからの生成
Xpring SDKでは、Mnemonicからウォレットを復元してWalletオブジェクトを生成することができます。
『(a) 新規作成』で得られたMnemonicからウォレットが復元できるか試してみましょう。
const { Wallet } = require('xpring-js'); const mnemonic = 'cousin sentence nothing machine artist hand fit curve word vehicle quiz sail'; const wallet = Wallet.generateWalletFromMnemonic(mnemonic); console.log(wallet);
実行結果例
$ node generateMnemonic.js Wallet { publicKey: '0266B9129836900CE27A17B08F0C11E86D0B979D6E659FC12693DA291111EFC2FF', privateKey: '0073BA1956996A45550AFDB8D6950FFDAE5FAA7B1722785EDA2038E67411C29A91' }
同じ公開鍵と秘密鍵のWalletオブジェクトが得られました。
Xpring SDKのWallet.generateWalletFromMnemonic()関数の第2引数にderivePathを指定してWalletオブジェクトを生成することもできます。
const { Wallet } = require('xpring-js'); const mnemonic = 'cousin sentence nothing machine artist hand fit curve word vehicle quiz sail'; const wallet0 = Wallet.generateWalletFromMnemonic(mnemonic, "m/44'/144'/0'/0/0"); const wallet1 = Wallet.generateWalletFromMnemonic(mnemonic, "m/44'/144'/0'/0/1"); console.log(wallet0.getAddress()); console.log(wallet1.getAddress());
derivePathを指定することにより、HDウォレットと同様の仕組みで複数のXRPアドレスを扱うことができます。
rGJpRuLhSXMf7E2NWst7BLZF98tyUd8HSG rKev7AtpjM3UfXYCj7tr2MJD3Rd5fV1AJB
(c) シークレットからのウォレット生成
RippleAPIで使用していたシークレットから、Xpringで使用するWalletオブジェクトを作成することができます。
例として、The Genesis AccountからWalletオブジェクトを取得してみましょう。
プログラム例
const { Wallet } = require('xpring-js'); const genesisSecret = 'snoPBrXtMeMyMHUVTgbuqAfg1SUTb'; const wallet = Wallet.generateWalletFromSeed(genesisSecret); console.log(wallet.getAddress());
実行結果例
rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh