This will cost you すると、合意どおりの額が表示される。「本当の値段」をナノコインで書くのが不便すぎるなら、ふつうの額と日時で値段を書くこともできる。 This will cost you こうしておけば、小数点が動いたとき、これは自動でⒷ15.00と表示される。"}
ビットコイン・インスティテュート

Re: もっと​細かい​単位が​必要――小数点を​動かす

「とにかく小数点を動かそう」と言うのは簡単だ。でもビットコインのこの部分は珍しく、サトシが前もって考え抜いていない。本人がいない以上、いい計画を出すのは私たちの役目なんだろう。

どういうことか。要するに、小数点をどこに置くかについて、全体の合意が要るということだ。動かす人と動かさない人がいれば、値段も支払いもひどく紛らわしくなり、取引しにくくなる。

ビットコインは、物事について全体の合意を作るのがもともと得意だ。そこで、こんな計画はどうだろう。

  1. bitcoindに、「getNanosPerCoin」のような名前の新しいRPCを足す。私たちが「ビットコイン」と呼んでいる、決まりごとでしかない単位が、何ナノコインでできているかを返すものだ。

  2. マイニングする人は誰でも、自分のビットコインに、小数点はここに置くべきだと思う位置を設定できる。このデータはコインベーストランザクションに埋め込める。コードをよく確かめる必要はあるが、コインベースのtxの末尾に余分なデータを詰めても、クライアントは文句を言わず、ブロックを拒否もしないと思う。普通に新しいフィールドを足すとバージョン番号を上げることになり、それは難しそうだ。だから、coinbase.in[0].scriptSigの末尾に何かを足し始めるなら、プロトコルバッファーか、バージョン管理を組み込んだ別のバイナリのデータ構造にしたらいいと思う。そうしておかないと、あとでもう一度やりたくなったときに苦労するかもしれない。

  3. 2週間ごとの調整期間の終わりに、クライアントは過去にさかのぼって、ネットワーク全体の票から新しいnanosPerCoinを計算する。ネットワークの80%超が新しいnanosPerCoinの値に賛成していれば、ビットコインのクライアントはそれを受け入れ、RPCで返し始める。

  4. 「X.Y BTC」の形の文字列を表示している既存のソフトは、今のnanosPerCoinの値をどこかのサーバーから取ってくるように変える必要がある。これを簡単にするために、JSON RPCのポートで、認証のないHTTPの要求を受けられるようにしてもいい。たとえば

http://server:1234/renderAmount?nanocoins=15000000,300000&style=unicode

に対して、「Ⓑ15.00\nⒷ0.03」のような整った文字列を、text/plainのUTF-8の応答で返す。このHTTPの呼び出しは、たいていの言語でライブラリの関数に包めるので、ビットコインの額を表示するのはそれほど難しくない。bitcoin.org経由で公開すれば、ウェブサイトはこう書くだけでいい。

<script src="http://www.bitcoin.org/render-amounts.js"></script>

This will cost you <script>bitcoin.render(15000000)</script>

すると、合意どおりの額が表示される。「本当の値段」をナノコインで書くのが不便すぎるなら、ふつうの額と日時で値段を書くこともできる。

This will cost you <script>bitcoin.render(1.50, "2011-02-10 17:00:00 UTC")</script>

こうしておけば、小数点が動いたとき、これは自動でⒷ15.00と表示される。