mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 04:22:55 +01:00
fix: Let CDeterministicMN::ToJson() return correct collateralAddress
for spent collaterals (#5607)
## Issue being fixed or feature implemented Historical masternode data returned via rpcs like `protx listdiff` can be broken because some collaterals might be spent already and `GetUTXOCoin` wasn't able to get any info. ## What was done? Use `GetTransaction` as a fallback. ## How Has This Been Tested? run tests ## Breaking Changes n/a ## Checklist: - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] 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)_
This commit is contained in:
parent
2004a855d9
commit
30f3f50928
@ -50,12 +50,17 @@ UniValue CDeterministicMN::ToJson() const
|
|||||||
obj.pushKV("collateralHash", collateralOutpoint.hash.ToString());
|
obj.pushKV("collateralHash", collateralOutpoint.hash.ToString());
|
||||||
obj.pushKV("collateralIndex", (int)collateralOutpoint.n);
|
obj.pushKV("collateralIndex", (int)collateralOutpoint.n);
|
||||||
|
|
||||||
Coin coin;
|
CScript scriptPubKey;
|
||||||
if (GetUTXOCoin(collateralOutpoint, coin)) {
|
if (Coin coin; GetUTXOCoin(collateralOutpoint, coin)) {
|
||||||
CTxDestination dest;
|
scriptPubKey = coin.out.scriptPubKey;
|
||||||
if (ExtractDestination(coin.out.scriptPubKey, dest)) {
|
} else {
|
||||||
obj.pushKV("collateralAddress", EncodeDestination(dest));
|
uint256 tmpHashBlock;
|
||||||
|
CTransactionRef collateralTx = GetTransaction(/* block_index */ nullptr, /* mempool */ nullptr, collateralOutpoint.hash, Params().GetConsensus(), tmpHashBlock);
|
||||||
|
scriptPubKey = collateralTx->vout[collateralOutpoint.n].scriptPubKey;
|
||||||
}
|
}
|
||||||
|
CTxDestination dest;
|
||||||
|
if (ExtractDestination(scriptPubKey, dest)) {
|
||||||
|
obj.pushKV("collateralAddress", EncodeDestination(dest));
|
||||||
}
|
}
|
||||||
|
|
||||||
obj.pushKV("operatorReward", (double)nOperatorReward / 100);
|
obj.pushKV("operatorReward", (double)nOperatorReward / 100);
|
||||||
|
@ -112,6 +112,8 @@ class DIP3Test(BitcoinTestFramework):
|
|||||||
spend_mns_count = 3
|
spend_mns_count = 3
|
||||||
mns_tmp = [] + mns
|
mns_tmp = [] + mns
|
||||||
dummy_txins = []
|
dummy_txins = []
|
||||||
|
old_tip = self.nodes[0].getblockcount()
|
||||||
|
old_listdiff = self.nodes[0].protx("listdiff", 1, old_tip)
|
||||||
for i in range(spend_mns_count):
|
for i in range(spend_mns_count):
|
||||||
dummy_txin = self.spend_mn_collateral(mns[i], with_dummy_input_output=True)
|
dummy_txin = self.spend_mn_collateral(mns[i], with_dummy_input_output=True)
|
||||||
dummy_txins.append(dummy_txin)
|
dummy_txins.append(dummy_txin)
|
||||||
@ -119,6 +121,8 @@ class DIP3Test(BitcoinTestFramework):
|
|||||||
self.sync_all()
|
self.sync_all()
|
||||||
mns_tmp.remove(mns[i])
|
mns_tmp.remove(mns[i])
|
||||||
self.assert_mnlists(mns_tmp)
|
self.assert_mnlists(mns_tmp)
|
||||||
|
new_listdiff = self.nodes[0].protx("listdiff", 1, old_tip)
|
||||||
|
assert_equal(new_listdiff, old_listdiff)
|
||||||
|
|
||||||
self.log.info("test that reverting the blockchain on a single node results in the mnlist to be reverted as well")
|
self.log.info("test that reverting the blockchain on a single node results in the mnlist to be reverted as well")
|
||||||
for i in range(spend_mns_count):
|
for i in range(spend_mns_count):
|
||||||
|
Loading…
Reference in New Issue
Block a user