Skip to content

Commit d9828a9

Browse files
committed
refactor: move ToJson definitions relied by TxToUniv to source file
This helps us get rid of the redefinitions responsible for `-Wredundant-decls` unhappiness.
1 parent db5d000 commit d9828a9

File tree

7 files changed

+154
-138
lines changed

7 files changed

+154
-138
lines changed

src/Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -773,6 +773,7 @@ libbitcoin_common_a_SOURCES = \
773773
core_read.cpp \
774774
core_write.cpp \
775775
deploymentinfo.cpp \
776+
evo/core_write.cpp \
776777
governance/common.cpp \
777778
init/common.cpp \
778779
key.cpp \

src/evo/assetlocktx.h

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@ namespace llmq {
2222
class CQuorumManager;
2323
} // namespace llmq
2424

25-
// Forward declaration from core_io to get rid of circular dependency
26-
UniValue ValueFromAmount(const CAmount amount);
27-
void ScriptPubKeyToUniv(const CScript& scriptPubKey, UniValue& out, bool fIncludeHex, bool include_addresses);
28-
2925
class CAssetLockPayload
3026
{
3127
public:
@@ -53,23 +49,7 @@ class CAssetLockPayload
5349

5450
std::string ToString() const;
5551

56-
[[nodiscard]] UniValue ToJson() const
57-
{
58-
UniValue outputs(UniValue::VARR);
59-
for (const CTxOut& credit_output : creditOutputs) {
60-
UniValue out(UniValue::VOBJ);
61-
out.pushKV("value", ValueFromAmount(credit_output.nValue));
62-
out.pushKV("valueSat", credit_output.nValue);
63-
UniValue spk(UniValue::VOBJ);
64-
ScriptPubKeyToUniv(credit_output.scriptPubKey, spk, /* fIncludeHex = */ true, /* include_addresses = */ false);
65-
out.pushKV("scriptPubKey", spk);
66-
outputs.push_back(out);
67-
}
68-
UniValue obj(UniValue::VOBJ);
69-
obj.pushKV("version", int(nVersion));
70-
obj.pushKV("creditOutputs", outputs);
71-
return obj;
72-
}
52+
[[nodiscard]] UniValue ToJson() const;
7353

7454
// getters
7555
uint8_t getVersion() const
@@ -126,18 +106,7 @@ class CAssetUnlockPayload
126106

127107
std::string ToString() const;
128108

129-
[[nodiscard]] UniValue ToJson() const
130-
{
131-
UniValue obj;
132-
obj.setObject();
133-
obj.pushKV("version", int(nVersion));
134-
obj.pushKV("index", int(index));
135-
obj.pushKV("fee", int(fee));
136-
obj.pushKV("requestedHeight", int(requestedHeight));
137-
obj.pushKV("quorumHash", quorumHash.ToString());
138-
obj.pushKV("quorumSig", quorumSig.ToString());
139-
return obj;
140-
}
109+
[[nodiscard]] UniValue ToJson() const;
141110

142111
bool VerifySig(const llmq::CQuorumManager& qman, const uint256& msgHash, gsl::not_null<const CBlockIndex*> pindexTip, TxValidationState& state) const;
143112

src/evo/cbtx.h

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ class CQuorumBlockProcessor;
2424
class CQuorumSnapshotManager;
2525
}// namespace llmq
2626

27-
// Forward declaration from core_io to get rid of circular dependency
28-
UniValue ValueFromAmount(const CAmount amount);
29-
3027
// coinbase transaction
3128
class CCbTx
3229
{
@@ -65,23 +62,7 @@ class CCbTx
6562

6663
std::string ToString() const;
6764

68-
[[nodiscard]] UniValue ToJson() const
69-
{
70-
UniValue obj;
71-
obj.setObject();
72-
obj.pushKV("version", (int)nVersion);
73-
obj.pushKV("height", nHeight);
74-
obj.pushKV("merkleRootMNList", merkleRootMNList.ToString());
75-
if (nVersion >= Version::MERKLE_ROOT_QUORUMS) {
76-
obj.pushKV("merkleRootQuorums", merkleRootQuorums.ToString());
77-
if (nVersion >= Version::CLSIG_AND_BALANCE) {
78-
obj.pushKV("bestCLHeightDiff", static_cast<int>(bestCLHeightDiff));
79-
obj.pushKV("bestCLSignature", bestCLSignature.ToString());
80-
obj.pushKV("creditPoolBalance", ValueFromAmount(creditPoolBalance));
81-
}
82-
}
83-
return obj;
84-
}
65+
[[nodiscard]] UniValue ToJson() const;
8566
};
8667
template<> struct is_serializable_enum<CCbTx::Version> : std::true_type {};
8768

src/evo/core_write.cpp

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
// Copyright (c) 2018-2025 The Dash Core developers
2+
// Distributed under the MIT software license, see the accompanying
3+
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
#include <core_io.h>
6+
#include <evo/assetlocktx.h>
7+
#include <evo/cbtx.h>
8+
#include <evo/mnhftx.h>
9+
#include <evo/providertx.h>
10+
#include <llmq/commitment.h>
11+
12+
#include <univalue.h>
13+
14+
[[nodiscard]] UniValue CAssetLockPayload::ToJson() const
15+
{
16+
UniValue outputs(UniValue::VARR);
17+
for (const CTxOut& credit_output : creditOutputs) {
18+
UniValue out(UniValue::VOBJ);
19+
out.pushKV("value", ValueFromAmount(credit_output.nValue));
20+
out.pushKV("valueSat", credit_output.nValue);
21+
UniValue spk(UniValue::VOBJ);
22+
ScriptPubKeyToUniv(credit_output.scriptPubKey, spk, /*include_hex=*/true, /*include_address=*/false);
23+
out.pushKV("scriptPubKey", spk);
24+
outputs.push_back(out);
25+
}
26+
27+
UniValue ret(UniValue::VOBJ);
28+
ret.pushKV("version", int(nVersion));
29+
ret.pushKV("creditOutputs", outputs);
30+
return ret;
31+
}
32+
33+
[[nodiscard]] UniValue CAssetUnlockPayload::ToJson() const
34+
{
35+
UniValue ret(UniValue::VOBJ);
36+
ret.pushKV("version", int(nVersion));
37+
ret.pushKV("index", int(index));
38+
ret.pushKV("fee", int(fee));
39+
ret.pushKV("requestedHeight", int(requestedHeight));
40+
ret.pushKV("quorumHash", quorumHash.ToString());
41+
ret.pushKV("quorumSig", quorumSig.ToString());
42+
return ret;
43+
}
44+
45+
[[nodiscard]] UniValue CCbTx::ToJson() const
46+
{
47+
UniValue ret(UniValue::VOBJ);
48+
ret.pushKV("version", (int)nVersion);
49+
ret.pushKV("height", nHeight);
50+
ret.pushKV("merkleRootMNList", merkleRootMNList.ToString());
51+
if (nVersion >= CCbTx::Version::MERKLE_ROOT_QUORUMS) {
52+
ret.pushKV("merkleRootQuorums", merkleRootQuorums.ToString());
53+
if (nVersion >= CCbTx::Version::CLSIG_AND_BALANCE) {
54+
ret.pushKV("bestCLHeightDiff", static_cast<int>(bestCLHeightDiff));
55+
ret.pushKV("bestCLSignature", bestCLSignature.ToString());
56+
ret.pushKV("creditPoolBalance", ValueFromAmount(creditPoolBalance));
57+
}
58+
}
59+
return ret;
60+
}
61+
62+
[[nodiscard]] UniValue CProRegTx::ToJson() const
63+
{
64+
UniValue ret(UniValue::VOBJ);
65+
ret.pushKV("version", nVersion);
66+
ret.pushKV("type", ToUnderlying(nType));
67+
ret.pushKV("collateralHash", collateralOutpoint.hash.ToString());
68+
ret.pushKV("collateralIndex", (int)collateralOutpoint.n);
69+
ret.pushKV("service", addr.ToStringAddrPort());
70+
ret.pushKV("ownerAddress", EncodeDestination(PKHash(keyIDOwner)));
71+
ret.pushKV("votingAddress", EncodeDestination(PKHash(keyIDVoting)));
72+
if (CTxDestination dest; ExtractDestination(scriptPayout, dest)) {
73+
ret.pushKV("payoutAddress", EncodeDestination(dest));
74+
}
75+
ret.pushKV("pubKeyOperator", pubKeyOperator.ToString());
76+
ret.pushKV("operatorReward", (double)nOperatorReward / 100);
77+
if (nType == MnType::Evo) {
78+
ret.pushKV("platformNodeID", platformNodeID.ToString());
79+
ret.pushKV("platformP2PPort", platformP2PPort);
80+
ret.pushKV("platformHTTPPort", platformHTTPPort);
81+
}
82+
ret.pushKV("inputsHash", inputsHash.ToString());
83+
return ret;
84+
}
85+
86+
[[nodiscard]] UniValue CProUpRegTx::ToJson() const
87+
{
88+
UniValue ret(UniValue::VOBJ);
89+
ret.pushKV("version", nVersion);
90+
ret.pushKV("proTxHash", proTxHash.ToString());
91+
ret.pushKV("votingAddress", EncodeDestination(PKHash(keyIDVoting)));
92+
if (CTxDestination dest; ExtractDestination(scriptPayout, dest)) {
93+
ret.pushKV("payoutAddress", EncodeDestination(dest));
94+
}
95+
ret.pushKV("pubKeyOperator", pubKeyOperator.ToString());
96+
ret.pushKV("inputsHash", inputsHash.ToString());
97+
return ret;
98+
}
99+
100+
[[nodiscard]] UniValue CProUpRevTx::ToJson() const
101+
{
102+
UniValue ret(UniValue::VOBJ);
103+
ret.pushKV("version", nVersion);
104+
ret.pushKV("proTxHash", proTxHash.ToString());
105+
ret.pushKV("reason", (int)nReason);
106+
ret.pushKV("inputsHash", inputsHash.ToString());
107+
return ret;
108+
}
109+
110+
[[nodiscard]] UniValue CProUpServTx::ToJson() const
111+
{
112+
UniValue ret(UniValue::VOBJ);
113+
ret.pushKV("version", nVersion);
114+
ret.pushKV("type", ToUnderlying(nType));
115+
ret.pushKV("proTxHash", proTxHash.ToString());
116+
ret.pushKV("service", addr.ToStringAddrPort());
117+
if (CTxDestination dest; ExtractDestination(scriptOperatorPayout, dest)) {
118+
ret.pushKV("operatorPayoutAddress", EncodeDestination(dest));
119+
}
120+
if (nType == MnType::Evo) {
121+
ret.pushKV("platformNodeID", platformNodeID.ToString());
122+
ret.pushKV("platformP2PPort", platformP2PPort);
123+
ret.pushKV("platformHTTPPort", platformHTTPPort);
124+
}
125+
ret.pushKV("inputsHash", inputsHash.ToString());
126+
return ret;
127+
}
128+
129+
[[nodiscard]] UniValue MNHFTxPayload::ToJson() const
130+
{
131+
UniValue ret(UniValue::VOBJ);
132+
ret.pushKV("version", (int)nVersion);
133+
ret.pushKV("signal", signal.ToJson());
134+
return ret;
135+
}
136+
137+
[[nodiscard]] UniValue llmq::CFinalCommitmentTxPayload::ToJson() const
138+
{
139+
UniValue ret(UniValue::VOBJ);
140+
ret.pushKV("version", int{nVersion});
141+
ret.pushKV("height", int(nHeight));
142+
ret.pushKV("commitment", commitment.ToJson());
143+
return ret;
144+
}

src/evo/mnhftx.h

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,7 @@ class MNHFTxPayload
8686

8787
std::string ToString() const;
8888

89-
[[nodiscard]] UniValue ToJson() const
90-
{
91-
UniValue obj;
92-
obj.setObject();
93-
obj.pushKV("version", (int)nVersion);
94-
obj.pushKV("signal", signal.ToJson());
95-
return obj;
96-
}
89+
[[nodiscard]] UniValue ToJson() const;
9790
};
9891

9992
class CMNHFManager : public AbstractEHFManager

src/evo/providertx.h

Lines changed: 4 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -91,31 +91,7 @@ class CProRegTx
9191

9292
std::string ToString() const;
9393

94-
[[nodiscard]] UniValue ToJson() const
95-
{
96-
UniValue obj;
97-
obj.setObject();
98-
obj.pushKV("version", nVersion);
99-
obj.pushKV("type", ToUnderlying(nType));
100-
obj.pushKV("collateralHash", collateralOutpoint.hash.ToString());
101-
obj.pushKV("collateralIndex", (int)collateralOutpoint.n);
102-
obj.pushKV("service", addr.ToStringAddrPort());
103-
obj.pushKV("ownerAddress", EncodeDestination(PKHash(keyIDOwner)));
104-
obj.pushKV("votingAddress", EncodeDestination(PKHash(keyIDVoting)));
105-
106-
if (CTxDestination dest; ExtractDestination(scriptPayout, dest)) {
107-
obj.pushKV("payoutAddress", EncodeDestination(dest));
108-
}
109-
obj.pushKV("pubKeyOperator", pubKeyOperator.ToString());
110-
obj.pushKV("operatorReward", (double)nOperatorReward / 100);
111-
if (nType == MnType::Evo) {
112-
obj.pushKV("platformNodeID", platformNodeID.ToString());
113-
obj.pushKV("platformP2PPort", platformP2PPort);
114-
obj.pushKV("platformHTTPPort", platformHTTPPort);
115-
}
116-
obj.pushKV("inputsHash", inputsHash.ToString());
117-
return obj;
118-
}
94+
[[nodiscard]] UniValue ToJson() const;
11995

12096
bool IsTriviallyValid(bool is_basic_scheme_active, TxValidationState& state) const;
12197
};
@@ -175,25 +151,7 @@ class CProUpServTx
175151

176152
std::string ToString() const;
177153

178-
[[nodiscard]] UniValue ToJson() const
179-
{
180-
UniValue obj;
181-
obj.setObject();
182-
obj.pushKV("version", nVersion);
183-
obj.pushKV("type", ToUnderlying(nType));
184-
obj.pushKV("proTxHash", proTxHash.ToString());
185-
obj.pushKV("service", addr.ToStringAddrPort());
186-
if (CTxDestination dest; ExtractDestination(scriptOperatorPayout, dest)) {
187-
obj.pushKV("operatorPayoutAddress", EncodeDestination(dest));
188-
}
189-
if (nType == MnType::Evo) {
190-
obj.pushKV("platformNodeID", platformNodeID.ToString());
191-
obj.pushKV("platformP2PPort", platformP2PPort);
192-
obj.pushKV("platformHTTPPort", platformHTTPPort);
193-
}
194-
obj.pushKV("inputsHash", inputsHash.ToString());
195-
return obj;
196-
}
154+
[[nodiscard]] UniValue ToJson() const;
197155

198156
bool IsTriviallyValid(bool is_basic_scheme_active, TxValidationState& state) const;
199157
};
@@ -243,20 +201,7 @@ class CProUpRegTx
243201

244202
std::string ToString() const;
245203

246-
[[nodiscard]] UniValue ToJson() const
247-
{
248-
UniValue obj;
249-
obj.setObject();
250-
obj.pushKV("version", nVersion);
251-
obj.pushKV("proTxHash", proTxHash.ToString());
252-
obj.pushKV("votingAddress", EncodeDestination(PKHash(keyIDVoting)));
253-
if (CTxDestination dest; ExtractDestination(scriptPayout, dest)) {
254-
obj.pushKV("payoutAddress", EncodeDestination(dest));
255-
}
256-
obj.pushKV("pubKeyOperator", pubKeyOperator.ToString());
257-
obj.pushKV("inputsHash", inputsHash.ToString());
258-
return obj;
259-
}
204+
[[nodiscard]] UniValue ToJson() const;
260205

261206
bool IsTriviallyValid(bool is_basic_scheme_active, TxValidationState& state) const;
262207
};
@@ -309,16 +254,7 @@ class CProUpRevTx
309254

310255
std::string ToString() const;
311256

312-
[[nodiscard]] UniValue ToJson() const
313-
{
314-
UniValue obj;
315-
obj.setObject();
316-
obj.pushKV("version", nVersion);
317-
obj.pushKV("proTxHash", proTxHash.ToString());
318-
obj.pushKV("reason", (int)nReason);
319-
obj.pushKV("inputsHash", inputsHash.ToString());
320-
return obj;
321-
}
257+
[[nodiscard]] UniValue ToJson() const;
322258

323259
bool IsTriviallyValid(bool is_basic_scheme_active, TxValidationState& state) const;
324260
};

src/llmq/commitment.h

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,7 @@ class CFinalCommitmentTxPayload
166166
READWRITE(obj.nVersion, obj.nHeight, obj.commitment);
167167
}
168168

169-
[[nodiscard]] UniValue ToJson() const
170-
{
171-
UniValue obj;
172-
obj.setObject();
173-
obj.pushKV("version", int{nVersion});
174-
obj.pushKV("height", int(nHeight));
175-
obj.pushKV("commitment", commitment.ToJson());
176-
return obj;
177-
}
169+
[[nodiscard]] UniValue ToJson() const;
178170
};
179171

180172
bool CheckLLMQCommitment(CDeterministicMNManager& dmnman, CQuorumSnapshotManager& qsnapman,

0 commit comments

Comments
 (0)