ブログ移転のお知らせ

ブログを移転しました。

info-i.net

今後少しずつ記事を新ブログに移動する予定です。

Ku-chartのソースコードの解説

Qiitaに上げました。

http://qiita.com/pizyumi/items/3d2f5552b4f03e224dc4

MetaTrader 4でBTC/USDやLTC/USDのチャートを表示する

今日はMetaTrader 4でBTC/USDやLTC/USDのチャートを表示してみます。

手順は以下の通りです。BTC-eという暗号通貨の取引所がMetaTrader 4をサポートしているのでBTC-eのMT4サーバに接続することにします。BTC-eの新しい口座を作成するところから始めます。

  1. https://btc-e.com/にアクセスします。

最初に、BTC-eの新しい口座を作成します。

  1. 画面右上にある[Sign up]を選択すると、新しい口座を作成するための[Registration]画面に移動します。
  2. 下図のように、[E-mail]に適当な電子メールアドレス、[Repeat E-mail]にもう1度同じ電子メールアドレス、[Login]に適当な名前、[Password]に適当なパスワード、[Repeat password]にもう1度同じパスワードを入力し、その下の画像の更に下にあるテキストボックスに画像に描かれている文字列を入力し、[I agree with terms.]をチェックし、[Registration]を選択します。

  3. 下図のように、「You have successfully registered! To confirm your account, please go to the link in your mail.」というメッセージが表示されます。また、電子メールアドレスとしてhotmail.comのものを登録したため、その下に[Go to hotmail.com]というボタンが表示されています。[Go to hotmail.com]を選択してOutlook.comに移動します([Go to hotmail.com]を選択してOutlook.comに飛ばされるのは変な感じですが気にしないでおきましょう)。

  4. BTC-Eから「E-Mail confirm」という題名の電子メールが届いているはずです。そのメールに記載されているアドレスに移動します。

  5. すると、「Your E-Mail successfully confirmed.」というメッセージが表示されます。

    これで新規口座の作成は完了です。次に、BTC-eでMetaTrader 4のデモ口座を作成します。

  6. 画面右上にある[Profile]を選択すると、[Information]画面に移動します。

  7. 更に画面左側のメニューの一番下にある[Meta Trader]を選択すると、[Meta Trader]画面に移動します。

  8. この画面には、デモ口座を示す「New demo account」という項目と現実の口座を示す「New real account」という項目が表示されています。今回はデモ口座を作成するため「New demo account」の[Open]を選択します。

  9. 下図のように、[MetaTrader login details]が表示されます。後で必要となるため、ここに表示されている情報を控えておきます。(下図では[Login]、[Password]及び[Invest password]部分の実際の値が分からないようにしていますが、実際にはこの部分にデモ口座の情報が表示されます)。[Close]を選択して[MetaTrader login details]を閉じます。

    これでMetaTrader 4のデモ口座の作成は完了です。次に、MetaTrader 4をダウンロードし、インストールします。

  10. 「To download MetaTrader 4 client please click here.」の「here」を選択し、"btcexchange4setup.exe"をダウンロードします。

  11. "btcexchange4setup.exe"のダウンロードが完了したら、ダウンロードした"btcexchange4setup.exe"を実行します。[ユーザーアカウント制御]ダイアログボックスが表示されるので、[はい]を選択して続行します。

  12. [BTC-e Exchange MT4 セットアップ]ウィンドウが表示されます。[はい、上記の全てのライセンス条項に同意します]をチェックし、[次へ]を選択すると、[インストール中]画面に進み、自動的に必要なデータがダウンロードされ、インストールが実行されます。

  13. インストールが完了したら、[完了]を選択します。

  14. MetaTrader 4が起動し、[デモ口座の申請]ウィンドウが表示されます。「BTC-Exchange-ECN Demo Server」を選択し、[次へ]を選択すると、[Select account type]画面に移動します。

  15. [既存のアカウント]を選択し、10.で控えておいた[Login]及び[Password]の値をそれぞれ[ログイン]及び[パスワード]に入力し、[完了]を選択します。

  16. [デモ口座の申請]ウィンドウが閉じ、自動的に指定したデモ口座へのログインが行われ、BTC/USD及びLTC/USDのチャートが閲覧可能になります。

Visual StudioでMarkdown形式の文書を作成する

今後このブログでプログラミング関連の記事を書いていくことにしました(今日の記事はプログラミング関連ではないかもしれませんが)。

最近Visual Studioを文書作成ツールとして使うようになりました。SIerに就職してからというもの、WordとかExcelが本当に嫌いになってしまったのです。特にExcel方眼紙で地獄の苦しみを味わいました。もうOfficeはこりごりです。別にMicrosoftが悪いんじゃないんだけど。金輪際使いません。

Officeを使わないなら何で文書作成を行うか。流石にメモ帳で平坦な文字列を淡々と連ねていくのは一見して文書構造が分かりにくいのでやりたくありません。

LaTeXを利用することも考えなくはなかったですが、このウェブ全盛時代にあってはちょっと不便です(実際過去には数学の勉強ノートをLaTeXで書いていたこともありましたし、大学の卒業論文LaTeXで書きました。が、LaTeXで書いた文章をウェブに持ってくるのは中々煩わしそうでした。もしかしたらLaTeXの妙手に言わせたら違うのかもしれませんが)。

そうなるとHTMLで書くのが一番全うかと思い、それならVisual Studioを使おうということになりました。Visual Studioを使うと複数の文書をプロジェクトの構成要素として一元管理することができるので便利です。

ただ、HTMLは毎度毎度タグで囲んでいかなければならないのが結構な面倒さです。HTMLで直接書くよりはMarkdownで書いた方が良さそうです。 ということで今日はVisual StudioでMarkdown形式の文書を書く環境を整えます。

手順は以下の通り。「Web Essentials 2015.0 RC」という拡張機能Visual Studio 2015 RCにインストールします。

  1. Microsoft Visual Studio Professional 2015 RCを起動する。
  2. [ツール]-[拡張機能と更新プログラム]を選択する。
  3. [拡張機能と更新プログラム]ダイアログボックスが表示される。[オンライン]を選択する。
  4. [Visual Studioギャラリーの選択]に"web essentials"と入力し、検索する。
  5. 「Web Essentials 2015.0 RC」を選択し、[ダウンロード]を選択する。
  6. [ダウンロードとインストール]ダイアログボックスが表示される。[インストール]を選択する。
  7. [ダウンロードとインストール]ダイアログボックスが閉じ、[拡張機能と更新プログラム]ダイアログボックスに戻る。[今すぐ再起動]を選択する。
  8. Microsoft Visual Studio Professional 2015 RCが再起動する。

Markdown形式のファイルを開いて動作を確認してみましょう。

これで捗ること間違いなし!!

わぁい。

本ブログ主への寄付方法

本ブログはRippleのIOUの仕組みを利用したYUMINACOIN(YMN)による主への寄付を受け付けています。

主は1YMN=1XRPで寄付を受け付けていますが、YMNの市場価格は上下する可能性があります。

また、YMNについて、以下の2点を確約します。

 主は2014年9月30日まで

  1.YMNを10万枚以上発行しない。

  2.1YMN=1XRP未満のレートでYMNを売りに出さない。

 

<寄付方法>

1.https://ripple.com/client/#/trust?to=rsnE9nkSwc31saKtz2V1Q7TsCKQ2ww9FXk&amount=100000%2FYMNにアクセスし、「Conform」をクリックします。

2.https://ripple.com/client/#/trade/XRP/YMNにアクセスし、「Sell XRP」の「Amount To buy」に購入したいYMNの量を記入し、「Price of Each」にYMNの価格(通常は「1」)を入力し、「Sell XRP」をクリックします。

3.注文が約定すれば、約定した分だけ口座のXRPが減り、YMNが増えている筈です。

4.購入したYMNはそのまま保管しておくこともできますし、売りに出すこともできます。

原子的な交換(atomic swap)

ブロック鎖1で(十分な量の)貨幣/資産を所有している甲及びブロック鎖2で(十分な量の)貨幣/資産を所有している乙が夫々の所有する貨幣/資産を交換することが可能である。
夫々の貨幣/資産は同種であっても、異種であっても良い。夫々の貨幣/資産の量も如何様であっても良い。結局、両者に合意があれば良いだけということである。

1.甲は秘密値aを生成する。
2.甲は自身が所有する貨幣/資産を取引出力O1に移動する取引を作成する。取引出力O1は次の何れかの値があれば使用することができる。甲は当該取引をまだ公開しないでおく。
  a.秘密値a及び乙の署名
  b.甲及び乙の署名
3.甲は取引出力O1の貨幣/資産を自身の口座に移動する取引を作成する。この取引のlocktimeは48時間とする(48時間経過するまでは有効な取引とならない)。甲は当該取引を乙に送付し、署名してもらう。乙が当該取引に署名して甲に返付した場合には、甲は安全に2の取引を公開することができる。
4.甲は2の取引を公開する。
5.乙は自身が所有する貨幣/資産を取引出力O2に移動する取引を作成する。取引出力O2は次の何れかの値があれば使用することができる。乙は当該取引をまだ公開しないでおく。
  a.秘密値a及び甲の署名
  b.甲及び乙の署名
6.乙は取引出力O2の貨幣/資産を自身の口座に移動する取引を作成する。この取引のlocatimeは24時間とする(24時間経過するまでは有効な取引とならない)。乙は当該取引を甲に送付し、署名してもらう。甲が当該取引に署名して乙に返付した場合には、乙は安全に5の取引を公開することができる。
7.甲は秘密値aを知っているため、取引出力O2を使用することができる。甲が取引出力O2を使用した場合には、秘密値aが公開され、乙は取引出力O1を使用することができる。即ち、甲及び乙が夫々所有する貨幣/資産を交換することができる。甲が取引出力O2を使用しない場合には、24時間経過後乙は6の取引を使って取引出力O2の貨幣/資産を自身の口座に移動することができる。48時間経過後甲は3の取引を使って取引出力O1の貨幣/資産を自身の口座に移動することができる。即ち、甲が何もしないで24時間経過すると交換が行われないまま一連の取引の執行の完了となる。

連合による固定

連合による固定(federated peg)を用いてMonacoinのプロトコルには全く手を入れないでMONAをMonacoin以外の副ブロック鎖の枠組みに対応しているブロック鎖に移動する方法(更に、移動したMONAを元のMonacoinのブロック鎖に戻す方法)について考えてみました。

先ず最初に結論を書くと、「原理的には可能だが、現実的には難しい」と思われます。

連合による固定では固定(peg:2つの異なるブロック鎖で(少なくとも一方的に)貨幣/資産を移動できるようにすること)を実現するために職員(functionary)と言われる者を利用することになります。

話を簡単にするためにMonacoinのブロック鎖上にあるMONAをCREACOINのブロック鎖に移動し、(移動後にCREACOINのブロック鎖上で何度か取引を行い)、最終的にCREACOINのブロック鎖から元のMonacoinのブロック鎖に戻す場合のみを考えることにします。CREACOINは副ブロック鎖の枠組みに対応しているものとします。
また、(本来は複数人が必要ですが)職員は1人のみであるとします。

この場合の連合による固定によるCREACOINのブロック鎖へのMONAの移動は次のように行われます。


0(準備).職員は秘密鍵を生成し、秘密鍵から公開鍵を生成し、CREACOINのブロック鎖へのMONAの移動を希望する者(以下「希望者」と言う)に向けて公開鍵を公開する。
1.希望者は職員の公開鍵を取得する。
2.希望者は使い捨ての値(nonce)を無作為に生成する。
3.希望者はCREACOINのブロック鎖側のどの口座番号(address)(以下「移動口座番号」と言う)にMONAを移動させたいか決定する。
4.希望者は使い捨ての値と移動口座番号を結合したものを用いて職員の公開鍵から新しい別の公開鍵(以下「使い捨て公開鍵」と言う)を生成する。
5.希望者は使い捨て公開鍵のSha256Ripemd160要約値(=使い捨て公開鍵に対応する口座番号)を計算する。
6.希望者はCREACOINのブロック鎖に移動したいMONAを使い捨て公開鍵に対応する口座番号に送付する。
7.希望者は職員にMONAの移動要求を申請する。この時に、使い捨ての値と移動口座番号と6で送付したMONAの簡易決済検証証明(simplified payment verification proof:SPV proof)を添付する。
8.職員は自身の公開鍵と希望者から受け取った使い捨ての値と移動口座番号から使い捨て公開鍵(4で生成されたものと同じになる筈)を生成する。
9.職員は使い捨て公開鍵のSha256Ripemd160要約値(=使い捨て公開鍵に対応する口座番号)を計算する。
10.職員は使い捨て公開鍵に対応する口座番号にMONAが送付されているか確認する。送付されていない場合は希望者に「MONAが送付されていない」旨を通知し、業務を終了する。送付されている場合は業務を続行する。
11.職員は簡易決済検証証明を検証する。無効である場合は希望者に「簡易決済検証証明が無効である」旨を通知し、業務を終了する。有効である場合は業務を続行する。
12.職員は移動口座番号にMONAを移動する取引を作成し、CREACOINネットワークに流す(この取引には簡易決済検証証明が添付され有効かどうかが検証できる形になっている)。
13.職員が間違えない限り12の取引は有効で、CREACOINネットワークのノードによって有効であると承認され、最終的には採掘されたブロックの中に格納される。
14.12の取引がCREACOINのブロック鎖のブロックの中に格納され、ブロック鎖分岐がまず発生しないと言えるほどに十分な時間が経過したら、職員は希望者に「MONAの移動が完了した」旨を通知する。
15.この時点で希望者はCREACOINのネットワーク(ブロック鎖)の方でMONAを使用できるようになっている筈である。


CREACOINのネットワーク(ブロック鎖)の方で当該MONAの取引が何度か行われ、Monacoinのブロック鎖へMONAを戻す場合は次のような手順を実行します(上述の手順とほぼ同じですが一部違いがあります)。


16.Monacoinのブロック鎖へのMONAの移動を希望する者(以下「希望者」と言う)は職員の公開鍵を取得する。
17.希望者は使い捨ての値(nonce)を無作為に生成する。
18.希望者はMonacoinのブロック鎖側のどの口座番号(以下「移動口座番号」と言う)にMONAを移動させたいか決定する。
19.希望者は使い捨ての値と移動口座番号を結合したものを用いて職員の公開鍵から新しい別の公開鍵(以下「使い捨て公開鍵」と言う)を生成する。
20.希望者は使い捨て公開鍵のSha256Ripemd160要約値(=使い捨て公開鍵に対応する口座番号)を計算する。
21.希望者はMonacoinのブロック鎖に移動したいMONAを使い捨て公開鍵に対応する口座番号に送付する。
22.希望者は職員にMONAの移動要求を申請する。この時に、使い捨ての値と移動口座番号を添付する。
23.職員は自身の公開鍵と希望者から受け取った使い捨ての値と移動口座番号から使い捨て公開鍵(19で生成されたものと同じになる筈)を生成する。
24.職員は使い捨て公開鍵のSha256Ripemd160要約値(=使い捨て公開鍵に対応する口座番号)を計算する。
25.職員は使い捨て公開鍵に対応する口座番号にMONAが送付されているか確認する。送付されていない場合は希望者に「MONAが送付されていない」旨を通知し、業務を終了する。送付されている場合は業務を続行する。
26.職員は自身の秘密鍵と7で受け取った使い捨ての値と移動口座番号から8で生成した使い捨て公開鍵に対応する秘密鍵を生成する。
27.職員は移動口座番号に10で送付されていることを確認したMONAを移動する取引を26の秘密鍵を使って作成し、Monacoinネットワークに流す(26の秘密鍵を使って署名すれば有効な取引となる筈である)。
28.職員が間違えない限り27の取引は有効で、Monacoinネットワークのノードによって有効であると承認され、最終的には採掘されたブロックの中に格納される。
29.27の取引がMonacoinのブロック鎖のブロックの中に格納され、ブロック鎖分岐がまず発生しないと言えるほどに十分な時間が経過したら、職員は希望者に「MONAの移動が完了した」旨を通知する。
30.この時点で希望者はMonacoinのネットワーク(ブロック鎖)の方でMONAを使用できるようになっている筈である。


このように、連合による固定は原理的には可能です。

しかし、重要なのは、連合による固定の場合6の時点でMONAの実質的な所有権は職員に移転しているということです。MonacoinネットワークのノードはMONAがCREACOIN側に形式的に移動したことを認識しませんので、悪意のある職員は希望者から受け取ったMONAを勝手に別の口座に移してしまうことが可能です。そういう意味で、連合による固定では職員に対する信頼が必要となります。
これだけでも問題なのですが、更に問題があります。
それは、連合による固定の場合、職員が単一障害点(single point of failure:SPOF)となっているということです。職員に悪意がなくても、やむを得ず職務を放棄することはあり得ますし、職員が秘密鍵を紛失した場合はMONAをMonacoin側に戻せなくなってしまいます。
即ち、職員に対しては単に悪意を持っていないという信頼だけでなく、絶対に失敗しないというもっと広い意味での信頼が必要です。

Mt.Goxなどの顛末を見るに、現実的にはそのような信頼を確保するのは難しく、結局連合による固定は現実的には難しいと思われます(ただし、自分/自社の中だけで完結する取引を行うのに自分/自社自身が職員になって連合による固定を行うことは十分可能かと思います。これに関してはその内追記するかもしれません)。