8 Commits be025dc817 ... ef5f6e4b22

Author SHA1 Message Date
  The MMGen Project ef5f6e4b22 mmgen-txbump: support new outputs in the replacement TX 10 months ago
  The MMGen Project d3b5ba23f3 tx.new: new `get_inputs()` and `get_fee()` methods 10 months ago
  The MMGen Project 0d38b62081 minor fixes and cleanups 10 months ago
  The MMGen Project 967fad0b14 cmdtest.py regtest: mempool, RBF status cleanups 10 months ago
  The MMGen Project 52f26202a8 write_data_to_file(): add `no_stdout` parameter 10 months ago
  The MMGen Project 6620b4dba0 txhist: support OP_RETURN TX outputs 10 months ago
  The MMGen Project 004a4650eb txbump: update `opts_data` to new format 10 months ago
  The MMGen Project e54f039690 update copyright dates 10 months ago
301 changed files with 687 additions and 541 deletions
  1. 1 1
      cmds/mmgen-addrgen
  2. 1 1
      cmds/mmgen-addrimport
  3. 1 1
      cmds/mmgen-autosign
  4. 1 1
      cmds/mmgen-keygen
  5. 1 1
      cmds/mmgen-msg
  6. 1 1
      cmds/mmgen-passchg
  7. 1 1
      cmds/mmgen-passgen
  8. 1 1
      cmds/mmgen-regtest
  9. 1 1
      cmds/mmgen-seedjoin
  10. 1 1
      cmds/mmgen-seedsplit
  11. 1 1
      cmds/mmgen-subwalletgen
  12. 1 1
      cmds/mmgen-tool
  13. 1 1
      cmds/mmgen-txbump
  14. 1 1
      cmds/mmgen-txcreate
  15. 1 1
      cmds/mmgen-txdo
  16. 1 1
      cmds/mmgen-txsend
  17. 1 1
      cmds/mmgen-txsign
  18. 1 1
      cmds/mmgen-walletchk
  19. 1 1
      cmds/mmgen-walletconv
  20. 1 1
      cmds/mmgen-walletgen
  21. 1 1
      cmds/mmgen-xmrwallet
  22. 1 1
      examples/bip_hd.py
  23. 1 1
      examples/coin-daemon-info.py
  24. 1 1
      examples/halving-calculator.py
  25. 1 1
      examples/whitepaper.py
  26. 1 1
      extmod/secp256k1mod.c
  27. 1 1
      mmgen/addr.py
  28. 1 1
      mmgen/addrdata.py
  29. 1 1
      mmgen/addrfile.py
  30. 1 1
      mmgen/addrgen.py
  31. 1 1
      mmgen/addrlist.py
  32. 1 1
      mmgen/altcoin/params.py
  33. 1 1
      mmgen/altcoin/util.py
  34. 1 1
      mmgen/amt.py
  35. 1 1
      mmgen/autosign.py
  36. 1 1
      mmgen/base_obj.py
  37. 1 1
      mmgen/baseconv.py
  38. 1 1
      mmgen/bip39.py
  39. 1 1
      mmgen/bip_hd/__init__.py
  40. 2 2
      mmgen/cfg.py
  41. 1 1
      mmgen/cfgfile.py
  42. 1 1
      mmgen/color.py
  43. 1 1
      mmgen/contrib/license.py
  44. 1 1
      mmgen/crypto.py
  45. 1 1
      mmgen/daemon.py
  46. 1 1
      mmgen/data/version
  47. 1 1
      mmgen/derive.py
  48. 1 1
      mmgen/devinit.py
  49. 1 1
      mmgen/devtools.py
  50. 1 1
      mmgen/exception.py
  51. 1 1
      mmgen/filename.py
  52. 5 2
      mmgen/fileutil.py
  53. 1 1
      mmgen/flags.py
  54. 1 1
      mmgen/help/__init__.py
  55. 2 2
      mmgen/help/help_notes.py
  56. 1 1
      mmgen/help/seedsplit.py
  57. 1 1
      mmgen/help/xmrwallet.py
  58. 1 1
      mmgen/key.py
  59. 1 1
      mmgen/keygen.py
  60. 1 1
      mmgen/led.py
  61. 1 1
      mmgen/main.py
  62. 1 1
      mmgen/main_addrgen.py
  63. 1 1
      mmgen/main_addrimport.py
  64. 1 1
      mmgen/main_autosign.py
  65. 1 1
      mmgen/main_msg.py
  66. 1 1
      mmgen/main_passgen.py
  67. 1 1
      mmgen/main_regtest.py
  68. 1 1
      mmgen/main_seedjoin.py
  69. 1 1
      mmgen/main_split.py
  70. 1 1
      mmgen/main_tool.py
  71. 91 83
      mmgen/main_txbump.py
  72. 1 1
      mmgen/main_txcreate.py
  73. 1 1
      mmgen/main_txdo.py
  74. 1 1
      mmgen/main_txsend.py
  75. 1 1
      mmgen/main_txsign.py
  76. 1 1
      mmgen/main_wallet.py
  77. 1 1
      mmgen/main_xmrwallet.py
  78. 1 1
      mmgen/mn_entry.py
  79. 1 1
      mmgen/msg.py
  80. 1 1
      mmgen/obj.py
  81. 1 1
      mmgen/objmethods.py
  82. 1 1
      mmgen/opts.py
  83. 1 1
      mmgen/passwdlist.py
  84. 1 1
      mmgen/platform/darwin/util.py
  85. 1 1
      mmgen/proto/bch/cashaddr.py
  86. 1 1
      mmgen/proto/bch/params.py
  87. 1 1
      mmgen/proto/btc/addrdata.py
  88. 1 1
      mmgen/proto/btc/addrgen.py
  89. 1 1
      mmgen/proto/btc/common.py
  90. 1 1
      mmgen/proto/btc/daemon.py
  91. 1 1
      mmgen/proto/btc/misc.py
  92. 1 1
      mmgen/proto/btc/msg.py
  93. 1 1
      mmgen/proto/btc/params.py
  94. 1 1
      mmgen/proto/btc/regtest.py
  95. 1 1
      mmgen/proto/btc/rpc.py
  96. 1 1
      mmgen/proto/btc/tw/addresses.py
  97. 1 1
      mmgen/proto/btc/tw/bal.py
  98. 1 1
      mmgen/proto/btc/tw/ctl.py
  99. 1 1
      mmgen/proto/btc/tw/json.py
  100. 1 1
      mmgen/proto/btc/tw/prune.py
  101. 1 1
      mmgen/proto/btc/tw/rpc.py
  102. 14 5
      mmgen/proto/btc/tw/txhistory.py
  103. 1 1
      mmgen/proto/btc/tw/unspent.py
  104. 1 1
      mmgen/proto/btc/tx/base.py
  105. 5 2
      mmgen/proto/btc/tx/bump.py
  106. 1 1
      mmgen/proto/btc/tx/completed.py
  107. 1 1
      mmgen/proto/btc/tx/info.py
  108. 4 4
      mmgen/proto/btc/tx/new.py
  109. 1 1
      mmgen/proto/btc/tx/new_swap.py
  110. 1 1
      mmgen/proto/btc/tx/online.py
  111. 1 1
      mmgen/proto/btc/tx/op_return_data.py
  112. 1 1
      mmgen/proto/btc/tx/signed.py
  113. 1 1
      mmgen/proto/btc/tx/status.py
  114. 1 1
      mmgen/proto/btc/tx/unsigned.py
  115. 1 1
      mmgen/proto/etc/params.py
  116. 1 1
      mmgen/proto/eth/addrdata.py
  117. 1 1
      mmgen/proto/eth/addrgen.py
  118. 1 1
      mmgen/proto/eth/contract.py
  119. 1 1
      mmgen/proto/eth/daemon.py
  120. 1 1
      mmgen/proto/eth/misc.py
  121. 1 1
      mmgen/proto/eth/msg.py
  122. 1 1
      mmgen/proto/eth/params.py
  123. 1 1
      mmgen/proto/eth/rpc.py
  124. 1 1
      mmgen/proto/eth/tw/addresses.py
  125. 1 1
      mmgen/proto/eth/tw/bal.py
  126. 1 1
      mmgen/proto/eth/tw/ctl.py
  127. 1 1
      mmgen/proto/eth/tw/json.py
  128. 1 1
      mmgen/proto/eth/tw/rpc.py
  129. 1 1
      mmgen/proto/eth/tw/unspent.py
  130. 1 1
      mmgen/proto/eth/tw/view.py
  131. 1 1
      mmgen/proto/eth/tx/base.py
  132. 4 1
      mmgen/proto/eth/tx/bump.py
  133. 1 1
      mmgen/proto/eth/tx/completed.py
  134. 1 1
      mmgen/proto/eth/tx/info.py
  135. 2 2
      mmgen/proto/eth/tx/new.py
  136. 1 1
      mmgen/proto/eth/tx/online.py
  137. 1 1
      mmgen/proto/eth/tx/signed.py
  138. 1 1
      mmgen/proto/eth/tx/status.py
  139. 1 1
      mmgen/proto/eth/tx/unsigned.py
  140. 1 1
      mmgen/proto/ltc/params.py
  141. 1 1
      mmgen/proto/secp256k1/keygen.py
  142. 1 1
      mmgen/proto/xmr/addrgen.py
  143. 1 1
      mmgen/proto/xmr/daemon.py
  144. 1 1
      mmgen/proto/xmr/keygen.py
  145. 1 1
      mmgen/proto/xmr/params.py
  146. 1 1
      mmgen/proto/xmr/rpc.py
  147. 1 1
      mmgen/proto/zec/addrgen.py
  148. 1 1
      mmgen/proto/zec/keygen.py
  149. 1 1
      mmgen/proto/zec/params.py
  150. 1 1
      mmgen/protocol.py
  151. 1 1
      mmgen/pyversion.py
  152. 1 1
      mmgen/rpc.py
  153. 1 1
      mmgen/seed.py
  154. 1 1
      mmgen/seedsplit.py
  155. 1 1
      mmgen/sha2.py
  156. 1 1
      mmgen/subseed.py
  157. 1 1
      mmgen/term.py
  158. 1 1
      mmgen/test.py
  159. 1 1
      mmgen/tool/api.py
  160. 1 1
      mmgen/tool/coin.py
  161. 1 1
      mmgen/tool/common.py
  162. 1 1
      mmgen/tool/file.py
  163. 1 1
      mmgen/tool/filecrypt.py
  164. 1 1
      mmgen/tool/fileutil.py
  165. 1 1
      mmgen/tool/help.py
  166. 1 1
      mmgen/tool/mnemonic.py
  167. 1 1
      mmgen/tool/rpc.py
  168. 1 1
      mmgen/tool/util.py
  169. 1 1
      mmgen/tool/wallet.py
  170. 1 1
      mmgen/tw/addresses.py
  171. 1 1
      mmgen/tw/bal.py
  172. 1 1
      mmgen/tw/ctl.py
  173. 1 1
      mmgen/tw/json.py
  174. 1 1
      mmgen/tw/prune.py
  175. 1 1
      mmgen/tw/rpc.py
  176. 1 1
      mmgen/tw/shared.py
  177. 1 1
      mmgen/tw/txhistory.py
  178. 1 1
      mmgen/tw/unspent.py
  179. 1 1
      mmgen/tw/view.py
  180. 1 1
      mmgen/tx/__init__.py
  181. 2 1
      mmgen/tx/base.py
  182. 46 3
      mmgen/tx/bump.py
  183. 1 1
      mmgen/tx/completed.py
  184. 1 1
      mmgen/tx/file.py
  185. 1 1
      mmgen/tx/info.py
  186. 81 62
      mmgen/tx/new.py
  187. 2 2
      mmgen/tx/new_swap.py
  188. 1 1
      mmgen/tx/online.py
  189. 6 6
      mmgen/tx/sign.py
  190. 1 1
      mmgen/tx/signed.py
  191. 1 1
      mmgen/tx/status.py
  192. 1 1
      mmgen/tx/unsigned.py
  193. 1 1
      mmgen/tx/util.py
  194. 1 1
      mmgen/ui.py
  195. 1 1
      mmgen/util.py
  196. 1 1
      mmgen/util2.py
  197. 1 1
      mmgen/wallet/__init__.py
  198. 1 1
      mmgen/wallet/base.py
  199. 1 1
      mmgen/wallet/bip39.py
  200. 1 1
      mmgen/wallet/brain.py
  201. 1 1
      mmgen/wallet/dieroll.py
  202. 1 1
      mmgen/wallet/enc.py
  203. 1 1
      mmgen/wallet/incog.py
  204. 1 1
      mmgen/wallet/incog_base.py
  205. 1 1
      mmgen/wallet/incog_hex.py
  206. 1 1
      mmgen/wallet/incog_hidden.py
  207. 1 1
      mmgen/wallet/mmgen.py
  208. 1 1
      mmgen/wallet/mmhex.py
  209. 1 1
      mmgen/wallet/mnemonic.py
  210. 1 1
      mmgen/wallet/plainhex.py
  211. 1 1
      mmgen/wallet/seed.py
  212. 1 1
      mmgen/wallet/unenc.py
  213. 1 1
      mmgen/wallet/words.py
  214. 1 1
      mmgen/wordlist/electrum.py
  215. 1 1
      mmgen/wordlist/tirosh.py
  216. 1 1
      mmgen/xmrseed.py
  217. 1 1
      mmgen/xmrwallet/__init__.py
  218. 1 1
      mmgen/xmrwallet/file/__init__.py
  219. 1 1
      mmgen/xmrwallet/file/outputs.py
  220. 1 1
      mmgen/xmrwallet/file/tx.py
  221. 1 1
      mmgen/xmrwallet/include.py
  222. 1 1
      mmgen/xmrwallet/ops/__init__.py
  223. 1 1
      mmgen/xmrwallet/ops/create.py
  224. 1 1
      mmgen/xmrwallet/ops/dump.py
  225. 1 1
      mmgen/xmrwallet/ops/export.py
  226. 1 1
      mmgen/xmrwallet/ops/import.py
  227. 1 1
      mmgen/xmrwallet/ops/label.py
  228. 1 1
      mmgen/xmrwallet/ops/new.py
  229. 1 1
      mmgen/xmrwallet/ops/relay.py
  230. 1 1
      mmgen/xmrwallet/ops/restore.py
  231. 1 1
      mmgen/xmrwallet/ops/sign.py
  232. 1 1
      mmgen/xmrwallet/ops/spec.py
  233. 1 1
      mmgen/xmrwallet/ops/submit.py
  234. 1 1
      mmgen/xmrwallet/ops/sweep.py
  235. 1 1
      mmgen/xmrwallet/ops/sync.py
  236. 1 1
      mmgen/xmrwallet/ops/txview.py
  237. 1 1
      mmgen/xmrwallet/ops/view.py
  238. 1 1
      mmgen/xmrwallet/ops/wallet.py
  239. 1 1
      mmgen/xmrwallet/rpc.py
  240. 1 1
      scripts/create-token.py
  241. 1 1
      scripts/exec_wrapper.py
  242. 1 1
      scripts/txsign-eval-exploit.diff
  243. 1 1
      setup.cfg
  244. 1 1
      setup.py
  245. 1 1
      test/altcointest.py
  246. 1 1
      test/clean.py
  247. 1 1
      test/cmdtest.py
  248. 1 1
      test/cmdtest_d/cfg.py
  249. 1 1
      test/cmdtest_d/common.py
  250. 76 23
      test/cmdtest_d/ct_automount.py
  251. 1 1
      test/cmdtest_d/ct_automount_eth.py
  252. 1 1
      test/cmdtest_d/ct_autosign.py
  253. 1 1
      test/cmdtest_d/ct_base.py
  254. 1 1
      test/cmdtest_d/ct_cfgfile.py
  255. 1 1
      test/cmdtest_d/ct_chainsplit.py
  256. 1 1
      test/cmdtest_d/ct_ethdev.py
  257. 1 1
      test/cmdtest_d/ct_help.py
  258. 1 1
      test/cmdtest_d/ct_input.py
  259. 2 2
      test/cmdtest_d/ct_main.py
  260. 1 1
      test/cmdtest_d/ct_misc.py
  261. 1 1
      test/cmdtest_d/ct_opts.py
  262. 1 1
      test/cmdtest_d/ct_ref.py
  263. 1 1
      test/cmdtest_d/ct_ref_3seed.py
  264. 1 1
      test/cmdtest_d/ct_ref_altcoin.py
  265. 54 53
      test/cmdtest_d/ct_regtest.py
  266. 1 1
      test/cmdtest_d/ct_seedsplit.py
  267. 1 1
      test/cmdtest_d/ct_shared.py
  268. 5 3
      test/cmdtest_d/ct_swap.py
  269. 1 1
      test/cmdtest_d/ct_tool.py
  270. 1 1
      test/cmdtest_d/ct_wallet.py
  271. 1 1
      test/cmdtest_d/ct_xmr_autosign.py
  272. 1 1
      test/cmdtest_d/ct_xmrwallet.py
  273. 1 1
      test/cmdtest_d/input.py
  274. 1 1
      test/colortest.py
  275. 1 1
      test/gentest.py
  276. 1 1
      test/hashfunc.py
  277. 1 1
      test/include/cfg.py
  278. 1 1
      test/include/coin_daemon_control.py
  279. 2 1
      test/include/common.py
  280. 1 1
      test/include/ecc.py
  281. 1 1
      test/include/pexpect.py
  282. 1 1
      test/include/test_init.py
  283. 1 1
      test/include/unit_test.py
  284. 1 1
      test/misc/tool_api_test.py
  285. 1 1
      test/objattrtest.py
  286. 1 1
      test/objattrtest_d/oat_btc_mainnet.py
  287. 1 1
      test/objattrtest_d/oat_common.py
  288. 1 1
      test/objtest.py
  289. 1 1
      test/objtest_d/ot_btc_mainnet.py
  290. 1 1
      test/objtest_d/ot_btc_testnet.py
  291. 1 1
      test/objtest_d/ot_common.py
  292. 1 1
      test/objtest_d/ot_eth_mainnet.py
  293. 1 1
      test/objtest_d/ot_ltc_mainnet.py
  294. 1 1
      test/objtest_d/ot_ltc_testnet.py
  295. 1 1
      test/overlay/__init__.py
  296. 1 1
      test/scrambletest.py
  297. 1 1
      test/test-release.d/cfg.sh
  298. 1 1
      test/test-release.sh
  299. 1 1
      test/tooltest.py
  300. 1 1
      test/tooltest2.py
  301. 1 1
      test/tooltest2_d/data.py

+ 1 - 1
cmds/mmgen-addrgen

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-addrimport

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-autosign

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-keygen

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-msg

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
cmds/mmgen-passchg

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-passgen

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-regtest

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-seedjoin

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-seedsplit

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-subwalletgen

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-tool

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-txbump

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-txcreate

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-txdo

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-txsend

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-txsign

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-walletchk

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-walletconv

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-walletgen

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
cmds/mmgen-xmrwallet

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
examples/bip_hd.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
examples/coin-daemon-info.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
examples/halving-calculator.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
examples/whitepaper.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
extmod/secp256k1mod.c

@@ -1,6 +1,6 @@
 /*
   mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-  Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+  Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 
   This program is free software: you can redistribute it and/or modify it under
   the terms of the GNU General Public License as published by the Free Software

+ 1 - 1
mmgen/addr.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/addrdata.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/addrfile.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/addrgen.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/addrlist.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/altcoin/params.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/altcoin/util.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/amt.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/autosign.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/base_obj.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/baseconv.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/bip39.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/bip_hd/__init__.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 2 - 2
mmgen/cfg.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@ class GlobalConstants(Lockable):
 	proj_url           = 'https://github.com/mmgen/mmgen-wallet'
 	author             = 'The MMGen Project'
 	email              = '<mmgen@tuta.io>'
-	Cdates             = '2013-2024'
+	Cdates             = '2013-2025'
 	dfl_hash_preset    = '3'
 	passwd_max_tries   = 5
 	min_screen_width   = 80

+ 1 - 1
mmgen/cfgfile.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/color.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/contrib/license.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/crypto.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/daemon.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/data/version

@@ -1 +1 @@
-15.1.dev15
+15.1.dev16

+ 1 - 1
mmgen/derive.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/devinit.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/devtools.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/exception.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/filename.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 5 - 2
mmgen/fileutil.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -159,6 +159,7 @@ def write_data_to_file(
 		ask_overwrite         = True,
 		ask_tty               = True,
 		no_tty                = False,
+		no_stdout             = False,
 		quiet                 = False,
 		binary                = False,
 		ignore_opt_outdir     = False,
@@ -269,7 +270,9 @@ def write_data_to_file(
 
 		return True
 
-	if cfg.stdout or outfile in ('', '-'):
+	if no_stdout:
+		do_file(outfile, ask_write_prompt)
+	elif cfg.stdout or outfile in ('', '-'):
 		do_stdout()
 	elif sys.stdin.isatty() and not sys.stdout.isatty():
 		do_stdout()

+ 1 - 1
mmgen/flags.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/help/__init__.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 2 - 2
mmgen/help/help_notes.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:
@@ -24,7 +24,7 @@ class help_notes:
 		return (
 			'COIN1 [AMT CHG_ADDR] COIN2 [ADDR]'
 				if target == 'swaptx' else
-			'[ADDR,AMT ... | DATA_SPEC] ADDR <change addr, addrlist ID or addr type>'
+			'[ADDR,AMT ... | DATA_SPEC] ADDR'
 				if self.proto.base_proto == 'Bitcoin' else
 			'ADDR,AMT')
 

+ 1 - 1
mmgen/help/seedsplit.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/help/xmrwallet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/key.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/keygen.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/led.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_addrgen.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_addrimport.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_autosign.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_msg.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/main_passgen.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_regtest.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_seedjoin.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_split.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_tool.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 91 - 83
mmgen/main_txbump.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -17,8 +17,8 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 """
-mmgen-txbump: Increase the fee on a replaceable (replace-by-fee) MMGen
-              transaction, and optionally sign and send it
+mmgen-txbump: Create, and optionally send and sign, a replacement transaction
+              on networks that support replace-by-fee (RBF)
 """
 
 from .cfg import gc, Config
@@ -26,60 +26,75 @@ from .util import msg, msg_r, die, async_run
 from .color import green
 
 opts_data = {
+	'filter_codes': ['-'],
 	'sets': [('yes', True, 'quiet', True)],
 	'text': {
-		'desc': f"""
-                Increase the fee on a replaceable (RBF) {gc.proj_name} transaction,
-                creating a new transaction, and optionally sign and send the
-                new transaction
+		'desc': """
+                Create, and optionally send and sign, a replacement transaction
+                on networks that support replace-by-fee (RBF)
 		 """,
-		'usage':   f'[opts] [{gc.proj_name} TX file] [seed source] ...',
+		'usage2':   (
+			f'[opts] [{gc.proj_name} TX file] [seed source] ...',
+			f'[opts] {{u_args}} [{gc.proj_name} TX file] [seed source] ...',
+		),
 		'options': """
--h, --help             Print this help message
---, --longhelp         Print help message for long (global) options
--a, --autosign         Bump the most recent transaction created and sent with
-                       the --autosign option. The removable device is mounted
-                       and unmounted automatically.  The transaction file
-                       argument must be omitted.  Note that only sent trans-
-                       actions may be bumped with this option.  To redo an
-                       unsent --autosign transaction, first delete it using
-                       ‘mmgen-txsend --abort’ and then create a new one
--b, --brain-params=l,p Use seed length 'l' and hash preset 'p' for
-                       brainwallet input
--c, --comment-file=  f Source the transaction's comment from file 'f'
--d, --outdir=        d Specify an alternate directory 'd' for output
--e, --echo-passphrase  Print passphrase to screen when typing it
--f, --fee=           f Transaction fee, as a decimal {cu} amount or as
-                       {fu} (an integer followed by {fl!r}).
-                       See FEE SPECIFICATION below.
--H, --hidden-incog-input-params=f,o  Read hidden incognito data from file
-                      'f' at offset 'o' (comma-separated)
--i, --in-fmt=        f Input is from wallet format 'f' (see FMT CODES below)
--l, --seed-len=      l Specify wallet seed length of 'l' bits. This option
-                       is required only for brainwallet and incognito inputs
-                       with non-standard (< {dsl}-bit) seed lengths.
--k, --keys-from-file=f Provide additional keys for non-{pnm} addresses
--K, --keygen-backend=n Use backend 'n' for public key generation.  Options
-                       for {coin_id}: {kgs}
--M, --mmgen-keys-from-file=f Provide keys for {pnm} addresses in a key-
-                       address file (output of '{pnl}-keygen'). Permits
-                       online signing without an {pnm} seed source. The
-                       key-address file is also used to verify {pnm}-to-{cu}
-                       mappings, so the user should record its checksum.
--o, --output-to-reduce=o Deduct the fee from output 'o' (an integer, or 'c'
-                       for the transaction's change output, if present)
--O, --old-incog-fmt    Specify old-format incognito input
--p, --hash-preset=   p Use the scrypt hash parameters defined by preset 'p'
-                       for password hashing (default: '{gc.dfl_hash_preset}')
--P, --passwd-file=   f Get {pnm} wallet passphrase from file 'f'
--q, --quiet            Suppress warnings; overwrite files without prompting
--s, --send             Sign and send the transaction (the default if seed
-                       data is provided)
--v, --verbose          Produce more verbose output
--y, --yes             Answer 'yes' to prompts, suppress non-essential output
--z, --show-hash-presets Show information on available hash presets
+			-- -h, --help             Print this help message
+			-- --, --longhelp         Print help message for long (global) options
+			-- -a, --autosign         Bump the most recent transaction created and sent with
+			+                         the --autosign option. The removable device is mounted
+			+                         and unmounted automatically.  The transaction file
+			+                         argument must be omitted.  Note that only sent trans-
+			+                         actions may be bumped with this option.  To redo an
+			+                         unsent --autosign transaction, first delete it using
+			+                         ‘mmgen-txsend --abort’ and then create a new one
+			-- -b, --brain-params=l,p Use seed length 'l' and hash preset 'p' for
+			+                         brainwallet input
+			-- -c, --comment-file=  f Source the transaction's comment from file 'f'
+			-- -d, --outdir=        d Specify an alternate directory 'd' for output
+			-- -e, --echo-passphrase  Print passphrase to screen when typing it
+			-- -f, --fee=           f Transaction fee, as a decimal {cu} amount or as
+			+                         {fu} (an integer followed by {fl!r}).
+			+                         See FEE SPECIFICATION below.
+			-- -H, --hidden-incog-input-params=f,o  Read hidden incognito data from file
+			+                        'f' at offset 'o' (comma-separated)
+			-- -i, --in-fmt=        f Input is from wallet format 'f' (see FMT CODES below)
+			-- -l, --seed-len=      l Specify wallet seed length of 'l' bits. This option
+			+                         is required only for brainwallet and incognito inputs
+			+                         with non-standard (< {dsl}-bit) seed lengths.
+			-- -k, --keys-from-file=f Provide additional keys for non-{pnm} addresses
+			-- -K, --keygen-backend=n Use backend 'n' for public key generation.  Options
+			+                         for {coin_id}: {kgs}
+			-- -M, --mmgen-keys-from-file=f Provide keys for {pnm} addresses in a key-
+			+                         address file (output of '{pnl}-keygen'). Permits
+			+                         online signing without an {pnm} seed source. The
+			+                         key-address file is also used to verify {pnm}-to-{cu}
+			+                         mappings, so the user should record its checksum.
+			b- -o, --output-to-reduce=o Deduct the fee from output 'o' (an integer, or 'c'
+			+                         for the transaction's change output, if present)
+			-- -O, --old-incog-fmt    Specify old-format incognito input
+			-- -p, --hash-preset=   p Use the scrypt hash parameters defined by preset 'p'
+			+                         for password hashing (default: '{gc.dfl_hash_preset}')
+			-- -P, --passwd-file=   f Get {pnm} wallet passphrase from file 'f'
+			-- -q, --quiet            Suppress warnings; overwrite files without prompting
+			-- -s, --send             Sign and send the transaction (the default if seed
+			+                         data is provided)
+			-- -v, --verbose          Produce more verbose output
+			-- -y, --yes              Answer 'yes' to prompts, suppress non-essential output
+			-- -z, --show-hash-presets Show information on available hash presets
 """,
 	'notes': """
+
+With --autosign, the TX file argument is omitted, and the last submitted TX
+file on the removable device will be used.
+
+If no outputs are specified, the original outputs will be used for the
+replacement transaction, otherwise a new transaction will be created with the
+outputs listed on the command line.  The syntax for the output arguments is
+identical to that of ‘mmgen-txcreate’.
+
+The user should take care to select a fee sufficient to ensure the original
+transaction is replaced in the mempool.
+
 {e}{s}
 Seed source files must have the canonical extensions listed in the 'FileExt'
 column below:
@@ -88,6 +103,8 @@ column below:
 """
 	},
 	'code': {
+		'usage': lambda cfg, proto, help_notes, s: s.format(
+			u_args = help_notes('txcreate_args', 'tx')),
 		'options': lambda cfg, help_notes, proto, s: s.format(
 			cfg     = cfg,
 			gc      = gc,
@@ -108,15 +125,22 @@ column below:
 
 cfg = Config(opts_data=opts_data)
 
-if not cfg.autosign:
-	tx_file = cfg._args.pop(0)
-	from .fileutil import check_infile
-	check_infile(tx_file)
-
 from .tx import CompletedTX, BumpTX, UnsignedTX, OnlineSignedTX
 from .tx.sign import txsign, get_seed_files, get_keyaddrlist, get_keylist
 
-seed_files = get_seed_files(cfg, cfg._args) if (cfg._args or cfg.send) else None
+seed_files = get_seed_files(
+	cfg,
+	cfg._args,
+	ignore_dfl_wallet = not cfg.send,
+	empty_ok = not cfg.send)
+
+if cfg.autosign:
+	if cfg.send:
+		die(1, '--send cannot be used together with --autosign')
+else:
+	tx_file = cfg._args.pop()
+	from .fileutil import check_infile
+	check_infile(tx_file)
 
 from .ui import do_license_msg
 do_license_msg(cfg)
@@ -158,33 +182,17 @@ async def main():
 		check_sent = cfg.autosign or sign_and_send,
 		twctl = await TwCtl(cfg, orig_tx.proto) if orig_tx.proto.tokensym else None)
 
-	from .rpc import rpc_init
-	tx.rpc = await rpc_init(cfg, tx.proto)
-
-	msg('Creating replacement transaction')
-
-	tx.check_sufficient_funds_for_bump()
+	tx.orig_rel_fee = tx.get_orig_rel_fee()
 
-	output_idx = tx.choose_output()
-
-	if not silent:
-		msg(f'Minimum fee for new transaction: {tx.min_fee.hl()} {tx.proto.coin}')
-
-	tx.usr_fee = tx.get_usr_fee_interactive(fee=cfg.fee, desc='User-selected')
-
-	tx.bump_fee(output_idx, tx.usr_fee)
-
-	assert tx.fee <= tx.proto.max_tx_fee
-
-	if not cfg.yes:
-		tx.add_comment()   # edits an existing comment
-
-	await tx.create_serialized(bump=True)
-
-	tx.add_timestamp()
-	tx.add_blockcount()
-
-	cfg._util.qmsg('Fee successfully increased')
+	if cfg._args:
+		tx.new_outputs = True
+		tx.is_swap = False
+		tx.outputs = tx.OutputList(tx)
+		tx.cfg = cfg # NB: with --automount, must use current cfg opts, not those from orig_tx
+		await tx.create(cfg._args, caller='txdo' if sign_and_send else 'txcreate')
+	else:
+		tx.new_outputs = False
+		await tx.create_feebump(silent=silent)
 
 	if not silent:
 		msg(green('\nREPLACEMENT TRANSACTION:'))

+ 1 - 1
mmgen/main_txcreate.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_txdo.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_txsend.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_txsign.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_wallet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/main_xmrwallet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/mn_entry.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/msg.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/obj.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/objmethods.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/opts.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/passwdlist.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/platform/darwin/util.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/bch/cashaddr.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/bch/params.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/addrdata.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/addrgen.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/common.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/daemon.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/misc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/msg.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/params.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/regtest.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/proto/btc/rpc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tw/addresses.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tw/bal.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tw/ctl.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tw/json.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tw/prune.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tw/rpc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 14 - 5
mmgen/proto/btc/tw/txhistory.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:
@@ -23,6 +23,8 @@ from .rpc import BitcoinTwRPC
 
 class BitcoinTwTransaction:
 
+	no_address_str = '[DATA]'
+
 	def __init__(self, parent, proto, rpc,
 			idx,          # unique numeric identifier of this transaction in listing
 			unspent_info, # addrs in wallet with balances: {'mmid': {'addr', 'comment', 'amt'}}
@@ -58,7 +60,9 @@ class BitcoinTwTransaction:
 			_d = namedtuple('vout_info', ['txid', 'coin_addr', 'twlabel', 'data'])
 			def gen():
 				for d in data:
-					addr = d.data['scriptPubKey'].get('address') or d.data['scriptPubKey']['addresses'][0]
+					addr = (
+						d.data['scriptPubKey'].get('address') or
+						d.data['scriptPubKey'].get('addresses',[self.no_address_str])[0])
 					yield _d(
 						txid = d.txid,
 						coin_addr = addr,
@@ -161,7 +165,9 @@ class BitcoinTwTransaction:
 						i = CoinTxID(e.txid).hl(color=color),
 						n = (nocolor, red)[color](str(e.data['n']).ljust(3)),
 						a = CoinAddr(self.proto, e.coin_addr).fmt(
-							addr_view_pref, width=self.max_addrlen[src], color=color),
+							addr_view_pref, width=self.max_addrlen[src], color=color)
+								if e.coin_addr != self.no_address_str else
+							CoinAddr.fmtc(e.coin_addr, width=self.max_addrlen[src], color=color),
 						A = self.proto.coin_amt(e.data['value']).fmt(color=color)
 					).rstrip()
 				else:
@@ -193,7 +199,10 @@ class BitcoinTwTransaction:
 				if not mmid:
 					if width and space_left < addr_w:
 						break
-					yield CoinAddr(self.proto, e.coin_addr).fmt(addr_view_pref, width=addr_w, color=color)
+					yield (
+						CoinAddr(self.proto, e.coin_addr).fmt(addr_view_pref, width=addr_w, color=color)
+							if e.coin_addr != self.no_address_str else
+						CoinAddr.fmtc(e.coin_addr, width=addr_w, color=color))
 					space_left -= addr_w
 				elif mmid.type == 'mmgen':
 					mmid_disp = mmid + bal_star
@@ -312,7 +321,7 @@ class BitcoinTwTxHistory(TwTxHistory, BitcoinTwRPC):
 				_mmp(TwMMGenID(self.proto, i['twmmid']), TwComment(i['comment']))
 					if i['twmmid'] else _mmp(None, None)
 			)
-			for i in data}
+			for i in data if 'address' in i}
 
 		if self.sinceblock: # mapping data may be incomplete for inputs, so update from 'listlabels'
 			mm_map.update(

+ 1 - 1
mmgen/proto/btc/tw/unspent.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tx/base.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 5 - 2
mmgen/proto/btc/tx/bump.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:
@@ -21,6 +21,9 @@ from .unsigned import AutomountUnsigned
 class Bump(Completed, New, TxBase.Bump):
 	desc = 'fee-bumped transaction'
 
+	def get_orig_rel_fee(self):
+		return self.fee_abs2rel(self.sum_inputs() - self.sum_outputs())
+
 	@property
 	def min_fee(self):
 		return self.sum_inputs() - self.sum_outputs() + self.relay_fee
@@ -33,7 +36,7 @@ class Bump(Completed, New, TxBase.Bump):
 
 	def convert_and_check_fee(self, fee, desc):
 		ret = super().convert_and_check_fee(fee, desc)
-		if ret is False:
+		if ret is False or self.new_outputs:
 			return ret
 		if ret < self.min_fee:
 			msg('{} {c}: {} fee too small. Minimum fee: {} {c} ({} {})'.format(

+ 1 - 1
mmgen/proto/btc/tx/completed.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tx/info.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 4 - 4
mmgen/proto/btc/tx/new.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:
@@ -135,9 +135,9 @@ class New(Base, TxNew):
 		if len(self.nondata_outputs) > 1 and not self.chg_output.mmid:
 			do_err()
 
-	async def create_serialized(self, locktime=None, bump=None):
+	async def create_serialized(self, locktime=None):
 
-		if not bump:
+		if not self.is_bump:
 			# Set all sequence numbers to the same value, in conformity with the behavior of most modern wallets:
 			do_rbf = self.proto.cap('rbf') and not self.cfg.no_rbf
 			seqnum_val = self.proto.max_int - (2 if do_rbf else 1 if locktime else 0)
@@ -158,7 +158,7 @@ class New(Base, TxNew):
 
 		ret = await self.rpc.call('createrawtransaction', inputs_list, outputs_dict)
 
-		if locktime and not bump:
+		if locktime and not self.is_bump:
 			msg(f'Setting nLockTime to {self.info.strfmt_locktime(locktime)}!')
 			assert isinstance(locktime, int), 'locktime value not an integer'
 			self.locktime = locktime

+ 1 - 1
mmgen/proto/btc/tx/new_swap.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tx/online.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tx/op_return_data.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tx/signed.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tx/status.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/btc/tx/unsigned.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/etc/params.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/addrdata.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/proto/eth/addrgen.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/contract.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/proto/eth/daemon.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/misc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/msg.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/params.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/rpc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/tw/addresses.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/tw/bal.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/proto/eth/tw/ctl.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/proto/eth/tw/json.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/tw/rpc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/tw/unspent.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/proto/eth/tw/view.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/tx/base.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 4 - 1
mmgen/proto/eth/tx/bump.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:
@@ -21,6 +21,9 @@ from .new import New, TokenNew
 class Bump(Completed, New, TxBase.Bump):
 	desc = 'fee-bumped transaction'
 
+	def get_orig_rel_fee(self): # disable this check for ETH
+		return 0
+
 	@property
 	def min_fee(self):
 		return self.fee * Decimal('1.101')

+ 1 - 1
mmgen/proto/eth/tx/completed.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/tx/info.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 2 - 2
mmgen/proto/eth/tx/new.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:
@@ -65,7 +65,7 @@ class New(Base, TxBase.New):
 	# Instead of serializing tx data as with BTC, just create a JSON dump.
 	# This complicates things but means we avoid using the rlp library to deserialize the data,
 	# thus removing an attack vector
-	async def create_serialized(self, locktime=None, bump=None):
+	async def create_serialized(self, locktime=None):
 		assert len(self.inputs) == 1, 'Transaction has more than one input!'
 		o_num = len(self.outputs)
 		o_ok = 0 if self.usr_contract_data else 1

+ 1 - 1
mmgen/proto/eth/tx/online.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/tx/signed.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/tx/status.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/eth/tx/unsigned.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/ltc/params.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/secp256k1/keygen.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/xmr/addrgen.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/xmr/daemon.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/xmr/keygen.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/xmr/params.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/xmr/rpc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/zec/addrgen.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/zec/keygen.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/proto/zec/params.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/protocol.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/pyversion.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/rpc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/seed.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/seedsplit.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/sha2.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/subseed.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/term.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/test.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/tool/api.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tool/coin.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tool/common.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tool/file.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tool/filecrypt.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tool/fileutil.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tool/help.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tool/mnemonic.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tool/rpc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tool/util.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tool/wallet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tw/addresses.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/tw/bal.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tw/ctl.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tw/json.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/tw/prune.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/tw/rpc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/tw/shared.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/tw/txhistory.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/tw/unspent.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tw/view.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tx/__init__.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 2 - 1
mmgen/tx/base.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:
@@ -79,6 +79,7 @@ class Base(MMGenObject):
 	locktime     = None
 	chain        = None
 	signed       = False
+	is_bump      = False
 	is_swap      = False
 	file_format  = 'json'
 	non_mmgen_inputs_msg = f"""

+ 46 - 3
mmgen/tx/bump.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:
@@ -14,12 +14,13 @@ tx.bump: transaction bump class
 
 from .new import New
 from .completed import Completed
-from ..util import msg, is_int, die
+from ..util import msg, ymsg, is_int, die
 
 class Bump(Completed, New):
 	desc = 'fee-bumped transaction'
 	ext  = 'rawtx'
 	bump_output_idx = None
+	is_bump = True
 
 	def __init__(self, check_sent, *args, **kwargs):
 
@@ -30,11 +31,53 @@ class Bump(Completed, New):
 
 		# If sending, require original tx to be sent
 		if check_sent and not self.coin_txid:
-			die(1, 'Transaction {self.txid!r} was not broadcast to the network')
+			die(1, f'Transaction {self.txid!r} was not broadcast to the network')
 
 		self.coin_txid = ''
 		self.sent_timestamp = None
 
+	async def get_inputs(self, outputs_sum):
+		return True
+
+	def check_bumped_fee_ok(self, abs_fee):
+		orig = int(self.orig_rel_fee)
+		new = int(self.fee_abs2rel(abs_fee))
+		if new <= orig:
+			ymsg('New fee ({b} {d}) <= original fee ({a} {d}). Please choose a higher fee'.format(
+				a=orig, b=new, d=self.rel_fee_disp))
+			return False
+		return True
+
+	async def create_feebump(self, silent):
+
+		from ..rpc import rpc_init
+		self.rpc = await rpc_init(self.cfg, self.proto)
+
+		msg('Creating replacement transaction')
+
+		self.check_sufficient_funds_for_bump()
+
+		output_idx = self.choose_output()
+
+		if not silent:
+			msg(f'Minimum fee for new transaction: {self.min_fee.hl()} {self.proto.coin}')
+
+		self.usr_fee = self.get_usr_fee_interactive(fee=self.cfg.fee, desc='User-selected')
+
+		self.bump_fee(output_idx, self.usr_fee)
+
+		assert self.fee <= self.proto.max_tx_fee
+
+		if not self.cfg.yes:
+			self.add_comment()   # edits an existing comment
+
+		await self.create_serialized()
+
+		self.add_timestamp()
+		self.add_blockcount()
+
+		self.cfg._util.qmsg('Fee successfully increased')
+
 	def check_sufficient_funds_for_bump(self):
 		if not [o.amt for o in self.outputs if o.amt >= self.min_fee]:
 			die(1,

+ 1 - 1
mmgen/tx/completed.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/tx/file.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/tx/info.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 81 - 62
mmgen/tx/new.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:
@@ -137,21 +137,24 @@ class New(Base):
 			if fee:
 				abs_fee = self.convert_and_check_fee(fee, desc)
 			if abs_fee:
-				prompt = '{a} TX fee{b}: {c}{d} {e} ({f} {g})\n'.format(
-					a = desc,
-					b = (f' (after {self.cfg.fee_adjust:.2f}X adjustment)'
-							if self.cfg.fee_adjust != 1 and desc.startswith('Network-estimated')
-								else ''),
-					c = ('', '≈')[self.fee_is_approximate],
-					d = abs_fee.hl(),
-					e = self.coin,
-					f = pink(self.fee_abs2rel(abs_fee)),
-					g = self.rel_fee_disp)
-				from ..ui import keypress_confirm
-				if self.cfg.yes or keypress_confirm(self.cfg, prompt+'OK?', default_yes=True):
-					if self.cfg.yes:
-						msg(prompt)
-					return abs_fee
+				if self.is_bump and not self.check_bumped_fee_ok(abs_fee):
+					pass
+				else:
+					prompt = '{a} TX fee{b}: {c}{d} {e} ({f} {g})\n'.format(
+						a = desc,
+						b = (f' (after {self.cfg.fee_adjust:.2f}X adjustment)'
+								if self.cfg.fee_adjust != 1 and desc.startswith('Network-estimated')
+									else ''),
+						c = ('', '≈')[self.fee_is_approximate],
+						d = abs_fee.hl(),
+						e = self.coin,
+						f = pink(self.fee_abs2rel(abs_fee)),
+						g = self.rel_fee_disp)
+					from ..ui import keypress_confirm
+					if self.cfg.yes or keypress_confirm(self.cfg, prompt+'OK?', default_yes=True):
+						if self.cfg.yes:
+							msg(prompt)
+						return abs_fee
 			fee = line_input(self.cfg, self.usr_fee_prompt)
 			desc = 'User-selected'
 
@@ -363,46 +366,51 @@ class New(Base):
 		self.inputs = type(self.inputs)(self, list(gen_inputs()))
 
 	async def get_funds_available(self, fee, outputs_sum):
-		in_ = self.sum_inputs()
-		out = outputs_sum + fee
-		return self._funds_available(in_ >= out, in_ - out if in_ >= out else out - in_)
-
-	async def get_inputs_from_user(self, outputs_sum):
-
-		while True:
-			sel_nums = (
-				self.get_unspent_nums_from_inputs_opt if self.cfg.inputs else
-				self.get_unspent_nums_from_user
-			)(self.twuo.data)
-
-			msg(f'Selected output{suf(sel_nums)}: {{}}'.format(' '.join(str(n) for n in sel_nums)))
-			sel_unspent = MMGenList(self.twuo.data[i-1] for i in sel_nums)
-
-			inputs_sum = sum(s.amt for s in sel_unspent)
-			if not await self.precheck_sufficient_funds(inputs_sum, sel_unspent, outputs_sum):
-				continue
+		in_sum = self.sum_inputs()
+		out_sum = outputs_sum + fee
+		return self._funds_available(
+			in_sum >= out_sum,
+			# CoinAmt must be non-negative, so cannot use abs():
+			in_sum - out_sum if in_sum >= out_sum else out_sum - in_sum)
+
+	async def get_inputs(self, outputs_sum):
+		sel_nums = (
+			self.get_unspent_nums_from_inputs_opt if self.cfg.inputs else
+			self.get_unspent_nums_from_user
+		)(self.twuo.data)
+
+		msg(f'Selected output{suf(sel_nums)}: {{}}'.format(' '.join(str(n) for n in sel_nums)))
+		sel_unspent = MMGenList(self.twuo.data[i-1] for i in sel_nums)
+
+		if not await self.precheck_sufficient_funds(
+				sum(s.amt for s in sel_unspent),
+				sel_unspent,
+				outputs_sum):
+			return False
+		self.copy_inputs_from_tw(sel_unspent)  # makes self.inputs
+		return True
 
-			self.copy_inputs_from_tw(sel_unspent)  # makes self.inputs
+	async def get_fee(self, fee, outputs_sum):
 
-			if self.cfg.fee:
-				self.usr_fee = self.get_usr_fee_interactive(self.cfg.fee, 'User-selected')
-			else:
-				fee_per_kb, fe_type = await self.get_rel_fee_from_network()
-				self.usr_fee = self.get_usr_fee_interactive(
-					None if fee_per_kb is None else self.fee_est2abs(fee_per_kb, fe_type),
-					self.network_estimated_fee_label)
+		if fee:
+			self.usr_fee = self.get_usr_fee_interactive(fee, 'User-selected')
+		else:
+			fee_per_kb, fe_type = await self.get_rel_fee_from_network()
+			self.usr_fee = self.get_usr_fee_interactive(
+				None if fee_per_kb is None else self.fee_est2abs(fee_per_kb, fe_type),
+				self.network_estimated_fee_label)
 
-			funds = await self.get_funds_available(self.usr_fee, outputs_sum)
+		funds = await self.get_funds_available(self.usr_fee, outputs_sum)
 
-			if funds.is_positive:
-				p = self.final_inputs_ok_msg(funds.amt)
-				from ..ui import keypress_confirm
-				if self.cfg.yes or keypress_confirm(self.cfg, p+'. OK?', default_yes=True):
-					if self.cfg.yes:
-						msg(p)
-					return funds.amt
-			else:
-				self.warn_insufficient_funds(funds.amt, self.coin)
+		if funds.is_positive:
+			p = self.final_inputs_ok_msg(funds.amt)
+			from ..ui import keypress_confirm
+			if self.cfg.yes or keypress_confirm(self.cfg, p+'. OK?', default_yes=True):
+				if self.cfg.yes:
+					msg(p)
+				return funds.amt
+		else:
+			self.warn_insufficient_funds(funds.amt, self.coin)
 
 	async def create(self, cmd_args, locktime=None, do_info=False, caller='txcreate'):
 
@@ -426,21 +434,22 @@ class New(Base):
 				self.get_addrdata_from_files(self.proto, addrfile_args),
 				await TwAddrData(self.cfg, self.proto, twctl=self.twctl))
 
-		self.twuo = await TwUnspentOutputs(
-			self.cfg,
-			self.proto,
-			minconf = self.cfg.minconf,
-			addrs = await self.get_input_addrs_from_inputs_opt())
-
-		await self.twuo.get_data()
+		if not self.is_bump:
+			self.twuo = await TwUnspentOutputs(
+				self.cfg,
+				self.proto,
+				minconf = self.cfg.minconf,
+				addrs = await self.get_input_addrs_from_inputs_opt())
+			await self.twuo.get_data()
 
 		from ..ui import do_license_msg
 		do_license_msg(self.cfg)
 
-		if not self.cfg.inputs:
+		if not (self.is_bump or self.cfg.inputs):
 			await self.twuo.view_filter_and_sort()
 
-		self.twuo.display_total()
+		if not self.is_bump:
+			self.twuo.display_total()
 
 		if do_info:
 			del self.twuo.twctl
@@ -453,7 +462,14 @@ class New(Base):
 			f'{outputs_sum.hl()} {self.dcoin}' if outputs_sum else 'Unknown'
 		))
 
-		funds_left = await self.get_inputs_from_user(outputs_sum)
+		while True:
+			if not await self.get_inputs(outputs_sum):
+				continue
+			fee_hint = None
+			if self.is_swap:
+				fee_hint = self.update_vault_output(self.vault_output.amt or self.sum_inputs())
+			if funds_left := await self.get_fee(fee_hint or self.cfg.fee, outputs_sum):
+				break
 
 		self.check_non_mmgen_inputs(caller)
 
@@ -473,6 +489,9 @@ class New(Base):
 
 		self.cfg._util.qmsg('Transaction successfully created')
 
+		if self.is_bump:
+			return
+
 		from . import UnsignedTX
 		new = UnsignedTX(cfg=self.cfg, data=self.__dict__, automount=self.cfg.autosign)
 

+ 2 - 2
mmgen/tx/new_swap.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:
@@ -18,5 +18,5 @@ class NewSwap(New):
 	desc = 'swap transaction'
 	is_swap = True
 
-	async def process_swap_cmdline_args(self, cmd_args, addrfile_args):
+	async def process_swap_cmdline_args(self, cmd_args, addrfiles):
 		raise NotImplementedError(f'Swap not implemented for protocol {self.proto.__name__}')

+ 1 - 1
mmgen/tx/online.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 6 - 6
mmgen/tx/sign.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -128,15 +128,15 @@ def get_tx_files(cfg, args):
 		die(1, 'You must specify a raw transaction file!')
 	return ret
 
-def get_seed_files(cfg, args):
+def get_seed_files(cfg, args, ignore_dfl_wallet=False, empty_ok=False):
 	# favor unencrypted seed sources first, as they don't require passwords
 	ret = _pop_matching_fns(args, get_wallet_extensions('unenc'))
 	from ..filename import find_file_in_dir
-	wf = find_file_in_dir(get_wallet_cls('mmgen'), cfg.data_dir) # Make this the first encrypted ss in the list
-	if wf:
-		ret.append(wf)
+	if not ignore_dfl_wallet: # Make this the first encrypted ss in the list
+		if wf := find_file_in_dir(get_wallet_cls('mmgen'), cfg.data_dir):
+			ret.append(wf)
 	ret += _pop_matching_fns(args, get_wallet_extensions('enc'))
-	if not (ret or cfg.mmgen_keys_from_file or cfg.keys_from_file): # or cfg.use_wallet_dat
+	if not (ret or empty_ok or cfg.mmgen_keys_from_file or cfg.keys_from_file): # or cfg.use_wallet_dat
 		die(1, 'You must specify a seed or key source!')
 	return ret
 

+ 1 - 1
mmgen/tx/signed.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/tx/status.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/tx/unsigned.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/tx/util.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/ui.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/util.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/util2.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/__init__.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/base.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/bip39.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/brain.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/dieroll.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/enc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/incog.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/incog_base.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/incog_hex.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/incog_hidden.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/mmgen.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/mmhex.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/mnemonic.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/plainhex.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/seed.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/unenc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wallet/words.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/wordlist/electrum.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/wordlist/tirosh.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/xmrseed.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
mmgen/xmrwallet/__init__.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/file/__init__.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/file/outputs.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/file/tx.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/include.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/__init__.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/create.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/dump.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/export.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/import.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/label.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/new.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/relay.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/restore.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/sign.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/spec.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/submit.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/sweep.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/sync.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/txview.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/view.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/ops/wallet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
mmgen/xmrwallet/rpc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
scripts/create-token.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
scripts/exec_wrapper.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
scripts/txsign-eval-exploit.diff

@@ -1,5 +1,5 @@
 # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
setup.cfg

@@ -1,5 +1,5 @@
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
setup.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/altcointest.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/clean.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/cmdtest.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/cmdtest_d/cfg.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/cmdtest_d/common.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 76 - 23
test/cmdtest_d/ct_automount.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:
@@ -61,6 +61,13 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtestBDBWallet)
 		('alice_txsend2',                    'sending the transaction'),
 		('alice_txbump3',                    'bumping the transaction'),
 		('alice_txsend3',                    'sending the bumped transaction'),
+		('alice_txbump4',                    'bumping the transaction (new outputs, fee too low)'),
+		('alice_txbump_abort1',              'aborting the transaction'),
+		('alice_txbump5',                    'bumping the transaction (new outputs)'),
+		('alice_txsend5',                    'sending the bumped transaction'),
+		('alice_txstatus5',                  'getting transaction status (in mempool)'),
+		('generate',                         'mining a block'),
+		('alice_bal2',                       'checking Alice’s balance'),
 		('wait_loop_kill',                   'stopping autosign wait loop'),
 		('stop',                             'stopping regtest daemon'),
 		('txview',                           'viewing transactions'),
@@ -78,7 +85,10 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtestBDBWallet)
 
 		self.opts.append('--alice')
 
-	def _alice_txcreate(self, chg_addr, opts=[], exit_val=0, expect_str=None, data_arg=None):
+	def _alice_txcreate(self, chg_addr, opts=[], exit_val=0, expect_str=None, data_arg=None, need_rbf=False):
+
+		if need_rbf and not self.proto.cap('rbf'):
+			return 'skip'
 
 		def do_return():
 			if expect_str:
@@ -120,9 +130,7 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtestBDBWallet)
 	alice_txcreate3 = alice_txcreate2
 
 	def alice_txcreate4(self):
-		if cfg.coin == 'BCH':
-			return 'skip'
-		return self._alice_txcreate(chg_addr='L:4')
+		return self._alice_txcreate(chg_addr='L:4', need_rbf=True)
 
 	def _alice_txsend_abort(self, err=False, send_resp='y', expect=None, shred_expect=[]):
 		self.insert_device_online()
@@ -170,16 +178,19 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtestBDBWallet)
 		return self._alice_txsend('This one’s worth a comment', no_wait=True)
 
 	def alice_txsend2(self):
-		if cfg.coin == 'BCH':
-			return 'skip'
-		return self._alice_txsend()
+		return self._alice_txsend(need_rbf=True)
 
 	def alice_txsend3(self):
-		if cfg.coin == 'BCH':
+		return self._alice_txsend(need_rbf=True)
+
+	def alice_txsend5(self):
+		return self._alice_txsend(need_rbf=True)
+
+	def _alice_txstatus(self, expect, exit_val=None, need_rbf=False):
+
+		if need_rbf and not self.proto.cap('rbf'):
 			return 'skip'
-		return self._alice_txsend()
 
-	def _alice_txstatus(self, expect, exit_val=None):
 		self.insert_device_online()
 		t = self.spawn(
 				'mmgen-txsend',
@@ -203,9 +214,17 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtestBDBWallet)
 	def alice_txstatus4(self):
 		return self._alice_txstatus('1 confirmation', 0)
 
-	def _alice_txsend(self, comment=None, no_wait=False):
+	def alice_txstatus5(self):
+		return self._alice_txstatus('in mempool', need_rbf=True)
+
+	def _alice_txsend(self, comment=None, no_wait=False, need_rbf=False):
+
+		if need_rbf and not self.proto.cap('rbf'):
+			return 'skip'
+
 		if not no_wait:
 			self._wait_signed('transaction')
+
 		self.insert_device_online()
 		t = self.spawn('mmgen-txsend', ['--alice', '--quiet', '--autosign'])
 		t.view_tx('t')
@@ -224,22 +243,30 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtestBDBWallet)
 		self.remove_device_online()
 		return t
 
-	def _alice_txbump(self, bad_tx_desc=None):
-		if cfg.coin == 'BCH':
+	def _alice_txbump(self, fee_opt=None, output_args=[], bad_tx_expect=None, low_fee_fix=None):
+		if not self.proto.cap('rbf'):
 			return 'skip'
 		self.insert_device_online()
 		t = self.spawn(
 				'mmgen-txbump',
-				['--alice', '--autosign'],
-				exit_val = 1 if bad_tx_desc else None)
-		if bad_tx_desc:
+				['--alice', '--autosign']
+				+ ([fee_opt] if fee_opt else [])
+				+ output_args,
+				exit_val = 1 if bad_tx_expect else None)
+		if bad_tx_expect:
 			time.sleep(0.5)
 			t.expect('Only sent transactions')
-			t.expect(bad_tx_desc)
+			t.expect(bad_tx_expect)
 		else:
-			t.expect(r'to deduct the fee from .* change output\): ', '\n', regex=True)
-			t.expect(r'(Y/n): ', 'y')  # output OK?
-			t.expect('transaction fee: ', '200s\n')
+			if not output_args:
+				t.expect(r'to deduct the fee from .* change output\): ', '\n', regex=True)
+				t.expect(r'(Y/n): ', 'y')  # output OK?
+			if low_fee_fix or not fee_opt:
+				if low_fee_fix:
+					t.expect('Please choose a higher fee')
+				t.expect('transaction fee: ', (low_fee_fix or '200s') + '\n')
+			if output_args:
+				t.expect(r'(Y/n): ', 'y')
 			t.expect(r'(Y/n): ', 'y')  # fee OK?
 			t.expect(r'(y/N): ', '\n') # add comment?
 			t.expect(r'(y/N): ', 'y')  # save?
@@ -248,11 +275,37 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtestBDBWallet)
 		return t
 
 	def alice_txbump1(self):
-		return self._alice_txbump(bad_tx_desc='unsigned transaction')
+		return self._alice_txbump(bad_tx_expect='unsigned transaction')
 
 	def alice_txbump2(self):
 		self._wait_signed('transaction')
-		return self._alice_txbump(bad_tx_desc='unsent transaction')
+		return self._alice_txbump(bad_tx_expect='unsent transaction')
 
 	def alice_txbump3(self):
 		return self._alice_txbump()
+
+	def alice_txbump4(self):
+		sid = self._user_sid('alice')
+		return self._alice_txbump(
+			fee_opt = '--fee=3s',
+			output_args = [f'{self.burn_addr},7.654321', f'{sid}:C:1'],
+			low_fee_fix = '300s')
+
+	def alice_txbump_abort1(self):
+		if not self.proto.cap('rbf'):
+			return 'skip'
+		return self._alice_txsend_abort(shred_expect=['Shredding .*arawtx'])
+
+	def alice_txbump5(self):
+		sid = self._user_sid('alice')
+		return self._alice_txbump(
+			fee_opt = '--fee=400s',
+			output_args = ['data:message for posterity', f'{self.burn_addr},7.654321', f'{sid}:C:1'])
+
+	def alice_bal2(self):
+		bals = {
+			'btc': '491.11002204',
+			'ltc': '5491.11002204',
+			'bch': '498.7653392',
+		}
+		return self.user_bal('alice', bals.get(self.coin, None))

+ 1 - 1
test/cmdtest_d/ct_automount_eth.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/cmdtest_d/ct_autosign.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/cmdtest_d/ct_base.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/cmdtest_d/ct_cfgfile.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # Project source code repository: https://github.com/mmgen/mmgen-wallet
 # Licensed according to the terms of GPL Version 3.  See LICENSE for details.

+ 1 - 1
test/cmdtest_d/ct_chainsplit.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/cmdtest_d/ct_ethdev.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/cmdtest_d/ct_help.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/cmdtest_d/ct_input.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # Project source code repository: https://github.com/mmgen/mmgen-wallet
 # Licensed according to the terms of GPL Version 3.  See LICENSE for details.

+ 2 - 2
test/cmdtest_d/ct_main.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -1058,7 +1058,7 @@ class CmdTestMain(CmdTestBase, CmdTestShared):
 		return self.txbump(
 			f7,
 			prepend_args = ['-p1', '-k', non_mm_file, '-M', f1],
-			seed_args    = [f2, f3, f4, f5, f6, f8])
+			seed_args    = [f2, f3, f4, f6, f8])
 
 	def walletgen5(self, del_dw_run='dummy'):
 		return self.walletgen()

+ 1 - 1
test/cmdtest_d/ct_misc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/cmdtest_d/ct_opts.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # Project source code repository: https://github.com/mmgen/mmgen-wallet
 # Licensed according to the terms of GPL Version 3.  See LICENSE for details.

+ 1 - 1
test/cmdtest_d/ct_ref.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/cmdtest_d/ct_ref_3seed.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/cmdtest_d/ct_ref_altcoin.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 54 - 53
test/cmdtest_d/ct_regtest.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -54,7 +54,8 @@ from .common import (
 	tw_comment_lat_cyr_gr,
 	tw_comment_zh,
 	tx_comment_jp,
-	get_env_without_debug_vars)
+	get_env_without_debug_vars,
+	rt_pw)
 
 from .ct_base import CmdTestBase
 from .ct_shared import CmdTestShared
@@ -66,14 +67,13 @@ dfl_wcls = get_wallet_cls('mmgen')
 
 tx_fee = rtFundAmt = rtFee = rtBals = rtBals_gb = rtBobOp3 = rtAmts = None # ruff
 
-rt_pw = 'abc-α'
 rt_data = {
 	'tx_fee': {'btc':'0.0001', 'bch':'0.001', 'ltc':'0.01'},
 	'rtFundAmt': {'btc':'500', 'bch':'500', 'ltc':'5500'},
 	'rtFee': {
-		'btc': ('20s', '10s', '60s', '31s', '10s', '20s'),
-		'bch': ('20s', '10s', '60s', '0.0001', '10s', '20s'),
-		'ltc': ('1000s', '500s', '1500s', '0.05', '400s', '1000s')
+		'btc': ('20s', '10s', '60s', '31s', '10s', '20s', '40s'),
+		'bch': ('20s', '10s', '60s', '0.0001', '10s', '20s', '40s'),
+		'ltc': ('1000s', '500s', '1500s', '0.05', '400s', '1000s', '1200s')
 	},
 	'rtBals': {
 		'btc': ('499.9999488', '399.9998282', '399.9998147', '399.9996877',
@@ -291,8 +291,10 @@ class CmdTestRegtest(CmdTestBase, CmdTestShared):
 		('bob_send_maybe_rbf',         'sending funds to Alice (RBF, if supported)'),
 		('get_mempool1',               'mempool (before RBF bump)'),
 		('bob_rbf_status1',            'getting status of transaction'),
-		('bob_rbf_bump',               'bumping RBF transaction'),
+		('bob_rbf_bump_newoutputs',    'bumping RBF transaction (new outputs)'),
 		('get_mempool2',               'mempool (after RBF bump)'),
+		('bob_rbf_bump',               'bumping RBF transaction'),
+		('get_mempool3',               'mempool (after RBF bump)'),
 		('bob_rbf_status2',            'getting status of transaction after replacement'),
 		('bob_rbf_status3',            'getting status of replacement transaction (mempool)'),
 		('generate',                   'mining a block'),
@@ -1173,10 +1175,18 @@ class CmdTestRegtest(CmdTestBase, CmdTestShared):
 			t.written_to_file('Fee-bumped transaction')
 		return t
 
+	def bob_rbf_bump_newoutputs(self):
+		return self._bob_rbf_bump(
+			['--send', 'data:embedded forever', f'{self.burn_addr},0.1', f'{self._user_sid("bob")}:C:5'],
+			rtFee[6])
+
 	def bob_rbf_bump(self):
+		return self._bob_rbf_bump(['--send'], rtFee[2])
+
+	def _bob_rbf_bump(self, add_args, fee):
 		ext = ',{}]{x}.regtest.sigtx'.format(rtFee[1][:-1], x='-α' if cfg.debug_utf8 else '')
 		txfile = self.get_file_with_ext(ext, delete=False, no_dot=True)
-		return self.user_txbump('bob', self.tmpdir, txfile, rtFee[2], add_args=['--send'])
+		return self.user_txbump('bob', self.tmpdir, txfile, fee, add_args=add_args)
 
 	def generate(self, num_blocks=1, add_opts=[]):
 		int(num_blocks)
@@ -1197,77 +1207,68 @@ class CmdTestRegtest(CmdTestBase, CmdTestShared):
 		).read().strip()
 		return json.loads(ret) if decode_json else ret
 
+	def get_mempool1(self):
+		return self._get_mempool_compare_txid(None, 'rbf_txid1')
+
+	def get_mempool2(self):
+		return self._get_mempool_compare_txid('rbf_txid1', 'rbf_txid2')
+
+	def get_mempool3(self):
+		return self._get_mempool_compare_txid('rbf_txid2', 'rbf_txid3')
+
 	def _get_mempool(self, do_msg=False):
 		if do_msg:
 			self.spawn('', msg_only=True)
 		return self._do_mmgen_regtest(['mempool'], decode_json=True)
 
-	def get_mempool1(self):
+	def _get_mempool_compare_txid(self, txid1, txid2):
+		if not self.proto.cap('rbf'):
+			return 'skip'
 		mp = self._get_mempool(do_msg=True)
 		if len(mp) != 1:
 			die(4, 'Mempool has more or less than one TX!')
-		self.write_to_tmpfile('rbf_txid', mp[0]+'\n')
+		if txid1:
+			chk = self.read_from_tmpfile(txid1)
+			if chk.strip() == mp[0]:
+				die(4, 'TX in mempool has not changed!  RBF bump failed')
+		self.write_to_tmpfile(txid2, mp[0]+'\n')
 		return 'ok'
 
-	def bob_rbf_status(self, fee, exp1, exp2='', exit_val=None):
+	def _bob_rbf_status(self, fee, exit_val=None, txid=None, confirmations=0):
 		if not self.proto.cap('rbf'):
 			return 'skip'
+		if txid:
+			txid = self.read_from_tmpfile(txid).strip()
+			if confirmations:
+				r1 = f'Replacement transaction has {confirmations} confirmation'
+				r2 = rf'Replacing transactions:.*{txid}'
+			else:
+				r1, r2 = ('Transaction has been replaced', f'{txid} in mempool')
+		elif confirmations:
+			r1, r2 = (f'Transaction has {confirmations} confirmation', '')
+		else:
+			r1, r2 = ('in mempool, replaceable', '')
 		ext = ',{}]{x}.regtest.sigtx'.format(fee[:-1], x='-α' if cfg.debug_utf8 else '')
 		txfile = self.get_file_with_ext(ext, delete=False, no_dot=True)
-		return self.user_txsend_status('bob', txfile, exp1, exp2, exit_val=exit_val)
+		return self.user_txsend_status('bob', txfile, r1, r2, exit_val=exit_val)
 
 	def bob_rbf_status1(self):
-		if not self.proto.cap('rbf'):
-			return 'skip'
-		return self.bob_rbf_status(rtFee[1], 'in mempool, replaceable')
-
-	def get_mempool2(self):
-		if not self.proto.cap('rbf'):
-			return 'skip'
-		mp = self._get_mempool(do_msg=True)
-		if len(mp) != 1:
-			die(4, 'Mempool has more or less than one TX!')
-		chk = self.read_from_tmpfile('rbf_txid')
-		if chk.strip() == mp[0]:
-			die(4, 'TX in mempool has not changed!  RBF bump failed')
-		self.write_to_tmpfile('rbf_txid2', mp[0]+'\n')
-		return 'ok'
+		return self._bob_rbf_status(rtFee[1])
 
 	def bob_rbf_status2(self):
-		if not self.proto.cap('rbf'):
-			return 'skip'
-		new_txid = self.read_from_tmpfile('rbf_txid2').strip()
-		return self.bob_rbf_status(
-			rtFee[1],
-			'Transaction has been replaced',
-			f'{new_txid} in mempool',
-			exit_val = 0)
+		return self._bob_rbf_status(rtFee[1], txid='rbf_txid3')
 
 	def bob_rbf_status3(self):
-		if not self.proto.cap('rbf'):
-			return 'skip'
-		return self.bob_rbf_status(rtFee[2], 'status: in mempool, replaceable')
+		return self._bob_rbf_status(rtFee[2])
 
 	def bob_rbf_status4(self):
-		if not self.proto.cap('rbf'):
-			return 'skip'
-		new_txid = self.read_from_tmpfile('rbf_txid2').strip()
-		return self.bob_rbf_status(rtFee[1],
-			'Replacement transaction has 1 confirmation',
-			rf'Replacing transactions:\s+{new_txid}')
+		return self._bob_rbf_status(rtFee[1], txid='rbf_txid3', confirmations=1, exit_val=0)
 
 	def bob_rbf_status5(self):
-		if not self.proto.cap('rbf'):
-			return 'skip'
-		return self.bob_rbf_status(rtFee[2], 'Transaction has 1 confirmation')
+		return self._bob_rbf_status(rtFee[2], confirmations=1, exit_val=0)
 
 	def bob_rbf_status6(self):
-		if not self.proto.cap('rbf'):
-			return 'skip'
-		new_txid = self.read_from_tmpfile('rbf_txid2').strip()
-		return self.bob_rbf_status(rtFee[1],
-			'Replacement transaction has 2 confirmations',
-			rf'Replacing transactions:\s+{new_txid}')
+		return self._bob_rbf_status(rtFee[1], txid='rbf_txid3', confirmations=2, exit_val=0)
 
 	def _gen_pairs(self, n):
 		from mmgen.tool.api import tool_api

+ 1 - 1
test/cmdtest_d/ct_seedsplit.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/cmdtest_d/ct_shared.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 5 - 3
test/cmdtest_d/ct_swap.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:
@@ -14,6 +14,8 @@ test.cmdtest_d.ct_swap: asset swap tests for the cmdtest.py test suite
 
 from mmgen.protocol import init_proto
 
+from ..include.common import gr_uc
+
 from .ct_regtest import (
 	CmdTestRegtest,
 	rt_data,
@@ -21,7 +23,7 @@ from .ct_regtest import (
 	rt_pw,
 	cfg)
 
-sample1 = '=:ETH.ETH:0x86d526d6624AbC0178cF7296cD538Ecc080A95F1:0/1/0'
+sample1 = gr_uc[:24]
 sample2 = '00010203040506'
 
 class CmdTestSwap(CmdTestRegtest):
@@ -53,7 +55,7 @@ class CmdTestSwap(CmdTestRegtest):
 		),
 		'data': (
 			'OP_RETURN data operations',
-			('data_tx1_create',  'Creating a transaction with OP_RETURN data (hex-encoded ascii)'),
+			('data_tx1_create',  'Creating a transaction with OP_RETURN data (hex-encoded UTF-8)'),
 			('data_tx1_sign',    'Signing the transaction'),
 			('data_tx1_send',    'Sending the transaction'),
 			('data_tx1_chk',     'Checking the sent transaction'),

+ 1 - 1
test/cmdtest_d/ct_tool.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # Project source code repository: https://github.com/mmgen/mmgen-wallet
 # Licensed according to the terms of GPL Version 3.  See LICENSE for details.

+ 1 - 1
test/cmdtest_d/ct_wallet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/cmdtest_d/ct_xmr_autosign.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/cmdtest_d/ct_xmrwallet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/cmdtest_d/input.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # Project source code repository: https://github.com/mmgen/mmgen-wallet
 # Licensed according to the terms of GPL Version 3.  See LICENSE for details.

+ 1 - 1
test/colortest.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 
 """
 test/colortest.py: test color handling for the MMGen suite

+ 1 - 1
test/gentest.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/hashfunc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/include/cfg.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/include/coin_daemon_control.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 2 - 1
test/include/common.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -205,6 +205,7 @@ def write_to_file(fn, data, binary=False):
 		fn,
 		data,
 		quiet = True,
+		no_stdout = True,
 		binary = binary,
 		ignore_opt_outdir = True)
 

+ 1 - 1
test/include/ecc.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/include/pexpect.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/include/test_init.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/include/unit_test.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/misc/tool_api_test.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 
 """
 test.misc.tool_api_test: test the MMGen suite tool API

+ 1 - 1
test/objattrtest.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/objattrtest_d/oat_btc_mainnet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 
 """
 test.objattrtest_d.oat_btc_mainnet: BTC mainnet test vectors for MMGen data objects

+ 1 - 1
test/objattrtest_d/oat_common.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 
 """
 test.objattrtest_d.oat_common: shared data for MMGen data objects tests

+ 1 - 1
test/objtest.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/objtest_d/ot_btc_mainnet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 
 """
 test.objtest_d.ot_btc_mainnet: BTC mainnet test vectors for MMGen data objects

+ 1 - 1
test/objtest_d/ot_btc_testnet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 
 """
 test.objtest_d.ot_btc_testnet: BTC testnet test vectors for MMGen data objects

+ 1 - 1
test/objtest_d/ot_common.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 
 """
 test.objtest_d.ot_common: shared data for MMGen data objects tests

+ 1 - 1
test/objtest_d/ot_eth_mainnet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 
 """
 test.objtest_d.ot_eth_mainnet: ETH mainnet test vectors for MMGen data objects

+ 1 - 1
test/objtest_d/ot_ltc_mainnet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 
 """
 test.objtest_d.ot_ltc_mainnet: LTC mainnet test vectors for MMGen data objects

+ 1 - 1
test/objtest_d/ot_ltc_testnet.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 
 """
 test.objtest_d.ot_ltc_testnet: LTC testnet test vectors for MMGen data objects

+ 1 - 1
test/overlay/__init__.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/scrambletest.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/test-release.d/cfg.sh

@@ -1,7 +1,7 @@
 #!/usr/bin/env bash
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/test-release.sh

@@ -1,7 +1,7 @@
 #!/usr/bin/env bash
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories:

+ 1 - 1
test/tooltest.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/tooltest2.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by

+ 1 - 1
test/tooltest2_d/data.py

@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 #
 # MMGen Wallet, a terminal-based cryptocurrency wallet
-# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
+# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
 # Licensed under the GNU General Public License, Version 3:
 #   https://www.gnu.org/licenses
 # Public project repositories: