forked from bitcoin/bitcoin
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
feat!: implement Decentralized Masternode Shares DIP #7437
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
PastaPastaPasta
wants to merge
14
commits into
dashpay:develop
Choose a base branch
from
PastaPastaPasta:claude/masternode-shares-dip-c40ac2
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
32b2307
consensus: add shared collateral template script and new special tx t…
PastaPastaPasta 007b91b
evo: extend v4 ProRegTx payload with collateral shares
PastaPastaPasta c7a7a40
evo: shared masternode consensus rules, state, and special transactions
PastaPastaPasta 7cf8bd3
masternode: split shared masternode rewards by share amounts
PastaPastaPasta 7831381
mempool: conflict tracking and eviction for shared masternode transac…
PastaPastaPasta 080a18f
policy: relay carve-outs for the shared collateral template
PastaPastaPasta f195a72
filters: match shared masternode fields in bloom and compact filters
PastaPastaPasta 155510a
rpc: shared masternode registration, dissolution and update commands
PastaPastaPasta 8911c80
test: unit and functional coverage for decentralized masternode shares
PastaPastaPasta 0445f8c
doc: release notes for decentralized masternode shares
PastaPastaPasta 4ac7f9b
evo: apply shared masternode dissolution in the collateral-spend phase
PastaPastaPasta 77b7698
rpc: preflight shared registration terms and document standby dissolu…
PastaPastaPasta 5495e02
evo: commit the signature count into the ProDisTx signing digest
PastaPastaPasta a55b9f9
mempool: guard removeProTxKeyChangedConflicts against already-removed…
PastaPastaPasta File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| # Decentralized Masternode Shares | ||
|
|
||
| This release implements the Decentralized Masternode Shares DIP, activating | ||
| together with DIP-0026 multi-party payouts as part of the v24 hard fork | ||
| (`DEPLOYMENT_V24`). Before activation there is no behavior change. | ||
|
|
||
| ## Consensus changes (active with v24) | ||
|
|
||
| - A version 4 ProRegTx may carry a collateral share table: 2 to 8 participants | ||
| fund the masternode collateral atomically in one registration, each recording | ||
| an immutable amount, refund script and share owner key, plus an updatable | ||
| reward script. Every participant consents by signing a digest that binds the | ||
| exact funding inputs, all outputs, the share table, the penalty terms and the | ||
| registrar configuration. | ||
| - The shared collateral is paid to the 7-byte template script | ||
| `04445348437551` (`0x04 "DSHC" OP_DROP OP_TRUE`). From activation, an output | ||
| paying this exact script is valid only as the collateral of a valid shared | ||
| registration, and spending such an output is valid only via a ProDisTx. | ||
| Template outputs mined before activation become permanently unspendable. | ||
| - Three new special transaction types: | ||
| - **ProDisTx (type 10)** dissolves a shared masternode, refunding every | ||
| participant's principal to its immutable refund script. Exactly one | ||
| signature (unilateral, penalized during the configured early period) or one | ||
| per share (unanimous, penalty-free). Validity is monotone: a ProDisTx that | ||
| is valid at some height is valid at every later height, which makes offline | ||
| "standby dissolutions" safe. | ||
| - **ProUpShareTx (type 11)** lets one share owner update their reward script. | ||
| - **ProUpSharedRegTx (type 12)** updates the operator key and/or voting key | ||
| with a signature from every share owner. A plain ProUpRegTx is invalid for | ||
| shared masternodes. | ||
| - The owner reward of a shared masternode is split across the share table | ||
| proportionally to the recorded contributions (sequential floor, remainder to | ||
| the last entry), paying each share's reward script (or its refund script when | ||
| none is set). Operator rewards are unchanged. | ||
| - Withdrawal (asset unlock) transactions may not pay the template script. | ||
|
|
||
| ## Relay policy changes | ||
|
|
||
| - The template output relays only inside a ProRegTx, and a template prevout is | ||
| accepted only inside a ProDisTx; both remain nonstandard everywhere else. | ||
|
|
||
| ## New RPCs | ||
|
|
||
| - `protx register_shared_prepare` builds an unsigned shared registration from a | ||
| caller-supplied funding transaction. | ||
| - `protx shared_sign` signs a shared registration, dissolution or shared | ||
| registrar update with every share owner key the wallet holds. | ||
| - `protx shared_combine` combines collected signatures and optionally submits. | ||
| - `protx dissolve` creates, signs and submits a unilateral ProDisTx (or, with | ||
| `submit=false`, returns hex suitable for offline standby storage). | ||
| - `protx dissolve_prepare` builds an unsigned unanimous ProDisTx. | ||
| - `protx update_share` updates one share's reward address. | ||
| - `protx update_shared_registrar_prepare` builds an unsigned ProUpSharedRegTx. |
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
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
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
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
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
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
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
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Omit the nonexistent single owner from shared JSON.
Shared validation requires
keyIDOwnerto be null, but both serializers already emit it as a zero-hash Dash address. EmitownerAddressonly for non-shared records and mark it optional in the corresponding RPC help.Also applies to: 366-370
🤖 Prompt for AI Agents