SPV LiteClient Toolbox

SPV LiteClient Toolbox release makes scalable Bitcoin easy, cheap, useful for everyone

Bitcoin is taking another big step towards finally being the “peer-to-peer electronic cash system” that Satoshi Nakamoto proposed in 2008. The MVP release of “SPV LiteClient Toolbox”  on May 4, 2022, offers developers a set of tools called LibSV to make Bitcoin more scalable and useful to businesses looking to accept it for payments—without needing to maintain a complete history of the BSV blockchain.

SPV stands for “simplified payment verification.” Satoshi mentioned this as the most optimal solution for scaling and fast, secure payments in the original Bitcoin white paper. Rather than storing and monitoring the entire blockchain to verify if transactions are valid, businesses need only to check if block headers are valid. If the block header exists on-chain, then all transactions within it are valid too. However, doing this securely requires a way to provide them with this information, do it reliably, and still work whether all parties are connected to the internet at the same time or not.

Bitcoin has always had the ability to handle SPV functions, but until now there hasn’t been a full set of standards or a toolkit available for devs to implement the architecture in payment systems. That’s what LiteClient does. It can be used by any project dealing with Bitcoin payments, including merchants as well as wallets and exchanges.

SPV tools now ready for developers to try out

A detailed rundown of LiteClient’s components was presented at the CoinGeek Conference in New York City back in October 2021. Some, including Paymail, Peer Channels, mAPI and MinerID have existed for some time, and the BSV Technical Standards Committee has also produced a set of standards for Merkle Proofs and Transaction Ancestry.

LiteClient development team members Jad Wahab and Kapil Jain recently gave a briefing on the project’s readiness, and they have now announced an MVP ready for users to try out.

In years past, Bitcoin businesses (including blockchains that illegally utilize the Bitcoin transaction database, like BTC and BCH) have had to build their own systems to verify all their transactions. There have been “lots of proprietary solutions, mostly done in a hacky way,” Wahab said. BTC in particular had been handicapped with many artificial limits on transaction numbers, meaning most projects felt it necessary to run a “full node” (which in this case means one that keeps an always-updated record of the full blockchain, and all the transaction data it contains).

The LiteClient team had to build a lot of things from scratch, since some of the existing Javascript tools weren’t reliable enough and there was a lot of legacy code left over from the BTC and BCH years. Much of the team’s work has involved standardizing terminology, creating proper documentation, and building awareness, so developers know what’s available and how to use it. It won’t be necessary for “mom and pop” operations to use the toolkit; instead, it will be built into the Bitcoin services they use for payments.

Initial release for developer testing

The MVP for LiteClient Toolbox in this initial phase is aimed at existing developers in the BSV industry, as a way to get those in the ecosystem to “speak the same language” to make their projects more robust and scalable—and importantly, more interoperable. Once the BSV infrastructure is more robust and interoperable, the goal is to showcase its benefits to the wider digital asset industry without any risk of anything breaking as the blockchain scales indefinitely.

The LiteClient Toolbox includes the following components: Wallet, for managing key and unspent transaction output (UTXO); Block Headers Client, for collecting and maintaining up-to-date copy of the longest chain of block headers to be used for validating transactions; Direct Payment Protocol (DPP), which defines a standard language via API for senders and receivers of payments to communicate with each other and the rest of the Bitcoin SV network; Direct Payment Protocol Proxy (DP3),  which can be used for streamlining the payment process further as well as enabling additional features; and Paymail Server.

“The LiteClient Toolbox peripheral services facilitates a way for clients to speak to each other directly. The goal is to have direct payments and communications that can go from one peer to another, that remain cheap and robust at any scale,” Wahab said. Users can pick and choose which components to add, and may choose different configurations.

The team has focused mainly on writing tools in Golang; however, others are welcome to develop their own versions in whatever language they choose. Meanwhile, the Technical Standards Committee has standardized APIs and other functions to ensure anyone can communicate the same way.

In a statement, Bitcoin Association Managing Director Patrick Prinz said, “In line with BSV’s implementation of the original Bitcoin protocol design, this will finally enable genuine P2P and IP2IP transactions, unlocking a new universe of opportunities. The BSV blockchain continues to scale far beyond the capabilities of other protocols and traditional digital payment networks. We encourage wallet services, exchanges, and other application operators on the BSV network to become familiar with the LiteClient Toolbox and look to implement the components to boost their efficiency and realise Satoshi’s vision of a global, permissionless P2P electronic cash system.”

Watch: BSV Blockchain Association’s Director of Engineering Jad Wahab discusses the LiteClient Toolbox on CoinGeek Weekly Livestream

New to Bitcoin? Check out CoinGeek’s Bitcoin for Beginners section, the ultimate resource guide to learn more about Bitcoin—as originally envisioned by Satoshi Nakamoto—and blockchain.

[id^="_form"]
[id^="_form"]
[id$="_submit"]
[id$="_submit"]
[^;]
[^;]
[?&]
[?&]
[^&#]
[^&#]
[(d+)]
[(d+)]
[elem.name]
[elem.name]
[+_a-z0-9-'&=]
[+_a-z0-9-'&=]
[+_a-z0-9-']
[+_a-z0-9-']
[a-z0-9-]
[a-z0-9-]
[a-z]
[a-z]
[el.name]
[el.name]
[id^="_form"]
[id^="_form"]
[id$="_submit"]
[id$="_submit"]
[^;]
[^;]
[?&]
[?&]
[^&#]
[^&#]
[(d+)]
[(d+)]
[elem.name]
[elem.name]
[+_a-z0-9-'&=]
[+_a-z0-9-'&=]
[+_a-z0-9-']
[+_a-z0-9-']
[a-z0-9-]
[a-z0-9-]
[a-z]
[a-z]
[el.name]
[el.name]