TxToUniv's argument list needed to be rearranged to match upstream as closely as possible (i.e. placing Dash-specific arguments at the end of the list to allow for code to be backported unmodified, relying on default arguments instead of having to modify each invocation to insert the default argument in between).
This was due to a new TxToUniv variant being introduced in bitcoin#20286
The maximum number of public keys in a multisig remains the same. The upper limit for bare multisigs is and always has been MAX_PUBKEYS_PER_MULTISIG (source), which has always been 20 (source). The limit of up to 16 comes from P2SH overhead (source) and that hasn't changed.
In effect, what bitcoin#20867 does to Dash Core is change the error from "too many public keys" (as we'll be testing against the bare multisig limit) to "excessive redeemScript size" (source) (which is the true limitation).
Backporting bitcoin#21934 required a minor change in the condition needed to emit activation_height as has_signal in the preceding block will evaluate true for both STARTED and LOCKED_IN while earlier it would only for STARTED.
In bitcoin#22722, a self.stop_node had to be added to account for the absurd fee warning that a new test condition introduces.
bitcoin#23706 is partial due to commits in it that rely on RPC type enforcement, which is currently not implemented in Dash Core.
feature_dip3_deterministicmns.py depends on the reporting of addresses to validate multisigs containing expected payees. There is no replacement RPC call to report the pubkeys that compose a multisig address. In the interm, the -deprecatedrpc=addresses flag has been enabled to allow the test to run otherwise unmodified.
Breaking Changes
The following RPCs: gettxout, getrawtransaction, decoderawtransaction, decodescript, gettransaction, and REST endpoints: /rest/tx, /rest/getutxos, /rest/block deprecated the following fields (which are no longer returned in the responses by default): addresses, reqSigs.
The -deprecatedrpc=addresses flag must be passed for these fields to be included in the RPC response. Note that these fields are attributes of the scriptPubKey object returned in the RPC response. However, in the response of decodescript these fields are top-level attributes, and included again as attributes of the scriptPubKey object.
When creating a hex-encoded Dash transaction using the dash-tx utility with the -json option set, the following fields: addresses, reqSigs are no longer returned in the tx output of the response.
The error message for attempts at making multisigs with >16 pubkeys will change to an "excessive redeemScript size" instead of the previous "too many public keys".
Checklist:
[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas (note: N/A)
[x] I have added or updated relevant unit/integration/functional/e2e tests
[x] I have made corresponding changes to the documentation
[x] I have assigned this pull request to a milestone (for repository code-owners and collaborators only)
Additional Information
Closes https://github.com/dashpay/dash/issues/6000
TxToUniv
's argument list needed to be rearranged to match upstream as closely as possible (i.e. placing Dash-specific arguments at the end of the list to allow for code to be backported unmodified, relying on default arguments instead of having to modify each invocation to insert the default argument in between).This was due to a new
TxToUniv
variant being introduced in bitcoin#20286The maximum number of public keys in a multisig remains the same. The upper limit for bare multisigs is and always has been
MAX_PUBKEYS_PER_MULTISIG
(source), which has always been 20 (source). The limit of up to 16 comes from P2SH overhead (source) and that hasn't changed.In effect, what bitcoin#20867 does to Dash Core is change the error from "too many public keys" (as we'll be testing against the bare multisig limit) to "excessive redeemScript size" (source) (which is the true limitation).
Backporting bitcoin#21934 required a minor change in the condition needed to emit
activation_height
ashas_signal
in the preceding block will evaluate true for bothSTARTED
andLOCKED_IN
while earlier it would only forSTARTED
.In bitcoin#22722, a
self.stop_node
had to be added to account for the absurd fee warning that a new test condition introduces.bitcoin#23706 is partial due to commits in it that rely on RPC type enforcement, which is currently not implemented in Dash Core.
feature_dip3_deterministicmns.py
depends on the reporting ofaddresses
to validate multisigs containing expected payees. There is no replacement RPC call to report the pubkeys that compose a multisig address. In the interm, the-deprecatedrpc=addresses
flag has been enabled to allow the test to run otherwise unmodified.Breaking Changes
The following RPCs:
gettxout
,getrawtransaction
,decoderawtransaction
,decodescript
,gettransaction
, and REST endpoints:/rest/tx
,/rest/getutxos
,/rest/block
deprecated the following fields (which are no longer returned in the responses by default):addresses
,reqSigs
.The
-deprecatedrpc=addresses
flag must be passed for these fields to be included in the RPC response. Note that these fields are attributes of thescriptPubKey
object returned in the RPC response. However, in the response ofdecodescript
these fields are top-level attributes, and included again as attributes of thescriptPubKey
object.When creating a hex-encoded Dash transaction using the
dash-tx
utility with the-json
option set, the following fields:addresses
,reqSigs
are no longer returned in the tx output of the response.The error message for attempts at making multisigs with >16 pubkeys will change to an "excessive redeemScript size" instead of the previous "too many public keys".
Checklist: