Monacoin用のElectrum試作版
ElectrumをMonacoinで使えるようにしてみました。 ただし、PoWとかのチェックは全く行っていませんので、あくまでもテスト用です。 また、Mで始まるアドレスの対応やBTCをMONAに変更する対応などもできていないところがあります。 サーバはCoinomiさんのものをお借りしております。
Commits · ohac/electrum · GitHub
以下のようなDockerfileを準備します。
FROM ubuntu:16.04 RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y vim python-pip git python-qt4 pyqt4-dev-tools && \ apt-get clean RUN pip install --upgrade pip && \ pip install dnspython pyaes ecdsa qrcode pbkdf2 protobuf pip requests \ pysocks jsonrpclib ltc_scrypt WORKDIR /root RUN git clone https://github.com/ohac/electrum.git WORKDIR /root/electrum RUN git checkout monacoin-20170514 RUN pyrcc4 icons.qrc -o gui/qt/icons_rc.py
ビルドします。
$ docker build -t elemona .
以下のようなスクリプトを準備。
#!/bin/bash XSOCK=/tmp/.X11-unix XAUTH=/tmp/.docker.xauth USENET= #USENET="--net=none" if ! [ -a $XAUTH ]; then touch $XAUTH xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge - fi docker run -it --rm \ -v $XSOCK:$XSOCK:rw -v $XAUTH:$XAUTH:rw \ -e DISPLAY -e XAUTHORITY=${XAUTH} --ipc=host $USENET \ elemona
立ち上げ。
# ./electrum
試しに少額のMONAを送信してみると表示された。
しかし6検証を終えているのに何故かNot Verifiedのまま。 頻繁にNot connectedになり、どこかおかしいようだ。
また、別アドレスに送信しようとしたが以下の例外が出てうまく動かなかった。 もう少し調整が必要っぽい。
Traceback (most recent call last): File "/root/electrum/gui/qt/main_window.py", line 576, in timer_actions self.do_update_fee() File "/root/electrum/gui/qt/main_window.py", line 1172, in do_update_fee fee_rate = fee * 1000 / tx.estimated_size() File "/root/electrum/lib/util.py", line 203, in <lambda> return lambda *args, **kw_args: do_profile(func, args, kw_args) File "/root/electrum/lib/util.py", line 199, in do_profile o = func(*args, **kw_args) File "/root/electrum/lib/transaction.py", line 788, in estimated_size return len(self.serialize(True)) / 2 if not self.is_complete() or self.raw is None else len(self.raw) / 2 # ASCII hex string File "/root/electrum/lib/transaction.py", line 737, in serialize nLocktime = int_to_hex(self.locktime, 4) File "/root/electrum/lib/bitcoin.py", line 168, in int_to_hex return rev_hex(s) File "/root/electrum/lib/bitcoin.py", line 162, in rev_hex return s.decode('hex')[::-1].encode('hex') File "/usr/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode output = binascii.a2b_hex(input) TypeError: Non-hexadecimal digit found
23:53追記
blockchain_headersをダウンロード可能にしてやればうまく動きました。 electrum-serverの立て方は別途記事にします。
ネットワークから遮断されたDockerコンテナ内でElectrum
以下のような感じのDockerfileを用意してイメージをbuildする。
FROM ubuntu:16.04 RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y vim python-pip git python-qt4 pyqt4-dev-tools && \ apt-get clean RUN pip install --upgrade pip && \ pip install dnspython pyaes ecdsa qrcode pbkdf2 protobuf pip requests \ pysocks jsonrpclib WORKDIR /root RUN git clone https://github.com/spesmilo/electrum.git WORKDIR /root/electrum RUN git checkout 2.8.2 RUN pyrcc4 icons.qrc -o gui/qt/icons_rc.py
ビルドする。
$ docker build -t electrum .
ネットで見つけた手順を少しアレンジした以下のような手順でコンテナを立ち上げる。
$ XSOCK=/tmp/.X11-unix $ XAUTH=/tmp/.docker.xauth $ touch $XAUTH $ xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge - $ docker run -it --rm \ -v $XSOCK:$XSOCK:rw -v $XAUTH:$XAUTH:rw \ -e DISPLAY -e XAUTHORITY=${XAUTH} --ipc=host --net=none \ electrum root@xxxxxxxxxxxx:~/electrum# ./electrum
無事立ち上がった。
オフラインウォレットほど安全ではないが比較的安全かもしれない。
マストドン始めました
マストドン(のインスタンス)始めました。
入居者募集中です。 そんだけ。
追記(2017/4/17):
- ちょっとミスってしまい、今はダウンしています。夜には復活させる予定。
追記(2017/4/18 00:50):
- なおりました。t2.smallに昇格させました。
自作サンプリング音源を公開した
LinuxSamplerを使って、サンプリング音源を色々と物色していたら、自分でも作りたくなってきて、勢いで作ってしまいました。 以下からダウンロード可能です。
音源とパッチは仕様がオープンなFLAC+SFZ形式なので、LinuxSamplerですぐに使えます。
TUNEのエレキベース
- 型式は覚えていませんが、4弦24フレット、アクティブタイプの以下の写真に写っているやつです。
- フロントピックアップ使用。弦はまあまあ新しいかな。
- ノイズ除去以外のエフェクトはかけておりません。お好みのEQやアンプシミュレーターをお使いください。
- ループは使っておりませんが、適当なところで音がなくなります。2秒以上はあります。
- 半音ごとに1サンプルで弦違いの音やラウンドロビン用の重複音はありません。ベロシティのバラつきもありますので、コンプを使った方がいいです。
- ライセンスはCC-BY 4.0です。
- zip形式で10.31MBです。
ミニガットギター ARIA PEPE
- audio-technicaの安いマイクを使用。ノイズ除去やEQをかけてノイズや環境音を誤魔化しているため音は悪いです。
- オクターブチューニングがあっていないため、高音はピッチがずれています。
- ループは使っておりませんが、適当なところで音がなくなります。元々サステインは短めで、後半はS/Nが悪くなります。
- 半音ごとに1サンプルですが、多少弦違いの音も収録しています。
- ラウンドロビン用の重複音はありません。ベロシティや周波数特性のバラつきもありますので、コンプを使った方がいいです。
- 音が悪いのでライセンスは放棄します。CC0です。
- zip形式で3.72MBです。
追記:
配布サイトを作りました。
WebTorrentとinstant.ioを試してみた
WebTorrentのアプリをWindows用とLinux用をインストールして試してみました。
アプリにファイルをドラッグアンドドロップするだけで簡単にシェアできるようです。
試しにギターの練習音源をシェアしてみました。 以下のリンクでinstant.ioを使って再生することができると思います。 (ChromeとかFirefoxでないとだめみたい。)
https://instant.io/#e14cef00945a8d99dc74d65cf52dcb892cf48ed1
家のWifiを経由して、スマホの回線から聞くことができました。これはすごいです。
ちなみにこのギターの練習はクレオフーガでも公開しています。
追記:
コンソールで使いたい場合はwebtorrent-hybridを使うとよいです。Dockerfileを用意しておきましたので、参考にしてみてください。
BitcoinプロトコルをGo言語で少し書いてみた
前回、ビットコインピアと直接通信してみたいという話をしました。
今回はdnsseed-rubyの一部をGo言語に移植して、通信するところまで作成してみました。 プロトコルは下記サイトを参照。エンディアンが入り乱れていて、コーディングしにくかったです。
Protocol documentation - Bitcoin Wiki
以下のgistがソースコード。 ライブラリとかすでにありそうだけど、何も見ずに作りました。(dnsseed-rubyは見てます。) ライセンスはdnsseedと同じにしようと思います。
以下、実行例。あ、ちなみにビットコインじゃなくてモナーコインで試しています。
$ go run fake-coind.go xx.xx.xx.xx version 104 more data 1 [1] /Satoshi:0.10.2.2/ 70003 692751 verack 0 alert 165 ping 8 inv 37 1 1 inv 37 1 1 inv 37 1 2 62804b60c5242c9882db6d28a83e0bb87be220d38dee863361edb6ffe890f09f
こんな感じでブロックのハッシュが届きます。
Insight でちゃんとあるかどうか確認するとよいと思います。
Go言語なのでコンパイルすればWindowsでも動くと思います。 試していませんが。
次は実際にブロックをダウンロードできるようにして、さらに並列ダウンロードに対応して bootstrap.dat の高速生成なんかができたらいいなぁと妄想しています。
最終的には electrum-server のお供にできるようにしたいです。
ビットコインピアと直接通信してみたい
タイトルでビットコインピアと直接通信してみたいと書いてみましたが、実はすでにアルトコインとはDNS Seedというサービスで通信しております。
ソースはこれ。
https://github.com/ohac/dnsseed-ruby
これはdnsseedというPHPで書かれているコードをRubyに移植したものです。
ただ、これで通信しているのは以下のような流れで、ほんの少ししかコマンドを使っていないのです。
- version, verack でバージョンと最大ブロック高を送受信
- getaddr で既知のピアの情報をもらう
一方、bootstrap.datを作成するためのblockchain2torrentというのがあります。
https://github.com/ohac/blockchain2torrent
これはRPCで通信しているので、自分で立ち上げたノードとしか普通は通信できません。
これは以下のRPCコマンドを使っています。
これら3つのコマンドをRPCなしで得られれば、自分でノードを立ち上げる必要がなくなります。
ノードが信頼できるかどうか分かりませんので、なんらかの基準を設けて選定し、さらに複数ノードでベリファイするような処理が必要ですが、実験やbootstrap.datを得るためだけであればあまり慎重にならなくてもよいかもしれません。
さらにbitcoin-abeやelectrum-serverを動かすには下記RPCコマンドも必要となります。
- bitcoin-abe, electrum-serverに必要
- electrum-serverに必要
- sendrawtransaction - 送金などのbroadcastで必要
- estimatefee - feeの計算で必要
- getinfo - relayfeeも見る必要がある
ここまでサポートできたらSPVが各種コアデーモンを立ち上げずに実現できるのでうれしいかもしれません。