ビットコインの取引手数料とサイズの計算



Bitcoin Transaction Fee



取引料金

ほとんどのトランザクションには、ネットワークセキュリティを確保するためのビットコインマイナーに対する報酬の形式であるトランザクション料金(マイナー料金)が含まれています。料金自体もセキュリティメカニズムとして機能するため、攻撃者がトランザクションを通じてネットワークを圧倒することは経済的に不利になります。鉱夫が受け取る鉱業、料金、報酬については、鉱業の章で詳しく説明します。

このセクションでは、一般的な取引に取引手数料がどのように含まれるかについて説明します。ほとんどのウォレットは自動的に計算され、取引手数料が含まれます。ただし、プログラムでトランザクションを作成する場合、またはコマンドラインインターフェイスを使用する場合は、これらの料金を手動で計算して考慮する必要があります。



トランザクション料金は、マイナーが抑制要因と同時にトランザクションを次のブロックにパッケージ化(マイニング)するインセンティブとして機能し、トランザクションごとに小額の料金を請求することでシステムの悪用を防ぎます。ブロックの掘り下げに成功したマイナーは、ゾーンに含まれているマイナーの料金を取得し、ブロックをブロックチェーンに追加します。

取引手数料は、ビットコイン取引の価値ではなく、取引のキロバイトサイズに基づいて計算されます。一般的に、取引手数料はビットコインネットワークの市場の力に基づいて決定されます。鉱業組合は、手数料を含む多くの異なる基準に基づいて取引に優先順位を付け、特定の状況下では無料で取引を処理することさえあります。ただし、ほとんどの場合、取引手数料は処理の優先順位に影響します。つまり、十分な手数料のある取引は次のマイニングブロックにパッケージ化される可能性が高くなります。そうしないと、取引手数料が不十分またはまったくない取引が遅れる可能性があります。原則として、数ブロック後に処理され、まったく処理されない場合もあります。取引手数料は必須ではなく、取引手数料のない取引は最終的に処理される可能性がありますが、取引手数料により処理の優先度が高くなります。



時間の経過とともに、取引手数料の計算と取引処理の優先順位への影響が変化しました。最初は、取引手数料は固定されていました。これはネットワーク内の固定定数です。 徐々に、ネットワーク容量とトランザクション量が変化し続け、市場の力の影響を受ける可能性があるため、料金体系は緩和し始めます。少なくとも2016年の初め以来、ビットコインネットワークの容量制限によりトランザクション間の競合が発生し、手数料が高くなり、無料のトランザクションは完全に過去のものになりました。手数料がゼロまたは非常に低い取引はめったに処理されず、インターネット上でさえ広がらないこともあります。

ビットコインコアでは、手数料転送ポリシーはminrelaytxfeeオプションによって設定されます。現在のデフォルトのminrelaytxfeeは、キロバイトあたり0.00001ビットコインまたはミリビットコインの1%です。したがって、0.0001ビットコイン未満の料金のトランザクションはデフォルトで無料ですが、メモリプールに空きがある場合にのみ転送され、それ以外の場合は破棄されます。ビットコインノードは、minrelaytxfeeの値を調整することにより、デフォルトの料金送信戦略を上書きできます。

ウォレット、取引所、小売アプリケーションなどを含むトランザクションを作成するビットコインサービスは、動的課金を実装する必要があります。動的コストは、サードパーティのコスト見積もりサービスまたは組み込みのコスト見積もりアルゴリズムを介して実現できます。よくわからない場合は、サードパーティのサービスから始めてください。サードパーティの依存関係を削除する場合は、独自のアルゴリズムの設計と展開の経験が必要です。



料金見積もりアルゴリズムは、ネットワーク機能と「競合」トランザクションによって提供される料金に基づいて適切な料金を計算します。これらのアルゴリズムは、非常に単純なもの(最後のブロックの平均または中央値)から非常に複雑なもの(統計分析)までさまざまです。彼らは必要な料金(バイト単位)を見積もります。これにより、トランザクションが選択され、特定の数のブロックにパックされる可能性が高くなります。ほとんどのサービスは、ユーザーに高、中、低の優先料金の選択肢を提供します。優先度が高いということは、ユーザーが支払う取引手数料は高くなりますが、取引は次のブロックにパッケージ化される可能性があることを意味します。優先度が中および低の場合、ユーザーはより低い取引手数料を支払うことになりますが、取引の確認に時間がかかる場合があります。

多くのウォレットアプリケーションは、料金の計算にサードパーティのサービスを使用しています。人気のサービスは http://bitcoinfees.21.co、satoshiにAPIとビジュアルチャートを提供します バイト/バイトは、さまざまな優先順位のコストを示します。

チップ: 静的料金はビットコインネットワークではもはや実現可能ではありません。静的な料金でウォレットを設定すると、トランザクションが「スタック」して確認されないことが多いため、ユーザーエクスペリエンスが低下します。ビットコインの取引と手数料を理解していないユーザーは、資金を失ったと思って取引が「行き詰まっている」ことに不満を感じています。

以下の料金見積もりサービスbitcoinfees.21.coのグラフは、10サトシ/バイト単位での料金のリアルタイム見積もりと、各範囲の料金トランザクションの予想確認時間(分とブロック)を示しています。各料金範囲(たとえば、61〜70サトシ/バイト)について、2つの横棒は、未確認のトランザクションの数(1405)と過去24時間のトランザクションの総数(102,975)を示し、料金はこの範囲内です。 。グラフによると、現時点で推奨される優先度の高い料金は80 satoshi /バイトです。これにより、トランザクションが次のブロックでマイニングされる可能性があります(ブロック遅延ゼロ)。合理的な判断によると、通常のトランザクションのサイズは約226バイトであるため、1回のトランザクションの推奨料金は18,080サトシ(0.00018080 BTC)です。

コスト見積もりデータは、単純なHTTP REST API( https://bitcoinfees.21.co/api/v1/fees/recommended)を取得します。 たとえば、コマンドラインでcurlコマンドを使用します。

運用コスト見積もりAPI

$ curl https://bitcoinfees.21.co/api/v1/fees/recommended {'fastestFee':80,'halfHourFee':80,'hourFee':60}

APIは、コスト見積もりを通じて1バイトあたりのsatoshiの形式でJSONオブジェクトを返すため、「最速の確認」(fastestFee)、および3ブロック(halfHourFee)と6ブロック(hourFee)での確認を実現します。

6-2bitcoinfees.21.co

サイズの計算式

1)方法1

ビットコイン取引では、鉱夫の手数料の設定が高すぎたり低すぎたりすると、取引を正常に生成できないため、取引で鉱夫の手数料も計算する必要があります。これは、トランザクションに必要なサイズを大まかに見積もることができる式です。次に、サイズにPrice per bitを掛けます。鉱夫の料金を取得できます。

size = inputsNum * 148 + outputsNum * 34 + 10 (+/-) 40
  • inputNumは、トランザクション内の入力の数を示します
  • outputNumは、トランザクションの出力数を示します
  • 最後の部分は、足し算と引き算のより正確な方法です40


    より正確なアプローチ

    方法2)bitcoinjs経由
    //テストネットワークを使用する#正式な環境でテストネットを削除する
    var testnet = bitcoin.networks.testnet

    //署名されたトランザクションのオブジェクトを取得します

    var alice = bitcoin.ECPair.fromWIF
    ( 'cTRWz1dALytHZP3WVdGDjmi5Z9gijqPjmzTM6C2BwHQQ3EqNtNQW'、テストネット)

    //トランザクションを構築するためのオブジェクトを取得します

    const test_txb = new bitcoin.TransactionBuilder(testnet)

    test_txb.setVersion(2)

    test_txb.addInput( '93dcd13d86e540dbb58f9d705ebc5dfe1ec6bfc1161b5f84d230cc6ad819e09a'、1)

    test_txb.addOutput( '2MwpK3YP1QpTB9WNSrixATRegwLPaGrZCRF'、9995788)

    test_txb.addOutput( 'mqgEi75mTAJWbHABQ6PsbSfrXzUcZBeM4s'、200000000)

    //トランザクションに署名します

    test_txb.sign(0、alice)
    //トランザクション16進数

    var rawtransaction = test_txb.build()。toHex()
    //特定のサイズを取得します

    var size = rawtransaction.length / 2

  • Testnetブロックブラウザアドレス:
    このトランザクションハッシュ:c376f70c3e77519841c7b3088ad19f9a22c56cc57410ff4ec3f84c737696a875
    https://test-insight.bitpay.com/tx/c376f70c3e77519841c7b3088ad19f9a22c56cc57410ff4ec3f84c737696a875