2017年10月12日木曜日

[Bitcoin]マークルルートを調べてみる

ブロックにはマークルルートというものがあります。

私は疑り深いので、あるブロックのマークルルートが本当に正しいのかをRubyの標準添付ライブラリだけを使うというしばりで確認してみたいとおもいます。
(P2PKHはこのしばりが失敗におわりました。今回はどうでしょうか)

前提

Bitcoin coreをインストールしておく必要があります。






合いましたよ! おっかさん!

あとtxidってtransactionのバイナリデータのハッシュ値だったのね。








2017年10月11日水曜日

[Bitcoin]世界一ビットコインをもっているビットコインアドレスを探せ!

すでにここ に答えがでていますが……

コードは長くなるので恥ずかしながらGithubにあげておきました。

RubyとMySQLを使っています。

実行するマシンのスペックやネットワークの状態などにもよるのだとおもいますが、3日間くらいずっと動かしつづけてやっと2万ブロックくらいまで解析が進んだ感じです。
2017/10/11時点のブロック高が489354くらいなのでいつになったらおわるのかはわかりません。
全取引が公開されているのだから各ビットコインアドレスごとの残高もわかるはずです。
世界一のBitcoin持ちは誰なのでしょうか?

ビットコインアドレスはウォレットの中でいっぱい作られるらしいですし、アドレスから個人を結びつけることはできないので誰かまでは結局わかりません。

bitcoin-cliを使ってでてきたJSONを眺めてもなんだか理解が進まなかったので「世界一ビットコインをもっているビットコインアドレスを探せ!」をスローガンになんとなく作ってみました。

作ることでわかったことは

- 各ブロックの先頭のトランザクションはコインベーストランザクションと呼ばれるものらしく、これのvoutに報酬と手数料(各トランザクションのInputとOutputの差の総額)がvalueに入っているようです
- きっとマイナーのビットコインアドレスあてに送られているのでしょう(間違えて私のビットコインアドレス宛にこないかしら笑)
- 各トランザクションには手数料は明示されないという部分とごちゃごちゃに考えてマイナーの報酬を別途計算しないといけないのかなあとかおもっていましたが、そんなことをしないといけないとすると手数料とマイナーをどうやって結びつければいいんだという話になってしまいます
- vinは出金したことになるのでトランザクションIDとvout(何番目か?)から前のトランザクションのvoutをたどってここのvalueをaddressesに書いてあるaddressが使った(マイナス)ことにして、voutは入金になるのでこのvalueをaddressesに書いてあるaddressに足すことにすれば全アドレスの残高を導きだせるはずです
- 文字にするとごちゃごちゃしますがコードを書いてみたほうが理解が進んだ気がします
- "type": "nulldata"でaddressesがないvoutなんてものがありました
- トランザクションIDは06f36d781af55d4ab4665d791efed6d4e6a6b20571b0f9f8411c5db0c5308065です

Bitcoinを技術的に理解する
わかりやすかったです。
ありがとうございます。

各トランザクションの手数料はどこにいくのかといのがなかなかわからなくて、上のスライドの59ページにコインベーストランザクションの説明に「25BTC + 手数料」と書いてあったのを足がかりに以下の記事で間違いないとおもいました。

bitcoin wiki

A special kind of transaction, called a coinbase transaction, has no inputs. It is created by miners, and there is one coinbase transaction per block. Because each block comes with a reward of newly created Bitcoins (e.g. 50 BTC for the first 210,000 blocks), the first transaction of a block is, with few exceptions, the transaction that grants those coins to their recipient (the miner). In addition to the newly created Bitcoins, the coinbase transaction is also used for assigning the recipient of any transaction fees that were paid within the other transactions being included in the same block. The coinbase transaction can assign the entire reward to a single Bitcoin address, or split it in portions among multiple addresses, just like any other transaction. Coinbase transactions always contain outputs totalling the sum of the block reward plus all transaction fees collected from the other transactions in the same block.







[Bitcoin]Pay-to-Public-Key-Hash (P2PKH)を検証してみる

前のトランザクションのOutputをInputに使うわけですが、秘密鍵をもっている人だけがそのOutputを使うことができます。


↑こちらの本を読んでいるとコーヒーショップの支払いの例として
Outputにはlocking scriptに
OP_DUP OP_HASH160 <Cafe Public Key Hash> OP_EQUAL OP_CHECKING
と書いてあって

Inputにはunlocking scriptに
<Cafe Signature> <Cafe Public Key>
と書いてあってこれらを組み合わせて

<Cafe Signature> <Cafe Public Key> OP_DUP OP_HASH160 <Cafe Public Key Hash> OP_EQUAL OP_CHECKING
この検証scriptがTRUEになったら有効な秘密鍵をもっていることになるらしいです。

なんのことやらさっぱり? なので、具体的なデータをみてみます。

トランザクションID=07e8989e7bc46f87485b975f153a3887e76c3e63f0a0d88af70186bbf1ce8306

のInputの0番目が解錠条件を満たしているのかbitcoin-rubyは使わずにRubyの標準添付ライブラリ は使ってよいというしばりで検証してみます。
このトランザクションIDは本物のbitcoinで使われているトランザクションです。

BLOCKCHAIN
chainFlyer

このトランザクションIDは適当に選びました。

前提

bitcoindをインストールして動かしておく必要があります。


OP_CHECKSIGをまだ理解できず、bitcoin-ruby 様の力をお借りしました。
理解して書き直したいとおもっています。



2017年10月10日火曜日

[Bitcoin]Genesisブロック

事前にBitcoin coreをインストールしておきます。

"The Times 03/Jan/2009 Chancellor on brink of second bailout for bank"
をみたいのです。
一番最初のブロックにこう書いてあるらしく、2009/01/03以降に作られたことを証明しているのではないかと言われています。


↑バイナリを直接のぞくと先頭のほうにみえます。

Genesisブロックのトランザクションはそういうものらしいです。
Issues #3303


参考
https://en.bitcoin.it/wiki/Genesis_block







[Bitcoin]Bitcoin Coreのインストール

Bitcoin Coreをインストールしてみます。


コンピュータはmacOS High Sierra 10.13を使いました。doc/build-osx.mdを参考にします。Homebrewが必要なようです。




Bitcoin ClockUpMemo にいろいろなコマンドが紹介されています。







[Bitcoin]Bitcoinはじめました

私はBitcoin、ブロックチェーンのことをこれから勉強しようとしています。

これらを勉強中です。


1. ビットコインとブロックチェーン:暗号通貨を支える技術


2. いちばんやさしいブロックチェーンの教本 人気講師が教えるビットコインを支える仕組み

3. ブロックチェーン・プログラミング 仮想通貨入門



1番は必読の本らしいのですが最初私にはとっつきにくかったです。
2番⇒1番⇒3番と読み進めています。


ブロックチェーンについては
ソフトウェアデザイン 2017年 10 月号
の"書いて覚えるSwift入門 第30回 SD読者ならわかるブロックチェーン入門"が最初のとっかかりとしてわかった気にさせてくれました。
[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]
Software Design (ソフトウェア デザイン) 2017年 10月号 [雑誌]
価格:1317円(税込、送料無料) (2017/10/10時点)


2017年8月19日土曜日

[Android]Firebase SDK 11.2.0でSyncボタンでエラー

事象、解決方法ともにstack overflowに回答ありました。

Failed to resolve: com.google.firebase:firebase-core:11.2.0


これで解決、めだたしめでたし。