From c1914dc3e7747593dcfc1d69139b9d3e757d482b Mon Sep 17 00:00:00 2001 From: DcruBro Date: Fri, 29 May 2026 14:00:58 +0200 Subject: [PATCH] add optional fee argument to send command --- src/main.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index b13dde4..7232dea 100644 --- a/src/main.c +++ b/src/main.c @@ -832,7 +832,7 @@ int main(int argc, char* argv[]) { char supplyStr[80]; Uint256ToDecimal(¤tSupply, supplyStr, sizeof(supplyStr)); printf("Current chain has %zu blocks, total supply %s\n", Chain_Size(chain), supplyStr); - printf("Commands: mine , send
, balance [address], connect , sync (requires nodes), flushchain, fullverify, blockdetail , wipechain, genaddr, exit\n"); + printf("Commands: mine , send
[fee], balance [address], connect , sync (requires nodes), flushchain, fullverify, blockdetail , wipechain, genaddr, exit\n"); char line[1024]; while (true) { @@ -934,6 +934,7 @@ int main(int argc, char* argv[]) { if (strcmp(cmd, "send") == 0) { char* addressStr = strtok(NULL, " \t"); char* amountStr = strtok(NULL, " \t"); + char* feeStr = strtok(NULL, " \t"); if (!addressStr || !amountStr) { printf("usage: send
\n"); continue; @@ -952,6 +953,21 @@ int main(int argc, char* argv[]) { continue; } + unsigned long long fee = 0; + if (feeStr) { + char* endptr2 = NULL; + fee = strtoull(feeStr, &endptr2, 10); + if (*feeStr == '\0' || feeStr[0] == '-' || (endptr2 && *endptr2 != '\0')) { + printf("invalid fee\n"); + continue; + } + } + + if (fee > UINT64_MAX - amount) { + printf("invalid fee: overflow\n"); + continue; + } + balance_sheet_entry_t senderEntry; if (!BalanceSheet_Lookup(minerAddress, &senderEntry)) { printf("send failed: miner address has no balance\n"); @@ -976,7 +992,7 @@ int main(int argc, char* argv[]) { signed_transaction_t spendTx; Transaction_Init(&spendTx); spendTx.transaction.version = 1; - spendTx.transaction.fee = 0; + spendTx.transaction.fee = (uint64_t)fee; spendTx.transaction.amount1 = (uint64_t)amount; spendTx.transaction.amount2 = 0; memcpy(spendTx.transaction.senderAddress, minerAddress, sizeof(minerAddress));