Today I came across Luke Dashjr's patch and decided to apply it to my Bitcoin Core node. I integrated the patching process in the script with which I compile my Bitcoin Core:
#!/bin/bash if [[ "$UID" -ne 0 ]]; then echo "Run me as root."; exit 1; fi s_code_dir=/usr/local/src script_d=$(dirname "$0") apply_patch_of_lukedj() { file_to_be_patched=${s_code_dir}/bitcoin-${rls}/src/script/interpreter.cpp backup_of_the_original=${script_d}/interpreter.cpp.${rls}.b patch_file=${script_d}/filter-ordinals.patch if [[ ! -f "$backup_of_the_original" ]]; then cp "$file_to_be_patched" "$backup_of_the_original" && echo "$file_to_be_patched backed up." fi patch "$file_to_be_patched" <"$patch_file" } dpnds_debian_bookworm=( automake cmake curl g++-multilib libtool libboost-all-dev binutils bsdmainutils pkg-config patch bison ) for d in "${dpnds_debian_bookworm[@]}"; do apt install -y "$d"; done echo "Go to https://github.com/bitcoin/bitcoin/releases/latest and give me the version, e.g. 26.0"; read rls rls_fl="v${rls}.tar.gz" cd "$s_code_dir" wget -q "https://github.com/bitcoin/bitcoin/archive/refs/tags/${rls_fl}" tar -xzf "${rls_fl}" && rm "${rls_fl}" cd "bitcoin-${rls}" && echo "Applying the patch of LukeDJ?[Y/any_other_key]";read ch if [[ "$ch" == y ]]; then apply_patch_of_lukedj fi ./autogen.sh && echo "autogen.sh finished. Press C to continue or any other key to cancel.[C/any_other_key]"; read ch if [[ "$ch" != 'c' ]]; then exit; fi ./configure --disable-tests --disable-bench --enable-util-cli --with-utils=no half_of_my_cores=$(echo "$(nproc) / 2"|bc) make -j "$half_of_my_cores" >make_log 2>&1 make install >make_i_log 2>&1
Apologies to the reader - It is my first time with patch. If your setup is different than mine feel free to tweak s_code_dir and patch_file in my script. The most important tweak that I made to Luke's patch is getting rid of the first two lines, so that it looks like so:
@@ -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; + if (script.GetOp(pc_tmp, next_opcode, dummy_data) && next_opcode == OP_IF) { + return set_error(serror, SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS); + } + } } else if (fExec || (OP_IF <= opcode && opcode <= OP_ENDIF)) switch (opcode) {
I was explicit in specifying in my script the file to be patched, hence no need for those two lines. The script builds Bitcoin Core on the latest Debian stable, if you are on another distribution you may need to rewrite the dpnds_debian_bookworm array and the for loop that iterates through it. When running the script at the moment of applying the patch you should get the output like that:
patching file /usr/local/src/bitcoin-26.0/src/script/interpreter.cpp Hunk #1 succeeded at 479 (offset -25 lines).
where:
  • "Hunk #1" refers to the first section of the patch file that contains changes to be applied to the target file, interpreter.cpp.
  • "succeeded" indicates that the patching process for this hunk was successful,"at 479" specifies the line number in the target file where the patch has been successfully applied
  • "(offset -25 lines)" indicates that there was an offset of 25 lines between the location where the patch was expected to be applied and where it was actually applied. My guess is that offset occurs due to differences between the original interpreter.cpp for which Luke published his patch in February of 2023 and the most recent version of interpreter.cpp , published in December of 2023. Despite that the patching was successful.
Bearing in mind the possibility of the inscription/ordinal convention changing faster than Bitcoin Core's release cadence mempool filtering such as this seems to be a sensible solution as Luke reassures that the spam filters can be updated very fast.
I don't know what the patch is or why one would want to use it, but this is still cool, thank you for sharing!
reply
The patch is to stop spam called ordinals incriptions, e.g. people publishing media files on the Bitcoin blockchain.
reply
"Spam"
This is a network for enemies. If it's able to be done, it's not spam. And after Luke's run-in with Samourai Wallet, I have very little respect for him.
As someone who wants to get into mining, I'm open to receiving fees from anyone.
And if you just want low fees... Too bad, that's not gonna last
reply
People sending spam emails, they also are able to pay for it and to do it. But these emails are still spam.
P.S. Fees may not rise if the spammers are not kept at bay anyway.
reply
IDK, you sound like a dog barking at the moon. It's not going to end Bitcoin, and as long as it's economical, someone will include their transactions. Trying to be the arbiter of what's permissible is a slippery damn slope. GL
reply
deleted by author
reply