2017年10月11日水曜日

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

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

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

RubyMySQLを使っています。

実行するマシンのスペックやネットワークの状態などにもよるのだとおもいますが、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.







0 件のコメント:

コメントを投稿