BitDNSの手数料に関する混乱
BitDNSやBitXを含めるかどうかの現在の議論の多くは、マイナーがかなり細かい条件に基づいてトランザクションを含めたり含めなかったりすることを前提としているが、標準コードにはプログラマーでない人がそのような判断を行えるような実装は一切含まれていない。ユーザーである私は、トランザクションにどのような手数料を入れるべきか、どうやって判断すればいいのか?
通貨のトランザクションについては、確認に時間がかかっていると気づいたら、TX手数料を上げればいい。
非通貨トランザクションについては、何らかの手数料体系が用意されるだろう。そうした特別な非通貨トランザクションを生成するソフトウェアには、コストを示すユーザーフレンドリーなインターフェースがあるだろう。
標準クライアントを使って、自分の目的に合わせて手数料スケジュールを調整したり、ブロックのマイニングやトランザクションの取り込みに関する「ポリシー」を設定できたりしたらいいのだが。そのためのユーザーインターフェースが現在提供されていないことが、ここでの混乱の原因だと思う。
現時点ではこれはすべて理論的な話だ。なぜなら「無料で」トランザクションを作成して、一般的に次のブロックに含めてもらうことが今は可能だからだ。長期的にはそれが持続可能だとは思わないが、どうなるか見てみよう。
現時点で重要なのは、Bitcoinを使っているほとんどの人は単に通貨が成功することを望んでいるだけで、大儲けやささやかな利益を出すことには興味がないということだ。だからこそ、ネットワーク上のトランザクション手数料はまだほとんど存在しない。
次の例について疑問がある:あるアドレスにXコインを送るトランザクションをブロードキャストする。手数料を含めなかったので、しばらくブロックに取り込まれない。
キャンセルして、今度は手数料付きで再ブロードキャストする方法はあるのか?
できる。ただし、キャンセルされたトランザクションのプロトコルは、現在の実装においては必ずしも完全ではないと思う。
参照: http://www.bitcoin.org/wiki/doku.php?id=bitcoins_draft_spec_0_0_1#tx
「バージョン」フィールドを使えば、既存のトランザクションを新しいデータで事実上置き換える新しいトランザクションを送信できる。トランザクションがブロックに受け入れられていない限り、理論上はトランザクションを「呼び戻し」て、どのようにでも変更できる。
前述の通り、これは不完全であり、それを実行するための正確なプロトコルはまだBitcoinに含まれていない。しかし確かに可能性はあり、Bitcoinの将来のバージョンの機能になるかもしれない。
確かにトランザクションを「呼び戻す」機能はUIにはまだ実装されていないし、トランザクションがブロックに受け入れられた後にトランザクションを本当に消す唯一の望みは、そのブロックがメインのブロックチェーンに受け入れられないことを願うことだ。
とはいえ、トランザクションが手数料なしでブロックに受け入れられたなら、手数料を追加するためにトランザクションを呼び戻す問題も意味がなくなるので、問題にはならないはずだ。
トランザクション置換についてはlocktimeの議論を参照のこと。
locktimeではない。
将来のための可能な設計がある:
意図的に二重支払いを書き込む。同じ入力と出力で書き込むが、今回は手数料付きだ。二重支払いがブロックに入ると、最初の支払いは無効になる。新しいトランザクションが有効になった瞬間に古いものが無効になり、新しいトランザクションが単にその場所を取るだけなので、受取人は実際には気づかない。
言うは易く行うは難しだ。二重支払いを正しく書き込むクライアントを作り、どちらかが選ばれるまでウォレット内で2つのバージョンを管理し、すべてのコーナーケースを処理するには、かなりの量の作業が必要だろう。既存コードのすべての前提は、二重支払いを書き込もうとしていないということだ。
Bitcoin Miner側にもいくつかの変更が必要で、入力と出力が一致しトランザクション手数料が高い場合にのみ厳密に、二重支払いをトランザクションプールに受け入れる可能性を作る必要がある。現在、二重支払いはトランザクションプールに受け入れられることはなく、すべてのノードは最初に見たトランザクションをブロックに入れるよう作業することで、どのトランザクションを最初に見たかを証明する。
もちろん、正確に言えば、2番目のトランザクションにトランザクション手数料がある場合、入力と出力は正確には一致しない。