Exclude opreturn from change heuristics #81
Merged
Merged
Conversation
bc1cindy
reviewed
May 13, 2026
|
|
||
| let outputs: Vec<_> = tx.outputs().map(|o| (o.id(), o.value())).collect(); | ||
| if outputs.is_empty() { | ||
| for output_id in txouts.iter() { |
Contributor
There was a problem hiding this comment.
per-output mask makes sense, but is_uih1_candidate recomputes min(input_values) per output
O(K²) lookups for a K-in/K-out tx
could group output_ids by tx here and compute min(in) once per tx
same mask output
wdyt?
Contributor
Author
There was a problem hiding this comment.
yeah something like that could make sense. Alternatively we could redesignt the optimal change node to iterate over txs instead of txouts. I have a feeling we would do this kind of refactor when we tackle #65
700b7de to
d5781dd
Compare
0xZaddyy
approved these changes
May 15, 2026
0xZaddyy
left a comment
Contributor
There was a problem hiding this comment.
Overall, everything looks good
ACK
| pub struct SpendableTxConstituent<T>(T); | ||
|
|
||
| impl<T: HasScriptPubkey> SpendableTxConstituent<T> { | ||
| /// Wraps `value` if it is spendable; returns it back as `Err` if OP_RETURN. |
Contributor
There was a problem hiding this comment.
Suggested change
| /// Wraps `value` if it is spendable; returns it back as `Err` if OP_RETURN. | |
| /// Wraps `value` if it is spendable; returns it back as `Err` if OP_RETURN or NonStandard. |
d5781dd to
4c609db
Compare
Wrapper around `TxConstituent` that is converted when the spk is "spendable"
Co-authored-by: Oladapo Oyindamola <111582215+0xZaddyy@users.noreply.github.com> Change is defined as an output going belonging to the same wallet the input set. Unspendable outputs by this definition cannot be change.
UIH1 now takes Expr<TxOutSet> and returns Expr<TxOutMask>, matching the convention of other change heuristics. The underlying is_uih1_candidate was updated to take SpendableTxConstituent<T>, so the node wraps each output at the call site before delegating.
4c609db to
05fac7d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
@0xZaddyy To replace PR #73 And fixed the UIH1 inconsistency discussed in #73