Skip to content

Commit e5aab53

Browse files
committed
Refactor: initialize dummy Spend/Output descriptions only once
1 parent 6099737 commit e5aab53

File tree

2 files changed

+37
-17
lines changed

2 files changed

+37
-17
lines changed

src/sapling/transaction_builder.cpp

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,35 @@ Optional<OutputDescription> OutputDescriptionInfo::Build(void* ctx) {
6868
return odesc;
6969
}
7070

71+
// Dummy constants used during fee-calculation loop
72+
static OutputDescription CreateDummyOD()
73+
{
74+
OutputDescription dummyOD;
75+
dummyOD.cv = UINT256_MAX;
76+
dummyOD.cmu = UINT256_MAX;
77+
dummyOD.ephemeralKey = UINT256_MAX;
78+
dummyOD.encCiphertext = {{0xff}};
79+
dummyOD.outCiphertext = {{0xff}};
80+
dummyOD.zkproof = {{0xff}};
81+
return dummyOD;
82+
}
83+
static SpendDescription CreateDummySD()
84+
{
85+
SpendDescription dummySD;
86+
dummySD.cv = UINT256_MAX;
87+
dummySD.anchor = UINT256_MAX;
88+
dummySD.nullifier = UINT256_MAX;
89+
dummySD.rk = UINT256_MAX;
90+
dummySD.zkproof = {{0xff}};
91+
dummySD.spendAuthSig = {{0xff}};
92+
return dummySD;
93+
}
94+
95+
const OutputDescription DUMMY_SHIELD_OUT = CreateDummyOD();
96+
const SpendDescription DUMMY_SHIELD_SPEND = CreateDummySD();
97+
const SaplingTxData::binding_sig_t DUMMY_SHIELD_BINDSIG = {{0xff}};
98+
99+
71100
TransactionBuilderResult::TransactionBuilderResult(const CTransaction& tx) : maybeTx(tx) {}
72101

73102
TransactionBuilderResult::TransactionBuilderResult(const std::string& error) : maybeError(error) {}
@@ -328,29 +357,15 @@ TransactionBuilderResult TransactionBuilder::AddDummySignatures()
328357
{
329358
if (!spends.empty() || !outputs.empty()) {
330359
// Add Dummy Sapling OutputDescriptions
331-
OutputDescription dummyOD;
332-
dummyOD.cv = UINT256_MAX;
333-
dummyOD.cmu = UINT256_MAX;
334-
dummyOD.ephemeralKey = UINT256_MAX;
335-
dummyOD.encCiphertext = {{0xff}};
336-
dummyOD.outCiphertext = {{0xff}};
337-
dummyOD.zkproof = {{0xff}};
338360
for (unsigned int i = 0; i < outputs.size(); i++) {
339-
mtx.sapData->vShieldedOutput.push_back(dummyOD);
361+
mtx.sapData->vShieldedOutput.push_back(DUMMY_SHIELD_OUT);
340362
}
341363
// Add Dummy Sapling SpendDescriptions
342-
SpendDescription dummySD;
343-
dummySD.cv = UINT256_MAX;
344-
dummySD.anchor = UINT256_MAX;
345-
dummySD.nullifier = UINT256_MAX;
346-
dummySD.rk = UINT256_MAX;
347-
dummySD.zkproof = {{0xff}};
348-
dummySD.spendAuthSig = {{0xff}};
349364
for (unsigned int i = 0; i < spends.size(); i++) {
350-
mtx.sapData->vShieldedSpend.push_back(dummySD);
365+
mtx.sapData->vShieldedSpend.push_back(DUMMY_SHIELD_SPEND);
351366
}
352367
// Add Dummy Binding sig
353-
mtx.sapData->bindingSig = {{0xff}};
368+
mtx.sapData->bindingSig = DUMMY_SHIELD_BINDSIG;
354369
}
355370

356371
// Add Dummmy Transparent signatures

src/sapling/transaction_builder.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ struct TransparentInputInfo {
5555
CAmount value) : scriptPubKey(scriptPubKey), value(value) {}
5656
};
5757

58+
// Dummy constants used during fee-calculation loop
59+
extern const OutputDescription DUMMY_SHIELD_OUT;
60+
extern const SpendDescription DUMMY_SHIELD_SPEND;
61+
extern const SaplingTxData::binding_sig_t DUMMY_SHIELD_BINDSIG;
62+
5863
class TransactionBuilderResult {
5964
private:
6065
Optional<CTransaction> maybeTx;

0 commit comments

Comments
 (0)