Electrumにbitcoindのlistsinceblockっぽいコマンドを追加してみた
bitcoindにはあるブロック以降のトランザクションを得るためにlistsinceblockというコマンドがあるが、Electrumには存在しない。 このコマンドがあれば、前回からの変化をチェックしやすくなるため、Webサービスでelectrum daemonを使う場合はぜひ欲しい機能である。
ということで作ってみた。
使い方は普通にlistsinceblockを呼ぶだけ。
$ ./electrum listsinceblock
[
{
"confirmations": 1001,
"height": 388000,
"txid": "xxxx",
"value": 0.04567
},
{
"confirmations": 1000,
"height": 388001,
"txid": "xxxx",
"value": 0.01234
}
]
オプションなしだと、このように全トランザクションが得られる。
$ ./electrum listsinceblock --height 388000
[
{
"confirmations": 1000,
"height": 388001,
"txid": "xxxx",
"value": 0.01234
}
]
--heightオプションを付けるとそのheightよりもあとのトランザクションだけが得られる。
valueは小数なので、satoshiの整数もあった方がよいかも。
electrum-ltcのpaytomanyでコインを移動してみた
以下のようにして、手数料0で送信元アドレスを指定し、2箇所の送信先に0.3と0.2を送ってみた。 残高はチェンジアドレスに送信元アドレスを指定して残るようにしてみた。
$ electrum-ltc paytomany -f 0 -F L... -c L... '[["L...", 0.3], ["L...", 0.2]]'
Password:
パスワードが設定されている場合はパスワードを聞かれるので入力する。 (なお、RPCの場合はパスワードを空にして、暗号化なしにしておく必要があるようだ。)
すると以下のようにhexが得られる。
{
"complete": true,
"hex": "01000000015...."
}
これをbroadcastしてみる。shellのhistoryに覚えさせたくないので、先頭にスペースを入れる。
$ electrum-ltc broadcast 01000000015....
すると次のようなエラーが出て拒否される。
The transaction was rejected by network rules.(66: insufficient priority)
どうやらFeeが少な過ぎるらしい。Feeを少しずつ上げてリトライしたところ、0.001LTC(0.5円ぐらい)でうまく行った。
$ electrum-ltc paytomany -f 0.001 -F L... -c L... '[["L...", 0.3], ["L...", 0.2]]'
$ electrum-ltc broadcast 01000000015....
..txid..
BTCよりお安く試せると思っていたのに期待外れだった。
Abeで確認してみると0.3は0.29999999となっており、浮動小数点で解釈されているようだ。 厳密な端数を扱うことはできないのかもしれない。
最新のelectrum(BTC)では浮動小数点の問題が起きないように対策されてそうに見える。 また、broadcastの引数はJSON形式に変わっているようで、'"0100..."'みたいな感じで指定しないといけなくなったようだ。
electrum-ltcのdaemonで受信してみた
まずは受信用のアドレスを確認する必要がある。
$ electrum-ltc listaddresses -b --receiving
-bでバランス表示付きになり、--receivingで受信用のアドレスに絞り込める。
取引所 C-CEX.com - Crypto-currency exchange / MultiWallet から1.00LTC引き出してみた。 Feeが0.01LTC、今の価値だと4.5円ぐらいなのであまり頻繁には移動したくない。
BTCの場合はここで blockchain.info を使って追跡したいところだが、LTCの場合は http://explorer.litecoin.net/chain/Litecoin を使って、txidを検索するとよい。
以下のコマンドでconfirmedとunconfirmedの残高が確認できる。
$ electrum-ltc getaddressbalance アドレス
しかし、既にconfirmedになって数十分経過しているのに getbalance などで見ると届いていない。 仕方がないので、daemonを再起動。
$ electrum-ltc daemon stop
$ electrum-ltc daemon start
無事、受信できました。 しかし、こんなことではelectrum-ltcを使ったWebサービスを作るのは難しいかも。 BTCの場合はこんなことにならないのかな。
FaucetBOX.comでテスト用のコインを手に入れた
FaucetBOX.com というサービスがあり、これを使ったFaucetサイトを巡回することで少額のコインがゲットできる。 とりあえずBitcoinとDogecoinをいくつか入手して、CoinomiやElectrumに入れてみた。 時間効率はよくないので、本当にひまなときにポツポツクリックするのがよいかと思います。
以下は私のアドレスのついたReferral linkです。よければ試してみてください。 何度もやっているとreCAPTCHAが追加質問を要求してくることがあるので、そのあたりがやめどきかもしれません。
Bitcoin faucets:
itsrainingbitcoins
satoshi.ws
freebitcoins4u
cryptorials bitcoinerz faucetbitcoins siizo oneadfaucet
Dogecoin faucets:
cryptorials
freedogecoin
777doge
cryptator
like4bitcoinfree
bluesatoshi
top2200
doge4me
lindasdoge
Web WalletにBitcoin SPVを試験的に追加しました
1年ほど前から Web Wallet という、ウェブブラウザから使える暗号通貨ウォレットサービスを運用しています。 Bitcoinも導入しかったのですが、フルノードであるbitcoindを動かすにはメモリとストレージがそこそこ必要なので、赤字垂れ流しの当サービス では導入できずにいました。
しかし、少し前からElectrumのdaemonを使えばできるのではないかと考え準備をしておりましたが、ようやくアルファ版として公開できるようになりました。
まだまだ実績も少なく問題が起きるかもしれませんので、少額で試していただければありがたいです。
electrumのコマンドラインからアドレスを作成する方法
bitcoindの場合、getnewaddressで簡単に新しいアドレスが作成できたが、electrumの場合、The gap limitである20個までしか最初は用意されていない。
Frequently Asked Questions — Electrum 2.5 documentation
How can I pre-generate new addresses? にあるようにGUIからだとコンソールからwallet.create_new_address()を呼び出せば作成できる。 しかし、CUIの場合はどうすればよいのか分からなかったため、以下のパッチを作成した。
これによりgetnewaddressというコマンドが追加され、呼び出すたびに新しいアドレスを生成してくれるようになる。
ElectrumのDeterministic Walletを実感してみる
Electrumは単一のパスフレーズから複数のアドレスを生成するしくみになっているが、 普通に使っているだけではなかなか実感しにくい。 そこでrestoreコマンドを使うことでDeterministic Walletを実感してみた。
まずは元となるウォレットを作成する。 実験なので、/tmp/1 ディレクトリをHOMEにして作成してみる。
$ mkdir /tmp/1
$ cd /tmp/1
$ HOME=$PWD electrum setconfig a a # おまじない
$ HOME=$PWD electrum create
Password (hit return if you do not wish to encrypt your wallet):
たくさんアドレスが生成される
Your wallet generation seed is:
"ここにseedが表示される"
...
$ HOME=$PWD electrum listaddresses|md5sum
76fbce5a77d734513b4eb8830cd81e23 -
最後のコマンドで生成されたアドレスのハッシュを求めている。
次に /tmp/2 で restore してみる。
$ mkdir /tmp/2
$ cd /tmp/2
$ HOME=$PWD electrum setconfig a a
$ HOME=$PWD electrum --offline restore "ここにseedを入力"
$ HOME=$PWD electrum listaddresses|md5sum
76fbce5a77d734513b4eb8830cd81e23 -
確かに同じアドレスが生成されていることが分かる。