rpc: testmempoolaccept returns transaction fee #19063

pull rajarshimaitra wants to merge 47 commits into bitcoin:master from rajarshimaitra:fee-in-testmempoolaccept changing 60 files +1002 −543
  1. rajarshimaitra commented at 3:04 pm on May 24, 2020: contributor

    This solves the issue #19507.

    Note: testmempoolaccept only returns 'fee' when 'allowed' is true. The reason being, fee calculation can return garbage or worse can fail if malformed transactions are fed into the RPC call. One disadvantage is, this will not return fee for a correct transaction but not accepted into mempool for other reasons (ex: tx already exists in a block).

    Open for suggestions for other ways of handling the above issue. But my guess is it should be that much of a problem.

    On Approach: This approach calculates the transaction fee explicitly in the rpc callback. Which requires mempool lock and some cache memory allocation. So the processing for the same is getting doubled. The other way was to return the calculated fee from deep within the validation process which required touching consensus critical codes. So I stuck with the first one.

    Update: After the initial review approach is changed to extract the fee from validation calculation.

  2. Prevent UB in DeleteLock() function 458992b06d
  3. refactor: Add LockStackItem type alias 8d8921abd3
  4. refactor: Add LockPair type alias f511f61dda
  5. refactor: Refactor duplicated code into LockHeld() 58e6881bc5
  6. Replace thread_local g_lockstack with a mutex-protected map
    This change prevents UB in case of early g_lockstack destroying.
    
    Co-authored-by: Wladimir J. van der Laan <laanwj@protonmail.com>
    26c093a995
  7. Convert Qt to new serialization 65c589e45e
  8. refactor: Replace const char* to std::string
    Some functions should be returning std::string instead of const char*.
    This commit changes that.
    c57f03ce17
  9. doc: Add and fix comments about never destroyed objects 90eb027204
  10. [doc] Add comment for m_headers_cache 3bdc7c2d39
  11. [net processing] Message handling for getcfheaders.
    if -peerblockfilters is configured, handle requests for cfheaders.
    f6b58c1506
  12. [test] Add test for cfheaders 5308c97cca
  13. rpc: factor out RpcInterruptionPoint from dumptxoutset fa7fc5a8e0
  14. rpc: Make gettxoutsetinfo/GetUTXOStats interruptible
    Also, add interruption points to scantxoutset
    fa756928c3
  15. gui: update Qt base translations for macOS release
    These haven't been updated since their addition, so this updates the list that
    controls which qt base translations are bundled with the macOS binary, to all the
    languages that are available with qt 5.9.8.
    
    This could probably be improved in some way, however qt updates are infrequent,
    and I didn't want to spend any more time looking at this. Also given that no-one
    seems to have noticed and/or reported this it wouldn't seem high-priority.
    
    Could be backported to 0.20.1.
    69bfcac27a
  16. test: pep-8 p2p_getdata.py fab47375fe
  17. test: Default mininode.wait_until timeout to 60s 999922baed
  18. test: Remove global wait_until from p2p_getdata fa80b4788b
  19. DrahtBot added the label RPC/REST/ZMQ on May 24, 2020
  20. DrahtBot added the label Tests on May 24, 2020
  21. in src/rpc/rawtransaction.cpp:937 in 7f12b7f927 outdated
    950@@ -933,6 +951,18 @@ static UniValue testmempoolaccept(const JSONRPCRequest& request)
    951             result_0.pushKV("reject-reason", state.GetRejectReason());
    952         }
    953     }
    954+    // Calculate and push tx fee, only if test_accept_res == true
    


    MarcoFalke commented at 3:39 pm on May 24, 2020:
    No need to calculate this again. AcceptToMemoryPool already did this calculation. It should be possible for AcceptToMemoryPool to simply pass out the fee.

    MarcoFalke commented at 3:40 pm on May 24, 2020:
    Since the lock is released, I am not sure if this is even safe, since coins could vanish?!

    MarcoFalke commented at 3:43 pm on May 24, 2020:
    See also #15810 (comment)

    rajarshimaitra commented at 3:44 pm on May 24, 2020:
    Yes. Will try that. That went scarily into validation section of the protocol. So skipped that as an initial trial.

    rajarshimaitra commented at 7:28 pm on May 24, 2020:

    It seems the way to extract fee is by changing the signature of AcceptToMemoryPool and passing a CAmount& argument. But this function is being called in many other (nontrivial) places. So all of them need to be modified, and none of them needs to get back the fee. Passing trivial CAmount ref in every other places can result into ugly code. Also I am afraid the changes are becoming an overkill (security bug?) just to get a feature.

    Is this the only way to do it, or there are other methods possible?

    Currently halting implementation till further feedback.


    MarcoFalke commented at 7:51 pm on May 24, 2020:

    It is possible to add optional return parameters by passing in a pointer. If the pointer is NULL (the default), it will be ignored. If the pointer points to something the return value will be written there. Thus no caller will need to be updated because the return value is optional.

    Example draft:

    0bool AcceptToMemoryPool(CTxMemPool& pool, TxValidationState &state, const CTransactionRef &tx,
    1                        std::list<CTransactionRef>* plTxnReplaced,
    2                        bool bypass_limits, const CAmount nAbsurdFee,
    3                        CAmount* fee_out=nullptr, bool test_accept=false) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
    
  22. rajarshimaitra force-pushed on May 24, 2020
  23. MarcoFalke commented at 3:39 pm on May 24, 2020: member
    Nice Concept ACK
  24. MarcoFalke removed the label Tests on May 24, 2020
  25. Convert wallet to new serialization ef17c03e07
  26. Convert LimitedString to formatter 92beff15d3
  27. Remove old serialization primitives 71f016c6eb
  28. tests: Add fuzzing harness for CCoinsViewCache f9b22e3bdb
  29. RPC: testmempoolaccept returns transaction fee
    This commit returns 'fee' in the testmempoolaccept rpc results.
    'fee' is only returned if the transaction is accepted in mempool.
    
    Existing functional tests are modified to reflect changed behaviour.
    86e224b7c4
  30. rajarshimaitra force-pushed on May 25, 2020
  31. rajarshimaitra commented at 1:41 pm on May 25, 2020: contributor
    Thanks @MarcoFalke for the review and suggestion. Made the changes, rebased, tests passing.
  32. wallettool: Add a salvage command c87770915b
  33. Add basic test for bitcoin-wallet salvage cdd955e580
  34. wallet: remove -salvagewallet d321046f4b
  35. walletdb: don't automatically salvage when corruption is detected 8ebcbc85c6
  36. walletdb: remove fAggressive from Salvage
    The only call to Salvage set fAggressive = true so remove that parameter
    and always use DB_AGGRESSIVE
    07250b8dce
  37. Move BerkeleyEnvironment::Salvage into BerkeleyBatch::Recover ced95d0e43
  38. Expose a version of ReadKeyValue and use it in RecoverKeysOnlyFilter
    We need this exposed for BerkeleyBatch::Recover to be moved out.
    2741774214
  39. Make BerkeleyBatch::Recover and WalletBatch::RecoverKeysOnlyFilter standalone
    Instead of having these be class static functions, just make them be
    standalone. Also removes WalletBatch::Recover which just passed through
    to BerkeleyBatch::Recover.
    b426c7764d
  40. Move RecoverDatabaseFile and RecoverKeysOnlyFilter into salvage.{cpp/h} 9ea2d258b4
  41. Move RecoverKeysOnlyFilter into RecoverDataBaseFile ea337f2d03
  42. Add release notes about salvage changes 84ae0578b6
  43. Merge #19059: gui: update Qt base translations for macOS release
    69bfcac27a83440092bc6e61904ded910ed4baf4 gui: update Qt base translations for macOS release (fanquake)
    
    Pull request description:
    
      These haven't been updated since their addition, so this updates the list that
      controls which qt base translations are bundled with the macOS binary, to all the
      languages that are available with qt 5.9.8.
    
      This could probably be improved in some way, however qt updates are infrequent,
      and I didn't want to spend any more time looking at this. Also given that no-one
      seems to have noticed and/or reported this it wouldn't seem high-priority.
    
      Could be backported to 0.20.1.
    
      Master:
      ![master](https://user-images.githubusercontent.com/863730/82729428-11bce200-9d2a-11ea-8569-ee65d46c7403.png)
    
      This PR:
      ![fixed](https://user-images.githubusercontent.com/863730/82729427-0f5a8800-9d2a-11ea-86dd-1e6a3e211efa.png)
    
    ACKs for top commit:
      hebasto:
        ACK 69bfcac27a83440092bc6e61904ded910ed4baf4, tested on macOS 10.15.
    
    Tree-SHA512: df142fb16097deb514e72e005b73aafc4eb4ff0c17e423ba5040a3ec6874020a733e1c5259a88923580e71ef73c16222aed28f482b8c270a544a85b745a7b327
    14f8447777
  44. Merge #19010: net processing: Add support for getcfheaders
    5308c97ccaf0955e5840956bc1636108a43e6f46 [test] Add test for cfheaders (Jim Posen)
    f6b58c150686e90bc4952976e488b1605f3ae02a [net processing] Message handling for getcfheaders. (Jim Posen)
    3bdc7c2d3977a7864aacea80bffc4df7f37cac51 [doc] Add comment for m_headers_cache (John Newbery)
    
    Pull request description:
    
      Support `getcfheaders` requests when `-peerblockfilters` is set.
    
      Does not advertise compact filter support in version messages.
    
    ACKs for top commit:
      jkczyz:
        ACK 5308c97ccaf0955e5840956bc1636108a43e6f46
      MarcoFalke:
        re-ACK 5308c97cca , only change is doc related 🗂
      theStack:
        ACK 5308c97ccaf0955e5840956bc1636108a43e6f46 :rocket:
    
    Tree-SHA512: 240fc654f6f634c191d9f7628b6c4801f87ed514a1dd55c7de5d454d4012d1c09509a2d5a246bc7da445cd920252b4cd56a493c060cdb207b04af4ffe53b95f7
    7d32cce3e7
  45. Merge #18867: tests: Add fuzzing harness for CCoinsViewCache
    f9b22e3bdb54acb2f830b3ebbad47ff17dfb5781 tests: Add fuzzing harness for CCoinsViewCache (practicalswift)
    
    Pull request description:
    
      Add fuzzing harness for `CCoinsViewCache`.
    
      See [`doc/fuzzing.md`](https://github.com/bitcoin/bitcoin/blob/master/doc/fuzzing.md) for information on how to fuzz Bitcoin Core. Don't forget to contribute any coverage increasing inputs you find to the [Bitcoin Core fuzzing corpus repo](https://github.com/bitcoin-core/qa-assets).
    
      Happy fuzzing :)
    
    ACKs for top commit:
      MarcoFalke:
        ACK f9b22e3bdb 📫
    
    Tree-SHA512: 4fa79aab683875eef128b672cf199909c86e4d2ed7c406f006fa27a546dafc9cb0061c4de5e660e622458072f1dab69dbf6b6b03d5b863f81c5710bf4cee6c0c
    d3b0ef80f6
  46. Merge #19056: rpc: Make gettxoutsetinfo/GetUTXOStats interruptible
    fa756928c3f455943086051c5fe1d5bb09962248 rpc: Make gettxoutsetinfo/GetUTXOStats interruptible (MarcoFalke)
    fa7fc5a8e0fcf9ca81e84b3631f18ae40502be60 rpc: factor out RpcInterruptionPoint from dumptxoutset (MarcoFalke)
    
    Pull request description:
    
      Make it interruptible, so that shutdown doesn't block for up to one hour.
    
      Fixes (partially) #13217
    
    ACKs for top commit:
      Empact:
        Code Review ACK https://github.com/bitcoin/bitcoin/pull/19056/commits/fa756928c3f455943086051c5fe1d5bb09962248
      laanwj:
        Code review ACK fa756928c3f455943086051c5fe1d5bb09962248
    
    Tree-SHA512: 298261e0ff7d79fab542b8f6828cc0ac451cbafe396d5f0816c9d36437faba1330f5c4cb2a25c5540e202bfb9783da6ec858bd453056ce488d21e36335d3d42c
    13397dc78f
  47. Merge #18881: Prevent UB in DeleteLock() function
    90eb027204f5a9d7c00fa97d4112243bd37a9012 doc: Add and fix comments about never destroyed objects (Hennadii Stepanov)
    26c093a9957756f3743c2347fe0abd90f81159c4 Replace thread_local g_lockstack with a mutex-protected map (Hennadii Stepanov)
    58e6881bc5be002e8ddbc9b75422c0deae66a2df refactor: Refactor duplicated code into LockHeld() (Hennadii Stepanov)
    f511f61dda4e860079153d5e51d64658cc265283 refactor: Add LockPair type alias (Hennadii Stepanov)
    8d8921abd35c3ac1b8ebacb11de8e1bbc7b28d66 refactor: Add LockStackItem type alias (Hennadii Stepanov)
    458992b06d80eb568141f60a33d38e12e894e27a Prevent UB in DeleteLock() function (Hennadii Stepanov)
    
    Pull request description:
    
      Tracking our instrumented mutexes (`Mutex` and `RecursiveMutex` types) requires that all involved objects should not be destroyed until after their last use. On master (ec79b5f86b22ad8f77c736f9bb76c2e4d7faeaa4) we have two problems related to the object destroying order:
      - the function-local `static` `lockdata` object that is destroyed at [program exit](https://en.cppreference.com/w/cpp/utility/program/exit)
      - the `thread_local` `g_lockstack` that is destroyed at [thread exit](https://en.cppreference.com/w/cpp/language/destructor)
    
      Both cases could cause UB at program exit in so far as mutexes are used in other static object destructors.
    
      Fix #18824
    
    ACKs for top commit:
      MarcoFalke:
        re-ACK 90eb027204, only change is new doc commit 👠
      ryanofsky:
        Code review ACK 90eb027204f5a9d7c00fa97d4112243bd37a9012 because all the changes look correct and safe. But I don't know the purpose of commit  26c093a9957756f3743c2347fe0abd90f81159c4 "Replace thread_local g_lockstack with a mutex-protected map (5/6)." It seems like it could have a bad impact on debug performance, and the commit message and PR description don't give a reason for the change.
    
    Tree-SHA512: 99f29157fd1278994e3f6eebccedfd9dae540450f5f8b980518345a89d56b635f943a85b20864cef087027fd0fcdb4880b659ef59bfe5626d110452ae22031c6
    fe1357a03a
  48. Merge #19032: Serialization improvements: final step
    71f016c6eb42e1ac2c905e04ba4d20c2009e533f Remove old serialization primitives (Pieter Wuille)
    92beff15d3ae2646c00bd78146d7592a7097ce9c Convert LimitedString to formatter (Pieter Wuille)
    ef17c03e074b6c3f185afa4eff572ba687c2a171 Convert wallet to new serialization (Pieter Wuille)
    65c589e45e8b8914698a0fd25cd5aafdda30869c Convert Qt to new serialization (Pieter Wuille)
    
    Pull request description:
    
      This is the final step 🥳 of the serialization improvements extracted from #10785.
    
      It converts the LimitedString wrapper to a new-style formatter, and updates the wallet and Qt code to use the new serialization framework. Finally all remaining old primitives are removed.
    
    ACKs for top commit:
      jonatack:
        ACK 71f016c6eb42e1ac2 reviewed diff, builds/tests/re-fuzzed.
      laanwj:
        Code review ACK 71f016c6eb42e1ac2c905e04ba4d20c2009e533f
    
    Tree-SHA512: d952194bc73259f6510bd4ab1348a1febbbf9862af30f905991812fb0e1f23f15948cdb3fc662be54d648e8f6d95b11060055d2e7a8c2cb5bf008224870b1ea1
    dcacea096e
  49. Remove outdated comment about DER encoding 4c825792dd
  50. Merge #19060: test: Remove global wait_until from p2p_getdata
    fa80b4788bbe3ef00c5d767c0d89ba9809d8707c test: Remove global wait_until from p2p_getdata (MarcoFalke)
    999922baed3a80b581ce46daa01c4cbca4fcbfd8 test: Default mininode.wait_until timeout to 60s (MarcoFalke)
    fab47375fe0bdec1e557e087fdb0707c4dfa7cc2 test: pep-8 p2p_getdata.py (MarcoFalke)
    
    Pull request description:
    
      Using the global wait_until makes it impossible to adjust the timeout based on the hardware the test is running on.
    
      Fix that by using the mininode member function.
    
      So for example, `./test/functional/p2p_getdata.py  --timeout-factor=0.04` gives a timeout of 2.4 seconds.
    
    ACKs for top commit:
      laanwj:
        ACK fa80b4788bbe3ef00c5d767c0d89ba9809d8707c
    
    Tree-SHA512: ebb1b7860a64451de2b8ee9a0966faddb13b84af711f6744e8260d7c9bc0b382e8fb259897df5212190821e850ed30d4d5c2d7af45a97f207fd4511b06b6674a
    4af01b37d4
  51. Merge #18918: wallet: Move salvagewallet into wallettool
    84ae0578b6c68dda145ca65fef510ce0fdac0d7b Add release notes about salvage changes (Andrew Chow)
    ea337f2d0318a860f695698cfb3aa91c03ded858 Move RecoverKeysOnlyFilter into RecoverDataBaseFile (Andrew Chow)
    9ea2d258b46e8a9776100633585ed0feede5c2a4 Move RecoverDatabaseFile and RecoverKeysOnlyFilter into salvage.{cpp/h} (Andrew Chow)
    b426c7764d26e280e1f814cf36e050743c45cd12 Make BerkeleyBatch::Recover and WalletBatch::RecoverKeysOnlyFilter standalone (Andrew Chow)
    2741774214168eb287c7066d6823afe5e570381d Expose a version of ReadKeyValue and use it in RecoverKeysOnlyFilter (Andrew Chow)
    ced95d0e43389fe62b5d30fcc7c42dbca0e88242 Move BerkeleyEnvironment::Salvage into BerkeleyBatch::Recover (Andrew Chow)
    07250b8dcebe2b97ed0fd900ad35cba4091b8ecf walletdb: remove fAggressive from Salvage (Andrew Chow)
    8ebcbc85c652665b78dcfd2ad55fa67cafd42c73 walletdb: don't automatically salvage when corruption is detected (Andrew Chow)
    d321046f4bb4887742699c586755a21f3a2edbe1 wallet: remove -salvagewallet (Andrew Chow)
    cdd955e580dff99f3fa440494ed2b348f7f094af Add basic test for bitcoin-wallet salvage (Andrew Chow)
    c87770915b88d195d264b58111c64142b1965cfa wallettool: Add a salvage command (Andrew Chow)
    
    Pull request description:
    
      Removes the `-salvagewallet` startup option and adds a `salvage` command to the `bitcoin-wallet` tool. As such, `-salvagewallet` is removed. Additionally, the automatic salvage that is done if the wallet file fails to load is removed.
    
      Lastly the salvage code entirely is moved out entirely into `bitcoin-wallet` from `walletdb.{cpp/h}` and `db.{cpp/h}`.
    
    ACKs for top commit:
      jonatack:
        ACK 84ae0578b6c68dda145ca65fef510ce0fdac0d7b feedback taken, and compared to my previous review, the bitcoin-wallet salvage command now seems to run and it exits without raising. The new test passes at both 9454105 and 84ae057 so as a sanity check I'd agree there is room for improvement, if possible.
      MarcoFalke:
        re-ACK 84ae0578b6 🏉
      Empact:
        Code Review ACK https://github.com/bitcoin/bitcoin/pull/18918/commits/84ae0578b6c68dda145ca65fef510ce0fdac0d7b
      ryanofsky:
        Code review ACK 84ae0578b6c68dda145ca65fef510ce0fdac0d7b. Lot of small changes since previous review: added verify step before salvage, added basic test in new commit, removed unused scanstate variable and warnings parameter, tweaked various comments and strings, moved fsuccess variable declaration
      meshcollider:
        Concept / light code review ACK 84ae0578b6c68dda145ca65fef510ce0fdac0d7b
    
    Tree-SHA512: 05be116b56ecade1c58faca1728c8fe4b78f0a082dbc2544a3f7507dd155f1f4f39070bd1fe90053444384337bc48b97149df5c1010230d78f8ecc08e69d93af
    520e435b5e
  52. doc : add link to readme.md in the first section 1c91ffefcf
  53. Merge #19061: doc: Add link to Visual Studio build readme
    1c91ffefcf54d22f805c86318ea32d23b9d20c96 doc : add link to readme.md in the first section (pad)
    
    Pull request description:
    
      I have searched how to do it in this doc for some time :-(
      I think it might help other newbies interested in building with visual studio.
    
    ACKs for top commit:
      hebasto:
        ACK 1c91ffefcf54d22f805c86318ea32d23b9d20c96, a new link works as expected :)
    
    Tree-SHA512: 42ef3ba374bced9b4ab0010fe8c30de06f59ff8a84f8e02f8a91f33e7e403cf91d624fc7df3f45096df53171a90b9ff60277969cc30f1357d92094ad72ca9d53
    48e114e0a8
  54. Merge #19073: Remove outdated comment about DER encoding
    4c825792dd9f4eaf4936c3e376ac7a5c177528e2 Remove outdated comment about DER encoding (Elichai Turkel)
    
    Pull request description:
    
      This comment got me confused about the status of BIP66 (Thanks jnewbery for explaining)
      The comment was added in: https://github.com/bitcoin/bitcoin/pull/3843
      But in https://github.com/bitcoin/bitcoin/pull/5713 strict DER encoding was enforced in consensus,
      and is now it's buried and enforced by the height of the block here: https://github.com/bitcoin/bitcoin/blob/4af01b37d40246cd1fdb54719855927e36a36b46/src/validation.cpp#L1889
    
      P.S. This is also quite confusing: https://github.com/bitcoin/bitcoin/blob/4af01b37d40246cd1fdb54719855927e36a36b46/src/validation.cpp#L1560-L1563 But seems to be intentional: https://github.com/bitcoin/bitcoin/blob/4af01b37d40246cd1fdb54719855927e36a36b46/src/validation.cpp#L1510-L1511
    
    ACKs for top commit:
      laanwj:
        ACK 4c825792dd9f4eaf4936c3e376ac7a5c177528e2
    
    Tree-SHA512: 7afbbae84ed4ecfaa0a273ae024b14f2b7ffe65307f078086fe0b5b645c57722bc2952fb15d167d9e4fa5b052d1d0ac6e5e33f57e8fc881c0ea611d352bccc1e
    cffbf1eb9a
  55. Merge #19004: refactor: Replace const char* to std::string
    c57f03ce1741b38af448bec7b22ab9f8ac21f067 refactor: Replace const char* to std::string (Calvin Kim)
    
    Pull request description:
    
      Rationale: Addresses #19000
      Some functions should be returning std::string instead of const char*.
      This commit changes that.
    
      Main benefits/reasoning:
    
      1.  The functions never return nullptr, so returning a string makes code at call sites easier to review (reviewers don't have to read the source code to verify that a nullptr is never returned)
      2. All call sites convert to string anyway
    
    ACKs for top commit:
      MarcoFalke:
        re-ACK c57f03ce17 (no changes since previous review) 🚃
      Empact:
        Fair enough, Code Review ACK https://github.com/bitcoin/bitcoin/pull/19004/commits/c57f03ce1741b38af448bec7b22ab9f8ac21f067
      practicalswift:
        ACK c57f03ce1741b38af448bec7b22ab9f8ac21f067 -- patch looks correct
      hebasto:
        re-ACK c57f03ce1741b38af448bec7b22ab9f8ac21f067
    
    Tree-SHA512: 9ce99bb38fe399b54844315048204cafce0f27fd8f24cae357fa7ac6f5d8094d57bbf5f5c1f5878a65f2d35e4a3f95d527eb17f49250b690c591c0df86ca84fd
    9ccaee1d5e
  56. RPC: testmempoolaccept returns transaction fee
    This commit returns 'fee' in the testmempoolaccept rpc results.
    'fee' is only returned if the transaction is accepted in mempool.
    
    Existing functional tests are modified to reflect changed behaviour.
    a9d6f398d5
  57. in src/validation.cpp:478 in 86e224b7c4 outdated
    473@@ -474,8 +474,8 @@ class MemPoolAccept
    474         const bool m_test_accept;
    475     };
    476 
    477-    // Single transaction acceptance
    478-    bool AcceptSingleTransaction(const CTransactionRef& ptx, ATMPArgs& args) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
    479+    // Single transaction acceptance, optionally takes an arguement to return tx fee to the caller
    480+    bool AcceptSingleTransaction(const CTransactionRef& ptx, ATMPArgs& args, CAmount* fee_out=nullptr) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
    


    MarcoFalke commented at 10:59 am on May 26, 2020:
    I think the goal of ATMPArgs was that the function signatures don’t ever need to change again. So I’d suggest to put the new arg there as well
  58. rajarshimaitra closed this on May 27, 2020

  59. rajarshimaitra deleted the branch on May 27, 2020
  60. DrahtBot locked this on Feb 15, 2022

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2024-07-03 01:12 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me