diff --git a/cmd/kaspawallet/config.go b/cmd/kaspawallet/config.go index 75ef147566..cc0ec1de83 100644 --- a/cmd/kaspawallet/config.go +++ b/cmd/kaspawallet/config.go @@ -1,9 +1,10 @@ package main import ( + "os" + "github.com/kaspanet/kaspad/infrastructure/config" "github.com/pkg/errors" - "os" "github.com/jessevdk/go-flags" ) @@ -115,12 +116,13 @@ type newAddressConfig struct { } type startDaemonConfig struct { - KeysFile string `long:"keys-file" short:"f" description:"Keys file location (default: ~/.kaspawallet/keys.json (*nix), %USERPROFILE%\\AppData\\Local\\Kaspawallet\\key.json (Windows))"` - Password string `long:"password" short:"p" description:"Wallet password"` - RPCServer string `long:"rpcserver" short:"s" description:"RPC server to connect to"` - Listen string `long:"listen" short:"l" description:"Address to listen on (default: 0.0.0.0:8082)"` - Timeout uint32 `long:"wait-timeout" short:"w" description:"Waiting timeout for RPC calls, seconds (default: 30 s)"` - Profile string `long:"profile" description:"Enable HTTP profiling on given port -- NOTE port must be between 1024 and 65536"` + KeysFile string `long:"keys-file" short:"f" description:"Keys file location (default: ~/.kaspawallet/keys.json (*nix), %USERPROFILE%\\AppData\\Local\\Kaspawallet\\key.json (Windows))"` + Password string `long:"password" short:"p" description:"Wallet password"` + RPCServer string `long:"rpcserver" short:"s" description:"RPC server to connect to"` + Listen string `long:"listen" short:"l" description:"Address to listen on (default: 0.0.0.0:8082)"` + Timeout uint32 `long:"wait-timeout" short:"w" description:"Waiting timeout for RPC calls, seconds (default: 30 s)"` + Profile string `long:"profile" description:"Enable HTTP profiling on given port -- NOTE port must be between 1024 and 65536"` + MinFeePerTx uint64 `long:"min-fee-per-tx" description:"Minimum fee per transaction (in sompis) (default: 0)"` config.NetworkFlags } diff --git a/cmd/kaspawallet/daemon/server/create_unsigned_transaction.go b/cmd/kaspawallet/daemon/server/create_unsigned_transaction.go index 83928fa139..a2da8eb637 100644 --- a/cmd/kaspawallet/daemon/server/create_unsigned_transaction.go +++ b/cmd/kaspawallet/daemon/server/create_unsigned_transaction.go @@ -126,6 +126,10 @@ func (s *server) selectUTXOs(spendAmount uint64, isSendAll bool, feePerInput uin totalValue += utxo.UTXOEntry.Amount() fee := feePerInput * uint64(len(selectedUTXOs)) + if fee < s.minFeePerTx { + fee = s.minFeePerTx + } + totalSpend := spendAmount + fee // Two break cases (if not send all): // 1. totalValue == totalSpend, so there's no change needed -> number of outputs = 1, so a single input is sufficient @@ -138,6 +142,10 @@ func (s *server) selectUTXOs(spendAmount uint64, isSendAll bool, feePerInput uin } fee := feePerInput * uint64(len(selectedUTXOs)) + if fee < s.minFeePerTx { + fee = s.minFeePerTx + } + var totalSpend uint64 if isSendAll { totalSpend = totalValue diff --git a/cmd/kaspawallet/daemon/server/server.go b/cmd/kaspawallet/daemon/server/server.go index 1b43dac8cf..ce6cd0d1c7 100644 --- a/cmd/kaspawallet/daemon/server/server.go +++ b/cmd/kaspawallet/daemon/server/server.go @@ -34,6 +34,7 @@ type server struct { backgroundRPCClient *rpcclient.RPCClient // RPC client dedicated for address and UTXO background fetching params *dagconfig.Params coinbaseMaturity uint64 // Is different from default if we use testnet-11 + minFeePerTx uint64 lock sync.RWMutex utxosSortedByAmount []*walletUTXO @@ -57,7 +58,7 @@ type server struct { const MaxDaemonSendMsgSize = 100_000_000 // Start starts the kaspawalletd server -func Start(params *dagconfig.Params, listen, rpcServer string, keysFilePath string, profile string, timeout uint32) error { +func Start(params *dagconfig.Params, listen, rpcServer string, keysFilePath string, profile string, timeout uint32, minFeePerTx uint64) error { initLog(defaultLogFile, defaultErrLogFile) defer panics.HandlePanic(log, "MAIN", nil) @@ -110,6 +111,7 @@ func Start(params *dagconfig.Params, listen, rpcServer string, keysFilePath stri backgroundRPCClient: backgroundRPCClient, params: params, coinbaseMaturity: coinbaseMaturity, + minFeePerTx: minFeePerTx, utxosSortedByAmount: []*walletUTXO{}, nextSyncStartIndex: 0, keysFile: keysFile, diff --git a/cmd/kaspawallet/start_daemon.go b/cmd/kaspawallet/start_daemon.go index db819aa2fc..266ce96fe8 100644 --- a/cmd/kaspawallet/start_daemon.go +++ b/cmd/kaspawallet/start_daemon.go @@ -3,5 +3,5 @@ package main import "github.com/kaspanet/kaspad/cmd/kaspawallet/daemon/server" func startDaemon(conf *startDaemonConfig) error { - return server.Start(conf.NetParams(), conf.Listen, conf.RPCServer, conf.KeysFile, conf.Profile, conf.Timeout) + return server.Start(conf.NetParams(), conf.Listen, conf.RPCServer, conf.KeysFile, conf.Profile, conf.Timeout, conf.MinFeePerTx) }