You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make go-regtest a first-class test harness for the upcoming soft-forks shipping in Bitcoin Inquisition (BIP54 Consensus Cleanup, BIP118 ANYPREVOUT, BIP119 CTV, BIP347 OP_CAT, BIP348 OP_CHECKSIGFROMSTACK, BIP349 OP_INTERNALKEY) and to expose first-class time-warping primitives so consumers can write deterministic activation tests without learning bitcoind RPC quirks.
End state: a developer who depends on CTV/CSFS/CAT/APO sets Config.BinaryPath = "/path/to/bitcoind-inquisition", calls rt.MineUntilActiveBIP(ctx, BIP119, addr, 2000), and gets a green test. CI matrices that run on Core skip Inquisition-only tests cleanly via rt.SupportsBIP(BIP119).
What lives where
Soft-fork rules live in bitcoind (Core or bitcoind-inquisition). go-regtest stays binary-agnostic.
go-regtest's job is the deterministic harness: pick the right binary, feed flags, observe activation state, and now — advance time.
The new layer: a curated BIPID registry that joins live getdeploymentinfo with BIP metadata so devs use typed constants instead of magic strings.
Layering: WarpTime → MineWithTimestamp → SetMockTime + WarpContext. ListDeployments/SupportsBIP → GetDeploymentInfoContext. Nothing reaches into r.client directly — every new wrapper goes through rawRPC or lockedClient per CLAUDE.md invariant #1.
The unblocking path to a runnable Inquisition test is #97 → #98 → #99 → #100 → #101 → #102 → #106 → #107. Time API (#103 → #104 → #105) is independent and can land in parallel after Phase 6.0 closes.
cmd/regtest-doctor diagnostic CLI — useful but not required for the API.
Renaming/refactoring existing MineUntilActive(string, ...) to take BIPID. New MineUntilActiveBIP is additive; string variant stays per CLAUDE.md invariant Config #5.
Bundling Inquisition build instructions into a Makefile target. README copy is sufficient.
Default-signet support (Inquisition's other operating mode).
Goal
Make go-regtest a first-class test harness for the upcoming soft-forks shipping in Bitcoin Inquisition (BIP54 Consensus Cleanup, BIP118 ANYPREVOUT, BIP119 CTV, BIP347 OP_CAT, BIP348 OP_CHECKSIGFROMSTACK, BIP349 OP_INTERNALKEY) and to expose first-class time-warping primitives so consumers can write deterministic activation tests without learning bitcoind RPC quirks.
End state: a developer who depends on CTV/CSFS/CAT/APO sets
Config.BinaryPath = "/path/to/bitcoind-inquisition", callsrt.MineUntilActiveBIP(ctx, BIP119, addr, 2000), and gets a green test. CI matrices that run on Core skip Inquisition-only tests cleanly viart.SupportsBIP(BIP119).What lives where
bitcoind(Core orbitcoind-inquisition). go-regtest stays binary-agnostic.BIPIDregistry that joins livegetdeploymentinfowith BIP metadata so devs use typed constants instead of magic strings.The shape of the change
Layering:
WarpTime→MineWithTimestamp→SetMockTime+WarpContext.ListDeployments/SupportsBIP→GetDeploymentInfoContext. Nothing reaches intor.clientdirectly — every new wrapper goes throughrawRPCorlockedClientper CLAUDE.md invariant #1.Milestones
Phase 6.0 — Inquisition foundation
Tier A — Binary plumbing
Config.BinaryPath+ script env-var indirection (foundation)bitcoind-inquisition→bitcoind) (depends on [Phase 6.A.1] Config.BinaryPath + script env-var indirection #97)Variant()getter fromgetnetworkinfo.subversion(depends on [Phase 6.A.1] Config.BinaryPath + script env-var indirection #97)Tier B — Deployment registry
BIPIDconstants +bipRegistryListDeployments(ctx)joining live + registry (depends on [Phase 6.B.1] BIPID constants + bipRegistry #100)SupportsBIP(ctx, BIPID)+MineUntilActiveBIP(depends on [Phase 6.B.1] BIPID constants + bipRegistry #100)Tier E — Acceptance + docs
TestExampleActivateBIP119(depends on [Phase 6.A.1] Config.BinaryPath + script env-var indirection #97–[Phase 6.B.3] SupportsBIP(ctx, BIPID) + MineUntilActiveBIP #102)Phase 6.1 — Time-warp expansion
Tier C — Time API
SetMockTime(ctx, unix)wrapperMineWithTimestamp(ctx, blocks, ts, miner)(depends on [Phase 6.C.1] SetMockTime(ctx, unix) wrapper #103)WarpTime(ctx, duration, miner)advancing MTP (depends on [Phase 6.C.2] MineWithTimestamp(ctx, blocks, ts, miner) #104)Tier E — Acceptance
TestExampleTimeoutWithoutLockinviaWarpTime(depends on [Phase 6.C.3] WarpTime(ctx, duration, miner) advancing MTP #105)TestVariantDetectionsmoke test (depends on [Phase 6.A.3] Variant() getter from getnetworkinfo.subversion #99)Dependency graph
The unblocking path to a runnable Inquisition test is #97 → #98 → #99 → #100 → #101 → #102 → #106 → #107. Time API (#103 → #104 → #105) is independent and can land in parallel after Phase 6.0 closes.
PR sequence
Per CLAUDE.md invariants: additive only, no breaking signatures, every public RPC method has a
Contextvariant,make ai-checkgreen before each PR.Related
VBParams,MineUntilActive,GetDeploymentInfo, and the testdummy worked example shipped in Phase 5.MineUntilActiveBIP(ctx, BIP118, miner, 2000)against abitcoind-inquisitionbuild.Out of scope (deferred)
cmd/regtest-doctordiagnostic CLI — useful but not required for the API.MineUntilActive(string, ...)to takeBIPID. NewMineUntilActiveBIPis additive; string variant stays per CLAUDE.md invariant Config #5.