A Plugin Framework for Litecoin Qt

Introduction

Litecoin provides an infrastructure for efficient payments and immutable data storage. While the infrastructure itself is revolutionary, we are still far from unleashing its full potential. Many more applications can be built around Litecoin. In order to facilitate easier application development and adoption, I propose a plugin framework based on the existing Litecoin Qt program.

Litecoin Qt is an “official” full Litecoin node with an easy to use graphical user interface (GUI) that can be used by those who are not technically savvy. It mainly functions as a Litecoin wallet to send and receive Litecoins.

As a wallet, Litecoin Qt does not really provide much advantage compared with lightweight wallets like Electrum-LTC. However, Litecoin Qt is the only available Litecoin full node with a nice GUI, and these properties make Litecoin Qt the ideal platform for supporting a plugin framework to host applications because many applications will need Litecoin blockchain data and an easy to use graphical interface to be suitable for normal users.

I list a few interesting example applications here and hope these will stimulate more ideas.

Example Applications

USDT

USDT is a token on top of Bitcoin blockchain and backed by USD. It is used by some major exchanges like Poloniex and Bitfinex. Technically, all data related to the token is stored on Bitcoin blockchain using OP_RETURN transactions. However, it is obvious that Litecoin is much more suitable for this job because of its much lower transaction fee and faster confirmation.

While USDT makes USD much more usable on the Internet, it does not really have an easy to use wallet. I think a plugin for Litecoin Qt that scans OP_RETURN data and finds USDT related transactions and makes OP_RETURN transactions to send USDT can become an easy to use wallet.

Many similar plugins depending on OP_RETURN transactions can be built. For example, a plugin can be used to send holiday (e.g. Valentine’s day) wishes to the Litecoin blockchain, which thus lasts as long as Litecoin itself.

Efficient and decentralized CoinJoin

CoinJoin is an effective way for providing fungibility and anonymity to Litecoin users. CoinJoin services for Bitcoin are already available through centralized websites like https://bitmixer.io/ or decentralized standalone programs like GitHub - JoinMarket-Org/joinmarket: CoinJoin implementation with incentive structure to convince people to take part. While a decentralized program provides better anonymity and security, it incurs a cumbersome downloading and installation process, limiting its usage.

Compared with a standalone program, a CoinJoin plugin on Litecoin Qt is more available and much easier to install and use. Litecoins can be easily transferred from the Litecoin Qt wallet to the CoinJoin network for mixing and back to other addresses in the wallet with just one click.

Another advantage of making such a CoinJoin function a plugin instead of part of Litecoin Qt itself is that a plugin avoids potential legal issues. Some governments could potentially ban coins that provide complete anonymity within their protocol. Such a plugin avoids this issue and provides good anonymity and also keeps the Litecoin protocol simple.

Easier service consumption

Service providers like music streaming companies can provide plugins for users to easily pay for their services. Registration is not needed, and authentication can be done by automatically signing a token provided by the service provider using an address’ private key in the wallet. Payments can be finished by simply clicking one button, and then Litecoins will be transferred to the service provider.

Implementation

Implementation of such a plugin framework requires a capable and secure plugin language. A good candidate is Lua. Lua is a widely used plugin language because of its easiness to embed, fast execution, and short learning curve.

Communication between the plugins and Litecoin Qt can be done through either Litecoin Qt’s standard RPCs or C++ APIs specifically exposed by the plugin framework.

In order to forbidden plugins stealing wallets, plugins need to be sandboxed so that visiting local file systems (excluding locations for temporary files) should be disabled. While this is difficult for many script languages including Python, Lua can achieve it relatively easily. Beside that, only open source plugins shall be trusted until we have enough confidence on the framework’s security.

This gives an example application with Lua plugins: Extending an Application with Lua Plugins. A Lua plugin for Litecoin Qt should be similar.