@@ -53,11 +53,28 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet*
5353 if (!wtx.IsZerocoinSpend () && !ExtractDestination (wtx.vout [1 ].scriptPubKey , address))
5454 return parts;
5555
56- // Masternode reward
57- CTxDestination destMN;
58- int nIndexMN = wtx.vout .size () - 1 ;
59- if (ExtractDestination (wtx.vout [nIndexMN].scriptPubKey , destMN)) {
60- if (IsMine (*wallet, destMN)) {
56+ if (wtx.IsZerocoinSpend () && (fZSpendFromMe || wallet->zpivTracker ->HasMintTx (hash))) {
57+ // zPIV stake reward
58+ sub.involvesWatchAddress = false ;
59+ sub.type = TransactionRecord::StakeZPIV;
60+ sub.address = mapValue[" zerocoinmint" ];
61+ sub.credit = 0 ;
62+ for (const CTxOut& out : wtx.vout ) {
63+ if (out.IsZerocoinMint ())
64+ sub.credit += out.nValue ;
65+ }
66+ sub.debit -= wtx.vin [0 ].nSequence * COIN;
67+ } else if (isminetype mine = wallet->IsMine (wtx.vout [1 ])) {
68+ // PIV stake reward
69+ sub.involvesWatchAddress = mine & ISMINE_WATCH_ONLY;
70+ sub.type = TransactionRecord::StakeMint;
71+ sub.address = CBitcoinAddress (address).ToString ();
72+ sub.credit = wtx.vout [1 ].nValue ;
73+ } else {
74+ // Masternode reward
75+ CTxDestination destMN;
76+ int nIndexMN = wtx.vout .size () - 1 ;
77+ if (ExtractDestination (wtx.vout [nIndexMN].scriptPubKey , destMN) && IsMine (*wallet, destMN)) {
6178 isminetype mine = wallet->IsMine (wtx.vout [nIndexMN]);
6279 sub.involvesWatchAddress = mine & ISMINE_WATCH_ONLY;
6380 sub.type = TransactionRecord::MNReward;
@@ -66,27 +83,6 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet*
6683 }
6784 }
6885
69- // stake reward
70- if (wtx.IsZerocoinSpend ()) {
71- if (fZSpendFromMe || wallet->zpivTracker ->HasMintTx (hash)) {
72- sub.involvesWatchAddress = false ;
73- sub.type = TransactionRecord::StakeZPIV;
74- sub.address = mapValue[" zerocoinmint" ];
75- sub.credit = nNet;
76- for (const CTxOut& out : wtx.vout ) {
77- if (out.IsZerocoinMint ())
78- sub.credit += out.nValue ;
79- }
80- sub.debit -= wtx.vin [0 ].nSequence * COIN;
81- }
82- } else {
83- isminetype mine = wallet->IsMine (wtx.vout [1 ]);
84- sub.involvesWatchAddress = mine & ISMINE_WATCH_ONLY;
85- sub.type = TransactionRecord::StakeMint;
86- sub.address = CBitcoinAddress (address).ToString ();
87- sub.credit = nNet;
88- }
89-
9086 parts.append (sub);
9187 } else if (wtx.IsZerocoinSpend ()) {
9288 // zerocoin spend outputs
0 commit comments