From f9c785b316928a0591cc9b4fb507e77a618456f6 Mon Sep 17 00:00:00 2001 From: DcruBro Date: Mon, 27 Jul 2026 14:30:06 +0200 Subject: [PATCH] Add timestamp field to transactions - allows multiple transactions with the same Ins/Outs --- include/block/transaction.h | 3 ++- src/main.c | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/block/transaction.h b/include/block/transaction.h index db6c381..7ebeeac 100644 --- a/include/block/transaction.h +++ b/include/block/transaction.h @@ -20,9 +20,10 @@ static inline bool Address_IsCoinbase(const uint8_t address[32]) { return true; } -// 160 bytes total for v1 +// 168 bytes total for v1 #pragma pack(push, 1) // Ensure no padding for consistent file storage typedef struct { + uint64_t timestamp; // Unix timestamp in seconds - not enforced, but used for uniqueness when everything else is the same. uint64_t fee; // Rewarded to the miner; can be zero, but the miner may choose to ignore transactions with very low fees uint64_t amount1; uint64_t amount2; diff --git a/src/main.c b/src/main.c index 6b09bb9..86f9eb0 100644 --- a/src/main.c +++ b/src/main.c @@ -148,6 +148,7 @@ static void AddCoinbaseTransaction(block_t* block, const uint8_t minerAddress[32 coinbaseTx.transaction.amount2 = 0; memset(coinbaseTx.transaction.compressedPublicKey, 0, sizeof(coinbaseTx.transaction.compressedPublicKey)); memset(coinbaseTx.transaction.senderAddress, 0xFF, sizeof(coinbaseTx.transaction.senderAddress)); + coinbaseTx.transaction.timestamp = (uint64_t)time(NULL); Block_AddTransaction(block, &coinbaseTx); } @@ -1014,6 +1015,7 @@ int main(int argc, char* argv[]) { spendTx.transaction.fee = (uint64_t)fee; spendTx.transaction.amount1 = (uint64_t)amount; spendTx.transaction.amount2 = 0; + spendTx.transaction.timestamp = (uint64_t)time(NULL); memcpy(spendTx.transaction.senderAddress, minerAddress, sizeof(minerAddress)); memcpy(spendTx.transaction.recipientAddress1, recipientAddress, sizeof(recipientAddress)); memset(spendTx.transaction.recipientAddress2, 0, sizeof(spendTx.transaction.recipientAddress2)); @@ -1364,6 +1366,7 @@ int main(int argc, char* argv[]) { printf(" Amount1: %llu\n", (unsigned long long)tx.transaction.amount1); printf(" Amount2: %llu\n", (unsigned long long)tx.transaction.amount2); printf(" Fee: %llu\n", (unsigned long long)tx.transaction.fee); + printf(" Timestamp: %llu\n", (unsigned long long)tx.transaction.timestamp); continue; }