Skip to content

Instantly share code, notes, and snippets.

View jonatack's full-sized avatar

Jon Atack jonatack

View GitHub Profile
@jonatack
jonatack / bitcoin_debugging.md
Created September 15, 2019 09:50 — forked from fjahr/bitcoin_debugging.md
Debugging Bitcoin Core

This document is currently optimized for MacOS. If you would like to help me add Linux equivalent commands, please let me know.

Debugging Bitcoin Core

This guide is designed to give beginners of C++ development and/or people new to the bitcoin core code base an overview of the tools available for debugging issues as well as giving hints where issues may trip you up.

Table of contents

--- a/src/script/interpreter.cpp
+++ b/src/script/interpreter.cpp
@@ -504,6 +504,14 @@ bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript&
return set_error(serror, SCRIPT_ERR_MINIMALDATA);
}
stack.push_back(vchPushValue);
+ if ((flags & SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS) && opcode == OP_FALSE) {
+ auto pc_tmp = pc;
+ opcodetype next_opcode;
+ valtype dummy_data;
@jonatack
jonatack / how-to-compile-bitcoin-core-from-source-for-linux-debian.md
Last active December 20, 2021 01:26
How to compile Bitcoin Core with wallet, from source, on Linux Debian

How to compile Bitcoin Core from source on Linux Debian and run the unit and functional tests

Last updated: 16 March 2019

Hi! This article now lives at https://jonatack.github.io/articles/how-to-compile-bitcoin-core-and-run-the-tests where I will continue to update it. Cheers.

This is a simplified compilation of the various docs in https://github.com/bitcoin/bitcoin/tree/master/doc. Don't hesitate to read them for more information.

All steps are to be run from your terminal emulator, i.e. the command line.

@jonatack
jonatack / private.xml
Last active January 4, 2021 22:59
Karabiner custom setting to use the correct shift keys and break bad typing habits. Drop this into your private.xml file using https://github.com/tekezo/Karabiner for Mac OS, click on "Reload XML", then click on "Use the correct shift keys" at the top of the Karabiner Change Key settings.
<item>
<name>Use the correct shift keys.</name>
<identifier>private.correct_shift_keys</identifier>
<autogen>--KeyToKey-- KeyCode::BACKQUOTE, ModifierFlag::SHIFT_L, KeyCode::VK_NONE</autogen>
<autogen>--KeyToKey-- KeyCode::1, ModifierFlag::SHIFT_L, KeyCode::VK_NONE</autogen>
<autogen>--KeyToKey-- KeyCode::2, ModifierFlag::SHIFT_L, KeyCode::VK_NONE</autogen>
<autogen>--KeyToKey-- KeyCode::3, ModifierFlag::SHIFT_L, KeyCode::VK_NONE</autogen>
<autogen>--KeyToKey-- KeyCode::4, ModifierFlag::SHIFT_L, KeyCode::VK_NONE</autogen>
@jonatack
jonatack / bitcoin-core-pr-11413-review-notes.md
Last active June 25, 2020 07:12
Notes from reviewing Bitcoin Core PR #11413 "[wallet] [rpc] sendtoaddress/sendmany: Add explicit feerate option" by kallewoof

Notes from reviewing Bitcoin Core PR #11413

"[wallet] [rpc] sendtoaddress/sendmany: Add explicit feerate option" by @kallewoof

bitcoin/bitcoin#11413


src/wallet/rpcwallet.cpp

@jonatack
jonatack / benchmark_building_a_hash.rb
Last active June 18, 2020 14:31
Benchmark building a Ruby hash: #each - #each_with_object - #reduce - Hash[map] - #map.zip(map).to_h - #reduce-merge
require 'benchmark/ips'
Benchmark.ips do |x|
Property = Struct.new(:name, :original_name)
PROPERTIES = [
Property.new("Clo", "Chloe" ),
Property.new("Jon", "Jonathan" ),
Property.new("Kris", "Kristin" ),
~/projects/bitcoin/bitcoin (pr/16202)$ git diff
diff --git a/src/net.cpp b/src/net.cpp
index d5e74d928f..d7371d80df 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -596,6 +596,9 @@ bool CNode::ReceiveMsgBytes(const char *pch, unsigned int nBytes, bool& complete
if (i == mapRecvBytesPerMsgCmd.end())
i = mapRecvBytesPerMsgCmd.find(NET_MESSAGE_COMMAND_OTHER);
assert(i != mapRecvBytesPerMsgCmd.end());
+
~/projects/bitcoin/src ((HEAD detached at origin/pr/15996))$ bitcoin-cli -regtest help bumpfee
bumpfee "txid" ( options )
Bumps the fee of an opt-in-RBF transaction T, replacing it with a new transaction B.
An opt-in RBF transaction with the given txid must be in the wallet.
The command will pay the additional fee by reducing change outputs or adding inputs when necessary. It may add a new change output if one does not already exist.
If `totalFee` (DEPRECATED) is given, adding inputs is not supported, so there must be a single change output that is big enough or it will fail.
All inputs in the original transaction will be included in the replacement transaction.
The command will fail if the wallet or mempool contains a transaction that spends one of T's outputs.
By default, the new fee will be calculated automatically using estimatesmartfee.
@jonatack
jonatack / bitcoin-pr-15943.md
Created May 15, 2019 11:37
bitcoin-pr-15943
(pr/15943)$ test/functional/test_runner.py rpc_uptime --coverage
Temporary test directory at /tmp/test_runner_₿_🏃_20190515_133545
Initializing coverage directory at /tmp/coveragehsj4pafy
Remaining jobs: [rpc_uptime.py]
1/1 - rpc_uptime.py passed, Duration: 1 s

TEST          | STATUS    | DURATION

rpc_uptime.py | ✓ Passed  | 1 s