bitcoindのregtest環境の使い方(インストール&マイニング)

bitcoinのチェーンは一般に利用されているmainnet、開発用のtestnet等ありますが、
どちらもデータ容量が大きく同期に時間がかかったり、
10分に一度しかマイニングできずトランザクションの承認を待たなかったりと、
開発においては便利でない部分もあります。

そこで、プライベートに空のブロックチェーンを生成して好きなタイミングでマイニングできるregtest環境で開発するという方法があります。

ubuntu17.04でのbitcoindのインストール及びregtest環境の立ち上げ方、cliでの動作確認等をメモ。

bitcoindのインストール

sudo apt-add-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install bitcoind bitcoin-qt  

bitcoin.conf

~/.bitcoin/bitcoin.confに以下の設定を書き込む。

regtest=1

regtestの起動&停止

bitcoind -regtest -daemon
bitcoin-cli stop

ブロックチェーンの初期化

rm -rf ~/.bitcoin/regtest

ブロックチェーン情報の参照

ブロック数やwalletの残高等を確認。

bitcoin-cli getinfo

ブロックの生成

regtestではコマンドでマイニングをすすめることができます。

bitcoin-cli -regtest generate 101

1ブロックマイニングするたびに50BTCの報酬がもらえて、100ブロック進んだところで利用可能になるので、

bitcoin-cli getinfo

とすると

"balance": 50.00000000,
"blocks": 101,

となっていて、101ブロックのマイニングが完了し、1ブロック目のマイニング報酬がアカウントのバランスに追加されていることがわかります。

Bittrexに公開されている草コイン概観①

bittrexには大量のあやしーいコインが上場されています。

正直どれを買ったらいいかわからない!ということでざっくり調査してみました。

 

評価基準は以下の通り。

①ホームページのクオリティ

githubのcommit、star、fork

 

①のホームページのクオリティについては、英語が苦手な私でも、

・なんとなく何がしたいかわかる!

・新しそう!

・怪しくない!

・値段上がりそう!

と思わせることができること。

②のgithubについては、

・開発頻度

githubでの注目度

を評価します。

github上でのcommit数は開発の頻度、starやforkは技術力があるかどうかの大きな尺度になりますのでその数値を見ます。

大事なお金、ちゃんと開発されていて、オープンソース・ソフトウェアとして

しっかりメンテされているものを選びたい。

 

ということで調べて見ました。たくさんあるのですごく雑に調べます。

せっかく草コインを買うなら一攫千金を狙えるまだ安い通貨から見ていきたい!!

ということで、流通量の少ないコインから順に見ていきます。

 

XBB - Boolberry

銀行置き換える系コイン、興味なし

 

AUR - AuroraCoin
定期的にBTCがもらえる系コイン

なぜ流行らないのかあやしすぎる

 

SWIFT - BitSwift
何をしたいのかよくわからない

 

XMG - MAGI
なんか普通のコインっぽいけどpoloでは取り扱い終了

 

BYC - Bytecent
よくわからん

 

SNRG - Synergy
ホームページ死んでる論外

 

ERC - EuropeCoin
何したいのかパット見でわからない

 

EBST - eBoost
eSports向けのコイン、それ自体はいいが
具体的なビジョンが見えない、ニュースがない、コードも非公開?

 

EFL - ELECTRONICGULDEN
ホームページ英語じゃない論外

 

HKG - Hacker Gold
Webページ落ちてる論外

 

AEON - Aeon
moneroを軽量化したよ!と言ってるけど、
去年のcommit数少なすぎ

 

BTA - Bata
広告費をブラウザ上でtoken払いできるようなシステムを目指す
ビジョンはよさ気ではあるがgithubのcommit数もstarもforkも少なく技術力を感じない

 

RBY - RubyCoin
とりあえずホームページ見ると汎用的で高機能なコインっぽい
githubのcommit数が少なくやる気を感じない

 

SEQ - Sequence
token発行の基盤サービスを目指している?
githubのcommitが数ヶ月止まってる

 

という感じでした。

何がしたいのかよくわからない&開発があまり活発ではないことが流通量の少ないコインの特徴かも・・・という気がしてきますね・・・。先が思いやられます。

 

あくまで私見ですが、あまり魅力を感じる銘柄は見つかりませんでした。

 

次回も下からみて行こうと思います。

 

Ubuntu17.04のログイン画面で突如keyboardの殆どのキーが効かなくなった

ある日ログインしようと思ったらkeyboardが入力でない。数字の1とかbackspaceとかは入るのだけど、他のキーが反応してくれない。

ログイン画面の右上のメニューにあるソフトウェアkeyboardに切り替えてみたいけど、同じように数字の1くらいしか入力できない。

という現象に出くわしたのでメモ。

recovery modeで起動してdpkg-reconfigure keyboard-configurationを実行すれば治りました。

以下参考にした記事のまとめ。

  1. ブートローダーからrecovery modeで起動(文字化けする場合は下記を試す)

    Ubuntu 16.04: recovery modeの文字化けを修正する - Narrow Escape

  2. キーボードの再設定

    キーボードレイアウト変更(ubuntu) - Qiita

Socket.io v2.0でnode.jsからsocket.io-clientを使う際にcookieを設定するには

node.jsでsocket.ioのテストを書く際にあれどうやってcookieつけるんだっけとちょっと困ったのでメモ。(ブラウザでsocket.ioを使う場合は、勝手にcookieをつけてくるので気にする必要はないです)

 

socket.io v2.0ではextraHeadersというオプションでcookieが付けられます

公式のドキュメントのextraHeadersというオプションの記述。

github.com

With extraHeaders

This only works if polling transport is enabled (which is the default). Custom headers will not be appended when using websocket as the transport. This happens because the WebSocket handshake does not honor custom headers. (For background see the WebSocket protocol RFC)

このオプションを使ってcookieを設定すれば、普通に認証できそう・・・・と思ったのですが、

クライアントがpollingでsocket.ioサーバに接続した場合にしか使えないオプションらしい。

 

websocketオンリーでsocket.ioを使う際にcookie認証できないの?

公式のドキュメント見ている限りでは方法がなさそう。

そもそもsocket.io的には、まずは全員pollingで接続してくれ、そのあとにwebsocketに移行してくれという方針らしい。

うーーーーーんなんだか微妙ですね・・・・・。いきなりwebsocket接続するようなクライアントは認証ができなくなってしまいそう。

 

socket.ioがonopenになった後に認証用のメッセージングを実行したほうがいいのかもしれませんね。

ryzen 7 1700でubuntu17.04マシンを組んでみた話

ryzen 7は3GHz 8コア16スレッドで値段4万以下やねんで!!!!!という心の声に負けてPCを組んで環境構築した。税込み9万しなかった(確か)。

ハードウェア構成

  • CPU: Ryzen 7 1700
  • メモリ: DDR4 PC4-19200 CL17 8GB × 2
  • マザーボード: PRIME B350-PLUS
  • グラフィックボード: Raden R5 230
  • SSD: SDSSDA-120G-J26
  • 電源: SST-ST55F-G
  • ケース: Fulmo.Q ECA3360

グラフィックボードとケースをめちゃくちゃケチった。(どっちも3000円くらいの安物)

グラフィックボードに関しては今のところ画面が映れば文句ない。GPUで何か計算したくなったらちょっといいの買おうかな。

ケースは、作りが雑&中のスペースが狭くて、電源の位置を調整しないとマザーボードが入らなくて焦ったけど、デザイン的には結構気に入っている。小さくて軽い。

何か配線を間違えていたのかマザーボードは通電するのにCPUクーラーが回らなくて焦ったけど、配線し直したら普通に問題なく起動。

ソフトウェア構成

Arch linuxをインストールしようとしたのだけど、途中で/bin/bashが見つかりませんみたいなエラーが出てよくわからなかったので断念。情弱悲しい。

結局いつものUbuntuに落ち着いたのでした。私は職場でも家でもUbuntu

  1. ハードでもソフトでもハマりどころが少ない。Ubuntuで解決できなきゃ他でも大体厳しい。ネット上に情報が多い。
  2. 仕事の鯖も開発PCも家のPCもUbuntuに統一しておけばディストリビューションごとの設定の違いなどを意識しなくて良いので楽。

今のところ下回りにそれほど興味がないので楽なのがいい。
というわけで人権がいくらか回復しました!頑張ってコード書くぞー。

ビットコインの自動取り引きbotを作ってみた話

今流行りのビットコイン。儲かるならちょっと手を出してみるか〜〜〜〜と思って仮想通貨取引所zaifに登録してみました。仮想通貨取引所というのは、お金をコインに交換して株のように売買できるネットサービスです。

最初はシステムがよくわからなかったので200円ほどのコインを売ったり買ったりして0.05円儲かった!とかで喜んでいたのですが、次第に人の欲望はエスカレートしていきます。

 少しずつ取引額を増やしながら遊んでいたのですが、zaifのアカウントページを詳しく見るとなんとapi keysの項目があるではないですか

え、これってもしかしてお手軽にプログラムを書いて取り引きし放題なんですか!?神かビットコイン神サービスか?

botが毎日少しでもお金を増やしてくれるなら私は数年後には億万長者やで!!!!!!とすっかり興奮してしまい、自動取引botを作ることになるのでした。

 

結論からいうと自動取引は儲かるのか? 

私の実力では儲かりませんでした。儲かったらこんな記事書いてません。

あ、儲からないとは言っても、ここ数日の仮想通貨界隈はバブルで爆上げ状態でしたので、ある程度は儲かりましたよ。もちろん。

コインを買ってただずっと持ってるというスタイルに一週間近くbotを回して及ばなかった、という意味です。大変悲しい。

もちろん私が実装できなかっただけで、うまくやれば儲かる方法はあると思いますが。

 

そもそも市場が単調増加の時、最適な行動はただ持っていること

 大した成果が挙げられなかった原因の一つに、私がbotを動かし続けている間、ビットコインがほぼ毎日高値を更新する単調増加状態だったことがあるように思います。

値段が毎日あがるなら、ずっと持っているのが一番です。細かく売り買いしても、タイミングを逃せば売った時より高く買うだけになってしまいますから。

結構上下はしていましたけど、かなり値上がりしていたので、ただ持っているだけが十分効率的だったという気がします。

 

試したアルゴリズム1:コスト平均法

一日1%利益が得られれば、一年間で何倍になるでしょうか?1.01の365乗≒38です。10万円で初めても380万円になります。2%なら1億3000万円になります。

やばい。夢がある。人生勝組への道はここにあったか・・・・。ということで、一日1%から2%の利益率を目標に、アルゴリズムを試しました。

  •  手持ちの資産を24*60=1440分割して、毎分ビットコインを購入する
  • 2%値段が上がったら売却する

これだけです。非常に単純。ただし、このアルゴリズムだと一日にどれだけビットコインが値上がりしても最大で2%しか資産を増やすことができません。

また、このアルゴリズムで大金持ちになるためには、ビットコインの値段が一年間毎日ずっと2%程度上昇していかなければなりません。

一年間でビットコインの値段が今の1.02の365乗≒1300倍になることは到底有り得そうもない。

そこで、下記のように変更しました。

  • 手持ちの資産を4*60=480分割して、毎分ビットコインを購入する
  • 0.33%値段が上がったら売却する

このアルゴリズムは以下のような仮定をおいてます。

  • ビットコインの値段は一年間毎日約0.33%程度ずつ上昇し続ける
  • 一日に6回程度大きく値段を上下する

年間せいぜい0.33%上昇しても、年間で3.3倍程度にしかならない。一年でビットコインの値段が3倍・・・・ないとも言い切れない・・・。夢を見る程度の価値はあります。

でも毎日相場が爆アゲしてる今試すアルゴリズムじゃねーよなーーーーーーーということでボツ。超長期的に見るなら、資産を線形じゃなくて指数で増やすことができるので有効ですけど、目の前の大きな利益を捨てて試すことじゃあない。

試したアルゴリズム2:とにかく全力で売り買い

自分の持っている全資産を常に全つっぱで売り買いする男気あふれるアルゴリズム。試して見て思ったのですがアルゴリズム1よりは成績がいいです。

でも、ずっと持ってるだけのほうがもっとよかったです。南無。

ランダムに売り買いする非常に雑なアルゴリズムを組んでしまったため、市場が単調増加の時は、買いそびれる確率が高くて危険です。

いずれにしてもある瞬間に値段があがるのか、下がるのかを一定以上の精度で予測できない限り、ずっと持ってるだけ戦術には勝てない気がします。

試したアルゴリズム3:とにかく細かく上下に売り買い

これが一番可能性がある気がします。ビットコインって手数料が非常に安くて、0.01%とかだったりします(zaifの場合はなんと-0.01%)。

今の相場って手数料の割に値段の細かい上下が激しいんですよね。

少しでも値段が上下すれば、売り買いをするという取り引きを超高スピードで回せば、いくらでも利益を出すことが理論上可能・・・・・・・なはず・・・・・。

でしたが、売りそこねたり買いそこねたりした不良債権が溜まっていくせいで、資産の回転率が低くて全然ダメでした。

それにAPIをやたらと叩きまくるのあんまり好きじゃないしね。

まとめ

上記のアルゴリズムはすごくシンプルなので、もう少し改善できないかと思っていくつか調整をしてみたりしましたが、結局ずっと持ってるほうが強いという結論は変わりませんでした

今はまだ、上がり調子下がり調子がすごくはっきりしてるしね。

ある程度の精度で値段の上下を予測する仕組みがないと、単純なルールベースじゃ無理なんじゃないかなーという気がしています(3の方法はもしかしたらその限りではないかもしれないけど)。

 

まあ、まだ他にもいくつかやってみたいことはあるのですが、とりあえず自分の中で結論がでるまで書きません。

ちなみにこれまでのコードはgithubにあるので気が向いたら試して見てください。

github.com