1.12.3.0: Bitcoin Computer integration + aarch64 startup fix - #22
Closed
reallyshadydev wants to merge 7 commits into
Closed
1.12.3.0: Bitcoin Computer integration + aarch64 startup fix#22reallyshadydev wants to merge 7 commits into
reallyshadydev wants to merge 7 commits into
Conversation
reallyshadydev
force-pushed
the
fix/bitcoin-computer-integration
branch
from
August 3, 2026 23:17
0d213a0 to
34cbc63
Compare
Collaborator
Author
|
Force-pushed with the verified root cause for the arm64 startup failure: it is a SIGSEGV in the scheduler thread's first |
Backport of Bitcoin Core 0.13's bytespersigop implementation (bitcoin/bitcoin#7081). Sigop-dense transactions below the absolute MAX_STANDARD_TX_SIGOPS cap are no longer rejected from the mempool; instead CTxMemPoolEntry::GetTxSize() returns a virtual size of max(real size, sigops * bytespersigop), so density raises the required fee for relay and mining priority. This lets Bitcoin Computer transactions (many bare OP_CHECKMULTISIG sigops in small scripts) relay with default node settings; operators and miners no longer need bytespersigop=0 in wojakcoin.conf. Policy-only change: block validity (MAX_BLOCK_SIGOPS in ConnectBlock) is untouched, so upgraded and non-upgraded nodes remain in consensus.
Backport of the generatetoaddress RPC from Bitcoin Core 0.13: mine blocks directly to a supplied address without needing wallet keypool state. The existing generate RPC is refactored onto a shared generateBlocks() helper, unchanged in behavior. Lets the Bitcoin Computer test suite (which calls generateToAddress on regtest) run against WojakCore unmodified.
The linux-aarch64 release binaries crash with SIGSEGV immediately after logging 'scheduler thread start', so arm64 Docker containers loop under restart: always. Reported by the Bitcoin Computer team in bitcoin-computer/monorepo#456. Reproduced natively on Apple Silicon (linux/arm64 container, no emulation). An unstripped CI-replica build shows the scheduler thread faulting on the first boost::function invocation in the process: pthread_mutex_lock is reached from CScheduler::serviceQueue() with a garbage this pointer produced by the boost::bind member-function dispatch. Boost 1.59 (2015) headers are miscompiled by the gcc 11 toolchain on the ubuntu-22.04-arm runner; the same binary runs under linux/amd64 emulation, and Bitcoin Core's own aarch64 releases only ever paired boost 1.59 with gcc 5/6 era toolchains. Adopt Bitcoin Core v0.21's boost.mk (1.70.0), adapted for this tree: - download from archives.boost.io (bintray is gone) - wojakcore's library set (chrono, filesystem, program_options, system, thread, test) - backport boostorg/thread commit 74ff2db9 (shipped in 1.78) so boost.thread builds against glibc >= 2.34, where PTHREAD_STACK_MIN is no longer a preprocessor constant Verified on native linux/arm64 (ubuntu-22.04 + depends replica of the CI job): the identical build that crashed with exit 139 now reaches RPC readiness and mines regtest blocks via generatetoaddress.
Modernizes the other 2014-era network dependency alongside the boost update: 2.1.12 is the libevent Bitcoin Core shipped for years, httpserver.cpp already carries >=2.1 version guards, and this tree builds and runs against libevent 2.1.13 on macOS arm64. The 2.0.22 reuseaddr patch is upstream in 2.1.x and is dropped. (Initially investigated as the cause of the aarch64 startup crash; the actual cause was boost 1.59 - see the preceding commit. A native linux/arm64 depends build with libevent 2.1.12 alone still crashed, and with the boost update it runs.)
Start wojakcoind on regtest after the build, wait for RPC readiness, mine 5 blocks via generatetoaddress, and stop cleanly. On the linux-arm64 job this runs on the native arm64 runner - the same environment class as arm64 Docker hosts - so aarch64-only startup failures (like the boost 1.59 SIGSEGV fixed in this branch) fail the release instead of shipping. On timeout the step dumps the daemon log, dmesg, and full gdb thread backtraces.
First release carrying the Bitcoin Computer integration changes and the aarch64 startup fix (boost 1.70).
Documents the aarch64 startup fix, the bytespersigop policy change, and generatetoaddress. Points the docker pull example and the release workflow's tag example at 1.12.3.0.
reallyshadydev
force-pushed
the
fix/bitcoin-computer-integration
branch
from
August 3, 2026 23:57
03f8390 to
dd919b4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release version: 1.12.3.0 (
CLIENT_VERSION_REVISIONbumped inconfigure.acandsrc/clientversion.h; release notes indoc/release-notes/release-notes-1.12.3.0.md).Summary
Addresses the WojakCoin integration feedback from the Bitcoin Computer team in bitcoin-computer/monorepo#456 (review comment).
-bytespersigopas fee-based policy instead of rejection — backport of Bitcoin Core 0.13's bytespersigop implementation (-bytespersigop option to additionally limit sigops in transactions we relay and mine bitcoin/bitcoin#7081). Sigop-dense transactions below the absoluteMAX_STANDARD_TX_SIGOPS(16000) cap are no longer rejected from the mempool;CTxMemPoolEntry::GetTxSize()now returnsmax(real size, sigops * bytespersigop), so density raises the required fee for relay and mining instead. Bitcoin Computer transactions relay with default node settings — operators and miners no longer needbytespersigop=0inwojakcoin.conf.generatetoaddress(regtest) — the Bitcoin Computer test suite callsgenerateToAddressand can now run unmodified.generateis refactored onto a sharedgenerateBlocks()helper, unchanged in behavior.scheduler thread start, which is why arm64 containers loop underrestart: always. Reproduced natively on Apple Silicon (linux/arm64, no emulation); an unstripped CI-replica build shows the scheduler thread faulting on the process's firstboost::functioninvocation —pthread_mutex_lockreached fromCScheduler::serviceQueue()with a garbagethispointer out of theboost::bindmember-function dispatch. Boost 1.59 (2015) headers are miscompiled by gcc 11 on theubuntu-22.04-armrunner; the same binary works underlinux/amd64emulation, which is why the QEMU workaround "fixes" it. The new recipe is Bitcoin Core v0.21's proven boost.mk (1.70.0) adapted for this tree, plus a backport of boostorg/thread@74ff2db9 so boost.thread builds on glibc ≥ 2.34.ubuntu-22.04-armrunner (same environment class as arm64 Docker hosts), so aarch64-only startup failures fail the release with the daemon log,dmesg, and full gdb thread backtraces instead of shipping.No consensus changes
All changes are policy/RPC/build-level. Block validity is untouched:
MAX_BLOCK_SIGOPSenforcement inConnectBlock, block size limits, and everything undersrc/consensus/are unchanged. A block containing sigop-dense transactions was valid before and remains valid, so upgraded and non-upgraded nodes stay in consensus — matching the note in the Bitcoin Computer review thatbytespersigopis a standardness setting, not a consensus rule.Verification
Native linux/arm64 (Apple Silicon, colima/docker, no emulation):
1.12.2.0arm64 image: exits 139 (SIGSEGV) afterscheduler thread start— clean reproduction of the report.scheduler thread start→HTTP: creating work queue of depth 16→ RPC ready),generatetoaddress 5mines to height 5, clean shutdown.Full release workflow on this branch (run 30864031567): all four platforms build green — Linux aarch64 (including the new smoke test), Linux x86_64 (including the new smoke test), macOS arm64, and Windows x86_64. The aarch64 job's binary reports
WojakCore Daemon version v1.12.3.0.Regtest A/B (macOS arm64 build):
OP_CHECKMULTISIGoutputs) is rejected by the pre-fix binary with64: bad-txns-too-many-sigopsand accepted by this branch (mempool reports the virtual size, 4,820 = 241 × 20), then mined into a valid block.generatetoaddress 101 <addr>works; pre-fix binary returnsMethod not found.Follow-ups
platform: linux/amd64workaround stands.