-
Notifications
You must be signed in to change notification settings - Fork 174
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
wallet, contract: Implement contract change option #2388
wallet, contract: Implement contract change option #2388
Conversation
This supports specifying a transaction pick a change address from one of the inputs rather than creating a new change address for change when this boolean is true. It defaults to false, which is the original behavior.
dcfa5c1
to
fdffe1d
Compare
Tested with voting on testnet node and works. |
Tested with master key requirement by putting GPUGrid on the greylist. Worked correctly. |
Just adding an explanatory comment on why we need a boolean change_back_to_input_address, when it would seem to duplicate the functionality of CCoinControl. The key to understanding why we need this boolean rests in the fact that the destination address for change in CCoinControl must be set explicitly using SetDestination(address). If you use setCoins_in along with CCoinControl, then you don't need the change_back_to_input_address, and in fact it is ignored in that situation. However if you intend on having CreateTransaction CHOOSE the coins automatically by leaving setCoins_in empty, then without the boolean change_back_to_address, you would need to figure out the address you need to send the change to to specify in a CCoinControl object instead - catch-22. This is not optimal, since the case we are dealing with here is to pick an address of one of the inputs to return the change. In the instance where the inputs are actually being decided by SelectCoins in the CreateTransaction, it makes sense for CreateTransaction to determine the change address for one of the inputs after SelectCoins determines the inputs to be used, hence the need for this boolean. (Remember SelectCoins is a private member of CWallet.) A pretty good argument can be made to put the change_back_to_input_address in the CCoinControl class instead, which would avoid the extra parameter, but that is window dressing in my opinion, and other than avoiding an optional (defaulted) parameter on CreateTransaction, it doesn't really help anything. You still have to teach anything that consumes CCoinControl objects what to do with the change_back_to_input_address boolean... |
CreateTransaction already has special logic for contracts around line 1842. What about handling the logic there instead of adding a new parameter to the function or adding a variable to CCoinControl? One possible argument against this is (as mentioned in the PR body) doing it like this way would also allow RPC like sendtoaddress to use it, which frankly I'm against on two grounds:
I also think that this option should be enabled by default as this option does not affect the user's privacy. |
Yep. That is another good reason why I like this approach. It is very narrowly scoped with a defaulted parameter on the end which is not used anywhere (for right now) except this special case. The reason I did not extend the sendtoaddress RPC is that would add extra functionality not compatible with Bitcoin. You are probably right and we never should add it. On the comment around the logic around line 1842, that is exactly what we are doing, except you can't decide the input address until after the SelectCoins is done. Doing it in the change determination block, downstream, where you have setCoins_out is the right place. The only question is whether it should be conditioned on a boolean (which effectively comes from the GUI setting). I am not sure I agree with you on no effect on the user's privacy. In most contract sends, you have a burn address and a change address. Simply having the contract is a reduction of privacy, but I think most people that are privacy conscious would want the obfuscation of a newly generated change address, where people for convenience and backup ease would want the change returned to one of the input addresses. I think the GUI checkbox (and boolean) should remain to give users a choice. I am on the fence on which way to default it. Perhaps @cyrossignol or @barton2526 can weigh in. |
Random change addresses in non-message contracts are basically no-ops for privacy as assuming the single return to be sender's change is a fair assumption to make in my opinion.
You're right, what I've meant was that with minor refactoring(change is common enough to justify moving the |
Haha exactly. Your way is probably better but the change is not significant enough for me to do the work to make the change. It is good enough as is… |
@div72, it sounds like we have agreed this PR is ok in its existing state, and that we will NOT be extending rpc calls to provide this functionality in RPC in a more generalized way. If so, please approve the PR. |
@div72 has found something very weird in testing... from our slack conversation.... Sorry for the delay on approving the PR, I was testing it. There seems to be a weird edge case where if a contract is sent with the option on, then another contract is sent with the option off and a normal transaction is sent; the normal transaction in the end seems to return the change back to itself. See https://testnet.gridcoinstats.eu/tx/24d1369f55094ea3ef468f366733f72adac963d387b07339862e679b6e87cd37 and https://testnet.gridcoinstats.eu/tx/5d4f7ee1d6d7cf788ffe6430efbd68dc23d4a224911c62e3749bd862e0429f81. Jim Owens 2:49 PM div72 2:51 PM Jim Owens 2:53 PM div72 2:53 PM Jim Owens 2:54 PM div72 2:56 PM Jim Owens 2:56 PM div72 3:11 PM Jim Owens 3:11 PM div72 3:13 PM Jim Owens 3:21 PM div72 3:23 PM Jim Owens 6:22 PM |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ACK 9b0e959, I was able to reproduce the issue on the tip of development. Since I used beacon contracts, I assume there's a problem with reserving a key as a beacon address. I'll investigate further.
The functionality provided by this PR seems to be working without an issue otherwise.
@div72, can you create an issue to track the above problem since it is now confirmed to be independent of this PR? Thanks. |
|
…ening flags, don't enable it for Windows gridcoin-community#2284 (@barton2526) - build: add upstream compiler warnings gridcoin-community#2288 (@jamescowens) - rpc: Create getblockbymintime gridcoin-community#2290 (@RoboticMind) - cd: generate release binaries using GitHub actions gridcoin-community#2249 (@div72) - util: port upstream span changes gridcoin-community#2323 (@div72) - rpc: add additional ban time fields to listbanned gridcoin-community#2334 (@barton2526) - test: Add sanity_tests from upstream gridcoin-community#2343 (@barton2526) - util, test: Don't allow Base58 decoding of non-Base58 strings. Add Base58 tests. Add whitespace tests. gridcoin-community#2345 (@barton2526) - test: Add tests for monetary value formatting and parsing. Clean up includes in rpc_tests gridcoin-community#2348 (@barton2526) - rpc: Implement -rpcwait and -rpcwaittimeout gridcoin-community#2349 (@jamescowens) - test: Add crypto_tests (@upstream gridcoin-community#2372 from barton2526) - test: Add test for GCC bug 90348 gridcoin-community#2380 (@barton2526) - build: add python3.10, 3.11 alias to AC_PATH_PROGS call in configure gridcoin-community#2386 (@barton2526) - wallet, contract: Implement contract change option gridcoin-community#2388 (@jamescowens) - gui: Implement privacy mode gridcoin-community#2399 (@jamescowens) - util: Implement -reindex option, improve -loadblock option gridcoin-community#2394 (@jamescowens) - gui: Implement Alt-7 for unlock and lock of wallet gridcoin-community#2406 (@jamescowens) - gui, voting: Add a one minute timer to check for current poll expiring and update gui gridcoin-community#2416 (@jamescowens) - gui: Implement a warning about split CPID/email mismatch condition gridcoin-community#2414 (@jamescowens) - util: clean obsolete config keys gridcoin-community#2424 (@div72) - net: Implement an upper limit of 950 for max network connections gridcoin-community#2426 (@jamescowens) - build: libevent 2.1.12-stable gridcoin-community#2226 (@barton2526) - build: Bump minimum QT support to 5.9.5, Remove obsolete checks gridcoin-community#2251 (@barton2526) - doc: Update to https where possible gridcoin-community#2230 (@barton2526) - refactor: Replace fprintf with tfm::format gridcoin-community#2262 (@barton2526) - qt: Replace deprecated QSignalMapper by lambda expressions gridcoin-community#2261 (@barton2526) - refactor: Use functions guaranteed to be locale independent (ToLower, IsDigit, IsSpace) gridcoin-community#2265 (@barton2526) - refactor: Replace std::to_string with locale-independent alternative gridcoin-community#2266 (@barton2526) - refactor: small python cleanup gridcoin-community#2267 (@barton2526) - refactor: Replace local dependent string functions with non-locale versions in strencodings.h/cpp gridcoin-community#2270 (@amescowens) - ci: Update KNOWN_VIOLATIONS list for the linter for functions we don't care are locale-dependent gridcoin-community#2271 (@barton2526) - refactor: move block storage functions to src/node/blockstorage gridcoin-community#2273 (@div72) - refactor: Replace deprecated Qt::SystemLocale{Short,Long}Date, Fix 'QDateTime is deprecated' warnings gridcoin-community#2275 (@barton2526) - rpc: optimize getblockbynumber gridcoin-community#2289 (@barton2526) - gui: Update connect statements to conform to Qt 5 standard gridcoin-community#2281 (@jamescowens) - depends: Bump ccache and curl gridcoin-community#2297 (@barton2526) - ci: only print depends/apt output if the step fails gridcoin-community#2287 (@div72) - depends: Update to openSSL 1.1.1l gridcoin-community#2302 (@barton2526) - rpc: Don't use floating point in getreceivedbyaddress gridcoin-community#2310 (@barton2526) - LibreSSL doesn't define OPENSSL_VERSION, use LIBRESSL_VERSION_TEXT instead gridcoin-community#2306 (@barton2526) - build: update m4 gridcoin-community#2317 (@div72) - qt: Replace deprecated Qt functions gridcoin-community#2316 (@barton2526) - build: set minimum required Boost to 1.60 gridcoin-community#2318 (@barton2526) - util: Don't use gmtime() or localtime() gridcoin-community#2319 (@barton2526) - build: Update univalue subtree gridcoin-community#2335 (@barton2526) - refactor: use include guards instead of #pragma once gridcoin-community#2336 (@div72) - refactor: Scraper thread safety and code cleanup gridcoin-community#2315 (@jamescowens) - qt: Follow Qt docs when implementing rowCount and columnCount gridcoin-community#2333 (@barton2526) - qt: Notificator class refactoring. Notificator always takes 3 args. Remove Growl support. gridcoin-community#2352 (@barton2526) - build: pin OpenSSL version for MacOS gridcoin-community#2354 (@div72) - build, util: Update leveldb to 1.22 (@upstream Bitcoin gridcoin-community#2353 from jamescowens) - test: Update transaction_tests and associated JSON files from upstream gridcoin-community#2356 (@barton2526) - test: Update script_p2sh_tests from upstream gridcoin-community#2357 (@barton2526) - refactor: port upstream ui_interface changes gridcoin-community#2355 (@div72) - contract: parse strings for claim and message types gridcoin-community#2359 (@div72) - test: Update sigopcount_tests and transaction_tests from upstream gridcoin-community#2361 (@barton2526) - test, refactor: Update script_tests from upstream gridcoin-community#2360 (@barton2526) - test: Update util_tests from upstream gridcoin-community#2363 (@barton2526) - test: Update script test JSON files from upstream gridcoin-community#2364 @barton2526) - refactor: split clientversion from version gridcoin-community#2367 (@div72) - random: port upstream random changes gridcoin-community#2368 (@div72) - refactor: convert C-style (void) parameter lists to C++ style () gridcoin-community#2373 (@barton2526) - build: Disable -fcf-protection for mingw win32 gridcoin-community#2377 (@jamescowens) - gui: Add text output and dialog boxes for -help and -version in GUI client gridcoin-community#2378 (@jamescowens) - test, refactor: Use FastRandomContext for all tests. Add a header for test_gridcoin gridcoin-community#2381 (@barton2526) - depends: avoid system harfbuzz and bz2 gridcoin-community#2382 (@barton2526) - doc: Update Windows build instructions gridcoin-community#2383 (@barton2526) - refactor: replace QDateTime::fromTime_t with QDateTime::fromSecsSinceEpoch gridcoin-community#2387 (@barton2526) - util: Port of Bitcoin upstream base58.h/cpp at a85442f62bf157b07849accd495c55c73535dc73 gridcoin-community#2384 (@jamescowens) - test: update base58_encode_decode.json from upstream gridcoin-community#2391 (@barton2526) - depends: Port libdmg-hfsplus changes from upstream gridcoin-community#2389 (@barton2526) - doc: Port newer build documentation from Bitcoin gridcoin-community#2162 (@nathanielcwm) - rpc: Change getmininginfo to getstakinginfo gridcoin-community#2393 (@jamescowens) - researcher: Prefer CPID with active beacon for primary CPID gridcoin-community#2404 (@scribblemaniac) - contract: separate legacy type parsing gridcoin-community#2396 (@div72) - refactor: Pass values by reference gridcoin-community#2408 (@Pythonix) - net: only adjust time with data from outbound nodes gridcoin-community#2411 (@div72) - rpc: Change call to FormatISO8601DateTime to FormatISO8601DateTimeDashSep in scanforunspent gridcoin-community#2413 (@jamescowens) - build: Adjust depends packages to successfully compile on OpenSUSE gridcoin-community#2260 (@jamescowens) - gui: Enable masking of cpid in privacy mode gridcoin-community#2420 (@jamescowens) - doc: Update license year range to 2022 gridcoin-community#2421 (@barton2526) - contrib: install_db4: use local config.guess/sub gridcoin-community#2436 (@div72) - gui: update translations gridcoin-community#2442 (@div72, @3man001) - qt: Remove stray QT4 references gridcoin-community#2220 (@barton2526) - util: Remove old boost hacks/workarounds gridcoin-community#2231 (@barton2526) - refactor: Remove sprintf and printf gridcoin-community#2269 (@jamescowens) - depends: Remove boost::program_options dependency gridcoin-community#2277 (@barton2526) - refactor: Drop noop gcc version checks gridcoin-community#2278 (@barton2526) - util: Remove unused itostr gridcoin-community#2280 (@barton2526) - util: Remove deprecated random number generator functions gridcoin-community#2236 (@jamescowens) - depends: cleanup package configure flags gridcoin-community#2279 (@barton2526) - rpc: remove 'label' filter for rpc command help gridcoin-community#2282 (@barton2526) - wallet: remove unused fNoncriticalErrors variable from CWalletDB::FindWalletTx gridcoin-community#2283 (@barton2526) - refactor: Optimize and Cleanup CScript::FindAndDelete gridcoin-community#2294 (@barton2526) - wallet: Remove unused AskPassphraseDialog::Decrypt gridcoin-community#2299 (@barton2526) - refactor, qt: Drop redundant setEditTriggers(NoEditTriggers) calls, Fix typo in QtInputSupport check gridcoin-community#2308 (@barton2526) - release: Remove gitian gridcoin-community#2293 (@jamescowens) - util: Update scheduler and remove Boost chrono gridcoin-community#2330 (@jamescowens) - qt: remove gridcoinresearch.pro gridcoin-community#2332 (@div72) - test: Remove unused function dumpKeyInfo gridcoin-community#2347 (@barton2526) - build: remove glibc back compat gridcoin-community#2351 (@barton2526) - net: remove SOCKS4 support (@core and GUI gridcoin-community#2385 from barton2526) - net: remove obsolete "reply" command gridcoin-community#2366 (@div72) - net: Remove I2P support from netbase & Correct HE IPv6 Tunnel Broker gridcoin-community#2409 (@Pythonix) - qt: Remove locked coins loop gridcoin-community#2410 (@Pythonix) - wallet: Close DB on error, use memory_cleanse gridcoin-community#2221 (@barton2526) - build: Clean remnants of QTBUG-34748 fix gridcoin-community#2224 (@barton2526) - build: use -isysroot over --sysroot on macOS gridcoin-community#2225 (@barton2526) - trivial, rpc: Fix and cleanup listreceivedbyX documentation, General Typos gridcoin-community#2227 (@barton2526) - trivial: Unbreak build with Boost 1.72.0 gridcoin-community#2228 (@barton2526) - doc: Large collection of typos, grammar fixes, and proper capitalization gridcoin-community#2247 (@barton2526) - lint: Fix linter warning, fix typo gridcoin-community#2276 (@barton2526) - qt: Do not translate file extensions gridcoin-community#2295 (@barton2526) - refactor: Drop redundant QString calls gridcoin-community#2296 (@barton2526) - rpc: Print OpenSSL version fix gridcoin-community#2298 (@barton2526) - gui: Add back in accidentally deleted condition for UnlockStaking and Unlock cases in AskPassphraseDialog::textChanged() gridcoin-community#2305 (@jamescowens) - rpc: ParseHash: Fail when length is not 64 gridcoin-community#2313 (@barton2526) - Fix locking on WSL using flock instead of fcntl gridcoin-community#2314 (@barton2526) - rpc: Fix breakage in protocol.cpp caused by change atoi to ParseInt gridcoin-community#2307 (@jamescowens) - net: Small upstream FIXME gridcoin-community#2320 (@barton2526) - refactor: Fix advanced compiler warnings gridcoin-community#2292 (@jamescowens) - poll: Fix the possible infinite loop warning on GetChoices() in result.cpp gridcoin-community#2322 (@jamescowens) - qt: fix broken research wizard signal gridcoin-community#2324 (@div72) - refactor: Fix three minor code scanner findings gridcoin-community#2327 (@barton2526) - Fix build with Boost 1.77.0 gridcoin-community#2329 (@barton2526) - build: Misc upstream depends fixes gridcoin-community#2331 (@barton2526) - wallet: Fix improper indent in encryptWallet gridcoin-community#2339 (@jamescowens) - wallet: Bugfix - Fundrawtransaction: don't terminate when keypool is empty gridcoin-community#2337 (@barton2526) - depends: Fix build for Apple Silicon gridcoin-community#2342 (@div72) - build: fix -fstack-clash-protection spam for Clang gridcoin-community#2340 (@div72) - util, test: Don't allow Base32/64-decoding or ParseMoney(…) on strings with embedded NUL characters. Add tests. Add negative test case. gridcoin-community#2344 (@barton2526) - test: Repair transaction_tests.cpp (baseline) gridcoin-community#2350 (@jamescowens) - scraper: Fix scraper deadlock and make activebeforesb dynamic (not require restart) gridcoin-community#2358 (@jamescowens) - scraper: Move lock on cs_mapParts in RecvManifest gridcoin-community#2370 (@jamescowens) - build: Make changes to use Gridcoin x.y.z.w client versions gridcoin-community#2371 (@jamescowens) - refactor, build: Upstream fixes for the /crypto files. Implement Keccak and SHA3 gridcoin-community#2365 (@barton2526) - util: fix FormatVersion gridcoin-community#2376 (@div72) - net: initialize nMessageSize to uint32_t max gridcoin-community#2390 (@barton2526) - contract: fix double usage of contract change addresses gridcoin-community#2395 (@div72) - build: patch qt to explicitly define previously implicit header include gridcoin-community#2397 (@div72) - Fix breakage introduced by use of FormatISO8601DateTime gridcoin-community#2398 (@jamescowens) - gui: Fix bug in recent transaction list gridcoin-community#2403 (@jamescowens) - build: Drop macports support gridcoin-community#2401 (@barton2526) - util: Check if specified config file cannot be opened gridcoin-community#2400 (@barton2526) - net: Fix masking of irrelevant bits in address groups gridcoin-community#2412 (@Pythonix) - rpc: accept int block number for getblocksbatch gridcoin-community#2415 (@scribblemaniac) - staking, gui: Fixes a missing miner search interval update for no coins corner case gridcoin-community#2430 (@jamescowens) - gui: Add uiInterface.BeaconChanged() call after ActivatePending gridcoin-community#2438 (@jamescowens)
Added - build: add stack-clash and control-flow protection options to hardening flags, don't enable it for Windows gridcoin-community#2284 (@barton2526) - build: add upstream compiler warnings gridcoin-community#2288 (@jamescowens) - rpc: Create getblockbymintime gridcoin-community#2290 (@RoboticMind) - cd: generate release binaries using GitHub actions gridcoin-community#2249 (@div72) - util: port upstream span changes gridcoin-community#2323 (@div72) - rpc: add additional ban time fields to listbanned gridcoin-community#2334 (@barton2526) - test: Add sanity_tests from upstream gridcoin-community#2343 (@barton2526) - util, test: Don't allow Base58 decoding of non-Base58 strings. Add Base58 tests. Add whitespace tests. gridcoin-community#2345 (@barton2526) - test: Add tests for monetary value formatting and parsing. Clean up includes in rpc_tests gridcoin-community#2348 (@barton2526) - rpc: Implement -rpcwait and -rpcwaittimeout gridcoin-community#2349 (@jamescowens) - test: Add crypto_tests (@upstream gridcoin-community#2372 from barton2526) - test: Add test for GCC bug 90348 gridcoin-community#2380 (@barton2526) - build: add python3.10, 3.11 alias to AC_PATH_PROGS call in configure gridcoin-community#2386 (@barton2526) - wallet, contract: Implement contract change option gridcoin-community#2388 (@jamescowens) - gui: Implement privacy mode gridcoin-community#2399 (@jamescowens) - util: Implement -reindex option, improve -loadblock option gridcoin-community#2394 (@jamescowens) - gui: Implement Alt-7 for unlock and lock of wallet gridcoin-community#2406 (@jamescowens) - gui, voting: Add a one minute timer to check for current poll expiring and update gui gridcoin-community#2416 (@jamescowens) - gui: Implement a warning about split CPID/email mismatch condition gridcoin-community#2414 (@jamescowens) - util: clean obsolete config keys gridcoin-community#2424 (@div72) - net: Implement an upper limit of 950 for max network connections gridcoin-community#2426 (@jamescowens) Changed - build: libevent 2.1.12-stable gridcoin-community#2226 (@barton2526) - build: Bump minimum QT support to 5.9.5, Remove obsolete checks gridcoin-community#2251 (@barton2526) - doc: Update to https where possible gridcoin-community#2230 (@barton2526) - refactor: Replace fprintf with tfm::format gridcoin-community#2262 (@barton2526) - qt: Replace deprecated QSignalMapper by lambda expressions gridcoin-community#2261 (@barton2526) - refactor: Use functions guaranteed to be locale independent (ToLower, IsDigit, IsSpace) gridcoin-community#2265 (@barton2526) - refactor: Replace std::to_string with locale-independent alternative gridcoin-community#2266 (@barton2526) - refactor: small python cleanup gridcoin-community#2267 (@barton2526) - refactor: Replace local dependent string functions with non-locale versions in strencodings.h/cpp gridcoin-community#2270 (@amescowens) - ci: Update KNOWN_VIOLATIONS list for the linter for functions we don't care are locale-dependent gridcoin-community#2271 (@barton2526) - refactor: move block storage functions to src/node/blockstorage gridcoin-community#2273 (@div72) - refactor: Replace deprecated Qt::SystemLocale{Short,Long}Date, Fix 'QDateTime is deprecated' warnings gridcoin-community#2275 (@barton2526) - rpc: optimize getblockbynumber gridcoin-community#2289 (@barton2526) - gui: Update connect statements to conform to Qt 5 standard gridcoin-community#2281 (@jamescowens) - depends: Bump ccache and curl gridcoin-community#2297 (@barton2526) - ci: only print depends/apt output if the step fails gridcoin-community#2287 (@div72) - depends: Update to openSSL 1.1.1l gridcoin-community#2302 (@barton2526) - rpc: Don't use floating point in getreceivedbyaddress gridcoin-community#2310 (@barton2526) - LibreSSL doesn't define OPENSSL_VERSION, use LIBRESSL_VERSION_TEXT instead gridcoin-community#2306 (@barton2526) - build: update m4 gridcoin-community#2317 (@div72) - qt: Replace deprecated Qt functions gridcoin-community#2316 (@barton2526) - build: set minimum required Boost to 1.60 gridcoin-community#2318 (@barton2526) - util: Don't use gmtime() or localtime() gridcoin-community#2319 (@barton2526) - build: Update univalue subtree gridcoin-community#2335 (@barton2526) - refactor: use include guards instead of #pragma once gridcoin-community#2336 (@div72) - refactor: Scraper thread safety and code cleanup gridcoin-community#2315 (@jamescowens) - qt: Follow Qt docs when implementing rowCount and columnCount gridcoin-community#2333 (@barton2526) - qt: Notificator class refactoring. Notificator always takes 3 args. Remove Growl support. gridcoin-community#2352 (@barton2526) - build: pin OpenSSL version for MacOS gridcoin-community#2354 (@div72) - build, util: Update leveldb to 1.22 (@upstream Bitcoin gridcoin-community#2353 from jamescowens) - test: Update transaction_tests and associated JSON files from upstream gridcoin-community#2356 (@barton2526) - test: Update script_p2sh_tests from upstream gridcoin-community#2357 (@barton2526) - refactor: port upstream ui_interface changes gridcoin-community#2355 (@div72) - contract: parse strings for claim and message types gridcoin-community#2359 (@div72) - test: Update sigopcount_tests and transaction_tests from upstream gridcoin-community#2361 (@barton2526) - test, refactor: Update script_tests from upstream gridcoin-community#2360 (@barton2526) - test: Update util_tests from upstream gridcoin-community#2363 (@barton2526) - test: Update script test JSON files from upstream gridcoin-community#2364 @barton2526) - refactor: split clientversion from version gridcoin-community#2367 (@div72) - random: port upstream random changes gridcoin-community#2368 (@div72) - refactor: convert C-style (void) parameter lists to C++ style () gridcoin-community#2373 (@barton2526) - build: Disable -fcf-protection for mingw win32 gridcoin-community#2377 (@jamescowens) - gui: Add text output and dialog boxes for -help and -version in GUI client gridcoin-community#2378 (@jamescowens) - test, refactor: Use FastRandomContext for all tests. Add a header for test_gridcoin gridcoin-community#2381 (@barton2526) - depends: avoid system harfbuzz and bz2 gridcoin-community#2382 (@barton2526) - doc: Update Windows build instructions gridcoin-community#2383 (@barton2526) - refactor: replace QDateTime::fromTime_t with QDateTime::fromSecsSinceEpoch gridcoin-community#2387 (@barton2526) - util: Port of Bitcoin upstream base58.h/cpp at a85442f62bf157b07849accd495c55c73535dc73 gridcoin-community#2384 (@jamescowens) - test: update base58_encode_decode.json from upstream gridcoin-community#2391 (@barton2526) - depends: Port libdmg-hfsplus changes from upstream gridcoin-community#2389 (@barton2526) - doc: Port newer build documentation from Bitcoin gridcoin-community#2162 (@nathanielcwm) - rpc: Change getmininginfo to getstakinginfo gridcoin-community#2393 (@jamescowens) - researcher: Prefer CPID with active beacon for primary CPID gridcoin-community#2404 (@scribblemaniac) - contract: separate legacy type parsing gridcoin-community#2396 (@div72) - refactor: Pass values by reference gridcoin-community#2408 (@Pythonix) - net: only adjust time with data from outbound nodes gridcoin-community#2411 (@div72) - rpc: Change call to FormatISO8601DateTime to FormatISO8601DateTimeDashSep in scanforunspent gridcoin-community#2413 (@jamescowens) - build: Adjust depends packages to successfully compile on OpenSUSE gridcoin-community#2260 (@jamescowens) - gui: Enable masking of cpid in privacy mode gridcoin-community#2420 (@jamescowens) - doc: Update license year range to 2022 gridcoin-community#2421 (@barton2526) - contrib: install_db4: use local config.guess/sub gridcoin-community#2436 (@div72) - gui: update translations gridcoin-community#2442 (@div72, @3man001) Removed - qt: Remove stray QT4 references gridcoin-community#2220 (@barton2526) - util: Remove old boost hacks/workarounds gridcoin-community#2231 (@barton2526) - refactor: Remove sprintf and printf gridcoin-community#2269 (@jamescowens) - depends: Remove boost::program_options dependency gridcoin-community#2277 (@barton2526) - refactor: Drop noop gcc version checks gridcoin-community#2278 (@barton2526) - util: Remove unused itostr gridcoin-community#2280 (@barton2526) - util: Remove deprecated random number generator functions gridcoin-community#2236 (@jamescowens) - depends: cleanup package configure flags gridcoin-community#2279 (@barton2526) - rpc: remove 'label' filter for rpc command help gridcoin-community#2282 (@barton2526) - wallet: remove unused fNoncriticalErrors variable from CWalletDB::FindWalletTx gridcoin-community#2283 (@barton2526) - refactor: Optimize and Cleanup CScript::FindAndDelete gridcoin-community#2294 (@barton2526) - wallet: Remove unused AskPassphraseDialog::Decrypt gridcoin-community#2299 (@barton2526) - refactor, qt: Drop redundant setEditTriggers(NoEditTriggers) calls, Fix typo in QtInputSupport check gridcoin-community#2308 (@barton2526) - release: Remove gitian gridcoin-community#2293 (@jamescowens) - util: Update scheduler and remove Boost chrono gridcoin-community#2330 (@jamescowens) - qt: remove gridcoinresearch.pro gridcoin-community#2332 (@div72) - test: Remove unused function dumpKeyInfo gridcoin-community#2347 (@barton2526) - build: remove glibc back compat gridcoin-community#2351 (@barton2526) - net: remove SOCKS4 support (@core and GUI gridcoin-community#2385 from barton2526) - net: remove obsolete "reply" command gridcoin-community#2366 (@div72) - net: Remove I2P support from netbase & Correct HE IPv6 Tunnel Broker gridcoin-community#2409 (@Pythonix) - qt: Remove locked coins loop gridcoin-community#2410 (@Pythonix) Fixed - wallet: Close DB on error, use memory_cleanse gridcoin-community#2221 (@barton2526) - build: Clean remnants of QTBUG-34748 fix gridcoin-community#2224 (@barton2526) - build: use -isysroot over --sysroot on macOS gridcoin-community#2225 (@barton2526) - trivial, rpc: Fix and cleanup listreceivedbyX documentation, General Typos gridcoin-community#2227 (@barton2526) - trivial: Unbreak build with Boost 1.72.0 gridcoin-community#2228 (@barton2526) - doc: Large collection of typos, grammar fixes, and proper capitalization gridcoin-community#2247 (@barton2526) - lint: Fix linter warning, fix typo gridcoin-community#2276 (@barton2526) - qt: Do not translate file extensions gridcoin-community#2295 (@barton2526) - refactor: Drop redundant QString calls gridcoin-community#2296 (@barton2526) - rpc: Print OpenSSL version fix gridcoin-community#2298 (@barton2526) - gui: Add back in accidentally deleted condition for UnlockStaking and Unlock cases in AskPassphraseDialog::textChanged() gridcoin-community#2305 (@jamescowens) - rpc: ParseHash: Fail when length is not 64 gridcoin-community#2313 (@barton2526) - Fix locking on WSL using flock instead of fcntl gridcoin-community#2314 (@barton2526) - rpc: Fix breakage in protocol.cpp caused by change atoi to ParseInt gridcoin-community#2307 (@jamescowens) - net: Small upstream FIXME gridcoin-community#2320 (@barton2526) - refactor: Fix advanced compiler warnings gridcoin-community#2292 (@jamescowens) - poll: Fix the possible infinite loop warning on GetChoices() in result.cpp gridcoin-community#2322 (@jamescowens) - qt: fix broken research wizard signal gridcoin-community#2324 (@div72) - refactor: Fix three minor code scanner findings gridcoin-community#2327 (@barton2526) - Fix build with Boost 1.77.0 gridcoin-community#2329 (@barton2526) - build: Misc upstream depends fixes gridcoin-community#2331 (@barton2526) - wallet: Fix improper indent in encryptWallet gridcoin-community#2339 (@jamescowens) - wallet: Bugfix - Fundrawtransaction: don't terminate when keypool is empty gridcoin-community#2337 (@barton2526) - depends: Fix build for Apple Silicon gridcoin-community#2342 (@div72) - build: fix -fstack-clash-protection spam for Clang gridcoin-community#2340 (@div72) - util, test: Don't allow Base32/64-decoding or ParseMoney(…) on strings with embedded NUL characters. Add tests. Add negative test case. gridcoin-community#2344 (@barton2526) - test: Repair transaction_tests.cpp (baseline) gridcoin-community#2350 (@jamescowens) - scraper: Fix scraper deadlock and make activebeforesb dynamic (not require restart) gridcoin-community#2358 (@jamescowens) - scraper: Move lock on cs_mapParts in RecvManifest gridcoin-community#2370 (@jamescowens) - build: Make changes to use Gridcoin x.y.z.w client versions gridcoin-community#2371 (@jamescowens) - refactor, build: Upstream fixes for the /crypto files. Implement Keccak and SHA3 gridcoin-community#2365 (@barton2526) - util: fix FormatVersion gridcoin-community#2376 (@div72) - net: initialize nMessageSize to uint32_t max gridcoin-community#2390 (@barton2526) - contract: fix double usage of contract change addresses gridcoin-community#2395 (@div72) - build: patch qt to explicitly define previously implicit header include gridcoin-community#2397 (@div72) - Fix breakage introduced by use of FormatISO8601DateTime gridcoin-community#2398 (@jamescowens) - gui: Fix bug in recent transaction list gridcoin-community#2403 (@jamescowens) - build: Drop macports support gridcoin-community#2401 (@barton2526) - util: Check if specified config file cannot be opened gridcoin-community#2400 (@barton2526) - net: Fix masking of irrelevant bits in address groups gridcoin-community#2412 (@Pythonix) - rpc: accept int block number for getblocksbatch gridcoin-community#2415 (@scribblemaniac) - staking, gui: Fixes a missing miner search interval update for no coins corner case gridcoin-community#2430 (@jamescowens) - gui: Add uiInterface.BeaconChanged() call after ActivatePending gridcoin-community#2438 (@jamescowens)
This PR introduces a new setting, contractchangetoinputaddress, that defaults to false, and which controls whether the change from a contract transaction goes back to an input address rather than a new address being created.
Setting this new setting to true will cause the wallet to return the change on an input address for the contract transaction, and avoid the creation of a new change address. This reduces anonymity, which is why the default setting is false to retain the original behavior, but addresses #2326, and any other contract type when set to true.
Note that the CreateTransaction function in wallet.h/cpp has been extended to have a default boolean change_back_to_input_address to support this, and also allow this same feature to be done in a general sendtoaddress RPC (not yet implemented).
A checkbox has also been implemented to be able to set the value of contractchangetoinputaddress from the gui. This uses the dynamic settings file to enable this to be shared between the core and the GUI and allow the setting to be immediately active and the state maintained over a wallet restart.
Closes #2326