chaintope / glueby

[WIP] A Ruby library of smart contracts that can be used on Tapyrus.
MIT License
7 stars 10 forks source link

Fix duplicate inputs error #174

Closed rantan closed 1 year ago

rantan commented 1 year ago

This PR will fix below issue

When #pay of TPC is specified with both use_auto_fee and use_auto_fulfill_inputs enabled, both auto_fee and auto_fulfill_inputs try to set the UTXO of the TPC respectively, resulting in duplicate UTXOs may be set for both auto_fee and auto_fulfill_inputs.

UtxoProvider を利用している場合に、入力に重複するUTXOをセットする問題を修正しました。原因は UtxoProvider を利用している場合、auto_fulfill_inputs 機能でUtxoProviderのウォレットから入力をセットした後で、もう一度手数料のための UTXO をセットするために UtxoProviderのウォレットから UTXO を取得する際に、すでに使用した UTXO を取得することがあったことです。

これを修正するために以下の方針で修正を行いました。

この方針を実施するにあたって、オプションのパターンごとに同じ問題に対して違った方針で対応している箇所があったため挙動を統一しました。統一することで、auto_fulfill_inputs 機能に入力の自動保管機能を統合しやすくなります。

  1. output を dust output と判定する処理を TxOut#dust? に統一する
    • DUST_LIMIT 定数と value を比較する処理がありましたが上に統一しました。
  2. 手数料のための入力の追加で必要な手数料が増えた場合の対応を tx 作成者のウォレットからTPC を供給する設定の場合も有効にしました。
    • UtxoProvider を利用したときだけ有効な機能でしたが、tx 作成者のウォレットから TPC を拠出する場合も使えるようにしました。