mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-14 12:43:40 +02:00
Merge 0c3a3c9394 into merged_master (Bitcoin PR bitcoin/bitcoin#29623)
This commit is contained in:
commit
b7a64d4e3c
29 changed files with 269 additions and 372 deletions
|
|
@ -23,6 +23,7 @@
|
|||
#include <netbase.h>
|
||||
#include <netmessagemaker.h>
|
||||
#include <node/blockstorage.h>
|
||||
#include <node/timeoffsets.h>
|
||||
#include <node/txreconciliation.h>
|
||||
#include <policy/fees.h>
|
||||
#include <policy/policy.h>
|
||||
|
|
@ -34,7 +35,6 @@
|
|||
#include <scheduler.h>
|
||||
#include <streams.h>
|
||||
#include <sync.h>
|
||||
#include <timedata.h>
|
||||
#include <tinyformat.h>
|
||||
#include <txmempool.h>
|
||||
#include <txorphanage.h>
|
||||
|
|
@ -393,6 +393,10 @@ struct Peer {
|
|||
/** Whether this peer wants invs or headers (when possible) for block announcements */
|
||||
bool m_prefers_headers GUARDED_BY(NetEventsInterface::g_msgproc_mutex){false};
|
||||
|
||||
/** Time offset computed during the version handshake based on the
|
||||
* timestamp the peer sent in the version message. */
|
||||
std::atomic<std::chrono::seconds> m_time_offset{0s};
|
||||
|
||||
explicit Peer(NodeId id, ServiceFlags our_services)
|
||||
: m_id{id}
|
||||
, m_our_services{our_services}
|
||||
|
|
@ -516,7 +520,7 @@ public:
|
|||
std::optional<std::string> FetchBlock(NodeId peer_id, const CBlockIndex& block_index) override
|
||||
EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex);
|
||||
bool GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) const override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex);
|
||||
bool IgnoresIncomingTxs() override { return m_opts.ignore_incoming_txs; }
|
||||
PeerManagerInfo GetInfo() const override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex);
|
||||
void SendPings() override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex);
|
||||
void RelayTransaction(const uint256& txid, const uint256& wtxid) override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex);
|
||||
void SetBestBlock(int height, std::chrono::seconds time) override
|
||||
|
|
@ -791,6 +795,8 @@ private:
|
|||
/** Next time to check for stale tip */
|
||||
std::chrono::seconds m_stale_tip_check_time GUARDED_BY(cs_main){0s};
|
||||
|
||||
TimeOffsets m_outbound_time_offsets;
|
||||
|
||||
const Options m_opts;
|
||||
|
||||
bool RejectIncomingTxs(const CNode& peer) const;
|
||||
|
|
@ -1868,10 +1874,19 @@ bool PeerManagerImpl::GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) c
|
|||
stats.presync_height = peer->m_headers_sync->GetPresyncHeight();
|
||||
}
|
||||
}
|
||||
stats.time_offset = peer->m_time_offset;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
PeerManagerInfo PeerManagerImpl::GetInfo() const
|
||||
{
|
||||
return PeerManagerInfo{
|
||||
.median_outbound_time_offset = m_outbound_time_offsets.Median(),
|
||||
.ignores_incoming_txs = m_opts.ignore_incoming_txs,
|
||||
};
|
||||
}
|
||||
|
||||
void PeerManagerImpl::AddToCompactExtraTransactions(const CTransactionRef& tx)
|
||||
{
|
||||
if (m_opts.max_extra_txs <= 0)
|
||||
|
|
@ -3912,12 +3927,12 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||
peer->m_starting_height, addrMe.ToStringAddrPort(), fRelay, pfrom.GetId(),
|
||||
remoteAddr, (mapped_as ? strprintf(", mapped_as=%d", mapped_as) : ""));
|
||||
|
||||
int64_t nTimeOffset = nTime - GetTime();
|
||||
pfrom.nTimeOffset = nTimeOffset;
|
||||
peer->m_time_offset = NodeSeconds{std::chrono::seconds{nTime}} - Now<NodeSeconds>();
|
||||
if (!pfrom.IsInboundConn()) {
|
||||
// Don't use timedata samples from inbound peers to make it
|
||||
// harder for others to tamper with our adjusted time.
|
||||
AddTimeData(pfrom.addr, nTimeOffset);
|
||||
// harder for others to create false warnings about our clock being out of sync.
|
||||
m_outbound_time_offsets.Add(peer->m_time_offset);
|
||||
m_outbound_time_offsets.WarnIfOutOfSync();
|
||||
}
|
||||
|
||||
// If the peer is old enough to have the old alert system, send it the final alert.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue