技術的な説明
みなさん、こんにちは。分散型通貨に興味があり、このプロジェクトの開発に参加するか、自分のバージョンを開発するかのどちらかを考えている。決断する前に、ドキュメントからは明確でないいくつかの技術的な点を確認したい。部分的には英語が母国語ではないからでもあるが、それはともかく 😊。
- ウォレットを持ちたい場合、ノードを実行する必要があるの? ウォレットは特定のノードに紐付けられるの? それとも、フラッシュドライブに保存して任意のノードで使えるの? 残高はどこにどのような形式で保存されるのかな?
- 受け取ったコインを検証するには、ネットワーク全体のトランザクションログをダウンロードしないといけない?
- あるノードがハッキング(または改変)されて、ユーザーのID(公開鍵)でそのアカウントから送金されてしまうかもしれない場合、ユーザーはどのように守られるの? すべてが全員の間で同期されている場合、それは可能に見える。
- トランザクション中に2つのノード間で、具体的にどのようなデータがやり取りされるの? (またはソースコードのどこを見ればいいか教えてほしい)
- 誰か、トランザクション手数料についてもう少し詳しく書いてもらえないだろうか。なぜ必要で、どのように、どのような場合に使われるのか、など。
- ノードリストの分散化の計画はある? (IRCで知ったのだが、Bitcoinは現在、ノードがfreenodeのIRCチャンネルに参加することで接続しており、真に分散化されていないようだ)
- ある時点以降、誰も新しいコインを生成できなくなるという理解で合っている? 既存の固定量のコインを使うだけになる、ということ?
回答をありがとう。
答えられるものに答えてみよう:
Nnixoidの投稿(2010年6月10日20:38 UTC)
- ウォレットを持ちたい場合、ノードを実行する必要があるの? ウォレットは特定のノードに紐付けられるの? それとも、フラッシュドライブに保存して任意のノードで使えるの? 残高はどこにどのような形式で保存されるのかな?
ノードを実行するか、誰か(MyBitcoin.comのような)を信頼してウォレットを預けるかのどちらかだ。
口座残高はwallet.datというBerkeley DBファイルに保存される(どのディレクトリかはOSによる。Macでは~/Library/Application Support/Bitcoin/wallet.dat、Linuxでは~/.bitcoin/wallet.dat、PCについては不明)。
wallet.datを読めるアプリケーションはbitcoinのコードだけで、データベース構造はbitcoinのC++ソースコード以外にはどこにもドキュメント化されていない。 理論的にはノーだが、軽量な検証を行うコードはまだ書かれていない。 サトシはウォレットデータベースの暗号化を計画しているので、読むためにはパスワードを入力する必要がある。(トランザクションを生成するためには秘密鍵が必要で、それがwallet.datに保存されているものだ) さあ、分からないね。 このフォーラムにこれについての別のスレッドがある。「サトシのTODOリスト」スレッドを始めて、人々にボランティアを呼びかけてはどうか。 今後N年間(Nは何年だ、20?)にわたって生成されるコインはますます少なくなる。これはバグではなく機能だ…
自分のバージョンの開発について:既存のC++実装と互換性のある2番目のbitcoin実装を作ることを考えているのか(私の意見では良いアイデア)? それとも似ているが同じではないシステムを作ることか(私の意見では悪いアイデア)?
それに賛成だ。トランザクション手数料がうまくスケールしないのではないかという懸念がある。根拠のないものだといいが。
- 誰か、トランザクション手数料についてもう少し詳しく書いてもらえないだろうか。なぜ必要で、どのように、どのような場合に使われるのか、など。
トランザクション手数料は、今から何年も先にブロックの価値が低くなった後、ブロック生成のインセンティブを与えるために必要です。また、多くのノードが(わずかな生成速度の恩恵しかないために)生成するブロックにトランザクションを記録しなくなった場合、インセンティブとしてトランザクション手数料を適用できます。
おそらく常に、無料でトランザクションをブロックに含めてくれるノードは存在するでしょうが、多くのノードがそうしない場合は数ブロック待つ必要があるかもしれません。
- ビットコインアドレスで送信する場合は何もない
- 分散型だ。最初にネットワークに接続した後は、IRCは不要だ。
回答、改めてありがとう。 私はセキュリティと分散化について異なるビジョンを持っているようだ。 アルゴリズムの提案かプロトタイプを完成させたら知らせる。
ネットワークは標準的なDHTノード発見の原則で動いている。今のところ、ノード発見を完全に分散化する、本物の方法は存在しない(誰かがリッスンしていないかとサブネット全体をスキャンするような馬鹿げた手段を除けば)。なぜなら、ネットワーク上の少なくとも1人を知っていなければならないからだ。その1人に接続すると、相手が他の接続を知らせてくれ、そこにも接続する、というふうに進む。
クライアントには「オンラインである可能性が高い候補」のリストが付属しているが、それでもある時点でそのすべてがオフラインになる可能性はある。IRCサーバーは、接続できる相手を、誰でもいいから見つけるための最後の手段、バックアップとして提供されているだけだ。IRCポートをブロックしてみれば、それが厳密には必要ないと分かる。
トランザクション手数料について:
今のところ、トランザクション手数料が使われるのは1つの場面だけだ。1回のトランザクションで非常に大量のBitcoinを扱うときだ。その場合でも、手数料は極めて低い(パーセントの何分の一かといった程度)。
後になって、Bitcoinの生成が「割に合わなくなる」と、人々はこれらのブロックを解く理由が薄れていく(その結果、トランザクションの確認にどんどん時間がかかるようになり、ターゲット値はどんどん緩くなり、攻撃者がシステムを侵害できる可能性が高まる)。「ブロック生成の主力たち」を商売として続けさせるために、小額のトランザクション手数料が導入されることになる。それによって、彼らの利益率はブロックを解くための電気代や冷却コストをわずかに上回るところに保たれる。
(少なくとも、これがPDFを読んだ私の理解だ。)