独自暗号貨幣を作ろう 第6回
<塵埃取引出力規制>
塵埃取引(dust transaction、額面価格が極めて小額であるような取引出力を有する取引)によるブロック鎖の肥大化(ブロック鎖の保持に必要な記憶領域が深刻な速度で増大していくこと)を阻止するために、Bitcoinでは額面価格が5460satoshi未満の取引出力は認められません。
CREACOINにも同様の制限を設けることにします。
額面価格が0.1yumina未満の取引出力を塵埃取引出力と定義し、1つ以上の塵埃取引出力を含む取引を塵埃取引と定義し、塵埃取引は無効とします。無効な取引は正当なノード(honest node)には認められず、正常なネットワーク(正当なノードが多数を占めるネットワーク)においては棄却されます。
塵埃取引の無効化をどの部分で(どのクラスで)実装するかは難しいところですが、Transaction抽象クラスで実装することにしましょう。
Transaction抽象クラスにdustTxout静的フィールドを追加し、IsValid仮想プロパティをオーバーライドします。
public static CurrencyUnit dustTxout = new Yumina(0.1m); public override bool IsValid { get { if (!base.IsValid) return false; if (Version == 0) return outputs.All((e) => e.amount.rawAmount >= dustTxout.rawAmount); else throw new NotSupportedException("tx_is_valid_not_supported"); } }