Skip to content

Commit eb83661

Browse files
authored
Merge pull request #1215 from psgreco/elements-22_1_1_rc1
elements-22.1.1-rc1
2 parents 5548997 + d45c79e commit eb83661

34 files changed

+582
-169
lines changed

.cirrus.yml

+2
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ task:
202202

203203
task:
204204
name: 'macOS 11 native [gui] [no depends]'
205+
# Intel macos is not supported anymore by cirrus, and elements doesn't build for arm64 yet
206+
only_if: false
205207
brew_install_script:
206208
- brew install boost libevent berkeley-db4 qt@5 miniupnpc libnatpmp ccache zeromq qrencode sqlite libtool automake pkg-config gnu-getopt
207209
<< : *GLOBAL_TASK_TEMPLATE

configure.ac

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
AC_PREREQ([2.69])
22
define(_CLIENT_VERSION_MAJOR, 22)
33
define(_CLIENT_VERSION_MINOR, 1)
4-
define(_CLIENT_VERSION_BUILD, 0)
5-
define(_CLIENT_VERSION_RC, 0)
4+
define(_CLIENT_VERSION_BUILD, 1)
5+
define(_CLIENT_VERSION_RC, 1)
66
define(_CLIENT_VERSION_IS_RELEASE, true)
7-
define(_COPYRIGHT_YEAR, 2022)
7+
define(_COPYRIGHT_YEAR, 2023)
88
define(_COPYRIGHT_HOLDERS,[The %s developers])
99
define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Elements Project]])
1010
AC_INIT([Elements Core],m4_join([.], _CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MINOR, _CLIENT_VERSION_BUILD)m4_if(_CLIENT_VERSION_RC, [0], [], [rc]_CLIENT_VERSION_RC),[https://github.com/ElementsProject/elements/issues],[elements],[https://elementsproject.org/])

contrib/review-prs.py

+162-67
Large diffs are not rendered by default.

doc/man/elements-cli.1

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.2.
2-
.TH ELEMENTS-CLI "1" "December 2022" "elements-cli v22.1.0" "User Commands"
1+
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
2+
.TH ELEMENTS-CLI "1" "February 2023" "elements-cli v22.1.1" "User Commands"
33
.SH NAME
4-
elements-cli \- manual page for elements-cli v22.1.0
4+
elements-cli \- manual page for elements-cli v22.1.1
55
.SH SYNOPSIS
66
.B elements-cli
77
[\fI\,options\/\fR] \fI\,<command> \/\fR[\fI\,params\/\fR] \fI\,Send command to Elements Core\/\fR
@@ -15,7 +15,7 @@ elements-cli \- manual page for elements-cli v22.1.0
1515
.B elements-cli
1616
[\fI\,options\/\fR] \fI\,help <command> Get help for a command\/\fR
1717
.SH DESCRIPTION
18-
Elements Core RPC client version v22.1.0
18+
Elements Core RPC client version v22.1.1
1919
.SH OPTIONS
2020
.HP
2121
\-?

doc/man/elements-qt.1

+11-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.2.
2-
.TH ELEMENTS-QT "1" "December 2022" "elements-qt v22.1.0" "User Commands"
1+
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
2+
.TH ELEMENTS-QT "1" "February 2023" "elements-qt v22.1.1" "User Commands"
33
.SH NAME
4-
elements-qt \- manual page for elements-qt v22.1.0
4+
elements-qt \- manual page for elements-qt v22.1.1
55
.SH SYNOPSIS
66
.B elements-qt
77
[\fI\,command-line options\/\fR]
88
.SH DESCRIPTION
9-
Elements Core version v22.1.0
9+
Elements Core version v22.1.1
1010
.SH OPTIONS
1111
.HP
1212
\-?
@@ -166,6 +166,13 @@ Execute command on startup.
166166
Create new files with system default permissions, instead of umask 077
167167
(only effective with disabled wallet functionality)
168168
.HP
169+
\fB\-trim_headers\fR
170+
.IP
171+
Trim old headers in memory (by default older than 2 epochs), removing
172+
blocksigning and dynafed\-related fields. Saves memory, but blocks
173+
us from serving blocks or headers to peers, and removes trimmed
174+
fields from some JSON RPC outputs. (default: false)
175+
.HP
169176
\fB\-txindex\fR
170177
.IP
171178
Maintain a full transaction index, used by the getrawtransaction rpc

doc/man/elements-tx.1

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.2.
2-
.TH ELEMENTS-TX "1" "December 2022" "elements-tx v22.1.0" "User Commands"
1+
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
2+
.TH ELEMENTS-TX "1" "February 2023" "elements-tx v22.1.1" "User Commands"
33
.SH NAME
4-
elements-tx \- manual page for elements-tx v22.1.0
4+
elements-tx \- manual page for elements-tx v22.1.1
55
.SH SYNOPSIS
66
.B elements-tx
77
[\fI\,options\/\fR] \fI\,<hex-tx> \/\fR[\fI\,commands\/\fR] \fI\,Update hex-encoded Elements transaction\/\fR
88
.br
99
.B elements-tx
1010
[\fI\,options\/\fR] \fI\,-create \/\fR[\fI\,commands\/\fR] \fI\,Create hex-encoded Elements transaction\/\fR
1111
.SH DESCRIPTION
12-
Elements Core elements\-tx utility version v22.1.0
12+
Elements Core elements\-tx utility version v22.1.1
1313
.SH OPTIONS
1414
.HP
1515
\-?

doc/man/elements-util.1

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.2.
2-
.TH ELEMENTS-UTIL "1" "December 2022" "elements-util v22.1.0" "User Commands"
1+
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
2+
.TH ELEMENTS-UTIL "1" "February 2023" "elements-util v22.1.1" "User Commands"
33
.SH NAME
4-
elements-util \- manual page for elements-util v22.1.0
4+
elements-util \- manual page for elements-util v22.1.1
55
.SH SYNOPSIS
66
.B elements-util
77
[\fI\,options\/\fR] [\fI\,commands\/\fR] \fI\,Do stuff\/\fR
88
.SH DESCRIPTION
9-
Elements Core elements\-util utility version v22.1.0
9+
Elements Core elements\-util utility version v22.1.1
1010
.SH OPTIONS
1111
.HP
1212
\-?

doc/man/elements-wallet.1

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.2.
2-
.TH ELEMENTS-WALLET "1" "December 2022" "elements-wallet v22.1.0" "User Commands"
1+
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
2+
.TH ELEMENTS-WALLET "1" "February 2023" "elements-wallet v22.1.1" "User Commands"
33
.SH NAME
4-
elements-wallet \- manual page for elements-wallet v22.1.0
4+
elements-wallet \- manual page for elements-wallet v22.1.1
55
.SH DESCRIPTION
6-
Elements Core elements\-wallet version v22.1.0
6+
Elements Core elements\-wallet version v22.1.1
77
.PP
88
elements\-wallet is an offline tool for creating and interacting with Elements Core wallet files.
99
By default elements\-wallet will act on wallets in the default mainnet wallet directory in the datadir.

doc/man/elementsd.1

+11-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.2.
2-
.TH ELEMENTSD "1" "December 2022" "elementsd v22.1.0" "User Commands"
1+
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
2+
.TH ELEMENTSD "1" "February 2023" "elementsd v22.1.1" "User Commands"
33
.SH NAME
4-
elementsd \- manual page for elementsd v22.1.0
4+
elementsd \- manual page for elementsd v22.1.1
55
.SH SYNOPSIS
66
.B elementsd
77
[\fI\,options\/\fR] \fI\,Start Elements Core\/\fR
88
.SH DESCRIPTION
9-
Elements Core version v22.1.0
9+
Elements Core version v22.1.1
1010
Copyright \(co 2009\-2022 The Elements Project developers
1111
Copyright \(co 2009\-2022 The Bitcoin Core developers
1212
.PP
@@ -177,6 +177,13 @@ Execute command on startup.
177177
Create new files with system default permissions, instead of umask 077
178178
(only effective with disabled wallet functionality)
179179
.HP
180+
\fB\-trim_headers\fR
181+
.IP
182+
Trim old headers in memory (by default older than 2 epochs), removing
183+
blocksigning and dynafed\-related fields. Saves memory, but blocks
184+
us from serving blocks or headers to peers, and removes trimmed
185+
fields from some JSON RPC outputs. (default: false)
186+
.HP
180187
\fB\-txindex\fR
181188
.IP
182189
Maintain a full transaction index, used by the getrawtransaction rpc

src/block_proof.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
bool CheckChallenge(const CBlockHeader& block, const CBlockIndex& indexLast, const Consensus::Params& params)
1414
{
1515
if (g_signed_blocks) {
16-
return block.proof.challenge == indexLast.proof.challenge;
16+
return block.proof.challenge == indexLast.get_proof().challenge;
1717
} else {
1818
return block.nBits == GetNextWorkRequired(&indexLast, &block, params);
1919
}

src/chain.h

+64-15
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,51 @@ class CBlockIndex
192192
uint32_t nTime{0};
193193
uint32_t nBits{0};
194194
uint32_t nNonce{0};
195-
CProof proof{};
195+
196+
protected:
197+
std::optional<CProof> proof{};
196198
// Dynamic federation fields
197-
DynaFedParams dynafed_params{};
198-
CScriptWitness m_signblock_witness{};
199+
std::optional<DynaFedParams> m_dynafed_params{};
200+
std::optional<CScriptWitness> m_signblock_witness{};
201+
202+
bool m_trimmed{false};
203+
204+
friend class CBlockTreeDB;
205+
206+
public:
207+
208+
// Irrevocably remove blocksigning and dynafed-related stuff from this
209+
// in-memory copy of the block header.
210+
void trim() {
211+
assert_untrimmed();
212+
m_trimmed = true;
213+
proof = std::nullopt;
214+
m_dynafed_params = std::nullopt;
215+
m_signblock_witness = std::nullopt;
216+
}
217+
218+
bool trimmed() const {
219+
return m_trimmed;
220+
}
221+
222+
void assert_untrimmed() const {
223+
assert(!m_trimmed);
224+
}
225+
226+
const CProof& get_proof() const {
227+
assert_untrimmed();
228+
return proof.value();
229+
}
230+
231+
const DynaFedParams& dynafed_params() const {
232+
assert_untrimmed();
233+
return m_dynafed_params.value();
234+
}
235+
236+
const CScriptWitness& signblock_witness() const {
237+
assert_untrimmed();
238+
return m_signblock_witness.value();
239+
}
199240

200241
//! (memory only) Sequential id assigned to distinguish order in which blocks are received.
201242
int32_t nSequenceId{0};
@@ -214,7 +255,7 @@ class CBlockIndex
214255
nBits{block.nBits},
215256
nNonce{block.nNonce},
216257
proof{block.proof},
217-
dynafed_params{block.m_dynafed_params},
258+
m_dynafed_params{block.m_dynafed_params},
218259
m_signblock_witness{block.m_signblock_witness}
219260
{
220261
}
@@ -239,6 +280,7 @@ class CBlockIndex
239280

240281
CBlockHeader GetBlockHeader() const
241282
{
283+
assert_untrimmed();
242284
CBlockHeader block;
243285
block.nVersion = nVersion;
244286
if (pprev)
@@ -250,9 +292,9 @@ class CBlockIndex
250292
}
251293
block.nBits = nBits;
252294
block.nNonce = nNonce;
253-
block.proof = proof;
254-
block.m_dynafed_params = dynafed_params;
255-
block.m_signblock_witness = m_signblock_witness;
295+
block.proof = proof.value();
296+
block.m_dynafed_params = m_dynafed_params.value();
297+
block.m_signblock_witness = m_signblock_witness.value();
256298
return block;
257299
}
258300

@@ -366,12 +408,12 @@ class CDiskBlockIndex : public CBlockIndex
366408
nVersion = ~CBlockHeader::DYNAFED_HF_MASK & nVersion;
367409
return is_dyna;
368410
} else {
369-
return !dynafed_params.IsNull();
411+
return !dynafed_params().IsNull();
370412
}
371413
}
372414
bool RemoveDynaFedMaskOnSerialize(bool for_read) const {
373415
assert(!for_read);
374-
return !dynafed_params.IsNull();
416+
return !dynafed_params().IsNull();
375417
}
376418

377419
SERIALIZE_METHODS(CDiskBlockIndex, obj)
@@ -394,7 +436,7 @@ class CDiskBlockIndex : public CBlockIndex
394436
READWRITE(obj.nVersion);
395437
} else {
396438
int32_t nVersion = obj.nVersion;
397-
if (!obj.dynafed_params.IsNull()) {
439+
if (!obj.dynafed_params().IsNull()) {
398440
nVersion |= CBlockHeader::DYNAFED_HF_MASK;
399441
}
400442
READWRITE(nVersion);
@@ -404,13 +446,19 @@ class CDiskBlockIndex : public CBlockIndex
404446
READWRITE(obj.hashPrev);
405447
READWRITE(obj.hashMerkleRoot);
406448
READWRITE(obj.nTime);
449+
450+
// Allocate objects in the optional<> fields when reading, since READWRITE will not do this
451+
SER_READ(obj, obj.m_dynafed_params = DynaFedParams());
452+
SER_READ(obj, obj.m_signblock_witness = CScriptWitness());
453+
SER_READ(obj, obj.proof = CProof());
454+
407455
// For compatibility with elements 0.14 based chains
408456
if (g_signed_blocks) {
409457
if (is_dyna) {
410-
READWRITE(obj.dynafed_params);
411-
READWRITE(obj.m_signblock_witness.stack);
458+
READWRITE(obj.m_dynafed_params.value());
459+
READWRITE(obj.m_signblock_witness.value().stack);
412460
} else {
413-
READWRITE(obj.proof);
461+
READWRITE(obj.proof.value());
414462
}
415463
} else {
416464
READWRITE(obj.nBits);
@@ -420,6 +468,7 @@ class CDiskBlockIndex : public CBlockIndex
420468

421469
uint256 GetBlockHash() const
422470
{
471+
assert_untrimmed();
423472
CBlockHeader block;
424473
block.nVersion = nVersion;
425474
block.hashPrevBlock = hashPrev;
@@ -430,8 +479,8 @@ class CDiskBlockIndex : public CBlockIndex
430479
}
431480
block.nBits = nBits;
432481
block.nNonce = nNonce;
433-
block.proof = proof;
434-
block.m_dynafed_params = dynafed_params;
482+
block.proof = proof.value();
483+
block.m_dynafed_params = m_dynafed_params.value();
435484
return block.GetHash();
436485
}
437486

src/chainparams.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,7 @@ class CCustomParams : public CRegTestParams {
862862

863863
const CScript default_script(CScript() << OP_TRUE);
864864
consensus.fedpegScript = StrHexToScriptWithDefault(args.GetArg("-fedpegscript", ""), default_script);
865+
consensus.start_p2wsh_script = args.GetArg("-con_start_p2wsh_script", consensus.start_p2wsh_script);
865866

866867
// Calculate pegged Bitcoin asset
867868
std::vector<unsigned char> commit = CommitToArguments(consensus, strNetworkID);
@@ -1460,6 +1461,7 @@ class CLiquidV1TestParams : public CLiquidV1Params {
14601461
if (args.IsArgSet("-fedpegscript")) {
14611462
consensus.fedpegScript = StrHexToScriptWithDefault(args.GetArg("-fedpegscript", ""), CScript());
14621463
}
1464+
consensus.start_p2wsh_script = args.GetArg("-con_start_p2wsh_script", consensus.start_p2wsh_script);
14631465

14641466
consensus.total_valid_epochs = args.GetArg("-total_valid_epochs", consensus.total_valid_epochs);
14651467

src/chainparamsbase.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ void SetupChainParamsBaseOptions(ArgsManager& argsman)
6060
argsman.AddArg("-dynamic_epoch_length", "Per-chain parameter that sets how many blocks dynamic federation voting and enforcement are in effect for.", ArgsManager::ALLOW_ANY, OptionsCategory::ELEMENTS);
6161
argsman.AddArg("-total_valid_epochs", "Per-chain parameter that sets how long a particular fedpegscript is in effect for.", ArgsManager::ALLOW_ANY, OptionsCategory::ELEMENTS);
6262
argsman.AddArg("-evbparams=deployment:start:end:period:threshold", "Use given start/end times for specified version bits deployment (regtest or custom only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::ELEMENTS);
63+
argsman.AddArg("-con_start_p2wsh_script", "Create p2wsh addresses when starting in dynafed mode (regtest or custom only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::ELEMENTS);
6364
// END ELEMENTS
6465
//
6566
}

src/consensus/params.h

+1
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ struct Params {
173173
// default 1 to not break legacy chains implicitly.
174174
size_t total_valid_epochs = 1;
175175
bool elements_mode = false;
176+
bool start_p2wsh_script = false;
176177
};
177178

178179
} // namespace Consensus

0 commit comments

Comments
 (0)