Bip352/fix kmax#1
Closed
edilmedeiros wants to merge 5 commits into
Closed
Conversation
c214081 to
c14fd21
Compare
TheMhv
approved these changes
May 4, 2026
Owner
Author
|
Adicionei um último commit corrigindo typos e sugerindo melhorias na redação de alguns trechos. Vou abrir o PR assim, mas mencionar que esse commit pode ser removido sem problema. Valeu pelo trabalho em conjunto, agora é acompanhar a discussão no repo dos bips. |
The specification limits how many keys the receiver is allowed to scan. Thus, we should not allow the sender to generate more than that many keys/outputs to prevent loss of funds. Co-authored-by: themhv <themhv@proton.me> Co-authored-by: joaozinhom <joaomcr@proton.me> Co-authored-by: IsaqueFranklin <isaque@harlock.xyz> Co-authored-by: lucasdcf <lucasdcf@users.noreply.github.com> Co-authored-by: oleonardolima <oleonardolima@users.noreply.github.com> Co-authored-by: Lorenzo <maturanolorenzo@gmail.com>
Co-Authored-By: themhv <themhv@proton.me> Co-Authored-By: joaozinhom <joaomcr@proton.me> Co-Authored-By: IsaqueFranklin <isaque@harlock.xyz> Co-Authored-By: lucasdcf <lucasdcf@users.noreply.github.com> Co-Authored-By: oleonardolima <oleonardolima@users.noreply.github.com> Co-Authored-By: Lorenzo <maturanolorenzo@gmail.com>
The original implementation references does a trick to avoid generating more outputs thatn the receiver is allowed to scan: it clones the payment specification before calling the crate_outputs() function. Then, when creating groups, the function will see the same address many times and create an artifically big group. This is not a reasonable interpretation of the spec, i.e., if I want to send 2324 outputs for the same address, this should be interpretated as a single group containing a single address. This is what this commit implements. Note that this will NOT pass the unit tests. Next commit will fix this. Co-Authored-By: themhv <themhv@proton.me> Co-Authored-By: joaozinhom <joaomcr@proton.me> Co-Authored-By: IsaqueFranklin <isaque@harlock.xyz> Co-Authored-By: lucasdcf <lucasdcf@users.noreply.github.com> Co-Authored-By: oleonardolima <oleonardolima@users.noreply.github.com> Co-Authored-By: Lorenzo <maturanolorenzo@gmail.com>
Co-Authored-By: themhv <themhv@proton.me> Co-Authored-By: joaozinhom <joaomcr@proton.me> Co-Authored-By: IsaqueFranklin <isaque@harlock.xyz> Co-Authored-By: lucasdcf <lucasdcf@users.noreply.github.com> Co-Authored-By: oleonardolima <oleonardolima@users.noreply.github.com> Co-Authored-By: Lorenzo <maturanolorenzo@gmail.com>
58c4ac6 to
47ef418
Compare
Owner
Author
|
Closing this in favor of bitcoin#2153 |
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.
bitcoin#2106 introduced a limit on how many keys the receiver is allowed to scan. But the sender specification still allows for creating outputs that exceed that limit, risking loosing funds. This PR:
About the reference implementation
bitcoin#2106 introduced a field
counton therecipientsspecification for tests and added a test case in which the sender is given a single silent payment address and wants to create 2324 outputs for it. Before callingcreate_outputs(), which is the implementation of this specification, the test harness will clone the silent payment addresscounttimes and pass it tocreate_outputs(). Thus, in the sender process, it will create a group with 2324 elements, all of which carry the same silent payment address, and will fail as per the spec.I don't believe this to be what any developer would implement from reading the specification:
The sensible thing to do in this scenario is to create one group with one address, after all, we got one silent payment address which gives us one B_scan and one B_m. That will not fail the required check and will result in a transaction with more outputs that the receiver will scan, resulting in loss of funds.
Commit 0de6dfb changes the reference implementation to reflect this behavior and c14fd21 introduces the additional check introduced by 4b9b490.