* Add `owneraddress` and `votingaddress` to json representation of provider txes and rpc output
* Rearrange/unify things a bit
* Add votingAddress to CSimplifiedMNListEntry json
* Use addresses in error messages too
* More unification
* Swap keyIDOwner/keyIDVoting with corresponding addresses in ToString()
* Drop keyIDOwner/keyIDVoting from json and rpc
* More unification: s/operatorRewardAddress/operatorPayoutAddress/
* More unification/cleanup: use specific name instead of just bitcoinAddress
* Fix dip3 test
* Send larger amounts for IX
* Don't use node0 as sender of IX transactions
node0 tends to have many small UTXOs which result in TXs with many inputs
and high CPU usage.
* Replace IsDeterministicMNsSporkActive with IsDIP3Active
IsDIP3Active will now use a fixed parameter from consensus params.
Values for DIP0003Height/DIP0003Hash need to be updated when spork15
activates on mainnet.
Also enforce correct block hash on testnet/mainnet for DIP3 activation
block.
* Remove SPORK_15_DETERMINISTIC_MNS_ENABLED
* Replace all uses of IsDeterministicMNsSporkActive with IsDIP3Active
* Remove DIP3 upgrade-path tests and directly start with DIP3 enabled tests
* Make -masternodeprivkey non-mandatory
This code will vanish later.
* Add an option to use specific address as a source of funds in protx rpc commands
* fix typo "must"
* Always use payoutAddress (or operatorPayoutAddress) as a default if no fundAddress was specified
* make sure we actually selected some inputs
* fundAddress -> feeSourceAddress
* Align help text with new logic
* fix protx_update_service
* fix protx_revoke
* Add fRequireAllInputs to CCoinControl and use it in FundSpecialTx
This avoids adding all inputs even though they are not needed.
* Allow to specify empty operator payout address and simplify fee code in update_service
DIP3 tests were failing to call "protx update_service" as it did not accept
an empty "operatorPayoutAddress".
This also simplifies handling of the feeSourceAddr.
* Specify source for funds and fees in DIP3 tests
* Implement creation and propagation of dummy contributions
These act as a ping which is broadcast a few blocks before the dummy
commitments are created. They are meant to determine online/offline members.
* Use information about received dummy contributions to determine validMembers
* Fix PoSe tests
* Fix dummy DKG phase progress in PoSe tests and give tests more time
Mine one block at a time until we reach the mining phase.
* Add SPORK_17_QUORUM_DKG_ENABLED spork
* Implement CDummyDKG and CDummyCommitment until we have the real DKG merged
This is only used on testnet/devnet/regtest and will NEVER be used on
mainnet. It is NOT SECURE AT ALL!
See comment in quorums_dummydkg.h for more details.
* Test simple PoSe in DIP3 tests
* Generate 2 instead of 4 blocks per iteration in PoSe tests
4 was based on old chainparams where I used larger phases.
* Only sleep when necessary in PoSe tests
* Fix typo in comment
* Give PoSe tests more time and sync after fast-forward
* Sleep in wait_for_instant_lock when TX is not known yet
We'll otherwise stress the CPU quite a lot, which might in turn result in
instant send timeouts.
* Wait for all nodes to have the instant send lock
Otherwise individual nodes might end up not being able to catch up,
especially when it's the last iteration and we generate 6 blocks after it.
* Use getrawtransaction in wait_for_instant_lock instead of gettransaction
gettransaction fails if the TX is not owned by the wallet
* Give instant send tests more time after DIP3 activation
Signature verification changes to BLS when DIP3 gets activated, which is
much more resource hungry. Give instant send tests more time after DIP3
activation until we do proper batched verification of instant send
signatures.
* Add LLMQ parameters to consensus params
* Add DIP6 quorum commitment special TX
* Implement CQuorumBlockProcessor which validates and handles commitments
* Add quorum commitments to new blocks
* Propagate QFCOMMITMENT messages to all nodes
* Allow special transactions in blocks which have no inputs/outputs
But only for TRANSACTION_QUORUM_COMMITMENT for now.
* Add quorum commitments to self-crafted blocks in DIP3 tests
* Add simple fork logic for current testnet
This should avoid a fork on the current testnet. It only applies to the
current chain which activated DIP3 at height 264000 and block
00000048e6e71d4bd90e7c456dcb94683ae832fcad13e1760d8283f7e89f332f.
When we revert the chain to retest the DIP3 deployment, this fork logic
can be removed again.
* Use quorumVvecHash instead of quorumHash to make null commitments unique
Implementation of https://github.com/dashpay/dips/pull/31
* Re-add quorum commitments after pruning mempool selected blocks
* Refactor CQuorumBlockProcessor::ProcessBlock to have less nested if/else statements
Also add BEGIN/END markers for temporary code.
* Add comments/documentation to LLMQParams
* Move code which determines if a commitment is required into IsCommitmentRequired
This should make the code easier to read and also removes some duplication.
The also changes the error types that are possible from 3 to 2 now. Instead
of having "bad-qc-already-mined" and "bad-qc-not-mining-phase", there is
only "bad-qc-not-allowed" now.
* Use new parameter from consensus parames for the temporary fork
* Revert "Restart MNs in DIP3 tests even if collateral has not moved (#2441)"
This reverts commit 153afb9062.
* Reuse old legacy MN key when upgrading to protx
These need to be restarted even in this case as keys are cycled when
upgrade_mn_protx is called. This resulted in invalid IX votes but was not
noticed because only 2 MNs were affected (still 8 of 10 votes succesful)
* Allow to reuse collaterals and addresses in ProRegTx
This also requires to move out the duplication check from CheckService to
the 2 individual ProTx check methods.
* Implement replacement logic for reused collaterals
* Add tests for new replacement logic
* Remove reference to now removed "protocolVersion"
* Allow to use non-DIP3 collaterals after DIP3 activation
This removes a rule which only made sense when we assumed all collaterals
would remain in DIP3 ProRegTx transactions after DIP3 activation.
As we allow to refer external collaterals now, this rule should vanish as
well.
* Sleep in case block time is ahead of real time
See comment. This was not a problem before as we had enough time passed
between the last block that caused this and the start-alias call.
Now we added another start-alias call which is directly after we generated
many blocks.
* Pass CCoinsView reference to special TX handling methods
* Allow referencing other TX outputs for ProRegTx collateral
* Remove "collateralAmount" from "protx register"
* Rename "protx register" to "protx fund_register"
* Remove UpdateSpork15Value from CDeterministicMNManager
Was not used/implemented anymore
* Lock masternode collaterals after chain/DIP3 is fully initialized
Otherwise detection of collaterals does not work.
* Implement new "protx register" RPC which uses existing collaterals
* Remove "masternode info" RPC
It is not consistent with other "masternode" RPCs anymore as it requires
the ProRegTx hash while all other RPCs work with the collateral.
* Load sporks from disk cache before initializing the chain
Otherwise spork15 is not loaded when we check it for the first time.
* Implement "protx info" RPC
* Use "protx info" instead of "masternode info" in DIP3 tests
* Test external collaterals for ProTx
* Handle review comments
* Don't pass CCoinView reference when it's not used
* Revert "Pass CCoinsView reference to special TX handling methods"
This reverts commit 28688724e112c8fe18e44aef055768dbbc068d7d.
* Use GetUTXOCoin instead of now removed coinsView
Also remove collateral height check as GetUTXOCoin only returns confirmed
coins.
* Add conflict handling for external collaterals to mempool
* Handle review comments (squashed Github suggestions)
Co-Authored-By: codablock <ablock84@gmail.com>
* Remove nProtocolVersion fields from deterministic masternode lists
This field was part of my initial implementation from DIP3. One of the last
changes of DIP3 was then to remove this field, which I did not bring back
into code yet. This commit removes it now.
We use PROTOCOL_VERSION now in cases were compatibility in the the pre-DIP3
list is needed.
* Add type and mode fields in DIP3 special TXs
These were added to DIP3 but not in-code yet.
* Add DMN_PROTO_VERSION
* Use BLS keys for operator keys
* Add "bls generate" RPC to generate BLS keys
* Use unique_ptr to store blsKeyOperator and blsPubKeyOperator
Needed because the Chia BLS library crashes when keys are created before
the library is initialized, even if keys are not used. This is the case here
as we have static instances here.
* Remove unnecessary CheckSignature calls
This seems to be some garbage I left in by mistake.
* Fixed review comments
* Fix rpc help for operator keys
All keys that are used as examples are random. None of the secret keys
belongs to any of the public keys.
* Use .GetHash() instead of ::SerializeHash() for BLS pubkeys in txmempool.cpp
* Rename mapProTxBlsPubKeys to mapProTxBlsPubKeyHashes
* Implement dip3 integration tests
This tests the full upgrade path from legacy MNs to deterministic MNs
* Invoke UpdatedBlockTip signal when invalidateblock RPC is called
Currently, UpdatedBlockTip would only be called if the invalidation resulted
in another chain becoming the longest one. This is inconsistent behavior
and was spotted when running dip3 integration tests.