Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Bitcoind Bundle Laravel Package

nbobtc/bitcoind-bundle

Symfony bundle that integrates the nbobtc/bitcoind-php client with Bitcoin Core’s JSON-RPC API, simplifying connection configuration and service injection so Symfony apps can query the daemon for blockchain and wallet operations.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. For a Laravel/PHP shop the honest starting point is that nbobtc/bitcoind-bundle is a Symfony2 bundle, not a Laravel package. It carries no domain logic — roughly four files of dependency-injection glue (Extension, Configuration, service definition) that wire the nbobtc/bitcoind-php JSON-RPC client into the Symfony container. There is no transport abstraction, no batching, no caching, no retry policy, no domain model over Bitcoin Core’s RPC surface. The only thing transferable to a Laravel app is the underlying client library; the bundle itself is a non-starter because it registers a Symfony Bundle and expects the Symfony kernel. Architecturally the package is nearly free to replace and equally nearly worthless to preserve — the value it represents is the ~50 lines of service wiring it saves, which is a half-day in a Laravel service provider.

Integration feasibility. Wiring a JSON-RPC client into Laravel is trivial under any library. The real feasibility question is the dependency behind it: you must operate a Bitcoin Core node, or pay a managed provider. That node — storage, sync time, RPC compatibility, credential handling — is the dominant cost, not the PHP code. A regtest spike proving the read paths should take two days; a credible testnet rehearsal takes two weeks. Read-only chain queries (balances, confirmations, transaction lookup) are low-complexity. Anything touching wallet RPCs — send, sign, fund movement — steps up sharply in blast radius and should be treated as a separate review, not part of the initial integration.

Technical risk. High, but concentrated almost entirely outside the package:

  • Abandonment. 15 stars, 0 dependents, no community to surface or patch defects. Symfony 2.x has been end-of-life since 2018 and PHP 5.x earlier still; the bundle and its transitive requirements have had no security maintenance for years. Treat it as a code sample, not a supported dependency.
  • RPC surface drift. Bitcoin Core removes and renames RPCs on a rolling cadence — getinfo, getaccount*, move, sendfrom are gone or deprecated; signrawtransaction became signrawtransactionwithwallet; account-based wallet semantics have been superseded by descriptor wallets. Every method we intend to call must be verified against the specific Core version on our node, not against the library’s documentation.
  • Credential handling. RPC auth is basic-auth over HTTP with credentials in configuration. In Laravel these must come from the secret manager, the endpoint must never be public, and TLS or a Unix socket is mandatory. The package offers no opinion here, so the posture is whatever we build.
  • Trust boundary. The node is a stateful, high-value, internet-adjacent service holding a multi-hundred-gigabyte dataset. Package risk is negligible next to node-operations risk.

Key questions for the team.

  1. Do we need wallet RPCs at all, or is this read-only chain and address data? (Read-only materially reduces scope.)
  2. Which Bitcoin Core version and deployment model — self-hosted, or a managed provider (QuickNode, Blockdaemon, Chainstack)?
  3. Is -txindex enabled? Many “look up arbitrary transaction” features silently depend on it.
  4. What is our confirmation and reorg policy, and who owns idempotency on the write path?
  5. Who operates the node — our platform team, or a vendor under SLA? If “us,” has that been costed at roughly one terabyte of fast storage plus a sync window measured in days?
  6. Is the target stack a modern Laravel application? If yes, the bundle is out of scope by definition and we are really evaluating the client library.

Integration Approach

Stack fit. The bundle targets Symfony 2.x and PHP 5.5–7.x, with a Guzzle-era HTTP dependency that will conflict with anything contemporary. It does not fit a Laravel application, and it does not fit a Symfony 5/6/7 application either. The realistic pattern is to adopt the client library (nbobtc/bitcoind-php) or a maintained equivalent (denpa/php-bitcoinrpc, bitwasp/bitcoin for offline primitives), and re-implement the binding as a Laravel service provider or an autowired singleton. Do not install the bundle.

Migration path. Four steps, in order:

  1. Fork-and-own. Vendor the client into our repository or pin it and accept a fork. The bundle’s service definitions are trivial to reproduce; keeping an abandoned wrapper in the dependency graph buys nothing and complicates patching.
  2. Own the seam. Define our own narrow interface — something like BitcoinRpcClient with the handful of methods we actually call — and implement it against the vendor client. This is the single highest-value decision in the whole integration: it makes the vendor library swappable, the RPC surface auditable, and gives us one place to add logging, metrics, timeouts, and retry policy.
  3. Bind in the framework. One singleton registration in the Laravel container, configuration from environment or secret manager, a health-check endpoint, and a circuit breaker in front of the node.
  4. Retire the bundle name. The end state should contain zero references to nbobtc/bitcoind-bundle; the provenance lives in a commit message and a comment, nothing more.

Compatibility. Verify PHP syntax level, PSR autoloading, and Guzzle major version before anything else — these are the usual hard blockers. Then map every RPC call we intend to make against the node’s Core version and record the result. That mapping is the compatibility contract and should live in the repository, not in someone’s head.

Sequencing. Phase 0: regtest spike proving read paths and credential handling. Phase 1: interface plus adapter plus observability, still on regtest. Phase 2: node operations runbook and testnet rehearsal, including a deliberate reorg and a deliberate node restart. Phase 3: production read paths, with a managed-provider endpoint configured as a documented failover. Wallet and write paths, if needed at all, land in a later phase behind a separate review — they carry signing and fund-movement risk that should not ride in on a general-purpose integration.

Operational Impact

Maintenance. Assume zero upstream support and budget accordingly: roughly 0.1–0.2 FTE for dependency stewardship, plus a separate and larger allocation for node operations if the node is self-hosted. The client library is dormant; the bundle is dormant; issues will not be answered. When something breaks, the escalation path is reading the source.

Support. No vendor channel, no security advisory feed, no downstream community. The team needs working knowledge of Bitcoin Core’s RPC documentation and release notes — Core ships roughly every six months and RPC deprecations are the recurring surprise. Nominate an owner for “Core upgrade review” as a standing responsibility; this is the failure mode that bites teams two years in, not at launch.

Scaling. RPC is synchronous, one HTTP round trip per call, served by a bounded thread pool. Throughput ceilings come from rpcthreads and from the node’s own I/O long before they come from PHP. Mitigations, in order of cost-effectiveness: cache immutable lookups keyed by block height and txid (confirmed transactions never change below the reorg horizon); use JSON-RPC batching for bulk reads if the client exposes it; and scale reads horizontally only by adding nodes behind a proxy. Vertical scaling of a single node is the default and the limit.

Failure modes. Enumerate these in the runbook and alert on each:

  • Node in initial block download. RPC answers, balances are wrong, and the application looks healthy. Expose sync state and gate on it.
  • Disk exhaustion. The node dies rather than degrades; recovery means a reindex or a full re-sync measured in days. Alert well before capacity.
  • Missing -txindex. getrawtransaction fails for arbitrary txids — usually discovered in production.
  • Reorgs. Confirmation counts regress; anything derived from confirmations must tolerate this. Fix the confirmation policy up front.
  • Timeouts on large blocks. getblock on a full block can exceed default HTTP timeouts; set them deliberately.
  • Authentication drift. Rotated credentials, rpcauth, or cookie-file confusion produce opaque 401s.
  • Lagging replica. A second node behind a proxy may serve a stale tip and turn correct queries into errors.
  • Wallet locked or unencrypted. Signing paths fail at the worst moment. Only relevant if we take on write paths.

Ramp-up. A PHP developer is productive with the integration in one to two days, because the code is small. Productive with Bitcoin Core semantics — confirmations, reorgs, fee estimation, mempool policy, descriptor wallets — takes one to two weeks. Node operations is a distinct skill and should not be assumed to transfer; if nobody on the team has run a full node, the managed-provider option should be the default rather than the fallback.

Bottom line for the decision. The package is a code sample, not a dependency, and for a Laravel shop it is not even installable. Recommend approving the integration only as a fork-and-own pattern behind a first-party BitcoinRpcClient interface bound in a Laravel service provider, with a managed node provider as the default deployment and a self-hosted node as an explicit, separately costed option. The PHP work is small and low-risk; the node is where the product risk actually lives, and this assessment should be read that way.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core