Skip to content
Bitcoin sidechain module for Lotion and Coins (A Cosmos Bitcoin peg zone implementation)
Branch: master
Clone or download
Latest commit dacb595 May 11, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin Allow using genesis instead of GCI in signatory script Mar 3, 2019
src Fixed deposit relayer SPV node initialization May 10, 2019
test Updated integration tests May 10, 2019
.gitignore Added .nyc_output to .gitignore Jan 15, 2019
.travis.yml Added .travis.yml Jan 25, 2019
LICENSE Expanded README Feb 1, 2019 Edited design document Jan 18, 2019
index.js Added deposit transaction creation helper Jan 25, 2019
package-lock.json 1.6.3 May 11, 2019
package.json 1.6.3 May 11, 2019


Cosmos Bitcoin peg zone module for Lotion and coins

This module is currently under active development but works as a fully-functional prototype on top of Bitcoin testnet.

This module implements a simplified version of the "Proof-of-Stake Bitcoin Sidechains" design. It works by holding Bitcoin in a special script which is a multisig spendable by consensus of the validators of a Tendermint blockchain.

This module can be dropped in to any Lotion app to enable the chain to hold reserves of Bitcoin, accept deposits, or pay out withdrawals in a low-trust manner. In addition, it lets the chain timestamp itself on the Bitcoin blockchain, increasing security of the chain by utilizing Bitcoin's proof-of-work.


npm install bitcoin-peg

let app = lotion()

// create a token using `coins` to be pegged to Bitcoin
app.use('pbtc', coins({
  handlers: {
    bitcoin: bitcoin.coinsHandler('bitcoin')

// pick a Bitcoin (or testnet) block header to use as the checkpoint
let checkpoint = {
  version: 1073733632,
  prevHash: Buffer.from('0000000000000113d4262419a8aa3a4fe928c0ea81893a2d2ffee5258b2085d8', 'hex').reverse(),
  merkleRoot: Buffer.from('baa3bb3f4fb663bf6974831ff3d2c37479f471f1558447dfae92f146539f7d9f', 'hex').reverse(),
  timestamp: 1544602833,
  bits: 0x1a015269,
  nonce: 3714016562,
  height: 1447488

// keep track of the Bitcoin blockchain, and specify the route of the pegged token
app.use('bitcoin', bitcoin(checkpoint, 'pbtc'))

  .then((res) => console.log(res))
You can’t perform that action at this time.