こんにちは。よっしーです(^^)
今日は、ナンスについて解説しています。
背景
ナンスについて調査する機会がありましたので、その時の内容を備忘として記事に残しました。
ナンスとは
ナンス(nonce)とは、仮想通貨のネットワークにおいて、取引を一意に識別するための数値のことを指します。
ナンスには主に2つの役割があります。
- 同じ取引の二重送信を防ぐ
ビットコインなどでは、同じ取引が2回以上ブロードキャストされないよう、ナンス値を利用して取引を識別しています。ナンスが異なれば別の取引として扱われるため、二重支払いを防げます。 - マイニングの作業証明(Proof-of-Work)に使用
マイニングでは、ナンスをハッシュ関数の入力値の一部として使用し、特定の条件を満たすハッシュ値を探索します。この作業が「マイニング」に相当します。マイナーはナンスの値を変えながら計算を行い、条件を満たすナンス値を見つけます。
ナンスは基本的に乱数が利用されますが、一部のブロックチェーンでは単に取引の発信回数をカウントする値を使うこともあります。
また、ビットコインではナンス(nonce)の他に、取引件数(transaction counter)や出力件数(output counter)なども、同様の目的で取引を区別するために使われています。
ナンスはブロックチェーンにおける重要な要素で、取引の一意性とマイニングの証明作業に不可欠な役割を担っているといえるでしょう。
利用例
ナンスの具体的な利用例を挙げますと、以下のようになります。
【ビットコインにおけるナンス】
ビットコインのブロックヘッダーには「Nonce」フィールドが設けられており、ここにマイナーがナンスの値を設定します。マイナーは以下のように計算を行い、ナンスを変更しながらマイニングを行います。
- 前のブロックのハッシュ値、そのブロック内の取引データ、その他のブロックヘッダー情報とナンスを連結する
- その連結された値に対してSHA-256のハッシュ関数を2回適用する
- 得られたハッシュ値が、あらかじめ設定された難易度の条件を満たすかチェック
- 条件を満たさなければ、ナンスの値を変えて2に戻る
- 条件を満たせばブロックが正式に生成される
つまり、ナンスはマイニングの作業証明において、条件を満たすハッシュ値を探すための「変数」として機能しています。
【イーサリアムにおけるナンス】
イーサリアムでは、ナンスは単に取引の発信回数をカウントする値として利用されています。
- ユーザーが最初の取引を送信する際、ナンスは0になる
- その後、同じ送信元アドレスから次の取引を送る際、ナンスは1にインクリメントされる
- さらに次の取引ではナンスは2、という具合に値が増えていく
このようにナンスの値が異なれば、重複した取引とはみなされず、二重支払いを防げます。
このように、ナンスはブロックチェーン上で取引を一意に識別し、マイニングの証明作業に利用されることで、ネットワークの安全性を確保する大切な役割を担っています。
おわりに
今日は、 ナンスについて解説しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント