Counterwalletのアドレス管理方法について調べてみた
はじめに
CounterwalletはHDWalletに対応しているため複数のアドレスを利用することができます。使えるアドレスは膨大にありますが、Counterwalletのアカウント画面に表示されているのは追加したアドレスのみが表示されています。

上記の場合、My Address #1は初期アドレス。#2は追加したアドレスです。今回の記事ではCounterwalletのアドレス管理部分について調べてみます。
プリファレンス保存
答えはシンプルで 使用しているアドレス数をサーバーに保存 しています。保存した情報の取得、登録は以下のとおりです。
- ログイン時
プリファレンス取得APIリクエスト
{
"jsonrpc":"2.0",
"id":0,
"method":"get_preferences",
"params":{
"wallet_id":"TaE1I1neTAxc3y6j1zYg0ULhwqiHr7yxpAaTTg14ths=",
"network":"mainnet",
"for_login":true
}
}
レスポンス
{
"jsonrpc":"2.0",
"result":{
"last_updated":1451978838.0,
"preferences":{
"multisig_addresses":[
],
"address_aliases":{
"R3uobakaUtGWDMQi/aZeXyTWd8OdMwcOpJCB77CMvr8=":"My Address #1",
"m9KIDwVsrFFGK3B/LOIVlJe+IaAWxXG4QyVHSV9AO0c=":"My Address #2"
},
"selected_lang":"en-us",
"num_addresses_used":2,
"has_accepted_license":true,
"watch_only_addresses":[
],
"armory_offline_addresses":[
],
"selected_theme":"ultraLight"
}
},
"id":0
}
- アドレス追加時
プリファレンス更新APIリクエスト
{
"jsonrpc":"2.0",
"id":0,
"method":"store_preferences",
"params":{
"wallet_id":"TaE1I1neTAxc3y6j1zYg0ULhwqiHr7yxpAaTTg14ths=",
"preferences":{
"multisig_addresses":[
],
"address_aliases":{
"R3uobakaUtGWDMQi/aZeXyTWd8OdMwcOpJCB77CMvr8=":"My Address #1",
"m9KIDwVsrFFGK3B/LOIVlJe+IaAWxXG4QyVHSV9AO0c=":"My Address #2",
"4HsxwnkbYoPSiqSMtlwaXfVhJ1DuiM8NCW2ob2LU4aw=":"My Address #3"
},
"selected_lang":"en-us",
"num_addresses_used":3,
"has_accepted_license":true,
"watch_only_addresses":[
],
"armory_offline_addresses":[
],
"selected_theme":"ultraLight"
},
"network":"mainnet",
"referer":"https://wallet.counterwallet.io/"
}
}
プリファレンスのキー「wallet_id」
プリファレンスのキーとしてwallet_idを使用しています。wallet_idはMnemonicのハッシュです。
var hashBase = CryptoJS.SHA256(self.sanitizedEnteredPassphrase() + (USE_TESTNET ? '_testnet' : '')); var hash = CryptoJS.SHA256(hashBase).toString(CryptoJS.enc.Base64); WALLET.identifier(hash);
Tokenly Pocketの場合
ついでにTokenly Pocketの場合ですが、サーバーには保存していません。(Mnemonicを再入力すると追加したアドレスは表示されない)。また初期状態で5つのアドレスがプルダウンに表示されます。

まとめ
使っていないアドレスは表示したくないので、Counterwalletの方がすっきりして良いと思います。ただし、そのためにサーバーを持ちたくない場合は、localStorageにwallet_idを保持してもよいかもしれません。