sync errors
This commit is contained in:
@@ -40,6 +40,7 @@ bool Block_IsFullyValid(const block_t* block);
|
||||
void Block_ShutdownPowContext(void);
|
||||
void Block_Destroy(block_t* block);
|
||||
void Block_Print(const block_t* block);
|
||||
void Block_ShortPrint(const block_t* block);
|
||||
// Deep-copy a block (allocates a new `block_t*`). Caller must call `Block_Destroy`.
|
||||
block_t* Block_Copy(const block_t* src);
|
||||
|
||||
|
||||
@@ -286,6 +286,20 @@ void Block_Print(const block_t* block) {
|
||||
}
|
||||
}
|
||||
|
||||
void Block_ShortPrint(const block_t* block) {
|
||||
if (!block) return;
|
||||
|
||||
printf("Block #%llu: Timestamp %llu, Nonce %llu, DiffTarget 0x%08x, Version %u, PrevHash %02x%02x...%02x%02x, MerkleRoot %02x%02x...%02x%02x, TxCount %zu\n",
|
||||
(unsigned long long)block->header.blockNumber,
|
||||
(unsigned long long)block->header.timestamp,
|
||||
(unsigned long long)block->header.nonce,
|
||||
block->header.difficultyTarget,
|
||||
block->header.version,
|
||||
block->header.prevHash[0], block->header.prevHash[1], block->header.prevHash[30], block->header.prevHash[31],
|
||||
block->header.merkleRoot[0], block->header.merkleRoot[1], block->header.merkleRoot[30], block->header.merkleRoot[31],
|
||||
block->transactions ? DynArr_size(block->transactions) : 0);
|
||||
}
|
||||
|
||||
block_t* Block_Copy(const block_t* src) {
|
||||
if (!src) return NULL;
|
||||
block_t* dst = (block_t*)malloc(sizeof(block_t));
|
||||
|
||||
@@ -230,6 +230,9 @@ bool Chain_AddBlock(blockchain_t* chain, block_t* block) {
|
||||
pthread_mutex_unlock(&balanceSheetLock);
|
||||
pthread_rwlock_unlock(&chainLock);
|
||||
|
||||
printf("Added new block to chain:\n");
|
||||
Block_ShortPrint(block);
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
@@ -761,10 +761,11 @@ int main(int argc, char* argv[]) {
|
||||
|
||||
uint64_t localHeight = (uint64_t)Chain_Size(chain);
|
||||
|
||||
// Determine if this is an initial sync. If so, do not apply penalty.
|
||||
bool isInitialSync = (localHeight == 0);
|
||||
// Only penalize small near-tip gaps. Large gaps are treated as normal catch-up,
|
||||
// because a much taller peer on the same chain is not evidence of a reorg. TODO: Maybe look at this again some other day.
|
||||
bool isInitialSync = (localHeight == 0) || ((peerHeight > localHeight) && ((peerHeight - localHeight) > INITIAL_SYNC_HEIGHT_DIFF));
|
||||
|
||||
// Compute penalty and adjusted peer height (skip penalty for initial sync)
|
||||
// Compute penalty and adjusted peer height.
|
||||
uint64_t delay = (peerHeight > localHeight) ? (peerHeight - localHeight) : 0ULL;
|
||||
uint64_t penalty = isInitialSync ? 0ULL : FetchScheduler_ComputeReorgPenaltyBlocks(delay);
|
||||
uint64_t adjustedPeerHeight = (peerHeight > penalty) ? (peerHeight - penalty) : 0ULL;
|
||||
|
||||
Reference in New Issue
Block a user