From ae64bb9dfcfda27d264c034060212b5a0da84c99 Mon Sep 17 00:00:00 2001 From: DcruBro Date: Fri, 3 Apr 2026 15:20:13 +0200 Subject: [PATCH] temoporarily changed DAG size for testing, fix TX loading, move some TX logic to Transaction_Init() --- include/block/transaction.h | 1 + include/constants.h | 3 ++- src/block/block.c | 4 ++++ src/block/chain.c | 14 +++++++++++--- src/block/transaction.c | 8 ++++++++ src/main.c | 7 ++++--- 6 files changed, 30 insertions(+), 7 deletions(-) diff --git a/include/block/transaction.h b/include/block/transaction.h index 19243e1..746c9b5 100644 --- a/include/block/transaction.h +++ b/include/block/transaction.h @@ -51,6 +51,7 @@ typedef struct { transaction_sig_t signature; } signed_transaction_t; +void Transaction_Init(signed_transaction_t* tx); void Transaction_CalculateHash(const signed_transaction_t* tx, uint8_t* outHash); void Transaction_Sign(signed_transaction_t* tx, const uint8_t* privateKey); bool Transaction_Verify(const signed_transaction_t* tx); diff --git a/include/constants.h b/include/constants.h index 9804e9b..5abe83d 100644 --- a/include/constants.h +++ b/include/constants.h @@ -30,7 +30,8 @@ // Future Autolykos2 constants: #define EPOCH_LENGTH 350000 // ~1 year at 90s #define DAG_BASE_GROWTH (1ULL << 30) // 1 GB per epoch, adjusted by acceleration -#define DAG_BASE_SIZE (6ULL << 30) // 6 GB, adjusted per cycle based off DAG_BASE_GROWTH +//#define DAG_BASE_SIZE (6ULL << 30) // 6 GB, adjusted per cycle based off DAG_BASE_GROWTH +#define DAG_BASE_SIZE (1ULL << 30) // TEMPORARY FOR TESTING // Swings - calculated as MIN(percentage, absolute GB) to prevent absurd swings from low hashrate or very large DAG growth #define DAG_MAX_UP_SWING_PERCENTAGE 1.15 // 15% #define DAG_MAX_DOWN_SWING_PERCENTAGE 0.90 // 10% diff --git a/src/block/block.c b/src/block/block.c index 6ca7350..f270c61 100644 --- a/src/block/block.c +++ b/src/block/block.c @@ -52,6 +52,10 @@ block_t* Block_Create() { free(block); return NULL; } + + // Zero out padding + memset(block->header.reserved, 0, sizeof(block->header.reserved)); + return block; } diff --git a/src/block/chain.c b/src/block/chain.c index b69e5b9..80bd635 100644 --- a/src/block/chain.c +++ b/src/block/chain.c @@ -521,10 +521,18 @@ bool Chain_LoadFromFile(blockchain_t* chain, const char* dirpath, uint256_t* out }*/ // Transactions are not read, we use the merkle root for validity blk->transactions = NULL; - Chain_AddBlock(chain, blk); + // Loading from disk currently restores headers only. Do not run Chain_AddBlock, + // because it enforces transaction presence and mutates balances. + if (!DynArr_push_back(chain->blocks, blk)) { + fclose(chainFile); + fclose(tableFile); + Block_Destroy(blk); + return false; + } + chain->size++; - // Chain_AddBlock stores blocks by value, so the copied block now owns - // blk->transactions. Only free the temporary wrapper struct here. + // DynArr_push_back stores blocks by value, so the copied block now owns + // blk->transactions (NULL in header-only load mode). Free wrapper only. free(blk); } diff --git a/src/block/transaction.c b/src/block/transaction.c index 9cfe492..4c5eba0 100644 --- a/src/block/transaction.c +++ b/src/block/transaction.c @@ -1,6 +1,14 @@ #include #include +void Transaction_Init(signed_transaction_t* tx) { + if (!tx) { return; } + // Zero out everything + memset(tx, 0, sizeof(signed_transaction_t)); + + // NOTE: Other things might be added here +} + void Transaction_CalculateHash(const signed_transaction_t* tx, uint8_t* outHash) { if (!tx || !outHash) { return; diff --git a/src/main.c b/src/main.c index 5d6824b..63d3793 100644 --- a/src/main.c +++ b/src/main.c @@ -158,7 +158,7 @@ int main(int argc, char* argv[]) { BalanceSheet_Init(); const char* chainDataDir = CHAIN_DATA_DIR; - const uint64_t blocksToMine = 100; + const uint64_t blocksToMine = 1000; const double targetSeconds = TARGET_BLOCK_TIME; uint256_t currentSupply = uint256_from_u64(0); @@ -264,7 +264,7 @@ int main(int argc, char* argv[]) { block->header.nonce = 0; signed_transaction_t coinbaseTx; - memset(&coinbaseTx, 0, sizeof(coinbaseTx)); + Transaction_Init(&coinbaseTx); coinbaseTx.transaction.version = 1; coinbaseTx.transaction.amount1 = currentReward; coinbaseTx.transaction.fee = 0; @@ -345,7 +345,7 @@ int main(int argc, char* argv[]) { MakeTestRecipientAddress(recipientAddress); signed_transaction_t spendTx; - memset(&spendTx, 0, sizeof(spendTx)); + Transaction_Init(&spendTx); spendTx.transaction.version = 1; spendTx.transaction.fee = 0; spendTx.transaction.amount1 = spendAmount; @@ -383,6 +383,7 @@ int main(int argc, char* argv[]) { spendBlock->header.nonce = 0; signed_transaction_t testCoinbaseTx; + Transaction_Init(&testCoinbaseTx); memset(&testCoinbaseTx, 0, sizeof(testCoinbaseTx)); testCoinbaseTx.transaction.version = 1; testCoinbaseTx.transaction.amount1 = currentReward;