bitcoin: ノードを立てる (1)
2024/12/13
はじめに
サーバを「たてる」は “建” か “立” かでいつも悩む。
だいたいは “立” で書くのだが、たぶん “建” の方が一般的なんだろうとは思っている。
むかし、コンピュータのソフトウェアをどの既存の分野をベースにするのが良いかという議論があって、
土木だか建築だかわからないけどそういう分野に寄せるようになった。
“build” みたいな単語に落ち着いたのはそこら辺だったと思う。
だからサーバも “建” の方が適しているのだろうとは思う。
サーバはクライアントが接続する相手だ。
私のイメージだとクライアントたちがわらわらと地面を歩いていて上を見上げながら「サーバはどこだ」と探しているのだ。
その図の中でサーバは旗が付いた長いポールになっている。
ポールならば “立” だろう、ということで「立てる」と書いているのだった。
最近、導入部をお悩み中で、今回は ChatGPT さんに作ってもらいました。
Bitcoin ノードを立てよう
Bitcoin プロトコルはサーバクライアントではなく P2P プロトコルになっている。
という表現が正しいのか分からないが、bitcoind(Bitcoin Core) や btcd のようなフルノードと呼ばれるアプリは自らがサーバでありクライアントでもある。
私が立てるときは bitcoind なのでそれを例にする。
まず、bitcoind に関係なく P2P という性質から。
- 自分がサーバにもクライアントにもなる
- ネットワークの外部から見るとプロセスが 1つでも 2つでも区別は付かないので 1アプリかどうかは関係ない
- ノードとして、自分がクライアントから問い合わされたら答えないといけないし、自分もクライアントとなって相手に問い合わせることができる。
あまり書くことがなかった。
主従の関係ではなく、ほぼ対等な関係になると思えば良いか。
ただ、初めて相手と接続する場合、その相手がまっとうかどうかの判定が難しい。
なんとなく接続したノードが実は詐欺ノードで、嘘のブロックやトランザクションの情報ばかり流し込まれるかもしれない。
Don’t Trust !
Bitcoin 界隈でよく “Don’t Trust, Verify” という言葉が出てくる。
基本的に Bitcoin の内容はすべて仕様が公開されていて、ソースコードも公開されている。
Bitcoin Core がノードアプリとしては使用比率が高いものの、仕様書を把握すれば自作することも可能である。
Bitcoin プロトコルが動いているネットワークは閉じておらず、たとえば ABC 銀行に貯蓄している自分の口座残高を確認したかったら ABC 銀行に出向くか、
その銀行が提供しているアプリを使うか、
もっともオープンになっているとしても API を使って専用のアカウントやパスワードを使ってアクセスすることになるだろう。
Bitcoin の場合はそういうのが無い。
すべてのコインに対して、生成や転送が誰でも確認できる。
その代わりといってはなんだが、送金先を個人と結びつけるのはほとんどできない。
送金先を信用せずにどうするのかというと、そこら辺は考え方が違う、ということになる。
送金先が正しいかどうかは直接は確認できない。
もっと言えば、送金先が存在するかどうかも確認できない。
もちろん送金先が Bitcoin として不正であれば認められないが、もし不正でなければ相手が存在するかどうかに関係なく送金は行われる。
こういったところは、銀行のように中央組織があるしくみとは全然異なる。
しくみを理解するのには個人差があるだろうから、納得するまで使わない方がよいと思う。
しくみとツールは別物
Bitcoin は、自分個人で銀行口座に相当する情報を持ち、管理するというのが開発している側から見た「普通」である。
仮想通貨取引所でも扱えるが、あれはどちらかといえばイレギュラーなものである(界隈の目線で)。
Bitcoin というしくみは上で述べたようなものだが、取引所はその面倒さをうまいことやってくれるというサービスだ。
そういうサービスのようなツールを使った場合、Bitcoin の恩恵を受けられないかもしれない。